Commit df9460f8 authored by Alexandre Vassalotti's avatar Alexandre Vassalotti

Issue #6477: Revert fbb97f6eb3b3 as it broke test_xpickle.

parent c6df622c
...@@ -829,9 +829,6 @@ they can have object code that is not dependent on Python compilation flags. ...@@ -829,9 +829,6 @@ they can have object code that is not dependent on Python compilation flags.
PyAPI_FUNC(void) Py_IncRef(PyObject *); PyAPI_FUNC(void) Py_IncRef(PyObject *);
PyAPI_FUNC(void) Py_DecRef(PyObject *); PyAPI_FUNC(void) Py_DecRef(PyObject *);
PyAPI_DATA(PyTypeObject) PyNone_Type;
PyAPI_DATA(PyTypeObject) PyNotImplemented_Type;
/* /*
_Py_NoneStruct is an object of undefined type which can be used in contexts _Py_NoneStruct is an object of undefined type which can be used in contexts
where NULL (nil) is not suitable (since NULL often means 'error'). where NULL (nil) is not suitable (since NULL often means 'error').
......
...@@ -427,14 +427,6 @@ class Pickler: ...@@ -427,14 +427,6 @@ class Pickler:
self.write(NONE) self.write(NONE)
dispatch[NoneType] = save_none dispatch[NoneType] = 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(obj and NEWTRUE or NEWFALSE) self.write(obj and NEWTRUE or NEWFALSE)
...@@ -778,18 +770,7 @@ class Pickler: ...@@ -778,18 +770,7 @@ class Pickler:
dispatch[ClassType] = save_global dispatch[ClassType] = save_global
dispatch[FunctionType] = save_global dispatch[FunctionType] = save_global
dispatch[BuiltinFunctionType] = save_global dispatch[BuiltinFunctionType] = save_global
dispatch[TypeType] = save_global
def save_type(self, obj):
if obj is type(None):
return self.save_reduce(type, (None,), obj=obj)
elif obj is type(NotImplemented):
return self.save_reduce(type, (NotImplemented,), obj=obj)
elif obj is type(Ellipsis):
return self.save_reduce(type, (Ellipsis,), obj=obj)
return self.save_global(obj)
dispatch[TypeType] = save_type
# Pickling helpers # Pickling helpers
......
...@@ -661,15 +661,6 @@ class AbstractPickleTests(unittest.TestCase): ...@@ -661,15 +661,6 @@ class AbstractPickleTests(unittest.TestCase):
u = self.loads(s) u = self.loads(s)
self.assertEqual(t, u) self.assertEqual(t, u)
def test_singleton_types(self):
# Issue #6477: Test that types of built-in singletons can be pickled.
singletons = [None, Ellipsis, NotImplemented]
for singleton in singletons:
for proto in protocols:
s = self.dumps(type(singleton), proto)
u = self.loads(s)
self.assertIs(type(singleton), u)
# Tests for protocol 2 # Tests for protocol 2
def test_proto(self): def test_proto(self):
......
...@@ -15,9 +15,6 @@ Core and Builtins ...@@ -15,9 +15,6 @@ Core and Builtins
Library Library
------- -------
- Issue #6477: Added pickling support for built-in singletons (i.e., None,
Ellipsis and NotImplemented) and their respective types.
- Issue #16231: Fixed pickle.Pickler to only fallback to its default pickling - Issue #16231: Fixed pickle.Pickler to only fallback to its default pickling
behaviour when Pickler.persistent_id returns None, but not for any other behaviour when Pickler.persistent_id returns None, but not for any other
false values. This allows false values other than None to be used as false values. This allows false values other than None to be used as
......
...@@ -2558,60 +2558,6 @@ save_reduce(Picklerobject *self, PyObject *args, PyObject *fn, PyObject *ob) ...@@ -2558,60 +2558,6 @@ save_reduce(Picklerobject *self, PyObject *args, PyObject *fn, PyObject *ob)
return 0; return 0;
} }
static int
save_ellipsis(Picklerobject *self, PyObject *obj)
{
PyObject *str = PyString_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 = PyString_FromString("NotImplemented");
int res;
if (str == NULL)
return -1;
res = save_global(self, Py_NotImplemented, str);
Py_DECREF(str);
return res;
}
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, (PyObject *)self, 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 static int
save(Picklerobject *self, PyObject *args, int pers_save) save(Picklerobject *self, PyObject *args, int pers_save)
{ {
...@@ -2634,14 +2580,6 @@ save(Picklerobject *self, PyObject *args, int pers_save) ...@@ -2634,14 +2580,6 @@ save(Picklerobject *self, PyObject *args, int pers_save)
res = save_none(self, args); res = save_none(self, args);
goto finally; goto finally;
} }
else if (args == Py_Ellipsis) {
res = save_ellipsis(self, args);
goto finally;
}
else if (args == Py_NotImplemented) {
res = save_notimplemented(self, args);
goto finally;
}
type = Py_TYPE(args); type = Py_TYPE(args);
...@@ -2733,7 +2671,7 @@ save(Picklerobject *self, PyObject *args, int pers_save) ...@@ -2733,7 +2671,7 @@ save(Picklerobject *self, PyObject *args, int pers_save)
goto finally; goto finally;
} }
if (type == &PyType_Type) { if (type == &PyType_Type) {
res = save_type(self, args); res = save_global(self, args, NULL);
goto finally; goto finally;
} }
break; break;
......
...@@ -2012,7 +2012,7 @@ none_dealloc(PyObject* ignore) ...@@ -2012,7 +2012,7 @@ none_dealloc(PyObject* ignore)
} }
PyTypeObject PyNone_Type = { static PyTypeObject PyNone_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0) PyVarObject_HEAD_INIT(&PyType_Type, 0)
"NoneType", "NoneType",
0, 0,
...@@ -2043,7 +2043,7 @@ NotImplemented_repr(PyObject *op) ...@@ -2043,7 +2043,7 @@ NotImplemented_repr(PyObject *op)
return PyString_FromString("NotImplemented"); return PyString_FromString("NotImplemented");
} }
PyTypeObject PyNotImplemented_Type = { static PyTypeObject PyNotImplemented_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0) PyVarObject_HEAD_INIT(&PyType_Type, 0)
"NotImplementedType", "NotImplementedType",
0, 0,
......
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