public IExpression Evaluate <T, U>(IBinaryExpression <T, U> ex, IContext context) { IBinaryFunctionExpression <T, U> TheFunction = ex.Function; ILiteralExpression <T> literalLeft = this.get <T>(ex.Left, this, context); ILiteralExpression <T> literalRight = this.get <T>(ex.Right, this, context); ILiteralBinaryFunctionExpression <T, U> literalBinaryFunction = this.get <T, U>(ex.Function, this, context); return(literalBinaryFunction.Invoke(literalLeft.Item, literalRight.Item)); }
private ILiteralBinaryFunctionExpression <T, U> get <T, U>(IBinaryFunctionExpression <T, U> expression, IEvaluator ev, IContext context) { IFunctionExpression <T, U> ex = expression; while (!ex.IsLiteral) { ex = ex.Evaluate(this, context); } return(ex as ILiteralBinaryFunctionExpression <T, U>); }