Author: Hakan Ardo <[email protected]>
Branch: step-one-xrange
Changeset: r55025:446e3d4d68e3
Date: 2012-05-11 07:37 +0200
http://bitbucket.org/pypy/pypy/changeset/446e3d4d68e3/
Log: Use a single TypeDef for both implementations to keep the lib-python
tests happy
diff --git a/pypy/module/__builtin__/functional.py
b/pypy/module/__builtin__/functional.py
--- a/pypy/module/__builtin__/functional.py
+++ b/pypy/module/__builtin__/functional.py
@@ -411,6 +411,9 @@
return self.space.wrap(self)
def descr_next(self):
+ return self.next()
+
+ def next(self):
if self.remaining > 0:
item = self.current
self.current = item + self.step
@@ -422,9 +425,6 @@
return self.space.wrap(self.remaining)
def descr_reduce(self):
- return self.reduce(self.remaining)
-
- def reduce(self, remaining):
from pypy.interpreter.mixedmodule import MixedModule
space = self.space
w_mod = space.getbuiltinmodule('_pickle_support')
@@ -433,9 +433,12 @@
w = space.wrap
nt = space.newtuple
- tup = [w(self.current), w(remaining), w(self.step)]
+ tup = [w(self.current), w(self.get_remaining()), w(self.step)]
return nt([new_inst, nt(tup)])
+ def get_remaining(self):
+ return self.remaining
+
W_XRangeIterator.typedef = TypeDef("rangeiterator",
__iter__ = interp2app(W_XRangeIterator.descr_iter),
# XXX __length_hint__()
@@ -451,20 +454,12 @@
self.stop = stop
self.step = 1
- def descr_next(self):
+ def next(self):
if self.current < self.stop:
item = self.current
self.current = item + 1
return self.space.wrap(item)
raise OperationError(self.space.w_StopIteration, self.space.w_None)
- def descr_reduce(self):
- return self.reduce(self.stop - self.current)
-
-
-
-W_XRangeStepOneIterator.typedef = TypeDef("xrangesteponeiterator",
- __iter__ = interp2app(W_XRangeStepOneIterator.descr_iter),
- next = interp2app(W_XRangeStepOneIterator.descr_next),
- __reduce__ = interp2app(W_XRangeStepOneIterator.descr_reduce),
-)
+ def get_remaining(self):
+ return self.stop - self.current
diff --git a/pypy/module/__builtin__/test/test_functional.py
b/pypy/module/__builtin__/test/test_functional.py
--- a/pypy/module/__builtin__/test/test_functional.py
+++ b/pypy/module/__builtin__/test/test_functional.py
@@ -178,6 +178,11 @@
y = callable(*args)
assert list(y) == list(x)
+ def test_lib_python_xrange_optimization(self):
+ x = xrange(1)
+ assert type(reversed(x)) == type(iter(x))
+
+
class AppTestReversed:
def test_reversed(self):
r = reversed("hello")
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit