def register_backpatch(self, lastendcodeindex, lastendaddress): op = self.ops[0] self.ops = self.ops[1:] return ( lastendcodeindex, assembling.assemble_instruction(op, self.firstendaddress) )
def register_backpatch(self, lastendcodeindex, lastendaddress): return ( self.firstendcodeindex, assembling.assemble_instruction( self.opcode, lastendaddress - self.firstendaddress - 3 ) )
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] )
def prepare(self, block, index): return assembling.assemble_instruction(*self.getop(block, index))
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')