public Expression SetValue(Compiler compiler, Expression rhs) { ParameterExpression left = Expression.Variable(rhs.Type); int count = this.ArrayLiteral.Elements.Count; List <Expression> expressions = new List <Expression> { Expression.Assign(left, rhs) }; for (int i = 0; i < count; i++) { Expression expression2 = Expression.Call(left, CachedReflectionInfo.IList_get_Item, new Expression[] { ExpressionCache.Constant(i) }); ExpressionAst ast = this.ArrayLiteral.Elements[i]; ArrayLiteralAst pureExpression = ast as ArrayLiteralAst; if (ast is ParenExpressionAst) { pureExpression = ((ParenExpressionAst)ast).Pipeline.GetPureExpression() as ArrayLiteralAst; } if (pureExpression != null) { expression2 = Expression.Dynamic(PSArrayAssignmentRHSBinder.Get(pureExpression.Elements.Count), typeof(IList), expression2); } expressions.Add(compiler.ReduceAssignment((ISupportsAssignment)ast, TokenKind.Equals, expression2)); } expressions.Add(left); return(Expression.Block(new ParameterExpression[] { left }, expressions)); }
internal static PSArrayAssignmentRHSBinder Get(int i) { PSArrayAssignmentRHSBinder pSArrayAssignmentRHSBinder; lock (PSArrayAssignmentRHSBinder._binders) { while (PSArrayAssignmentRHSBinder._binders.Count <= i) { PSArrayAssignmentRHSBinder._binders.Add(null); } PSArrayAssignmentRHSBinder item = PSArrayAssignmentRHSBinder._binders[i]; PSArrayAssignmentRHSBinder pSArrayAssignmentRHSBinder1 = item; if (item == null) { PSArrayAssignmentRHSBinder pSArrayAssignmentRHSBinder2 = new PSArrayAssignmentRHSBinder(i); PSArrayAssignmentRHSBinder pSArrayAssignmentRHSBinder3 = pSArrayAssignmentRHSBinder2; PSArrayAssignmentRHSBinder._binders[i] = pSArrayAssignmentRHSBinder2; pSArrayAssignmentRHSBinder1 = pSArrayAssignmentRHSBinder3; } pSArrayAssignmentRHSBinder = pSArrayAssignmentRHSBinder1; } return(pSArrayAssignmentRHSBinder); }
internal static PSArrayAssignmentRHSBinder Get(int i) { PSArrayAssignmentRHSBinder pSArrayAssignmentRHSBinder; lock (PSArrayAssignmentRHSBinder._binders) { while (PSArrayAssignmentRHSBinder._binders.Count <= i) { PSArrayAssignmentRHSBinder._binders.Add(null); } PSArrayAssignmentRHSBinder item = PSArrayAssignmentRHSBinder._binders[i]; PSArrayAssignmentRHSBinder pSArrayAssignmentRHSBinder1 = item; if (item == null) { PSArrayAssignmentRHSBinder pSArrayAssignmentRHSBinder2 = new PSArrayAssignmentRHSBinder(i); PSArrayAssignmentRHSBinder pSArrayAssignmentRHSBinder3 = pSArrayAssignmentRHSBinder2; PSArrayAssignmentRHSBinder._binders[i] = pSArrayAssignmentRHSBinder2; pSArrayAssignmentRHSBinder1 = pSArrayAssignmentRHSBinder3; } pSArrayAssignmentRHSBinder = pSArrayAssignmentRHSBinder1; } return pSArrayAssignmentRHSBinder; }