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:
Guido van Rossum 2003-02-18 19:22:22 +00:00
parent 6b29c0147b
commit 8e80a72be4

View file

@ -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;
}