Skip to content

Commit fbe6eac

Browse files
Isolate tp_bases.
1 parent 2cadd62 commit fbe6eac

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

Objects/typeobject.c

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -842,12 +842,23 @@ type_set_abstractmethods(PyTypeObject *type, PyObject *value, void *context)
842842
static inline PyObject *
843843
get_bases(PyTypeObject *type)
844844
{
845+
if (type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
846+
static_builtin_state *state = _PyStaticType_GetState(type);
847+
assert(state != NULL);
848+
return state->tp_bases;
849+
}
845850
return type->tp_bases;
846851
}
847852

848853
static inline void
849854
set_bases(PyTypeObject *type, PyObject *bases)
850855
{
856+
if (type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
857+
static_builtin_state *state = _PyStaticType_GetState(type);
858+
assert(state != NULL);
859+
state->tp_bases = bases;
860+
return;
861+
}
851862
type->tp_bases = bases;
852863
}
853864

@@ -4547,9 +4558,19 @@ clear_static_tp_subclasses(PyTypeObject *type)
45474558
static void
45484559
clear_static_type_interp_data(PyTypeObject *type)
45494560
{
4550-
Py_CLEAR(type->tp_dict);
4551-
Py_CLEAR(type->tp_bases);
4552-
Py_CLEAR(type->tp_mro);
4561+
if (type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
4562+
static_builtin_state *state = _PyStaticType_GetState(type);
4563+
assert(state != NULL);
4564+
4565+
Py_CLEAR(type->tp_dict);
4566+
Py_CLEAR(state->tp_bases);
4567+
Py_CLEAR(type->tp_mro);
4568+
}
4569+
else {
4570+
Py_CLEAR(type->tp_dict);
4571+
Py_CLEAR(type->tp_bases);
4572+
Py_CLEAR(type->tp_mro);
4573+
}
45534574
clear_static_tp_subclasses(type);
45544575
}
45554576

0 commit comments

Comments
 (0)