From 0cad4ccc6a3dbeb4eae135eebdb7eaf14b745742 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 19 Oct 2021 09:30:51 +0200 Subject: 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 --- .../shiboken6/generator/shiboken/shibokengenerator.cpp | 16 ++++++++++++++-- 1 file 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); } -- cgit v1.2.3