[pypy-commit] pypy py3k: Merged in marky1991/pypy_new/py3k (pull request #444)

marky1991 pypy.commits at gmail.com
Fri May 6 10:20:16 EDT 2016


Author: Mark Young <marky1991 at gmail.com>
Branch: py3k
Changeset: r84268:5624ae62ac73
Date: 2016-05-06 10:19 -0400
http://bitbucket.org/pypy/pypy/changeset/5624ae62ac73/

Log:	Merged in marky1991/pypy_new/py3k (pull request #444)

	Py3k Finish Deque Fix

diff --git a/lib-python/conftest.py b/lib-python/conftest.py
--- a/lib-python/conftest.py
+++ b/lib-python/conftest.py
@@ -149,7 +149,7 @@
     RegrTest('test_codecmaps_jp.py', usemodules='_multibytecodec'),
     RegrTest('test_codecmaps_kr.py', usemodules='_multibytecodec'),
     RegrTest('test_codecmaps_tw.py', usemodules='_multibytecodec'),
-    RegrTest('test_codecs.py', core=True, usemodules='_multibytecodec'),
+    RegrTest('test_codecs.py', core=True, usemodules='_multibytecodec struct unicodedata array'),
     RegrTest('test_codeop.py', core=True),
     RegrTest('test_coding.py', core=True),
     RegrTest('test_collections.py', usemodules='binascii struct'),
@@ -179,7 +179,7 @@
     RegrTest('test_decimal.py'),
     RegrTest('test_decorators.py', core=True),
     RegrTest('test_defaultdict.py', usemodules='_collections'),
-    RegrTest('test_deque.py', core=True, usemodules='_collections'),
+    RegrTest('test_deque.py', core=True, usemodules='_collections struct'),
     RegrTest('test_descr.py', core=True, usemodules='_weakref'),
     RegrTest('test_descrtut.py', core=True),
     RegrTest('test_devpoll.py'),
diff --git a/pypy/module/_collections/interp_deque.py b/pypy/module/_collections/interp_deque.py
--- a/pypy/module/_collections/interp_deque.py
+++ b/pypy/module/_collections/interp_deque.py
@@ -533,7 +533,16 @@
         return self.space.newtuple([self.space.gettypefor(W_DequeIter),
                                     self.space.newtuple([self.deque])])
 
+def W_DequeIter__new__(space, w_subtype, w_deque):
+    w_self = space.allocate_instance(W_DequeIter, w_subtype)
+    if not isinstance(w_deque, W_Deque):
+        raise oefmt(space.w_TypeError, "must be collections.deque, not %T", w_deque)
+        
+    W_DequeIter.__init__(space.interp_w(W_DequeIter, w_self), w_deque)
+    return w_self
+
 W_DequeIter.typedef = TypeDef("_collections.deque_iterator",
+    __new__ = interp2app(W_DequeIter__new__),
     __iter__        = interp2app(W_DequeIter.iter),
     __length_hint__ = interp2app(W_DequeIter.length),
     __next__        = interp2app(W_DequeIter.next),
@@ -576,10 +585,24 @@
         self.index = ri
         return w_x
 
+    def reduce(self):
+        return self.space.newtuple([self.space.gettypefor(W_DequeRevIter),
+                                    self.space.newtuple([self.deque])])
+
+def W_DequeRevIter__new__(space, w_subtype, w_deque):
+    w_self = space.allocate_instance(W_DequeRevIter, w_subtype)
+    if not isinstance(w_deque, W_Deque):
+        raise oefmt(space.w_TypeError, "must be collections.deque, not %T", w_deque)
+        
+    W_DequeRevIter.__init__(space.interp_w(W_DequeRevIter, w_self), w_deque)
+    return w_self
+
 W_DequeRevIter.typedef = TypeDef("_collections.deque_reverse_iterator",
+    __new__         = interp2app(W_DequeRevIter__new__),
     __iter__        = interp2app(W_DequeRevIter.iter),
     __length_hint__ = interp2app(W_DequeRevIter.length),
     __next__        = interp2app(W_DequeRevIter.next),
+    __reduce__      = interp2app(W_DequeRevIter.reduce)
 )
 W_DequeRevIter.typedef.acceptable_as_base_class = False
 
diff --git a/pypy/module/_collections/test/test_deque.py b/pypy/module/_collections/test/test_deque.py
--- a/pypy/module/_collections/test/test_deque.py
+++ b/pypy/module/_collections/test/test_deque.py
@@ -1,6 +1,6 @@
 
 class AppTestBasic:
-    spaceconfig = dict(usemodules=['_collections'])
+    spaceconfig = dict(usemodules=['_collections', 'struct'])
 
     def test_basics(self):
         from _collections import deque
@@ -301,3 +301,19 @@
         d.pop()
         gc.collect(); gc.collect(); gc.collect()
         assert X.freed
+
+    def test_DequeIter_pickle(self):
+        from _collections import deque
+        import pickle
+        d = deque([1,2,3])
+        iterator = iter(d)
+        copy = pickle.loads(pickle.dumps(iterator))
+        assert list(iterator) == list(copy)
+
+    def test_DequeRevIter_pickle(self):
+        from _collections import deque
+        import pickle
+        d = deque([1,2,3])
+        iterator = reversed(d)
+        copy = pickle.loads(pickle.dumps(iterator))
+        assert list(iterator) == list(copy)


More information about the pypy-commit mailing list