summaryrefslogtreecommitdiffstats
path: root/Modules/_abc.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/_abc.c')
-rw-r--r--Modules/_abc.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/Modules/_abc.c b/Modules/_abc.c
index 9473905..399ecbb 100644
--- a/Modules/_abc.c
+++ b/Modules/_abc.c
@@ -8,7 +8,6 @@
#include "pycore_object.h" // _PyType_GetSubclasses()
#include "pycore_runtime.h" // _Py_ID()
#include "pycore_setobject.h" // _PySet_NextEntry()
-#include "pycore_typeobject.h" // _PyType_GetMRO()
#include "pycore_weakref.h" // _PyWeakref_GET_REF()
#include "clinic/_abc.c.h"
@@ -744,18 +743,12 @@ _abc__abc_subclasscheck_impl(PyObject *module, PyObject *self,
Py_DECREF(ok);
/* 4. Check if it's a direct subclass. */
- PyObject *mro = _PyType_GetMRO((PyTypeObject *)subclass);
- assert(PyTuple_Check(mro));
- for (pos = 0; pos < PyTuple_GET_SIZE(mro); pos++) {
- PyObject *mro_item = PyTuple_GET_ITEM(mro, pos);
- assert(mro_item != NULL);
- if ((PyObject *)self == mro_item) {
- if (_add_to_weak_set(&impl->_abc_cache, subclass) < 0) {
- goto end;
- }
- result = Py_True;
+ if (PyType_IsSubtype((PyTypeObject *)subclass, (PyTypeObject *)self)) {
+ if (_add_to_weak_set(&impl->_abc_cache, subclass) < 0) {
goto end;
}
+ result = Py_True;
+ goto end;
}
/* 5. Check if it's a subclass of a registered class (recursive). */