diff options
author | Hugo Lima <hugo.lima@openbossa.org> | 2010-02-24 19:30:05 -0300 |
---|---|---|
committer | Hugo Lima <hugo.lima@openbossa.org> | 2010-02-24 19:30:05 -0300 |
commit | 87e9b581d64e2d34b2cc63ecc80b946be38ad190 (patch) | |
tree | d398be0099f141cc321de7e8452b02d42611db99 /cppgenerator.cpp | |
parent | ea10af7b04f581034a32bf1f051ad0d024cfcc9c (diff) |
Fix bug#142.
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org> and Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'cppgenerator.cpp')
-rw-r--r-- | cppgenerator.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/cppgenerator.cpp b/cppgenerator.cpp index 559be79a3..bd3c21993 100644 --- a/cppgenerator.cpp +++ b/cppgenerator.cpp @@ -1769,13 +1769,9 @@ void CppGenerator::writeClassDefinition(QTextStream& s, const AbstractMetaClass* // class or some ancestor has multiple inheritance const AbstractMetaClass* miClass = getMultipleInheritingClass(metaClass); if (miClass) { - mi_init = QString("(Shiboken::MultipleInheritanceInitFunction)%1") - .arg(multipleInheritanceInitializerFunctionName(miClass)); if (metaClass == miClass) { + mi_init = multipleInheritanceInitializerFunctionName(miClass); writeMultipleInheritanceInitializerFunction(s, metaClass); - } else { - s << "extern int* " << multipleInheritanceInitializerFunctionName(miClass); - s << "(const void* cptr);" << endl; } mi_specialcast = '&'+cpythonSpecialCastFunctionName(metaClass); writeSpecialCastFunction(s, metaClass); @@ -2582,6 +2578,13 @@ void CppGenerator::writeClassRegister(QTextStream& s, const AbstractMetaClass* m s << INDENT << bases.join(", ") << ");" << endl << endl; } + // Fill multiple inheritance init function, if needed. + const AbstractMetaClass* miClass = getMultipleInheritingClass(metaClass); + if (miClass && miClass != metaClass) { + s << INDENT << cpythonTypeName(metaClass) << ".mi_init = "; + s << "reinterpret_cast<SbkBaseWrapperType*>(" + cpythonTypeNameExt(miClass->typeEntry()) + ")->mi_init;" << endl << endl; + } + s << INDENT << "if (PyType_Ready((PyTypeObject*)&" << pyTypeName << ") < 0)" << endl; s << INDENT << INDENT << "return;" << endl << endl; |