Fix parsing of C++11 final classes

Closes #3577559.
This commit is contained in:
Colomban Wendling 2012-10-19 21:39:38 +02:00
parent b626cc93e3
commit f04df056cd

View File

@ -423,7 +423,7 @@ static const keywordDesc KeywordTable [] = {
{ "extends", KEYWORD_EXTENDS, { 0, 0, 0, 1, 1, 0, 0 } },
{ "extern", KEYWORD_EXTERN, { 1, 1, 1, 0, 1, 1, 0 } },
{ "extern", KEYWORD_NAMESPACE, { 0, 0, 0, 0, 0, 0, 1 } }, /* parse block */
{ "final", KEYWORD_FINAL, { 0, 0, 0, 1, 0, 0, 1 } },
{ "final", KEYWORD_FINAL, { 0, 1, 0, 1, 0, 0, 1 } },
{ "finally", KEYWORD_FINALLY, { 0, 0, 0, 0, 0, 1, 1 } },
{ "float", KEYWORD_FLOAT, { 1, 1, 1, 1, 0, 1, 1 } },
{ "for", KEYWORD_FOR, { 1, 1, 1, 1, 0, 1, 1 } },
@ -2955,6 +2955,13 @@ static void tagCheck (statementInfo *const st)
}
}
}
/* C++ 11 allows class <name> final { ... } */
else if (isLanguage (Lang_cpp) && isType (prev, TOKEN_KEYWORD) &&
prev->keyword == KEYWORD_FINAL && isType(prev2, TOKEN_NAME))
{
name_token = (tokenInfo *)prev2;
copyToken (st->blockName, name_token);
}
else if (isLanguage (Lang_csharp))
makeTag (prev, st, FALSE, TAG_PROPERTY);
else