aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Tooling/Syntax/BuildTree.cpp
diff options
context:
space:
mode:
authorEduardo Caldas <ecaldas@google.com>2020-08-26 08:51:21 +0000
committerEduardo Caldas <ecaldas@google.com>2020-08-26 16:46:19 +0000
commitdc3d4743277b47c0bc8cddbeb4b5e265252ee304 (patch)
tree0c25b3d477b66e89de66a95ea31ae6f995c1915d /clang/lib/Tooling/Syntax/BuildTree.cpp
parented07e1fe0ffdb2c1dbff26ff4cf7558e0c419737 (diff)
downloadllvm-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.cpp24
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);