aboutsummaryrefslogtreecommitdiffstats
path: root/cppgenerator.cpp
diff options
context:
space:
mode:
authorHugo Lima <hugo.lima@openbossa.org>2010-02-24 19:30:05 -0300
committerHugo Lima <hugo.lima@openbossa.org>2010-02-24 19:30:05 -0300
commit87e9b581d64e2d34b2cc63ecc80b946be38ad190 (patch)
treed398be0099f141cc321de7e8452b02d42611db99 /cppgenerator.cpp
parentea10af7b04f581034a32bf1f051ad0d024cfcc9c (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.cpp13
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;