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

◆ EmitSwitchBuckets()

void System.Linq.Expressions.Compiler.LambdaCompiler.EmitSwitchBuckets ( SwitchInfo info,
List< List< SwitchLabel > > buckets,
int first,
int last )
inlineprivate

Definition at line 3171 of file LambdaCompiler.cs.

3172 {
3173 while (first != last)
3174 {
3175 int num = (int)(((long)first + (long)last + 1) / 2);
3176 if (first == num - 1)
3177 {
3178 EmitSwitchBucket(info, buckets[first]);
3179 }
3180 else
3181 {
3183 _ilg.Emit(OpCodes.Ldloc, info.Value);
3184 EmitConstant(buckets[num - 1][^1].Constant);
3185 _ilg.Emit(info.IsUnsigned ? OpCodes.Bgt_Un : OpCodes.Bgt, label);
3186 EmitSwitchBuckets(info, buckets, first, num - 1);
3188 }
3189 first = num;
3190 }
3191 EmitSwitchBucket(info, buckets[first]);
3192 }
void EmitSwitchBuckets(SwitchInfo info, List< List< SwitchLabel > > buckets, int first, int last)
void EmitSwitchBucket(SwitchInfo info, List< SwitchLabel > bucket)
virtual void MarkLabel(Label loc)
virtual void Emit(OpCode opcode)
static readonly OpCode Bgt_Un
Definition OpCodes.cs:135
static readonly OpCode Ldloc
Definition OpCodes.cs:425

References System.Linq.Expressions.Compiler.LambdaCompiler._ilg, System.Reflection.Emit.OpCodes.Bgt, System.Reflection.Emit.OpCodes.Bgt_Un, System.Linq.Expressions.Constant, System.Reflection.Emit.ILGenerator.DefineLabel(), System.Reflection.Emit.ILGenerator.Emit(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitConstant(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitSwitchBucket(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitSwitchBuckets(), System.Linq.first, System.info, System.Reflection.Emit.OpCodes.Ldloc, and System.Reflection.Emit.ILGenerator.MarkLabel().

Referenced by System.Linq.Expressions.Compiler.LambdaCompiler.EmitSwitchBuckets(), and System.Linq.Expressions.Compiler.LambdaCompiler.TryEmitSwitchInstruction().