cleanup of __Pyx_ImportType() to allow constifying the imported class name string
authorStefan Behnel <scoder@users.berlios.de>
Wed, 10 Sep 2008 14:39:36 +0000 (16:39 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Wed, 10 Sep 2008 14:39:36 +0000 (16:39 +0200)
Cython/Compiler/ModuleNode.py

index 6429f85b37cf208e5e77e171481f666700290865..b772c2c5851a7b1baf06f957294af00b3f3ff04e 100644 (file)
@@ -1987,29 +1987,29 @@ bad:
 
 type_import_utility_code = [
 """
-static PyTypeObject *__Pyx_ImportType(const char *module_name, char *class_name, long size);  /*proto*/
+static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, long size);  /*proto*/
 ""","""
 #ifndef __PYX_HAVE_RT_ImportType
 #define __PYX_HAVE_RT_ImportType
-static PyTypeObject *__Pyx_ImportType(const char *module_name, char *class_name,
+static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
     long size)
 {
     PyObject *py_module = 0;
     PyObject *result = 0;
     PyObject *py_name = 0;
 
+    py_module = __Pyx_ImportModule(module_name);
+    if (!py_module)
+        goto bad;
     #if PY_MAJOR_VERSION < 3
-    py_name = PyString_FromString(module_name);
+    py_name = PyString_FromString(class_name);
     #else
-    py_name = PyUnicode_FromString(module_name);
+    py_name = PyUnicode_FromString(class_name);
     #endif
     if (!py_name)
         goto bad;
-
-    py_module = __Pyx_ImportModule(module_name);
-    if (!py_module)
-        goto bad;
-    result = PyObject_GetAttrString(py_module, class_name);
+    result = PyObject_GetAttr(py_module, py_name);
+    Py_DECREF(py_name);
     if (!result)
         goto bad;
     if (!PyType_Check(result)) {
@@ -2026,7 +2026,6 @@ static PyTypeObject *__Pyx_ImportType(const char *module_name, char *class_name,
     }
     return (PyTypeObject *)result;
 bad:
-    Py_XDECREF(py_name);
     Py_XDECREF(result);
     return 0;
 }