diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2010-06-23 14:38:41 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2010-06-23 14:39:14 +0200 |
commit | da817310c2c07a107d21e743370a09d4adfc4852 (patch) | |
tree | ac7efd8d5e9bebf5dd3dbf9a4b3e385a6bc44376 /src/shared/cplusplus/Parser.cpp | |
parent | ed2862acce3f22bd1d7c83203eb445696426d438 (diff) | |
download | qt-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.cpp | 24 |
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; |