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