summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r--src/shared/cplusplus/AST.cpp19
-rw-r--r--src/shared/cplusplus/AST.h16
-rw-r--r--src/shared/cplusplus/ASTVisit.cpp8
-rw-r--r--src/shared/cplusplus/ASTVisitor.h7
-rw-r--r--src/shared/cplusplus/ASTfwd.h2
-rw-r--r--src/shared/cplusplus/CheckExpression.cpp2
-rw-r--r--src/shared/cplusplus/Parser.cpp6
7 files changed, 12 insertions, 48 deletions
diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp
index 4cefd9a012..fe28c1d27d 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 084913fc91..129c132f94 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 8095946f0a..2f60cdf461 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 fff0c9f7d5..ddb4886e78 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 c562384bf9..119758e63b 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 3703577ed0..14ced9509a 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 8cfa100c6e..06a938763a 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;