| 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;
|
| +}
|
|
|