mirror of https://github.com/python/cpython
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:
parent
0729694246
commit
ab030d6f9d
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue