[pypy-commit] pypy Opcode-class: Resolve names at decoding time
rlamy
noreply at buildbot.pypy.org
Sat May 4 02:05:51 CEST 2013
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: Opcode-class
Changeset: r63840:d3207d87d828
Date: 2013-05-02 17:04 +0100
http://bitbucket.org/pypy/pypy/changeset/d3207d87d828/
Log: Resolve names at decoding time
diff --git a/rpython/flowspace/bytecode.py b/rpython/flowspace/bytecode.py
--- a/rpython/flowspace/bytecode.py
+++ b/rpython/flowspace/bytecode.py
@@ -139,6 +139,8 @@
if opnum in opcode.hasjrel:
oparg += next_instr
+ elif opnum in opcode.hasname:
+ oparg = self.names[oparg]
try:
op = Opcode.num2op[opnum].decode(oparg, pos, self)
except KeyError:
diff --git a/rpython/flowspace/flowcontext.py b/rpython/flowspace/flowcontext.py
--- a/rpython/flowspace/flowcontext.py
+++ b/rpython/flowspace/flowcontext.py
@@ -595,12 +595,6 @@
def getlocalvarname(self, index):
return self.pycode.co_varnames[index]
- def getname_u(self, index):
- return self.pycode.names[index]
-
- def getname_w(self, index):
- return Constant(self.pycode.names[index])
-
def BAD_OPCODE(self, _):
raise FlowingError(self, "This operation is not RPython")
@@ -674,17 +668,16 @@
operror = space.exc_from_raise(w_type, w_value)
raise operror
- def IMPORT_NAME(self, nameindex):
+ def IMPORT_NAME(self, modulename):
space = self.space
- modulename = self.getname_u(nameindex)
glob = space.unwrap(self.w_globals)
fromlist = space.unwrap(self.popvalue())
level = self.popvalue().value
w_obj = space.import_name(modulename, glob, None, fromlist, level)
self.pushvalue(w_obj)
- def IMPORT_FROM(self, nameindex):
- w_name = self.getname_w(nameindex)
+ def IMPORT_FROM(self, name):
+ w_name = Constant(name)
w_module = self.peekvalue()
self.pushvalue(self.space.import_from(w_module, w_name))
@@ -867,15 +860,15 @@
w_const = self.space.wrap(const)
self.pushvalue(w_const)
- def LOAD_GLOBAL(self, nameindex):
- w_result = self.space.find_global(self.w_globals, self.getname_u(nameindex))
+ def LOAD_GLOBAL(self, name):
+ w_result = self.space.find_global(self.w_globals, name)
self.pushvalue(w_result)
LOAD_NAME = LOAD_GLOBAL
- def LOAD_ATTR(self, nameindex):
+ def LOAD_ATTR(self, name):
"obj.attributename"
w_obj = self.popvalue()
- w_attributename = self.getname_w(nameindex)
+ w_attributename = Constant(name)
w_value = self.space.getattr(w_obj, w_attributename)
self.pushvalue(w_value)
LOOKUP_METHOD = LOAD_ATTR
@@ -888,8 +881,7 @@
assert w_newvalue is not None
self.locals_stack_w[varindex] = w_newvalue
- def STORE_GLOBAL(self, nameindex):
- varname = self.getname_u(nameindex)
+ def STORE_GLOBAL(self, varname):
raise FlowingError(self,
"Attempting to modify global variable %r." % (varname))
@@ -989,9 +981,9 @@
fn = self.space.newfunction(w_codeobj, self.w_globals, defaults)
self.pushvalue(fn)
- def STORE_ATTR(self, nameindex):
+ def STORE_ATTR(self, name):
"obj.attributename = newvalue"
- w_attributename = self.getname_w(nameindex)
+ w_attributename = Constant(name)
w_obj = self.popvalue()
w_newvalue = self.popvalue()
self.space.setattr(w_obj, w_attributename, w_newvalue)
More information about the pypy-commit
mailing list