[pypy-svn] r26564 - in pypy/dist/pypy: interpreter/test module/__builtin__

ericvrp at codespeak.net ericvrp at codespeak.net
Sat Apr 29 10:28:51 CEST 2006


Author: ericvrp
Date: Sat Apr 29 10:28:44 2006
New Revision: 26564

Modified:
   pypy/dist/pypy/interpreter/test/test_pickle.py
   pypy/dist/pypy/module/__builtin__/__init__.py
   pypy/dist/pypy/module/__builtin__/app_functional.py
Log:
pickling support for reversed_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	Sat Apr 29 10:28:44 2006
@@ -123,9 +123,6 @@
         result   = pickle.loads(pckl)
         assert mod is result
 
-    def test_pickle_iter(self):
-        skip("work in progress")
-
     def test_pickle_method(self):
         skip("work in progress")
         class myclass(object):
@@ -179,7 +176,7 @@
         
     #def test_pickle_enumfactory(self):
     #    skip("work in progress")
-        
+
     def test_pickle_sequenceiter(self):
         '''
         In PyPy there is no distinction here between listiterator and
@@ -203,6 +200,16 @@
         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/__builtin__/__init__.py
==============================================================================
--- pypy/dist/pypy/module/__builtin__/__init__.py	(original)
+++ pypy/dist/pypy/module/__builtin__/__init__.py	Sat Apr 29 10:28:44 2006
@@ -35,6 +35,8 @@
         'app_functional._install_pickle_support_for_xrange_iterator',
         'sorted'        : 'app_functional.sorted',
         'reversed'      : 'app_functional.reversed',
+        '_install_pickle_support_for_reversed_iterator':
+        'app_functional._install_pickle_support_for_reversed_iterator',
 
         'issubclass'    : 'app_inspect.issubclass',
         'isinstance'    : 'app_inspect.isinstance',

Modified: pypy/dist/pypy/module/__builtin__/app_functional.py
==============================================================================
--- pypy/dist/pypy/module/__builtin__/app_functional.py	(original)
+++ pypy/dist/pypy/module/__builtin__/app_functional.py	Sat Apr 29 10:28:44 2006
@@ -418,3 +418,21 @@
         if self.remaining > len(self.seq):
             self.remaining = 0
         return self.remaining
+
+    def __reduce__(self):
+        tup = (self.seq, self.remaining)
+        return (make_reversed_iterator, tup)
+
+def make_reversed_iterator(seq, remaining):
+    ri = reversed_iterator.__new__(reversed_iterator)
+    ri.seq = seq
+    #or "ri = reversed_iterator(seq)" but that executes len(seq)
+    ri.remaining = remaining
+    return ri
+
+def _install_pickle_support_for_reversed_iterator():
+    import _pickle_support
+    make_reversed_iterator.__module__ = '_pickle_support'
+    _pickle_support.make_reversed_iterator = make_reversed_iterator
+
+



More information about the Pypy-commit mailing list