[pypy-svn] r27833 - in pypy/dist/pypy: interpreter/test module/_pickle_support objspace/std
ericvrp at codespeak.net
ericvrp at codespeak.net
Mon May 29 12:13:26 CEST 2006
Author: ericvrp
Date: Mon May 29 12:13:22 2006
New Revision: 27833
Modified:
pypy/dist/pypy/interpreter/test/test_pickle.py
pypy/dist/pypy/module/_pickle_support/__init__.py
pypy/dist/pypy/module/_pickle_support/maker.py
pypy/dist/pypy/objspace/std/itertype.py
Log:
Added pickling support for reverse sequence iterator
Modified: pypy/dist/pypy/interpreter/test/test_pickle.py
==============================================================================
--- pypy/dist/pypy/interpreter/test/test_pickle.py (original)
+++ pypy/dist/pypy/interpreter/test/test_pickle.py Mon May 29 12:13:22 2006
@@ -189,9 +189,22 @@
result = pickle.loads(pckl)
liter.next()
result.next()
+ assert type(liter) is type(result)
assert len(liter) == 6
assert list(liter) == list(result)
-
+
+ def test_pickle_reversesequenceiter(self):
+ import pickle
+ liter = reversed([3,9,6,12,15,17,19,111])
+ liter.next()
+ pckl = pickle.dumps(liter)
+ result = pickle.loads(pckl)
+ liter.next()
+ result.next()
+ assert type(liter) is type(result)
+ assert len(liter) == 6
+ assert list(liter) == list(result)
+
def test_pickle_dictiter(self):
import pickle
tdict = {'2':2, '3':3, '5':5}
@@ -224,16 +237,6 @@
assert type(riter) is type(result)
assert list(result) == [2,3,4]
- def test_pickle_reversed_iterator(self):
- import pickle
- i = reversed(xrange(5))
- i.next()
- i.next()
- pckl = pickle.dumps(i)
- result = pickle.loads(pckl)
- assert type(i) is type(result)
- assert list(result) == [2,1,0]
-
def test_pickle_generator(self):
skip("work in progress")
import pickle
Modified: pypy/dist/pypy/module/_pickle_support/__init__.py
==============================================================================
--- pypy/dist/pypy/module/_pickle_support/__init__.py (original)
+++ pypy/dist/pypy/module/_pickle_support/__init__.py Mon May 29 12:13:22 2006
@@ -14,4 +14,5 @@
'method_new' : 'maker.method_new',
'dictiter_surrogate_new' : 'maker.dictiter_surrogate_new',
'seqiter_new' : 'maker.seqiter_new',
+ 'reverseseqiter_new' : 'maker.reverseseqiter_new',
}
Modified: pypy/dist/pypy/module/_pickle_support/maker.py
==============================================================================
--- pypy/dist/pypy/module/_pickle_support/maker.py (original)
+++ pypy/dist/pypy/module/_pickle_support/maker.py Mon May 29 12:13:22 2006
@@ -6,7 +6,7 @@
from pypy.interpreter.argument import Arguments
from pypy.interpreter.baseobjspace import ObjSpace, W_Root
from pypy.objspace.std.dicttype import dictiter_typedef
-from pypy.objspace.std.iterobject import W_SeqIterObject
+from pypy.objspace.std.iterobject import W_SeqIterObject, W_ReverseSeqIterObject
#note: for now we don't use the actual value when creating the Cell.
@@ -43,3 +43,8 @@
def seqiter_new(space, w_seq, w_index):
return W_SeqIterObject(w_seq, space.int_w(w_index))
+
+def reverseseqiter_new(space, w_seq, w_index):
+ w_len = space.len(w_seq)
+ index = space.int_w(w_index) - space.int_w(w_len)
+ return W_ReverseSeqIterObject(space, w_seq, index)
Modified: pypy/dist/pypy/objspace/std/itertype.py
==============================================================================
--- pypy/dist/pypy/objspace/std/itertype.py (original)
+++ pypy/dist/pypy/objspace/std/itertype.py Mon May 29 12:13:22 2006
@@ -15,6 +15,20 @@
return space.newtuple([new_inst, space.newtuple(tup)])
# ____________________________________________________________
+
+def descr_reverseseqiter__reduce__(w_self, space):
+ """
+ XXX to do: remove this __reduce__ method and do
+ a registration with copy_reg, instead.
+ """
+ from pypy.interpreter.mixedmodule import MixedModule
+ w_mod = space.getbuiltinmodule('_pickle_support')
+ mod = space.interp_w(MixedModule, w_mod)
+ new_inst = mod.get('reverseseqiter_new')
+ tup = [w_self.w_seq, space.wrap(w_self.index)]
+ return space.newtuple([new_inst, space.newtuple(tup)])
+
+# ____________________________________________________________
iter_typedef = StdTypeDef("sequenceiterator",
__doc__ = '''iter(collection) -> iterator
iter(callable, sentinel) -> iterator
@@ -28,4 +42,7 @@
)
reverse_iter_typedef = StdTypeDef("reversesequenceiterator",
+
+ __reduce__ = gateway.interp2app(descr_reverseseqiter__reduce__,
+ unwrap_spec=[gateway.W_Root, gateway.ObjSpace]),
)
More information about the Pypy-commit
mailing list