diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-10-19 09:30:51 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-10-20 13:02:53 +0000 |
commit | d2f821b8de84cf2f96daabac48bb1e19986180a0 (patch) | |
tree | ee6c86c1f818d2bc708bfd45a82904ef4cc52e3f | |
parent | bebfd7b8f73c60f96ca8111d5d9d986430c530dc (diff) |
shiboken6: Handle enum default values that are casts from int
The helper resolveScopePrefix() would expand Enum(-1) to
Enum::Enum(-1), assuming it is an enumeration value. Add a check to
prevent that for casts.
Task-number: PYSIDE-1691
Change-Id: I403653b7655d7cccacb5737faf074cab55f30397
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
(cherry picked from commit 0cad4ccc6a3dbeb4eae135eebdb7eaf14b745742)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | sources/shiboken6/generator/shiboken/shibokengenerator.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/sources/shiboken6/generator/shiboken/shibokengenerator.cpp b/sources/shiboken6/generator/shiboken/shibokengenerator.cpp index f3e7c1f6d..fa3d55a28 100644 --- a/sources/shiboken6/generator/shiboken/shibokengenerator.cpp +++ b/sources/shiboken6/generator/shiboken/shibokengenerator.cpp @@ -107,14 +107,26 @@ static QString resolveScopePrefix(const AbstractMetaClass *scope, const QString : QString(); } +// Check whether the value is a cast from int for an enum "Enum(-1)" +static bool isEnumCastFromInt(const AbstractMetaEnum &metaEnum, + const QString &value) +{ + const auto parenPos = value.indexOf(u'('); + if (parenPos < 0) + return false; + const auto prefix = QStringView{value}.left(parenPos); + return prefix.endsWith(metaEnum.name()); +} + static QString resolveScopePrefix(const AbstractMetaEnum &metaEnum, const QString &value) { QStringList parts; if (const AbstractMetaClass *scope = metaEnum.enclosingClass()) parts.append(splitClassScope(scope)); - // Fully qualify the value which is required for C++ 11 enum classes. - if (!metaEnum.isAnonymous()) + // Fully qualify the value which is required for C++ 11 enum classes + // unless it is a cast from int "Enum(-)" which already has the type name. + if (!metaEnum.isAnonymous() && !isEnumCastFromInt(metaEnum, value)) parts.append(metaEnum.name()); return resolveScopePrefix(parts, value); } |