{"body":"void updateSourceObject(PyObject *source)\n{\n    // TODO: Provide for actual upstream exception handling.\n    //       For now we'll just return early to avoid further issues.\n\n    if (source == nullptr)      // Bad input\n       return;\n\n    Shiboken::AutoDecRef mroIterator(PyObject_GetIter(source->ob_type->tp_mro));\n\n    if (mroIterator.isNull())   // Not iterable\n       return;\n\n    Shiboken::AutoDecRef mroItem{};\n\n    while ((mroItem.reset(PyIter_Next(mroIterator))), mroItem.object()) {\n        Py_ssize_t pos = 0;\n        PyObject *key, *value;\n        auto *type = reinterpret_cast<PyTypeObject *>(mroItem.object());\n\n        while (PyDict_Next(type->tp_dict, &pos, &key, &value)) {\n            if (PyObject_TypeCheck(value, PySideSignalTypeF())) {\n                auto *inst = PyObject_New(PySideSignalInstance, PySideSignalInstanceTypeF());\n                Shiboken::AutoDecRef signalInstance(reinterpret_cast<PyObject *>(inst));\n                instanceInitialize(signalInstance.cast<PySideSignalInstance *>(),\n                                   key, reinterpret_cast<PySideSignal *>(value), source, 0);\n                if (PyObject_SetAttr(source, key, signalInstance) == -1)\n                    return;     // An error occurred while setting the attribute\n            }\n        }\n    }\n\n    if (PyErr_Occurred())       // An iteration error occurred\n        return;\n}\n","name":"pysidesignal.cpp","extension":"cpp","url":"https://www.irccloud.com/pastebin/laD6pZqz/pysidesignal.cpp","modified":1638366475,"id":"laD6pZqz","size":1382,"lines":35,"own_paste":false,"theme":"","date":1638366475}