summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-12-07 14:33:13 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2009-12-07 14:51:29 +0100
commitfd4aee7ef67a187e4228155e1a6e4909d302b6f0 (patch)
tree042078521dbe5b95bd61e2734ba1e88e6928fc17 /src/shared/cplusplus/Parser.cpp
parent2be825784cf027eaa53881f285995b20a65f4106 (diff)
downloadqt-creator-fd4aee7ef67a187e4228155e1a6e4909d302b6f0.tar.gz
Added diagnostic messages for ctor-initializers.
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r--src/shared/cplusplus/Parser.cpp25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 04c19150f2..8bf2cb670a 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -1837,6 +1837,8 @@ bool Parser::parseMemInitializerList(MemInitializerListAST *&node)
if (parseMemInitializer(*initializer))
initializer = &(*initializer)->next;
+ else
+ _translationUnit->error(cursor(), "expected a member initializer");
}
return true;
}
@@ -1847,19 +1849,18 @@ bool Parser::parseMemInitializer(MemInitializerListAST *&node)
{
DEBUG_THIS_RULE();
NameAST *name = 0;
- if (parseName(name) && LA() == T_LPAREN) {
- MemInitializerAST *ast = new (_pool) MemInitializerAST;
- ast->name = name;
- ast->lparen_token = consumeToken();
- parseExpressionList(ast->expression_list);
- if (LA() == T_RPAREN)
- ast->rparen_token = consumeToken();
+ if (! parseName(name))
+ return false;
- node = new (_pool) MemInitializerListAST;
- node->value = ast;
- return true;
- }
- return false;
+ MemInitializerAST *ast = new (_pool) MemInitializerAST;
+ ast->name = name;
+ match(T_LPAREN, &ast->lparen_token);
+ parseExpressionList(ast->expression_list);
+ match(T_RPAREN, &ast->rparen_token);
+
+ node = new (_pool) MemInitializerListAST;
+ node->value = ast;
+ return true;
}
bool Parser::parseTypeIdList(ExpressionListAST *&node)