@@ -8,6 +8,7 @@ static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec
8
8
9
9
/////////////// FetchCommonType ///////////////
10
10
//@requires:ExtensionTypes.c::FixUpExtensionType
11
+ //@requires:StringTools.c::IncludeStringH
11
12
12
13
static PyObject * __Pyx_FetchSharedCythonABIModule (void ) {
13
14
PyObject * abi_module = PyImport_AddModule ((char * ) __PYX_ABI_MODULE_NAME );
@@ -37,15 +38,19 @@ static int __Pyx_VerifyCachedType(PyObject *cached_type,
37
38
#if !CYTHON_USE_TYPE_SPECS
38
39
static PyTypeObject * __Pyx_FetchCommonType (PyTypeObject * type ) {
39
40
PyObject * abi_module ;
41
+ const char * object_name ;
40
42
PyTypeObject * cached_type = NULL ;
41
43
42
44
abi_module = __Pyx_FetchSharedCythonABIModule ();
43
45
if (!abi_module ) return NULL ;
44
- cached_type = (PyTypeObject * ) PyObject_GetAttrString (abi_module , type -> tp_name );
46
+ // get the final part of the object name (after the last dot)
47
+ object_name = strrchr (type -> tp_name , '.' );
48
+ object_name = object_name ? object_name + 1 : type -> tp_name ;
49
+ cached_type = (PyTypeObject * ) PyObject_GetAttrString (abi_module , object_name );
45
50
if (cached_type ) {
46
51
if (__Pyx_VerifyCachedType (
47
52
(PyObject * )cached_type ,
48
- type -> tp_name ,
53
+ object_name ,
49
54
cached_type -> tp_basicsize ,
50
55
type -> tp_basicsize ) < 0 ) {
51
56
goto bad ;
@@ -56,7 +61,7 @@ static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
56
61
if (!PyErr_ExceptionMatches (PyExc_AttributeError )) goto bad ;
57
62
PyErr_Clear ();
58
63
if (PyType_Ready (type ) < 0 ) goto bad ;
59
- if (PyObject_SetAttrString (abi_module , type -> tp_name , (PyObject * )type ) < 0 )
64
+ if (PyObject_SetAttrString (abi_module , object_name , (PyObject * )type ) < 0 )
60
65
goto bad ;
61
66
Py_INCREF (type );
62
67
cached_type = type ;
@@ -75,11 +80,14 @@ static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
75
80
76
81
static PyTypeObject * __Pyx_FetchCommonTypeFromSpec (PyObject * module , PyType_Spec * spec , PyObject * bases ) {
77
82
PyObject * abi_module , * cached_type = NULL ;
83
+ // get the final part of the object name (after the last dot)
84
+ const char * object_name = strrchr (spec -> name , '.' );
85
+ object_name = object_name ? object_name + 1 : spec -> name ;
78
86
79
87
abi_module = __Pyx_FetchSharedCythonABIModule ();
80
88
if (!abi_module ) return NULL ;
81
89
82
- cached_type = PyObject_GetAttrString (abi_module , spec -> name );
90
+ cached_type = PyObject_GetAttrString (abi_module , object_name );
83
91
if (cached_type ) {
84
92
Py_ssize_t basicsize ;
85
93
#if CYTHON_COMPILING_IN_LIMITED_API
@@ -95,7 +103,7 @@ static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec
95
103
#endif
96
104
if (__Pyx_VerifyCachedType (
97
105
cached_type ,
98
- spec -> name ,
106
+ object_name ,
99
107
basicsize ,
100
108
spec -> basicsize ) < 0 ) {
101
109
goto bad ;
@@ -110,7 +118,7 @@ static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec
110
118
cached_type = __Pyx_PyType_FromModuleAndSpec (abi_module , spec , bases );
111
119
if (unlikely (!cached_type )) goto bad ;
112
120
if (unlikely (__Pyx_fix_up_extension_type_from_spec (spec , (PyTypeObject * ) cached_type ) < 0 )) goto bad ;
113
- if (PyObject_SetAttrString (abi_module , spec -> name , cached_type ) < 0 ) goto bad ;
121
+ if (PyObject_SetAttrString (abi_module , object_name , cached_type ) < 0 ) goto bad ;
114
122
115
123
done :
116
124
Py_DECREF (abi_module );
0 commit comments