summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-11-10 14:11:21 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2009-11-10 16:20:11 +0100
commit73a4f2977aaf68a46bd46062e41144349feda878 (patch)
treef198a8c8b87c67aca967df525de414abc903a131 /src/shared/cplusplus
parent1dbdbbefe7b4977e88c13c42556b35e44eee747a (diff)
downloadqt-creator-73a4f2977aaf68a46bd46062e41144349feda878.tar.gz
Cleanup MemInitializerAST
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r--src/shared/cplusplus/AST.cpp12
-rw-r--r--src/shared/cplusplus/AST.h6
-rw-r--r--src/shared/cplusplus/ASTVisit.cpp6
-rw-r--r--src/shared/cplusplus/ASTfwd.h2
-rw-r--r--src/shared/cplusplus/CheckSpecifier.cpp4
-rw-r--r--src/shared/cplusplus/Parser.cpp18
-rw-r--r--src/shared/cplusplus/Parser.h6
7 files changed, 26 insertions, 28 deletions
diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp
index ab2578c49f..a20f74372b 100644
--- a/src/shared/cplusplus/AST.cpp
+++ b/src/shared/cplusplus/AST.cpp
@@ -527,10 +527,8 @@ unsigned CtorInitializerAST::firstToken() const
unsigned CtorInitializerAST::lastToken() const
{
- for (MemInitializerAST *it = member_initializers; it; it = it->next) {
- if (! it->next)
- return it->lastToken();
- }
+ if (member_initializers)
+ return member_initializers->lastToken();
return colon_token + 1;
}
@@ -697,10 +695,8 @@ unsigned EnumSpecifierAST::lastToken() const
if (rbrace_token)
return rbrace_token + 1;
- for (EnumeratorAST *it = enumerators; it; it = it->next) {
- if (! it->next)
- return it->lastToken();
- }
+ if (enumerators)
+ return enumerators->lastToken();
if (lbrace_token)
return lbrace_token + 1;
diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h
index fdaaf8100c..3dd95c5e53 100644
--- a/src/shared/cplusplus/AST.h
+++ b/src/shared/cplusplus/AST.h
@@ -686,7 +686,7 @@ class CPLUSPLUS_EXPORT CtorInitializerAST: public AST
{
public:
unsigned colon_token;
- MemInitializerAST *member_initializers;
+ MemInitializerListAST *member_initializers;
public:
virtual CtorInitializerAST *asCtorInitializer() { return this; }
@@ -862,7 +862,7 @@ public:
unsigned enum_token;
NameAST *name;
unsigned lbrace_token;
- EnumeratorAST *enumerators;
+ EnumeratorListAST *enumerators;
unsigned rbrace_token;
public:
@@ -881,7 +881,6 @@ public:
unsigned identifier_token;
unsigned equal_token;
ExpressionAST *expression;
- EnumeratorAST *next;
public:
virtual EnumeratorAST *asEnumerator() { return this; }
@@ -1134,7 +1133,6 @@ public:
unsigned lparen_token;
ExpressionAST *expression;
unsigned rparen_token;
- MemInitializerAST *next;
public:
virtual MemInitializerAST *asMemInitializer() { return this; }
diff --git a/src/shared/cplusplus/ASTVisit.cpp b/src/shared/cplusplus/ASTVisit.cpp
index 9b48f3db6d..1188eb0991 100644
--- a/src/shared/cplusplus/ASTVisit.cpp
+++ b/src/shared/cplusplus/ASTVisit.cpp
@@ -220,8 +220,7 @@ void CppCastExpressionAST::accept0(ASTVisitor *visitor)
void CtorInitializerAST::accept0(ASTVisitor *visitor)
{
if (visitor->visit(this)) {
- for (MemInitializerAST *it = member_initializers; it; it = it->next)
- accept(it, visitor);
+ accept(member_initializers, visitor);
}
visitor->endVisit(this);
}
@@ -307,8 +306,7 @@ void EnumSpecifierAST::accept0(ASTVisitor *visitor)
{
if (visitor->visit(this)) {
accept(name, visitor);
- for (EnumeratorAST *it = enumerators; it; it = it->next)
- accept(it, visitor);
+ accept(enumerators, visitor);
}
visitor->endVisit(this);
}
diff --git a/src/shared/cplusplus/ASTfwd.h b/src/shared/cplusplus/ASTfwd.h
index 94f36c7b01..fbf3743fac 100644
--- a/src/shared/cplusplus/ASTfwd.h
+++ b/src/shared/cplusplus/ASTfwd.h
@@ -196,6 +196,8 @@ typedef List<DeclarationAST *> DeclarationListAST;
typedef List<StatementAST *> StatementListAST;
typedef List<DeclaratorAST *> DeclaratorListAST;
typedef List<BaseSpecifierAST *> BaseSpecifierListAST;
+typedef List<EnumeratorAST *> EnumeratorListAST;
+typedef List<MemInitializerAST *> MemInitializerListAST;
typedef List<NameAST *> ObjCIdentifierListAST;
typedef List<ObjCMessageArgumentAST *> ObjCMessageArgumentListAST;
diff --git a/src/shared/cplusplus/CheckSpecifier.cpp b/src/shared/cplusplus/CheckSpecifier.cpp
index 65909536fd..0becef3201 100644
--- a/src/shared/cplusplus/CheckSpecifier.cpp
+++ b/src/shared/cplusplus/CheckSpecifier.cpp
@@ -387,8 +387,8 @@ bool CheckSpecifier::visit(EnumSpecifierAST *ast)
e->setVisibility(semantic()->currentVisibility());
_scope->enterSymbol(e);
_fullySpecifiedType.setType(e);
- for (EnumeratorAST *enumerator = ast->enumerators; enumerator;
- enumerator = enumerator->next) {
+ for (EnumeratorListAST *it = ast->enumerators; it; it = it->next) {
+ EnumeratorAST *enumerator = it->value;
Identifier *id = identifier(enumerator->identifier_token);
if (! id)
continue;
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index dc89952caf..86f046b9c5 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -1308,7 +1308,7 @@ bool Parser::parseEnumSpecifier(SpecifierAST *&node)
ast->name = name;
ast->lbrace_token = consumeToken();
unsigned comma_token = 0;
- EnumeratorAST **enumerator_ptr = &ast->enumerators;
+ EnumeratorListAST **enumerator_ptr = &ast->enumerators;
while (int tk = LA()) {
if (tk == T_RBRACE)
break;
@@ -1722,7 +1722,7 @@ bool Parser::parseExceptionSpecification(ExceptionSpecificationAST *&node)
return false;
}
-bool Parser::parseEnumerator(EnumeratorAST *&node)
+bool Parser::parseEnumerator(EnumeratorListAST *&node)
{
DEBUG_THIS_RULE();
if (LA() == T_IDENTIFIER) {
@@ -1733,7 +1733,9 @@ bool Parser::parseEnumerator(EnumeratorAST *&node)
ast->equal_token = consumeToken();
parseConstantExpression(ast->expression);
}
- node = ast;
+
+ node = new (_pool) EnumeratorListAST;
+ node->value = ast;
return true;
}
return false;
@@ -1820,10 +1822,10 @@ bool Parser::parseInitializer(ExpressionAST *&node, unsigned *equals_token)
return false;
}
-bool Parser::parseMemInitializerList(MemInitializerAST *&node)
+bool Parser::parseMemInitializerList(MemInitializerListAST *&node)
{
DEBUG_THIS_RULE();
- MemInitializerAST **initializer = &node;
+ MemInitializerListAST **initializer = &node;
if (parseMemInitializer(*initializer)) {
initializer = &(*initializer)->next;
@@ -1838,7 +1840,7 @@ bool Parser::parseMemInitializerList(MemInitializerAST *&node)
return false;
}
-bool Parser::parseMemInitializer(MemInitializerAST *&node)
+bool Parser::parseMemInitializer(MemInitializerListAST *&node)
{
DEBUG_THIS_RULE();
NameAST *name = 0;
@@ -1849,7 +1851,9 @@ bool Parser::parseMemInitializer(MemInitializerAST *&node)
parseExpression(ast->expression);
if (LA() == T_RPAREN)
ast->rparen_token = consumeToken();
- node = ast;
+
+ node = new (_pool) MemInitializerListAST;
+ node->value = ast;
return true;
}
return false;
diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h
index 2f0514d269..40f2f7e558 100644
--- a/src/shared/cplusplus/Parser.h
+++ b/src/shared/cplusplus/Parser.h
@@ -111,7 +111,7 @@ public:
bool parseDoStatement(StatementAST *&node);
bool parseElaboratedTypeSpecifier(SpecifierAST *&node);
bool parseEnumSpecifier(SpecifierAST *&node);
- bool parseEnumerator(EnumeratorAST *&node);
+ bool parseEnumerator(EnumeratorListAST *&node);
bool parseEqualityExpression(ExpressionAST *&node);
bool parseExceptionDeclaration(ExceptionDeclarationAST *&node);
bool parseExceptionSpecification(ExceptionSpecificationAST *&node);
@@ -134,8 +134,8 @@ public:
bool parseLinkageSpecification(DeclarationAST *&node);
bool parseLogicalAndExpression(ExpressionAST *&node);
bool parseLogicalOrExpression(ExpressionAST *&node);
- bool parseMemInitializer(MemInitializerAST *&node);
- bool parseMemInitializerList(MemInitializerAST *&node);
+ bool parseMemInitializer(MemInitializerListAST *&node);
+ bool parseMemInitializerList(MemInitializerListAST *&node);
bool parseMemberSpecification(DeclarationAST *&node);
bool parseMultiplicativeExpression(ExpressionAST *&node);
bool parseTemplateId(NameAST *&node);