示例#1
0
 def STORE_DEREF(f, varindex, *ignored):
     # nested scopes: access a variable through its cell object
     w_newvalue = f.popvalue()
     # try:
     cell = f.cells[varindex]
     # except IndexError:
     #    import pdb; pdb.set_trace()
     #    raise
     namecheck_store(f, w_newvalue)  # SRW
     cell.set(w_newvalue)
示例#2
0
 def MAKE_CLOSURE(f, numdefaults, *ignored):
     w_codeobj = f.popvalue()
     codeobj = f.space.interp_w(pycode.PyCode, w_codeobj)
     if codeobj.magic >= 0xA0DF281:  # CPython 2.5 AST branch merge
         w_freevarstuple = f.popvalue()
         freevars = [f.space.interp_w(Cell, cell) for cell in f.space.viewiterable(w_freevarstuple)]
     else:
         nfreevars = len(codeobj.co_freevars)
         freevars = [f.space.interp_w(Cell, f.popvalue()) for i in range(nfreevars)]
         freevars.reverse()
     defaultarguments = [f.popvalue() for i in range(numdefaults)]
     defaultarguments.reverse()
     fn = function.Function(
         f.space,
         codeobj,
         f.w_globals,
         defaultarguments,
         freevars,
         creator_nametoken=f.space.finditem(f.w_globals, f.space.wrap(SLOTNAME_NAMETOKEN)),
     )
     w_fn = f.space.wrap(fn)
     namecheck_store(f, w_fn)
     f.pushvalue(w_fn)