Esempio n. 1
0
        internal override Expression GetExpression(List <ParameterExpression> parameters, Dictionary <string, ConstantExpression> locals, List <DataContainer> dataContainers, Type dynamicContext, LabelTarget label, bool requiresReturnValue = true)
        {
            ExpressionType type = default(ExpressionType);

            switch (operation)
            {
            case Operator.Positive:
                return(value.GetExpression(parameters, locals, dataContainers, dynamicContext, label));

            case Operator.Negative:
                type = ExpressionType.Negate;
                break;

            case Operator.Not:
                type = ExpressionType.Not;
                break;
            }
            CallSiteBinder binder = Binder.UnaryOperation(CSharpBinderFlags.None, type, dynamicContext ?? typeof(object), new[] { CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) });

            return(Expression.Dynamic(binder, typeof(object), value.GetExpression(parameters, locals, dataContainers, dynamicContext, label)));
        }