22 int setBreakInstruction = context.
EmitEmpty();
29 List<int> caseBodyJumps =
new List<int>();
32 caseEndJumps =
new List<int>();
36 context.Emit(
BadOpCode.Dup, expression.Position);
37 context.Compile(@
case.Key);
38 context.Emit(
BadOpCode.Equals, expression.Position);
40 if (@
case.Value.Length > 0)
47 foreach (
int caseBodyJump
in caseBodyJumps)
49 context.ResolveEmpty(caseBodyJump,
52 context.InstructionCount - caseBodyJump - 1
56 caseBodyJumps.Clear();
57 context.Compile(@
case.Value,
false);
60 context.ResolveEmpty(endJump,
63 context.InstructionCount - endJump
65 caseEndJumps.Add(context.EmitEmpty());
71 caseBodyJumps.Add(context.EmitEmpty());
76 foreach (
int caseBodyJump
in caseBodyJumps)
78 context.ResolveEmpty(caseBodyJump,
81 context.InstructionCount - caseBodyJump - 1
85 caseBodyJumps.Clear();
87 if (expression.DefaultCase !=
null)
89 context.Compile(expression.DefaultCase,
false);
93 foreach (
int caseEndJump
in caseEndJumps)
95 context.ResolveEmpty(caseEndJump,
98 context.InstructionCount - caseEndJump - 1
102 context.ResolveEmpty(setBreakInstruction,
105 context.InstructionCount - switchScopeStart
107 context.Emit(
BadOpCode.DestroyScope, expression.Position);