Fixed error recovery when failing to parse Q_PROPERTY.

This commit is contained in:
Erik Verbruggen
2010-02-09 17:01:05 +01:00
parent 28d72550d3
commit b1af22b3ab

View File

@@ -1822,11 +1822,12 @@ bool Parser::parseQtPropertyDeclaration(DeclarationAST *&node)
QtPropertyDeclarationBoolItemAST *bItem = new (_pool) QtPropertyDeclarationBoolItemAST; QtPropertyDeclarationBoolItemAST *bItem = new (_pool) QtPropertyDeclarationBoolItemAST;
bItem->item_name_token = consumeToken(); bItem->item_name_token = consumeToken();
ExpressionAST *expr = 0; ExpressionAST *expr = 0;
if (parseBoolLiteral(expr)) if (parseBoolLiteral(expr)) {
bItem->bool_value = expr->asBoolLiteral(); bItem->bool_value = expr->asBoolLiteral();
else item = bItem;
} else {
_translationUnit->error(cursor(), "expected `true' or `false' before `%s'", tok().spell()); _translationUnit->error(cursor(), "expected `true' or `false' before `%s'", tok().spell());
item = bItem; }
break; break;
} }
@@ -1840,16 +1841,20 @@ bool Parser::parseQtPropertyDeclaration(DeclarationAST *&node)
default: default:
_translationUnit->error(cursor(), "expected `)' before `%s'", tok().spell()); _translationUnit->error(cursor(), "expected `)' before `%s'", tok().spell());
return true; // skip the token
consumeToken();
} }
if (item) { if (item) {
*iter = new (_pool) QtPropertyDeclarationItemListAST; *iter = new (_pool) QtPropertyDeclarationItemListAST;
(*iter)->value = item; (*iter)->value = item;
iter = &(*iter)->next; iter = &(*iter)->next;
} }
} else if (!LA()) {
break;
} else { } else {
_translationUnit->error(cursor(), "expected `)' before `%s'", tok().spell()); _translationUnit->error(cursor(), "expected `)' before `%s'", tok().spell());
break; // skip the token
consumeToken();
} }
} }
} }