[clang] dc3d474 - [SyntaxTree] Migrate `ParamatersAndQualifiers` to use the new List API

Eduardo Caldas via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 26 09:51:19 PDT 2020


Author: Eduardo Caldas
Date: 2020-08-26T16:46:19Z
New Revision: dc3d4743277b47c0bc8cddbeb4b5e265252ee304

URL: https://github.com/llvm/llvm-project/commit/dc3d4743277b47c0bc8cddbeb4b5e265252ee304
DIFF: https://github.com/llvm/llvm-project/commit/dc3d4743277b47c0bc8cddbeb4b5e265252ee304.diff

LOG: [SyntaxTree] Migrate `ParamatersAndQualifiers` to use the new List API

Fix: Add missing `List::getTerminationKind()`, `List::canBeEmpty()`,
`List::getDelimiterTokenKind()` for `CallArguments`.

Differential Revision: https://reviews.llvm.org/D86600

Added: 
    

Modified: 
    clang/include/clang/Tooling/Syntax/Nodes.h
    clang/lib/Tooling/Syntax/BuildTree.cpp
    clang/lib/Tooling/Syntax/Nodes.cpp
    clang/lib/Tooling/Syntax/Tree.cpp
    clang/unittests/Tooling/Syntax/BuildTreeTest.cpp

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Tooling/Syntax/Nodes.h b/clang/include/clang/Tooling/Syntax/Nodes.h
index 9a14aac130b4..38f936f603dd 100644
--- a/clang/include/clang/Tooling/Syntax/Nodes.h
+++ b/clang/include/clang/Tooling/Syntax/Nodes.h
@@ -99,6 +99,7 @@ enum class NodeKind : uint16_t {
   ParametersAndQualifiers,
   MemberPointer,
   UnqualifiedId,
+  ParameterDeclarationList,
   // Nested Name Specifiers.
   NestedNameSpecifier,
   GlobalNameSpecifier,
@@ -173,7 +174,7 @@ enum class NodeRole : uint8_t {
   ExplicitTemplateInstantiation_declaration,
   ArraySubscript_sizeExpression,
   TrailingReturnType_declarator,
-  ParametersAndQualifiers_parameter,
+  ParametersAndQualifiers_parameters,
   ParametersAndQualifiers_trailingReturn,
   IdExpression_id,
   IdExpression_qualifier,
@@ -988,6 +989,19 @@ class TrailingReturnType final : public Tree {
   SimpleDeclarator *declarator();
 };
 
+/// Models a `parameter-declaration-list` which appears within
+/// `parameters-and-qualifiers`. See C++ [dcl.fct]
+class ParameterDeclarationList final : public List {
+public:
+  ParameterDeclarationList() : List(NodeKind::ParameterDeclarationList) {}
+  static bool classof(const Node *N) {
+    return N->kind() == NodeKind::ParameterDeclarationList;
+  }
+  std::vector<SimpleDeclaration *> parameterDeclarations();
+  std::vector<List::ElementAndDelimiter<syntax::SimpleDeclaration>>
+  parametersAndCommas();
+};
+
 /// Parameter list for a function type and a trailing return type, if the
 /// function has one.
 /// E.g.:
@@ -1006,8 +1020,7 @@ class ParametersAndQualifiers final : public Tree {
     return N->kind() == NodeKind::ParametersAndQualifiers;
   }
   Leaf *lparen();
-  /// FIXME: use custom iterator instead of 'vector'.
-  std::vector<SimpleDeclaration *> parameters();
+  ParameterDeclarationList *parameters();
   Leaf *rparen();
   TrailingReturnType *trailingReturn();
 };

diff  --git a/clang/lib/Tooling/Syntax/BuildTree.cpp b/clang/lib/Tooling/Syntax/BuildTree.cpp
index 2e3dbc6c6fbd..deae46d58eee 100644
--- a/clang/lib/Tooling/Syntax/BuildTree.cpp
+++ b/clang/lib/Tooling/Syntax/BuildTree.cpp
@@ -1209,11 +1209,29 @@ class BuildTreeVisitor : public RecursiveASTVisitor<BuildTreeVisitor> {
     return true;
   }
 
+  syntax::ParameterDeclarationList *
+  buildParameterDeclarationList(ArrayRef<ParmVarDecl *> Params) {
+    for (auto *P : Params) {
+      Builder.markChild(P, syntax::NodeRole::List_element);
+      const auto *DelimiterToken = std::next(Builder.findToken(P->getEndLoc()));
+      if (DelimiterToken->kind() == clang::tok::TokenKind::comma)
+        Builder.markChildToken(DelimiterToken,
+                               syntax::NodeRole::List_delimiter);
+    }
+    auto *Parameters = new (allocator()) syntax::ParameterDeclarationList;
+    if (!Params.empty())
+      Builder.foldNode(Builder.getRange(Params.front()->getBeginLoc(),
+                                        Params.back()->getEndLoc()),
+                       Parameters, nullptr);
+    return Parameters;
+  }
+
   bool WalkUpFromFunctionTypeLoc(FunctionTypeLoc L) {
     Builder.markChildToken(L.getLParenLoc(), syntax::NodeRole::OpenParen);
-    for (auto *P : L.getParams()) {
-      Builder.markChild(P, syntax::NodeRole::ParametersAndQualifiers_parameter);
-    }
+
+    Builder.markChild(buildParameterDeclarationList(L.getParams()),
+                      syntax::NodeRole::ParametersAndQualifiers_parameters);
+
     Builder.markChildToken(L.getRParenLoc(), syntax::NodeRole::CloseParen);
     Builder.foldNode(Builder.getRange(L.getLParenLoc(), L.getEndLoc()),
                      new (allocator()) syntax::ParametersAndQualifiers, L);

diff  --git a/clang/lib/Tooling/Syntax/Nodes.cpp b/clang/lib/Tooling/Syntax/Nodes.cpp
index 6a7be0f0ea79..984cc5d1f1fc 100644
--- a/clang/lib/Tooling/Syntax/Nodes.cpp
+++ b/clang/lib/Tooling/Syntax/Nodes.cpp
@@ -134,6 +134,8 @@ raw_ostream &syntax::operator<<(raw_ostream &OS, NodeKind K) {
     return OS << "MemberExpression";
   case NodeKind::CallArguments:
     return OS << "CallArguments";
+  case NodeKind::ParameterDeclarationList:
+    return OS << "ParameterDeclarationList";
   }
   llvm_unreachable("unknown node kind");
 }
@@ -200,8 +202,8 @@ raw_ostream &syntax::operator<<(raw_ostream &OS, NodeRole R) {
     return OS << "ArraySubscript_sizeExpression";
   case syntax::NodeRole::TrailingReturnType_declarator:
     return OS << "TrailingReturnType_declarator";
-  case syntax::NodeRole::ParametersAndQualifiers_parameter:
-    return OS << "ParametersAndQualifiers_parameter";
+  case syntax::NodeRole::ParametersAndQualifiers_parameters:
+    return OS << "ParametersAndQualifiers_parameters";
   case syntax::NodeRole::ParametersAndQualifiers_trailingReturn:
     return OS << "ParametersAndQualifiers_trailingReturn";
   case syntax::NodeRole::IdExpression_id:
@@ -269,6 +271,29 @@ syntax::CallArguments::argumentsAndCommas() {
   return Children;
 }
 
+std::vector<syntax::SimpleDeclaration *>
+syntax::ParameterDeclarationList::parameterDeclarations() {
+  auto ParametersAsNodes = getElementsAsNodes();
+  std::vector<syntax::SimpleDeclaration *> Children;
+  for (const auto &ParameterAsNode : ParametersAsNodes) {
+    Children.push_back(llvm::cast<syntax::SimpleDeclaration>(ParameterAsNode));
+  }
+  return Children;
+}
+
+std::vector<syntax::List::ElementAndDelimiter<syntax::SimpleDeclaration>>
+syntax::ParameterDeclarationList::parametersAndCommas() {
+  auto ParametersAsNodesAndCommas = getElementsAsNodesAndDelimiters();
+  std::vector<syntax::List::ElementAndDelimiter<syntax::SimpleDeclaration>>
+      Children;
+  for (const auto &ParameterAsNodeAndComma : ParametersAsNodesAndCommas) {
+    Children.push_back(
+        {llvm::cast<syntax::SimpleDeclaration>(ParameterAsNodeAndComma.element),
+         ParameterAsNodeAndComma.delimiter});
+  }
+  return Children;
+}
+
 syntax::Expression *syntax::MemberExpression::object() {
   return cast_or_null<syntax::Expression>(
       findChild(syntax::NodeRole::MemberExpression_object));
@@ -574,14 +599,10 @@ syntax::Leaf *syntax::ParametersAndQualifiers::lparen() {
   return cast_or_null<syntax::Leaf>(findChild(syntax::NodeRole::OpenParen));
 }
 
-std::vector<syntax::SimpleDeclaration *>
+syntax::ParameterDeclarationList *
 syntax::ParametersAndQualifiers::parameters() {
-  std::vector<syntax::SimpleDeclaration *> Children;
-  for (auto *C = firstChild(); C; C = C->nextSibling()) {
-    if (C->role() == syntax::NodeRole::ParametersAndQualifiers_parameter)
-      Children.push_back(cast<syntax::SimpleDeclaration>(C));
-  }
-  return Children;
+  return cast_or_null<syntax::ParameterDeclarationList>(
+      findChild(syntax::NodeRole::ParametersAndQualifiers_parameters));
 }
 
 syntax::Leaf *syntax::ParametersAndQualifiers::rparen() {

diff  --git a/clang/lib/Tooling/Syntax/Tree.cpp b/clang/lib/Tooling/Syntax/Tree.cpp
index 7dbceedfb48f..777c24ef0cfa 100644
--- a/clang/lib/Tooling/Syntax/Tree.cpp
+++ b/clang/lib/Tooling/Syntax/Tree.cpp
@@ -359,6 +359,9 @@ clang::tok::TokenKind syntax::List::getDelimiterTokenKind() {
   switch (this->kind()) {
   case NodeKind::NestedNameSpecifier:
     return clang::tok::coloncolon;
+  case NodeKind::CallArguments:
+  case NodeKind::ParametersAndQualifiers:
+    return clang::tok::comma;
   default:
     llvm_unreachable("This is not a subclass of List, thus "
                      "getDelimiterTokenKind() cannot be called");
@@ -369,6 +372,9 @@ syntax::List::TerminationKind syntax::List::getTerminationKind() {
   switch (this->kind()) {
   case NodeKind::NestedNameSpecifier:
     return TerminationKind::Terminated;
+  case NodeKind::CallArguments:
+  case NodeKind::ParametersAndQualifiers:
+    return TerminationKind::Separated;
   default:
     llvm_unreachable("This is not a subclass of List, thus "
                      "getTerminationKind() cannot be called");
@@ -379,6 +385,10 @@ bool syntax::List::canBeEmpty() {
   switch (this->kind()) {
   case NodeKind::NestedNameSpecifier:
     return false;
+  case NodeKind::CallArguments:
+    return true;
+  case NodeKind::ParametersAndQualifiers:
+    return true;
   default:
     llvm_unreachable("This is not a subclass of List, thus canBeEmpty() "
                      "cannot be called");

diff  --git a/clang/unittests/Tooling/Syntax/BuildTreeTest.cpp b/clang/unittests/Tooling/Syntax/BuildTreeTest.cpp
index e386646ee667..f0fbbe6fe9d1 100644
--- a/clang/unittests/Tooling/Syntax/BuildTreeTest.cpp
+++ b/clang/unittests/Tooling/Syntax/BuildTreeTest.cpp
@@ -85,15 +85,16 @@ TranslationUnit Detached
   | |-'foo'
   | `-ParametersAndQualifiers
   |   |-'(' OpenParen
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'int'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   `-'a'
-  |   |-','
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'int'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   `-'b'
+  |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | |-SimpleDeclaration List_element
+  |   | | |-'int'
+  |   | | `-SimpleDeclarator SimpleDeclaration_declarator
+  |   | |   `-'a'
+  |   | |-',' List_delimiter
+  |   | `-SimpleDeclaration List_element
+  |   |   |-'int'
+  |   |   `-SimpleDeclarator SimpleDeclaration_declarator
+  |   |     `-'b'
   |   `-')' CloseParen
   `-CompoundStatement
     |-'{' OpenParen
@@ -3162,8 +3163,9 @@ TranslationUnit Detached
   | |-'_c'
   | `-ParametersAndQualifiers
   |   |-'(' OpenParen
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | `-'char'
+  |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | `-SimpleDeclaration List_element
+  |   |   `-'char'
   |   `-')' CloseParen
   `-';'
 )txt"));
@@ -3219,11 +3221,12 @@ SimpleDeclaration
 | |-'='
 | `-ParametersAndQualifiers
 |   |-'(' OpenParen
-|   |-SimpleDeclaration ParametersAndQualifiers_parameter
-|   | |-'const'
-|   | |-'X'
-|   | `-SimpleDeclarator SimpleDeclaration_declarator
-|   |   `-'&'
+|   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+|   | `-SimpleDeclaration List_element
+|   |   |-'const'
+|   |   |-'X'
+|   |   `-SimpleDeclarator SimpleDeclaration_declarator
+|   |     `-'&'
 |   `-')' CloseParen
 `-';'
 )txt"}));
@@ -3249,14 +3252,15 @@ UnknownDeclaration
   | |-'+'
   | `-ParametersAndQualifiers
   |   |-'(' OpenParen
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | `-'X'
-  |   |-','
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'const'
-  |   | |-'X'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   `-'&'
+  |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | |-SimpleDeclaration List_element
+  |   | | `-'X'
+  |   | |-',' List_delimiter
+  |   | `-SimpleDeclaration List_element
+  |   |   |-'const'
+  |   |   |-'X'
+  |   |   `-SimpleDeclarator SimpleDeclaration_declarator
+  |   |     `-'&'
   |   `-')' CloseParen
   `-';'
 )txt"}));
@@ -3885,16 +3889,17 @@ TranslationUnit Detached
   | |-'f'
   | `-ParametersAndQualifiers
   |   |-'(' OpenParen
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'int'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   |-'xs'
-  |   |   `-ArraySubscript
-  |   |     |-'[' OpenParen
-  |   |     |-'static'
-  |   |     |-IntegerLiteralExpression ArraySubscript_sizeExpression
-  |   |     | `-'10' LiteralToken
-  |   |     `-']' CloseParen
+  |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | `-SimpleDeclaration List_element
+  |   |   |-'int'
+  |   |   `-SimpleDeclarator SimpleDeclaration_declarator
+  |   |     |-'xs'
+  |   |     `-ArraySubscript
+  |   |       |-'[' OpenParen
+  |   |       |-'static'
+  |   |       |-IntegerLiteralExpression ArraySubscript_sizeExpression
+  |   |       | `-'10' LiteralToken
+  |   |       `-']' CloseParen
   |   `-')' CloseParen
   `-';'
 )txt"));
@@ -3933,10 +3938,11 @@ TranslationUnit Detached
 | | |-'func1'
 | | `-ParametersAndQualifiers
 | |   |-'(' OpenParen
-| |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-| |   | |-'int'
-| |   | `-SimpleDeclarator SimpleDeclaration_declarator
-| |   |   `-'a'
+| |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+| |   | `-SimpleDeclaration List_element
+| |   |   |-'int'
+| |   |   `-SimpleDeclarator SimpleDeclaration_declarator
+| |   |     `-'a'
 | |   `-')' CloseParen
 | `-';'
 |-SimpleDeclaration
@@ -3945,11 +3951,12 @@ TranslationUnit Detached
 | | |-'func2'
 | | `-ParametersAndQualifiers
 | |   |-'(' OpenParen
-| |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-| |   | |-'int'
-| |   | `-SimpleDeclarator SimpleDeclaration_declarator
-| |   |   |-'*'
-| |   |   `-'ap'
+| |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+| |   | `-SimpleDeclaration List_element
+| |   |   |-'int'
+| |   |   `-SimpleDeclarator SimpleDeclaration_declarator
+| |   |     |-'*'
+| |   |     `-'ap'
 | |   `-')' CloseParen
 | `-';'
 `-SimpleDeclaration
@@ -3958,15 +3965,16 @@ TranslationUnit Detached
   | |-'func3'
   | `-ParametersAndQualifiers
   |   |-'(' OpenParen
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'int'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   `-'a'
-  |   |-','
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'float'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   `-'b'
+  |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | |-SimpleDeclaration List_element
+  |   | | |-'int'
+  |   | | `-SimpleDeclarator SimpleDeclaration_declarator
+  |   | |   `-'a'
+  |   | |-',' List_delimiter
+  |   | `-SimpleDeclaration List_element
+  |   |   |-'float'
+  |   |   `-SimpleDeclarator SimpleDeclaration_declarator
+  |   |     `-'b'
   |   `-')' CloseParen
   `-';'
 )txt"));
@@ -3987,8 +3995,9 @@ TranslationUnit Detached
 | | |-'func1'
 | | `-ParametersAndQualifiers
 | |   |-'(' OpenParen
-| |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-| |   | `-'int'
+| |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+| |   | `-SimpleDeclaration List_element
+| |   |   `-'int'
 | |   `-')' CloseParen
 | `-';'
 |-SimpleDeclaration
@@ -3997,10 +4006,11 @@ TranslationUnit Detached
 | | |-'func2'
 | | `-ParametersAndQualifiers
 | |   |-'(' OpenParen
-| |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-| |   | |-'int'
-| |   | `-SimpleDeclarator SimpleDeclaration_declarator
-| |   |   `-'*'
+| |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+| |   | `-SimpleDeclaration List_element
+| |   |   |-'int'
+| |   |   `-SimpleDeclarator SimpleDeclaration_declarator
+| |   |     `-'*'
 | |   `-')' CloseParen
 | `-';'
 `-SimpleDeclaration
@@ -4009,11 +4019,103 @@ TranslationUnit Detached
   | |-'func3'
   | `-ParametersAndQualifiers
   |   |-'(' OpenParen
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | `-'int'
-  |   |-','
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | `-'float'
+  |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | |-SimpleDeclaration List_element
+  |   | | `-'int'
+  |   | |-',' List_delimiter
+  |   | `-SimpleDeclaration List_element
+  |   |   `-'float'
+  |   `-')' CloseParen
+  `-';'
+)txt"));
+}
+
+TEST_P(SyntaxTreeTest,
+       ParametersAndQualifiers_InVariadicFunctionTemplate_ParameterPack) {
+  if (!GetParam().isCXX11OrLater() || GetParam().hasDelayedTemplateParsing()) {
+    return;
+  }
+  EXPECT_TRUE(treeDumpEqualOnAnnotations(
+      R"cpp(
+template<typename T, typename... Args>
+[[void test(T , Args... );]]
+)cpp",
+      {R"txt(
+SimpleDeclaration
+|-'void'
+|-SimpleDeclarator SimpleDeclaration_declarator
+| |-'test'
+| `-ParametersAndQualifiers
+|   |-'(' OpenParen
+|   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+|   | |-SimpleDeclaration List_element
+|   | | `-'T'
+|   | |-',' List_delimiter
+|   | `-SimpleDeclaration List_element
+|   |   |-'Args'
+|   |   `-'...'
+|   `-')' CloseParen
+`-';'
+)txt"}));
+}
+
+TEST_P(SyntaxTreeTest,
+       ParametersAndQualifiers_InVariadicFunctionTemplate_NamedParameterPack) {
+  if (!GetParam().isCXX11OrLater() || GetParam().hasDelayedTemplateParsing()) {
+    return;
+  }
+  EXPECT_TRUE(treeDumpEqualOnAnnotations(
+      R"cpp(
+template<typename T, typename... Args>
+[[void test(T t, Args... args);]]
+)cpp",
+      {R"txt(
+SimpleDeclaration
+|-'void'
+|-SimpleDeclarator SimpleDeclaration_declarator
+| |-'test'
+| `-ParametersAndQualifiers
+|   |-'(' OpenParen
+|   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+|   | |-SimpleDeclaration List_element
+|   | | |-'T'
+|   | | `-SimpleDeclarator SimpleDeclaration_declarator
+|   | |   `-'t'
+|   | |-',' List_delimiter
+|   | `-SimpleDeclaration List_element
+|   |   |-'Args'
+|   |   |-'...'
+|   |   `-SimpleDeclarator SimpleDeclaration_declarator
+|   |     `-'args'
+|   `-')' CloseParen
+`-';'
+)txt"}));
+}
+
+TEST_P(SyntaxTreeTest,
+       ParametersAndQualifiers_InFreeFunctions_VariadicArguments) {
+  if (!GetParam().isCXX11OrLater()) {
+    return;
+  }
+  EXPECT_TRUE(treeDumpEqual(
+      R"cpp(
+void test(int , char ...);
+)cpp",
+      R"txt(
+TranslationUnit Detached
+`-SimpleDeclaration
+  |-'void'
+  |-SimpleDeclarator SimpleDeclaration_declarator
+  | |-'test'
+  | `-ParametersAndQualifiers
+  |   |-'(' OpenParen
+  |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | |-SimpleDeclaration List_element
+  |   | | `-'int'
+  |   | |-',' List_delimiter
+  |   | `-SimpleDeclaration List_element
+  |   |   `-'char'
+  |   |-'...'
   |   `-')' CloseParen
   `-';'
 )txt"));
@@ -4036,24 +4138,25 @@ TranslationUnit Detached
   | |-'func'
   | `-ParametersAndQualifiers
   |   |-'(' OpenParen
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'const'
-  |   | |-'int'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   `-'a'
-  |   |-','
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'volatile'
-  |   | |-'int'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   `-'b'
-  |   |-','
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'const'
-  |   | |-'volatile'
-  |   | |-'int'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   `-'c'
+  |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | |-SimpleDeclaration List_element
+  |   | | |-'const'
+  |   | | |-'int'
+  |   | | `-SimpleDeclarator SimpleDeclaration_declarator
+  |   | |   `-'a'
+  |   | |-',' List_delimiter
+  |   | |-SimpleDeclaration List_element
+  |   | | |-'volatile'
+  |   | | |-'int'
+  |   | | `-SimpleDeclarator SimpleDeclaration_declarator
+  |   | |   `-'b'
+  |   | |-',' List_delimiter
+  |   | `-SimpleDeclaration List_element
+  |   |   |-'const'
+  |   |   |-'volatile'
+  |   |   |-'int'
+  |   |   `-SimpleDeclarator SimpleDeclaration_declarator
+  |   |     `-'c'
   |   `-')' CloseParen
   `-';'
 )txt"));
@@ -4075,11 +4178,12 @@ TranslationUnit Detached
   | |-'func'
   | `-ParametersAndQualifiers
   |   |-'(' OpenParen
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'int'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   |-'&'
-  |   |   `-'a'
+  |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | `-SimpleDeclaration List_element
+  |   |   |-'int'
+  |   |   `-SimpleDeclarator SimpleDeclaration_declarator
+  |   |     |-'&'
+  |   |     `-'a'
   |   `-')' CloseParen
   `-';'
 )txt"));
@@ -4101,11 +4205,12 @@ TranslationUnit Detached
   | |-'func'
   | `-ParametersAndQualifiers
   |   |-'(' OpenParen
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'int'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   |-'&&'
-  |   |   `-'a'
+  |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | `-SimpleDeclaration List_element
+  |   |   |-'int'
+  |   |   `-SimpleDeclarator SimpleDeclaration_declarator
+  |   |     |-'&&'
+  |   |     `-'a'
   |   `-')' CloseParen
   `-';'
 )txt"));
@@ -4403,8 +4508,9 @@ TranslationUnit Detached
 | | | `-')' CloseParen
 | | `-ParametersAndQualifiers
 | |   |-'(' OpenParen
-| |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-| |   | `-'int'
+| |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+| |   | `-SimpleDeclaration List_element
+| |   |   `-'int'
 | |   `-')' CloseParen
 | `-';'
 `-SimpleDeclaration
@@ -4417,8 +4523,9 @@ TranslationUnit Detached
   | | `-')' CloseParen
   | `-ParametersAndQualifiers
   |   |-'(' OpenParen
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | `-'int'
+  |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | `-SimpleDeclaration List_element
+  |   |   `-'int'
   |   `-')' CloseParen
   `-';'
 )txt"));
@@ -4523,8 +4630,9 @@ TranslationUnit Detached
   |       | `-')' CloseParen
   |       `-ParametersAndQualifiers
   |         |-'(' OpenParen
-  |         |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |         | `-'int'
+  |         |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |         | `-SimpleDeclaration List_element
+  |         |   `-'int'
   |         |-')' CloseParen
   |         `-TrailingReturnType ParametersAndQualifiers_trailingReturn
   |           |-'->' ArrowToken
@@ -4617,11 +4725,12 @@ SimpleDeclaration
 | | `-')' CloseParen
 | `-ParametersAndQualifiers
 |   |-'(' OpenParen
-|   |-SimpleDeclaration ParametersAndQualifiers_parameter
-|   | |-'const'
-|   | |-'int'
-|   | `-SimpleDeclarator SimpleDeclaration_declarator
-|   |   `-'*'
+|   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+|   | `-SimpleDeclaration List_element
+|   |   |-'const'
+|   |   |-'int'
+|   |   `-SimpleDeclarator SimpleDeclaration_declarator
+|   |     `-'*'
 |   `-')' CloseParen
 `-';'
 )txt",
@@ -4641,14 +4750,15 @@ SimpleDeclaration
 | | `-')' CloseParen
 | `-ParametersAndQualifiers
 |   |-'(' OpenParen
-|   |-SimpleDeclaration ParametersAndQualifiers_parameter
-|   | |-'const'
-|   | |-'int'
-|   | `-SimpleDeclarator SimpleDeclaration_declarator
-|   |   `-'*'
-|   |-','
-|   |-SimpleDeclaration ParametersAndQualifiers_parameter
-|   | `-'char'
+|   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+|   | |-SimpleDeclaration List_element
+|   | | |-'const'
+|   | | |-'int'
+|   | | `-SimpleDeclarator SimpleDeclaration_declarator
+|   | |   `-'*'
+|   | |-',' List_delimiter
+|   | `-SimpleDeclaration List_element
+|   |   `-'char'
 |   `-')' CloseParen
 `-';'
 )txt"}));
@@ -4667,24 +4777,26 @@ TranslationUnit Detached
   | |-'x'
   | `-ParametersAndQualifiers
   |   |-'(' OpenParen
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'char'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   `-'a'
-  |   |-','
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'short'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   |-ParenDeclarator
-  |   |   | |-'(' OpenParen
-  |   |   | |-'*'
-  |   |   | |-'b'
-  |   |   | `-')' CloseParen
-  |   |   `-ParametersAndQualifiers
-  |   |     |-'(' OpenParen
-  |   |     |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   |     | `-'int'
-  |   |     `-')' CloseParen
+  |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | |-SimpleDeclaration List_element
+  |   | | |-'char'
+  |   | | `-SimpleDeclarator SimpleDeclaration_declarator
+  |   | |   `-'a'
+  |   | |-',' List_delimiter
+  |   | `-SimpleDeclaration List_element
+  |   |   |-'short'
+  |   |   `-SimpleDeclarator SimpleDeclaration_declarator
+  |   |     |-ParenDeclarator
+  |   |     | |-'(' OpenParen
+  |   |     | |-'*'
+  |   |     | |-'b'
+  |   |     | `-')' CloseParen
+  |   |     `-ParametersAndQualifiers
+  |   |       |-'(' OpenParen
+  |   |       |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   |       | `-SimpleDeclaration List_element
+  |   |       |   `-'int'
+  |   |       `-')' CloseParen
   |   `-')' CloseParen
   `-';'
 )txt"));
@@ -4703,40 +4815,43 @@ TranslationUnit Detached
   | |-'x'
   | `-ParametersAndQualifiers
   |   |-'(' OpenParen
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'char'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   `-'a'
-  |   |-','
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'short'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   |-ParenDeclarator
-  |   |   | |-'(' OpenParen
-  |   |   | |-'*'
-  |   |   | |-'b'
-  |   |   | `-')' CloseParen
-  |   |   `-ParametersAndQualifiers
-  |   |     |-'(' OpenParen
-  |   |     |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   |     | `-'int'
-  |   |     `-')' CloseParen
-  |   |-','
-  |   |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   | |-'long'
-  |   | `-SimpleDeclarator SimpleDeclaration_declarator
-  |   |   |-ParenDeclarator
-  |   |   | |-'(' OpenParen
-  |   |   | |-'*'
-  |   |   | |-'*'
-  |   |   | |-'c'
-  |   |   | `-')' CloseParen
-  |   |   `-ParametersAndQualifiers
-  |   |     |-'(' OpenParen
-  |   |     |-SimpleDeclaration ParametersAndQualifiers_parameter
-  |   |     | |-'long'
-  |   |     | `-'long'
-  |   |     `-')' CloseParen
+  |   |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | |-SimpleDeclaration List_element
+  |   | | |-'char'
+  |   | | `-SimpleDeclarator SimpleDeclaration_declarator
+  |   | |   `-'a'
+  |   | |-',' List_delimiter
+  |   | |-SimpleDeclaration List_element
+  |   | | |-'short'
+  |   | | `-SimpleDeclarator SimpleDeclaration_declarator
+  |   | |   |-ParenDeclarator
+  |   | |   | |-'(' OpenParen
+  |   | |   | |-'*'
+  |   | |   | |-'b'
+  |   | |   | `-')' CloseParen
+  |   | |   `-ParametersAndQualifiers
+  |   | |     |-'(' OpenParen
+  |   | |     |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   | |     | `-SimpleDeclaration List_element
+  |   | |     |   `-'int'
+  |   | |     `-')' CloseParen
+  |   | |-',' List_delimiter
+  |   | `-SimpleDeclaration List_element
+  |   |   |-'long'
+  |   |   `-SimpleDeclarator SimpleDeclaration_declarator
+  |   |     |-ParenDeclarator
+  |   |     | |-'(' OpenParen
+  |   |     | |-'*'
+  |   |     | |-'*'
+  |   |     | |-'c'
+  |   |     | `-')' CloseParen
+  |   |     `-ParametersAndQualifiers
+  |   |       |-'(' OpenParen
+  |   |       |-ParameterDeclarationList ParametersAndQualifiers_parameters
+  |   |       | `-SimpleDeclaration List_element
+  |   |       |   |-'long'
+  |   |       |   `-'long'
+  |   |       `-')' CloseParen
   |   `-')' CloseParen
   `-';'
 )txt"));


        


More information about the cfe-commits mailing list