From b1af22b3ab5e40e47ccf51aef67a508bff7592b2 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen <erik.verbruggen@nokia.com> Date: Tue, 9 Feb 2010 17:01:05 +0100 Subject: [PATCH] Fixed error recovery when failing to parse Q_PROPERTY. --- src/shared/cplusplus/Parser.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index a9fd9f0d507..7bc832ffa6a 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -1822,11 +1822,12 @@ bool Parser::parseQtPropertyDeclaration(DeclarationAST *&node) QtPropertyDeclarationBoolItemAST *bItem = new (_pool) QtPropertyDeclarationBoolItemAST; bItem->item_name_token = consumeToken(); ExpressionAST *expr = 0; - if (parseBoolLiteral(expr)) + if (parseBoolLiteral(expr)) { bItem->bool_value = expr->asBoolLiteral(); - else + item = bItem; + } else { _translationUnit->error(cursor(), "expected `true' or `false' before `%s'", tok().spell()); - item = bItem; + } break; } @@ -1840,16 +1841,20 @@ bool Parser::parseQtPropertyDeclaration(DeclarationAST *&node) default: _translationUnit->error(cursor(), "expected `)' before `%s'", tok().spell()); - return true; + // skip the token + consumeToken(); } if (item) { *iter = new (_pool) QtPropertyDeclarationItemListAST; (*iter)->value = item; iter = &(*iter)->next; } + } else if (!LA()) { + break; } else { _translationUnit->error(cursor(), "expected `)' before `%s'", tok().spell()); - break; + // skip the token + consumeToken(); } } } -- GitLab