diff options
| -rw-r--r-- | sources/shiboken6/libshiboken/sbkenum.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/sources/shiboken6/libshiboken/sbkenum.cpp b/sources/shiboken6/libshiboken/sbkenum.cpp index a36dfd176..4a5f50dce 100644 --- a/sources/shiboken6/libshiboken/sbkenum.cpp +++ b/sources/shiboken6/libshiboken/sbkenum.cpp @@ -695,13 +695,17 @@ newItem(PyTypeObject *enumType, long itemValue, const char *itemName) if (useOldEnum) return newItemOld(enumType, itemValue, itemName); - if (!itemName) { - //PyObject *enumObj = getEnumItemFromValue(enumType, itemValue); - PyObject *enumObj = PyObject_CallFunction(reinterpret_cast<PyObject *>(enumType), "i", itemValue); - //if (enumObj) - return enumObj; - } - return PyObject_GetAttrString(reinterpret_cast<PyObject *>(enumType), itemName); + auto *obEnumType = reinterpret_cast<PyObject *>(enumType); + if (!itemName) + return PyObject_CallFunction(obEnumType, "i", itemValue); + + static PyObject *const _member_map_ = String::createStaticString("_member_map_"); + auto *member_map = PyDict_GetItem(enumType->tp_dict, _member_map_); + if (!(member_map && PyDict_Check(member_map))) + return nullptr; + auto *result = PyDict_GetItemString(member_map, itemName); + Py_XINCREF(result); + return result; } } // namespace Shiboken |
