summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r--src/shared/cplusplus/Parser.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 325135838e..6bde85f2e3 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -986,7 +986,7 @@ bool Parser::parseTemplateDeclaration(DeclarationAST *&node)
match(T_GREATER, &ast->greater_token);
}
- do {
+ while (LA()) {
unsigned start_declaration = cursor();
ast->declaration = 0;
@@ -996,7 +996,7 @@ bool Parser::parseTemplateDeclaration(DeclarationAST *&node)
_translationUnit->error(start_declaration, "expected a declaration");
rewind(start_declaration + 1);
skipUntilDeclaration();
- } while (LA());
+ }
node = ast;
return true;
@@ -5825,3 +5825,11 @@ bool Parser::parseTrailingTypeSpecifierSeq(SpecifierListAST *&node)
DEBUG_THIS_RULE();
return parseSimpleTypeSpecifier(node);
}
+
+void Parser::rewind(unsigned cursor)
+{
+ if (cursor < _translationUnit->tokenCount())
+ _tokenIndex = cursor;
+ else
+ _tokenIndex = _translationUnit->tokenCount() - 1;
+}