summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Foord <michael@voidspace.org.uk>2012-03-12 20:54:03 (GMT)
committerMichael Foord <michael@voidspace.org.uk>2012-03-12 20:54:03 (GMT)
commitc1f5d8af57f2cabb2eb19f84d6fab2fbdd86293b (patch)
treef39f5fef0b05d95375303417369a4f708a139f53
parent5f99ced092b01401d9e1637c493fa61d948101fe (diff)
parent17591c1a1d0a6ba20f3b68e2c438d9b9baabc6c9 (diff)
downloadcpython-c1f5d8af57f2cabb2eb19f84d6fab2fbdd86293b.zip
cpython-c1f5d8af57f2cabb2eb19f84d6fab2fbdd86293b.tar.gz
cpython-c1f5d8af57f2cabb2eb19f84d6fab2fbdd86293b.tar.bz2
Merge
-rw-r--r--Lib/pickle.py8
-rw-r--r--Lib/test/pickletester.py12
-rw-r--r--Lib/test/test_sys.py2
-rw-r--r--Misc/ACKS1
-rw-r--r--Modules/_pickle.c21
5 files changed, 43 insertions, 1 deletions
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 20b3646..9e65368 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -438,6 +438,14 @@ 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(obj and NEWTRUE or NEWFALSE)
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index 1a551c8..3686a62 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -743,6 +743,18 @@ class AbstractPickleTests(unittest.TestCase):
u = self.loads(s)
self.assertEqual(t, u)
+ def test_ellipsis(self):
+ for proto in protocols:
+ s = self.dumps(..., proto)
+ u = self.loads(s)
+ self.assertEqual(..., u)
+
+ def test_notimplemented(self):
+ for proto in protocols:
+ s = self.dumps(NotImplemented, proto)
+ u = self.loads(s)
+ self.assertEqual(NotImplemented, u)
+
# Tests for protocol 2
def test_proto(self):
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 551c3a5..9f6af7f 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -882,7 +882,7 @@ class SizeofTest(unittest.TestCase):
check = self.check_sizeof
# _ast.AST
import _ast
- check(_ast.AST(), size(h + ''))
+ check(_ast.AST(), size(h + 'P'))
# imp.NullImporter
import imp
check(imp.NullImporter(self.file.name), size(h + ''))
diff --git a/Misc/ACKS b/Misc/ACKS
index 49efa29..a0685c1 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -883,6 +883,7 @@ George Sakkis
Rich Salz
Kevin Samborn
Adrian Sampson
+James Sanders
Ilya Sandler
Mark Sapiro
Ty Sarna
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index 2dc3a41..4212e7a 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -2812,6 +2812,19 @@ save_global(PicklerObject *self, PyObject *obj, PyObject *name)
}
static int
+save_ellipsis(PicklerObject *self, PyObject *obj)
+{
+ return save_global(self, Py_Ellipsis, PyUnicode_FromString("Ellipsis"));
+}
+
+static int
+save_notimplemented(PicklerObject *self, PyObject *obj)
+{
+ return save_global(self, Py_NotImplemented,
+ PyUnicode_FromString("NotImplemented"));
+}
+
+static int
save_pers(PicklerObject *self, PyObject *obj, PyObject *func)
{
PyObject *pid = NULL;
@@ -3114,6 +3127,14 @@ 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;