[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