15 List<int> endJumps =
new List<int>();
19 context.Compile(branch.Key);
20 int endJump = context.EmitEmpty();
22 context.Compile(branch.Value);
23 context.Emit(
BadOpCode.DestroyScope, expression.Position);
25 context.ResolveEmpty(endJump,
28 context.InstructionCount - endJump
31 endJumps.Add(context.EmitEmpty()
35 if (expression.ElseBranch !=
null)
38 context.Compile(expression.ElseBranch);
39 context.Emit(
BadOpCode.DestroyScope, expression.Position);
42 foreach (
int endJump
in endJumps)
44 int rel = context.InstructionCount - (endJump + 1);
48 context.ResolveEmpty(endJump,
BadOpCode.JumpRelative, expression.Position, rel);
52 context.ResolveEmpty(endJump,
BadOpCode.Nop, expression.Position,
"OPTIMIZED_JUMP_REMOVAL");