bpo-38211: Clean up type_init() (GH-16257)

1. Remove conditions already checked by assert()
2. Remove object_init() call that effectively creates an empty tuple and
checks that this tuple is empty
This commit is contained in:
Sergey Fedoseev 2021-06-16 18:04:38 +05:00 committed by GitHub
parent 0729694246
commit ab030d6f9d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 4 additions and 19 deletions

View File

@ -2428,41 +2428,26 @@ valid_identifier(PyObject *s)
return 1; return 1;
} }
/* Forward */
static int
object_init(PyObject *self, PyObject *args, PyObject *kwds);
static int static int
type_init(PyObject *cls, PyObject *args, PyObject *kwds) type_init(PyObject *cls, PyObject *args, PyObject *kwds)
{ {
int res;
assert(args != NULL && PyTuple_Check(args)); assert(args != NULL && PyTuple_Check(args));
assert(kwds == NULL || PyDict_Check(kwds)); assert(kwds == NULL || PyDict_Check(kwds));
if (kwds != NULL && PyTuple_Check(args) && PyTuple_GET_SIZE(args) == 1 && if (kwds != NULL && PyTuple_GET_SIZE(args) == 1 &&
PyDict_Check(kwds) && PyDict_GET_SIZE(kwds) != 0) { PyDict_GET_SIZE(kwds) != 0) {
PyErr_SetString(PyExc_TypeError, PyErr_SetString(PyExc_TypeError,
"type.__init__() takes no keyword arguments"); "type.__init__() takes no keyword arguments");
return -1; return -1;
} }
if (args != NULL && PyTuple_Check(args) && if ((PyTuple_GET_SIZE(args) != 1 && PyTuple_GET_SIZE(args) != 3)) {
(PyTuple_GET_SIZE(args) != 1 && PyTuple_GET_SIZE(args) != 3)) {
PyErr_SetString(PyExc_TypeError, PyErr_SetString(PyExc_TypeError,
"type.__init__() takes 1 or 3 arguments"); "type.__init__() takes 1 or 3 arguments");
return -1; return -1;
} }
/* Call object.__init__(self) now. */ return 0;
/* XXX Could call super(type, cls).__init__() but what's the point? */
args = PyTuple_GetSlice(args, 0, 0);
if (args == NULL) {
return -1;
}
res = object_init(cls, args, NULL);
Py_DECREF(args);
return res;
} }
unsigned long unsigned long