summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-11-10 14:56:37 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2009-11-10 16:20:12 +0100
commitb47eee88695ab5ea499a0197a779e37ad745fd5d (patch)
tree3766b91aece0859b1514066c1e11a8b0c9cbcbd5 /src/shared/cplusplus
parent24b6c858ebc3a16e9a82c0ea6e8fc6743f0e3229 (diff)
downloadqt-creator-b47eee88695ab5ea499a0197a779e37ad745fd5d.tar.gz
Cleanup Attributes
Diffstat (limited to 'src/shared/cplusplus')
-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/Parser.cpp28
-rw-r--r--src/shared/cplusplus/Parser.h2
5 files changed, 14 insertions, 23 deletions
diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h
index b56fed68c7..e1b901dca5 100644
--- a/src/shared/cplusplus/AST.h
+++ b/src/shared/cplusplus/AST.h
@@ -296,7 +296,7 @@ public:
unsigned attribute_token;
unsigned first_lparen_token;
unsigned second_lparen_token;
- AttributeAST *attributes;
+ AttributeListAST *attributes;
unsigned first_rparen_token;
unsigned second_rparen_token;
@@ -318,7 +318,6 @@ public:
unsigned tag_token;
ExpressionListAST *expression_list;
unsigned rparen_token;
- AttributeAST *next;
public:
virtual AttributeAST *asAttribute() { return this; }
diff --git a/src/shared/cplusplus/ASTVisit.cpp b/src/shared/cplusplus/ASTVisit.cpp
index e8fbdce328..2a9160094f 100644
--- a/src/shared/cplusplus/ASTVisit.cpp
+++ b/src/shared/cplusplus/ASTVisit.cpp
@@ -42,8 +42,7 @@ void SimpleSpecifierAST::accept0(ASTVisitor *visitor)
void AttributeSpecifierAST::accept0(ASTVisitor *visitor)
{
if (visitor->visit(this)) {
- for (AttributeAST *it = attributes; it; it = it->next)
- accept(it, visitor);
+ accept(attributes, visitor);
}
visitor->endVisit(this);
}
diff --git a/src/shared/cplusplus/ASTfwd.h b/src/shared/cplusplus/ASTfwd.h
index 922dd6b276..07f51b40ae 100644
--- a/src/shared/cplusplus/ASTfwd.h
+++ b/src/shared/cplusplus/ASTfwd.h
@@ -201,6 +201,7 @@ typedef List<MemInitializerAST *> MemInitializerListAST;
typedef List<NewArrayDeclaratorAST *> NewArrayDeclaratorListAST;
typedef List<PostfixAST *> PostfixListAST;
typedef List<PostfixDeclaratorAST *> PostfixDeclaratorListAST;
+typedef List<AttributeAST *> AttributeListAST;
typedef List<NameAST *> ObjCIdentifierListAST;
typedef List<ObjCMessageArgumentAST *> ObjCMessageArgumentListAST;
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index c74b3ca960..d9b3635e4b 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -2689,32 +2689,24 @@ bool Parser::parseAttributeSpecifier(SpecifierAST *&node)
return true;
}
-bool Parser::parseAttributeList(AttributeAST *&node)
+bool Parser::parseAttributeList(AttributeListAST *&node) // ### create the AST
{
DEBUG_THIS_RULE();
- AttributeAST **attribute_ptr = &node;
- while (LA() == T_IDENTIFIER || LA() == T_CONST) {
- AttributeAST *ast = new (_pool) AttributeAST;
- ast->identifier_token = consumeToken();
- if (LA() == T_LPAREN) {
- ast->lparen_token = consumeToken();
- if (LA() == T_IDENTIFIER && (LA(2) == T_COMMA || LA(2) == T_RPAREN)) {
- ast->tag_token = consumeToken();
- if (LA() == T_COMMA)
- parseExpressionList(ast->expression_list);
- } else {
- parseExpressionList(ast->expression_list);
- }
- match(T_RPAREN, &ast->rparen_token);
+
+ while (LA() == T_CONST || LA() == T_IDENTIFIER) {
+ if (LA() == T_CONST)
+ consumeToken();
+ else if (LA() == T_IDENTIFIER) {
+ ExpressionAST *expression = 0;
+ parseExpression(expression);
}
- *attribute_ptr = ast;
if (LA() != T_COMMA)
break;
- consumeToken();
- attribute_ptr = &(*attribute_ptr)->next;
+ consumeToken(); // skip T_COMMA
}
+
return true;
}
diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h
index 57a7eaf760..39f42ba0bb 100644
--- a/src/shared/cplusplus/Parser.h
+++ b/src/shared/cplusplus/Parser.h
@@ -190,7 +190,7 @@ public:
bool parseBuiltinTypeSpecifier(SpecifierAST *&node);
bool parseAttributeSpecifier(SpecifierAST *&node);
- bool parseAttributeList(AttributeAST *&node);
+ bool parseAttributeList(AttributeListAST *&node);
bool parseSimpleTypeSpecifier(SpecifierAST *&node)
{ return parseDeclSpecifierSeq(node, true, true); }