diff options
Diffstat (limited to 'generator/headergenerator.cpp')
-rw-r--r-- | generator/headergenerator.cpp | 77 |
1 files changed, 33 insertions, 44 deletions
diff --git a/generator/headergenerator.cpp b/generator/headergenerator.cpp index b52bf7c92..3b0de4fd3 100644 --- a/generator/headergenerator.cpp +++ b/generator/headergenerator.cpp @@ -86,9 +86,8 @@ void HeaderGenerator::generateClass(QTextStream& s, const AbstractMetaClass* met s << "#ifndef SBK_" << headerGuard << "_H" << endl; s << "#define SBK_" << headerGuard << "_H" << endl<< endl; -#ifndef AVOID_PROTECTED_HACK - s << "#define protected public" << endl << endl; -#endif + if (!avoidProtectedHack()) + s << "#define protected public" << endl << endl; s << "#include <shiboken.h>" << endl << endl; @@ -113,37 +112,30 @@ void HeaderGenerator::generateClass(QTextStream& s, const AbstractMetaClass* met writeFunction(s, func); } -#ifdef AVOID_PROTECTED_HACK - if (metaClass->hasProtectedFields()) { + if (avoidProtectedHack() && metaClass->hasProtectedFields()) { foreach (AbstractMetaField* field, metaClass->fields()) { if (!field->isProtected()) continue; writeProtectedFieldAccessors(s, field); } } -#endif //destructor -#ifdef AVOID_PROTECTED_HACK - if (!metaClass->hasPrivateDestructor()) -#endif - s << INDENT << (metaClass->hasVirtualDestructor() || hasVirtualFunction ? "virtual " : "") << "~" << wrapperName << "();" << endl; + if (!avoidProtectedHack() || !metaClass->hasPrivateDestructor()) { + s << INDENT; + if (metaClass->hasVirtualDestructor() || hasVirtualFunction) + s << "virtual "; + s << "~" << wrapperName << "();" << endl; + } writeCodeSnips(s, metaClass->typeEntry()->codeSnips(), CodeSnip::Declaration, TypeSystem::NativeCode); -#ifdef AVOID_PROTECTED_HACK - if (!metaClass->hasPrivateDestructor()) { -#endif - - if (usePySideExtensions() && metaClass->isQObject()) { + if ((!avoidProtectedHack() || !metaClass->hasPrivateDestructor()) + && usePySideExtensions() && metaClass->isQObject()) { s << "public:\n"; s << INDENT << "virtual int qt_metacall(QMetaObject::Call call, int id, void** args);\n"; } -#ifdef AVOID_PROTECTED_HACK - } -#endif - if (m_inheritedOverloads.size()) { s << INDENT << "// Inherited overloads, because the using keyword sux" << endl; writeInheritedOverloads(s); @@ -169,8 +161,7 @@ void HeaderGenerator::writeFunction(QTextStream& s, const AbstractMetaFunction* if (func->isUserAdded()) return; -#ifdef AVOID_PROTECTED_HACK - if (func->isProtected() && !func->isConstructor() && !func->isOperatorOverload()) { + if (avoidProtectedHack() && func->isProtected() && !func->isConstructor() && !func->isOperatorOverload()) { s << INDENT << "inline " << (func->isStatic() ? "static " : ""); s << functionSignature(func, "", "_protected", Generator::EnumAsInts|Generator::OriginalTypeDescription) << " { "; s << (func->type() ? "return " : ""); @@ -192,17 +183,15 @@ void HeaderGenerator::writeFunction(QTextStream& s, const AbstractMetaFunction* s << args.join(", ") << ')'; s << "; }" << endl; } -#endif // pure virtual functions need a default implementation if ((func->isPrivate() && !visibilityModifiedToPrivate(func)) || (func->isModifiedRemoved() && !func->isAbstract())) return; -#ifdef AVOID_PROTECTED_HACK - if (func->ownerClass()->hasPrivateDestructor() && (func->isAbstract() || func->isVirtual())) + if (avoidProtectedHack() && func->ownerClass()->hasPrivateDestructor() + && (func->isAbstract() || func->isVirtual())) return; -#endif if (func->isConstructor() || func->isAbstract() || func->isVirtual()) { s << INDENT; @@ -252,13 +241,14 @@ void HeaderGenerator::writeTypeConverterDecl(QTextStream& s, const TypeEntry* ty QString typeT = type->qualifiedCppName() + (isAbstractOrObjectType ? "*" : ""); QString typeName = type->qualifiedCppName(); -#ifdef AVOID_PROTECTED_HACK - const AbstractMetaEnum* metaEnum = findAbstractMetaEnum(type); - if (metaEnum && metaEnum->isProtected()) { - typeT = protectedEnumSurrogateName(metaEnum); - typeName = typeT; + if (avoidProtectedHack()) { + const AbstractMetaEnum* metaEnum = findAbstractMetaEnum(type); + if (metaEnum && metaEnum->isProtected()) { + typeT = protectedEnumSurrogateName(metaEnum); + typeName = typeT; + } } -#endif + typeT.prepend("::"); typeName.prepend("::"); @@ -417,10 +407,10 @@ void HeaderGenerator::finishGeneration() s << "#ifndef " << includeShield << endl; s << "#define " << includeShield << endl<< endl; - #ifndef AVOID_PROTECTED_HACK - s << "//workaround to access protected functions" << endl; - s << "#define protected public" << endl << endl; - #endif + if (!avoidProtectedHack()) { + s << "//workaround to access protected functions" << endl; + s << "#define protected public" << endl << endl; + } s << "#include <Python.h>" << endl; s << "#include <conversions.h>" << endl; @@ -510,21 +500,20 @@ void HeaderGenerator::finishGeneration() void HeaderGenerator::writeProtectedEnumSurrogate(QTextStream& s, const AbstractMetaEnum* cppEnum) { -#ifdef AVOID_PROTECTED_HACK - if (cppEnum->isProtected()) + if (avoidProtectedHack() && cppEnum->isProtected()) s << "enum " << protectedEnumSurrogateName(cppEnum) << " {};" << endl; -#endif } void HeaderGenerator::writeSbkTypeFunction(QTextStream& s, const AbstractMetaEnum* cppEnum) { - QString enumName = cppEnum->name(); - if (cppEnum->enclosingClass()) - enumName = cppEnum->enclosingClass()->qualifiedCppName() + "::" + enumName; -#ifdef AVOID_PROTECTED_HACK - if (cppEnum->isProtected()) + QString enumName; + if (avoidProtectedHack() && cppEnum->isProtected()) { enumName = protectedEnumSurrogateName(cppEnum); -#endif + } else { + enumName = cppEnum->name(); + if (cppEnum->enclosingClass()) + enumName = cppEnum->enclosingClass()->qualifiedCppName() + "::" + enumName; + } s << "template<> inline PyTypeObject* SbkType< ::" << enumName << " >() "; s << "{ return " << cpythonTypeNameExt(cppEnum->typeEntry()) << "; }\n"; |