__Pyx_FetchSharedCythonABIModule(void)1 static PyObject *__Pyx_FetchSharedCythonABIModule(void) {
2 PyObject *abi_module = PyImport_AddModule((char*) __PYX_ABI_MODULE_NAME);
3 if (!abi_module) return NULL;
4 Py_INCREF(abi_module);
5 return abi_module;
6 }
__Pyx_VerifyCachedType(PyObject * cached_type,const char * name,Py_ssize_t basicsize,Py_ssize_t expected_basicsize)7 static int __Pyx_VerifyCachedType(PyObject *cached_type,
8 const char *name,
9 Py_ssize_t basicsize,
10 Py_ssize_t expected_basicsize) {
11 if (!PyType_Check(cached_type)) {
12 PyErr_Format(PyExc_TypeError,
13 "Shared Cython type %.200s is not a type object", name);
14 return -1;
15 }
16 if (basicsize != expected_basicsize) {
17 PyErr_Format(PyExc_TypeError,
18 "Shared Cython type %.200s has the wrong size, try recompiling",
19 name);
20 return -1;
21 }
22 return 0;
23 }
24 #if !CYTHON_USE_TYPE_SPECS
__Pyx_FetchCommonType(PyTypeObject * type)25 static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
26 PyObject* abi_module;
27 PyTypeObject *cached_type = NULL;
28 abi_module = __Pyx_FetchSharedCythonABIModule();
29 if (!abi_module) return NULL;
30 cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, type->tp_name);
31 if (cached_type) {
32 if (__Pyx_VerifyCachedType(
33 (PyObject *)cached_type,
34 type->tp_name,
35 cached_type->tp_basicsize,
36 type->tp_basicsize) < 0) {
37 goto bad;
38 }
39 goto done;
40 }
41 if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
42 PyErr_Clear();
43 if (PyType_Ready(type) < 0) goto bad;
44 if (PyObject_SetAttrString(abi_module, type->tp_name, (PyObject *)type) < 0)
45 goto bad;
46 Py_INCREF(type);
47 cached_type = type;
48 done:
49 Py_DECREF(abi_module);
50 return cached_type;
51 bad:
52 Py_XDECREF(cached_type);
53 cached_type = NULL;
54 goto done;
55 }
56 #else
__Pyx_FetchCommonTypeFromSpec(PyObject * module,PyType_Spec * spec,PyObject * bases)57 static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) {
58 PyObject *abi_module, *cached_type = NULL;
59 abi_module = __Pyx_FetchSharedCythonABIModule();
60 if (!abi_module) return NULL;
61 cached_type = PyObject_GetAttrString(abi_module, spec->name);
62 if (cached_type) {
63 Py_ssize_t basicsize;
64 #if CYTHON_COMPILING_IN_LIMITED_API
65 PyObject *py_basicsize;
66 py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__");
67 if (unlikely(!py_basicsize)) goto bad;
68 basicsize = PyLong_AsSsize_t(py_basicsize);
69 Py_DECREF(py_basicsize);
70 py_basicsize = 0;
71 if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
72 #else
73 basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1;
74 #endif
75 if (__Pyx_VerifyCachedType(
76 cached_type,
77 spec->name,
78 basicsize,
79 spec->basicsize) < 0) {
80 goto bad;
81 }
82 goto done;
83 }
84 if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
85 PyErr_Clear();
86 (void) module;
87 cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases);
88 if (unlikely(!cached_type)) goto bad;
89 if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad;
90 if (PyObject_SetAttrString(abi_module, spec->name, cached_type) < 0) goto bad;
91 done:
92 Py_DECREF(abi_module);
93 assert(cached_type == NULL || PyType_Check(cached_type));
94 return (PyTypeObject *) cached_type;
95 bad:
96 Py_XDECREF(cached_type);
97 cached_type = NULL;
98 goto done;
99 }
100 #endif
101
102