diff options
author | Renato Araujo Oliveira Filho <renato.araujo@kdab.com> | 2020-09-23 12:17:55 -0300 |
---|---|---|
committer | Renato Araujo Oliveira Filho <renato.araujo@kdab.com> | 2020-10-21 09:21:26 -0300 |
commit | 465587ffbac4c7f7b8b6a2219661e42939cb15f3 (patch) | |
tree | f9ee83573f9ba25a5f4d2c7ed5330d04471613e3 /sources/shiboken2/generator | |
parent | 40746be63f6f8102a54584e8c2ff919bd2ab830c (diff) |
Fix SmartPointer conversion name register
Register the correct name for smart pointers.
Change-Id: If12701901319b0578602ff5b5ab8eecad820d969
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'sources/shiboken2/generator')
-rw-r--r-- | sources/shiboken2/generator/shiboken2/cppgenerator.cpp | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp index 906e82c93..fe98146e3 100644 --- a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp +++ b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp @@ -1626,20 +1626,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(::"; |