Skip to content

Commit 27e6342

Browse files
committed
Solve more issues on python.
1 parent d773471 commit 27e6342

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

source/loaders/py_loader/include/py_loader/py_loader_symbol_fallback.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ PY_LOADER_NO_EXPORT int PyCFunction_Check(const PyObject *ob);
4848
PY_LOADER_NO_EXPORT int PyModule_Check(const PyObject *ob);
4949
#endif
5050

51+
PY_LOADER_NO_EXPORT PyTypeObject *PyTypeTypePtr(void);
5152
PY_LOADER_NO_EXPORT PyObject *Py_NonePtr(void);
5253
PY_LOADER_NO_EXPORT PyObject *Py_ReturnNone(void);
5354
PY_LOADER_NO_EXPORT PyObject *Py_ReturnFalse(void);

source/loaders/py_loader/source/py_loader_impl.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3941,8 +3941,8 @@ int py_loader_impl_discover_module(loader_impl impl, PyObject *module, context c
39413941
while (PyDict_Next(module_dict, &position, &module_dict_key, &module_dict_val))
39423942
{
39433943
// Class is also PyCallable, so test for class first
3944-
if (PyObject_TypeCheck(module_dict_val, &PyType_Type))
3945-
// PyObject_IsSubclass(module_dict_val, (PyObject *)&PyType_Type) == 0
3944+
if (PyObject_TypeCheck(module_dict_val, PyTypeTypePtr()))
3945+
// PyObject_IsSubclass(module_dict_val, (PyObject *)PyTypeTypePtr()) == 0
39463946
{
39473947
const char *cls_name = PyUnicode_AsUTF8(module_dict_key);
39483948

source/loaders/py_loader/source/py_loader_symbol_fallback.c

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ static PyTypeObject *PyCapsule_TypePtr = NULL;
3131
static PyTypeObject *PyFunction_TypePtr = NULL;
3232
static PyTypeObject *PyCFunction_TypePtr = NULL;
3333
static PyTypeObject *PyModule_TypePtr = NULL;
34+
static PyTypeObject *PyType_TypePtr = NULL;
3435
static PyObject *Py_NoneStructPtr = NULL;
3536
static PyObject *Py_FalseStructPtr = NULL;
3637
static PyObject *Py_TrueStructPtr = NULL;
@@ -92,7 +93,15 @@ int py_loader_symbol_fallback_initialize(dynlink py_library)
9293
return 1;
9394
}
9495

95-
dynlink_symbol_uncast_type(address, PyTypeObject *, PyModule_TypePtr);
96+
dynlink_symbol_uncast_type(address, PyTypeObject *, PyCFunction_TypePtr);
97+
98+
/* PyType_Type */
99+
if (dynlink_symbol(py_library, "PyType_Type", &address) != 0)
100+
{
101+
return 1;
102+
}
103+
104+
dynlink_symbol_uncast_type(address, PyTypeObject *, PyType_TypePtr);
96105

97106
/* Py_None */
98107
if (dynlink_symbol(py_library, "_Py_NoneStruct", &address) != 0)
@@ -157,6 +166,15 @@ int PyModule_Check(const PyObject *ob)
157166
}
158167
#endif
159168

169+
PyTypeObject *PyTypeTypePtr(void)
170+
{
171+
#if defined(_WIN32) && defined(_MSC_VER)
172+
return PyType_TypePtr;
173+
#else
174+
return &PyType_Type;
175+
#endif
176+
}
177+
160178
PyObject *Py_NonePtr(void)
161179
{
162180
#if defined(_WIN32) && defined(_MSC_VER)

0 commit comments

Comments
 (0)