Remember the T_TEMPLATE token we use to force the parser to recognize a template-id.

This commit is contained in:
Roberto Raggi
2010-08-12 12:18:49 +02:00
parent 7f04af17a1
commit efb600665d
8 changed files with 43 additions and 27 deletions

View File

@@ -419,14 +419,14 @@ bool Parser::parseClassOrNamespaceName(NameAST *&node)
}
} else if (LA() == T_TEMPLATE) {
unsigned template_token = consumeToken();
if (parseTemplateId(node))
if (parseTemplateId(node, template_token))
return true;
rewind(template_token);
}
return false;
}
bool Parser::parseTemplateId(NameAST *&node)
bool Parser::parseTemplateId(NameAST *&node, unsigned template_token)
{
DEBUG_THIS_RULE();
@@ -434,6 +434,7 @@ bool Parser::parseTemplateId(NameAST *&node)
if (LA() == T_IDENTIFIER && LA(2) == T_LESS) {
TemplateIdAST *ast = new (_pool) TemplateIdAST;
ast->template_token = template_token;
ast->identifier_token = consumeToken();
ast->less_token = consumeToken();
if (LA() == T_GREATER || parseTemplateArgumentList(
@@ -2642,7 +2643,7 @@ bool Parser::parseUnqualifiedName(NameAST *&node, bool acceptTemplateId)
return true;
} else if (LA() == T_TEMPLATE) {
unsigned template_token = consumeToken();
if (parseTemplateId(node))
if (parseTemplateId(node, template_token))
return true;
rewind(template_token);
}