Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros

◆ ReduceIndex()

Expression System.Linq.Expressions.UnaryExpression.ReduceIndex ( )
inlineprivate

Definition at line 143 of file UnaryExpression.cs.

144 {
145 bool isPrefix = IsPrefix;
146 IndexExpression indexExpression = (IndexExpression)Operand;
147 int argumentCount = indexExpression.ArgumentCount;
148 Expression[] array = new Expression[argumentCount + (isPrefix ? 2 : 4)];
149 ParameterExpression[] array2 = new ParameterExpression[argumentCount + (isPrefix ? 1 : 2)];
150 ParameterExpression[] array3 = new ParameterExpression[argumentCount];
151 int num = 0;
152 array2[num] = Expression.Parameter(indexExpression.Object.Type, null);
153 array[num] = Expression.Assign(array2[num], indexExpression.Object);
154 for (num++; num <= argumentCount; num++)
155 {
156 Expression argument = indexExpression.GetArgument(num - 1);
157 array3[num - 1] = (array2[num] = Expression.Parameter(argument.Type, null));
158 array[num] = Expression.Assign(array2[num], argument);
159 }
160 ParameterExpression instance = array2[0];
161 PropertyInfo? indexer = indexExpression.Indexer;
162 Expression[] list = array3;
163 indexExpression = Expression.MakeIndex(instance, indexer, new TrueReadOnlyCollection<Expression>(list));
164 if (!isPrefix)
165 {
166 ParameterExpression parameterExpression = (array2[num] = Expression.Parameter(indexExpression.Type, null));
167 array[num] = Expression.Assign(array2[num], indexExpression);
168 num++;
169 array[num++] = Expression.Assign(indexExpression, FunctionalOp(parameterExpression));
170 array[num++] = parameterExpression;
171 }
172 else
173 {
174 array[num++] = Expression.Assign(indexExpression, FunctionalOp(indexExpression));
175 }
177 }
static ParameterExpression Parameter(Type type)
UnaryExpression FunctionalOp(Expression operand)

References System.Linq.Expressions.IndexExpression.ArgumentCount, System.array, System.Linq.Expressions.Expression< TDelegate >.Assign(), System.Linq.Expressions.Expression< TDelegate >.Block(), System.Linq.Expressions.UnaryExpression.FunctionalOp(), System.Linq.Expressions.IndexExpression.GetArgument(), System.Linq.Expressions.IndexExpression.Indexer, System.Linq.Expressions.UnaryExpression.IsPrefix, System.list, System.Linq.Expressions.Expression< TDelegate >.MakeIndex(), System.Linq.Expressions.IndexExpression.Object, System.Linq.Expressions.UnaryExpression.Operand, System.Linq.Expressions.Expression< TDelegate >.Parameter(), System.Linq.Expressions.Expression< TDelegate >.Type, and System.Linq.Expressions.IndexExpression.Type.

Referenced by System.Linq.Expressions.UnaryExpression.Reduce().