SF patch 537536 by Phillip J. Eby, fix for SF bug 535444, super()

broken w/ classmethods.

Bugfix candidate.
This commit is contained in:
Guido van Rossum 2002-04-02 17:53:47 +00:00
parent 103b548a76
commit 155db9aa22
2 changed files with 15 additions and 3 deletions

View file

@ -4021,10 +4021,13 @@ super_getattro(PyObject *self, PyObject *name)
if (su->obj != NULL) {
PyObject *mro, *res, *tmp, *dict;
PyTypeObject *starttype;
descrgetfunc f;
int i, n;
mro = su->obj->ob_type->tp_mro;
starttype = su->obj->ob_type;
mro = starttype->tp_mro;
if (mro == NULL)
n = 0;
else {
@ -4036,7 +4039,8 @@ super_getattro(PyObject *self, PyObject *name)
break;
}
if (i >= n && PyType_Check(su->obj)) {
mro = ((PyTypeObject *)(su->obj))->tp_mro;
starttype = (PyTypeObject *)(su->obj);
mro = starttype->tp_mro;
if (mro == NULL)
n = 0;
else {
@ -4064,7 +4068,7 @@ super_getattro(PyObject *self, PyObject *name)
Py_INCREF(res);
f = res->ob_type->tp_descr_get;
if (f != NULL) {
tmp = f(res, su->obj, res);
tmp = f(res, su->obj, (PyObject *)starttype);
Py_DECREF(res);
res = tmp;
}