[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