aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-10-19 09:30:51 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-10-20 12:11:48 +0200
commit0cad4ccc6a3dbeb4eae135eebdb7eaf14b745742 (patch)
treefb6cb2c9edae72e8bce69aa150907f57f322a123
parenteec7ff0c4096379a92975e9a7ca0aa35672aff1e (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 Pick-to: 6.2 Change-Id: I403653b7655d7cccacb5737faf074cab55f30397 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
-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 92a3d07fe..5063faa88 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);
}