mirror of
https://github.com/python/cpython.git
synced 2025-08-03 00:23:06 +00:00
Issue #6477: Merge with 3.3.
This commit is contained in:
commit
3c23e7a5dc
6 changed files with 58 additions and 4 deletions
|
@ -3287,6 +3287,36 @@ save_global(PicklerObject *self, PyObject *obj, PyObject *name)
|
|||
return status;
|
||||
}
|
||||
|
||||
static int
|
||||
save_singleton_type(PicklerObject *self, PyObject *obj, PyObject *singleton)
|
||||
{
|
||||
PyObject *reduce_value;
|
||||
int status;
|
||||
|
||||
reduce_value = Py_BuildValue("O(O)", &PyType_Type, singleton);
|
||||
if (reduce_value == NULL) {
|
||||
return -1;
|
||||
}
|
||||
status = save_reduce(self, reduce_value, obj);
|
||||
Py_DECREF(reduce_value);
|
||||
return status;
|
||||
}
|
||||
|
||||
static int
|
||||
save_type(PicklerObject *self, PyObject *obj)
|
||||
{
|
||||
if (obj == (PyObject *)&PyNone_Type) {
|
||||
return save_singleton_type(self, obj, Py_None);
|
||||
}
|
||||
else if (obj == (PyObject *)&PyEllipsis_Type) {
|
||||
return save_singleton_type(self, obj, Py_Ellipsis);
|
||||
}
|
||||
else if (obj == (PyObject *)&PyNotImplemented_Type) {
|
||||
return save_singleton_type(self, obj, Py_NotImplemented);
|
||||
}
|
||||
return save_global(self, obj, NULL);
|
||||
}
|
||||
|
||||
static int
|
||||
save_pers(PicklerObject *self, PyObject *obj, PyObject *func)
|
||||
{
|
||||
|
@ -3696,7 +3726,7 @@ save(PicklerObject *self, PyObject *obj, int pers_save)
|
|||
goto done;
|
||||
}
|
||||
else if (type == &PyType_Type) {
|
||||
status = save_global(self, obj, NULL);
|
||||
status = save_type(self, obj);
|
||||
goto done;
|
||||
}
|
||||
else if (type == &PyFunction_Type) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue