diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-11-10 15:15:51 +0100 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-11-10 16:20:12 +0100 |
commit | 30c67f43dfffc146d67563912dab1e2e586057a8 (patch) | |
tree | 422ac8ba55ff12e5e60f3c464524ea252a60b8bd /src/shared/cplusplus | |
parent | 380bce45276e2bff94dcd4453e5d65ffa53bd385 (diff) | |
download | qt-creator-30c67f43dfffc146d67563912dab1e2e586057a8.tar.gz |
Cleanup Catch clause
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r-- | src/shared/cplusplus/AST.cpp | 8 | ||||
-rw-r--r-- | src/shared/cplusplus/AST.h | 3 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTVisit.cpp | 3 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTfwd.h | 1 | ||||
-rw-r--r-- | src/shared/cplusplus/CheckStatement.cpp | 4 | ||||
-rw-r--r-- | src/shared/cplusplus/Parser.cpp | 6 | ||||
-rw-r--r-- | src/shared/cplusplus/Parser.h | 2 |
7 files changed, 12 insertions, 15 deletions
diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp index 4286cc8dff..03531c481a 100644 --- a/src/shared/cplusplus/AST.cpp +++ b/src/shared/cplusplus/AST.cpp @@ -1616,12 +1616,10 @@ unsigned TryBlockStatementAST::firstToken() const unsigned TryBlockStatementAST::lastToken() const { - for (CatchClauseAST *it = catch_clause_seq; it; it = it->next) { - if (! it->next) - return it->lastToken(); - } + if (catch_clause_list) + return catch_clause_list->lastToken(); - if (statement) + else if (statement) return statement->lastToken(); return try_token + 1; diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h index 97a56da8ef..190b5cb560 100644 --- a/src/shared/cplusplus/AST.h +++ b/src/shared/cplusplus/AST.h @@ -1899,7 +1899,7 @@ class CPLUSPLUS_EXPORT TryBlockStatementAST: public StatementAST public: unsigned try_token; StatementAST *statement; - CatchClauseAST *catch_clause_seq; + CatchClauseListAST *catch_clause_list; public: virtual TryBlockStatementAST *asTryBlockStatement() { return this; } @@ -1919,7 +1919,6 @@ public: ExceptionDeclarationAST *exception_declaration; unsigned rparen_token; StatementAST *statement; - CatchClauseAST *next; public: // annotations Block *symbol; diff --git a/src/shared/cplusplus/ASTVisit.cpp b/src/shared/cplusplus/ASTVisit.cpp index 63ef418ec9..7469388d4c 100644 --- a/src/shared/cplusplus/ASTVisit.cpp +++ b/src/shared/cplusplus/ASTVisit.cpp @@ -804,8 +804,7 @@ void TryBlockStatementAST::accept0(ASTVisitor *visitor) { if (visitor->visit(this)) { accept(statement, visitor); - for (CatchClauseAST *it = catch_clause_seq; it; it = it->next) - accept(it, visitor); + accept(catch_clause_list, visitor); } visitor->endVisit(this); } diff --git a/src/shared/cplusplus/ASTfwd.h b/src/shared/cplusplus/ASTfwd.h index ac70f735db..4c04800c18 100644 --- a/src/shared/cplusplus/ASTfwd.h +++ b/src/shared/cplusplus/ASTfwd.h @@ -203,6 +203,7 @@ typedef List<PostfixAST *> PostfixListAST; typedef List<PostfixDeclaratorAST *> PostfixDeclaratorListAST; typedef List<AttributeAST *> AttributeListAST; typedef List<NestedNameSpecifierAST *> NestedNameSpecifierListAST; +typedef List<CatchClauseAST *> CatchClauseListAST; typedef List<NameAST *> ObjCIdentifierListAST; typedef List<ObjCMessageArgumentAST *> ObjCMessageArgumentListAST; diff --git a/src/shared/cplusplus/CheckStatement.cpp b/src/shared/cplusplus/CheckStatement.cpp index f2edeae338..f63aa9270b 100644 --- a/src/shared/cplusplus/CheckStatement.cpp +++ b/src/shared/cplusplus/CheckStatement.cpp @@ -273,8 +273,8 @@ bool CheckStatement::visit(SwitchStatementAST *ast) bool CheckStatement::visit(TryBlockStatementAST *ast) { semantic()->check(ast->statement, _scope); - for (CatchClauseAST *c = ast->catch_clause_seq; c; c = c->next) { - semantic()->check(c, _scope); + for (CatchClauseListAST *it = ast->catch_clause_list; it; it = it->next) { + semantic()->check(it->value, _scope); } return false; } diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 904a5c76f0..394074e594 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -2949,7 +2949,7 @@ bool Parser::parseTryBlockStatement(StatementAST *&node) TryBlockStatementAST *ast = new (_pool) TryBlockStatementAST; ast->try_token = consumeToken(); parseCompoundStatement(ast->statement); - CatchClauseAST **catch_clause_ptr = &ast->catch_clause_seq; + CatchClauseListAST **catch_clause_ptr = &ast->catch_clause_list; while (parseCatchClause(*catch_clause_ptr)) catch_clause_ptr = &(*catch_clause_ptr)->next; node = ast; @@ -2958,7 +2958,7 @@ bool Parser::parseTryBlockStatement(StatementAST *&node) return false; } -bool Parser::parseCatchClause(CatchClauseAST *&node) +bool Parser::parseCatchClause(CatchClauseListAST *&node) { DEBUG_THIS_RULE(); if (LA() == T_CATCH) { @@ -2968,7 +2968,7 @@ bool Parser::parseCatchClause(CatchClauseAST *&node) parseExceptionDeclaration(ast->exception_declaration); match(T_RPAREN, &ast->rparen_token); parseCompoundStatement(ast->statement); - node = ast; + node = new (_pool) CatchClauseListAST(ast); return true; } return false; diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h index 2ab563f09a..15f768b3cf 100644 --- a/src/shared/cplusplus/Parser.h +++ b/src/shared/cplusplus/Parser.h @@ -181,7 +181,7 @@ public: bool parseTemplateParameterList(DeclarationListAST *&node); bool parseThrowExpression(ExpressionAST *&node); bool parseTryBlockStatement(StatementAST *&node); - bool parseCatchClause(CatchClauseAST *&node); + bool parseCatchClause(CatchClauseListAST *&node); bool parseTypeId(ExpressionAST *&node); bool parseTypeIdList(ExpressionListAST *&node); bool parseTypenameTypeParameter(DeclarationAST *&node); |