Index: third_party/cython/src/Cython/Utility/ImportExport.c |
diff --git a/third_party/cython/src/Cython/Utility/ImportExport.c b/third_party/cython/src/Cython/Utility/ImportExport.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..60d7bf60e7ed4688912d93e7c9a2d2c84711771e |
--- /dev/null |
+++ b/third_party/cython/src/Cython/Utility/ImportExport.c |
@@ -0,0 +1,558 @@ |
+/////////////// PyIdentifierFromString.proto /////////////// |
+ |
+#if !defined(__Pyx_PyIdentifier_FromString) |
+#if PY_MAJOR_VERSION < 3 |
+ #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s) |
+#else |
+ #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s) |
+#endif |
+#endif |
+ |
+ |
+/////////////// Import.proto /////////////// |
+ |
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ |
+ |
+/////////////// Import /////////////// |
+//@requires: ObjectHandling.c::PyObjectGetAttrStr |
+//@substitute: naming |
+ |
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { |
+ PyObject *empty_list = 0; |
+ PyObject *module = 0; |
+ PyObject *global_dict = 0; |
+ PyObject *empty_dict = 0; |
+ PyObject *list; |
+ #if PY_VERSION_HEX < 0x03030000 |
+ PyObject *py_import; |
+ py_import = __Pyx_PyObject_GetAttrStr($builtins_cname, PYIDENT("__import__")); |
+ if (!py_import) |
+ goto bad; |
+ #endif |
+ if (from_list) |
+ list = from_list; |
+ else { |
+ empty_list = PyList_New(0); |
+ if (!empty_list) |
+ goto bad; |
+ list = empty_list; |
+ } |
+ global_dict = PyModule_GetDict($module_cname); |
+ if (!global_dict) |
+ goto bad; |
+ empty_dict = PyDict_New(); |
+ if (!empty_dict) |
+ goto bad; |
+ #if PY_VERSION_HEX >= 0x02050000 |
+ { |
+ #if PY_MAJOR_VERSION >= 3 |
+ if (level == -1) { |
+ if (strchr(__Pyx_MODULE_NAME, '.')) { |
+ /* try package relative import first */ |
+ #if PY_VERSION_HEX < 0x03030000 |
+ PyObject *py_level = PyInt_FromLong(1); |
+ if (!py_level) |
+ goto bad; |
+ module = PyObject_CallFunctionObjArgs(py_import, |
+ name, global_dict, empty_dict, list, py_level, NULL); |
+ Py_DECREF(py_level); |
+ #else |
+ module = PyImport_ImportModuleLevelObject( |
+ name, global_dict, empty_dict, list, 1); |
+ #endif |
+ if (!module) { |
+ if (!PyErr_ExceptionMatches(PyExc_ImportError)) |
+ goto bad; |
+ PyErr_Clear(); |
+ } |
+ } |
+ level = 0; /* try absolute import on failure */ |
+ } |
+ #endif |
+ if (!module) { |
+ #if PY_VERSION_HEX < 0x03030000 |
+ PyObject *py_level = PyInt_FromLong(level); |
+ if (!py_level) |
+ goto bad; |
+ module = PyObject_CallFunctionObjArgs(py_import, |
+ name, global_dict, empty_dict, list, py_level, NULL); |
+ Py_DECREF(py_level); |
+ #else |
+ module = PyImport_ImportModuleLevelObject( |
+ name, global_dict, empty_dict, list, level); |
+ #endif |
+ } |
+ } |
+ #else |
+ if (level>0) { |
+ PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); |
+ goto bad; |
+ } |
+ module = PyObject_CallFunctionObjArgs(py_import, |
+ name, global_dict, empty_dict, list, NULL); |
+ #endif |
+bad: |
+ #if PY_VERSION_HEX < 0x03030000 |
+ Py_XDECREF(py_import); |
+ #endif |
+ Py_XDECREF(empty_list); |
+ Py_XDECREF(empty_dict); |
+ return module; |
+} |
+ |
+ |
+/////////////// ImportFrom.proto /////////////// |
+ |
+static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ |
+ |
+/////////////// ImportFrom /////////////// |
+//@requires: ObjectHandling.c::PyObjectGetAttrStr |
+ |
+static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { |
+ PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); |
+ if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { |
+ PyErr_Format(PyExc_ImportError, |
+ #if PY_MAJOR_VERSION < 3 |
+ "cannot import name %.230s", PyString_AS_STRING(name)); |
+ #else |
+ "cannot import name %S", name); |
+ #endif |
+ } |
+ return value; |
+} |
+ |
+ |
+/////////////// ModuleImport.proto /////////////// |
+ |
+static PyObject *__Pyx_ImportModule(const char *name); /*proto*/ |
+ |
+/////////////// ModuleImport /////////////// |
+//@requires: PyIdentifierFromString |
+ |
+#ifndef __PYX_HAVE_RT_ImportModule |
+#define __PYX_HAVE_RT_ImportModule |
+static PyObject *__Pyx_ImportModule(const char *name) { |
+ PyObject *py_name = 0; |
+ PyObject *py_module = 0; |
+ |
+ py_name = __Pyx_PyIdentifier_FromString(name); |
+ if (!py_name) |
+ goto bad; |
+ py_module = PyImport_Import(py_name); |
+ Py_DECREF(py_name); |
+ return py_module; |
+bad: |
+ Py_XDECREF(py_name); |
+ return 0; |
+} |
+#endif |
+ |
+ |
+/////////////// SetPackagePathFromImportLib.proto /////////////// |
+ |
+#if PY_VERSION_HEX >= 0x03030000 |
+static int __Pyx_SetPackagePathFromImportLib(const char* parent_package_name, PyObject *module_name); |
+#else |
+#define __Pyx_SetPackagePathFromImportLib(a, b) 0 |
+#endif |
+ |
+/////////////// SetPackagePathFromImportLib /////////////// |
+//@requires: ObjectHandling.c::PyObjectGetAttrStr |
+//@substitute: naming |
+ |
+#if PY_VERSION_HEX >= 0x03030000 |
+static int __Pyx_SetPackagePathFromImportLib(const char* parent_package_name, PyObject *module_name) { |
+ PyObject *importlib, *loader, *osmod, *ossep, *parts, *package_path; |
+ PyObject *path = NULL, *file_path = NULL; |
+ int result; |
+ if (parent_package_name) { |
+ PyObject *package = PyImport_ImportModule(parent_package_name); |
+ if (unlikely(!package)) |
+ goto bad; |
+ path = PyObject_GetAttrString(package, "__path__"); |
+ Py_DECREF(package); |
+ if (unlikely(!path) || unlikely(path == Py_None)) |
+ goto bad; |
+ } else { |
+ path = Py_None; Py_INCREF(Py_None); |
+ } |
+ // package_path = [importlib.find_loader(module_name, path).path.rsplit(os.sep, 1)[0]] |
+ importlib = PyImport_ImportModule("importlib"); |
+ if (unlikely(!importlib)) |
+ goto bad; |
+ loader = PyObject_CallMethod(importlib, "find_loader", "(OO)", module_name, path); |
+ Py_DECREF(importlib); |
+ Py_DECREF(path); path = NULL; |
+ if (unlikely(!loader)) |
+ goto bad; |
+ file_path = PyObject_GetAttrString(loader, "path"); |
+ Py_DECREF(loader); |
+ if (unlikely(!file_path)) |
+ goto bad; |
+ |
+ if (unlikely(__Pyx_SetAttrString($module_cname, "__file__", file_path) < 0)) |
+ goto bad; |
+ |
+ osmod = PyImport_ImportModule("os"); |
+ if (unlikely(!osmod)) |
+ goto bad; |
+ ossep = PyObject_GetAttrString(osmod, "sep"); |
+ Py_DECREF(osmod); |
+ if (unlikely(!ossep)) |
+ goto bad; |
+ parts = PyObject_CallMethod(file_path, "rsplit", "(Oi)", ossep, 1); |
+ Py_DECREF(file_path); file_path = NULL; |
+ Py_DECREF(ossep); |
+ if (unlikely(!parts)) |
+ goto bad; |
+ package_path = Py_BuildValue("[O]", PyList_GET_ITEM(parts, 0)); |
+ Py_DECREF(parts); |
+ if (unlikely(!package_path)) |
+ goto bad; |
+ goto set_path; |
+ |
+bad: |
+ PyErr_WriteUnraisable(module_name); |
+ Py_XDECREF(path); |
+ Py_XDECREF(file_path); |
+ |
+ // set an empty path list on failure |
+ PyErr_Clear(); |
+ package_path = PyList_New(0); |
+ if (unlikely(!package_path)) |
+ return -1; |
+ |
+set_path: |
+ result = __Pyx_SetAttrString($module_cname, "__path__", package_path); |
+ Py_DECREF(package_path); |
+ return result; |
+} |
+#endif |
+ |
+ |
+/////////////// TypeImport.proto /////////////// |
+ |
+static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict); /*proto*/ |
+ |
+/////////////// TypeImport /////////////// |
+//@requires: PyIdentifierFromString |
+//@requires: ModuleImport |
+ |
+#ifndef __PYX_HAVE_RT_ImportType |
+#define __PYX_HAVE_RT_ImportType |
+static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, |
+ size_t size, int strict) |
+{ |
+ PyObject *py_module = 0; |
+ PyObject *result = 0; |
+ PyObject *py_name = 0; |
+ char warning[200]; |
+ Py_ssize_t basicsize; |
+#ifdef Py_LIMITED_API |
+ PyObject *py_basicsize; |
+#endif |
+ |
+ py_module = __Pyx_ImportModule(module_name); |
+ if (!py_module) |
+ goto bad; |
+ py_name = __Pyx_PyIdentifier_FromString(class_name); |
+ if (!py_name) |
+ goto bad; |
+ result = PyObject_GetAttr(py_module, py_name); |
+ Py_DECREF(py_name); |
+ py_name = 0; |
+ Py_DECREF(py_module); |
+ py_module = 0; |
+ if (!result) |
+ goto bad; |
+ if (!PyType_Check(result)) { |
+ PyErr_Format(PyExc_TypeError, |
+ "%.200s.%.200s is not a type object", |
+ module_name, class_name); |
+ goto bad; |
+ } |
+#ifndef Py_LIMITED_API |
+ basicsize = ((PyTypeObject *)result)->tp_basicsize; |
+#else |
+ py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); |
+ if (!py_basicsize) |
+ goto bad; |
+ basicsize = PyLong_AsSsize_t(py_basicsize); |
+ Py_DECREF(py_basicsize); |
+ py_basicsize = 0; |
+ if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) |
+ goto bad; |
+#endif |
+ if (!strict && (size_t)basicsize > size) { |
+ PyOS_snprintf(warning, sizeof(warning), |
+ "%s.%s size changed, may indicate binary incompatibility", |
+ module_name, class_name); |
+ #if PY_VERSION_HEX < 0x02050000 |
+ if (PyErr_Warn(NULL, warning) < 0) goto bad; |
+ #else |
+ if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; |
+ #endif |
+ } |
+ else if ((size_t)basicsize != size) { |
+ PyErr_Format(PyExc_ValueError, |
+ "%.200s.%.200s has the wrong size, try recompiling", |
+ module_name, class_name); |
+ goto bad; |
+ } |
+ return (PyTypeObject *)result; |
+bad: |
+ Py_XDECREF(py_module); |
+ Py_XDECREF(result); |
+ return NULL; |
+} |
+#endif |
+ |
+/////////////// FunctionImport.proto /////////////// |
+ |
+static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig); /*proto*/ |
+ |
+/////////////// FunctionImport /////////////// |
+//@substitute: naming |
+ |
+#ifndef __PYX_HAVE_RT_ImportFunction |
+#define __PYX_HAVE_RT_ImportFunction |
+static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig) { |
+ PyObject *d = 0; |
+ PyObject *cobj = 0; |
+ union { |
+ void (*fp)(void); |
+ void *p; |
+ } tmp; |
+ |
+ d = PyObject_GetAttrString(module, (char *)"$api_name"); |
+ if (!d) |
+ goto bad; |
+ cobj = PyDict_GetItemString(d, funcname); |
+ if (!cobj) { |
+ PyErr_Format(PyExc_ImportError, |
+ "%.200s does not export expected C function %.200s", |
+ PyModule_GetName(module), funcname); |
+ goto bad; |
+ } |
+#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3 && PY_MINOR_VERSION==0) |
+ if (!PyCapsule_IsValid(cobj, sig)) { |
+ PyErr_Format(PyExc_TypeError, |
+ "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)", |
+ PyModule_GetName(module), funcname, sig, PyCapsule_GetName(cobj)); |
+ goto bad; |
+ } |
+ tmp.p = PyCapsule_GetPointer(cobj, sig); |
+#else |
+ {const char *desc, *s1, *s2; |
+ desc = (const char *)PyCObject_GetDesc(cobj); |
+ if (!desc) |
+ goto bad; |
+ s1 = desc; s2 = sig; |
+ while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; } |
+ if (*s1 != *s2) { |
+ PyErr_Format(PyExc_TypeError, |
+ "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)", |
+ PyModule_GetName(module), funcname, sig, desc); |
+ goto bad; |
+ } |
+ tmp.p = PyCObject_AsVoidPtr(cobj);} |
+#endif |
+ *f = tmp.fp; |
+ if (!(*f)) |
+ goto bad; |
+ Py_DECREF(d); |
+ return 0; |
+bad: |
+ Py_XDECREF(d); |
+ return -1; |
+} |
+#endif |
+ |
+/////////////// FunctionExport.proto /////////////// |
+ |
+static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig); /*proto*/ |
+ |
+/////////////// FunctionExport /////////////// |
+//@substitute: naming |
+ |
+static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) { |
+ PyObject *d = 0; |
+ PyObject *cobj = 0; |
+ union { |
+ void (*fp)(void); |
+ void *p; |
+ } tmp; |
+ |
+ d = PyObject_GetAttrString($module_cname, (char *)"$api_name"); |
+ if (!d) { |
+ PyErr_Clear(); |
+ d = PyDict_New(); |
+ if (!d) |
+ goto bad; |
+ Py_INCREF(d); |
+ if (PyModule_AddObject($module_cname, (char *)"$api_name", d) < 0) |
+ goto bad; |
+ } |
+ tmp.fp = f; |
+#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0) |
+ cobj = PyCapsule_New(tmp.p, sig, 0); |
+#else |
+ cobj = PyCObject_FromVoidPtrAndDesc(tmp.p, (void *)sig, 0); |
+#endif |
+ if (!cobj) |
+ goto bad; |
+ if (PyDict_SetItemString(d, name, cobj) < 0) |
+ goto bad; |
+ Py_DECREF(cobj); |
+ Py_DECREF(d); |
+ return 0; |
+bad: |
+ Py_XDECREF(cobj); |
+ Py_XDECREF(d); |
+ return -1; |
+} |
+ |
+/////////////// VoidPtrImport.proto /////////////// |
+ |
+static int __Pyx_ImportVoidPtr(PyObject *module, const char *name, void **p, const char *sig); /*proto*/ |
+ |
+/////////////// VoidPtrImport /////////////// |
+//@substitute: naming |
+ |
+#ifndef __PYX_HAVE_RT_ImportVoidPtr |
+#define __PYX_HAVE_RT_ImportVoidPtr |
+static int __Pyx_ImportVoidPtr(PyObject *module, const char *name, void **p, const char *sig) { |
+ PyObject *d = 0; |
+ PyObject *cobj = 0; |
+ |
+ d = PyObject_GetAttrString(module, (char *)"$api_name"); |
+ if (!d) |
+ goto bad; |
+ cobj = PyDict_GetItemString(d, name); |
+ if (!cobj) { |
+ PyErr_Format(PyExc_ImportError, |
+ "%.200s does not export expected C variable %.200s", |
+ PyModule_GetName(module), name); |
+ goto bad; |
+ } |
+#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3 && PY_MINOR_VERSION==0) |
+ if (!PyCapsule_IsValid(cobj, sig)) { |
+ PyErr_Format(PyExc_TypeError, |
+ "C variable %.200s.%.200s has wrong signature (expected %.500s, got %.500s)", |
+ PyModule_GetName(module), name, sig, PyCapsule_GetName(cobj)); |
+ goto bad; |
+ } |
+ *p = PyCapsule_GetPointer(cobj, sig); |
+#else |
+ {const char *desc, *s1, *s2; |
+ desc = (const char *)PyCObject_GetDesc(cobj); |
+ if (!desc) |
+ goto bad; |
+ s1 = desc; s2 = sig; |
+ while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; } |
+ if (*s1 != *s2) { |
+ PyErr_Format(PyExc_TypeError, |
+ "C variable %.200s.%.200s has wrong signature (expected %.500s, got %.500s)", |
+ PyModule_GetName(module), name, sig, desc); |
+ goto bad; |
+ } |
+ *p = PyCObject_AsVoidPtr(cobj);} |
+#endif |
+ if (!(*p)) |
+ goto bad; |
+ Py_DECREF(d); |
+ return 0; |
+bad: |
+ Py_XDECREF(d); |
+ return -1; |
+} |
+#endif |
+ |
+/////////////// VoidPtrExport.proto /////////////// |
+ |
+static int __Pyx_ExportVoidPtr(PyObject *name, void *p, const char *sig); /*proto*/ |
+ |
+/////////////// VoidPtrExport /////////////// |
+//@substitute: naming |
+//@requires: ObjectHandling.c::PyObjectSetAttrStr |
+ |
+static int __Pyx_ExportVoidPtr(PyObject *name, void *p, const char *sig) { |
+ PyObject *d; |
+ PyObject *cobj = 0; |
+ |
+ d = PyDict_GetItem($moddict_cname, PYIDENT("$api_name")); |
+ Py_XINCREF(d); |
+ if (!d) { |
+ d = PyDict_New(); |
+ if (!d) |
+ goto bad; |
+ if (__Pyx_PyObject_SetAttrStr($module_cname, PYIDENT("$api_name"), d) < 0) |
+ goto bad; |
+ } |
+#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3 && PY_MINOR_VERSION==0) |
+ cobj = PyCapsule_New(p, sig, 0); |
+#else |
+ cobj = PyCObject_FromVoidPtrAndDesc(p, (void *)sig, 0); |
+#endif |
+ if (!cobj) |
+ goto bad; |
+ if (PyDict_SetItem(d, name, cobj) < 0) |
+ goto bad; |
+ Py_DECREF(cobj); |
+ Py_DECREF(d); |
+ return 0; |
+bad: |
+ Py_XDECREF(cobj); |
+ Py_XDECREF(d); |
+ return -1; |
+} |
+ |
+ |
+/////////////// SetVTable.proto /////////////// |
+ |
+static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/ |
+ |
+/////////////// SetVTable /////////////// |
+ |
+static int __Pyx_SetVtable(PyObject *dict, void *vtable) { |
+#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0) |
+ PyObject *ob = PyCapsule_New(vtable, 0, 0); |
+#else |
+ PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); |
+#endif |
+ if (!ob) |
+ goto bad; |
+ if (PyDict_SetItem(dict, PYIDENT("__pyx_vtable__"), ob) < 0) |
+ goto bad; |
+ Py_DECREF(ob); |
+ return 0; |
+bad: |
+ Py_XDECREF(ob); |
+ return -1; |
+} |
+ |
+ |
+/////////////// GetVTable.proto /////////////// |
+ |
+static void* __Pyx_GetVtable(PyObject *dict); /*proto*/ |
+ |
+/////////////// GetVTable /////////////// |
+ |
+static void* __Pyx_GetVtable(PyObject *dict) { |
+ void* ptr; |
+ PyObject *ob = PyObject_GetItem(dict, PYIDENT("__pyx_vtable__")); |
+ if (!ob) |
+ goto bad; |
+#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0) |
+ ptr = PyCapsule_GetPointer(ob, 0); |
+#else |
+ ptr = PyCObject_AsVoidPtr(ob); |
+#endif |
+ if (!ptr && !PyErr_Occurred()) |
+ PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type"); |
+ Py_DECREF(ob); |
+ return ptr; |
+bad: |
+ Py_XDECREF(ob); |
+ return NULL; |
+} |