From 6e3e293e535b368ccae8179bd32f9b1d0d80718a Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Tue, 10 Nov 2009 12:34:29 +0100
Subject: [PATCH] Removed DeclaratorListAST

Done with Erik Verbruggen
---
 src/plugins/cpptools/cppcodecompletion.cpp |  4 ++--
 src/shared/cplusplus/AST.cpp               | 19 -------------------
 src/shared/cplusplus/AST.h                 | 16 ----------------
 src/shared/cplusplus/ASTVisit.cpp          |  8 --------
 src/shared/cplusplus/ASTVisitor.h          |  2 --
 src/shared/cplusplus/ASTfwd.h              |  2 +-
 src/shared/cplusplus/CheckDeclaration.cpp  | 12 ++++++------
 src/shared/cplusplus/Parser.cpp            | 10 +++++-----
 8 files changed, 14 insertions(+), 59 deletions(-)

diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index bb2d26780d5..a221f8a25b2 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -1072,8 +1072,8 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<TypeOfExpressi
             if (doc->parse(Document::ParseDeclaration)) {
                 doc->check();
                 if (SimpleDeclarationAST *sd = doc->translationUnit()->ast()->asSimpleDeclaration()) {
-                    if (sd->declarators->declarator->postfix_declarators
-                        && sd->declarators->declarator->postfix_declarators->asFunctionDeclarator()) {
+                    if (sd->declarators->value->postfix_declarators
+                        && sd->declarators->value->postfix_declarators->asFunctionDeclarator()) {
                         autocompleteSignature = true;
                     }
                 }
diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp
index 44d2b978ff9..db6a31fe2a4 100644
--- a/src/shared/cplusplus/AST.cpp
+++ b/src/shared/cplusplus/AST.cpp
@@ -608,25 +608,6 @@ unsigned DeclaratorIdAST::lastToken() const
     return name->lastToken();
 }
 
-
-unsigned DeclaratorListAST::firstToken() const
-{
-    return declarator->firstToken();
-}
-
-unsigned DeclaratorListAST::lastToken() const
-{
-    for (const DeclaratorListAST *it = this; it; it = it->next) {
-        if (! it->next) {
-            if (it->declarator)
-                return it->declarator->lastToken();
-        }
-    }
-
-    return 0;
-}
-
-
 unsigned DeleteExpressionAST::firstToken() const
 {
     if (scope_token)
diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h
index a3686849b4e..04709031add 100644
--- a/src/shared/cplusplus/AST.h
+++ b/src/shared/cplusplus/AST.h
@@ -786,22 +786,6 @@ protected:
     virtual void accept0(ASTVisitor *visitor);
 };
 
-class CPLUSPLUS_EXPORT DeclaratorListAST: public AST
-{
-public:
-    DeclaratorAST *declarator;
-    DeclaratorListAST *next;
-
-public:
-    virtual DeclaratorListAST *asDeclaratorList() { return this; }
-
-    virtual unsigned firstToken() const;
-    virtual unsigned lastToken() const;
-
-protected:
-    virtual void accept0(ASTVisitor *visitor);
-};
-
 class CPLUSPLUS_EXPORT DeleteExpressionAST: public ExpressionAST
 {
 public:
diff --git a/src/shared/cplusplus/ASTVisit.cpp b/src/shared/cplusplus/ASTVisit.cpp
index f3239d356a8..605e1538de4 100644
--- a/src/shared/cplusplus/ASTVisit.cpp
+++ b/src/shared/cplusplus/ASTVisit.cpp
@@ -271,14 +271,6 @@ void ArrayDeclaratorAST::accept0(ASTVisitor *visitor)
     visitor->endVisit(this);
 }
 
-void DeclaratorListAST::accept0(ASTVisitor *visitor)
-{
-    if (visitor->visit(this)) {
-        accept(declarator, visitor);
-    }
-    visitor->endVisit(this);
-}
-
 void DeleteExpressionAST::accept0(ASTVisitor *visitor)
 {
     if (visitor->visit(this)) {
diff --git a/src/shared/cplusplus/ASTVisitor.h b/src/shared/cplusplus/ASTVisitor.h
index 41fcc38151a..29703a44a7e 100644
--- a/src/shared/cplusplus/ASTVisitor.h
+++ b/src/shared/cplusplus/ASTVisitor.h
@@ -121,7 +121,6 @@ public:
     virtual bool visit(DeclaratorAST *) { return true; }
     virtual bool visit(DeclarationStatementAST *) { return true; }
     virtual bool visit(DeclaratorIdAST *) { return true; }
-    virtual bool visit(DeclaratorListAST *) { return true; }
     virtual bool visit(DeleteExpressionAST *) { return true; }
     virtual bool visit(DestructorNameAST *) { return true; }
     virtual bool visit(DoStatementAST *) { return true; }
@@ -254,7 +253,6 @@ public:
     virtual void endVisit(DeclaratorAST *) { }
     virtual void endVisit(DeclarationStatementAST *) { }
     virtual void endVisit(DeclaratorIdAST *) { }
-    virtual void endVisit(DeclaratorListAST *) { }
     virtual void endVisit(DeleteExpressionAST *) { }
     virtual void endVisit(DestructorNameAST *) { }
     virtual void endVisit(DoStatementAST *) { }
diff --git a/src/shared/cplusplus/ASTfwd.h b/src/shared/cplusplus/ASTfwd.h
index 61d7cc1aac7..906e188891d 100644
--- a/src/shared/cplusplus/ASTfwd.h
+++ b/src/shared/cplusplus/ASTfwd.h
@@ -87,7 +87,6 @@ class DeclarationAST;
 class DeclarationStatementAST;
 class DeclaratorAST;
 class DeclaratorIdAST;
-class DeclaratorListAST;
 class DeleteExpressionAST;
 class DestructorNameAST;
 class DoStatementAST;
@@ -202,6 +201,7 @@ class WhileStatementAST;
 typedef List<ExpressionAST *> ExpressionListAST;
 typedef List<DeclarationAST *> DeclarationListAST;
 typedef List<StatementAST *> StatementListAST;
+typedef List<DeclaratorAST *> DeclaratorListAST;
 
 } // end of namespace CPlusPlus
 
diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index eb82e6331f5..7adcde83bc0 100644
--- a/src/shared/cplusplus/CheckDeclaration.cpp
+++ b/src/shared/cplusplus/CheckDeclaration.cpp
@@ -173,13 +173,13 @@ bool CheckDeclaration::visit(SimpleDeclarationAST *ast)
     List<Declaration *> **decl_it = &ast->symbols;
     for (DeclaratorListAST *it = ast->declarators; it; it = it->next) {
         Name *name = 0;
-        FullySpecifiedType declTy = semantic()->check(it->declarator, qualTy,
+        FullySpecifiedType declTy = semantic()->check(it->value, qualTy,
                                                       _scope, &name);
 
-        unsigned location = locationOfDeclaratorId(it->declarator);
+        unsigned location = locationOfDeclaratorId(it->value);
         if (! location) {
-            if (it->declarator)
-                location = it->declarator->firstToken();
+            if (it->value)
+                location = it->value->firstToken();
             else
                 location = ast->firstToken();
         }
@@ -226,8 +226,8 @@ bool CheckDeclaration::visit(SimpleDeclarationAST *ast)
         else if (ty.isTypedef())
             symbol->setStorage(Symbol::Typedef);
 
-        if (it->declarator && it->declarator->initializer) {
-            FullySpecifiedType initTy = semantic()->check(it->declarator->initializer, _scope);
+        if (it->value && it->value->initializer) {
+            FullySpecifiedType initTy = semantic()->check(it->value->initializer, _scope);
         }
 
         *decl_it = new (translationUnit()->memoryPool()) List<Declaration *>();
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 1f121631a93..6a4222024c1 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -2158,7 +2158,7 @@ bool Parser::isPointerDeclaration(DeclarationStatementAST *ast) const
         if (SpecifierAST *spec = declaration->decl_specifier_seq) {
             if (spec->asNamedTypeSpecifier() && ! spec->next) {
                 if (DeclaratorListAST *declarators = declaration->declarators) {
-                    if (DeclaratorAST *declarator = declarators->declarator) {
+                    if (DeclaratorAST *declarator = declarators->value) {
                         if (declarator->ptr_operators && declarator->equals_token && declarator->initializer) {
                             return true;
                         }
@@ -2180,7 +2180,7 @@ bool Parser::maybeAmbiguousStatement(DeclarationStatementAST *ast) const
         if (SpecifierAST *spec = declaration->decl_specifier_seq) {
             if (spec->asNamedTypeSpecifier() && ! spec->next) {
                 if (DeclaratorListAST *declarators = declaration->declarators) {
-                    if (DeclaratorAST *declarator = declarators->declarator) {
+                    if (DeclaratorAST *declarator = declarators->value) {
                         if (declarator->core_declarator &&
                             declarator->core_declarator->asNestedDeclarator()) {
                             // recognized name(id-expression)
@@ -2192,7 +2192,7 @@ bool Parser::maybeAmbiguousStatement(DeclarationStatementAST *ast) const
 
         } else if (DeclaratorListAST *declarators = declaration->declarators) {
             // no decl_specifiers...
-            if (DeclaratorAST *declarator = declarators->declarator) {
+            if (DeclaratorAST *declarator = declarators->value) {
                 if (declarator->postfix_declarators && declarator->postfix_declarators->asFunctionDeclarator()
                                                      && ! declarator->initializer) {
                     return false;
@@ -2849,7 +2849,7 @@ bool Parser::parseSimpleDeclaration(DeclarationAST *&node,
 
     if (declarator) {
         *declarator_ptr = new (_pool) DeclaratorListAST;
-        (*declarator_ptr)->declarator = declarator;
+        (*declarator_ptr)->value = declarator;
         declarator_ptr = &(*declarator_ptr)->next;
     }
 
@@ -2860,7 +2860,7 @@ bool Parser::parseSimpleDeclaration(DeclarationAST *&node,
             declarator = 0;
             if (parseInitDeclarator(declarator, acceptStructDeclarator)) {
                 *declarator_ptr = new (_pool) DeclaratorListAST;
-                (*declarator_ptr)->declarator = declarator;
+                (*declarator_ptr)->value = declarator;
                 declarator_ptr = &(*declarator_ptr)->next;
             }
         }
-- 
GitLab