Skip to content

Commit 5b8d453

Browse files
committed
Simplify some code
1 parent e858ea7 commit 5b8d453

2 files changed

Lines changed: 35 additions & 47 deletions

File tree

Objects/typeobject.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3510,7 +3510,6 @@ generic_subscript(PyTypeObject *tp, PyObject *key)
35103510
}
35113511
return NULL;
35123512
}
3513-
return NULL;
35143513
}
35153514

35163515
static PyMappingMethods generic_as_mapping = {

Python/bltinmodule.c

Lines changed: 35 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -50,73 +50,62 @@ static PyObject*
5050
update_bases(PyObject* bases, PyObject** args, int nargs, int* modified_bases)
5151
{
5252
int i, ind, tot_nones;
53-
PyObject *new_bases;
53+
PyObject *base, *new_base, *new_base_meth, *new_bases;
54+
PyObject* stack[1] = {bases};
5455
assert(PyTuple_Check(bases));
5556

5657
/* We have a separate cycle to calculate replacements with the idea that in
5758
most cases we just scroll quickly though it and return original bases */
5859
for (i = 2; i < nargs; i++){
59-
PyObject *base, *new_base, *new_base_meth;
60-
PyObject* stack[1];
6160
base = args[i];
6261
if (PyType_Check(base)) {
6362
continue;
6463
}
6564
new_base_meth = PyObject_GetAttrString(base, "__base_subclass__");
66-
if (new_base_meth == NULL) {
65+
if (!new_base_meth) {
6766
if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
6867
PyErr_Clear();
68+
continue;
6969
}
70-
else {
71-
return NULL;
72-
}
73-
}
74-
else {
75-
if (!PyCallable_Check(new_base_meth)) {
76-
PyErr_SetString(PyExc_TypeError,
77-
"__base_subclass__ must be callable");
78-
return NULL;
79-
}
80-
stack[0] = bases;
81-
new_base = _PyObject_FastCall(new_base_meth, stack, 1);
82-
if (new_base == NULL){
83-
return NULL;
84-
}
85-
Py_INCREF(new_base);
86-
args[i] = new_base;
87-
*modified_bases = 1;
70+
return NULL;
8871
}
89-
}
90-
91-
if (*modified_bases){
92-
/* Find out have many bases wants to be removed to pre-allocate
93-
the tuple for new bases */
94-
tot_nones = 0;
95-
for (i = 2; i < nargs; i++) {
96-
if (args[i] == Py_None) {
97-
tot_nones++;
98-
}
72+
if (!PyCallable_Check(new_base_meth)) {
73+
PyErr_SetString(PyExc_TypeError,
74+
"__base_subclass__ must be callable");
75+
return NULL;
9976
}
100-
new_bases = PyTuple_New(nargs - 2 - tot_nones);
101-
/* Remove all None's from base classes */
102-
ind = 0;
103-
for (i = 2; i < nargs; i++) {
104-
PyObject* base;
105-
base = args[i];
106-
if (base != Py_None) {
107-
Py_INCREF(base);
108-
PyTuple_SET_ITEM(new_bases, ind, base);
109-
ind++;
110-
}
77+
new_base = _PyObject_FastCall(new_base_meth, stack, 1);
78+
if (!new_base){
79+
return NULL;
11180
}
112-
return new_bases;
81+
Py_INCREF(new_base);
82+
args[i] = new_base;
83+
*modified_bases = 1;
11384
}
114-
else {
85+
if (!*modified_bases){
11586
return bases;
11687
}
88+
/* Find out have many bases wants to be removed to pre-allocate
89+
the tuple for new bases, then keep only non-None's in bases.*/
90+
tot_nones = 0;
91+
for (i = 2; i < nargs; i++) {
92+
if (args[i] == Py_None) {
93+
tot_nones++;
94+
}
95+
}
96+
new_bases = PyTuple_New(nargs - 2 - tot_nones);
97+
ind = 0;
98+
for (i = 2; i < nargs; i++) {
99+
base = args[i];
100+
if (base != Py_None) {
101+
Py_INCREF(base);
102+
PyTuple_SET_ITEM(new_bases, ind, base);
103+
ind++;
104+
}
105+
}
106+
return new_bases;
117107
}
118108

119-
120109
/* AC: cannot convert yet, waiting for *args support */
121110
static PyObject *
122111
builtin___build_class__(PyObject *self, PyObject **args, Py_ssize_t nargs,

0 commit comments

Comments
 (0)