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);
            }
        }