Commit a6c0c069 authored by Serhiy Storchaka's avatar Serhiy Storchaka Committed by Nick Coghlan

bpo-31506: Improve the error message logic for object.__new__ and object.__init__. (GH-3650)

parent d6e2f26f
Improved the error message logic for object.__new__ and object.__init__.
...@@ -3543,23 +3543,34 @@ excess_args(PyObject *args, PyObject *kwds) ...@@ -3543,23 +3543,34 @@ excess_args(PyObject *args, PyObject *kwds)
static int static int
object_init(PyObject *self, PyObject *args, PyObject *kwds) object_init(PyObject *self, PyObject *args, PyObject *kwds)
{ {
int err = 0;
PyTypeObject *type = Py_TYPE(self); PyTypeObject *type = Py_TYPE(self);
if (excess_args(args, kwds) && if (excess_args(args, kwds)) {
(type->tp_new == object_new || type->tp_init != object_init)) { if (type->tp_init != object_init) {
PyErr_SetString(PyExc_TypeError, "object.__init__() takes no parameters"); PyErr_SetString(PyExc_TypeError, "object() takes no arguments");
err = -1; return -1;
}
if (type->tp_new == object_new) {
PyErr_Format(PyExc_TypeError, "%.200s() takes no arguments",
type->tp_name);
return -1;
}
} }
return err; return 0;
} }
static PyObject * static PyObject *
object_new(PyTypeObject *type, PyObject *args, PyObject *kwds) object_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{ {
if (excess_args(args, kwds) && if (excess_args(args, kwds)) {
(type->tp_init == object_init || type->tp_new != object_new)) { if (type->tp_new != object_new) {
PyErr_SetString(PyExc_TypeError, "object() takes no parameters"); PyErr_SetString(PyExc_TypeError, "object() takes no arguments");
return NULL; return NULL;
}
if (type->tp_init == object_init) {
PyErr_Format(PyExc_TypeError, "%.200s() takes no arguments",
type->tp_name);
return NULL;
}
} }
if (type->tp_flags & Py_TPFLAGS_IS_ABSTRACT) { if (type->tp_flags & Py_TPFLAGS_IS_ABSTRACT) {
......
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