Exemplo n.º 1
0
                public override INumericalEnvironmentDomain <BoxedVariable <TVar>, BoxedExpression> Entry
                    (APC pc, Method method,
                    INumericalEnvironmentDomain <BoxedVariable <TVar>, BoxedExpression> data)
                {
                    foreach (var param in MetaDataProvider.Parameters(method).AsEnumerable())
                    {
                        TVar variable;
                        var  readAt = ContextProvider.MethodContext.CFG.Post(pc);
                        if (!ContextProvider.ValueContext.TryParameterValue(readAt, param, out variable))
                        {
                            continue;
                        }

                        var abstractType = ContextProvider.ValueContext.GetType(readAt,
                                                                                variable);
                        if (abstractType.IsNormal() && MetaDataProvider.IsPrimitive(abstractType.Value))
                        {
                            data = SetInitialRange(variable, abstractType.Value, data);
                        }
                    }

                    return(data);
                }
Exemplo n.º 2
0
        public ExpressionType TypeOf(TExpr expr)
        {
            if (IsConstant(expr))
            {
                return(ExpressionContext.Decode <Dummy, ExpressionType, VisitorForTypeOf> (expr, type_of, Dummy.Value));
            }

            var abstractType = ExpressionContext.GetType(expr);

            if (abstractType.IsNormal())
            {
                var type = abstractType.Value;

                if (MetaDataProvider.IsPrimitive(type))
                {
                    if (MetaDataProvider.Equal(type, MetaDataProvider.System_Int32))
                    {
                        return(ExpressionType.Int32);
                    }
                    if (MetaDataProvider.Equal(type, MetaDataProvider.System_Single))
                    {
                        return(ExpressionType.Float32);
                    }
                    if (MetaDataProvider.Equal(type, MetaDataProvider.System_Double))
                    {
                        return(ExpressionType.Float64);
                    }
                    if (MetaDataProvider.Equal(type, MetaDataProvider.System_Boolean))
                    {
                        return(ExpressionType.Bool);
                    }
                }
            }

            return(ExpressionType.Unknown);
        }