Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }