fix for changes in PyXXXDescrObject structures in upcoming Py3.2
authorLisandro Dalcin <dalcinl@gmail.com>
Wed, 14 Oct 2009 23:12:10 +0000 (20:12 -0300)
committerLisandro Dalcin <dalcinl@gmail.com>
Wed, 14 Oct 2009 23:12:10 +0000 (20:12 -0300)
Cython/Compiler/Symtab.py

index 4c9463d265f236865f7580f463b9741f16143468..0d2360e74680a6b5a9d38f4a4153cb9fd4ba3f42 100644 (file)
@@ -1450,15 +1450,22 @@ static PyObject* __Pyx_Method_ClassMethod(PyObject *method) {
     }
     if (PyObject_TypeCheck(method, methoddescr_type)) { /* cdef classes */
         PyMethodDescrObject *descr = (PyMethodDescrObject *)method;
-        return PyDescr_NewClassMethod(descr->d_type, descr->d_method);
+        #if PY_VERSION_HEX < 0x03020000
+        PyTypeObject *d_type = descr->d_type;
+        #else
+        PyTypeObject *d_type = descr->d_common.d_type;
+        #endif
+        return PyDescr_NewClassMethod(d_type, descr->d_method);
     }
-    else if (PyMethod_Check(method)) {                                /* python classes */
+    else if (PyMethod_Check(method)) { /* python classes */
         return PyClassMethod_New(PyMethod_GET_FUNCTION(method));
     }
     else if (PyCFunction_Check(method)) {
         return PyClassMethod_New(method);
     }
-    PyErr_Format(PyExc_TypeError, "Class-level classmethod() can only be called on a method_descriptor or instance method.");
+    PyErr_Format(PyExc_TypeError,
+                 "Class-level classmethod() can only be called on"
+                 "a method_descriptor or instance method.");
     return NULL;
 }
 """)