[Python-checkins] cpython: also make NotImplementedType callable
benjamin.peterson
python-checkins at python.org
Sat Jul 30 01:27:53 CEST 2011
http://hg.python.org/cpython/rev/2428c239d848
changeset: 71616:2428c239d848
user: Benjamin Peterson <benjamin at python.org>
date: Fri Jul 29 18:27:44 2011 -0500
summary:
also make NotImplementedType callable
files:
Lib/test/test_builtin.py | 2 +-
Misc/NEWS | 4 +-
Objects/object.c | 35 ++++++++++++++++++++++++++++
3 files changed, 38 insertions(+), 3 deletions(-)
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -1344,7 +1344,7 @@
self.assertRaises(TypeError, x.translate, b"1"*256, 1)
def test_construct_singletons(self):
- for const in None, Ellipsis:
+ for const in None, Ellipsis, NotImplemented:
tp = type(const)
self.assertIs(tp(), const)
self.assertRaises(TypeError, tp, 1, 2)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,8 +10,8 @@
Core and Builtins
-----------------
-- Make type(None) and type(Ellipsis) callable. They return the respective
- singleton instances.
+- Make type(None), type(Ellipsis), and type(NotImplemented) callable. They
+ return the respective singleton instances.
- Forbid summing bytes in sum().
diff --git a/Objects/object.c b/Objects/object.c
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -1385,6 +1385,17 @@
return PyUnicode_FromString("NotImplemented");
}
+static PyObject *
+notimplemented_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+ if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_Size(kwargs))) {
+ PyErr_SetString(PyExc_TypeError, "NotImplementedType takes no arguments");
+ return NULL;
+ }
+ Py_INCREF(Py_NotImplemented);
+ return Py_NotImplemented;
+}
+
static PyTypeObject PyNotImplemented_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"NotImplementedType",
@@ -1400,6 +1411,30 @@
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
0, /*tp_hash */
+ 0, /*tp_call */
+ 0, /*tp_str */
+ 0, /*tp_getattro */
+ 0, /*tp_setattro */
+ 0, /*tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /*tp_flags */
+ 0, /*tp_doc */
+ 0, /*tp_traverse */
+ 0, /*tp_clear */
+ 0, /*tp_richcompare */
+ 0, /*tp_weaklistoffset */
+ 0, /*tp_iter */
+ 0, /*tp_iternext */
+ 0, /*tp_methods */
+ 0, /*tp_members */
+ 0, /*tp_getset */
+ 0, /*tp_base */
+ 0, /*tp_dict */
+ 0, /*tp_descr_get */
+ 0, /*tp_descr_set */
+ 0, /*tp_dictoffset */
+ 0, /*tp_init */
+ 0, /*tp_alloc */
+ notimplemented_new, /*tp_new */
};
PyObject _Py_NotImplementedStruct = {
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list