123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749 |
- /////////////// 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_MAJOR_VERSION < 3
- 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_MAJOR_VERSION >= 3
- if (level == -1) {
- // Avoid C compiler warning if strchr() evaluates to false at compile time.
- if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) {
- /* try package relative import first */
- module = PyImport_ImportModuleLevelObject(
- name, global_dict, empty_dict, list, 1);
- if (!module) {
- if (!PyErr_ExceptionMatches(PyExc_ImportError))
- goto bad;
- PyErr_Clear();
- }
- }
- level = 0; /* try absolute import on failure */
- }
- #endif
- if (!module) {
- #if PY_MAJOR_VERSION < 3
- PyObject *py_level = PyInt_FromLong(level);
- if (!py_level)
- goto bad;
- module = PyObject_CallFunctionObjArgs(py_import,
- name, global_dict, empty_dict, list, py_level, (PyObject *)NULL);
- Py_DECREF(py_level);
- #else
- module = PyImport_ImportModuleLevelObject(
- name, global_dict, empty_dict, list, level);
- #endif
- }
- }
- bad:
- #if PY_MAJOR_VERSION < 3
- 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;
- }
- /////////////// ImportStar ///////////////
- //@substitute: naming
- /* import_all_from is an unexposed function from ceval.c */
- static int
- __Pyx_import_all_from(PyObject *locals, PyObject *v)
- {
- PyObject *all = PyObject_GetAttrString(v, "__all__");
- PyObject *dict, *name, *value;
- int skip_leading_underscores = 0;
- int pos, err;
- if (all == NULL) {
- if (!PyErr_ExceptionMatches(PyExc_AttributeError))
- return -1; /* Unexpected error */
- PyErr_Clear();
- dict = PyObject_GetAttrString(v, "__dict__");
- if (dict == NULL) {
- if (!PyErr_ExceptionMatches(PyExc_AttributeError))
- return -1;
- PyErr_SetString(PyExc_ImportError,
- "from-import-* object has no __dict__ and no __all__");
- return -1;
- }
- #if PY_MAJOR_VERSION < 3
- all = PyObject_CallMethod(dict, (char *)"keys", NULL);
- #else
- all = PyMapping_Keys(dict);
- #endif
- Py_DECREF(dict);
- if (all == NULL)
- return -1;
- skip_leading_underscores = 1;
- }
- for (pos = 0, err = 0; ; pos++) {
- name = PySequence_GetItem(all, pos);
- if (name == NULL) {
- if (!PyErr_ExceptionMatches(PyExc_IndexError))
- err = -1;
- else
- PyErr_Clear();
- break;
- }
- if (skip_leading_underscores &&
- #if PY_MAJOR_VERSION < 3
- likely(PyString_Check(name)) &&
- PyString_AS_STRING(name)[0] == '_')
- #else
- likely(PyUnicode_Check(name)) &&
- likely(__Pyx_PyUnicode_GET_LENGTH(name)) &&
- __Pyx_PyUnicode_READ_CHAR(name, 0) == '_')
- #endif
- {
- Py_DECREF(name);
- continue;
- }
- value = PyObject_GetAttr(v, name);
- if (value == NULL)
- err = -1;
- else if (PyDict_CheckExact(locals))
- err = PyDict_SetItem(locals, name, value);
- else
- err = PyObject_SetItem(locals, name, value);
- Py_DECREF(name);
- Py_XDECREF(value);
- if (err != 0)
- break;
- }
- Py_DECREF(all);
- return err;
- }
- static int ${import_star}(PyObject* m) {
- int i;
- int ret = -1;
- char* s;
- PyObject *locals = 0;
- PyObject *list = 0;
- #if PY_MAJOR_VERSION >= 3
- PyObject *utf8_name = 0;
- #endif
- PyObject *name;
- PyObject *item;
- locals = PyDict_New(); if (!locals) goto bad;
- if (__Pyx_import_all_from(locals, m) < 0) goto bad;
- list = PyDict_Items(locals); if (!list) goto bad;
- for(i=0; i<PyList_GET_SIZE(list); i++) {
- name = PyTuple_GET_ITEM(PyList_GET_ITEM(list, i), 0);
- item = PyTuple_GET_ITEM(PyList_GET_ITEM(list, i), 1);
- #if PY_MAJOR_VERSION >= 3
- utf8_name = PyUnicode_AsUTF8String(name);
- if (!utf8_name) goto bad;
- s = PyBytes_AS_STRING(utf8_name);
- if (${import_star_set}(item, name, s) < 0) goto bad;
- Py_DECREF(utf8_name); utf8_name = 0;
- #else
- s = PyString_AsString(name);
- if (!s) goto bad;
- if (${import_star_set}(item, name, s) < 0) goto bad;
- #endif
- }
- ret = 0;
- bad:
- Py_XDECREF(locals);
- Py_XDECREF(list);
- #if PY_MAJOR_VERSION >= 3
- Py_XDECREF(utf8_name);
- #endif
- return ret;
- }
- /////////////// SetPackagePathFromImportLib.proto ///////////////
- // PY_VERSION_HEX >= 0x03030000
- #if PY_MAJOR_VERSION >= 3 && !CYTHON_PEP489_MULTI_PHASE_INIT
- static int __Pyx_SetPackagePathFromImportLib(PyObject *module_name);
- #else
- #define __Pyx_SetPackagePathFromImportLib(a) 0
- #endif
- /////////////// SetPackagePathFromImportLib ///////////////
- //@requires: ObjectHandling.c::PyObjectGetAttrStr
- //@substitute: naming
- // PY_VERSION_HEX >= 0x03030000
- #if PY_MAJOR_VERSION >= 3 && !CYTHON_PEP489_MULTI_PHASE_INIT
- static int __Pyx_SetPackagePathFromImportLib(PyObject *module_name) {
- PyObject *importlib, *osmod, *ossep, *parts, *package_path;
- PyObject *file_path = NULL;
- int result;
- PyObject *spec;
- // package_path = [importlib.util.find_spec(module_name).origin.rsplit(os.sep, 1)[0]]
- importlib = PyImport_ImportModule("importlib.util");
- if (unlikely(!importlib))
- goto bad;
- spec = PyObject_CallMethod(importlib, "find_spec", "(O)", module_name);
- Py_DECREF(importlib);
- if (unlikely(!spec))
- goto bad;
- file_path = PyObject_GetAttrString(spec, "origin");
- Py_DECREF(spec);
- if (unlikely(!file_path))
- goto bad;
- if (unlikely(PyObject_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(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 = PyObject_SetAttrString($module_cname, "__path__", package_path);
- Py_DECREF(package_path);
- return result;
- }
- #endif
- /////////////// TypeImport.proto ///////////////
- //@substitute: naming
- #ifndef __PYX_HAVE_RT_ImportType_proto_$cyversion
- #define __PYX_HAVE_RT_ImportType_proto_$cyversion
- #if __STDC_VERSION__ >= 201112L
- #include <stdalign.h>
- #endif
- #if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L
- #define __PYX_GET_STRUCT_ALIGNMENT_$cyversion(s) alignof(s)
- #else
- // best guess at what the alignment could be since we can't measure it
- #define __PYX_GET_STRUCT_ALIGNMENT_$cyversion(s) sizeof(void*)
- #endif
- enum __Pyx_ImportType_CheckSize_$cyversion {
- __Pyx_ImportType_CheckSize_Error_$cyversion = 0,
- __Pyx_ImportType_CheckSize_Warn_$cyversion = 1,
- __Pyx_ImportType_CheckSize_Ignore_$cyversion = 2
- };
- static PyTypeObject *__Pyx_ImportType_$cyversion(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_$cyversion check_size); /*proto*/
- #endif
- /////////////// TypeImport ///////////////
- //@substitute: naming
- #ifndef __PYX_HAVE_RT_ImportType_$cyversion
- #define __PYX_HAVE_RT_ImportType_$cyversion
- static PyTypeObject *__Pyx_ImportType_$cyversion(PyObject *module, const char *module_name, const char *class_name,
- size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_$cyversion check_size)
- {
- PyObject *result = 0;
- //char warning[200];
- Py_ssize_t basicsize;
- Py_ssize_t itemsize;
- #ifdef Py_LIMITED_API
- PyObject *py_basicsize;
- PyObject *py_itemsize;
- #endif
- result = PyObject_GetAttrString(module, class_name);
- 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;
- itemsize = ((PyTypeObject *)result)->tp_itemsize;
- #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;
- py_itemsize = PyObject_GetAttrString(result, "__itemsize__");
- if (!py_itemsize)
- goto bad;
- itemsize = PyLong_AsSsize_t(py_itemsize);
- Py_DECREF(py_itemsize);
- py_itemsize = 0;
- if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred())
- goto bad;
- #endif
- if (itemsize) {
- // If itemsize is smaller than the alignment the struct can end up with some extra
- // padding at the end. In this case we need to work out the maximum size that
- // the padding could be when calculating the range of valid struct sizes.
- if (size % alignment) {
- // if this is true we've probably calculated the alignment wrongly
- // (most likely because alignof isn't available)
- alignment = size % alignment;
- }
- if (itemsize < (Py_ssize_t)alignment)
- itemsize = (Py_ssize_t)alignment;
- }
- if ((size_t)(basicsize + itemsize) < size) {
- }
- if (check_size == __Pyx_ImportType_CheckSize_Error_$cyversion && (size_t)basicsize != size) {
- }
- else if (check_size == __Pyx_ImportType_CheckSize_Warn_$cyversion && (size_t)basicsize > size) {
- }
- /* check_size == __Pyx_ImportType_CheckSize_Ignore does not warn nor error */
- return (PyTypeObject *)result;
- bad:
- Py_XDECREF(result);
- return NULL;
- }
- #endif
- /////////////// FunctionImport.proto ///////////////
- //@substitute: naming
- static int __Pyx_ImportFunction_$cyversion(PyObject *module, const char *funcname, void (**f)(void), const char *sig); /*proto*/
- /////////////// FunctionImport ///////////////
- //@substitute: naming
- #ifndef __PYX_HAVE_RT_ImportFunction_$cyversion
- #define __PYX_HAVE_RT_ImportFunction_$cyversion
- static int __Pyx_ImportFunction_$cyversion(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
- 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
- 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 ///////////////
- //@substitute: naming
- static int __Pyx_ImportVoidPtr_$cyversion(PyObject *module, const char *name, void **p, const char *sig); /*proto*/
- /////////////// VoidPtrImport ///////////////
- //@substitute: naming
- #ifndef __PYX_HAVE_RT_ImportVoidPtr_$cyversion
- #define __PYX_HAVE_RT_ImportVoidPtr_$cyversion
- static int __Pyx_ImportVoidPtr_$cyversion(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
- 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
- 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
- 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
- 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;
- }
- /////////////// MergeVTables.proto ///////////////
- //@requires: GetVTable
- static int __Pyx_MergeVtables(PyTypeObject *type); /*proto*/
- /////////////// MergeVTables ///////////////
- static int __Pyx_MergeVtables(PyTypeObject *type) {
- int i;
- void** base_vtables;
- void* unknown = (void*)-1;
- PyObject* bases = type->tp_bases;
- int base_depth = 0;
- {
- PyTypeObject* base = type->tp_base;
- while (base) {
- base_depth += 1;
- base = base->tp_base;
- }
- }
- base_vtables = (void**) malloc(sizeof(void*) * (size_t)(base_depth + 1));
- base_vtables[0] = unknown;
- // Could do MRO resolution of individual methods in the future, assuming
- // compatible vtables, but for now simply require a common vtable base.
- // Note that if the vtables of various bases are extended separately,
- // resolution isn't possible and we must reject it just as when the
- // instance struct is so extended. (It would be good to also do this
- // check when a multiple-base class is created in pure Python as well.)
- for (i = 1; i < PyTuple_GET_SIZE(bases); i++) {
- void* base_vtable = __Pyx_GetVtable(((PyTypeObject*)PyTuple_GET_ITEM(bases, i))->tp_dict);
- if (base_vtable != NULL) {
- int j;
- PyTypeObject* base = type->tp_base;
- for (j = 0; j < base_depth; j++) {
- if (base_vtables[j] == unknown) {
- base_vtables[j] = __Pyx_GetVtable(base->tp_dict);
- base_vtables[j + 1] = unknown;
- }
- if (base_vtables[j] == base_vtable) {
- break;
- } else if (base_vtables[j] == NULL) {
- // No more potential matching bases (with vtables).
- goto bad;
- }
- base = base->tp_base;
- }
- }
- }
- PyErr_Clear();
- free(base_vtables);
- return 0;
- bad:
- PyErr_Format(
- PyExc_TypeError,
- "multiple bases have vtable conflict: '%s' and '%s'",
- type->tp_base->tp_name, ((PyTypeObject*)PyTuple_GET_ITEM(bases, i))->tp_name);
- free(base_vtables);
- return -1;
- }
- /////////////// ImportNumPyArray.proto ///////////////
- static PyObject *__pyx_numpy_ndarray = NULL;
- static PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void); /*proto*/
- /////////////// ImportNumPyArray.cleanup ///////////////
- Py_CLEAR(__pyx_numpy_ndarray);
- /////////////// ImportNumPyArray ///////////////
- //@requires: ImportExport.c::Import
- static PyObject* __Pyx__ImportNumPyArray(void) {
- PyObject *numpy_module, *ndarray_object = NULL;
- numpy_module = __Pyx_Import(PYIDENT("numpy"), NULL, 0);
- if (likely(numpy_module)) {
- ndarray_object = PyObject_GetAttrString(numpy_module, "ndarray");
- Py_DECREF(numpy_module);
- }
- if (unlikely(!ndarray_object)) {
- // ImportError, AttributeError, ...
- PyErr_Clear();
- }
- if (unlikely(!ndarray_object || !PyObject_TypeCheck(ndarray_object, &PyType_Type))) {
- Py_XDECREF(ndarray_object);
- Py_INCREF(Py_None);
- ndarray_object = Py_None;
- }
- return ndarray_object;
- }
- static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) {
- if (unlikely(!__pyx_numpy_ndarray)) {
- __pyx_numpy_ndarray = __Pyx__ImportNumPyArray();
- }
- Py_INCREF(__pyx_numpy_ndarray);
- return __pyx_numpy_ndarray;
- }
|