From d358c89f09d41e44a9ab23efd7d18b3fda5a70ce Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Tue, 10 Nov 2009 12:43:15 +0100
Subject: [PATCH] Removed ObjCMessageArgumentListAST Done with Erik Verbruggen

---
 src/shared/cplusplus/AST.cpp             | 19 -------------------
 src/shared/cplusplus/AST.h               | 16 ----------------
 src/shared/cplusplus/ASTVisit.cpp        |  8 --------
 src/shared/cplusplus/ASTVisitor.h        |  7 +++++++
 src/shared/cplusplus/ASTfwd.h            |  2 +-
 src/shared/cplusplus/CheckExpression.cpp |  2 +-
 src/shared/cplusplus/Parser.cpp          |  6 +++---
 7 files changed, 12 insertions(+), 48 deletions(-)

diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp
index 4cefd9a0129..fe28c1d27d8 100644
--- a/src/shared/cplusplus/AST.cpp
+++ b/src/shared/cplusplus/AST.cpp
@@ -1959,25 +1959,6 @@ unsigned ObjCMessageExpressionAST::lastToken() const
     return lbracket_token + 1;
 }
 
-unsigned ObjCMessageArgumentListAST::firstToken() const
-{
-    if (arg)
-        return arg->firstToken();
-    // ### assert?
-    return 0;
-}
-
-unsigned ObjCMessageArgumentListAST::lastToken() const
-{
-    for (const ObjCMessageArgumentListAST *it = this; it; it = it->next) {
-        if (! it->next && it->arg) {
-            return it->arg->lastToken();
-        }
-    }
-    // ### assert?
-    return 0;
-}
-
 unsigned ObjCMessageArgumentAST::firstToken() const
 {
     return parameter_value_expression->firstToken();
diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h
index 084913fc91f..129c132f94c 100644
--- a/src/shared/cplusplus/AST.h
+++ b/src/shared/cplusplus/AST.h
@@ -2211,22 +2211,6 @@ protected:
     virtual void accept0(ASTVisitor *visitor);
 };
 
-class CPLUSPLUS_EXPORT ObjCMessageArgumentListAST: public AST
-{
-public:
-    ObjCMessageArgumentAST *arg;
-    ObjCMessageArgumentListAST *next;
-
-public:
-    virtual ObjCMessageArgumentListAST *asObjCMessageArgumentList() { return this; }
-
-    virtual unsigned firstToken() const;
-    virtual unsigned lastToken() const;
-
-protected:
-    virtual void accept0(ASTVisitor *visitor);
-};
-
 class CPLUSPLUS_EXPORT ObjCMessageExpressionAST: public ExpressionAST
 {
 public:
diff --git a/src/shared/cplusplus/ASTVisit.cpp b/src/shared/cplusplus/ASTVisit.cpp
index 8095946f0a2..2f60cdf4616 100644
--- a/src/shared/cplusplus/ASTVisit.cpp
+++ b/src/shared/cplusplus/ASTVisit.cpp
@@ -958,14 +958,6 @@ void ObjCMessageArgumentAST::accept0(ASTVisitor *visitor)
     visitor->endVisit(this);
 }
 
-void ObjCMessageArgumentListAST::accept0(ASTVisitor *visitor)
-{
-    if (visitor->visit(this)) {
-        accept(arg, visitor);
-    }
-    visitor->endVisit(this);
-}
-
 void ObjCMessageExpressionAST::accept0(ASTVisitor *visitor)
 {
     if (visitor->visit(this)) {
diff --git a/src/shared/cplusplus/ASTVisitor.h b/src/shared/cplusplus/ASTVisitor.h
index fff0c9f7d52..ddb4886e78e 100644
--- a/src/shared/cplusplus/ASTVisitor.h
+++ b/src/shared/cplusplus/ASTVisitor.h
@@ -91,6 +91,13 @@ public:
 
     void accept(AST *ast);
 
+    template <typename _Tp>
+    void accept(List<_Tp> *it)
+    {
+        for (; it; it = it->next)
+            accept(it->value);
+    }
+
     virtual bool preVisit(AST *) { return true; }
     virtual void postVisit(AST *) {}
 
diff --git a/src/shared/cplusplus/ASTfwd.h b/src/shared/cplusplus/ASTfwd.h
index c562384bf9a..119758e63b5 100644
--- a/src/shared/cplusplus/ASTfwd.h
+++ b/src/shared/cplusplus/ASTfwd.h
@@ -132,7 +132,6 @@ class ObjCInstanceVariablesDeclarationAST;
 class ObjCMessageArgumentAST;
 class ObjCMessageArgumentDeclarationAST;
 class ObjCMessageArgumentDeclarationListAST;
-class ObjCMessageArgumentListAST;
 class ObjCMessageExpressionAST;
 class ObjCMethodDeclarationAST;
 class ObjCMethodPrototypeAST;
@@ -201,6 +200,7 @@ typedef List<DeclarationAST *> DeclarationListAST;
 typedef List<StatementAST *> StatementListAST;
 typedef List<DeclaratorAST *> DeclaratorListAST;
 typedef List<NameAST *> ObjCIdentifierListAST;
+typedef List<ObjCMessageArgumentAST *> ObjCMessageArgumentListAST;
 
 typedef ExpressionListAST TemplateArgumentListAST;
 
diff --git a/src/shared/cplusplus/CheckExpression.cpp b/src/shared/cplusplus/CheckExpression.cpp
index 3703577ed0e..14ced9509a6 100644
--- a/src/shared/cplusplus/CheckExpression.cpp
+++ b/src/shared/cplusplus/CheckExpression.cpp
@@ -369,7 +369,7 @@ bool CheckExpression::visit(ObjCMessageExpressionAST *ast)
     semantic()->check(ast->receiver_expression, _scope);
     (void) semantic()->check(ast->selector, _scope);
 
-    accept(ast->argument_list);
+    accept(ast->argument_list); // ### not necessary.
     return false;
 }
 
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 8cfa100c6ee..06a938763a6 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -3257,7 +3257,7 @@ bool Parser::parseObjCMessageArguments(ObjCSelectorAST *&selNode, ObjCMessageArg
         ObjCSelectorArgumentListAST *lastSelector = selAst;
 
         ObjCMessageArgumentListAST *argAst = new (_pool) ObjCMessageArgumentListAST;
-        argAst->arg = messageArgument;
+        argAst->value = messageArgument;
         ObjCMessageArgumentListAST *lastArgument = argAst;
 
         while (parseObjCSelectorArg(selectorArgument, messageArgument)) {
@@ -3268,11 +3268,11 @@ bool Parser::parseObjCMessageArguments(ObjCSelectorAST *&selNode, ObjCMessageArg
 
             lastArgument->next = new (_pool) ObjCMessageArgumentListAST;
             lastArgument = lastArgument->next;
-            lastArgument->arg = messageArgument;
+            lastArgument->value = messageArgument;
         }
 
         if (LA() == T_COMMA) {
-            ExpressionAST **lastExpression = &(lastArgument->arg->parameter_value_expression);
+            ExpressionAST **lastExpression = &(lastArgument->value->parameter_value_expression);
 
             while (LA() == T_COMMA) {
                 BinaryExpressionAST *binaryExpression = new (_pool) BinaryExpressionAST;
-- 
GitLab