private ValueExpression EvaluateBinaryExpression(IExpression expr)
        {
            BinaryExpression binaryExpr = (BinaryExpression)expr;
            ValueExpression  leftExpr   = Visit(binaryExpr.Left);
            ValueExpression  rightExpr  = Visit(binaryExpr.Right);

            double result = _context.EvaluateBinary(binaryExpr.OperatorName, leftExpr.Value, rightExpr.Value);

            return(new ValueExpression(result));
        }
Example #2
0
        private IExpression OptimizeBinaryExpression(IExpression expr)
        {
            BinaryExpression binaryExpr = (BinaryExpression)expr;
            IExpression      leftExpr   = Visit(binaryExpr.Left);
            IExpression      rightExpr  = Visit(binaryExpr.Right);

            if (leftExpr is ValueExpression leftValue && rightExpr is ValueExpression rightValue)
            {
                double result = _context.EvaluateBinary(binaryExpr.OperatorName, leftValue.Value, rightValue.Value);
                return(new ValueExpression(result));
            }

            return(new BinaryExpression(leftExpr, binaryExpr.OperatorName, rightExpr));
        }