diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-07-01 10:56:17 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-07-03 13:32:14 +0200 |
commit | f0f589285f98197b4c46ad8aa028e6da3e4bfed9 (patch) | |
tree | d503e2d81d7bdc6817e8f61465808330da378484 | |
parent | 016d3160a7302b1954f9842b518d825bf71312fb (diff) |
shiboken6: Simplify smart pointer types when searching instantiations
When the code model first sees a "foo(const SmartPtr &)" instead
of "foo(SmartPtr)", compilation would break since const, & propagate
into the generated type name. Simplify types as is done for containers
as well.
Task-number: PYSIDE-454
Change-Id: I1d9f75aceb983f8e9c4a28314db94b8d83b1c1ca
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
(cherry picked from commit 6d81913ed1189a5c7b1e26d2456f05e8e8684914)
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Christian Tismer <tismer@stackless.com>
-rw-r--r-- | sources/shiboken6/ApiExtractor/apiextractor.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/sources/shiboken6/ApiExtractor/apiextractor.cpp b/sources/shiboken6/ApiExtractor/apiextractor.cpp index 4a06c1320..d45f2c543 100644 --- a/sources/shiboken6/ApiExtractor/apiextractor.cpp +++ b/sources/shiboken6/ApiExtractor/apiextractor.cpp @@ -422,6 +422,15 @@ static inline const TypeEntry *pointeeTypeEntry(const AbstractMetaType &smartPtr return smartPtrType.instantiations().constFirst().typeEntry(); } +static AbstractMetaType simplifiedType(AbstractMetaType type) +{ + type.setIndirections(0); + type.setConstant(false); + type.setReferenceType(NoReference); + type.decideUsagePattern(); + return type; +} + void ApiExtractorPrivate::addInstantiatedContainersAndSmartPointers(InstantiationCollectContext &context, const AbstractMetaType &type, @@ -451,12 +460,7 @@ ApiExtractorPrivate::addInstantiatedContainersAndSmartPointers(InstantiationColl const QString typeName = getSimplifiedContainerTypeName(type); if (!context.instantiatedContainersNames.contains(typeName)) { context.instantiatedContainersNames.append(typeName); - auto simplifiedType = type; - simplifiedType.setIndirections(0); - simplifiedType.setConstant(false); - simplifiedType.setReferenceType(NoReference); - simplifiedType.decideUsagePattern(); - context.instantiatedContainers.append(simplifiedType); + context.instantiatedContainers.append(simplifiedType(type)); } return; } @@ -479,7 +483,7 @@ void ApiExtractorPrivate::addInstantiatedSmartPointer(InstantiationCollectContex const AbstractMetaType &type) { InstantiatedSmartPointer smp; - smp.type = type; + smp.type = simplifiedType(type); smp.smartPointer = AbstractMetaClass::findClass(m_builder->smartPointers(), type.typeEntry()); Q_ASSERT(smp.smartPointer); |