aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp12
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetalang.cpp15
-rw-r--r--sources/shiboken6/ApiExtractor/include.h11
-rw-r--r--sources/shiboken6/ApiExtractor/typesystem.cpp4
-rw-r--r--sources/shiboken6/generator/shiboken/cppgenerator.cpp33
-rw-r--r--sources/shiboken6/generator/shiboken/headergenerator.cpp3
6 files changed, 65 insertions, 13 deletions
diff --git a/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp
index 4a4f4489e..88cda5461 100644
--- a/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp
+++ b/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp
@@ -326,6 +326,10 @@ void AbstractMetaBuilderPrivate::traverseOperatorFunction(const FunctionModelIte
metaFunction->setFlags(flags);
metaFunction->setAccess(Access::Public);
baseoperandClass->addFunction(AbstractMetaFunctionCPtr(metaFunction));
+ if (!metaFunction->arguments().isEmpty()) {
+ const auto include = metaFunction->arguments().constFirst().type().typeEntry()->include();
+ baseoperandClass->typeEntry()->addArgumentInclude(include);
+ }
Q_ASSERT(!metaFunction->wasPrivate());
}
@@ -1035,10 +1039,14 @@ AbstractMetaClass *AbstractMetaBuilderPrivate::traverseClass(const FileModelItem
reason = AbstractMetaBuilder::GenerationDisabled;
} else if (!type) {
TypeEntry *te = TypeDatabase::instance()->findType(fullClassName);
- if (te && !te->isComplex())
+ if (te && !te->isComplex()) {
reason = AbstractMetaBuilder::RedefinedToNotClass;
- else
+ // Set the default include file name
+ if (!te->include().isValid())
+ setInclude(te, classItem->fileName());
+ } else {
reason = AbstractMetaBuilder::NotInTypeSystem;
+ }
} else if (type->codeGeneration() == TypeEntry::GenerateNothing) {
reason = AbstractMetaBuilder::GenerationDisabled;
}
diff --git a/sources/shiboken6/ApiExtractor/abstractmetalang.cpp b/sources/shiboken6/ApiExtractor/abstractmetalang.cpp
index 840d628d5..056003f5c 100644
--- a/sources/shiboken6/ApiExtractor/abstractmetalang.cpp
+++ b/sources/shiboken6/ApiExtractor/abstractmetalang.cpp
@@ -1341,11 +1341,10 @@ static void addExtraIncludeForType(AbstractMetaClass *metaClass, const AbstractM
Q_ASSERT(metaClass);
const TypeEntry *entry = type.typeEntry();
- if (entry && entry->isComplex()) {
- const auto *centry = static_cast<const ComplexTypeEntry *>(entry);
+
+ if (entry && entry->include().isValid()) {
ComplexTypeEntry *class_entry = metaClass->typeEntry();
- if (class_entry && centry->include().isValid())
- class_entry->addArgumentInclude(centry->include());
+ class_entry->addArgumentInclude(entry->include());
}
if (type.hasInstantiations()) {
@@ -1362,8 +1361,12 @@ static void addExtraIncludesForFunction(AbstractMetaClass *metaClass,
addExtraIncludeForType(metaClass, meta_function->type());
const AbstractMetaArgumentList &arguments = meta_function->arguments();
- for (const AbstractMetaArgument &argument : arguments)
- addExtraIncludeForType(metaClass, argument.type());
+ for (const AbstractMetaArgument &argument : arguments) {
+ const auto &type = argument.type();
+ addExtraIncludeForType(metaClass, type);
+ if (argument.modifiedType() != type)
+ addExtraIncludeForType(metaClass, argument.modifiedType());
+ }
}
static bool addSuperFunction(const AbstractMetaFunctionCPtr &f)
diff --git a/sources/shiboken6/ApiExtractor/include.h b/sources/shiboken6/ApiExtractor/include.h
index 6b463a230..fcbaf9b9c 100644
--- a/sources/shiboken6/ApiExtractor/include.h
+++ b/sources/shiboken6/ApiExtractor/include.h
@@ -71,6 +71,17 @@ struct IncludeGroup
{
QString title;
IncludeList includes;
+
+ void append(const Include &include)
+ {
+ IncludeGroup::appendInclude(include, &includes);
+ }
+
+ static void appendInclude(const Include &include, IncludeList *list)
+ {
+ if (include.isValid() && !list->contains(include))
+ list->append(include);
+ }
};
TextStream& operator<<(TextStream &out, const IncludeGroup& include);
diff --git a/sources/shiboken6/ApiExtractor/typesystem.cpp b/sources/shiboken6/ApiExtractor/typesystem.cpp
index 5e52cf0d8..0542a3117 100644
--- a/sources/shiboken6/ApiExtractor/typesystem.cpp
+++ b/sources/shiboken6/ApiExtractor/typesystem.cpp
@@ -12,6 +12,7 @@
#include "enumvaluetypeentry.h"
#include "flagstypeentry.h"
#include "functiontypeentry.h"
+#include "include.h"
#include "namespacetypeentry.h"
#include "objecttypeentry.h"
#include "primitivetypeentry.h"
@@ -1387,8 +1388,7 @@ const IncludeList &ComplexTypeEntry::argumentIncludes() const
void ComplexTypeEntry::addArgumentInclude(const Include &newInclude)
{
S_D(ComplexTypeEntry);
- if (!d->m_argumentIncludes.contains(newInclude))
- d->m_argumentIncludes.append(newInclude);
+ IncludeGroup::appendInclude(newInclude, &d->m_argumentIncludes);
}
AddedFunctionList ComplexTypeEntry::addedFunctions() const
diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.cpp b/sources/shiboken6/generator/shiboken/cppgenerator.cpp
index 68e7f0028..35fcb003f 100644
--- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp
+++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp
@@ -534,6 +534,8 @@ void CppGenerator::generateIncludes(TextStream &s, const GeneratorContext &class
if (normalClass && usePySideExtensions()) {
s << includeQDebug;
+ if (metaClass->hasToStringCapability())
+ s << "#include <QtCore/QBuffer>\n";
if (metaClass->isQObject()) {
s << "#include <pysideqobject.h>\n"
<< "#include <pysidesignal.h>\n"
@@ -542,6 +544,7 @@ void CppGenerator::generateIncludes(TextStream &s, const GeneratorContext &class
<< "#include <pysidemetafunction.h>\n";
}
s << "#include <pysideqenum.h>\n"
+ << "#include <pysideqflags.h>\n"
<< "#include <pysideqmetatype.h>\n"
<< "#include <pysideutils.h>\n"
<< "#include <feature_select.h>\n"
@@ -969,6 +972,8 @@ void CppGenerator::generateSmartPointerClass(TextStream &s, const GeneratorConte
const bool isValueHandle = smartPointerType ==TypeSystem::SmartPointerType::ValueHandle;
IncludeGroup includes{u"Extra includes"_s, typeEntry->extraIncludes()};
+ if (hasPointeeClass)
+ includes.append(classContext.pointeeClass()->typeEntry()->include());
generateIncludes(s, classContext, {includes});
s << '\n' << typeNameFunc << '\n';
@@ -6636,6 +6641,26 @@ bool CppGenerator::finishGeneration()
writeInitFunc(s_classInitDecl, s_classPythonDefines,
getInitFunctionName(context),
smp.type.typeEntry()->targetLangEnclosingEntry());
+ includes << smp.type.instantiations().constFirst().typeEntry()->include();
+ }
+
+ for (auto &instantiatedContainer : api().instantiatedContainers()) {
+ for (const auto &inst : instantiatedContainer.instantiations())
+ includes << inst.typeEntry()->include();
+ }
+
+ const ExtendedConverterData extendedConverters = getExtendedConverters();
+ for (auto it = extendedConverters.cbegin(), end = extendedConverters.cend(); it != end; ++it) {
+ const TypeEntry *te = it.key();
+ includes << te->include();
+ for (const auto &metaClass : it.value())
+ includes << metaClass->typeEntry()->include();
+ }
+
+ const QList<CustomConversionPtr> &typeConversions = getPrimitiveCustomConversions();
+ for (const auto &c : typeConversions) {
+ if (auto *te = c->ownerType())
+ includes << te->include();
}
QString moduleFileName(outputDirectory() + u'/' + subDirectoryForPackage(packageName()));
@@ -6673,8 +6698,12 @@ bool CppGenerator::finishGeneration()
// Global enums
AbstractMetaEnumList globalEnums = api().globalEnums();
- for (const AbstractMetaClass *nsp : invisibleTopNamespaces())
+ for (const AbstractMetaClass *nsp : invisibleTopNamespaces()) {
+ const auto oldSize = globalEnums.size();
nsp->getEnumsToBeGenerated(&globalEnums);
+ if (globalEnums.size() > oldSize)
+ s << nsp->typeEntry()->include();
+ }
TypeDatabase *typeDb = TypeDatabase::instance();
const TypeSystemTypeEntry *moduleEntry = typeDb->defaultTypeSystemType();
@@ -6758,7 +6787,6 @@ bool CppGenerator::finishGeneration()
s << "\n// Module initialization "
<< "------------------------------------------------------------\n";
- ExtendedConverterData extendedConverters = getExtendedConverters();
if (!extendedConverters.isEmpty()) {
s << '\n' << "// Extended Converters.\n\n";
for (ExtendedConverterData::const_iterator it = extendedConverters.cbegin(), end = extendedConverters.cend(); it != end; ++it) {
@@ -6773,7 +6801,6 @@ bool CppGenerator::finishGeneration()
}
}
- const QList<CustomConversionPtr> &typeConversions = getPrimitiveCustomConversions();
if (!typeConversions.isEmpty()) {
s << "\n// Primitive Type converters.\n\n";
for (const auto &conversion : typeConversions) {
diff --git a/sources/shiboken6/generator/shiboken/headergenerator.cpp b/sources/shiboken6/generator/shiboken/headergenerator.cpp
index a0a5c5696..3b52132b0 100644
--- a/sources/shiboken6/generator/shiboken/headergenerator.cpp
+++ b/sources/shiboken6/generator/shiboken/headergenerator.cpp
@@ -109,6 +109,9 @@ void HeaderGenerator::generateClass(TextStream &s, const GeneratorContext &class
//Includes
auto typeEntry = metaClass->typeEntry();
s << typeEntry->include() << '\n';
+ for (auto &inst : metaClass->templateBaseClassInstantiations())
+ s << inst.typeEntry()->include();
+
if (classContext.useWrapper() && !typeEntry->extraIncludes().isEmpty()) {
s << "\n// Extra includes\n";
for (const Include &inc : typeEntry->extraIncludes())