@@ -1725,6 +1725,12 @@ static void processInterface (statementInfo *const st)
17251725 st -> declaration = DECL_INTERFACE ;
17261726}
17271727
1728+ static void checkIsClassEnum (statementInfo * const st , const declType decl )
1729+ {
1730+ if (! isLanguage (Lang_cpp ) || st -> declaration != DECL_ENUM )
1731+ st -> declaration = decl ;
1732+ }
1733+
17281734static void processToken (tokenInfo * const token , statementInfo * const st )
17291735{
17301736 switch (token -> keyword ) /* is it a reserved word? */
@@ -1740,7 +1746,7 @@ static void processToken (tokenInfo *const token, statementInfo *const st)
17401746 case KEYWORD_BIT : st -> declaration = DECL_BASE ; break ;
17411747 case KEYWORD_CATCH : skipParens (); skipBraces (); break ;
17421748 case KEYWORD_CHAR : st -> declaration = DECL_BASE ; break ;
1743- case KEYWORD_CLASS : st -> declaration = DECL_CLASS ; break ;
1749+ case KEYWORD_CLASS : checkIsClassEnum ( st , DECL_CLASS ); break ;
17441750 case KEYWORD_CONST : st -> declaration = DECL_BASE ; break ;
17451751 case KEYWORD_DOUBLE : st -> declaration = DECL_BASE ; break ;
17461752 case KEYWORD_ENUM : st -> declaration = DECL_ENUM ; break ;
@@ -1768,7 +1774,7 @@ static void processToken (tokenInfo *const token, statementInfo *const st)
17681774 case KEYWORD_SIGNED : st -> declaration = DECL_BASE ; break ;
17691775 case KEYWORD_STATIC_ASSERT : skipParens (); break ;
17701776 case KEYWORD_STRING : st -> declaration = DECL_BASE ; break ;
1771- case KEYWORD_STRUCT : st -> declaration = DECL_STRUCT ; break ;
1777+ case KEYWORD_STRUCT : checkIsClassEnum ( st , DECL_STRUCT ); break ;
17721778 case KEYWORD_TASK : st -> declaration = DECL_TASK ; break ;
17731779 case KEYWORD_THROWS : discardTypeList (token ); break ;
17741780 case KEYWORD_UNION : st -> declaration = DECL_UNION ; break ;
0 commit comments