summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2010-02-09 17:01:05 +0100
committerErik Verbruggen <erik.verbruggen@nokia.com>2010-02-10 11:07:18 +0100
commitb1af22b3ab5e40e47ccf51aef67a508bff7592b2 (patch)
tree8f950c4ed93d51153d351080a415e80af9b2a82d /src/shared/cplusplus/Parser.cpp
parent28d72550d3550df1484b580c27f6ac3e776d1062 (diff)
downloadqt-creator-b1af22b3ab5e40e47ccf51aef67a508bff7592b2.tar.gz
Fixed error recovery when failing to parse Q_PROPERTY.
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r--src/shared/cplusplus/Parser.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index a9fd9f0d50..7bc832ffa6 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();
}
}
}