@@ -7550,10 +7550,13 @@ static const Token* parsedecl(const Token* type,
75507550 else if (valuetype->typeScope ->type == ScopeType::eEnum) {
75517551 const Token * enum_type = valuetype->typeScope ->enumType ;
75527552 if (enum_type) {
7553+ ValueType evt;
75537554 if (enum_type->isSigned ())
75547555 valuetype->sign = ValueType::Sign::SIGNED ;
75557556 else if (enum_type->isUnsigned ())
75567557 valuetype->sign = ValueType::Sign::UNSIGNED ;
7558+ else if (!enum_type->isStandardType () && parsedecl (enum_type, &evt, defaultSignedness, settings))
7559+ *valuetype = evt;
75577560 else
75587561 valuetype->sign = defaultSignedness; // TODO: this is implementation-dependent might be separate from char
75597562 const ValueType::Type t = ValueType::typeFromString (enum_type->str (), enum_type->isLong ());
@@ -7727,12 +7730,8 @@ static const Token* parsedecl(const Token* type,
77277730 } else if (!valuetype->typeScope && (type->str () == " struct" || type->str () == " enum" ) && valuetype->type != ValueType::Type::SMART_POINTER )
77287731 valuetype->type = type->str () == " struct" ? ValueType::Type::RECORD : ValueType::Type::NONSTD ;
77297732 else if (!valuetype->typeScope && type->type () && type->type ()->classScope && valuetype->type != ValueType::Type::SMART_POINTER ) {
7730- if (type->type ()->classScope ->type == ScopeType::eEnum) {
7731- valuetype->sign = ValueType::Sign::SIGNED ;
7732- valuetype->type = getEnumType (type->type ()->classScope , settings.platform );
7733- } else {
7733+ if (type->type ()->classScope ->type != ScopeType::eEnum)
77347734 valuetype->type = ValueType::Type::RECORD ;
7735- }
77367735 valuetype->typeScope = type->type ()->classScope ;
77377736 } else if (type->isName () && valuetype->sign != ValueType::Sign::UNKNOWN_SIGN && valuetype->pointer == 0U )
77387737 return nullptr ;
0 commit comments