From b46a633eaf23c43865dd25e0a38e36a4444059a0 Mon Sep 17 00:00:00 2001 From: Hirokazu Yamamoto Date: Tue, 4 Nov 2008 00:35:10 +0000 Subject: [PATCH] Sorry, r67092 is commit miss.... --- Lib/pickle.py | 13 ------------- Modules/_pickle.c | 16 ++++++++-------- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/Lib/pickle.py b/Lib/pickle.py index 2e55c8a710..37c3d5262f 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -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 diff --git a/Modules/_pickle.c b/Modules/_pickle.c index b0686afe9d..a689c3320b 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -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) { -- 2.50.0