Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ EmitNewHoistedLocals()

void System.Linq.Expressions.Compiler.CompilerScope.EmitNewHoistedLocals ( LambdaCompiler lc)
inlineprivate

Definition at line 384 of file CompilerScope.cs.

385 {
386 if (_hoistedLocals == null)
387 {
388 return;
389 }
390 lc.IL.EmitPrimitive(_hoistedLocals.Variables.Count);
391 lc.IL.Emit(OpCodes.Newarr, typeof(object));
392 int num = 0;
393 foreach (ParameterExpression variable in _hoistedLocals.Variables)
394 {
395 lc.IL.Emit(OpCodes.Dup);
396 lc.IL.EmitPrimitive(num++);
397 Type type = typeof(StrongBox<>).MakeGenericType(variable.Type);
398 int index;
399 if (IsMethod && (index = lc.Parameters.IndexOf(variable)) >= 0)
400 {
401 lc.EmitLambdaArgument(index);
402 lc.IL.Emit(OpCodes.Newobj, type.GetConstructor(new Type[1] { variable.Type }));
403 }
405 {
407 lc.IL.Emit(OpCodes.Newobj, type.GetConstructor(new Type[1] { variable.Type }));
408 }
409 else
410 {
411 lc.IL.Emit(OpCodes.Newobj, type.GetConstructor(Type.EmptyTypes));
412 }
414 {
415 lc.IL.Emit(OpCodes.Dup);
417 }
418 lc.IL.Emit(OpCodes.Stelem_Ref);
419 }
421 }
void EmitSet(ParameterExpression variable)
Storage ResolveVariable(ParameterExpression variable)
void CacheBoxToLocal(LambdaCompiler lc, ParameterExpression v)
bool ShouldCache(ParameterExpression v, int refCount)
readonly ParameterExpression SelfVariable
readonly ReadOnlyCollection< ParameterExpression > Variables
static readonly OpCode Newobj
Definition OpCodes.cs:233
static readonly OpCode Stelem_Ref
Definition OpCodes.cs:323
static readonly OpCode Dup
Definition OpCodes.cs:77
static readonly OpCode Newarr
Definition OpCodes.cs:281

References System.Linq.Expressions.Compiler.CompilerScope._closureHoistedLocals, System.Linq.Expressions.Compiler.CompilerScope._hoistedLocals, System.Linq.Expressions.Compiler.CompilerScope.CacheBoxToLocal(), System.Collections.ObjectModel.ReadOnlyCollection< T >.Count, System.Reflection.Emit.OpCodes.Dup, System.Linq.Expressions.Compiler.CompilerScope.Storage.EmitLoad(), System.Linq.Expressions.Compiler.CompilerScope.EmitSet(), System.Type.EmptyTypes, System.Linq.index, System.Linq.Expressions.Compiler.CompilerScope.IsMethod, System.Reflection.Emit.OpCodes.Newarr, System.Reflection.Emit.OpCodes.Newobj, System.Linq.Expressions.Compiler.HoistedLocals.ParentVariable, System.Linq.Expressions.Compiler.CompilerScope.ResolveVariable(), System.Linq.Expressions.Compiler.HoistedLocals.SelfVariable, System.Linq.Expressions.Compiler.CompilerScope.ShouldCache(), System.Reflection.Emit.OpCodes.Stelem_Ref, System.type, and System.Linq.Expressions.Compiler.HoistedLocals.Variables.

Referenced by System.Linq.Expressions.Compiler.CompilerScope.Enter().