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

``

`-

`

649

``

`-

`

650

``

`-

`

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;

`