diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2010-06-02 07:57:07 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2010-06-02 15:41:07 -0300 |
commit | 7bc6f1512b1febc026d81917f33b1ea90d23fe24 (patch) | |
tree | c0328569c80bcd54022fbe3951802739deb580b0 /shibokengenerator.cpp | |
parent | 47d4a1f545eb7f348e46d39230a73a1b465e57a4 (diff) |
Fixes code generation for classes with private destructors.
This fix is specific for the cases when the "protected hack" is
turned off.
Also added some tests.
Diffstat (limited to 'shibokengenerator.cpp')
-rw-r--r-- | shibokengenerator.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/shibokengenerator.cpp b/shibokengenerator.cpp index 5b85ef43a..16a216daf 100644 --- a/shibokengenerator.cpp +++ b/shibokengenerator.cpp @@ -178,9 +178,24 @@ bool ShibokenGenerator::shouldGenerateCppWrapper(const AbstractMetaClass* metaCl { bool result = metaClass->isPolymorphic() || metaClass->hasVirtualDestructor(); #ifdef AVOID_PROTECTED_HACK - result = result || metaClass->hasProtectedFunctions() || metaClass->hasProtectedDestructor(); + result = result || metaClass->hasProtectedFields() || metaClass->hasProtectedDestructor(); + if (!result && metaClass->hasProtectedFunctions()) { + int protectedFunctions = 0; + int protectedOperators = 0; + foreach (const AbstractMetaFunction* func, metaClass->functions()) { + if (!func->isProtected() || func->isSignal() || func->isModifiedRemoved()) + continue; + else if (func->isOperatorOverload()) + protectedOperators++; + else + protectedFunctions++; + } + result = result || (protectedFunctions > protectedOperators); + } +#else + result = result && !metaClass->hasPrivateDestructor(); #endif - return result && !metaClass->isNamespace() && !metaClass->hasPrivateDestructor(); + return result && !metaClass->isNamespace(); } QString ShibokenGenerator::wrapperName(const AbstractMetaClass* metaClass) |