[pypy-svn] r67557 - in pypy/trunk/pypy: interpreter/test module/__builtin__
benjamin at codespeak.net
benjamin at codespeak.net
Mon Sep 7 15:23:21 CEST 2009
Author: benjamin
Date: Mon Sep 7 15:23:19 2009
New Revision: 67557
Modified:
pypy/trunk/pypy/interpreter/test/test_zzpickle_and_slow.py
pypy/trunk/pypy/module/__builtin__/functional.py
Log:
fix picking of reversed
Modified: pypy/trunk/pypy/interpreter/test/test_zzpickle_and_slow.py
==============================================================================
--- pypy/trunk/pypy/interpreter/test/test_zzpickle_and_slow.py (original)
+++ pypy/trunk/pypy/interpreter/test/test_zzpickle_and_slow.py Mon Sep 7 15:23:19 2009
@@ -369,7 +369,19 @@
result = pickle.loads(pckl)
raises(TypeError, len, diter)
assert list(diter) == list(result)
-
+
+ def test_pickle_reversed(self):
+ import pickle
+ r = reversed(tuple(range(10)))
+ r.next()
+ r.next()
+ pickled = pickle.dumps(r)
+ result = pickle.loads(pickled)
+ result.next()
+ r.next()
+ assert type(r) is type(result)
+ assert list(r) == list(result)
+
def test_pickle_enum(self):
import pickle
e = enumerate(range(10))
Modified: pypy/trunk/pypy/module/__builtin__/functional.py
==============================================================================
--- pypy/trunk/pypy/module/__builtin__/functional.py (original)
+++ pypy/trunk/pypy/module/__builtin__/functional.py Mon Sep 7 15:23:19 2009
@@ -437,11 +437,27 @@
raise OperationError(space.w_StopIteration, space.w_None)
descr_next.unwrap_spec = ["self", ObjSpace]
+ def descr___reduce__(self, space):
+ info_w = [self.w_sequence, space.wrap(self.remaining)]
+ w_info = space.newtuple(info_w)
+ return space.newtuple([space.wrap(_make_reversed), w_info])
+ descr___reduce__.unwrap_spec = ["self", ObjSpace]
+
W_ReversedIterator.typedef = TypeDef("reversed",
__iter__=interp2app(W_ReversedIterator.descr___iter__),
next=interp2app(W_ReversedIterator.descr_next),
+ __reduce__=interp2app(W_ReversedIterator.descr___reduce__),
)
+def _make_reversed(space, w_seq, w_remaining):
+ w_type = space.gettypeobject(W_ReversedIterator.typedef)
+ iterator = space.allocate_instance(W_ReversedIterator, w_type)
+ iterator.w_sequence = w_seq
+ iterator.remaining = space.int_w(w_remaining)
+ return space.wrap(iterator)
+_make_reversed.unwrap_spec = [ObjSpace, W_Root, W_Root]
+_make_reversed = interp2app(_make_reversed)
+
class W_XRange(Wrappable):
def __init__(self, space, start, len, step):
More information about the Pypy-commit
mailing list