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

Reply via email to