aboutsummaryrefslogtreecommitdiffstats
path: root/shibokengenerator.cpp
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2010-06-02 07:57:07 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2010-06-02 15:41:07 -0300
commit7bc6f1512b1febc026d81917f33b1ea90d23fe24 (patch)
treec0328569c80bcd54022fbe3951802739deb580b0 /shibokengenerator.cpp
parent47d4a1f545eb7f348e46d39230a73a1b465e57a4 (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.cpp19
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)