Exemplo n.º 1
0
        public Value EvalOnce(ICollection <Expression> instrs)
        {
            if (ImmediateValue != null)
            {
                return(this);
            }

            return(Dynamic(ExprUtil.EvalOnce(Expression, instrs), Type));
        }
Exemplo n.º 2
0
 public Expression CreateVariable(string name, Value value)
 {
     if (value.ImmediateValue != null)
     {
         values[name] = value;
         return(ExprUtil.Empty());
     }
     else
     {
         var variable = Value.Dynamic(
             type: value.Type,
             expression: Expression.Parameter(value.GetClrType(), name));
         values[name] = variable;
         return(Expression.Assign(variable.Expression, value.Expression));
     }
 }
Exemplo n.º 3
0
        public (Value success, Value cost, Value value) CompileCoerce(Value x, Value type)
        {
            if (AreEqual(x.Type, type) == true)
            {
                return(Value.Immediate(true), Value.Immediate(0), x);
            }

            // TODO: develop sophisticated Dijkstra-algorithm based user defined coercion system

            var        cost = Expression.Parameter(typeof(int), "cost");
            Expression e    = Expression.Call(typeof(RuntimeUtil).GetMethod("Coerce"), Expression.Convert(x.Expression, typeof(object)), type.Expression, cost);

            var instrs = new List <Expression>();

            e = ExprUtil.EvalOnce(e, instrs);
            return(Value.Seq(instrs, Value.Dynamic(Expression.NotEqual(cost, Expression.Constant(-1)))), Value.Dynamic(cost), Value.Dynamic(Expression.Convert(e, type.AsClrType())));
        }