diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2010-05-21 15:41:24 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2010-05-25 17:15:21 +0200 |
commit | a4245c174ac126a00aa5dbd0924a845364020d02 (patch) | |
tree | e23a61fb6b5f31f3ace9cb912669c955d1fc7e6b /src/shared/cplusplus/Parser.cpp | |
parent | c5d110d6a314621604abac532427d11888c00a6b (diff) | |
download | qt-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.cpp | 13 |
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; } |