[pypy-commit] pypy default: make the broken dictiter reduce less broken (but still broken)

pjenvey noreply at buildbot.pypy.org
Sun May 19 02:07:28 CEST 2013


Author: Philip Jenvey <pjenvey at underboss.org>
Branch: 
Changeset: r64302:15a1cc1604b3
Date: 2013-05-18 17:05 -0700
http://bitbucket.org/pypy/pypy/changeset/15a1cc1604b3/

Log:	make the broken dictiter reduce less broken (but still broken)

diff --git a/pypy/objspace/std/dictmultiobject.py b/pypy/objspace/std/dictmultiobject.py
--- a/pypy/objspace/std/dictmultiobject.py
+++ b/pypy/objspace/std/dictmultiobject.py
@@ -1163,7 +1163,7 @@
         w_mod    = space.getbuiltinmodule('_pickle_support')
         mod      = space.interp_w(MixedModule, w_mod)
         new_inst = mod.get('dictiter_surrogate_new')
-        w_typeobj = space.gettypeobject(W_BaseDictMultiIterObject.typedef)
+        w_typeobj = space.type(self)
 
         raise OperationError(
             space.w_TypeError,
@@ -1171,12 +1171,15 @@
         # XXXXXX get that working again
 
         # we cannot call __init__ since we don't have the original dict
-        if isinstance(self, W_DictIter_Keys):
-            w_clone = space.allocate_instance(W_DictIter_Keys, w_typeobj)
-        elif isinstance(self, W_DictIter_Values):
-            w_clone = space.allocate_instance(W_DictIter_Values, w_typeobj)
-        elif isinstance(self, W_DictIter_Items):
-            w_clone = space.allocate_instance(W_DictIter_Items, w_typeobj)
+        if isinstance(self, W_DictMultiIterKeysObject):
+            w_clone = space.allocate_instance(W_DictMultiIterKeysObject,
+                                              w_typeobj)
+        elif isinstance(self, W_DictMultiIterValuesObject):
+            w_clone = space.allocate_instance(W_DictMultiIterValuesObject,
+                                              w_typeobj)
+        elif isinstance(self, W_DictMultiIterItemsObject):
+            w_clone = space.allocate_instance(W_DictMultiIterItemsObject,
+                                              w_typeobj)
         else:
             msg = "unsupported dictiter type '%s' during pickling" % (self,)
             raise OperationError(space.w_TypeError, space.wrap(msg))
@@ -1223,21 +1226,24 @@
     "dict_iteritems",
     __iter__ = interp2app(W_DictMultiIterItemsObject.descr_iter),
     next = interp2app(W_DictMultiIterItemsObject.descr_next),
-    __length_hint__ = interp2app(W_BaseDictMultiIterObject.descr_length_hint)
+    __length_hint__ = interp2app(W_BaseDictMultiIterObject.descr_length_hint),
+    __reduce__ = interp2app(W_BaseDictMultiIterObject.descr_reduce),
     )
 
 W_DictMultiIterKeysObject.typedef = StdTypeDef(
     "dict_iterkeys",
     __iter__ = interp2app(W_DictMultiIterKeysObject.descr_iter),
     next = interp2app(W_DictMultiIterKeysObject.descr_next),
-    __length_hint__ = interp2app(W_BaseDictMultiIterObject.descr_length_hint)
+    __length_hint__ = interp2app(W_BaseDictMultiIterObject.descr_length_hint),
+    __reduce__ = interp2app(W_BaseDictMultiIterObject.descr_reduce),
     )
 
 W_DictMultiIterValuesObject.typedef = StdTypeDef(
     "dict_itervalues",
     __iter__ = interp2app(W_DictMultiIterValuesObject.descr_iter),
     next = interp2app(W_DictMultiIterValuesObject.descr_next),
-    __length_hint__ = interp2app(W_BaseDictMultiIterObject.descr_length_hint)
+    __length_hint__ = interp2app(W_BaseDictMultiIterObject.descr_length_hint),
+    __reduce__ = interp2app(W_BaseDictMultiIterObject.descr_reduce),
     )
 
 


More information about the pypy-commit mailing list