Author: Ronan Lamy <[email protected]>
Branch: framestate
Changeset: r74666:306ae54ebe6c
Date: 2013-05-02 17:04 +0100
http://bitbucket.org/pypy/pypy/changeset/306ae54ebe6c/
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
@@ -108,6 +108,8 @@
if opnum in opcode.hasjrel:
oparg += next_offset
+ elif opnum in opcode.hasname:
+ oparg = self.names[oparg]
try:
op = BCInstruction.num2op[opnum].decode(oparg, offset, 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
@@ -521,12 +521,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 appcall(self, func, *args_w):
"""Call an app-level RPython function directly"""
w_func = const(func)
@@ -666,8 +660,7 @@
raise Raise(const(e))
return const(mod)
- def IMPORT_NAME(self, nameindex):
- modulename = self.getname_u(nameindex)
+ def IMPORT_NAME(self, modulename):
glob = self.w_globals.value
fromlist = self.popvalue().value
level = self.popvalue().value
@@ -683,8 +676,8 @@
exc = ImportError("cannot import name '%s'" % w_name.value)
raise Raise(const(exc))
- 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.import_from(w_module, w_name))
@@ -862,15 +855,15 @@
raise FlowingError("global name '%s' is not defined" % varname)
return const(value)
- def LOAD_GLOBAL(self, nameindex):
- w_result = self.find_global(self.w_globals, self.getname_u(nameindex))
+ def LOAD_GLOBAL(self, name):
+ w_result = self.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 = op.getattr(w_obj, w_attributename).eval(self)
self.pushvalue(w_value)
LOOKUP_METHOD = LOAD_ATTR
@@ -891,8 +884,7 @@
if isinstance(w_newvalue, Variable):
w_newvalue.rename(self.getlocalvarname(varindex))
- def STORE_GLOBAL(self, nameindex):
- varname = self.getname_u(nameindex)
+ def STORE_GLOBAL(self, varname):
raise FlowingError(
"Attempting to modify global variable %r." % (varname))
@@ -1006,9 +998,9 @@
fn = self.newfunction(w_codeobj, 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()
op.setattr(w_obj, w_attributename, w_newvalue).eval(self)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit