diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-03-22 18:23:17 +0100 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-03-23 14:15:45 +0100 |
commit | 7a3fbf120a48b02e23057ea681f9c7df9af3dd93 (patch) | |
tree | a68958ceb8c5ab4329812259d351aba5fb37d9f4 /src/shared/cplusplus | |
parent | 58f5b02dc023a9a97f508de64d7bb724588ead57 (diff) | |
download | qt-creator-7a3fbf120a48b02e23057ea681f9c7df9af3dd93.tar.gz |
Added attributes to the elaborate-type-specifier AST node.
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r-- | src/shared/cplusplus/AST.cpp | 2 | ||||
-rw-r--r-- | src/shared/cplusplus/AST.h | 2 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTClone.cpp | 3 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTMatcher.cpp | 5 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTVisit.cpp | 1 |
5 files changed, 13 insertions, 0 deletions
diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp index d5b605116d..785b8178d4 100644 --- a/src/shared/cplusplus/AST.cpp +++ b/src/shared/cplusplus/AST.cpp @@ -834,6 +834,8 @@ unsigned ElaboratedTypeSpecifierAST::lastToken() const { if (name) return name->lastToken(); + if (attribute_list) + return attribute_list->lastToken(); return classkey_token + 1; } diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h index f0bbb04314..11f038db5a 100644 --- a/src/shared/cplusplus/AST.h +++ b/src/shared/cplusplus/AST.h @@ -1559,11 +1559,13 @@ class CPLUSPLUS_EXPORT ElaboratedTypeSpecifierAST: public SpecifierAST { public: unsigned classkey_token; + SpecifierListAST *attribute_list; NameAST *name; public: ElaboratedTypeSpecifierAST() : classkey_token(0) + , attribute_list(0) , name(0) {} diff --git a/src/shared/cplusplus/ASTClone.cpp b/src/shared/cplusplus/ASTClone.cpp index 011d6ec230..586d88e21a 100644 --- a/src/shared/cplusplus/ASTClone.cpp +++ b/src/shared/cplusplus/ASTClone.cpp @@ -528,6 +528,9 @@ ElaboratedTypeSpecifierAST *ElaboratedTypeSpecifierAST::clone(MemoryPool *pool) { ElaboratedTypeSpecifierAST *ast = new (pool) ElaboratedTypeSpecifierAST; ast->classkey_token = classkey_token; + for (SpecifierListAST *iter = attribute_list, **ast_iter = &ast->attribute_list; + iter; iter = iter->next, ast_iter = &(*ast_iter)->next) + *ast_iter = new (pool) SpecifierListAST((iter->value) ? iter->value->clone(pool) : 0); if (name) ast->name = name->clone(pool); return ast; diff --git a/src/shared/cplusplus/ASTMatcher.cpp b/src/shared/cplusplus/ASTMatcher.cpp index 3fe3a8d410..42cbadcbdb 100644 --- a/src/shared/cplusplus/ASTMatcher.cpp +++ b/src/shared/cplusplus/ASTMatcher.cpp @@ -874,6 +874,11 @@ bool ASTMatcher::match(ElaboratedTypeSpecifierAST *node, ElaboratedTypeSpecifier pattern->classkey_token = node->classkey_token; + if (! pattern->attribute_list) + pattern->attribute_list = node->attribute_list; + else if (! AST::match(node->attribute_list, pattern->attribute_list, this)) + return false; + if (! pattern->name) pattern->name = node->name; else if (! AST::match(node->name, pattern->name, this)) diff --git a/src/shared/cplusplus/ASTVisit.cpp b/src/shared/cplusplus/ASTVisit.cpp index 4c0a2e98d4..8216f87b48 100644 --- a/src/shared/cplusplus/ASTVisit.cpp +++ b/src/shared/cplusplus/ASTVisit.cpp @@ -391,6 +391,7 @@ void NamedTypeSpecifierAST::accept0(ASTVisitor *visitor) void ElaboratedTypeSpecifierAST::accept0(ASTVisitor *visitor) { if (visitor->visit(this)) { + accept(attribute_list, visitor); accept(name, visitor); } visitor->endVisit(this); |