aboutsummaryrefslogtreecommitdiffstats
path: root/generator
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2017-01-05 16:13:56 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2017-01-06 12:10:10 +0000
commit566173b343c8672cd15fe7c3d5223aab766e6ef7 (patch)
treedef9348b84b1ef5e2cdc6b527dc11deadca38a0d /generator
parentb95dc286f5149f0f8ce512f480c9b9ac997ece3f (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.cpp2
-rw-r--r--generator/generator.h17
-rw-r--r--generator/main.cpp2
-rw-r--r--generator/qtdoc/qtdocgenerator.cpp33
-rw-r--r--generator/qtdoc/qtdocgenerator.h7
-rw-r--r--generator/shiboken2/cppgenerator.cpp60
-rw-r--r--generator/shiboken2/cppgenerator.h1
-rw-r--r--generator/shiboken2/headergenerator.cpp3
-rw-r--r--generator/shiboken2/headergenerator.h4
-rw-r--r--generator/shiboken2/overloaddata.cpp7
-rw-r--r--generator/shiboken2/overloaddata.h2
-rw-r--r--generator/shiboken2/shibokengenerator.cpp39
-rw-r--r--generator/shiboken2/shibokengenerator.h35
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);