Esempio n. 1
0
 def register_backpatch(self, lastendcodeindex, lastendaddress):
     op = self.ops[0]
     self.ops = self.ops[1:]
     return (
         lastendcodeindex,
         assembling.assemble_instruction(op, self.firstendaddress)
     )
Esempio n. 2
0
 def register_backpatch(self, lastendcodeindex, lastendaddress):
     return (
         self.firstendcodeindex,
         assembling.assemble_instruction(
             self.opcode,
             lastendaddress - self.firstendaddress - 3
         )
     )
Esempio n. 3
0
    def compile(self):
        code_object = self.newblock.as_code_object()
        mycode = []

        # if a nested scope, load the cells for the cellvars
        for freevar in code_object.co_freevars:
            mycode.append(('LOAD_CLOSURE', self.find_cell(freevar)))
        # this might have affected maxstacklevel (not necessarily, of course)
        self.oldblock.maxstacklevel += len(code_object.co_freevars)

        mycode.append(('LOAD_CONST', self.oldblock.add_constant(code_object)))

        if code_object.co_freevars:
            mycode.append(('MAKE_CLOSURE', self.numdefaults))
        else:
            mycode.append(('MAKE_FUNCTION', self.numdefaults))
        self.code = ''.join(
            [assembling.assemble_instruction(*t) for t in mycode]
        )
Esempio n. 4
0
 def prepare(self, block, index):
     return assembling.assemble_instruction(*self.getop(block, index))
Esempio n. 5
0
 def prepare(self, block, index):
     if self.is_unqualified \
     and (len(block.cellvars) > 0 or len(block.freevars) > 0):
         raise NoodleSyntaxError("Unqualified exec disallowed when "
                                 "cell or free variables are in scope")
     return assembling.assemble_instruction('EXEC_STMT')