summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2010-05-21 15:41:24 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2010-05-25 17:15:21 +0200
commita4245c174ac126a00aa5dbd0924a845364020d02 (patch)
treee23a61fb6b5f31f3ace9cb912669c955d1fc7e6b /src/shared/cplusplus/Parser.cpp
parentc5d110d6a314621604abac532427d11888c00a6b (diff)
downloadqt-creator-a4245c174ac126a00aa5dbd0924a845364020d02.tar.gz
Improved recovering from errors inside template declarations.
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r--src/shared/cplusplus/Parser.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index b4f46ac552..0b7ad74214 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -986,7 +986,18 @@ bool Parser::parseTemplateDeclaration(DeclarationAST *&node)
match(T_GREATER, &ast->greater_token);
}
- parseDeclaration(ast->declaration);
+ do {
+ unsigned start_declaration = cursor();
+
+ ast->declaration = 0;
+ if (parseDeclaration(ast->declaration))
+ break;
+
+ _translationUnit->error(start_declaration, "expected a declaration");
+ rewind(start_declaration + 1);
+ skipUntilDeclaration();
+ } while (LA());
+
node = ast;
return true;
}