public static Binding From(ConstantExpression expression)
        {
            var ctor = (Func <object, Binding>)BindingCtors.For(
                typeof(ConstantBinding <>),
                expression.Type);

            return(ctor(expression.Value));
        }
        public static Binding From(ParameterExpression expression)
        {
            var ctor = (Func <Binding>)BindingCtors.For(
                typeof(ParameterBinding <>),
                expression.Type);

            return(ctor());
        }
Exemplo n.º 3
0
        private static Func <object, object, object, Binding> GetBindingCtor(BinaryExpression expression)
        {
            GetBindingTypeDefinition(expression, out var bindingType, out var bindingTypeArity);
            var ctor = bindingTypeArity == 3 ?
                       BindingCtors.For(bindingType, expression.Left.Type, expression.Right.Type, expression.Type) :
                       BindingCtors.For(bindingType, expression.Left.Type, expression.Right.Type);

            return((Func <object, object, object, Binding>)ctor);
        }
Exemplo n.º 4
0
        public static Binding From(UnaryExpression expression, Func <Expression, Binding> from)
        {
            var ctor = (Func <object, object, Binding>)BindingCtors.For(
                GetBindingTypeDefinition(expression),
                expression.Operand.Type,
                expression.Type);

            return(ctor(
                       from(expression.Operand),
                       Operators.For(expression)));
        }
Exemplo n.º 5
0
        public static Binding From(MemberExpression expression, Func <Expression, Binding> from)
        {
            var ctor = (Func <object, object, object, Binding>)BindingCtors.For(
                GetBindingType(expression),
                expression.Expression.Type,
                expression.Type);

            return(ctor(
                       from(expression.Expression),
                       expression.Member.Name,
                       Accessors.For(expression)));
        }