Kaydet (Commit) c49477b1 authored tarafından Alexandre Vassalotti's avatar Alexandre Vassalotti

Make Ellipsis and NotImplemented picklable through the reduce protocol.

üst 4c05d3bc
...@@ -633,14 +633,6 @@ class _Pickler: ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 = { ...@@ -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) ...@@ -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 = { ...@@ -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 */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment