Ejemplo n.º 1
0
    def emitCode(self, gen):
        from nine.codegenerator import CodeGenerator

        from ast.breakstatement import BreakStatement
        from ast.continuestatement import ContinueStatement

        startLabel = gen.ilGen.DefineLabel()
        loopLabel = gen.ilGen.DefineLabel()
        endLabel = gen.ilGen.DefineLabel()

        gen.ilGen.Emit(gen.opCodes.Br, startLabel)
        gen.ilGen.MarkLabel(loopLabel)

        miniGen = CodeGenerator(gen)
        miniGen.breakLabel = endLabel
        miniGen.continueLabel = startLabel
        self.block.emitCode(miniGen)

        gen.ilGen.MarkLabel(startLabel)
        self.arg.emitLoad(gen)
        gen.ilGen.Emit(gen.opCodes.Brtrue, loopLabel)
        gen.ilGen.MarkLabel(endLabel)