push the call in isCXXDeclarationSpecifier to TryAnnotateTypeOrScopeToken

down into the two cases that it can possibly affect.  This avoids calls
to it that obviously can't do anything.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61651 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-01-04 23:33:56 +00:00
Родитель a7bc7c880f
Коммит e584926b86
1 изменённых файлов: 20 добавлений и 3 удалений

Просмотреть файл

@ -558,10 +558,27 @@ Parser::TPResult Parser::TryParseDeclarator(bool mayBeAbstract,
/// [GNU] restrict
///
Parser::TPResult Parser::isCXXDeclarationSpecifier() {
// Annotate typenames and C++ scope specifiers.
TryAnnotateTypeOrScopeToken();
switch (Tok.getKind()) {
case tok::identifier: // foo::bar
// Annotate typenames and C++ scope specifiers. If we get one, just
// recurse to handle whatever we get.
if (TryAnnotateTypeOrScopeToken())
return isCXXDeclarationSpecifier();
// Otherwise, not a typename.
return TPResult::False();
case tok::coloncolon: // ::foo::bar
if (NextToken().is(tok::kw_new) || // ::new
NextToken().is(tok::kw_delete)) // ::delete
return TPResult::False();
// Annotate typenames and C++ scope specifiers. If we get one, just
// recurse to handle whatever we get.
if (TryAnnotateTypeOrScopeToken())
return isCXXDeclarationSpecifier();
// Otherwise, not a typename.
return TPResult::False();
// decl-specifier:
// storage-class-specifier
// type-specifier