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