summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2010-06-23 14:38:41 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2010-06-23 14:39:14 +0200
commitda817310c2c07a107d21e743370a09d4adfc4852 (patch)
treeac7efd8d5e9bebf5dd3dbf9a4b3e385a6bc44376 /src/shared/cplusplus/Parser.cpp
parented2862acce3f22bd1d7c83203eb445696426d438 (diff)
downloadqt-creator-da817310c2c07a107d21e743370a09d4adfc4852.tar.gz
Get rid of PostfixExpressionAST and store the base expression together with the PostfixAST nodes.
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r--src/shared/cplusplus/Parser.cpp24
1 files changed, 8 insertions, 16 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 13bc9ab63f..47128a4d06 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -4325,28 +4325,26 @@ bool Parser::parsePostfixExpression(ExpressionAST *&node)
{
DEBUG_THIS_RULE();
if (parseCorePostfixExpression(node)) {
- PostfixListAST *postfix_expressions = 0,
- **postfix_ptr = &postfix_expressions;
while (LA()) {
if (LA() == T_LPAREN) {
CallAST *ast = new (_pool) CallAST;
ast->lparen_token = consumeToken();
parseExpressionList(ast->expression_list);
match(T_RPAREN, &ast->rparen_token);
- *postfix_ptr = new (_pool) PostfixListAST(ast);
- postfix_ptr = &(*postfix_ptr)->next;
+ ast->base_expression = node;
+ node = ast;
} else if (LA() == T_LBRACKET) {
ArrayAccessAST *ast = new (_pool) ArrayAccessAST;
ast->lbracket_token = consumeToken();
parseExpression(ast->expression);
match(T_RBRACKET, &ast->rbracket_token);
- *postfix_ptr = new (_pool) PostfixListAST(ast);
- postfix_ptr = &(*postfix_ptr)->next;
+ ast->base_expression = node;
+ node = ast;
} else if (LA() == T_PLUS_PLUS || LA() == T_MINUS_MINUS) {
PostIncrDecrAST *ast = new (_pool) PostIncrDecrAST;
ast->incr_decr_token = consumeToken();
- *postfix_ptr = new (_pool) PostfixListAST(ast);
- postfix_ptr = &(*postfix_ptr)->next;
+ ast->base_expression = node;
+ node = ast;
} else if (LA() == T_DOT || LA() == T_ARROW) {
MemberAccessAST *ast = new (_pool) MemberAccessAST;
ast->access_token = consumeToken();
@@ -4355,17 +4353,11 @@ bool Parser::parsePostfixExpression(ExpressionAST *&node)
if (! parseNameId(ast->member_name))
_translationUnit->error(cursor(), "expected unqualified-id before token `%s'",
tok().spell());
- *postfix_ptr = new (_pool) PostfixListAST(ast);
- postfix_ptr = &(*postfix_ptr)->next;
+ ast->base_expression = node;
+ node = ast;
} else break;
} // while
- if (postfix_expressions) {
- PostfixExpressionAST *ast = new (_pool) PostfixExpressionAST;
- ast->base_expression = node;
- ast->postfix_expression_list = postfix_expressions;
- node = ast;
- }
return true;
}
return false;