diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2017-04-08 06:52:59 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-08 06:52:59 (GMT) |
commit | 205e00c5cfd495a4dc6dae8e8fa0fb828fb3dca9 (patch) | |
tree | f23611c3139118d743b18410c07669a2f41b9d93 /Objects | |
parent | dd9a0a14c89d57e43898d4b866b8c161e4ff8506 (diff) | |
download | cpython-205e00c5cfd495a4dc6dae8e8fa0fb828fb3dca9.zip cpython-205e00c5cfd495a4dc6dae8e8fa0fb828fb3dca9.tar.gz cpython-205e00c5cfd495a4dc6dae8e8fa0fb828fb3dca9.tar.bz2 |
bpo-29914: Fix default implementations of __reduce__ and __reduce_ex__(). (#843)
object.__reduce__() no longer takes arguments, object.__reduce_ex__() now
requires one argument.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/clinic/typeobject.c.h | 41 | ||||
-rw-r--r-- | Objects/typeobject.c | 13 |
2 files changed, 16 insertions, 38 deletions
diff --git a/Objects/clinic/typeobject.c.h b/Objects/clinic/typeobject.c.h index 1b19ccf..2760065 100644 --- a/Objects/clinic/typeobject.c.h +++ b/Objects/clinic/typeobject.c.h @@ -131,61 +131,42 @@ type___sizeof__(PyTypeObject *self, PyObject *Py_UNUSED(ignored)) } PyDoc_STRVAR(object___reduce____doc__, -"__reduce__($self, protocol=0, /)\n" +"__reduce__($self, /)\n" "--\n" "\n" "Helper for pickle."); #define OBJECT___REDUCE___METHODDEF \ - {"__reduce__", (PyCFunction)object___reduce__, METH_FASTCALL, object___reduce____doc__}, + {"__reduce__", (PyCFunction)object___reduce__, METH_NOARGS, object___reduce____doc__}, static PyObject * -object___reduce___impl(PyObject *self, int protocol); +object___reduce___impl(PyObject *self); static PyObject * -object___reduce__(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) +object___reduce__(PyObject *self, PyObject *Py_UNUSED(ignored)) { - PyObject *return_value = NULL; - int protocol = 0; - - if (!_PyArg_ParseStack(args, nargs, "|i:__reduce__", - &protocol)) { - goto exit; - } - - if (!_PyArg_NoStackKeywords("__reduce__", kwnames)) { - goto exit; - } - return_value = object___reduce___impl(self, protocol); - -exit: - return return_value; + return object___reduce___impl(self); } PyDoc_STRVAR(object___reduce_ex____doc__, -"__reduce_ex__($self, protocol=0, /)\n" +"__reduce_ex__($self, protocol, /)\n" "--\n" "\n" "Helper for pickle."); #define OBJECT___REDUCE_EX___METHODDEF \ - {"__reduce_ex__", (PyCFunction)object___reduce_ex__, METH_FASTCALL, object___reduce_ex____doc__}, + {"__reduce_ex__", (PyCFunction)object___reduce_ex__, METH_O, object___reduce_ex____doc__}, static PyObject * object___reduce_ex___impl(PyObject *self, int protocol); static PyObject * -object___reduce_ex__(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) +object___reduce_ex__(PyObject *self, PyObject *arg) { PyObject *return_value = NULL; - int protocol = 0; - - if (!_PyArg_ParseStack(args, nargs, "|i:__reduce_ex__", - &protocol)) { - goto exit; - } + int protocol; - if (!_PyArg_NoStackKeywords("__reduce_ex__", kwnames)) { + if (!PyArg_Parse(arg, "i:__reduce_ex__", &protocol)) { goto exit; } return_value = object___reduce_ex___impl(self, protocol); @@ -256,4 +237,4 @@ object___dir__(PyObject *self, PyObject *Py_UNUSED(ignored)) { return object___dir___impl(self); } -/*[clinic end generated code: output=ce354e436e2360a0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8c4c856859564eaa input=a9049054013a1b77]*/ diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 4a9949e..369c72f 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -4393,23 +4393,20 @@ _common_reduce(PyObject *self, int proto) /*[clinic input] object.__reduce__ - protocol: int = 0 - / - Helper for pickle. [clinic start generated code]*/ static PyObject * -object___reduce___impl(PyObject *self, int protocol) -/*[clinic end generated code: output=5572e699c467dd5b input=227f37ed68bd938a]*/ +object___reduce___impl(PyObject *self) +/*[clinic end generated code: output=d4ca691f891c6e2f input=11562e663947e18b]*/ { - return _common_reduce(self, protocol); + return _common_reduce(self, 0); } /*[clinic input] object.__reduce_ex__ - protocol: int = 0 + protocol: int / Helper for pickle. @@ -4417,7 +4414,7 @@ Helper for pickle. static PyObject * object___reduce_ex___impl(PyObject *self, int protocol) -/*[clinic end generated code: output=2e157766f6b50094 input=8dd6a9602a12749e]*/ +/*[clinic end generated code: output=2e157766f6b50094 input=f326b43fb8a4c5ff]*/ { static PyObject *objreduce; PyObject *reduce, *res; |