diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2011-06-09 10:14:55 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:15:26 -0300 |
commit | 76c2be48edf50c573d1da94879d02c1b97f8c501 (patch) | |
tree | cb5b617f0ae288b879974de000c10c99e5bc3e97 /generator | |
parent | e71fba71859985a5fe9b81c016451ac090cfc145 (diff) |
Fixed substitution of method calls from user custom code for Qt's metaObject() method.
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Reviewed by Renato Araújo <renato.filho@openbossa.org>
Diffstat (limited to 'generator')
-rw-r--r-- | generator/shibokengenerator.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/generator/shibokengenerator.cpp b/generator/shibokengenerator.cpp index ec9a4a8ad..73383335c 100644 --- a/generator/shibokengenerator.cpp +++ b/generator/shibokengenerator.cpp @@ -1251,10 +1251,19 @@ void ShibokenGenerator::writeCodeSnips(QTextStream& s, if (func->isVirtual() && !func->isAbstract() && (!avoidProtectedHack() || !func->isProtected())) { QString methodCallArgs = getArgumentsFromMethodCall(code); if (!methodCallArgs.isNull()) { - code.replace(QString("%CPPSELF.%FUNCTION_NAME(%1)").arg(methodCallArgs), - QString("(Shiboken::Object::hasCppWrapper(reinterpret_cast<SbkObject*>(%1))" - " ? %CPPSELF->::%TYPE::%FUNCTION_NAME(%2)" - " : %CPPSELF.%FUNCTION_NAME(%2))").arg(pySelf).arg(methodCallArgs)); + if (func->name() == "metaObject") { + QString wrapperClassName = wrapperName(func->ownerClass()); + QString cppSelfVar = avoidProtectedHack() ? QString("%CPPSELF") : QString("reinterpret_cast<%1*>(%CPPSELF)").arg(wrapperClassName); + code.replace(QString("%CPPSELF.%FUNCTION_NAME(%1)").arg(methodCallArgs), + QString("(Shiboken::Object::hasCppWrapper(reinterpret_cast<SbkObject*>(%1))" + " ? %2->::%3::%FUNCTION_NAME(%4)" + " : %CPPSELF.%FUNCTION_NAME(%4))").arg(pySelf).arg(cppSelfVar).arg(wrapperClassName).arg(methodCallArgs)); + } else { + code.replace(QString("%CPPSELF.%FUNCTION_NAME(%1)").arg(methodCallArgs), + QString("(Shiboken::Object::hasCppWrapper(reinterpret_cast<SbkObject*>(%1))" + " ? %CPPSELF->::%TYPE::%FUNCTION_NAME(%2)" + " : %CPPSELF.%FUNCTION_NAME(%2))").arg(pySelf).arg(methodCallArgs)); + } } } |