aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/generator
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-10-21 19:13:32 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-10-21 19:13:32 +0200
commit55fd16d92a36558335e7d7cd7cdb57ead43d55db (patch)
tree2573c4fabdb80535972a3c91a262f2e3fa80cf80 /sources/shiboken2/generator
parente8d90a9e62898d3b746772d9ae8542b87efcecf8 (diff)
parent85bb24c39df53ea61f59351a60f4284c32cb50ff (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Diffstat (limited to 'sources/shiboken2/generator')
-rw-r--r--sources/shiboken2/generator/shiboken2/cppgenerator.cpp41
1 files changed, 30 insertions, 11 deletions
diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
index 434b03dc7..11a6c193e 100644
--- a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
+++ b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
@@ -1622,20 +1622,39 @@ void CppGenerator::writeConverterRegister(QTextStream &s, const AbstractMetaClas
s << Qt::endl;
- QStringList cppSignature;
- if (!classContext.forSmartPointer()) {
- cppSignature = metaClass->qualifiedCppName().split(QLatin1String("::"),
- Qt::SkipEmptyParts);
- } else {
- cppSignature = classContext.preciseType()->cppSignature().split(QLatin1String("::"),
- Qt::SkipEmptyParts);
- }
- while (!cppSignature.isEmpty()) {
- QString signature = cppSignature.join(QLatin1String("::"));
+ auto writeConversions = [&s, this](const QString &signature)
+ {
s << INDENT << "Shiboken::Conversions::registerConverterName(converter, \"" << signature << "\");\n";
s << INDENT << "Shiboken::Conversions::registerConverterName(converter, \"" << signature << "*\");\n";
s << INDENT << "Shiboken::Conversions::registerConverterName(converter, \"" << signature << "&\");\n";
- cppSignature.removeFirst();
+ };
+
+ auto writeConversionsForType = [writeConversions](const QString &fullTypeName)
+ {
+ QStringList lst = fullTypeName.split(QLatin1String("::"),
+ Qt::SkipEmptyParts);
+ while (!lst.isEmpty()) {
+ QString signature = lst.join(QLatin1String("::"));
+ writeConversions(signature);
+ lst.removeFirst();
+ }
+ };
+
+ if (!classContext.forSmartPointer()) {
+ writeConversionsForType(metaClass->qualifiedCppName());
+ } else {
+ const QString &smartPointerType = classContext.preciseType()->instantiations().at(0)->cppSignature();
+ const QString &smartPointerName = classContext.preciseType()->typeEntry()->name();
+
+ QStringList lst = smartPointerType.split(QLatin1String("::"),
+ Qt::SkipEmptyParts);
+ while (!lst.isEmpty()) {
+ QString signature = lst.join(QLatin1String("::"));
+ writeConversions(QStringLiteral("%1<%2>").arg(smartPointerName, signature));
+ lst.removeFirst();
+ }
+
+ writeConversionsForType(smartPointerType);
}
s << INDENT << "Shiboken::Conversions::registerConverterName(converter, typeid(::";