bpo-32999: Revert GH-6002 (fc7df0e6) (GH-6189) · python/cpython@f757b72 (original) (raw)
`@@ -16,7 +16,6 @@ _Py_IDENTIFIER(abstractmethods);
`
16
16
`_Py_IDENTIFIER(class);
`
17
17
`_Py_IDENTIFIER(dict);
`
18
18
`_Py_IDENTIFIER(bases);
`
19
``
`-
_Py_IDENTIFIER(mro);
`
20
19
`_Py_IDENTIFIER(_abc_impl);
`
21
20
`_Py_IDENTIFIER(subclasscheck);
`
22
21
`_Py_IDENTIFIER(subclasshook);
`
`@@ -574,7 +573,7 @@ _abc__abc_subclasscheck_impl(PyObject *module, PyObject *self,
`
574
573
`return NULL;
`
575
574
` }
`
576
575
``
577
``
`-
PyObject *ok, *mro = NULL, *subclasses = NULL, *result = NULL;
`
``
576
`+
PyObject *ok, *subclasses = NULL, *result = NULL;
`
578
577
`Py_ssize_t pos;
`
579
578
`int incache;
`
580
579
`_abc_data *impl = _get_impl(self);
`
`@@ -643,31 +642,20 @@ _abc__abc_subclasscheck_impl(PyObject *module, PyObject *self,
`
643
642
` }
`
644
643
`Py_DECREF(ok);
`
645
644
``
646
``
`-
/* 4. Check if it's a direct subclass.
`
647
``
`-
`
648
``
`-
- if cls in getattr(subclass, 'mro', ()):
`
649
``
`-
- cls._abc_cache.add(subclass)
`
650
``
`-
- return True
`
651
``
`-
*/
`
652
``
`-
if (PyObject_LookupAttrId(subclass, &PyId___mro_, &mro) < 0) {
`
653
``
`-
goto end;
`
654
``
`-
}
`
655
``
`-
if (mro != NULL) {
`
656
``
`-
if (!PyTuple_Check(mro)) {
`
657
``
`-
// Python version supports non-tuple iterable. Keep it as
`
658
``
`-
// implementation detail.
`
659
``
`-
PyErr_SetString(PyExc_TypeError, "mro is not a tuple");
`
``
645
`+
/* 4. Check if it's a direct subclass. */
`
``
646
`+
PyObject *mro = ((PyTypeObject *)subclass)->tp_mro;
`
``
647
`+
assert(PyTuple_Check(mro));
`
``
648
`+
for (pos = 0; pos < PyTuple_GET_SIZE(mro); pos++) {
`
``
649
`+
PyObject *mro_item = PyTuple_GET_ITEM(mro, pos);
`
``
650
`+
if (mro_item == NULL) {
`
660
651
` goto end;
`
661
652
` }
`
662
``
`-
for (pos = 0; pos < PyTuple_GET_SIZE(mro); pos++) {
`
663
``
`-
PyObject *mro_item = PyTuple_GET_ITEM(mro, pos);
`
664
``
`-
if ((PyObject *)self == mro_item) {
`
665
``
`-
if (_add_to_weak_set(&impl->_abc_cache, subclass) < 0) {
`
666
``
`-
goto end;
`
667
``
`-
}
`
668
``
`-
result = Py_True;
`
``
653
`+
if ((PyObject *)self == mro_item) {
`
``
654
`+
if (_add_to_weak_set(&impl->_abc_cache, subclass) < 0) {
`
669
655
` goto end;
`
670
656
` }
`
``
657
`+
result = Py_True;
`
``
658
`+
goto end;
`
671
659
` }
`
672
660
` }
`
673
661
``
`@@ -708,7 +696,6 @@ _abc__abc_subclasscheck_impl(PyObject *module, PyObject *self,
`
708
696
``
709
697
`end:
`
710
698
`Py_DECREF(impl);
`
711
``
`-
Py_XDECREF(mro);
`
712
699
`Py_XDECREF(subclasses);
`
713
700
`Py_XINCREF(result);
`
714
701
`return result;
`