mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
The recent changes to super(), in particular supercheck(), broke when
using super() for an instance in a metaclass situation. Because the class was a metaclass, the instance was a class, and hence the PyType_Check() branch was taken. But this branch didn't apply. Make it so that if this branch doesn't apply, the other branch is still tried. All tests pass.
This commit is contained in:
parent
6b29c0147b
commit
8e80a72be4
1 changed files with 7 additions and 9 deletions
|
@ -5170,16 +5170,14 @@ supercheck(PyTypeObject *type, PyObject *obj)
|
|||
This will allow using super() with a proxy for obj.
|
||||
*/
|
||||
|
||||
if (PyType_Check(obj)) {
|
||||
/* It's a new-style class */
|
||||
if (PyType_IsSubtype((PyTypeObject *)obj, type)) {
|
||||
Py_INCREF(obj);
|
||||
return (PyTypeObject *)obj;
|
||||
}
|
||||
else
|
||||
goto fail;
|
||||
/* Check for first bullet above (special case) */
|
||||
if (PyType_Check(obj) && PyType_IsSubtype((PyTypeObject *)obj, type)) {
|
||||
Py_INCREF(obj);
|
||||
return (PyTypeObject *)obj;
|
||||
}
|
||||
else if (PyType_IsSubtype(obj->ob_type, type)) {
|
||||
|
||||
/* Normal case */
|
||||
if (PyType_IsSubtype(obj->ob_type, type)) {
|
||||
Py_INCREF(obj->ob_type);
|
||||
return obj->ob_type;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue