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

Bugfix candidate.
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 862fc77..dd85168 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -1214,6 +1214,14 @@
     vereq(ff.__get__(0, int)(42), (int, 42))
     vereq(ff.__get__(0)(42), (int, 42))
 
+    # Test super() with classmethods (SF bug 535444)
+    veris(C.goo.im_self, C)
+    veris(D.goo.im_self, D)
+    veris(super(D,D).goo.im_self, D)
+    veris(super(D,d).goo.im_self, D)
+    vereq(super(D,D).goo(), (D,))
+    vereq(super(D,d).goo(), (D,))
+
 def classmethods_in_c():
     if verbose: print "Testing C-based class methods..."
     import xxsubtype as spam
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 474a97c..a2fe27c 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -4021,10 +4021,13 @@
 
 	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 @@
 				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 @@
 				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;
 				}