public TypeBinderResult Bind(IVariableTypeProvider VariableTypeProvider, TextRange RangeInLine) { var Result = st.Translate(RangeInLine); var TypeDict = new Dictionary <Expr, PrimitiveType>(); BindExpr(VariableTypeProvider, TypeDict, Result.Semantics); var tbr = new TypeBinderResult { Semantics = Result.Semantics, TypeDict = TypeDict }; return(tbr); }
public TypeBinderResult Bind(IVariableTypeProvider VariableTypeProvider, PrimitiveType ReturnType, TextRange RangeInLine) { var Result = st.Translate(RangeInLine); var TypeDict = new Dictionary <Expr, PrimitiveType>(); BindExpr(VariableTypeProvider, TypeDict, Result.Semantics); var rt = TypeDict[Result.Semantics]; if (rt == PrimitiveType.Int && ReturnType == PrimitiveType.Real) { var feCReal = new FunctionExpr { Name = "creal", Parameters = new List <Expr> { Result.Semantics } }; var CReal = Expr.CreateFunction(feCReal); var Range = Positions[Result.Semantics]; Positions.Add(feCReal, Range); Positions.Add(CReal, Range); TypeDict.Add(CReal, PrimitiveType.Real); Result.Semantics = CReal; } else if (rt != ReturnType) { throw new InvalidSyntaxException("TypeMismatch : '{0}' expected.".Formats(GetTypeString(ReturnType)), new FileTextRange { Text = Text, Range = Positions[Result.Semantics] }); } var tbr = new TypeBinderResult { Semantics = Result.Semantics, TypeDict = TypeDict }; return(tbr); }