diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2017-01-05 16:13:56 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2017-01-06 12:10:10 +0000 |
commit | 566173b343c8672cd15fe7c3d5223aab766e6ef7 (patch) | |
tree | def9348b84b1ef5e2cdc6b527dc11deadca38a0d /generator | |
parent | b95dc286f5149f0f8ce512f480c9b9ac997ece3f (diff) |
Header cleanup
Split out small headers typesystem_enums.h typesystem_typedefs.h and
abstractmetalang_typedefs.h containing enumerations and typedefs
from abstractmetalang.h and typesystem.h.
Move enumerations Position and DocModificationMode from typesystem
classes into global enumerations in typesystem_enums.h.
Remove the large includes abstractmetalang.h and typesystem.h
from most headers, de-inline some methods where required.
Change-Id: I206acb605f86964a591057dcbc8584b9572fd810
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'generator')
-rw-r--r-- | generator/generator.cpp | 2 | ||||
-rw-r--r-- | generator/generator.h | 17 | ||||
-rw-r--r-- | generator/main.cpp | 2 | ||||
-rw-r--r-- | generator/qtdoc/qtdocgenerator.cpp | 33 | ||||
-rw-r--r-- | generator/qtdoc/qtdocgenerator.h | 7 | ||||
-rw-r--r-- | generator/shiboken2/cppgenerator.cpp | 60 | ||||
-rw-r--r-- | generator/shiboken2/cppgenerator.h | 1 | ||||
-rw-r--r-- | generator/shiboken2/headergenerator.cpp | 3 | ||||
-rw-r--r-- | generator/shiboken2/headergenerator.h | 4 | ||||
-rw-r--r-- | generator/shiboken2/overloaddata.cpp | 7 | ||||
-rw-r--r-- | generator/shiboken2/overloaddata.h | 2 | ||||
-rw-r--r-- | generator/shiboken2/shibokengenerator.cpp | 39 | ||||
-rw-r--r-- | generator/shiboken2/shibokengenerator.h | 35 |
13 files changed, 124 insertions, 88 deletions
diff --git a/generator/generator.cpp b/generator/generator.cpp index a175339..ce1e476 100644 --- a/generator/generator.cpp +++ b/generator/generator.cpp @@ -27,9 +27,11 @@ ****************************************************************************/ #include "generator.h" +#include "abstractmetalang.h" #include "reporthandler.h" #include "fileout.h" #include "apiextractor.h" +#include "typesystem.h" #include <QtCore/QDir> #include <QtCore/QFile> diff --git a/generator/generator.h b/generator/generator.h index 8dbc5a9..e570d8b 100644 --- a/generator/generator.h +++ b/generator/generator.h @@ -29,18 +29,31 @@ #ifndef GENERATOR_H #define GENERATOR_H +#include <abstractmetalang_typedefs.h> #include <QtCore/QObject> -#include <QtCore/QDir> #include <QtCore/QSharedPointer> +#include <QtCore/QTextStream> #include <QtCore/QVector> -#include <abstractmetalang.h> class ApiExtractor; class AbstractMetaBuilder; +class AbstractMetaFunction; +class AbstractMetaClass; +class AbstractMetaEnum; +class TypeEntry; +class ComplexTypeEntry; +class AbstractMetaType; +class EnumTypeEntry; +class FlagsTypeEntry; + QT_BEGIN_NAMESPACE class QFile; QT_END_NAMESPACE +class PrimitiveTypeEntry; +class ContainerTypeEntry; +class Indentor; + QTextStream& formatCode(QTextStream &s, const QString& code, Indentor &indentor); void verifyDirectoryFor(const QFile &file); diff --git a/generator/main.cpp b/generator/main.cpp index 694cc4f..e9a4ce7 100644 --- a/generator/main.cpp +++ b/generator/main.cpp @@ -31,6 +31,8 @@ #include <QLinkedList> #include <QLibrary> #include <QtXml/QDomDocument> +#include <QtCore/QFile> +#include <QtCore/QDir> #include <iostream> #include <apiextractor.h> #include "generator.h" diff --git a/generator/qtdoc/qtdocgenerator.cpp b/generator/qtdoc/qtdocgenerator.cpp index 19703e1..3e6f113 100644 --- a/generator/qtdoc/qtdocgenerator.cpp +++ b/generator/qtdoc/qtdocgenerator.cpp @@ -27,7 +27,9 @@ ****************************************************************************/ #include "qtdocgenerator.h" +#include <abstractmetalang.h> #include <reporthandler.h> +#include <typesystem.h> #include <qtdocparser.h> #include <doxygenparser.h> #include <typedatabase.h> @@ -1072,8 +1074,8 @@ void QtDocGenerator::generateClass(QTextStream& s, const AbstractMetaClass* meta s << "Detailed Description\n" "--------------------\n\n"; - writeInjectDocumentation(s, DocModification::Prepend, metaClass, 0); - if (!writeInjectDocumentation(s, DocModification::Replace, metaClass, 0)) + writeInjectDocumentation(s, TypeSystem::DocModificationPrepend, metaClass, 0); + if (!writeInjectDocumentation(s, TypeSystem::DocModificationReplace, metaClass, 0)) writeFormatedText(s, metaClass->documentation(), metaClass); if (!metaClass->isNamespace()) @@ -1095,7 +1097,7 @@ void QtDocGenerator::generateClass(QTextStream& s, const AbstractMetaClass* meta writeFunction(s, true, metaClass, func); } - writeInjectDocumentation(s, DocModification::Append, metaClass, 0); + writeInjectDocumentation(s, TypeSystem::DocModificationAppend, metaClass, 0); } void QtDocGenerator::writeFunctionList(QTextStream& s, const AbstractMetaClass* cppClass) @@ -1286,7 +1288,7 @@ QString QtDocGenerator::parseArgDocStyle(const AbstractMetaClass* cppClass, cons void QtDocGenerator::writeDocSnips(QTextStream &s, const CodeSnipList &codeSnips, - CodeSnip::Position position, + TypeSystem::CodeSnipPosition position, TypeSystem::Language language) { Indentation indentation(INDENT); @@ -1348,7 +1350,7 @@ void QtDocGenerator::writeDocSnips(QTextStream &s, } bool QtDocGenerator::writeInjectDocumentation(QTextStream& s, - DocModification::Mode mode, + TypeSystem::DocModificationMode mode, const AbstractMetaClass* cppClass, const AbstractMetaFunction* func) { @@ -1381,15 +1383,12 @@ bool QtDocGenerator::writeInjectDocumentation(QTextStream& s, // TODO: Deprecate the use of doc string on glue code. // This is pre "add-function" and "inject-documentation" tags. - if (func) { - writeDocSnips(s, func->injectedCodeSnips(), - (mode == DocModification::Prepend ? CodeSnip::Beginning : CodeSnip::End), - TypeSystem::TargetLangCode); - } else { - writeDocSnips(s, cppClass->typeEntry()->codeSnips(), - (mode == DocModification::Prepend ? CodeSnip::Beginning : CodeSnip::End), - TypeSystem::TargetLangCode); - } + const TypeSystem::CodeSnipPosition pos = mode == TypeSystem::DocModificationPrepend + ? TypeSystem::CodeSnipPositionBeginning : TypeSystem::CodeSnipPositionEnd; + if (func) + writeDocSnips(s, func->injectedCodeSnips(), pos, TypeSystem::TargetLangCode); + else + writeDocSnips(s, cppClass->typeEntry()->codeSnips(), pos, TypeSystem::TargetLangCode); return didSomething; } @@ -1501,10 +1500,10 @@ void QtDocGenerator::writeFunction(QTextStream& s, bool writeDoc, const Abstract s << endl; writeFunctionParametersType(s, cppClass, func); s << endl; - writeInjectDocumentation(s, DocModification::Prepend, cppClass, func); - if (!writeInjectDocumentation(s, DocModification::Replace, cppClass, func)) + writeInjectDocumentation(s, TypeSystem::DocModificationPrepend, cppClass, func); + if (!writeInjectDocumentation(s, TypeSystem::DocModificationReplace, cppClass, func)) writeFormatedText(s, func->documentation(), cppClass); - writeInjectDocumentation(s, DocModification::Append, cppClass, func); + writeInjectDocumentation(s, TypeSystem::DocModificationAppend, cppClass, func); } } diff --git a/generator/qtdoc/qtdocgenerator.h b/generator/qtdoc/qtdocgenerator.h index f4a2e08..ec815ad 100644 --- a/generator/qtdoc/qtdocgenerator.h +++ b/generator/qtdoc/qtdocgenerator.h @@ -32,9 +32,10 @@ #include <QtCore/QHash> #include <QtCore/QTextStream> #include <QXmlStreamReader> -#include <abstractmetalang.h> #include "generator.h" #include "docparser.h" +#include "typesystem_enums.h" +#include "typesystem_typedefs.h" class QtDocParser; class AbstractMetaFunction; @@ -214,8 +215,8 @@ private: void writeConstructors(QTextStream &s, const AbstractMetaClass *cppClass); void writeFormatedText(QTextStream& s, const Documentation& doc, const AbstractMetaClass* metaclass = 0); - bool writeInjectDocumentation(QTextStream& s, DocModification::Mode mode, const AbstractMetaClass* cppClass, const AbstractMetaFunction* func); - void writeDocSnips(QTextStream &s, const CodeSnipList &codeSnips, CodeSnip::Position position, TypeSystem::Language language); + bool writeInjectDocumentation(QTextStream& s, TypeSystem::DocModificationMode mode, const AbstractMetaClass* cppClass, const AbstractMetaFunction* func); + void writeDocSnips(QTextStream &s, const CodeSnipList &codeSnips, TypeSystem::CodeSnipPosition position, TypeSystem::Language language); QString parseArgDocStyle(const AbstractMetaClass *cppClass, const AbstractMetaFunction *func); diff --git a/generator/shiboken2/cppgenerator.cpp b/generator/shiboken2/cppgenerator.cpp index 8e434e0..ee66387 100644 --- a/generator/shiboken2/cppgenerator.cpp +++ b/generator/shiboken2/cppgenerator.cpp @@ -29,7 +29,9 @@ #include <memory> #include "cppgenerator.h" +#include "overloaddata.h" #include "shibokennormalize_p.h" +#include <abstractmetalang.h> #include <reporthandler.h> #include <typedatabase.h> @@ -269,7 +271,7 @@ void CppGenerator::generateClass(QTextStream &s, const AbstractMetaClass *metaCl // class inject-code native/beginning if (!metaClass->typeEntry()->codeSnips().isEmpty()) { - writeCodeSnips(s, metaClass->typeEntry()->codeSnips(), CodeSnip::Beginning, TypeSystem::NativeCode, metaClass); + writeCodeSnips(s, metaClass->typeEntry()->codeSnips(), TypeSystem::CodeSnipPositionBeginning, TypeSystem::NativeCode, metaClass); s << endl; } @@ -492,7 +494,7 @@ void CppGenerator::generateClass(QTextStream &s, const AbstractMetaClass *metaCl // class inject-code native/end if (!metaClass->typeEntry()->codeSnips().isEmpty()) { - writeCodeSnips(s, metaClass->typeEntry()->codeSnips(), CodeSnip::End, TypeSystem::NativeCode, metaClass); + writeCodeSnips(s, metaClass->typeEntry()->codeSnips(), TypeSystem::CodeSnipPositionEnd, TypeSystem::NativeCode, metaClass); s << endl; } } @@ -506,9 +508,9 @@ void CppGenerator::writeConstructorNative(QTextStream& s, const AbstractMetaFunc writeFunctionCall(s, func); s << " {" << endl; const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().last(); - writeCodeSnips(s, func->injectedCodeSnips(), CodeSnip::Beginning, TypeSystem::NativeCode, func, lastArg); + writeCodeSnips(s, func->injectedCodeSnips(), TypeSystem::CodeSnipPositionBeginning, TypeSystem::NativeCode, func, lastArg); s << INDENT << "// ... middle" << endl; - writeCodeSnips(s, func->injectedCodeSnips(), CodeSnip::End, TypeSystem::NativeCode, func, lastArg); + writeCodeSnips(s, func->injectedCodeSnips(), TypeSystem::CodeSnipPositionEnd, TypeSystem::NativeCode, func, lastArg); s << '}' << endl << endl; } @@ -618,7 +620,7 @@ void CppGenerator::writeVirtualMethodNative(QTextStream&s, const AbstractMetaFun if (func->hasInjectedCode()) { CodeSnipList snips = func->injectedCodeSnips(); const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().last(); - writeCodeSnips(s, snips, CodeSnip::Declaration, TypeSystem::NativeCode, func, lastArg); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionDeclaration, TypeSystem::NativeCode, func, lastArg); s << endl; } @@ -641,7 +643,7 @@ void CppGenerator::writeVirtualMethodNative(QTextStream&s, const AbstractMetaFun if (func->hasInjectedCode()) { snips = func->injectedCodeSnips(); const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().last(); - writeCodeSnips(s, snips, CodeSnip::Beginning, TypeSystem::ShellCode, func, lastArg); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionBeginning, TypeSystem::ShellCode, func, lastArg); s << endl; } @@ -734,7 +736,7 @@ void CppGenerator::writeVirtualMethodNative(QTextStream&s, const AbstractMetaFun s << INDENT << "PyObject* pySelf = BindingManager::instance().retrieveWrapper(this);" << endl; const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().last(); - writeCodeSnips(s, snips, CodeSnip::Beginning, TypeSystem::NativeCode, func, lastArg); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionBeginning, TypeSystem::NativeCode, func, lastArg); s << endl; } @@ -833,7 +835,7 @@ void CppGenerator::writeVirtualMethodNative(QTextStream&s, const AbstractMetaFun if (func->hasInjectedCode()) { s << endl; const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().last(); - writeCodeSnips(s, snips, CodeSnip::End, TypeSystem::NativeCode, func, lastArg); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionEnd, TypeSystem::NativeCode, func, lastArg); } if (retType) { @@ -886,7 +888,7 @@ void CppGenerator::writeMetaObjectMethod(QTextStream& s, const AbstractMetaClass snips = func->injectedCodeSnips(); if (func->isUserAdded()) { CodeSnipList snips = func->injectedCodeSnips(); - writeCodeSnips(s, snips, CodeSnip::Any, TypeSystem::NativeCode, func); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionAny, TypeSystem::NativeCode, func); } } @@ -1462,7 +1464,7 @@ void CppGenerator::writeConstructorWrapper(QTextStream& s, const AbstractMetaFun bool hasCodeInjectionsAtEnd = false; foreach(AbstractMetaFunction* func, overloads) { foreach (const CodeSnip &cs, func->injectedCodeSnips()) { - if (cs.position == CodeSnip::End) { + if (cs.position == TypeSystem::CodeSnipPositionEnd) { hasCodeInjectionsAtEnd = true; break; } @@ -1474,12 +1476,12 @@ void CppGenerator::writeConstructorWrapper(QTextStream& s, const AbstractMetaFun foreach(AbstractMetaFunction* func, overloads) { Indentation indent(INDENT); foreach (const CodeSnip &cs, func->injectedCodeSnips()) { - if (cs.position == CodeSnip::End) { + if (cs.position == TypeSystem::CodeSnipPositionEnd) { s << INDENT << "case " << metaClass->functions().indexOf(func) << ':' << endl; s << INDENT << '{' << endl; { Indentation indent(INDENT); - writeCodeSnips(s, func->injectedCodeSnips(), CodeSnip::End, TypeSystem::TargetLangCode, func); + writeCodeSnips(s, func->injectedCodeSnips(), TypeSystem::CodeSnipPositionEnd, TypeSystem::TargetLangCode, func); } s << INDENT << '}' << endl; break; @@ -2100,7 +2102,7 @@ static void addConversionRuleCodeSnippet(CodeSnipList& snippetList, QString& rul rule.replace(QLatin1String("%out"), outputName); } CodeSnip snip(0, snippetLanguage); - snip.position = (snippetLanguage == TypeSystem::NativeCode) ? CodeSnip::Any : CodeSnip::Beginning; + snip.position = (snippetLanguage == TypeSystem::NativeCode) ? TypeSystem::CodeSnipPositionAny : TypeSystem::CodeSnipPositionBeginning; snip.addCode(rule); snippetList << snip; } @@ -2113,7 +2115,7 @@ void CppGenerator::writeConversionRule(QTextStream& s, const AbstractMetaFunctio addConversionRuleCodeSnippet(snippets, rule, language, TypeSystem::TargetLangCode, arg->name(), arg->name()); } - writeCodeSnips(s, snippets, CodeSnip::Beginning, TypeSystem::TargetLangCode, func); + writeCodeSnips(s, snippets, TypeSystem::CodeSnipPositionBeginning, TypeSystem::TargetLangCode, func); } void CppGenerator::writeConversionRule(QTextStream& s, const AbstractMetaFunction* func, TypeSystem::Language language, const QString& outputVar) @@ -2121,7 +2123,7 @@ void CppGenerator::writeConversionRule(QTextStream& s, const AbstractMetaFunctio CodeSnipList snippets; QString rule = func->conversionRule(language, 0); addConversionRuleCodeSnippet(snippets, rule, language, language, outputVar); - writeCodeSnips(s, snippets, CodeSnip::Any, language, func); + writeCodeSnips(s, snippets, TypeSystem::CodeSnipPositionAny, language, func); } void CppGenerator::writeNoneReturn(QTextStream& s, const AbstractMetaFunction* func, bool thereIsReturnValue) @@ -2768,7 +2770,7 @@ void CppGenerator::writeMethodCall(QTextStream& s, const AbstractMetaFunction* f s << INDENT << "// " << func->minimalSignature() << (func->isReverseOperator() ? " [reverse operator]": "") << endl; if (func->isConstructor()) { foreach (const CodeSnip &cs, func->injectedCodeSnips()) { - if (cs.position == CodeSnip::End) { + if (cs.position == TypeSystem::CodeSnipPositionEnd) { s << INDENT << "overloadId = " << func->ownerClass()->functions().indexOf(const_cast<AbstractMetaFunction* const>(func)) << ';' << endl; break; } @@ -2807,7 +2809,7 @@ void CppGenerator::writeMethodCall(QTextStream& s, const AbstractMetaFunction* f lastArg = func->arguments().last(); } - writeCodeSnips(s, snips, CodeSnip::Beginning, TypeSystem::TargetLangCode, func, lastArg); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionBeginning, TypeSystem::TargetLangCode, func, lastArg); s << endl; } @@ -3044,7 +3046,7 @@ void CppGenerator::writeMethodCall(QTextStream& s, const AbstractMetaFunction* f if (func->hasInjectedCode() && !func->isConstructor()) { s << endl; - writeCodeSnips(s, snips, CodeSnip::End, TypeSystem::TargetLangCode, func, lastArg); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionEnd, TypeSystem::TargetLangCode, func, lastArg); } bool hasReturnPolicy = false; @@ -3570,14 +3572,14 @@ void CppGenerator::writeMappingMethods(QTextStream& s, const AbstractMetaClass* QString funcArgs = it.value().first; QString funcRetVal = it.value().second; - CodeSnipList snips = func->injectedCodeSnips(CodeSnip::Any, TypeSystem::TargetLangCode); + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode); s << funcRetVal << ' ' << funcName << '(' << funcArgs << ')' << endl << '{' << endl; writeInvalidPyObjectCheck(s, QLatin1String(PYTHON_SELF_VAR)); writeCppSelfDefinition(s, func); const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().last(); - writeCodeSnips(s, snips, CodeSnip::Any, TypeSystem::TargetLangCode, func, lastArg); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode, func, lastArg); s << '}' << endl << endl; } } @@ -3598,14 +3600,14 @@ void CppGenerator::writeSequenceMethods(QTextStream& s, const AbstractMetaClass* QString funcArgs = it.value().first; QString funcRetVal = it.value().second; - CodeSnipList snips = func->injectedCodeSnips(CodeSnip::Any, TypeSystem::TargetLangCode); + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode); s << funcRetVal << ' ' << funcName << '(' << funcArgs << ')' << endl << '{' << endl; writeInvalidPyObjectCheck(s, QLatin1String(PYTHON_SELF_VAR)); writeCppSelfDefinition(s, func); const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().last(); - writeCodeSnips(s, snips,CodeSnip::Any, TypeSystem::TargetLangCode, func, lastArg); + writeCodeSnips(s, snips,TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode, func, lastArg); s << '}' << endl << endl; } @@ -3957,7 +3959,7 @@ void CppGenerator::writeRichCompareFunction(QTextStream& s, const AbstractMetaCl // If the function is user added, use the inject code if (func->isUserAdded()) { CodeSnipList snips = func->injectedCodeSnips(); - writeCodeSnips(s, snips, CodeSnip::Any, TypeSystem::TargetLangCode, func, func->arguments().last()); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode, func, func->arguments().last()); } else { QString expression = QString::fromLatin1("%1%2 %3 (%4" CPP_ARG0 ")") .arg(func->isPointerOperator() ? QLatin1String("&") : QString(), @@ -4436,7 +4438,7 @@ void CppGenerator::writeClassRegister(QTextStream& s, const AbstractMetaClass* m // class inject-code target/beginning if (!classTypeEntry->codeSnips().isEmpty()) { - writeCodeSnips(s, classTypeEntry->codeSnips(), CodeSnip::Beginning, TypeSystem::TargetLangCode, metaClass); + writeCodeSnips(s, classTypeEntry->codeSnips(), TypeSystem::CodeSnipPositionBeginning, TypeSystem::TargetLangCode, metaClass); s << endl; } @@ -4486,7 +4488,7 @@ void CppGenerator::writeClassRegister(QTextStream& s, const AbstractMetaClass* m // class inject-code target/end if (!classTypeEntry->codeSnips().isEmpty()) { s << endl; - writeCodeSnips(s, classTypeEntry->codeSnips(), CodeSnip::End, TypeSystem::TargetLangCode, metaClass); + writeCodeSnips(s, classTypeEntry->codeSnips(), TypeSystem::CodeSnipPositionEnd, TypeSystem::TargetLangCode, metaClass); } if (usePySideExtensions()) { @@ -4805,7 +4807,7 @@ bool CppGenerator::finishGeneration() // module inject-code native/beginning if (!snips.isEmpty()) { - writeCodeSnips(s, snips, CodeSnip::Beginning, TypeSystem::NativeCode); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionBeginning, TypeSystem::NativeCode); s << endl; } @@ -4932,7 +4934,7 @@ bool CppGenerator::finishGeneration() ErrorCode errorCode(QLatin1String("SBK_MODULE_INIT_ERROR")); // module inject-code target/beginning if (!snips.isEmpty()) { - writeCodeSnips(s, snips, CodeSnip::Beginning, TypeSystem::TargetLangCode); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionBeginning, TypeSystem::TargetLangCode); s << endl; } @@ -5051,13 +5053,13 @@ bool CppGenerator::finishGeneration() // module inject-code target/end if (!snips.isEmpty()) { - writeCodeSnips(s, snips, CodeSnip::End, TypeSystem::TargetLangCode); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionEnd, TypeSystem::TargetLangCode); s << endl; } // module inject-code native/end if (!snips.isEmpty()) { - writeCodeSnips(s, snips, CodeSnip::End, TypeSystem::NativeCode); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionEnd, TypeSystem::NativeCode); s << endl; } diff --git a/generator/shiboken2/cppgenerator.h b/generator/shiboken2/cppgenerator.h index bdbd090..104ab41 100644 --- a/generator/shiboken2/cppgenerator.h +++ b/generator/shiboken2/cppgenerator.h @@ -30,7 +30,6 @@ #define CPPGENERATOR_H #include "shibokengenerator.h" -#include "overloaddata.h" /** * The CppGenerator generate the implementations of C++ bindings classes. diff --git a/generator/shiboken2/headergenerator.cpp b/generator/shiboken2/headergenerator.cpp index 8cab4c2..d751a89 100644 --- a/generator/shiboken2/headergenerator.cpp +++ b/generator/shiboken2/headergenerator.cpp @@ -27,6 +27,7 @@ ****************************************************************************/ #include "headergenerator.h" +#include <abstractmetalang.h> #include <typedatabase.h> #include <reporthandler.h> #include <fileout.h> @@ -136,7 +137,7 @@ void HeaderGenerator::generateClass(QTextStream& s, const AbstractMetaClass* met s << "~" << wrapperName << "();" << endl; } - writeCodeSnips(s, metaClass->typeEntry()->codeSnips(), CodeSnip::Declaration, TypeSystem::NativeCode); + writeCodeSnips(s, metaClass->typeEntry()->codeSnips(), TypeSystem::CodeSnipPositionDeclaration, TypeSystem::NativeCode); if ((!avoidProtectedHack() || !metaClass->hasPrivateDestructor()) && usePySideExtensions() && metaClass->isQObject()) { diff --git a/generator/shiboken2/headergenerator.h b/generator/shiboken2/headergenerator.h index 71f3dff..3652ee4 100644 --- a/generator/shiboken2/headergenerator.h +++ b/generator/shiboken2/headergenerator.h @@ -31,6 +31,10 @@ #include "shibokengenerator.h" +#include <QtCore/QSet> + +class AbstractMetaFunction; + /** * The HeaderGenerator generate the declarations of C++ bindings classes. */ diff --git a/generator/shiboken2/overloaddata.cpp b/generator/shiboken2/overloaddata.cpp index bcf653c..b7d6393 100644 --- a/generator/shiboken2/overloaddata.cpp +++ b/generator/shiboken2/overloaddata.cpp @@ -26,12 +26,15 @@ ** ****************************************************************************/ -#include <QtCore/QFile> +#include <abstractmetalang.h> #include <reporthandler.h> #include <graph.h> #include "overloaddata.h" #include "shibokengenerator.h" -#include <QTemporaryFile> + +#include <QtCore/QDir> +#include <QtCore/QFile> +#include <QtCore/QTemporaryFile> static const TypeEntry* getAliasedTypeEntry(const TypeEntry* typeEntry) { diff --git a/generator/shiboken2/overloaddata.h b/generator/shiboken2/overloaddata.h index 82af636..1985a73 100644 --- a/generator/shiboken2/overloaddata.h +++ b/generator/shiboken2/overloaddata.h @@ -29,7 +29,7 @@ #ifndef OVERLOADDATA_H #define OVERLOADDATA_H -#include <abstractmetalang.h> +#include <abstractmetalang_typedefs.h> #include <QtCore/QList> #include <QtCore/QBitArray> diff --git a/generator/shiboken2/shibokengenerator.cpp b/generator/shiboken2/shibokengenerator.cpp index 32840bd..0cb0e33 100644 --- a/generator/shiboken2/shibokengenerator.cpp +++ b/generator/shiboken2/shibokengenerator.cpp @@ -27,6 +27,7 @@ ****************************************************************************/ #include "shibokengenerator.h" +#include <abstractmetalang.h> #include "overloaddata.h" #include <reporthandler.h> #include <typedatabase.h> @@ -510,6 +511,11 @@ QString ShibokenGenerator::cpythonEnumName(const EnumTypeEntry* enumEntry) return cpythonEnumFlagsName(p, enumEntry->qualifiedCppName()); } +QString ShibokenGenerator::cpythonEnumName(const AbstractMetaEnum *metaEnum) +{ + return cpythonEnumName(metaEnum->typeEntry()); +} + QString ShibokenGenerator::cpythonFlagsName(const FlagsTypeEntry* flagsEntry) { QString p = flagsEntry->targetLangPackage(); @@ -517,6 +523,14 @@ QString ShibokenGenerator::cpythonFlagsName(const FlagsTypeEntry* flagsEntry) return cpythonEnumFlagsName(p, flagsEntry->originalName()); } +QString ShibokenGenerator::cpythonFlagsName(const AbstractMetaEnum *metaEnum) +{ + const FlagsTypeEntry *flags = metaEnum->typeEntry()->flags(); + if (!flags) + return QString(); + return cpythonFlagsName(flags); +} + QString ShibokenGenerator::cpythonSpecialCastFunctionName(const AbstractMetaClass* metaClass) { return cpythonBaseName(metaClass->typeEntry()) + QLatin1String("SpecialCastFunction"); @@ -1163,6 +1177,11 @@ QString ShibokenGenerator::cpythonIsConvertibleFunction(const AbstractMetaType* .arg(converterObject(metaType)); } +QString ShibokenGenerator::cpythonIsConvertibleFunction(const AbstractMetaArgument *metaArg, bool genericNumberType) +{ + return cpythonIsConvertibleFunction(metaArg->type(), genericNumberType); +} + QString ShibokenGenerator::cpythonToCppConversionFunction(const AbstractMetaClass* metaClass) { return QStringLiteral("Shiboken::Conversions::pythonToCppPointer((SbkObjectType*)%1, ") @@ -1448,13 +1467,13 @@ static QString getArgumentsFromMethodCall(const QString& str) } QString ShibokenGenerator::getCodeSnippets(const CodeSnipList& codeSnips, - CodeSnip::Position position, + TypeSystem::CodeSnipPosition position, TypeSystem::Language language) { QString code; QTextStream c(&code); foreach (const CodeSnip &snip, codeSnips) { - if ((position != CodeSnip::Any && snip.position != position) || !(snip.language & language)) + if ((position != TypeSystem::CodeSnipPositionAny && snip.position != position) || !(snip.language & language)) continue; QString snipCode; QTextStream sc(&snipCode); @@ -1541,7 +1560,7 @@ ShibokenGenerator::ArgumentVarReplacementList ShibokenGenerator::getArgumentRepl void ShibokenGenerator::writeCodeSnips(QTextStream& s, const CodeSnipList& codeSnips, - CodeSnip::Position position, + TypeSystem::CodeSnipPosition position, TypeSystem::Language language, const AbstractMetaClass* context) { @@ -1556,7 +1575,7 @@ void ShibokenGenerator::writeCodeSnips(QTextStream& s, void ShibokenGenerator::writeCodeSnips(QTextStream& s, const CodeSnipList& codeSnips, - CodeSnip::Position position, + TypeSystem::CodeSnipPosition position, TypeSystem::Language language, const AbstractMetaFunction* func, const AbstractMetaArgument* lastArg) @@ -1914,7 +1933,7 @@ void ShibokenGenerator::replaceConverterTypeSystemVariable(TypeSystemConverterVa bool ShibokenGenerator::injectedCodeUsesCppSelf(const AbstractMetaFunction* func) { - CodeSnipList snips = func->injectedCodeSnips(CodeSnip::Any, TypeSystem::TargetLangCode); + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode); foreach (const CodeSnip &snip, snips) { if (snip.code().contains(QLatin1String("%CPPSELF"))) return true; @@ -1924,7 +1943,7 @@ bool ShibokenGenerator::injectedCodeUsesCppSelf(const AbstractMetaFunction* func bool ShibokenGenerator::injectedCodeUsesPySelf(const AbstractMetaFunction* func) { - CodeSnipList snips = func->injectedCodeSnips(CodeSnip::Any, TypeSystem::NativeCode); + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::NativeCode); foreach (const CodeSnip &snip, snips) { if (snip.code().contains(QLatin1String("%PYSELF"))) return true; @@ -1940,7 +1959,7 @@ bool ShibokenGenerator::injectedCodeCallsCppFunction(const AbstractMetaFunction* funcCall.prepend(QLatin1String("new ")); wrappedCtorCall = QStringLiteral("new %1(").arg(wrapperName(func->ownerClass())); } - CodeSnipList snips = func->injectedCodeSnips(CodeSnip::Any, TypeSystem::TargetLangCode); + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode); foreach (const CodeSnip &snip, snips) { if (snip.code().contains(QLatin1String("%FUNCTION_NAME(")) || snip.code().contains(funcCall) || (func->isConstructor() @@ -1955,7 +1974,7 @@ bool ShibokenGenerator::injectedCodeCallsCppFunction(const AbstractMetaFunction* bool ShibokenGenerator::injectedCodeCallsPythonOverride(const AbstractMetaFunction* func) { static QRegExp overrideCallRegexCheck(QLatin1String("PyObject_Call\\s*\\(\\s*%PYTHON_METHOD_OVERRIDE\\s*,")); - CodeSnipList snips = func->injectedCodeSnips(CodeSnip::Any, TypeSystem::NativeCode); + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::NativeCode); foreach (const CodeSnip &snip, snips) { if (overrideCallRegexCheck.indexIn(snip.code()) != -1) return true; @@ -1967,7 +1986,7 @@ bool ShibokenGenerator::injectedCodeHasReturnValueAttribution(const AbstractMeta { static QRegExp retValAttributionRegexCheck_native(QLatin1String("%0\\s*=[^=]\\s*.+")); static QRegExp retValAttributionRegexCheck_target(QLatin1String("%PYARG_0\\s*=[^=]\\s*.+")); - CodeSnipList snips = func->injectedCodeSnips(CodeSnip::Any, language); + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, language); foreach (const CodeSnip &snip, snips) { if (language == TypeSystem::TargetLangCode) { if (retValAttributionRegexCheck_target.indexIn(snip.code()) != -1) @@ -1982,7 +2001,7 @@ bool ShibokenGenerator::injectedCodeHasReturnValueAttribution(const AbstractMeta bool ShibokenGenerator::injectedCodeUsesArgument(const AbstractMetaFunction* func, int argumentIndex) { - CodeSnipList snips = func->injectedCodeSnips(CodeSnip::Any); + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny); foreach (const CodeSnip &snip, snips) { QString code = snip.code(); if (code.contains(QLatin1String("%ARGUMENT_NAMES"))) diff --git a/generator/shiboken2/shibokengenerator.h b/generator/shiboken2/shibokengenerator.h index 71c7794..5dc2a29 100644 --- a/generator/shiboken2/shibokengenerator.h +++ b/generator/shiboken2/shibokengenerator.h @@ -54,11 +54,14 @@ "(?:\\s+)=(?:\\s+)%CONVERTTOCPP\\[([^\\[]*)\\]\\(" #include <generator.h> -#include <QtCore/QTextStream> -#include "overloaddata.h" +#include "typesystem.h" class DocParser; +class CodeSnip; +class OverloadData; + +QT_FORWARD_DECLARE_CLASS(QTextStream) /** * Abstract generator that contains common methods used in CppGenerator and HeaderGenerator. @@ -136,20 +139,20 @@ public: /// Write user's custom code snippets at class or module level. void writeCodeSnips(QTextStream& s, - const CodeSnipList& codeSnips, - CodeSnip::Position position, + const QList<CodeSnip>& codeSnips, + TypeSystem::CodeSnipPosition position, TypeSystem::Language language, const AbstractMetaClass* context = 0); /// Write user's custom code snippets at function level. void writeCodeSnips(QTextStream& s, - const CodeSnipList& codeSnips, - CodeSnip::Position position, + const QList<CodeSnip>& codeSnips, + TypeSystem::CodeSnipPosition position, TypeSystem::Language language, const AbstractMetaFunction* func, const AbstractMetaArgument* lastArg = 0); /// Returns a string with the user's custom code snippets that comply with \p position and \p language. - QString getCodeSnippets(const CodeSnipList& codeSnips, CodeSnip::Position position, TypeSystem::Language language); + QString getCodeSnippets(const QList<CodeSnip>& codeSnips, TypeSystem::CodeSnipPosition position, TypeSystem::Language language); /// Replaces variables for the user's custom code at global or class level. void processCodeSnip(QString& code, const AbstractMetaClass* context = 0); @@ -364,10 +367,7 @@ public: QString guessCPythonCheckFunction(const QString& type, AbstractMetaType** metaType); QString cpythonIsConvertibleFunction(const TypeEntry* type, bool genericNumberType = false, bool checkExact = false); QString cpythonIsConvertibleFunction(const AbstractMetaType* metaType, bool genericNumberType = false); - inline QString cpythonIsConvertibleFunction(const AbstractMetaArgument* metaArg, bool genericNumberType = false) - { - return cpythonIsConvertibleFunction(metaArg->type(), genericNumberType); - } + QString cpythonIsConvertibleFunction(const AbstractMetaArgument* metaArg, bool genericNumberType = false); QString guessCPythonIsConvertible(const QString& type); QString cpythonToCppConversionFunction(const AbstractMetaClass* metaClass); @@ -391,19 +391,10 @@ public: QString guessScopeForDefaultValue(const AbstractMetaFunction* func, const AbstractMetaArgument* arg); QString cpythonEnumName(const EnumTypeEntry* enumEntry); - inline QString cpythonEnumName(const AbstractMetaEnum* metaEnum) - { - return cpythonEnumName(metaEnum->typeEntry()); - } + QString cpythonEnumName(const AbstractMetaEnum* metaEnum); QString cpythonFlagsName(const FlagsTypeEntry* flagsEntry); - inline QString cpythonFlagsName(const AbstractMetaEnum* metaEnum) - { - FlagsTypeEntry* flags = metaEnum->typeEntry()->flags(); - if (!flags) - return QString(); - return cpythonFlagsName(flags); - } + QString cpythonFlagsName(const AbstractMetaEnum* metaEnum); /// Returns the special cast function name, the function used to proper cast class with multiple inheritance. QString cpythonSpecialCastFunctionName(const AbstractMetaClass* metaClass); |