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