aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/generator/shiboken/shibokengenerator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken6/generator/shiboken/shibokengenerator.cpp')
-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);
}