mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Make Ellipsis and NotImplemented picklable through the reduce protocol.
This commit is contained in:
parent
4c05d3bc56
commit
c49477b184
4 changed files with 24 additions and 42 deletions
|
@ -633,14 +633,6 @@ class _Pickler:
|
||||||
self.write(NONE)
|
self.write(NONE)
|
||||||
dispatch[type(None)] = save_none
|
dispatch[type(None)] = save_none
|
||||||
|
|
||||||
def save_ellipsis(self, obj):
|
|
||||||
self.save_global(Ellipsis, 'Ellipsis')
|
|
||||||
dispatch[type(Ellipsis)] = save_ellipsis
|
|
||||||
|
|
||||||
def save_notimplemented(self, obj):
|
|
||||||
self.save_global(NotImplemented, 'NotImplemented')
|
|
||||||
dispatch[type(NotImplemented)] = save_notimplemented
|
|
||||||
|
|
||||||
def save_bool(self, obj):
|
def save_bool(self, obj):
|
||||||
if self.proto >= 2:
|
if self.proto >= 2:
|
||||||
self.write(NEWTRUE if obj else NEWFALSE)
|
self.write(NEWTRUE if obj else NEWFALSE)
|
||||||
|
|
|
@ -3171,30 +3171,6 @@ save_global(PicklerObject *self, PyObject *obj, PyObject *name)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
save_ellipsis(PicklerObject *self, PyObject *obj)
|
|
||||||
{
|
|
||||||
PyObject *str = PyUnicode_FromString("Ellipsis");
|
|
||||||
int res;
|
|
||||||
if (str == NULL)
|
|
||||||
return -1;
|
|
||||||
res = save_global(self, Py_Ellipsis, str);
|
|
||||||
Py_DECREF(str);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
save_notimplemented(PicklerObject *self, PyObject *obj)
|
|
||||||
{
|
|
||||||
PyObject *str = PyUnicode_FromString("NotImplemented");
|
|
||||||
int res;
|
|
||||||
if (str == NULL)
|
|
||||||
return -1;
|
|
||||||
res = save_global(self, Py_NotImplemented, str);
|
|
||||||
Py_DECREF(str);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
save_pers(PicklerObject *self, PyObject *obj, PyObject *func)
|
save_pers(PicklerObject *self, PyObject *obj, PyObject *func)
|
||||||
{
|
{
|
||||||
|
@ -3552,14 +3528,6 @@ save(PicklerObject *self, PyObject *obj, int pers_save)
|
||||||
status = save_none(self, obj);
|
status = save_none(self, obj);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
else if (obj == Py_Ellipsis) {
|
|
||||||
status = save_ellipsis(self, obj);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
else if (obj == Py_NotImplemented) {
|
|
||||||
status = save_notimplemented(self, obj);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
else if (obj == Py_False || obj == Py_True) {
|
else if (obj == Py_False || obj == Py_True) {
|
||||||
status = save_bool(self, obj);
|
status = save_bool(self, obj);
|
||||||
goto done;
|
goto done;
|
||||||
|
|
|
@ -1464,6 +1464,17 @@ NotImplemented_repr(PyObject *op)
|
||||||
return PyUnicode_FromString("NotImplemented");
|
return PyUnicode_FromString("NotImplemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
NotImplemented_reduce(PyObject *op)
|
||||||
|
{
|
||||||
|
return PyUnicode_FromString("NotImplemented");
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyMethodDef notimplemented_methods[] = {
|
||||||
|
{"__reduce__", (PyCFunction)NotImplemented_reduce, METH_NOARGS, NULL},
|
||||||
|
{NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
notimplemented_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
|
notimplemented_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
|
||||||
{
|
{
|
||||||
|
@ -1511,7 +1522,7 @@ static PyTypeObject PyNotImplemented_Type = {
|
||||||
0, /*tp_weaklistoffset */
|
0, /*tp_weaklistoffset */
|
||||||
0, /*tp_iter */
|
0, /*tp_iter */
|
||||||
0, /*tp_iternext */
|
0, /*tp_iternext */
|
||||||
0, /*tp_methods */
|
notimplemented_methods, /*tp_methods */
|
||||||
0, /*tp_members */
|
0, /*tp_members */
|
||||||
0, /*tp_getset */
|
0, /*tp_getset */
|
||||||
0, /*tp_base */
|
0, /*tp_base */
|
||||||
|
|
|
@ -33,6 +33,17 @@ ellipsis_repr(PyObject *op)
|
||||||
return PyUnicode_FromString("Ellipsis");
|
return PyUnicode_FromString("Ellipsis");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
ellipsis_reduce(PyObject *op)
|
||||||
|
{
|
||||||
|
return PyUnicode_FromString("Ellipsis");
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyMethodDef ellipsis_methods[] = {
|
||||||
|
{"__reduce__", (PyCFunction)ellipsis_reduce, METH_NOARGS, NULL},
|
||||||
|
{NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
PyTypeObject PyEllipsis_Type = {
|
PyTypeObject PyEllipsis_Type = {
|
||||||
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
||||||
"ellipsis", /* tp_name */
|
"ellipsis", /* tp_name */
|
||||||
|
@ -61,7 +72,7 @@ PyTypeObject PyEllipsis_Type = {
|
||||||
0, /* tp_weaklistoffset */
|
0, /* tp_weaklistoffset */
|
||||||
0, /* tp_iter */
|
0, /* tp_iter */
|
||||||
0, /* tp_iternext */
|
0, /* tp_iternext */
|
||||||
0, /* tp_methods */
|
ellipsis_methods, /* tp_methods */
|
||||||
0, /* tp_members */
|
0, /* tp_members */
|
||||||
0, /* tp_getset */
|
0, /* tp_getset */
|
||||||
0, /* tp_base */
|
0, /* tp_base */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue