diff options
author | Eduardo Caldas <ecaldas@google.com> | 2020-08-26 08:51:21 +0000 |
---|---|---|
committer | Eduardo Caldas <ecaldas@google.com> | 2020-08-26 16:46:19 +0000 |
commit | dc3d4743277b47c0bc8cddbeb4b5e265252ee304 (patch) | |
tree | 0c25b3d477b66e89de66a95ea31ae6f995c1915d /clang/lib/Tooling/Syntax/BuildTree.cpp | |
parent | ed07e1fe0ffdb2c1dbff26ff4cf7558e0c419737 (diff) | |
download | llvm-dc3d4743277b47c0bc8cddbeb4b5e265252ee304.zip llvm-dc3d4743277b47c0bc8cddbeb4b5e265252ee304.tar.gz llvm-dc3d4743277b47c0bc8cddbeb4b5e265252ee304.tar.bz2 |
[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
Diffstat (limited to 'clang/lib/Tooling/Syntax/BuildTree.cpp')
-rw-r--r-- | clang/lib/Tooling/Syntax/BuildTree.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/clang/lib/Tooling/Syntax/BuildTree.cpp b/clang/lib/Tooling/Syntax/BuildTree.cpp index 2e3dbc6..deae46d 100644 --- a/clang/lib/Tooling/Syntax/BuildTree.cpp +++ b/clang/lib/Tooling/Syntax/BuildTree.cpp @@ -1209,11 +1209,29 @@ public: 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); |