]> granicus.if.org Git - python/commitdiff
Sorry, r67092 is commit miss....
authorHirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
Tue, 4 Nov 2008 00:35:10 +0000 (00:35 +0000)
committerHirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
Tue, 4 Nov 2008 00:35:10 +0000 (00:35 +0000)
Lib/pickle.py
Modules/_pickle.c

index 2e55c8a7105fb5f5f631b77f0a8d0ed95d4b3172..37c3d5262fca2723146af0d5f0dfb80a740ffb8a 100644 (file)
@@ -345,9 +345,6 @@ class _Pickler:
         else:
             self.write(PERSID + str(pid).encode("ascii") + b'\n')
 
-    def _isiter(self, obj):
-        return hasattr(obj, '__next__') and hasattr(obj, '__iter__')
-
     def save_reduce(self, func, args, state=None,
                     listitems=None, dictitems=None, obj=None):
         # This API is called by some subclasses
@@ -360,16 +357,6 @@ class _Pickler:
         if not hasattr(func, '__call__'):
             raise PicklingError("func from save_reduce() should be callable")
 
-        # Assert that listitems is an iterator
-        if listitems is not None and not self._isiter(listitems):
-            raise PicklingError("listitems from save_reduce() should be an "
-                                "iterator")
-
-        # Assert that dictitems is an iterator
-        if dictitems is not None and not self._isiter(dictitems):
-            raise PicklingError("dictitems from save_reduce() should be an "
-                                "iterator")
-
         save = self.save
         write = self.write
 
index b0686afe9d5d50a472dd745196391d63c26a0f45..a689c3320bd981a664d0a5c2e63c199b26421389 100644 (file)
@@ -1963,6 +1963,7 @@ save_reduce(PicklerObject *self, PyObject *args, PyObject *obj)
     PyObject *state = NULL;
     PyObject *listitems = Py_None;
     PyObject *dictitems = Py_None;
+    Py_ssize_t size;
 
     int use_newobj = self->proto >= 2;
 
@@ -1970,6 +1971,13 @@ save_reduce(PicklerObject *self, PyObject *args, PyObject *obj)
     const char build_op = BUILD;
     const char newobj_op = NEWOBJ;
 
+    size = PyTuple_Size(args);
+    if (size < 2 || size > 5) {
+        PyErr_SetString(PicklingError, "tuple returned by "
+                        "__reduce__ must contain 2 through 5 elements");
+        return -1;
+    }
+
     if (!PyArg_UnpackTuple(args, "save_reduce", 2, 5,
                            &callable, &argtup, &state, &listitems, &dictitems))
         return -1;
@@ -2146,7 +2154,6 @@ save(PicklerObject *self, PyObject *obj, int pers_save)
     PyObject *reduce_value = NULL;
     PyObject *memo_key = NULL;
     int status = 0;
-    Py_ssize_t size;
 
     if (Py_EnterRecursiveCall(" while pickling an object") < 0)
         return -1;
@@ -2325,13 +2332,6 @@ save(PicklerObject *self, PyObject *obj, int pers_save)
         goto error;
     }
 
-    size = PyTuple_Size(reduce_value);
-    if (size < 2 || size > 5) {
-        PyErr_SetString(PicklingError, "tuple returned by "
-                        "__reduce__ must contain 2 through 5 elements");
-        goto error;
-    }
-
     status = save_reduce(self, reduce_value, obj);
 
     if (0) {