summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-11-10 15:15:51 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2009-11-10 16:20:12 +0100
commit30c67f43dfffc146d67563912dab1e2e586057a8 (patch)
tree422ac8ba55ff12e5e60f3c464524ea252a60b8bd /src/shared/cplusplus
parent380bce45276e2bff94dcd4453e5d65ffa53bd385 (diff)
downloadqt-creator-30c67f43dfffc146d67563912dab1e2e586057a8.tar.gz
Cleanup Catch clause
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r--src/shared/cplusplus/AST.cpp8
-rw-r--r--src/shared/cplusplus/AST.h3
-rw-r--r--src/shared/cplusplus/ASTVisit.cpp3
-rw-r--r--src/shared/cplusplus/ASTfwd.h1
-rw-r--r--src/shared/cplusplus/CheckStatement.cpp4
-rw-r--r--src/shared/cplusplus/Parser.cpp6
-rw-r--r--src/shared/cplusplus/Parser.h2
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);