diff --git a/tagmanager/ctags/c.c b/tagmanager/ctags/c.c index f64a72400..62cdaa732 100644 --- a/tagmanager/ctags/c.c +++ b/tagmanager/ctags/c.c @@ -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 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