diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/cplusplus/ResolveExpression.cpp | 4 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppeditor.cpp | 7 | ||||
-rw-r--r-- | src/shared/cplusplus/AST.cpp | 6 | ||||
-rw-r--r-- | src/shared/cplusplus/AST.h | 10 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTVisit.cpp | 3 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTfwd.h | 1 | ||||
-rw-r--r-- | src/shared/cplusplus/CheckExpression.cpp | 4 | ||||
-rw-r--r-- | src/shared/cplusplus/Parser.cpp | 10 |
8 files changed, 22 insertions, 23 deletions
diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index 5999c9531d..277f31b258 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -208,8 +208,8 @@ bool ResolveExpression::visit(PostfixExpressionAST *ast) { accept(ast->base_expression); - for (PostfixAST *fx = ast->postfix_expressions; fx; fx = fx->next) { - accept(fx); + for (PostfixListAST *it = ast->postfix_expressions; it; it = it->next) { + accept(it->value); } return false; diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 5925a50f51..ec03623093 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -318,10 +318,11 @@ protected: virtual bool visit(PostfixExpressionAST *ast) { accept(ast->base_expression); - for (PostfixAST *it = ast->postfix_expressions; it; it = it->next) { - if (it->asMemberAccess() != 0) + for (PostfixListAST *it = ast->postfix_expressions; it; it = it->next) { + PostfixAST *fx = it->value; + if (fx->asMemberAccess() != 0) continue; // skip members - accept(it); + accept(fx); } return false; } diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp index 987c6a1664..035f5dae37 100644 --- a/src/shared/cplusplus/AST.cpp +++ b/src/shared/cplusplus/AST.cpp @@ -1331,10 +1331,8 @@ unsigned PostfixExpressionAST::firstToken() const unsigned PostfixExpressionAST::lastToken() const { - for (PostfixAST *it = postfix_expressions; it; it = it->next) { - if (! it->next) - return it->lastToken(); - } + if (postfix_expressions) + return postfix_expressions->lastToken(); return base_expression->lastToken(); } diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h index 310b3d39e2..bd5b91f4ad 100644 --- a/src/shared/cplusplus/AST.h +++ b/src/shared/cplusplus/AST.h @@ -66,6 +66,10 @@ public: : value(_Tp()), next(0) { } + List(const _Tp &value) + : value(value), next(0) + { } + unsigned firstToken() const { if (value) @@ -1460,11 +1464,7 @@ protected: class CPLUSPLUS_EXPORT PostfixAST: public AST { public: - PostfixAST *next; - -public: virtual PostfixAST *asPostfix() { return this; } - }; class CPLUSPLUS_EXPORT CallAST: public PostfixAST @@ -1592,7 +1592,7 @@ class CPLUSPLUS_EXPORT PostfixExpressionAST: public ExpressionAST { public: ExpressionAST *base_expression; - PostfixAST *postfix_expressions; + PostfixListAST *postfix_expressions; public: virtual PostfixExpressionAST *asPostfixExpression() { return this; } diff --git a/src/shared/cplusplus/ASTVisit.cpp b/src/shared/cplusplus/ASTVisit.cpp index c9e86fb07f..5345471140 100644 --- a/src/shared/cplusplus/ASTVisit.cpp +++ b/src/shared/cplusplus/ASTVisit.cpp @@ -662,8 +662,7 @@ void PostfixExpressionAST::accept0(ASTVisitor *visitor) { if (visitor->visit(this)) { accept(base_expression, visitor); - for (PostfixAST *it = postfix_expressions; it; it = it->next) - accept(it, visitor); + accept(postfix_expressions, visitor); } visitor->endVisit(this); } diff --git a/src/shared/cplusplus/ASTfwd.h b/src/shared/cplusplus/ASTfwd.h index 1eae7c3fff..9bbf9681f0 100644 --- a/src/shared/cplusplus/ASTfwd.h +++ b/src/shared/cplusplus/ASTfwd.h @@ -199,6 +199,7 @@ typedef List<BaseSpecifierAST *> BaseSpecifierListAST; typedef List<EnumeratorAST *> EnumeratorListAST; typedef List<MemInitializerAST *> MemInitializerListAST; typedef List<NewArrayDeclaratorAST *> NewArrayDeclaratorListAST; +typedef List<PostfixAST *> PostfixListAST; typedef List<NameAST *> ObjCIdentifierListAST; typedef List<ObjCMessageArgumentAST *> ObjCMessageArgumentListAST; diff --git a/src/shared/cplusplus/CheckExpression.cpp b/src/shared/cplusplus/CheckExpression.cpp index 763258dfda..25de7e62c6 100644 --- a/src/shared/cplusplus/CheckExpression.cpp +++ b/src/shared/cplusplus/CheckExpression.cpp @@ -251,8 +251,8 @@ bool CheckExpression::visit(TypeConstructorCallAST *ast) bool CheckExpression::visit(PostfixExpressionAST *ast) { FullySpecifiedType exprTy = semantic()->check(ast->base_expression, _scope); - for (PostfixAST *fx = ast->postfix_expressions; fx; fx = fx->next) { - accept(fx); // ### not exactly. + for (PostfixListAST *it = ast->postfix_expressions; it; it = it->next) { + accept(it->value); // ### not exactly. } return false; } diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 9179f21db1..f951973616 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -3599,7 +3599,7 @@ bool Parser::parsePostfixExpression(ExpressionAST *&node) { DEBUG_THIS_RULE(); if (parseCorePostfixExpression(node)) { - PostfixAST *postfix_expressions = 0, + PostfixListAST *postfix_expressions = 0, **postfix_ptr = &postfix_expressions; while (LA()) { if (LA() == T_LPAREN) { @@ -3607,19 +3607,19 @@ bool Parser::parsePostfixExpression(ExpressionAST *&node) ast->lparen_token = consumeToken(); parseExpressionList(ast->expression_list); match(T_RPAREN, &ast->rparen_token); - *postfix_ptr = ast; + *postfix_ptr = new (_pool) PostfixListAST(ast); postfix_ptr = &(*postfix_ptr)->next; } 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 = ast; + *postfix_ptr = new (_pool) PostfixListAST(ast); postfix_ptr = &(*postfix_ptr)->next; } else if (LA() == T_PLUS_PLUS || LA() == T_MINUS_MINUS) { PostIncrDecrAST *ast = new (_pool) PostIncrDecrAST; ast->incr_decr_token = consumeToken(); - *postfix_ptr = ast; + *postfix_ptr = new (_pool) PostfixListAST(ast); postfix_ptr = &(*postfix_ptr)->next; } else if (LA() == T_DOT || LA() == T_ARROW) { MemberAccessAST *ast = new (_pool) MemberAccessAST; @@ -3629,7 +3629,7 @@ bool Parser::parsePostfixExpression(ExpressionAST *&node) if (! parseNameId(ast->member_name)) _translationUnit->error(cursor(), "expected unqualified-id before token `%s'", tok().spell()); - *postfix_ptr = ast; + *postfix_ptr = new (_pool) PostfixListAST(ast); postfix_ptr = &(*postfix_ptr)->next; } else break; } // while |