internal override Expression Emit(List <TranslatorResult> propertyReaders)
            {
                // Create expression of the form:
                // _initExpression(children)

                // create member bindings (where values are taken from children)
                var memberBindings         = new MemberBinding[_initExpression.Bindings.Count];
                var constantMemberBindings = new MemberBinding[memberBindings.Length];

                for (var i = 0; i < memberBindings.Length; i++)
                {
                    var           originalBinding = _initExpression.Bindings[i];
                    var           value           = propertyReaders[i].UnwrappedExpression;
                    MemberBinding newBinding      = Expression.Bind(originalBinding.Member, value);
                    MemberBinding constantBinding = Expression.Bind(
                        originalBinding.Member, Expression.Constant(
                            TypeSystem.GetDefaultValue(value.Type), value.Type));
                    memberBindings[i]         = newBinding;
                    constantMemberBindings[i] = constantBinding;
                }

                Expression newProjection = Expression.MemberInit(_initExpression.NewExpression, memberBindings);

                // Indicate that this expression is provided by the user and should not be trusted.
                return(Expression.Call(UserExpressionMarker.MakeGenericMethod(newProjection.Type), newProjection));
            }
Exemple #2
0
            internal override Expression Emit(List <TranslatorResult> propertyReaders)
            {
                // Create expression of the form:
                // _initExpression(children)

                // create member bindings (where values are taken from children)
                var memberBindings         = new MemberBinding[_initExpression.Bindings.Count];
                var constantMemberBindings = new MemberBinding[memberBindings.Length];

                for (var i = 0; i < memberBindings.Length; i++)
                {
                    var           originalBinding = _initExpression.Bindings[i];
                    var           value           = propertyReaders[i].UnwrappedExpression;
                    MemberBinding newBinding      = Expression.Bind(originalBinding.Member, value);
                    MemberBinding constantBinding = Expression.Bind(
                        originalBinding.Member, Expression.Constant(
                            TypeSystem.GetDefaultValue(value.Type), value.Type));
                    memberBindings[i]         = newBinding;
                    constantMemberBindings[i] = constantBinding;
                }

                return(Expression.MemberInit(_initExpression.NewExpression, memberBindings));
            }
 internal override Expression Emit(List <TranslatorResult> propertyReaders)
 {
     MemberBinding[] memberBindingArray1 = new MemberBinding[this._initExpression.Bindings.Count];
     MemberBinding[] memberBindingArray2 = new MemberBinding[memberBindingArray1.Length];
     for (int index = 0; index < memberBindingArray1.Length; ++index)
     {
         MemberBinding binding             = this._initExpression.Bindings[index];
         Expression    unwrappedExpression = propertyReaders[index].UnwrappedExpression;
         MemberBinding memberBinding1      = (MemberBinding)Expression.Bind(binding.Member, unwrappedExpression);
         MemberBinding memberBinding2      = (MemberBinding)Expression.Bind(binding.Member, (Expression)Expression.Constant(TypeSystem.GetDefaultValue(unwrappedExpression.Type), unwrappedExpression.Type));
         memberBindingArray1[index] = memberBinding1;
         memberBindingArray2[index] = memberBinding2;
     }
     return((Expression)Expression.MemberInit(this._initExpression.NewExpression, memberBindingArray1));
 }