aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-10-19 09:30:51 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-10-20 13:02:53 +0000
commitd2f821b8de84cf2f96daabac48bb1e19986180a0 (patch)
treeee6c86c1f818d2bc708bfd45a82904ef4cc52e3f
parentbebfd7b8f73c60f96ca8111d5d9d986430c530dc (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.cpp16
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);
}