Author: Eduardo Caldas Date: 2020-10-01T13:56:31Z New Revision: 5011d43108d1de30a056d66e73fa19062e0e84b7
URL: https://github.com/llvm/llvm-project/commit/5011d43108d1de30a056d66e73fa19062e0e84b7 DIFF: https://github.com/llvm/llvm-project/commit/5011d43108d1de30a056d66e73fa19062e0e84b7.diff LOG: Migrate Declarators to use the List API After this change all nodes that have a delimited-list are using the `List` API. Implementation details: Let's look at a declaration with multiple declarators: `int a, b;` To generate a declarator list node we need to have the range of declarators: `a, b`: However, the `ClangAST` actually stores them as separate declarations: `int a ;` `int b;` We solve that by appropriately marking the declarators on each separate declaration in the `ClangAST` and then for the final declarator `int b`, shrinking its range to fit to the already marked declarators. Differential Revision: https://reviews.llvm.org/D88403 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/Synthesis.cpp clang/unittests/Tooling/Syntax/BuildTreeTest.cpp clang/unittests/Tooling/Syntax/SynthesisTest.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Tooling/Syntax/Nodes.h b/clang/include/clang/Tooling/Syntax/Nodes.h index 8b393c5423b4..ed4449adb0f0 100644 --- a/clang/include/clang/Tooling/Syntax/Nodes.h +++ b/clang/include/clang/Tooling/Syntax/Nodes.h @@ -99,10 +99,14 @@ enum class NodeKind : uint16_t { ParametersAndQualifiers, MemberPointer, UnqualifiedId, + + // Lists + DeclaratorList, ParameterDeclarationList, CallArguments, - // Nested Name Specifiers. NestedNameSpecifier, + + // Name Specifiers. GlobalNameSpecifier, DecltypeNameSpecifier, IdentifierNameSpecifier, @@ -179,6 +183,7 @@ enum class NodeRole : uint8_t { Member, Callee, Arguments, + Declarators }; /// For debugging purposes. raw_ostream &operator<<(raw_ostream &OS, NodeRole R); @@ -823,6 +828,17 @@ class LinkageSpecificationDeclaration final : public Declaration { } }; +class DeclaratorList final : public List { +public: + DeclaratorList() : List(NodeKind::DeclaratorList) {} + static bool classof(const Node *N) { + return N->getKind() == NodeKind::DeclaratorList; + } + std::vector<SimpleDeclarator *> getDeclarators(); + std::vector<List::ElementAndDelimiter<syntax::SimpleDeclarator>> + getDeclaratorsAndCommas(); +}; + /// Groups multiple declarators (e.g. variables, typedefs, etc.) together. All /// grouped declarators share the same declaration specifiers (e.g. 'int' or /// 'typedef'). diff --git a/clang/lib/Tooling/Syntax/BuildTree.cpp b/clang/lib/Tooling/Syntax/BuildTree.cpp index 4d365090abf1..e1ed55f2e4eb 100644 --- a/clang/lib/Tooling/Syntax/BuildTree.cpp +++ b/clang/lib/Tooling/Syntax/BuildTree.cpp @@ -397,6 +397,17 @@ class syntax::TreeBuilder { Mapping.add(From, New); } + /// Populate children for \p New list, assuming it covers tokens from a + /// subrange of \p SuperRange. + void foldList(ArrayRef<syntax::Token> SuperRange, syntax::List *New, + ASTPtr From) { + assert(New); + auto ListRange = Pending.shrinkToFitList(SuperRange); + Pending.foldChildren(Arena, ListRange, New); + if (From) + Mapping.add(From, New); + } + /// Notifies that we should not consume trailing semicolon when computing /// token range of \p D. void noticeDeclWithoutSemicolon(Decl *D); @@ -579,6 +590,35 @@ class syntax::TreeBuilder { It->second->setRole(Role); } + /// Shrink \p Range to a subrange that only contains tokens of a list. + /// List elements and delimiters should already have correct roles. + ArrayRef<syntax::Token> shrinkToFitList(ArrayRef<syntax::Token> Range) { + auto BeginChildren = Trees.lower_bound(Range.begin()); + assert((BeginChildren == Trees.end() || + BeginChildren->first == Range.begin()) && + "Range crosses boundaries of existing subtrees"); + + auto EndChildren = Trees.lower_bound(Range.end()); + assert( + (EndChildren == Trees.end() || EndChildren->first == Range.end()) && + "Range crosses boundaries of existing subtrees"); + + auto BelongsToList = [](decltype(Trees)::value_type KV) { + auto Role = KV.second->getRole(); + return Role == syntax::NodeRole::ListElement || + Role == syntax::NodeRole::ListDelimiter; + }; + + auto BeginListChildren = + std::find_if(BeginChildren, EndChildren, BelongsToList); + + auto EndListChildren = + std::find_if_not(BeginListChildren, EndChildren, BelongsToList); + + return ArrayRef<syntax::Token>(BeginListChildren->first, + EndListChildren->first); + } + /// Add \p Node to the forest and attach child nodes based on \p Tokens. void foldChildren(const syntax::Arena &A, ArrayRef<syntax::Token> Tokens, syntax::Tree *Node) { @@ -1513,14 +1553,31 @@ class BuildTreeVisitor : public RecursiveASTVisitor<BuildTreeVisitor> { // There doesn't have to be a declarator (e.g. `void foo(int)` only has // declaration, but no declarator). - if (Range.getBegin().isValid()) { - auto *N = new (allocator()) syntax::SimpleDeclarator; - Builder.foldNode(Builder.getRange(Range), N, nullptr); - Builder.markChild(N, syntax::NodeRole::Declarator); + if (!Range.getBegin().isValid()) { + Builder.markChild(new (allocator()) syntax::DeclaratorList, + syntax::NodeRole::Declarators); + Builder.foldNode(Builder.getDeclarationRange(D), + new (allocator()) syntax::SimpleDeclaration, D); + return true; } - if (Builder.isResponsibleForCreatingDeclaration(D)) { - Builder.foldNode(Builder.getDeclarationRange(D), + auto *N = new (allocator()) syntax::SimpleDeclarator; + Builder.foldNode(Builder.getRange(Range), N, nullptr); + Builder.markChild(N, syntax::NodeRole::ListElement); + + if (!Builder.isResponsibleForCreatingDeclaration(D)) { + // If this is not the last declarator in the declaration we expect a + // delimiter after it. + const auto *DelimiterToken = std::next(Builder.findToken(Range.getEnd())); + if (DelimiterToken->kind() == clang::tok::TokenKind::comma) + Builder.markChildToken(DelimiterToken, syntax::NodeRole::ListDelimiter); + } else { + auto *DL = new (allocator()) syntax::DeclaratorList; + auto DeclarationRange = Builder.getDeclarationRange(D); + Builder.foldList(DeclarationRange, DL, nullptr); + + Builder.markChild(DL, syntax::NodeRole::Declarators); + Builder.foldNode(DeclarationRange, new (allocator()) syntax::SimpleDeclaration, D); } return true; diff --git a/clang/lib/Tooling/Syntax/Nodes.cpp b/clang/lib/Tooling/Syntax/Nodes.cpp index 24b7a8596382..b4d1cfd75ac5 100644 --- a/clang/lib/Tooling/Syntax/Nodes.cpp +++ b/clang/lib/Tooling/Syntax/Nodes.cpp @@ -136,6 +136,8 @@ raw_ostream &syntax::operator<<(raw_ostream &OS, NodeKind K) { return OS << "CallArguments"; case NodeKind::ParameterDeclarationList: return OS << "ParameterDeclarationList"; + case NodeKind::DeclaratorList: + return OS << "DeclaratorList"; } llvm_unreachable("unknown node kind"); } @@ -218,6 +220,8 @@ raw_ostream &syntax::operator<<(raw_ostream &OS, NodeRole R) { return OS << "Callee"; case syntax::NodeRole::Arguments: return OS << "Arguments"; + case syntax::NodeRole::Declarators: + return OS << "Declarators"; } llvm_unreachable("invalid role"); } @@ -291,6 +295,29 @@ syntax::ParameterDeclarationList::getParametersAndCommas() { return Children; } +std::vector<syntax::SimpleDeclarator *> +syntax::DeclaratorList::getDeclarators() { + auto DeclaratorsAsNodes = getElementsAsNodes(); + std::vector<syntax::SimpleDeclarator *> Children; + for (const auto &DeclaratorAsNode : DeclaratorsAsNodes) { + Children.push_back(llvm::cast<syntax::SimpleDeclarator>(DeclaratorAsNode)); + } + return Children; +} + +std::vector<syntax::List::ElementAndDelimiter<syntax::SimpleDeclarator>> +syntax::DeclaratorList::getDeclaratorsAndCommas() { + auto DeclaratorsAsNodesAndCommas = getElementsAsNodesAndDelimiters(); + std::vector<syntax::List::ElementAndDelimiter<syntax::SimpleDeclarator>> + Children; + for (const auto &DeclaratorAsNodeAndComma : DeclaratorsAsNodesAndCommas) { + Children.push_back( + {llvm::cast<syntax::SimpleDeclarator>(DeclaratorAsNodeAndComma.element), + DeclaratorAsNodeAndComma.delimiter}); + } + return Children; +} + syntax::Expression *syntax::MemberExpression::getObject() { return cast_or_null<syntax::Expression>(findChild(syntax::NodeRole::Object)); } diff --git a/clang/lib/Tooling/Syntax/Synthesis.cpp b/clang/lib/Tooling/Syntax/Synthesis.cpp index e197c8d35bde..73452b709de9 100644 --- a/clang/lib/Tooling/Syntax/Synthesis.cpp +++ b/clang/lib/Tooling/Syntax/Synthesis.cpp @@ -183,6 +183,8 @@ syntax::Tree *allocateTree(syntax::Arena &A, syntax::NodeKind Kind) { return new (A.getAllocator()) syntax::CallArguments; case syntax::NodeKind::ParameterDeclarationList: return new (A.getAllocator()) syntax::ParameterDeclarationList; + case syntax::NodeKind::DeclaratorList: + return new (A.getAllocator()) syntax::DeclaratorList; } llvm_unreachable("unknown node kind"); } diff --git a/clang/unittests/Tooling/Syntax/BuildTreeTest.cpp b/clang/unittests/Tooling/Syntax/BuildTreeTest.cpp index ecb4a7ce73a5..6066aba4f716 100644 --- a/clang/unittests/Tooling/Syntax/BuildTreeTest.cpp +++ b/clang/unittests/Tooling/Syntax/BuildTreeTest.cpp @@ -92,21 +92,23 @@ void foo() {} TranslationUnit Detached |-SimpleDeclaration | |-'int' -| |-SimpleDeclarator Declarator -| | |-'main' -| | `-ParametersAndQualifiers -| | |-'(' OpenParen -| | `-')' CloseParen +| |-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | |-'main' +| | `-ParametersAndQualifiers +| | |-'(' OpenParen +| | `-')' CloseParen | `-CompoundStatement | |-'{' OpenParen | `-'}' CloseParen `-SimpleDeclaration |-'void' - |-SimpleDeclarator Declarator - | |-'foo' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'foo' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | `-')' CloseParen `-CompoundStatement |-'{' OpenParen `-'}' CloseParen @@ -123,16 +125,18 @@ int b = 42; TranslationUnit Detached |-SimpleDeclaration | |-'int' -| |-SimpleDeclarator Declarator -| | `-'a' +| |-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | `-'a' | `-';' `-SimpleDeclaration |-'int' - |-SimpleDeclarator Declarator - | |-'b' - | |-'=' - | `-IntegerLiteralExpression - | `-'42' LiteralToken + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'b' + | |-'=' + | `-IntegerLiteralExpression + | `-'42' LiteralToken `-';' )txt")); } @@ -146,21 +150,24 @@ void foo(int a, int b) {} TranslationUnit Detached `-SimpleDeclaration |-'void' - |-SimpleDeclarator Declarator - | |-'foo' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | |-SimpleDeclaration ListElement - | | | |-'int' - | | | `-SimpleDeclarator Declarator - | | | `-'a' - | | |-',' ListDelimiter - | | `-SimpleDeclaration ListElement - | | |-'int' - | | `-SimpleDeclarator Declarator - | | `-'b' - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'foo' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | |-SimpleDeclaration ListElement + | | | |-'int' + | | | `-DeclaratorList Declarators + | | | `-SimpleDeclarator ListElement + | | | `-'a' + | | |-',' ListDelimiter + | | `-SimpleDeclaration ListElement + | | |-'int' + | | `-DeclaratorList Declarators + | | `-SimpleDeclarator ListElement + | | `-'b' + | `-')' CloseParen `-CompoundStatement |-'{' OpenParen `-'}' CloseParen @@ -178,8 +185,9 @@ TranslationUnit Detached `-SimpleDeclaration |-'in\ t' - |-SimpleDeclarator Declarator - | `-'a' + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | `-'a' `-';' )txt")); } @@ -264,8 +272,9 @@ RangeBasedForStatement Statement |-'(' |-SimpleDeclaration | |-'int' -| |-SimpleDeclarator Declarator -| | `-'x' +| |-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | `-'x' | `-':' |-IdExpression | `-UnqualifiedId UnqualifiedId @@ -287,11 +296,12 @@ void test() { DeclarationStatement Statement |-SimpleDeclaration | |-'int' -| `-SimpleDeclarator Declarator -| |-'a' -| |-'=' -| `-IntegerLiteralExpression -| `-'10' LiteralToken +| `-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'a' +| |-'=' +| `-IntegerLiteralExpression +| `-'10' LiteralToken `-';' )txt"})); } @@ -391,11 +401,12 @@ void test() { TranslationUnit Detached `-SimpleDeclaration |-'void' - |-SimpleDeclarator Declarator - | |-'test' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'test' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | `-')' CloseParen `-CompoundStatement |-'{' OpenParen |-ExpressionStatement Statement @@ -642,8 +653,9 @@ SimpleDeclaration | | `-'n' | `-'::' ListDelimiter |-'S' -`-SimpleDeclarator Declarator - `-'s1' +`-DeclaratorList Declarators + `-SimpleDeclarator ListElement + `-'s1' )txt", R"txt( SimpleDeclaration @@ -652,8 +664,9 @@ SimpleDeclaration | | `-'n' | `-'::' ListDelimiter |-'S' -`-SimpleDeclarator Declarator - `-'s2' +`-DeclaratorList Declarators + `-SimpleDeclarator ListElement + `-'s2' )txt"})); } @@ -684,8 +697,9 @@ SimpleDeclaration | | `-'>' | `-'::' ListDelimiter |-'S' -`-SimpleDeclarator Declarator - `-'s1' +`-DeclaratorList Declarators + `-SimpleDeclarator ListElement + `-'s1' )txt", R"txt( SimpleDeclaration @@ -698,8 +712,9 @@ SimpleDeclaration | | `-'>' | `-'::' ListDelimiter |-'S' -`-SimpleDeclarator Declarator - `-'s2' +`-DeclaratorList Declarators + `-SimpleDeclarator ListElement + `-'s2' )txt"})); } @@ -1363,11 +1378,12 @@ TEST_P(BuildSyntaxTreeTest, StringLiteral_Raw) { "TranslationUnit Detached\n" "`-SimpleDeclaration\n" " |-'void'\n" - " |-SimpleDeclarator Declarator\n" - " | |-'test'\n" - " | `-ParametersAndQualifiers\n" - " | |-'(' OpenParen\n" - " | `-')' CloseParen\n" + " |-DeclaratorList Declarators\n" + " | `-SimpleDeclarator ListElement\n" + " | |-'test'\n" + " | `-ParametersAndQualifiers\n" + " | |-'(' OpenParen\n" + " | `-')' CloseParen\n" " `-CompoundStatement\n" " |-'{' OpenParen\n" " |-ExpressionStatement Statement\n" @@ -2875,21 +2891,23 @@ int *c, d; TranslationUnit Detached |-SimpleDeclaration | |-'int' -| |-SimpleDeclarator Declarator -| | |-'*' -| | `-'a' -| |-',' -| |-SimpleDeclarator Declarator -| | `-'b' +| |-DeclaratorList Declarators +| | |-SimpleDeclarator ListElement +| | | |-'*' +| | | `-'a' +| | |-',' ListDelimiter +| | `-SimpleDeclarator ListElement +| | `-'b' | `-';' `-SimpleDeclaration |-'int' - |-SimpleDeclarator Declarator - | |-'*' - | `-'c' - |-',' - |-SimpleDeclarator Declarator - | `-'d' + |-DeclaratorList Declarators + | |-SimpleDeclarator ListElement + | | |-'*' + | | `-'c' + | |-',' ListDelimiter + | `-SimpleDeclarator ListElement + | `-'d' `-';' )txt")); } @@ -2904,12 +2922,13 @@ TranslationUnit Detached `-SimpleDeclaration |-'typedef' |-'int' - |-SimpleDeclarator Declarator - | |-'*' - | `-'a' - |-',' - |-SimpleDeclarator Declarator - | `-'b' + |-DeclaratorList Declarators + | |-SimpleDeclarator ListElement + | | |-'*' + | | `-'a' + | |-',' ListDelimiter + | `-SimpleDeclarator ListElement + | `-'b' `-';' )txt")); } @@ -2926,33 +2945,36 @@ void foo() { TranslationUnit Detached `-SimpleDeclaration |-'void' - |-SimpleDeclarator Declarator - | |-'foo' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'foo' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | `-')' CloseParen `-CompoundStatement |-'{' OpenParen |-DeclarationStatement Statement | |-SimpleDeclaration | | |-'int' - | | |-SimpleDeclarator Declarator - | | | |-'*' - | | | `-'a' - | | |-',' - | | `-SimpleDeclarator Declarator - | | `-'b' + | | `-DeclaratorList Declarators + | | |-SimpleDeclarator ListElement + | | | |-'*' + | | | `-'a' + | | |-',' ListDelimiter + | | `-SimpleDeclarator ListElement + | | `-'b' | `-';' |-DeclarationStatement Statement | |-SimpleDeclaration | | |-'typedef' | | |-'int' - | | |-SimpleDeclarator Declarator - | | | |-'*' - | | | `-'ta' - | | |-',' - | | `-SimpleDeclarator Declarator - | | `-'tb' + | | `-DeclaratorList Declarators + | | |-SimpleDeclarator ListElement + | | | |-'*' + | | | `-'ta' + | | |-',' ListDelimiter + | | `-SimpleDeclarator ListElement + | | `-'tb' | `-';' `-'}' CloseParen )txt")); @@ -2979,8 +3001,9 @@ TranslationUnit Detached | |-'*' | `-')' |-')' - |-SimpleDeclarator Declarator - | `-'size_t' + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | `-'size_t' `-';' )txt")); } @@ -3174,9 +3197,10 @@ SimpleDeclaration SimpleDeclaration |-'struct' |-'Y' -|-SimpleDeclarator Declarator -| |-'*' -| `-'y1' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'*' +| `-'y1' `-';' )txt"})); } @@ -3202,9 +3226,10 @@ SimpleDeclaration |-'Y' |-'{' |-'}' -|-SimpleDeclarator Declarator -| |-'*' -| `-'y2' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'*' +| `-'y2' `-';' )txt", R"txt( @@ -3212,9 +3237,10 @@ SimpleDeclaration |-'struct' |-'{' |-'}' -|-SimpleDeclarator Declarator -| |-'*' -| `-'a1' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'*' +| `-'a1' `-';' )txt"})); } @@ -3233,11 +3259,12 @@ struct S { SimpleDeclaration |-'static' |-'void' -|-SimpleDeclarator Declarator -| |-'f' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| `-')' CloseParen +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'f' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| `-')' CloseParen `-CompoundStatement |-'{' OpenParen `-'}' CloseParen @@ -3258,15 +3285,16 @@ struct S { {R"txt( SimpleDeclaration |-'void' -|-SimpleDeclarator Declarator -| |-NestedNameSpecifier -| | |-IdentifierNameSpecifier ListElement -| | | `-'S' -| | `-'::' ListDelimiter -| |-'f' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| `-')' CloseParen +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-NestedNameSpecifier +| | |-IdentifierNameSpecifier ListElement +| | | `-'S' +| | `-'::' ListDelimiter +| |-'f' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| `-')' CloseParen `-CompoundStatement |-'{' OpenParen `-'}' CloseParen @@ -3285,12 +3313,13 @@ struct X { )cpp", {R"txt( SimpleDeclaration -|-SimpleDeclarator Declarator -| |-'operator' -| |-'int' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| `-')' CloseParen +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'operator' +| |-'int' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| `-')' CloseParen `-';' )txt"})); } @@ -3307,16 +3336,17 @@ unsigned operator "" _c(char); TranslationUnit Detached `-SimpleDeclaration |-'unsigned' - |-SimpleDeclarator Declarator - | |-'operator' - | |-'""' - | |-'_c' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | `-SimpleDeclaration ListElement - | | `-'char' - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'operator' + | |-'""' + | |-'_c' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | `-SimpleDeclaration ListElement + | | `-'char' + | `-')' CloseParen `-';' )txt")); } @@ -3341,13 +3371,14 @@ TranslationUnit Detached |-'>' `-SimpleDeclaration |-'unsigned' - |-SimpleDeclarator Declarator - | |-'operator' - | |-'""' - | |-'_t' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'operator' + | |-'""' + | |-'_t' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | `-')' CloseParen `-';' )txt")); } @@ -3365,19 +3396,21 @@ struct X { {R"txt( SimpleDeclaration |-'X' -|-SimpleDeclarator Declarator -| |-'&' -| |-'operator' -| |-'=' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-ParameterDeclarationList Parameters -| | `-SimpleDeclaration ListElement -| | |-'const' -| | |-'X' -| | `-SimpleDeclarator Declarator -| | `-'&' -| `-')' CloseParen +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'&' +| |-'operator' +| |-'=' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-ParameterDeclarationList Parameters +| | `-SimpleDeclaration ListElement +| | |-'const' +| | |-'X' +| | `-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | `-'&' +| `-')' CloseParen `-';' )txt"})); } @@ -3397,21 +3430,23 @@ UnknownDeclaration `-SimpleDeclaration |-'friend' |-'X' - |-SimpleDeclarator Declarator - | |-'operator' - | |-'+' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | |-SimpleDeclaration ListElement - | | | `-'X' - | | |-',' ListDelimiter - | | `-SimpleDeclaration ListElement - | | |-'const' - | | |-'X' - | | `-SimpleDeclarator Declarator - | | `-'&' - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'operator' + | |-'+' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | |-SimpleDeclaration ListElement + | | | `-'X' + | | |-',' ListDelimiter + | | `-SimpleDeclaration ListElement + | | |-'const' + | | |-'X' + | | `-DeclaratorList Declarators + | | `-SimpleDeclarator ListElement + | | `-'&' + | `-')' CloseParen `-';' )txt"})); } @@ -3463,11 +3498,12 @@ TranslationUnit Detached |-'>' `-SimpleDeclaration |-'T' - |-SimpleDeclarator Declarator - | |-'f' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'f' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | `-')' CloseParen `-';' )txt")); } @@ -3491,11 +3527,12 @@ TranslationUnit Detached |-'>' `-SimpleDeclaration |-'T' - |-SimpleDeclarator Declarator - | |-'var' - | |-'=' - | `-IntegerLiteralExpression - | `-'10' LiteralToken + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'var' + | |-'=' + | `-IntegerLiteralExpression + | `-'10' LiteralToken `-';' )txt")); } @@ -3522,11 +3559,12 @@ TemplateDeclaration Declaration `-SimpleDeclaration |-'static' |-'U' - |-SimpleDeclarator Declarator - | |-'f' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'f' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | `-')' CloseParen `-';' )txt"})); } @@ -3565,11 +3603,12 @@ TranslationUnit Detached | |-'>' | `-SimpleDeclaration | |-'U' - | |-SimpleDeclarator Declarator - | | |-'foo' - | | `-ParametersAndQualifiers - | | |-'(' OpenParen - | | `-')' CloseParen + | |-DeclaratorList Declarators + | | `-SimpleDeclarator ListElement + | | |-'foo' + | | `-ParametersAndQualifiers + | | |-'(' OpenParen + | | `-')' CloseParen | `-';' |-'}' `-';' @@ -3617,11 +3656,12 @@ TranslationUnit Detached | | `-SimpleDeclaration | | |-'static' | | |-'U' - | | |-SimpleDeclarator Declarator - | | | |-'f' - | | | `-ParametersAndQualifiers - | | | |-'(' OpenParen - | | | `-')' CloseParen + | | |-DeclaratorList Declarators + | | | `-SimpleDeclarator ListElement + | | | |-'f' + | | | `-ParametersAndQualifiers + | | | |-'(' OpenParen + | | | `-')' CloseParen | | `-';' | |-'}' | `-';' @@ -3834,8 +3874,9 @@ TranslationUnit Detached | |-'"C"' | `-SimpleDeclaration | |-'int' -| |-SimpleDeclarator Declarator -| | `-'a' +| |-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | `-'a' | `-';' `-LinkageSpecificationDeclaration |-'extern' @@ -3843,13 +3884,15 @@ TranslationUnit Detached |-'{' |-SimpleDeclaration | |-'int' - | |-SimpleDeclarator Declarator - | | `-'b' + | |-DeclaratorList Declarators + | | `-SimpleDeclarator ListElement + | | `-'b' | `-';' |-SimpleDeclaration | |-'int' - | |-SimpleDeclarator Declarator - | | `-'c' + | |-DeclaratorList Declarators + | | `-SimpleDeclarator ListElement + | | `-'c' | `-';' `-'}' )txt")); @@ -3876,11 +3919,12 @@ void test() { TranslationUnit Detached `-SimpleDeclaration |-'void' - |-SimpleDeclarator Declarator - | |-'test' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'test' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | `-')' CloseParen `-CompoundStatement |-'{' OpenParen |-CompoundStatement Statement @@ -3913,11 +3957,12 @@ void test() BRACES TranslationUnit Detached `-SimpleDeclaration |-'void' - |-SimpleDeclarator Declarator - | |-'test' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'test' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | `-')' CloseParen `-CompoundStatement |-'{' OpenParen unmodifiable `-'}' CloseParen unmodifiable @@ -3936,11 +3981,12 @@ void test() { TranslationUnit Detached `-SimpleDeclaration |-'void' - |-SimpleDeclarator Declarator - | |-'test' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'test' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | `-')' CloseParen `-CompoundStatement |-'{' OpenParen |-IfStatement Statement @@ -3980,11 +4026,12 @@ void test() { TranslationUnit Detached `-SimpleDeclaration |-'void' - |-SimpleDeclarator Declarator - | |-'test' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'test' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | `-')' CloseParen `-CompoundStatement |-'{' OpenParen |-ExpressionStatement Statement @@ -4018,11 +4065,12 @@ void test() { TranslationUnit Detached `-SimpleDeclaration |-'void' - |-SimpleDeclarator Declarator - | |-'test' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'test' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | `-')' CloseParen `-CompoundStatement |-'{' OpenParen |-IfStatement Statement @@ -4104,11 +4152,12 @@ void test() { {R"txt( SimpleDeclaration |-'S' -`-SimpleDeclarator Declarator - |-'s' - |-'=' - `-IntegerLiteralExpression - `-'1' LiteralToken +`-DeclaratorList Declarators + `-SimpleDeclarator ListElement + |-'s' + |-'=' + `-IntegerLiteralExpression + `-'1' LiteralToken )txt"})); } @@ -4133,36 +4182,39 @@ void test(){ {R"txt( SimpleDeclaration |-'S' -`-SimpleDeclarator Declarator - `-UnknownExpression - |-'s0' - |-'{' - `-'}' +`-DeclaratorList Declarators + `-SimpleDeclarator ListElement + `-UnknownExpression + |-'s0' + |-'{' + `-'}' )txt", R"txt( SimpleDeclaration |-'S' -`-SimpleDeclarator Declarator - `-UnknownExpression - |-'s1' - |-'{' - |-IntegerLiteralExpression - | `-'1' LiteralToken - `-'}' +`-DeclaratorList Declarators + `-SimpleDeclarator ListElement + `-UnknownExpression + |-'s1' + |-'{' + |-IntegerLiteralExpression + | `-'1' LiteralToken + `-'}' )txt", R"txt( SimpleDeclaration |-'S' -`-SimpleDeclarator Declarator - `-UnknownExpression - |-'s2' - |-'{' - |-IntegerLiteralExpression - | `-'1' LiteralToken - |-',' - |-FloatingLiteralExpression - | `-'2.' LiteralToken - `-'}' +`-DeclaratorList Declarators + `-SimpleDeclarator ListElement + `-UnknownExpression + |-'s2' + |-'{' + |-IntegerLiteralExpression + | `-'1' LiteralToken + |-',' + |-FloatingLiteralExpression + | `-'2.' LiteralToken + `-'}' )txt"})); } @@ -4187,39 +4239,42 @@ void test() { {R"txt( SimpleDeclaration |-'S' -`-SimpleDeclarator Declarator - |-'s0' - |-'=' - `-UnknownExpression - |-'{' - `-'}' +`-DeclaratorList Declarators + `-SimpleDeclarator ListElement + |-'s0' + |-'=' + `-UnknownExpression + |-'{' + `-'}' )txt", R"txt( SimpleDeclaration |-'S' -`-SimpleDeclarator Declarator - |-'s1' - |-'=' - `-UnknownExpression - |-'{' - |-IntegerLiteralExpression - | `-'1' LiteralToken - `-'}' +`-DeclaratorList Declarators + `-SimpleDeclarator ListElement + |-'s1' + |-'=' + `-UnknownExpression + |-'{' + |-IntegerLiteralExpression + | `-'1' LiteralToken + `-'}' )txt", R"txt( SimpleDeclaration |-'S' -`-SimpleDeclarator Declarator - |-'s2' - |-'=' - `-UnknownExpression - |-'{' - |-IntegerLiteralExpression - | `-'1' LiteralToken - |-',' - |-FloatingLiteralExpression - | `-'2.' LiteralToken - `-'}' +`-DeclaratorList Declarators + `-SimpleDeclarator ListElement + |-'s2' + |-'=' + `-UnknownExpression + |-'{' + |-IntegerLiteralExpression + | `-'1' LiteralToken + |-',' + |-FloatingLiteralExpression + | `-'2.' LiteralToken + `-'}' )txt"})); } @@ -4240,28 +4295,30 @@ struct S { {R"txt( SimpleDeclaration |-'S' -|-SimpleDeclarator Declarator -| `-UnknownExpression -| |-'s1' -| |-'(' -| |-IntegerLiteralExpression -| | `-'1' LiteralToken -| `-')' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| `-UnknownExpression +| |-'s1' +| |-'(' +| |-IntegerLiteralExpression +| | `-'1' LiteralToken +| `-')' `-';' )txt", R"txt( SimpleDeclaration |-'S' -|-SimpleDeclarator Declarator -| `-UnknownExpression -| |-'s2' -| |-'(' -| |-IntegerLiteralExpression -| | `-'1' LiteralToken -| |-',' -| |-FloatingLiteralExpression -| | `-'2.' LiteralToken -| `-')' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| `-UnknownExpression +| |-'s2' +| |-'(' +| |-IntegerLiteralExpression +| | `-'1' LiteralToken +| |-',' +| |-FloatingLiteralExpression +| | `-'2.' LiteralToken +| `-')' `-';' )txt"})); } @@ -4283,35 +4340,38 @@ struct S { {R"txt( SimpleDeclaration |-'S' -|-SimpleDeclarator Declarator -| `-'s0' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| `-'s0' `-';' )txt", R"txt( SimpleDeclaration |-'S' -|-SimpleDeclarator Declarator -| `-UnknownExpression -| |-'s1' -| |-'(' -| |-IntegerLiteralExpression -| | `-'1' LiteralToken -| `-')' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| `-UnknownExpression +| |-'s1' +| |-'(' +| |-IntegerLiteralExpression +| | `-'1' LiteralToken +| `-')' `-';' )txt", R"txt( SimpleDeclaration |-'S' -|-SimpleDeclarator Declarator -| `-UnknownExpression -| |-'s2' -| |-'(' -| |-IntegerLiteralExpression -| | `-'1' LiteralToken -| |-',' -| |-FloatingLiteralExpression -| | `-'2.' LiteralToken -| `-')' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| `-UnknownExpression +| |-'s2' +| |-'(' +| |-IntegerLiteralExpression +| | `-'1' LiteralToken +| |-',' +| |-FloatingLiteralExpression +| | `-'2.' LiteralToken +| `-')' `-';' )txt"})); } @@ -4518,13 +4578,14 @@ int a[10]; TranslationUnit Detached `-SimpleDeclaration |-'int' - |-SimpleDeclarator Declarator - | |-'a' - | `-ArraySubscript - | |-'[' OpenParen - | |-IntegerLiteralExpression Size - | | `-'10' LiteralToken - | `-']' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'a' + | `-ArraySubscript + | |-'[' OpenParen + | |-IntegerLiteralExpression Size + | | `-'10' LiteralToken + | `-']' CloseParen `-';' )txt")); } @@ -4538,23 +4599,24 @@ int b[1][2][3]; TranslationUnit Detached `-SimpleDeclaration |-'int' - |-SimpleDeclarator Declarator - | |-'b' - | |-ArraySubscript - | | |-'[' OpenParen - | | |-IntegerLiteralExpression Size - | | | `-'1' LiteralToken - | | `-']' CloseParen - | |-ArraySubscript - | | |-'[' OpenParen - | | |-IntegerLiteralExpression Size - | | | `-'2' LiteralToken - | | `-']' CloseParen - | `-ArraySubscript - | |-'[' OpenParen - | |-IntegerLiteralExpression Size - | | `-'3' LiteralToken - | `-']' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'b' + | |-ArraySubscript + | | |-'[' OpenParen + | | |-IntegerLiteralExpression Size + | | | `-'1' LiteralToken + | | `-']' CloseParen + | |-ArraySubscript + | | |-'[' OpenParen + | | |-IntegerLiteralExpression Size + | | | `-'2' LiteralToken + | | `-']' CloseParen + | `-ArraySubscript + | |-'[' OpenParen + | |-IntegerLiteralExpression Size + | | `-'3' LiteralToken + | `-']' CloseParen `-';' )txt")); } @@ -4568,24 +4630,25 @@ int c[] = {1,2,3}; TranslationUnit Detached `-SimpleDeclaration |-'int' - |-SimpleDeclarator Declarator - | |-'c' - | |-ArraySubscript - | | |-'[' OpenParen - | | `-']' CloseParen - | |-'=' - | `-UnknownExpression + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'c' + | |-ArraySubscript + | | |-'[' OpenParen + | | `-']' CloseParen + | |-'=' | `-UnknownExpression - | |-'{' - | |-IntegerLiteralExpression - | | `-'1' LiteralToken - | |-',' - | |-IntegerLiteralExpression - | | `-'2' LiteralToken - | |-',' - | |-IntegerLiteralExpression - | | `-'3' LiteralToken - | `-'}' + | `-UnknownExpression + | |-'{' + | |-IntegerLiteralExpression + | | `-'1' LiteralToken + | |-',' + | |-IntegerLiteralExpression + | | `-'2' LiteralToken + | |-',' + | |-IntegerLiteralExpression + | | `-'3' LiteralToken + | `-'}' `-';' )txt")); } @@ -4602,22 +4665,24 @@ void f(int xs[static 10]); TranslationUnit Detached `-SimpleDeclaration |-'void' - |-SimpleDeclarator Declarator - | |-'f' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | `-SimpleDeclaration ListElement - | | |-'int' - | | `-SimpleDeclarator Declarator - | | |-'xs' - | | `-ArraySubscript - | | |-'[' OpenParen - | | |-'static' - | | |-IntegerLiteralExpression Size - | | | `-'10' LiteralToken - | | `-']' CloseParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'f' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | `-SimpleDeclaration ListElement + | | |-'int' + | | `-DeclaratorList Declarators + | | `-SimpleDeclarator ListElement + | | |-'xs' + | | `-ArraySubscript + | | |-'[' OpenParen + | | |-'static' + | | |-IntegerLiteralExpression Size + | | | `-'10' LiteralToken + | | `-']' CloseParen + | `-')' CloseParen `-';' )txt")); } @@ -4631,11 +4696,12 @@ int func(); TranslationUnit Detached `-SimpleDeclaration |-'int' - |-SimpleDeclarator Declarator - | |-'func' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'func' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | `-')' CloseParen `-';' )txt")); } @@ -4651,48 +4717,55 @@ int func3(int a, float b); TranslationUnit Detached |-SimpleDeclaration | |-'int' -| |-SimpleDeclarator Declarator -| | |-'func1' -| | `-ParametersAndQualifiers -| | |-'(' OpenParen -| | |-ParameterDeclarationList Parameters -| | | `-SimpleDeclaration ListElement -| | | |-'int' -| | | `-SimpleDeclarator Declarator -| | | `-'a' -| | `-')' CloseParen +| |-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | |-'func1' +| | `-ParametersAndQualifiers +| | |-'(' OpenParen +| | |-ParameterDeclarationList Parameters +| | | `-SimpleDeclaration ListElement +| | | |-'int' +| | | `-DeclaratorList Declarators +| | | `-SimpleDeclarator ListElement +| | | `-'a' +| | `-')' CloseParen | `-';' |-SimpleDeclaration | |-'int' -| |-SimpleDeclarator Declarator -| | |-'func2' -| | `-ParametersAndQualifiers -| | |-'(' OpenParen -| | |-ParameterDeclarationList Parameters -| | | `-SimpleDeclaration ListElement -| | | |-'int' -| | | `-SimpleDeclarator Declarator -| | | |-'*' -| | | `-'ap' -| | `-')' CloseParen +| |-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | |-'func2' +| | `-ParametersAndQualifiers +| | |-'(' OpenParen +| | |-ParameterDeclarationList Parameters +| | | `-SimpleDeclaration ListElement +| | | |-'int' +| | | `-DeclaratorList Declarators +| | | `-SimpleDeclarator ListElement +| | | |-'*' +| | | `-'ap' +| | `-')' CloseParen | `-';' `-SimpleDeclaration |-'int' - |-SimpleDeclarator Declarator - | |-'func3' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | |-SimpleDeclaration ListElement - | | | |-'int' - | | | `-SimpleDeclarator Declarator - | | | `-'a' - | | |-',' ListDelimiter - | | `-SimpleDeclaration ListElement - | | |-'float' - | | `-SimpleDeclarator Declarator - | | `-'b' - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'func3' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | |-SimpleDeclaration ListElement + | | | |-'int' + | | | `-DeclaratorList Declarators + | | | `-SimpleDeclarator ListElement + | | | `-'a' + | | |-',' ListDelimiter + | | `-SimpleDeclaration ListElement + | | |-'float' + | | `-DeclaratorList Declarators + | | `-SimpleDeclarator ListElement + | | `-'b' + | `-')' CloseParen `-';' )txt")); } @@ -4708,41 +4781,45 @@ int func3(int, float); TranslationUnit Detached |-SimpleDeclaration | |-'int' -| |-SimpleDeclarator Declarator -| | |-'func1' -| | `-ParametersAndQualifiers -| | |-'(' OpenParen -| | |-ParameterDeclarationList Parameters -| | | `-SimpleDeclaration ListElement -| | | `-'int' -| | `-')' CloseParen +| |-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | |-'func1' +| | `-ParametersAndQualifiers +| | |-'(' OpenParen +| | |-ParameterDeclarationList Parameters +| | | `-SimpleDeclaration ListElement +| | | `-'int' +| | `-')' CloseParen | `-';' |-SimpleDeclaration | |-'int' -| |-SimpleDeclarator Declarator -| | |-'func2' -| | `-ParametersAndQualifiers -| | |-'(' OpenParen -| | |-ParameterDeclarationList Parameters -| | | `-SimpleDeclaration ListElement -| | | |-'int' -| | | `-SimpleDeclarator Declarator -| | | `-'*' -| | `-')' CloseParen +| |-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | |-'func2' +| | `-ParametersAndQualifiers +| | |-'(' OpenParen +| | |-ParameterDeclarationList Parameters +| | | `-SimpleDeclaration ListElement +| | | |-'int' +| | | `-DeclaratorList Declarators +| | | `-SimpleDeclarator ListElement +| | | `-'*' +| | `-')' CloseParen | `-';' `-SimpleDeclaration |-'int' - |-SimpleDeclarator Declarator - | |-'func3' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | |-SimpleDeclaration ListElement - | | | `-'int' - | | |-',' ListDelimiter - | | `-SimpleDeclaration ListElement - | | `-'float' - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'func3' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | |-SimpleDeclaration ListElement + | | | `-'int' + | | |-',' ListDelimiter + | | `-SimpleDeclaration ListElement + | | `-'float' + | `-')' CloseParen `-';' )txt")); } @@ -4760,11 +4837,12 @@ int func1([[int a = 1]]); ParameterDeclarationList Parameters `-SimpleDeclaration ListElement |-'int' - `-SimpleDeclarator Declarator - |-'a' - |-'=' - `-IntegerLiteralExpression - `-'1' LiteralToken + `-DeclaratorList Declarators + `-SimpleDeclarator ListElement + |-'a' + |-'=' + `-IntegerLiteralExpression + `-'1' LiteralToken )txt"})); } @@ -4781,25 +4859,28 @@ int func2([[int *ap, int a = 1, char c = '2']]); ParameterDeclarationList Parameters |-SimpleDeclaration ListElement | |-'int' -| `-SimpleDeclarator Declarator -| |-'*' -| `-'ap' +| `-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'*' +| `-'ap' |-',' ListDelimiter |-SimpleDeclaration ListElement | |-'int' -| `-SimpleDeclarator Declarator -| |-'a' -| |-'=' -| `-IntegerLiteralExpression -| `-'1' LiteralToken +| `-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'a' +| |-'=' +| `-IntegerLiteralExpression +| `-'1' LiteralToken |-',' ListDelimiter `-SimpleDeclaration ListElement |-'char' - `-SimpleDeclarator Declarator - |-'c' - |-'=' - `-CharacterLiteralExpression - `-''2'' LiteralToken + `-DeclaratorList Declarators + `-SimpleDeclarator ListElement + |-'c' + |-'=' + `-CharacterLiteralExpression + `-''2'' LiteralToken )txt"})); } @@ -4816,18 +4897,19 @@ template<typename T, typename... Args> {R"txt( SimpleDeclaration |-'void' -|-SimpleDeclarator Declarator -| |-'test' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-ParameterDeclarationList Parameters -| | |-SimpleDeclaration ListElement -| | | `-'T' -| | |-',' ListDelimiter -| | `-SimpleDeclaration ListElement -| | |-'Args' -| | `-'...' -| `-')' CloseParen +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'test' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-ParameterDeclarationList Parameters +| | |-SimpleDeclaration ListElement +| | | `-'T' +| | |-',' ListDelimiter +| | `-SimpleDeclaration ListElement +| | |-'Args' +| | `-'...' +| `-')' CloseParen `-';' )txt"})); } @@ -4845,22 +4927,25 @@ template<typename T, typename... Args> {R"txt( SimpleDeclaration |-'void' -|-SimpleDeclarator Declarator -| |-'test' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-ParameterDeclarationList Parameters -| | |-SimpleDeclaration ListElement -| | | |-'T' -| | | `-SimpleDeclarator Declarator -| | | `-'t' -| | |-',' ListDelimiter -| | `-SimpleDeclaration ListElement -| | |-'Args' -| | |-'...' -| | `-SimpleDeclarator Declarator -| | `-'args' -| `-')' CloseParen +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'test' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-ParameterDeclarationList Parameters +| | |-SimpleDeclaration ListElement +| | | |-'T' +| | | `-DeclaratorList Declarators +| | | `-SimpleDeclarator ListElement +| | | `-'t' +| | |-',' ListDelimiter +| | `-SimpleDeclaration ListElement +| | |-'Args' +| | |-'...' +| | `-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | `-'args' +| `-')' CloseParen `-';' )txt"})); } @@ -4878,18 +4963,19 @@ void test(int , char ...); TranslationUnit Detached `-SimpleDeclaration |-'void' - |-SimpleDeclarator Declarator - | |-'test' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | |-SimpleDeclaration ListElement - | | | `-'int' - | | |-',' ListDelimiter - | | `-SimpleDeclaration ListElement - | | `-'char' - | |-'...' - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'test' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | |-SimpleDeclaration ListElement + | | | `-'int' + | | |-',' ListDelimiter + | | `-SimpleDeclaration ListElement + | | `-'char' + | |-'...' + | `-')' CloseParen `-';' )txt")); } @@ -4907,30 +4993,34 @@ int func(const int a, volatile int b, const volatile int c); TranslationUnit Detached `-SimpleDeclaration |-'int' - |-SimpleDeclarator Declarator - | |-'func' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | |-SimpleDeclaration ListElement - | | | |-'const' - | | | |-'int' - | | | `-SimpleDeclarator Declarator - | | | `-'a' - | | |-',' ListDelimiter - | | |-SimpleDeclaration ListElement - | | | |-'volatile' - | | | |-'int' - | | | `-SimpleDeclarator Declarator - | | | `-'b' - | | |-',' ListDelimiter - | | `-SimpleDeclaration ListElement - | | |-'const' - | | |-'volatile' - | | |-'int' - | | `-SimpleDeclarator Declarator - | | `-'c' - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'func' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | |-SimpleDeclaration ListElement + | | | |-'const' + | | | |-'int' + | | | `-DeclaratorList Declarators + | | | `-SimpleDeclarator ListElement + | | | `-'a' + | | |-',' ListDelimiter + | | |-SimpleDeclaration ListElement + | | | |-'volatile' + | | | |-'int' + | | | `-DeclaratorList Declarators + | | | `-SimpleDeclarator ListElement + | | | `-'b' + | | |-',' ListDelimiter + | | `-SimpleDeclaration ListElement + | | |-'const' + | | |-'volatile' + | | |-'int' + | | `-DeclaratorList Declarators + | | `-SimpleDeclarator ListElement + | | `-'c' + | `-')' CloseParen `-';' )txt")); } @@ -4947,17 +5037,19 @@ int func(int& a); TranslationUnit Detached `-SimpleDeclaration |-'int' - |-SimpleDeclarator Declarator - | |-'func' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | `-SimpleDeclaration ListElement - | | |-'int' - | | `-SimpleDeclarator Declarator - | | |-'&' - | | `-'a' - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'func' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | `-SimpleDeclaration ListElement + | | |-'int' + | | `-DeclaratorList Declarators + | | `-SimpleDeclarator ListElement + | | |-'&' + | | `-'a' + | `-')' CloseParen `-';' )txt")); } @@ -4975,17 +5067,19 @@ int func(int&& a); TranslationUnit Detached `-SimpleDeclaration |-'int' - |-SimpleDeclarator Declarator - | |-'func' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | `-SimpleDeclaration ListElement - | | |-'int' - | | `-SimpleDeclarator Declarator - | | |-'&&' - | | `-'a' - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'func' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | `-SimpleDeclaration ListElement + | | |-'int' + | | `-DeclaratorList Declarators + | | `-SimpleDeclarator ListElement + | | |-'&&' + | | `-'a' + | `-')' CloseParen `-';' )txt")); } @@ -5008,11 +5102,12 @@ TranslationUnit Detached |-'{' |-SimpleDeclaration | |-'int' - | |-SimpleDeclarator Declarator - | | |-'a' - | | `-ParametersAndQualifiers - | | |-'(' OpenParen - | | `-')' CloseParen + | |-DeclaratorList Declarators + | | `-SimpleDeclarator ListElement + | | |-'a' + | | `-ParametersAndQualifiers + | | |-'(' OpenParen + | | `-')' CloseParen | `-';' |-'}' `-';' @@ -5035,35 +5130,38 @@ struct Test { {R"txt( SimpleDeclaration |-'int' -|-SimpleDeclarator Declarator -| |-'b' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-')' CloseParen -| `-'const' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'b' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-')' CloseParen +| `-'const' `-';' )txt", R"txt( SimpleDeclaration |-'int' -|-SimpleDeclarator Declarator -| |-'c' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-')' CloseParen -| `-'volatile' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'c' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-')' CloseParen +| `-'volatile' `-';' )txt", R"txt( SimpleDeclaration |-'int' -|-SimpleDeclarator Declarator -| |-'d' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-')' CloseParen -| |-'const' -| `-'volatile' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'d' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-')' CloseParen +| |-'const' +| `-'volatile' `-';' )txt"})); } @@ -5081,12 +5179,13 @@ struct Test { {R"txt( SimpleDeclaration |-'int' -|-SimpleDeclarator Declarator -| |-'e' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-')' CloseParen -| `-'&' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'e' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-')' CloseParen +| `-'&' `-';' )txt"})); } @@ -5104,12 +5203,13 @@ struct Test { {R"txt( SimpleDeclaration |-'int' -|-SimpleDeclarator Declarator -| |-'f' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-')' CloseParen -| `-'&&' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'f' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-')' CloseParen +| `-'&&' `-';' )txt"})); } @@ -5126,14 +5226,15 @@ auto foo() -> int; TranslationUnit Detached `-SimpleDeclaration |-'auto' - |-SimpleDeclarator Declarator - | |-'foo' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-')' CloseParen - | `-TrailingReturnType TrailingReturn - | |-'->' ArrowToken - | `-'int' + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'foo' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-')' CloseParen + | `-TrailingReturnType TrailingReturn + | |-'->' ArrowToken + | `-'int' `-';' )txt")); } @@ -5154,58 +5255,62 @@ struct MyException2 {}; {R"txt( SimpleDeclaration |-'int' -|-SimpleDeclarator Declarator -| |-'a' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-')' CloseParen -| |-'throw' -| |-'(' -| `-')' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'a' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-')' CloseParen +| |-'throw' +| |-'(' +| `-')' `-';' )txt", R"txt( SimpleDeclaration |-'int' -|-SimpleDeclarator Declarator -| |-'b' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-')' CloseParen -| |-'throw' -| |-'(' -| |-'...' -| `-')' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'b' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-')' CloseParen +| |-'throw' +| |-'(' +| |-'...' +| `-')' `-';' )txt", R"txt( SimpleDeclaration |-'int' -|-SimpleDeclarator Declarator -| |-'c' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-')' CloseParen -| |-'throw' -| |-'(' -| |-'MyException1' -| `-')' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'c' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-')' CloseParen +| |-'throw' +| |-'(' +| |-'MyException1' +| `-')' `-';' )txt", R"txt( SimpleDeclaration |-'int' -|-SimpleDeclarator Declarator -| |-'d' -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-')' CloseParen -| |-'throw' -| |-'(' -| |-'MyException1' -| |-',' -| |-'MyException2' -| `-')' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-'d' +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-')' CloseParen +| |-'throw' +| |-'(' +| |-'MyException1' +| |-',' +| |-'MyException2' +| `-')' `-';' )txt"})); } @@ -5223,25 +5328,27 @@ int b() noexcept(true); TranslationUnit Detached |-SimpleDeclaration | |-'int' -| |-SimpleDeclarator Declarator -| | |-'a' -| | `-ParametersAndQualifiers -| | |-'(' OpenParen -| | |-')' CloseParen -| | `-'noexcept' +| |-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | |-'a' +| | `-ParametersAndQualifiers +| | |-'(' OpenParen +| | |-')' CloseParen +| | `-'noexcept' | `-';' `-SimpleDeclaration |-'int' - |-SimpleDeclarator Declarator - | |-'b' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-')' CloseParen - | |-'noexcept' - | |-'(' - | |-BoolLiteralExpression - | | `-'true' LiteralToken - | `-')' + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'b' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-')' CloseParen + | |-'noexcept' + | |-'(' + | |-BoolLiteralExpression + | | `-'true' LiteralToken + | `-')' `-';' )txt")); } @@ -5258,50 +5365,54 @@ int *(d)(int); TranslationUnit Detached |-SimpleDeclaration | |-'int' -| |-SimpleDeclarator Declarator -| | `-ParenDeclarator -| | |-'(' OpenParen -| | |-'a' -| | `-')' CloseParen +| |-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | `-ParenDeclarator +| | |-'(' OpenParen +| | |-'a' +| | `-')' CloseParen | `-';' |-SimpleDeclaration | |-'int' -| |-SimpleDeclarator Declarator -| | |-'*' -| | `-ParenDeclarator -| | |-'(' OpenParen -| | |-'b' -| | `-')' CloseParen +| |-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | |-'*' +| | `-ParenDeclarator +| | |-'(' OpenParen +| | |-'b' +| | `-')' CloseParen | `-';' |-SimpleDeclaration | |-'int' -| |-SimpleDeclarator Declarator -| | |-ParenDeclarator -| | | |-'(' OpenParen -| | | |-'*' -| | | |-'c' -| | | `-')' CloseParen -| | `-ParametersAndQualifiers -| | |-'(' OpenParen -| | |-ParameterDeclarationList Parameters -| | | `-SimpleDeclaration ListElement -| | | `-'int' -| | `-')' CloseParen +| |-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | |-ParenDeclarator +| | | |-'(' OpenParen +| | | |-'*' +| | | |-'c' +| | | `-')' CloseParen +| | `-ParametersAndQualifiers +| | |-'(' OpenParen +| | |-ParameterDeclarationList Parameters +| | | `-SimpleDeclaration ListElement +| | | `-'int' +| | `-')' CloseParen | `-';' `-SimpleDeclaration |-'int' - |-SimpleDeclarator Declarator - | |-'*' - | |-ParenDeclarator - | | |-'(' OpenParen - | | |-'d' - | | `-')' CloseParen - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | `-SimpleDeclaration ListElement - | | `-'int' - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'*' + | |-ParenDeclarator + | | |-'(' OpenParen + | | |-'d' + | | `-')' CloseParen + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | `-SimpleDeclaration ListElement + | | `-'int' + | `-')' CloseParen `-';' )txt")); } @@ -5317,22 +5428,24 @@ TranslationUnit Detached |-SimpleDeclaration | |-'const' | |-'int' -| |-SimpleDeclarator Declarator -| | |-'west' -| | |-'=' -| | `-PrefixUnaryOperatorExpression -| | |-'-' OperatorToken -| | `-IntegerLiteralExpression Operand -| | `-'1' LiteralToken +| |-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | |-'west' +| | |-'=' +| | `-PrefixUnaryOperatorExpression +| | |-'-' OperatorToken +| | `-IntegerLiteralExpression Operand +| | `-'1' LiteralToken | `-';' `-SimpleDeclaration |-'int' |-'const' - |-SimpleDeclarator Declarator - | |-'east' - | |-'=' - | `-IntegerLiteralExpression - | `-'1' LiteralToken + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'east' + | |-'=' + | `-IntegerLiteralExpression + | `-'1' LiteralToken `-';' )txt")); } @@ -5348,11 +5461,12 @@ TranslationUnit Detached |-'const' |-'int' |-'const' - |-SimpleDeclarator Declarator - | |-'universal' - | |-'=' - | `-IntegerLiteralExpression - | `-'0' LiteralToken + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'universal' + | |-'=' + | `-IntegerLiteralExpression + | `-'0' LiteralToken `-';' )txt")); } @@ -5369,12 +5483,13 @@ TranslationUnit Detached |-'const' |-'int' |-'const' - |-SimpleDeclarator Declarator - | |-'*' - | |-'const' - | |-'*' - | |-'volatile' - | `-'b' + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'*' + | |-'const' + | |-'*' + | |-'volatile' + | `-'b' `-';' )txt")); } @@ -5391,30 +5506,31 @@ auto foo() -> auto(*)(int) -> double*; TranslationUnit Detached `-SimpleDeclaration |-'auto' - |-SimpleDeclarator Declarator - | |-'foo' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-')' CloseParen - | `-TrailingReturnType TrailingReturn - | |-'->' ArrowToken - | |-'auto' - | `-SimpleDeclarator Declarator - | |-ParenDeclarator - | | |-'(' OpenParen - | | |-'*' - | | `-')' CloseParen - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | `-SimpleDeclaration ListElement - | | `-'int' - | |-')' CloseParen - | `-TrailingReturnType TrailingReturn - | |-'->' ArrowToken - | |-'double' - | `-SimpleDeclarator Declarator - | `-'*' + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'foo' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-')' CloseParen + | `-TrailingReturnType TrailingReturn + | |-'->' ArrowToken + | |-'auto' + | `-SimpleDeclarator Declarator + | |-ParenDeclarator + | | |-'(' OpenParen + | | |-'*' + | | `-')' CloseParen + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | `-SimpleDeclaration ListElement + | | `-'int' + | |-')' CloseParen + | `-TrailingReturnType TrailingReturn + | |-'->' ArrowToken + | |-'double' + | `-SimpleDeclarator Declarator + | `-'*' `-';' )txt")); } @@ -5432,24 +5548,26 @@ struct X {}; {R"txt( SimpleDeclaration |-'int' -|-SimpleDeclarator Declarator -| |-MemberPointer -| | |-'X' -| | |-'::' -| | `-'*' -| `-'a' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-MemberPointer +| | |-'X' +| | |-'::' +| | `-'*' +| `-'a' `-';' )txt", R"txt( SimpleDeclaration |-'const' |-'int' -|-SimpleDeclarator Declarator -| |-MemberPointer -| | |-'X' -| | |-'::' -| | `-'*' -| `-'b' +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-MemberPointer +| | |-'X' +| | |-'::' +| | `-'*' +| `-'b' `-';' )txt"})); } @@ -5472,70 +5590,75 @@ struct X { {R"txt( SimpleDeclaration |-'void' -|-SimpleDeclarator Declarator -| |-ParenDeclarator -| | |-'(' OpenParen -| | |-MemberPointer -| | | |-'X' -| | | |-'::' -| | | `-'*' -| | |-'xp' -| | `-')' CloseParen -| `-ParametersAndQualifiers -| |-'(' OpenParen -| `-')' CloseParen +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-ParenDeclarator +| | |-'(' OpenParen +| | |-MemberPointer +| | | |-'X' +| | | |-'::' +| | | `-'*' +| | |-'xp' +| | `-')' CloseParen +| `-ParametersAndQualifiers +| |-'(' OpenParen +| `-')' CloseParen `-';' )txt", R"txt( SimpleDeclaration |-'void' -|-SimpleDeclarator Declarator -| |-ParenDeclarator -| | |-'(' OpenParen -| | |-MemberPointer -| | | |-'X' -| | | |-'::' -| | | `-'*' -| | |-'*' -| | |-'xpp' -| | `-')' CloseParen -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-ParameterDeclarationList Parameters -| | `-SimpleDeclaration ListElement -| | |-'const' -| | |-'int' -| | `-SimpleDeclarator Declarator -| | `-'*' -| `-')' CloseParen +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-ParenDeclarator +| | |-'(' OpenParen +| | |-MemberPointer +| | | |-'X' +| | | |-'::' +| | | `-'*' +| | |-'*' +| | |-'xpp' +| | `-')' CloseParen +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-ParameterDeclarationList Parameters +| | `-SimpleDeclaration ListElement +| | |-'const' +| | |-'int' +| | `-DeclaratorList Declarators +| | `-SimpleDeclarator ListElement +| | `-'*' +| `-')' CloseParen `-';' )txt", R"txt( SimpleDeclaration |-'void' -|-SimpleDeclarator Declarator -| |-ParenDeclarator -| | |-'(' OpenParen -| | |-'X' -| | |-'::' -| | |-MemberPointer -| | | |-'Y' -| | | |-'::' -| | | `-'*' -| | |-'xyp' -| | `-')' CloseParen -| `-ParametersAndQualifiers -| |-'(' OpenParen -| |-ParameterDeclarationList Parameters -| | |-SimpleDeclaration ListElement -| | | |-'const' -| | | |-'int' -| | | `-SimpleDeclarator Declarator -| | | `-'*' -| | |-',' ListDelimiter -| | `-SimpleDeclaration ListElement -| | `-'char' -| `-')' CloseParen +|-DeclaratorList Declarators +| `-SimpleDeclarator ListElement +| |-ParenDeclarator +| | |-'(' OpenParen +| | |-'X' +| | |-'::' +| | |-MemberPointer +| | | |-'Y' +| | | |-'::' +| | | `-'*' +| | |-'xyp' +| | `-')' CloseParen +| `-ParametersAndQualifiers +| |-'(' OpenParen +| |-ParameterDeclarationList Parameters +| | |-SimpleDeclaration ListElement +| | | |-'const' +| | | |-'int' +| | | `-DeclaratorList Declarators +| | | `-SimpleDeclarator ListElement +| | | `-'*' +| | |-',' ListDelimiter +| | `-SimpleDeclaration ListElement +| | `-'char' +| `-')' CloseParen `-';' )txt"})); } @@ -5549,31 +5672,34 @@ void x(char a, short (*b)(int)); TranslationUnit Detached `-SimpleDeclaration |-'void' - |-SimpleDeclarator Declarator - | |-'x' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | |-SimpleDeclaration ListElement - | | | |-'char' - | | | `-SimpleDeclarator Declarator - | | | `-'a' - | | |-',' ListDelimiter - | | `-SimpleDeclaration ListElement - | | |-'short' - | | `-SimpleDeclarator Declarator - | | |-ParenDeclarator - | | | |-'(' OpenParen - | | | |-'*' - | | | |-'b' - | | | `-')' CloseParen - | | `-ParametersAndQualifiers - | | |-'(' OpenParen - | | |-ParameterDeclarationList Parameters - | | | `-SimpleDeclaration ListElement - | | | `-'int' - | | `-')' CloseParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'x' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | |-SimpleDeclaration ListElement + | | | |-'char' + | | | `-DeclaratorList Declarators + | | | `-SimpleDeclarator ListElement + | | | `-'a' + | | |-',' ListDelimiter + | | `-SimpleDeclaration ListElement + | | |-'short' + | | `-DeclaratorList Declarators + | | `-SimpleDeclarator ListElement + | | |-ParenDeclarator + | | | |-'(' OpenParen + | | | |-'*' + | | | |-'b' + | | | `-')' CloseParen + | | `-ParametersAndQualifiers + | | |-'(' OpenParen + | | |-ParameterDeclarationList Parameters + | | | `-SimpleDeclaration ListElement + | | | `-'int' + | | `-')' CloseParen + | `-')' CloseParen `-';' )txt")); } @@ -5587,48 +5713,52 @@ void x(char a, short (*b)(int), long (**c)(long long)); TranslationUnit Detached `-SimpleDeclaration |-'void' - |-SimpleDeclarator Declarator - | |-'x' - | `-ParametersAndQualifiers - | |-'(' OpenParen - | |-ParameterDeclarationList Parameters - | | |-SimpleDeclaration ListElement - | | | |-'char' - | | | `-SimpleDeclarator Declarator - | | | `-'a' - | | |-',' ListDelimiter - | | |-SimpleDeclaration ListElement - | | | |-'short' - | | | `-SimpleDeclarator Declarator - | | | |-ParenDeclarator - | | | | |-'(' OpenParen - | | | | |-'*' - | | | | |-'b' - | | | | `-')' CloseParen - | | | `-ParametersAndQualifiers - | | | |-'(' OpenParen - | | | |-ParameterDeclarationList Parameters - | | | | `-SimpleDeclaration ListElement - | | | | `-'int' - | | | `-')' CloseParen - | | |-',' ListDelimiter - | | `-SimpleDeclaration ListElement - | | |-'long' - | | `-SimpleDeclarator Declarator - | | |-ParenDeclarator - | | | |-'(' OpenParen - | | | |-'*' - | | | |-'*' - | | | |-'c' - | | | `-')' CloseParen - | | `-ParametersAndQualifiers - | | |-'(' OpenParen - | | |-ParameterDeclarationList Parameters - | | | `-SimpleDeclaration ListElement - | | | |-'long' - | | | `-'long' - | | `-')' CloseParen - | `-')' CloseParen + |-DeclaratorList Declarators + | `-SimpleDeclarator ListElement + | |-'x' + | `-ParametersAndQualifiers + | |-'(' OpenParen + | |-ParameterDeclarationList Parameters + | | |-SimpleDeclaration ListElement + | | | |-'char' + | | | `-DeclaratorList Declarators + | | | `-SimpleDeclarator ListElement + | | | `-'a' + | | |-',' ListDelimiter + | | |-SimpleDeclaration ListElement + | | | |-'short' + | | | `-DeclaratorList Declarators + | | | `-SimpleDeclarator ListElement + | | | |-ParenDeclarator + | | | | |-'(' OpenParen + | | | | |-'*' + | | | | |-'b' + | | | | `-')' CloseParen + | | | `-ParametersAndQualifiers + | | | |-'(' OpenParen + | | | |-ParameterDeclarationList Parameters + | | | | `-SimpleDeclaration ListElement + | | | | `-'int' + | | | `-')' CloseParen + | | |-',' ListDelimiter + | | `-SimpleDeclaration ListElement + | | |-'long' + | | `-DeclaratorList Declarators + | | `-SimpleDeclarator ListElement + | | |-ParenDeclarator + | | | |-'(' OpenParen + | | | |-'*' + | | | |-'*' + | | | |-'c' + | | | `-')' CloseParen + | | `-ParametersAndQualifiers + | | |-'(' OpenParen + | | |-ParameterDeclarationList Parameters + | | | `-SimpleDeclaration ListElement + | | | |-'long' + | | | `-'long' + | | `-')' CloseParen + | `-')' CloseParen `-';' )txt")); } diff --git a/clang/unittests/Tooling/Syntax/SynthesisTest.cpp b/clang/unittests/Tooling/Syntax/SynthesisTest.cpp index 7f67b4e2e203..b8c2334d7188 100644 --- a/clang/unittests/Tooling/Syntax/SynthesisTest.cpp +++ b/clang/unittests/Tooling/Syntax/SynthesisTest.cpp @@ -188,8 +188,9 @@ TEST_P(SynthesisTest, DeepCopy_Original) { TranslationUnit Detached synthesized `-SimpleDeclaration synthesized |-'int' synthesized - |-SimpleDeclarator Declarator synthesized - | `-'a' synthesized + |-DeclaratorList Declarators synthesized + | `-SimpleDeclarator ListElement synthesized + | `-'a' synthesized `-';' synthesized )txt")); } @@ -201,8 +202,9 @@ TEST_P(SynthesisTest, DeepCopy_Child) { EXPECT_TRUE(treeDumpEqual(Copy, R"txt( SimpleDeclaration Detached synthesized |-'int' synthesized -|-SimpleDeclarator Declarator synthesized -| `-'a' synthesized +|-DeclaratorList Declarators synthesized +| `-SimpleDeclarator ListElement synthesized +| `-'a' synthesized `-';' synthesized )txt")); } @@ -225,11 +227,12 @@ void test() { TranslationUnit Detached synthesized `-SimpleDeclaration synthesized |-'void' synthesized - |-SimpleDeclarator Declarator synthesized - | |-'test' synthesized - | `-ParametersAndQualifiers synthesized - | |-'(' OpenParen synthesized - | `-')' CloseParen synthesized + |-DeclaratorList Declarators synthesized + | `-SimpleDeclarator ListElement synthesized + | |-'test' synthesized + | `-ParametersAndQualifiers synthesized + | |-'(' OpenParen synthesized + | `-')' CloseParen synthesized `-CompoundStatement synthesized |-'{' OpenParen synthesized |-IfStatement Statement synthesized _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits