]> granicus.if.org Git - python/commitdiff
Make ctypes compile again with older Python versions.
authorThomas Heller <theller@ctypes.org>
Tue, 8 Sep 2009 19:24:36 +0000 (19:24 +0000)
committerThomas Heller <theller@ctypes.org>
Tue, 8 Sep 2009 19:24:36 +0000 (19:24 +0000)
Modules/_ctypes/callbacks.c

index c7bfa21b832ca916dbea6f5898d3e581b3451e0c..a643970586a80f345c6d23cb9ba8134a38b5dc23 100644 (file)
@@ -95,6 +95,55 @@ PrintError(char *msg, ...)
        PyErr_Print();
 }
 
+#if (PY_VERSION_HEX < 0x02070000)
+PyCodeObject *
+PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno)
+{
+       static PyObject *emptystring = NULL;
+       static PyObject *nulltuple = NULL;
+       PyObject *filename_ob = NULL;
+       PyObject *funcname_ob = NULL;
+       PyCodeObject *result = NULL;
+       if (emptystring == NULL) {
+               emptystring = PyString_FromString("");
+               if (emptystring == NULL)
+                       goto failed;
+       }
+       if (nulltuple == NULL) {
+               nulltuple = PyTuple_New(0);
+               if (nulltuple == NULL)
+                       goto failed;
+       }
+       funcname_ob = PyString_FromString(funcname);
+       if (funcname_ob == NULL)
+               goto failed;
+       filename_ob = PyString_FromString(filename);
+       if (filename_ob == NULL)
+               goto failed;
+
+       result = PyCode_New(0,                  /* argcount */
+                           0,                  /* nlocals */
+                           0,                  /* stacksize */
+                           0,                  /* flags */
+                           emptystring,        /* code */
+                           nulltuple,          /* consts */
+                           nulltuple,          /* names */
+                           nulltuple,          /* varnames */
+                           nulltuple,          /* freevars */
+                           nulltuple,          /* cellvars */
+                           filename_ob,        /* filename */
+                           funcname_ob,        /* name */
+                           firstlineno,        /* firstlineno */
+                           emptystring         /* lnotab */
+                           );
+
+failed:
+       Py_XDECREF(funcname_ob);
+       Py_XDECREF(filename_ob);
+       return result;
+}
+#endif
+
 
 /* after code that pyrex generates */
 void _ctypes_add_traceback(char *funcname, char *filename, int lineno)