public Set(Temp i, Expr x) : base(x.lexline) { t = i; Expr = x; if (!ReserveType.ConvertableT1T2(i.Type, x.Type)) { throw new TypeCovertException(lexline, Id.Type, Expr.Type); } }
public Set(Id i, Expr x) : base(x.lexline) { Id = i; Expr = x; Id.setInit(); if (!ReserveType.ConvertableT1T2(i.Type, x.Type)) { throw new TypeCovertException(lexline, Id.Type, Expr.Type); } }
public SetElem(Access x, Expr y) : base(x.lexline) { Array = x.array; Index = x.index; Expr = y; if (!ReserveType.ConvertableT1T2(y.Type, x.Type)) { throw new TypeCovertException(this.lexline, y.Type, x.Type); } }
public override void gen(int begin, int after) { if (Parent.Params.ReturnType != ReserveType.Void) { if (!ReserveType.ConvertableT1T2(Parent.Params.ReturnType, ReturnVal.Type)) { throw new TypeMisMatchException(this.lexline, ReturnVal.Type, Parent.Params.ReturnType.ToString()); } Temp t = new Temp(Parent.Params.ReturnType); CurrentGenerator.Temp(t); new Set(t, ReturnVal).gen(begin, after); CurrentGenerator.Return(t); } else { CurrentGenerator.Return(null); } //emitLabel(Parent.ExitLabel); }
public override bool check() { if (First.Type is Symbols.Array || Second.Type is Symbols.Array) { return(false); } else if (First.Type == Second.Type) { return(true); } else if (ReserveType.IsNumberic(First.Type) && ReserveType.IsNumberic(Second.Type)) { if (ReserveType.ConvertableT1T2(First.Type, Second.Type)) { return(true); } return(false); } else { return(false); } }