15 List<int> endJumps =
new List<int>();
18 context.Compile(branch.Key);
19 int endJump = context.EmitEmpty();
21 context.Compile(branch.Value);
22 context.Emit(
BadOpCode.DestroyScope, expression.Position);
23 context.ResolveEmpty(endJump,
BadOpCode.JumpRelativeIfFalse, expression.Position, context.InstructionCount - endJump);
24 endJumps.Add(context.EmitEmpty());
27 if (expression.ElseBranch !=
null)
30 context.Compile(expression.ElseBranch);
31 context.Emit(
BadOpCode.DestroyScope, expression.Position);
34 foreach (
int endJump
in endJumps)
36 int rel = context.InstructionCount - (endJump + 1);
39 context.ResolveEmpty(endJump,
BadOpCode.JumpRelative, expression.Position, rel);
43 context.ResolveEmpty(endJump,
BadOpCode.Nop, expression.Position,
"OPTIMIZED_JUMP_REMOVAL");