diff options
author | Benjamin Peterson <benjamin@python.org> | 2012-03-17 05:05:44 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2012-03-17 05:05:44 (GMT) |
commit | 96384b93aae1d1e45dda21c4024d7d083c91626d (patch) | |
tree | 0f1fc36742c65bdbd227faffea75068b580112fa /Objects | |
parent | 80e22b56d3efdf2351307de6c6706ebed934fe7a (diff) | |
download | cpython-96384b93aae1d1e45dda21c4024d7d083c91626d.zip cpython-96384b93aae1d1e45dda21c4024d7d083c91626d.tar.gz cpython-96384b93aae1d1e45dda21c4024d7d083c91626d.tar.bz2 |
make extra arguments to object.__init__/__new__ to errors in most cases (finishes #1683368)
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/typeobject.c | 45 |
1 files changed, 10 insertions, 35 deletions
diff --git a/Objects/typeobject.c b/Objects/typeobject.c index b427040..5fbd7cb 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -2905,22 +2905,11 @@ static int object_init(PyObject *self, PyObject *args, PyObject *kwds) { int err = 0; - if (excess_args(args, kwds)) { - PyTypeObject *type = Py_TYPE(self); - if (type->tp_init != object_init && - type->tp_new != object_new) - { - err = PyErr_WarnEx(PyExc_DeprecationWarning, - "object.__init__() takes no parameters", - 1); - } - else if (type->tp_init != object_init || - type->tp_new == object_new) - { - PyErr_SetString(PyExc_TypeError, - "object.__init__() takes no parameters"); - err = -1; - } + PyTypeObject *type = Py_TYPE(self); + if (excess_args(args, kwds) && + (type->tp_new == object_new || type->tp_init != object_init)) { + PyErr_SetString(PyExc_TypeError, "object.__init__() takes no parameters"); + err = -1; } return err; } @@ -2928,26 +2917,12 @@ object_init(PyObject *self, PyObject *args, PyObject *kwds) static PyObject * object_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { - int err = 0; - if (excess_args(args, kwds)) { - if (type->tp_new != object_new && - type->tp_init != object_init) - { - err = PyErr_WarnEx(PyExc_DeprecationWarning, - "object.__new__() takes no parameters", - 1); - } - else if (type->tp_new != object_new || - type->tp_init == object_init) - { - PyErr_SetString(PyExc_TypeError, - "object.__new__() takes no parameters"); - err = -1; - } - } - if (err < 0) + if (excess_args(args, kwds) && + (type->tp_init == object_init || type->tp_new != object_new)) { + PyErr_SetString(PyExc_TypeError, "object.__new__() takes no parameters"); return NULL; - + } + if (type->tp_flags & Py_TPFLAGS_IS_ABSTRACT) { PyObject *abstract_methods = NULL; PyObject *builtins; |