public void AddInstructions(LightCompiler compiler) { compiler.PushLabelBlock(LabelScopeKind.Block); var local = compiler.Locals.DefineLocal(_lastValue, compiler.Instructions.Count); var label = compiler.DefineLabel(_returnLabel); compiler.Compile(_body); compiler.Instructions.MarkLabel(label.GetLabel(compiler)); compiler.Locals.UndefineLocal(local, compiler.Instructions.Count); compiler.PopLabelBlock(LabelScopeKind.Block); }
public void AddInstructions(LightCompiler compiler) { EnterLoopInstruction enterLoopInstruction = null; compiler.PushLabelBlock(LabelScopeKind.Statement); foreach (Expression expression in this._exprs) { compiler.CompileAsVoid(expression); EnterLoopExpression expression2 = expression as EnterLoopExpression; if (expression2 != null) { enterLoopInstruction = expression2.EnterLoopInstruction; } } compiler.PopLabelBlock(LabelScopeKind.Statement); if (enterLoopInstruction != null) { enterLoopInstruction.FinishLoop(compiler.Instructions.Count); } }