summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/pickle.py8
-rw-r--r--Modules/_pickle.c32
-rw-r--r--Objects/object.c13
-rw-r--r--Objects/sliceobject.c13
4 files changed, 24 insertions, 42 deletions
diff --git a/Lib/pickle.py b/Lib/pickle.py
index d4aa13b..cf8e2c5 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -633,14 +633,6 @@ class _Pickler:
self.write(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):
if self.proto >= 2:
self.write(NEWTRUE if obj else NEWFALSE)
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index f0c918f..3187555 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -3172,30 +3172,6 @@ save_global(PicklerObject *self, PyObject *obj, PyObject *name)
}
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
save_pers(PicklerObject *self, PyObject *obj, PyObject *func)
{
PyObject *pid = NULL;
@@ -3552,14 +3528,6 @@ save(PicklerObject *self, PyObject *obj, int pers_save)
status = save_none(self, obj);
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) {
status = save_bool(self, obj);
goto done;
diff --git a/Objects/object.c b/Objects/object.c
index 395e28d..11718aa 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -1465,6 +1465,17 @@ NotImplemented_repr(PyObject *op)
}
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 *
notimplemented_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
{
if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_Size(kwargs))) {
@@ -1511,7 +1522,7 @@ static PyTypeObject PyNotImplemented_Type = {
0, /*tp_weaklistoffset */
0, /*tp_iter */
0, /*tp_iternext */
- 0, /*tp_methods */
+ notimplemented_methods, /*tp_methods */
0, /*tp_members */
0, /*tp_getset */
0, /*tp_base */
diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c
index 52f1c89..1049523 100644
--- a/Objects/sliceobject.c
+++ b/Objects/sliceobject.c
@@ -33,6 +33,17 @@ ellipsis_repr(PyObject *op)
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 = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"ellipsis", /* tp_name */
@@ -61,7 +72,7 @@ PyTypeObject PyEllipsis_Type = {
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
- 0, /* tp_methods */
+ ellipsis_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */