[pypy-svn] r58048 - pypy/branch/tuple-nonresizable-395/pypy/interpreter

fijal at codespeak.net fijal at codespeak.net
Wed Sep 10 19:24:18 CEST 2008


Author: fijal
Date: Wed Sep 10 19:24:16 2008
New Revision: 58048

Modified:
   pypy/branch/tuple-nonresizable-395/pypy/interpreter/pyframe.py
   pypy/branch/tuple-nonresizable-395/pypy/interpreter/pyopcode.py
Log:
Make two versions of frame.popvalues, one for tuple and one for list.


Modified: pypy/branch/tuple-nonresizable-395/pypy/interpreter/pyframe.py
==============================================================================
--- pypy/branch/tuple-nonresizable-395/pypy/interpreter/pyframe.py	(original)
+++ pypy/branch/tuple-nonresizable-395/pypy/interpreter/pyframe.py	Wed Sep 10 19:24:16 2008
@@ -152,15 +152,22 @@
             dic_w[key] = w_value
         return dic_w
 
-    def popvalues(self, n):
-        values_w = [None] * n
-        while True:
-            n -= 1
-            if n < 0:
-                break
-            hint(n, concrete=True)
-            values_w[n] = self.popvalue()
-        return values_w
+    # we need two popvalues that return different data types:
+    # one in case we want list another in case of tuple
+    def _new_popvalues():
+        def popvalues(self, n):
+            values_w = [None] * n
+            while True:
+                n -= 1
+                if n < 0:
+                    break
+                hint(n, concrete=True)
+                values_w[n] = self.popvalue()
+            return values_w
+        return popvalues
+    popvalues = _new_popvalues()
+    popvalues_mutable = _new_popvalues()
+    del _new_popvalues
 
     def peekvalues(self, n):
         values_w = [None] * n

Modified: pypy/branch/tuple-nonresizable-395/pypy/interpreter/pyopcode.py
==============================================================================
--- pypy/branch/tuple-nonresizable-395/pypy/interpreter/pyopcode.py	(original)
+++ pypy/branch/tuple-nonresizable-395/pypy/interpreter/pyopcode.py	Wed Sep 10 19:24:16 2008
@@ -678,7 +678,7 @@
         f.pushvalue(w_tuple)
 
     def BUILD_LIST(f, itemcount, *ignored):
-        items = f.popvalues(itemcount)
+        items = f.popvalues_mutable(itemcount)
         w_list = f.space.newlist(items)
         f.pushvalue(w_list)
 
@@ -904,7 +904,7 @@
     def MAKE_FUNCTION(f, numdefaults, *ignored):
         w_codeobj = f.popvalue()
         codeobj = f.space.interp_w(PyCode, w_codeobj)
-        defaultarguments = f.popvalues(numdefaults)
+        defaultarguments = f.popvalues_mutable(numdefaults)
         fn = function.Function(f.space, codeobj, f.w_globals, defaultarguments)
         f.pushvalue(f.space.wrap(fn))
 



More information about the Pypy-commit mailing list