Exemplo n.º 1
0
        public override SucoExpression Optimize(SucoEnvironment env, int?[] givens)
        {
            var valueExpr = ValueExpression.Optimize(env, givens);
            var innerExpr = InnerExpression.Optimize(env.DeclareVariable(VariableName, valueExpr is SucoConstant c ? c.Value : null), givens);

            return(innerExpr is SucoConstant ? innerExpr : new SucoLetExpression(StartIndex, EndIndex, VariableName, valueExpr, innerExpr, Type));
        }
Exemplo n.º 2
0
        public override SucoExpression Optimize(SucoEnvironment env, int?[] givens)
        {
            var optimized = Expression.Optimize(env, givens);

            return(optimized is SucoConstant c
                ? new SucoConstant(StartIndex, EndIndex, Type, optimized.Type.InterpretImplicitConversionTo(Type, c.Value))
                : new SucoImplicitConversionExpression(StartIndex, EndIndex, optimized, Type));
        }
Exemplo n.º 3
0
        public override SucoExpression Optimize(SucoEnvironment env, int?[] givens)
        {
            var optimizedOperand = Operand.Optimize(env, givens);

            return(optimizedOperand is SucoConstant c
                ? new SucoConstant(StartIndex, EndIndex, Type, Operand.Type.InterpretUnaryOperator(Operator, c))
                : new SucoUnaryOperatorExpression(StartIndex, EndIndex, optimizedOperand, Operator, Type));
        }
Exemplo n.º 4
0
        public override SucoExpression Optimize(SucoEnvironment env, int?[] givens)
        {
            var left  = Left.Optimize(env, givens);
            var right = Right.Optimize(env, givens);

            return(left is SucoConstant cl && right is SucoConstant cr
                ? new SucoConstant(StartIndex, EndIndex, Type, left.Type.InterpretBinaryOperator(cl.Value, Operator, right.Type, cr.Value))
                : new SucoBinaryOperatorExpression(StartIndex, EndIndex, left, right, Operator, Type));
        }
Exemplo n.º 5
0
 public SucoEnvironment DecodeValues(string variablesJson)
 {
     if (_valuesCache == null || _valuesCacheVariables != variablesJson)
     {
         _valuesCacheVariables = variablesJson;
         _valuesCache          = ZingaUtil.ConvertVariableValues(JsonDict.Parse(variablesJson), JsonDict.Parse(ValuesJson));
     }
     return(_valuesCache);
 }
Exemplo n.º 6
0
        public override SucoExpression Optimize(SucoEnvironment env, int?[] givens)
        {
            var conditionOpt = Condition.Optimize(env, givens);

            if (conditionOpt is SucoConstant c)
            {
                return(c.Equals(true) ? True.Optimize(env, givens) : False.Optimize(env, givens));
            }
            return(new SucoConditionalExpression(StartIndex, EndIndex, conditionOpt, True.Optimize(env, givens), False.Optimize(env, givens), Type));
        }
Exemplo n.º 7
0
 public override object Interpret(SucoEnvironment env, int?[] grid)
 {
     try
     {
         return(env.GetValue(Name));
     }
     catch (SucoTempCompileException tce)
     {
         throw new SucoCompileException(tce.Message, StartIndex, EndIndex);
     }
 }
Exemplo n.º 8
0
        public override SucoExpression Optimize(SucoEnvironment env, int?[] givens)
        {
            var optimizedOperand = Operand.Optimize(env, givens);

            if (optimizedOperand is SucoConstant c)
            {
                var val = optimizedOperand.Type.InterpretMemberAccess(MemberName, c.Value, env, givens);
                if (val != null)
                {
                    return(new SucoConstant(StartIndex, EndIndex, Type, val));
                }
            }
            return(new SucoMemberAccessExpression(StartIndex, EndIndex, optimizedOperand, MemberName, Type));
        }
Exemplo n.º 9
0
 public override object Interpret(SucoEnvironment env, int?[] grid) => InnerExpression.Interpret(env.DeclareVariable(VariableName, ValueExpression.Interpret(env, grid)), grid);
Exemplo n.º 10
0
        public override SucoExpression Optimize(SucoEnvironment env, int?[] givens)
        {
            var val = env.GetValue(Name);

            return(val == null ? this : new SucoConstant(StartIndex, EndIndex, Type, val));
        }
Exemplo n.º 11
0
        public override object Interpret(SucoEnvironment env, int?[] grid)
        {
            var result = Condition.Interpret(env, grid);

            return(result == null ? null : (bool)result ? True.Interpret(env, grid) : False.Interpret(env, grid));
        }
Exemplo n.º 12
0
 public override bool?Interpret(SucoEnvironment env, int?[] grid) => (bool?)Expression.Interpret(env, grid);
Exemplo n.º 13
0
 public override object Optimize(SucoEnvironment env, int?[] givens) => (bool?)(Expression.Optimize(env, givens) as SucoConstant)?.Value;
Exemplo n.º 14
0
 public override SucoExpression Optimize(SucoEnvironment env, int?[] givens) => new SucoConstant(StartIndex, EndIndex, SucoType.Boolean, LiteralValue);
Exemplo n.º 15
0
 public override object Interpret(SucoEnvironment env, int?[] grid) => Left.Type.InterpretBinaryOperator(Left.Interpret(env, grid), Operator, Right.Type, Right.Interpret(env, grid));
Exemplo n.º 16
0
 public override object Interpret(SucoEnvironment env, int?[] grid) => env.GetPosition(Name);
Exemplo n.º 17
0
 public override object Interpret(SucoEnvironment env, int?[] grid) => LiteralValue;
Exemplo n.º 18
0
 public override object Interpret(SucoEnvironment env, int?[] grid) => Operand.Type.InterpretUnaryOperator(Operator, Operand.Interpret(env, grid));
Exemplo n.º 19
0
 public override SucoExpression Optimize(SucoEnvironment env, int?[] givens) => new SucoConstant(StartIndex, EndIndex, Type, env.GetPosition(Name));
Exemplo n.º 20
0
 public override object Interpret(SucoEnvironment env, int?[] grid) => Operand.Type.InterpretMemberAccess(MemberName, Operand.Interpret(env, grid), env, grid);
Exemplo n.º 21
0
 public abstract bool?Interpret(SucoEnvironment env, int?[] grid);
Exemplo n.º 22
0
 public abstract object Optimize(SucoEnvironment env, int?[] givens);
Exemplo n.º 23
0
 public override SucoExpression Optimize(SucoEnvironment env, int?[] givens) => this;
Exemplo n.º 24
0
 public override object Interpret(SucoEnvironment env, int?[] grid) => Expression.Type.InterpretImplicitConversionTo(Type, Expression.Interpret(env, grid));