diff options
author | Hugo Parente Lima <hugo.pl@gmail.com> | 2010-10-20 18:56:28 -0200 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:07:22 -0300 |
commit | 5df9dc0a62744507d1cfcf6c77bb9781223eaadd (patch) | |
tree | ed121698841ef27bbe044404c2e3932eeb60aa4e /generator/cppgenerator.cpp | |
parent | 0e7ee5e5e6b8db23f793d9aafeab6f8cbdbc77d2 (diff) |
Fix reference leak when registering enum types.
Diffstat (limited to 'generator/cppgenerator.cpp')
-rw-r--r-- | generator/cppgenerator.cpp | 28 |
1 files changed, 7 insertions, 21 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp index 01db203e2..051af21c7 100644 --- a/generator/cppgenerator.cpp +++ b/generator/cppgenerator.cpp @@ -2981,8 +2981,6 @@ void CppGenerator::writeEnumInitialization(QTextStream& s, const AbstractMetaEnu s << INDENT << "if (PyType_Ready((PyTypeObject*)&" << cpythonName << "_Type) < 0)" << endl; s << INDENT << INDENT << "return;" << endl; - s << INDENT << "Py_INCREF(&" << cpythonName << "_Type);" << endl; - s << INDENT << addFunction << endl; s << INDENT << INDENT << INDENT << '\"' << cppEnum->name() << "\","; s << "((PyObject*)&" << cpythonName << "_Type));" << endl << endl; @@ -2996,8 +2994,6 @@ void CppGenerator::writeEnumInitialization(QTextStream& s, const AbstractMetaEnu s << INDENT << "if (PyType_Ready((PyTypeObject*)&" << flagsName << "_Type) < 0)" << endl; s << INDENT << INDENT << "return;" << endl; - s << INDENT << "Py_INCREF(&" << flagsName << "_Type);" << endl; - s << INDENT << addFunction << endl; s << INDENT << INDENT << INDENT << '\"' << flags->flagsName() << "\","; s << "((PyObject*)&" << flagsName << "_Type));" << endl << endl; @@ -3027,11 +3023,8 @@ void CppGenerator::writeEnumInitialization(QTextStream& s, const AbstractMetaEnu QString enumItemText = "enum_item"; if (!cppEnum->isAnonymous()) { s << INDENT << "enum_item = Shiboken::SbkEnumObject_New(&"; - s << cpythonName << "_Type," << endl; - { - Indentation indent(INDENT); - s << INDENT << enumValueText << ", \"" << enumValue->name() << "\");" << endl; - } + s << cpythonName << "_Type," << enumValueText << ", \""; + s << enumValue->name() << "\");" << endl; } else if (cppEnum->enclosingClass()) { s << INDENT << "enum_item = PyInt_FromLong(" << enumValueText << ");" << endl; shouldDecrefNumber = true; @@ -3039,22 +3032,16 @@ void CppGenerator::writeEnumInitialization(QTextStream& s, const AbstractMetaEnu enumItemText = enumValueText; } - s << INDENT << addFunction << endl; - { - Indentation indent(INDENT); - s << INDENT << '"' << enumValue->name() << "\", " << enumItemText << ");" << endl; - } + s << INDENT << addFunction << '"' << enumValue->name() << "\", " << enumItemText << ");" << endl; if (shouldDecrefNumber) s << INDENT << "Py_DECREF(enum_item);" << endl; if (!cppEnum->isAnonymous()) { - s << INDENT << "PyDict_SetItemString(" << cpythonName << "_Type.tp_dict," << endl; - { - Indentation indent(INDENT); - s << INDENT << '"' << enumValue->name() << "\", enum_item);" << endl; - } + s << INDENT << "Py_DECREF(enum_item);" << endl; + s << INDENT << "PyDict_SetItemString(" << cpythonName << "_Type.tp_dict,"; + s << '"' << enumValue->name() << "\", enum_item);" << endl; + s << INDENT << "Py_DECREF(enum_item);" << endl; } - } if (!cppEnum->isAnonymous()) { @@ -3424,7 +3411,6 @@ void CppGenerator::writeClassRegister(QTextStream& s, const AbstractMetaClass* m s << INDENT << "PyDict_SetItemString(module," << "\"" << metaClass->name() << "\", (PyObject*)&" << pyTypeName << ");" << endl; } else { - s << INDENT << "Py_INCREF(reinterpret_cast<PyObject*>(&" << pyTypeName << "));" << endl; s << INDENT << "PyModule_AddObject(module, \"" << metaClass->name() << "\"," << endl; Indentation indent(INDENT); s << INDENT << "((PyObject*)&" << pyTypeName << "));" << endl << endl; |