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); }
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); }