diff options
author | Alp Toker <alp@nuanti.com> | 2014-01-09 00:13:52 +0000 |
---|---|---|
committer | Alp Toker <alp@nuanti.com> | 2014-01-09 00:13:52 +0000 |
commit | bb4b86af83240da5ef5aedd850eb2ffea316da68 (patch) | |
tree | 1c4fee87cc4192f84ed0754d1378fb845ce792be /clang/lib/Parse/ParseDeclCXX.cpp | |
parent | 66865d6d94a898b7db611deb289787f86e007bb2 (diff) | |
download | bcm5719-llvm-bb4b86af83240da5ef5aedd850eb2ffea316da68.tar.gz bcm5719-llvm-bb4b86af83240da5ef5aedd850eb2ffea316da68.zip |
Implement isCXX11FinalKeyword() in terms of isCXX11VirtSpecifier()
It's not worth keeping two copies of the identifier init and comparison code
just to save a pointer coparison.
This should reduce further once we get proper contextual keywords in the token
stream, so having the identifier checks in one place is a step towards that.
Cleanup only.
llvm-svn: 198814
Diffstat (limited to 'clang/lib/Parse/ParseDeclCXX.cpp')
-rw-r--r-- | clang/lib/Parse/ParseDeclCXX.cpp | 53 |
1 files changed, 19 insertions, 34 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index 1fbc0adeb93..e64da87728f 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -1817,29 +1817,27 @@ void Parser::HandleMemberFunctionDeclDelays(Declarator& DeclaratorInfo, /// override /// final VirtSpecifiers::Specifier Parser::isCXX11VirtSpecifier(const Token &Tok) const { - if (!getLangOpts().CPlusPlus) + if (!getLangOpts().CPlusPlus || Tok.isNot(tok::identifier)) return VirtSpecifiers::VS_None; - if (Tok.is(tok::identifier)) { - IdentifierInfo *II = Tok.getIdentifierInfo(); + IdentifierInfo *II = Tok.getIdentifierInfo(); - // Initialize the contextual keywords. - if (!Ident_final) { - Ident_final = &PP.getIdentifierTable().get("final"); - if (getLangOpts().MicrosoftExt) - Ident_sealed = &PP.getIdentifierTable().get("sealed"); - Ident_override = &PP.getIdentifierTable().get("override"); - } + // Initialize the contextual keywords. + if (!Ident_final) { + Ident_final = &PP.getIdentifierTable().get("final"); + if (getLangOpts().MicrosoftExt) + Ident_sealed = &PP.getIdentifierTable().get("sealed"); + Ident_override = &PP.getIdentifierTable().get("override"); + } - if (II == Ident_override) - return VirtSpecifiers::VS_Override; + if (II == Ident_override) + return VirtSpecifiers::VS_Override; - if (II == Ident_sealed) - return VirtSpecifiers::VS_Sealed; + if (II == Ident_sealed) + return VirtSpecifiers::VS_Sealed; - if (II == Ident_final) - return VirtSpecifiers::VS_Final; - } + if (II == Ident_final) + return VirtSpecifiers::VS_Final; return VirtSpecifiers::VS_None; } @@ -1882,24 +1880,11 @@ void Parser::ParseOptionalCXX11VirtSpecifierSeq(VirtSpecifiers &VS, } /// isCXX11FinalKeyword - Determine whether the next token is a C++11 -/// contextual 'final' keyword. +/// 'final' or Microsoft 'sealed' contextual keyword. bool Parser::isCXX11FinalKeyword() const { - if (!getLangOpts().CPlusPlus) - return false; - - if (!Tok.is(tok::identifier)) - return false; - - // Initialize the contextual keywords. - if (!Ident_final) { - Ident_final = &PP.getIdentifierTable().get("final"); - if (getLangOpts().MicrosoftExt) - Ident_sealed = &PP.getIdentifierTable().get("sealed"); - Ident_override = &PP.getIdentifierTable().get("override"); - } - - return Tok.getIdentifierInfo() == Ident_final || - Tok.getIdentifierInfo() == Ident_sealed; + VirtSpecifiers::Specifier Specifier = isCXX11VirtSpecifier(); + return Specifier == VirtSpecifiers::VS_Final || + Specifier == VirtSpecifiers::VS_Sealed; } /// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration. |