Coverage Report

Created: 2020-11-24 06:42

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/include/clang/AST/ASTNodeTraverser.h
Line
Count
Source (jump to first uncovered line)
1
//===--- ASTNodeTraverser.h - Traversal of AST nodes ----------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file implements the AST traversal facilities.  Other users
10
// of this class may make use of the same traversal logic by inheriting it,
11
// similar to RecursiveASTVisitor.
12
//
13
//===----------------------------------------------------------------------===//
14
15
#ifndef LLVM_CLANG_AST_ASTNODETRAVERSER_H
16
#define LLVM_CLANG_AST_ASTNODETRAVERSER_H
17
18
#include "clang/AST/ASTTypeTraits.h"
19
#include "clang/AST/AttrVisitor.h"
20
#include "clang/AST/CommentVisitor.h"
21
#include "clang/AST/DeclVisitor.h"
22
#include "clang/AST/LocInfoType.h"
23
#include "clang/AST/StmtVisitor.h"
24
#include "clang/AST/TemplateArgumentVisitor.h"
25
#include "clang/AST/Type.h"
26
#include "clang/AST/TypeVisitor.h"
27
28
namespace clang {
29
30
class APValue;
31
32
/**
33
34
ASTNodeTraverser traverses the Clang AST for dumping purposes.
35
36
The `Derived::doGetNodeDelegate()` method is required to be an accessible member
37
which returns a reference of type `NodeDelegateType &` which implements the
38
following interface:
39
40
struct {
41
  template <typename Fn> void AddChild(Fn DoAddChild);
42
  template <typename Fn> void AddChild(StringRef Label, Fn DoAddChild);
43
44
  void Visit(const comments::Comment *C, const comments::FullComment *FC);
45
  void Visit(const Attr *A);
46
  void Visit(const TemplateArgument &TA, SourceRange R = {},
47
             const Decl *From = nullptr, StringRef Label = {});
48
  void Visit(const Stmt *Node);
49
  void Visit(const Type *T);
50
  void Visit(QualType T);
51
  void Visit(const Decl *D);
52
  void Visit(const CXXCtorInitializer *Init);
53
  void Visit(const OMPClause *C);
54
  void Visit(const BlockDecl::Capture &C);
55
  void Visit(const GenericSelectionExpr::ConstAssociation &A);
56
  void Visit(const APValue &Value, QualType Ty);
57
};
58
*/
59
template <typename Derived, typename NodeDelegateType>
60
class ASTNodeTraverser
61
    : public ConstDeclVisitor<Derived>,
62
      public ConstStmtVisitor<Derived>,
63
      public comments::ConstCommentVisitor<Derived, void,
64
                                           const comments::FullComment *>,
65
      public TypeVisitor<Derived>,
66
      public ConstAttrVisitor<Derived>,
67
      public ConstTemplateArgumentVisitor<Derived> {
68
69
  /// Indicates whether we should trigger deserialization of nodes that had
70
  /// not already been loaded.
71
  bool Deserialize = false;
72
73
  TraversalKind Traversal = TraversalKind::TK_AsIs;
74
75
118k
  NodeDelegateType &getNodeDelegate() {
76
118k
    return getDerived().doGetNodeDelegate();
77
118k
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::getNodeDelegate()
Line
Count
Source
75
111k
  NodeDelegateType &getNodeDelegate() {
76
111k
    return getDerived().doGetNodeDelegate();
77
111k
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::getNodeDelegate()
Line
Count
Source
75
7.86k
  NodeDelegateType &getNodeDelegate() {
76
7.86k
    return getDerived().doGetNodeDelegate();
77
7.86k
  }
78
118k
  Derived &getDerived() { return *static_cast<Derived *>(this); }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::getDerived()
Line
Count
Source
78
111k
  Derived &getDerived() { return *static_cast<Derived *>(this); }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::getDerived()
Line
Count
Source
78
7.86k
  Derived &getDerived() { return *static_cast<Derived *>(this); }
79
80
public:
81
1.39k
  void setDeserialize(bool D) { Deserialize = D; }
82
7
  bool getDeserialize() const { return Deserialize; }
83
84
  void SetTraversalKind(TraversalKind TK) { Traversal = TK; }
85
418
  TraversalKind GetTraversalKind() const { return Traversal; }
86
87
22.6k
  void Visit(const Decl *D) {
88
22.6k
    if (Traversal == TK_IgnoreUnlessSpelledInSource && 
D->isImplicit()0
)
89
0
      return;
90
91
22.6k
    getNodeDelegate().AddChild([=] {
92
22.6k
      getNodeDelegate().Visit(D);
93
22.6k
      if (!D)
94
4
        return;
95
96
22.6k
      ConstDeclVisitor<Derived>::Visit(D);
97
98
22.6k
      for (const auto &A : D->attrs())
99
1.80k
        Visit(A);
100
101
22.6k
      if (const comments::FullComment *Comment =
102
53
              D->getASTContext().getLocalCommentForDeclUncached(D))
103
53
        Visit(Comment, Comment);
104
105
      // Decls within functions are visited by the body.
106
22.6k
      if (!isa<FunctionDecl>(*D) && 
!isa<ObjCMethodDecl>(*D)18.5k
) {
107
18.3k
        if (Traversal != TK_AsIs) {
108
0
          if (const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D)) {
109
0
            auto SK = CTSD->getSpecializationKind();
110
0
            if (SK == TSK_ExplicitInstantiationDeclaration ||
111
0
                SK == TSK_ExplicitInstantiationDefinition)
112
0
              return;
113
18.3k
          }
114
0
        }
115
18.3k
        if (const auto *DC = dyn_cast<DeclContext>(D))
116
4.35k
          dumpDeclContext(DC);
117
18.3k
      }
118
22.6k
    });
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Decl const*)::'lambda'()::operator()() const
Line
Count
Source
91
21.3k
    getNodeDelegate().AddChild([=] {
92
21.3k
      getNodeDelegate().Visit(D);
93
21.3k
      if (!D)
94
3
        return;
95
96
21.3k
      ConstDeclVisitor<Derived>::Visit(D);
97
98
21.3k
      for (const auto &A : D->attrs())
99
1.78k
        Visit(A);
100
101
21.3k
      if (const comments::FullComment *Comment =
102
41
              D->getASTContext().getLocalCommentForDeclUncached(D))
103
41
        Visit(Comment, Comment);
104
105
      // Decls within functions are visited by the body.
106
21.3k
      if (!isa<FunctionDecl>(*D) && 
!isa<ObjCMethodDecl>(*D)17.5k
) {
107
17.3k
        if (Traversal != TK_AsIs) {
108
0
          if (const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D)) {
109
0
            auto SK = CTSD->getSpecializationKind();
110
0
            if (SK == TSK_ExplicitInstantiationDeclaration ||
111
0
                SK == TSK_ExplicitInstantiationDefinition)
112
0
              return;
113
17.3k
          }
114
0
        }
115
17.3k
        if (const auto *DC = dyn_cast<DeclContext>(D))
116
4.09k
          dumpDeclContext(DC);
117
17.3k
      }
118
21.3k
    });
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)::'lambda'()::operator()() const
Line
Count
Source
91
1.34k
    getNodeDelegate().AddChild([=] {
92
1.34k
      getNodeDelegate().Visit(D);
93
1.34k
      if (!D)
94
1
        return;
95
96
1.34k
      ConstDeclVisitor<Derived>::Visit(D);
97
98
1.34k
      for (const auto &A : D->attrs())
99
24
        Visit(A);
100
101
1.34k
      if (const comments::FullComment *Comment =
102
12
              D->getASTContext().getLocalCommentForDeclUncached(D))
103
12
        Visit(Comment, Comment);
104
105
      // Decls within functions are visited by the body.
106
1.34k
      if (!isa<FunctionDecl>(*D) && 
!isa<ObjCMethodDecl>(*D)1.02k
) {
107
1.00k
        if (Traversal != TK_AsIs) {
108
0
          if (const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D)) {
109
0
            auto SK = CTSD->getSpecializationKind();
110
0
            if (SK == TSK_ExplicitInstantiationDeclaration ||
111
0
                SK == TSK_ExplicitInstantiationDefinition)
112
0
              return;
113
1.00k
          }
114
0
        }
115
1.00k
        if (const auto *DC = dyn_cast<DeclContext>(D))
116
259
          dumpDeclContext(DC);
117
1.00k
      }
118
1.34k
    });
119
22.6k
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Decl const*)
Line
Count
Source
87
21.3k
  void Visit(const Decl *D) {
88
21.3k
    if (Traversal == TK_IgnoreUnlessSpelledInSource && 
D->isImplicit()0
)
89
0
      return;
90
91
21.3k
    getNodeDelegate().AddChild([=] {
92
21.3k
      getNodeDelegate().Visit(D);
93
21.3k
      if (!D)
94
21.3k
        return;
95
96
21.3k
      ConstDeclVisitor<Derived>::Visit(D);
97
98
21.3k
      for (const auto &A : D->attrs())
99
21.3k
        Visit(A);
100
101
21.3k
      if (const comments::FullComment *Comment =
102
21.3k
              D->getASTContext().getLocalCommentForDeclUncached(D))
103
21.3k
        Visit(Comment, Comment);
104
105
      // Decls within functions are visited by the body.
106
21.3k
      if (!isa<FunctionDecl>(*D) && !isa<ObjCMethodDecl>(*D)) {
107
21.3k
        if (Traversal != TK_AsIs) {
108
21.3k
          if (const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D)) {
109
21.3k
            auto SK = CTSD->getSpecializationKind();
110
21.3k
            if (SK == TSK_ExplicitInstantiationDeclaration ||
111
21.3k
                SK == TSK_ExplicitInstantiationDefinition)
112
21.3k
              return;
113
21.3k
          }
114
21.3k
        }
115
21.3k
        if (const auto *DC = dyn_cast<DeclContext>(D))
116
21.3k
          dumpDeclContext(DC);
117
21.3k
      }
118
21.3k
    });
119
21.3k
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Decl const*)
Line
Count
Source
87
1.34k
  void Visit(const Decl *D) {
88
1.34k
    if (Traversal == TK_IgnoreUnlessSpelledInSource && 
D->isImplicit()0
)
89
0
      return;
90
91
1.34k
    getNodeDelegate().AddChild([=] {
92
1.34k
      getNodeDelegate().Visit(D);
93
1.34k
      if (!D)
94
1.34k
        return;
95
96
1.34k
      ConstDeclVisitor<Derived>::Visit(D);
97
98
1.34k
      for (const auto &A : D->attrs())
99
1.34k
        Visit(A);
100
101
1.34k
      if (const comments::FullComment *Comment =
102
1.34k
              D->getASTContext().getLocalCommentForDeclUncached(D))
103
1.34k
        Visit(Comment, Comment);
104
105
      // Decls within functions are visited by the body.
106
1.34k
      if (!isa<FunctionDecl>(*D) && !isa<ObjCMethodDecl>(*D)) {
107
1.34k
        if (Traversal != TK_AsIs) {
108
1.34k
          if (const auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D)) {
109
1.34k
            auto SK = CTSD->getSpecializationKind();
110
1.34k
            if (SK == TSK_ExplicitInstantiationDeclaration ||
111
1.34k
                SK == TSK_ExplicitInstantiationDefinition)
112
1.34k
              return;
113
1.34k
          }
114
1.34k
        }
115
1.34k
        if (const auto *DC = dyn_cast<DeclContext>(D))
116
1.34k
          dumpDeclContext(DC);
117
1.34k
      }
118
1.34k
    });
119
1.34k
  }
120
121
29.1k
  void Visit(const Stmt *Node, StringRef Label = {}) {
122
29.1k
    getNodeDelegate().AddChild(Label, [=] {
123
29.1k
      const Stmt *S = Node;
124
125
29.1k
      if (auto *E = dyn_cast_or_null<Expr>(S)) {
126
21.1k
        switch (Traversal) {
127
21.1k
        case TK_AsIs:
128
21.1k
          break;
129
0
        case TK_IgnoreUnlessSpelledInSource:
130
0
          S = E->IgnoreUnlessSpelledInSource();
131
0
          break;
132
29.1k
        }
133
29.1k
      }
134
135
29.1k
      getNodeDelegate().Visit(S);
136
137
29.1k
      if (!S) {
138
849
        return;
139
849
      }
140
141
28.2k
      ConstStmtVisitor<Derived>::Visit(S);
142
143
      // Some statements have custom mechanisms for dumping their children.
144
28.2k
      if (isa<DeclStmt>(S) || 
isa<GenericSelectionExpr>(S)26.6k
)
145
1.66k
        return;
146
147
26.6k
      if (Traversal == TK_IgnoreUnlessSpelledInSource &&
148
0
          isa<LambdaExpr, CXXForRangeStmt, CallExpr>(S))
149
0
        return;
150
151
26.6k
      for (const Stmt *SubStmt : S->children())
152
22.7k
        Visit(SubStmt);
153
26.6k
    });
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()::operator()() const
Line
Count
Source
122
2.15k
    getNodeDelegate().AddChild(Label, [=] {
123
2.15k
      const Stmt *S = Node;
124
125
2.15k
      if (auto *E = dyn_cast_or_null<Expr>(S)) {
126
1.62k
        switch (Traversal) {
127
1.62k
        case TK_AsIs:
128
1.62k
          break;
129
0
        case TK_IgnoreUnlessSpelledInSource:
130
0
          S = E->IgnoreUnlessSpelledInSource();
131
0
          break;
132
2.15k
        }
133
2.15k
      }
134
135
2.15k
      getNodeDelegate().Visit(S);
136
137
2.15k
      if (!S) {
138
37
        return;
139
37
      }
140
141
2.11k
      ConstStmtVisitor<Derived>::Visit(S);
142
143
      // Some statements have custom mechanisms for dumping their children.
144
2.11k
      if (isa<DeclStmt>(S) || 
isa<GenericSelectionExpr>(S)2.04k
)
145
78
        return;
146
147
2.04k
      if (Traversal == TK_IgnoreUnlessSpelledInSource &&
148
0
          isa<LambdaExpr, CXXForRangeStmt, CallExpr>(S))
149
0
        return;
150
151
2.04k
      for (const Stmt *SubStmt : S->children())
152
1.80k
        Visit(SubStmt);
153
2.04k
    });
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)::'lambda'()::operator()() const
Line
Count
Source
122
26.9k
    getNodeDelegate().AddChild(Label, [=] {
123
26.9k
      const Stmt *S = Node;
124
125
26.9k
      if (auto *E = dyn_cast_or_null<Expr>(S)) {
126
19.5k
        switch (Traversal) {
127
19.5k
        case TK_AsIs:
128
19.5k
          break;
129
0
        case TK_IgnoreUnlessSpelledInSource:
130
0
          S = E->IgnoreUnlessSpelledInSource();
131
0
          break;
132
26.9k
        }
133
26.9k
      }
134
135
26.9k
      getNodeDelegate().Visit(S);
136
137
26.9k
      if (!S) {
138
812
        return;
139
812
      }
140
141
26.1k
      ConstStmtVisitor<Derived>::Visit(S);
142
143
      // Some statements have custom mechanisms for dumping their children.
144
26.1k
      if (isa<DeclStmt>(S) || 
isa<GenericSelectionExpr>(S)24.5k
)
145
1.58k
        return;
146
147
24.5k
      if (Traversal == TK_IgnoreUnlessSpelledInSource &&
148
0
          isa<LambdaExpr, CXXForRangeStmt, CallExpr>(S))
149
0
        return;
150
151
24.5k
      for (const Stmt *SubStmt : S->children())
152
20.9k
        Visit(SubStmt);
153
24.5k
    });
154
29.1k
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)
Line
Count
Source
121
2.15k
  void Visit(const Stmt *Node, StringRef Label = {}) {
122
2.15k
    getNodeDelegate().AddChild(Label, [=] {
123
2.15k
      const Stmt *S = Node;
124
125
2.15k
      if (auto *E = dyn_cast_or_null<Expr>(S)) {
126
2.15k
        switch (Traversal) {
127
2.15k
        case TK_AsIs:
128
2.15k
          break;
129
2.15k
        case TK_IgnoreUnlessSpelledInSource:
130
2.15k
          S = E->IgnoreUnlessSpelledInSource();
131
2.15k
          break;
132
2.15k
        }
133
2.15k
      }
134
135
2.15k
      getNodeDelegate().Visit(S);
136
137
2.15k
      if (!S) {
138
2.15k
        return;
139
2.15k
      }
140
141
2.15k
      ConstStmtVisitor<Derived>::Visit(S);
142
143
      // Some statements have custom mechanisms for dumping their children.
144
2.15k
      if (isa<DeclStmt>(S) || isa<GenericSelectionExpr>(S))
145
2.15k
        return;
146
147
2.15k
      if (Traversal == TK_IgnoreUnlessSpelledInSource &&
148
2.15k
          isa<LambdaExpr, CXXForRangeStmt, CallExpr>(S))
149
2.15k
        return;
150
151
2.15k
      for (const Stmt *SubStmt : S->children())
152
2.15k
        Visit(SubStmt);
153
2.15k
    });
154
2.15k
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Stmt const*, llvm::StringRef)
Line
Count
Source
121
26.9k
  void Visit(const Stmt *Node, StringRef Label = {}) {
122
26.9k
    getNodeDelegate().AddChild(Label, [=] {
123
26.9k
      const Stmt *S = Node;
124
125
26.9k
      if (auto *E = dyn_cast_or_null<Expr>(S)) {
126
26.9k
        switch (Traversal) {
127
26.9k
        case TK_AsIs:
128
26.9k
          break;
129
26.9k
        case TK_IgnoreUnlessSpelledInSource:
130
26.9k
          S = E->IgnoreUnlessSpelledInSource();
131
26.9k
          break;
132
26.9k
        }
133
26.9k
      }
134
135
26.9k
      getNodeDelegate().Visit(S);
136
137
26.9k
      if (!S) {
138
26.9k
        return;
139
26.9k
      }
140
141
26.9k
      ConstStmtVisitor<Derived>::Visit(S);
142
143
      // Some statements have custom mechanisms for dumping their children.
144
26.9k
      if (isa<DeclStmt>(S) || isa<GenericSelectionExpr>(S))
145
26.9k
        return;
146
147
26.9k
      if (Traversal == TK_IgnoreUnlessSpelledInSource &&
148
26.9k
          isa<LambdaExpr, CXXForRangeStmt, CallExpr>(S))
149
26.9k
        return;
150
151
26.9k
      for (const Stmt *SubStmt : S->children())
152
26.9k
        Visit(SubStmt);
153
26.9k
    });
154
26.9k
  }
155
156
4.32k
  void Visit(QualType T) {
157
4.32k
    SplitQualType SQT = T.split();
158
4.32k
    if (!SQT.Quals.hasQualifiers())
159
4.31k
      return Visit(SQT.Ty);
160
161
7
    getNodeDelegate().AddChild([=] {
162
7
      getNodeDelegate().Visit(T);
163
7
      Visit(T.split().Ty);
164
7
    });
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::QualType)::'lambda'()::operator()() const
Line
Count
Source
161
6
    getNodeDelegate().AddChild([=] {
162
6
      getNodeDelegate().Visit(T);
163
6
      Visit(T.split().Ty);
164
6
    });
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::QualType)::'lambda'()::operator()() const
Line
Count
Source
161
1
    getNodeDelegate().AddChild([=] {
162
1
      getNodeDelegate().Visit(T);
163
1
      Visit(T.split().Ty);
164
1
    });
165
7
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::QualType)
Line
Count
Source
156
4.00k
  void Visit(QualType T) {
157
4.00k
    SplitQualType SQT = T.split();
158
4.00k
    if (!SQT.Quals.hasQualifiers())
159
4.00k
      return Visit(SQT.Ty);
160
161
6
    getNodeDelegate().AddChild([=] {
162
6
      getNodeDelegate().Visit(T);
163
6
      Visit(T.split().Ty);
164
6
    });
165
6
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::QualType)
Line
Count
Source
156
319
  void Visit(QualType T) {
157
319
    SplitQualType SQT = T.split();
158
319
    if (!SQT.Quals.hasQualifiers())
159
318
      return Visit(SQT.Ty);
160
161
1
    getNodeDelegate().AddChild([=] {
162
1
      getNodeDelegate().Visit(T);
163
1
      Visit(T.split().Ty);
164
1
    });
165
1
  }
166
167
4.34k
  void Visit(const Type *T) {
168
4.34k
    getNodeDelegate().AddChild([=] {
169
4.34k
      getNodeDelegate().Visit(T);
170
4.34k
      if (!T)
171
1
        return;
172
4.34k
      TypeVisitor<Derived>::Visit(T);
173
174
4.34k
      QualType SingleStepDesugar =
175
4.34k
          T->getLocallyUnqualifiedSingleStepDesugaredType();
176
4.34k
      if (SingleStepDesugar != QualType(T, 0))
177
139
        Visit(SingleStepDesugar);
178
4.34k
    });
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Type const*)::'lambda'()::operator()() const
Line
Count
Source
168
4.02k
    getNodeDelegate().AddChild([=] {
169
4.02k
      getNodeDelegate().Visit(T);
170
4.02k
      if (!T)
171
0
        return;
172
4.02k
      TypeVisitor<Derived>::Visit(T);
173
174
4.02k
      QualType SingleStepDesugar =
175
4.02k
          T->getLocallyUnqualifiedSingleStepDesugaredType();
176
4.02k
      if (SingleStepDesugar != QualType(T, 0))
177
132
        Visit(SingleStepDesugar);
178
4.02k
    });
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Type const*)::'lambda'()::operator()() const
Line
Count
Source
168
322
    getNodeDelegate().AddChild([=] {
169
322
      getNodeDelegate().Visit(T);
170
322
      if (!T)
171
1
        return;
172
321
      TypeVisitor<Derived>::Visit(T);
173
174
321
      QualType SingleStepDesugar =
175
321
          T->getLocallyUnqualifiedSingleStepDesugaredType();
176
321
      if (SingleStepDesugar != QualType(T, 0))
177
7
        Visit(SingleStepDesugar);
178
321
    });
179
4.34k
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Type const*)
Line
Count
Source
167
4.02k
  void Visit(const Type *T) {
168
4.02k
    getNodeDelegate().AddChild([=] {
169
4.02k
      getNodeDelegate().Visit(T);
170
4.02k
      if (!T)
171
4.02k
        return;
172
4.02k
      TypeVisitor<Derived>::Visit(T);
173
174
4.02k
      QualType SingleStepDesugar =
175
4.02k
          T->getLocallyUnqualifiedSingleStepDesugaredType();
176
4.02k
      if (SingleStepDesugar != QualType(T, 0))
177
4.02k
        Visit(SingleStepDesugar);
178
4.02k
    });
179
4.02k
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Type const*)
Line
Count
Source
167
322
  void Visit(const Type *T) {
168
322
    getNodeDelegate().AddChild([=] {
169
322
      getNodeDelegate().Visit(T);
170
322
      if (!T)
171
322
        return;
172
322
      TypeVisitor<Derived>::Visit(T);
173
174
322
      QualType SingleStepDesugar =
175
322
          T->getLocallyUnqualifiedSingleStepDesugaredType();
176
322
      if (SingleStepDesugar != QualType(T, 0))
177
322
        Visit(SingleStepDesugar);
178
322
    });
179
322
  }
180
181
1.82k
  void Visit(const Attr *A) {
182
1.82k
    getNodeDelegate().AddChild([=] {
183
1.82k
      getNodeDelegate().Visit(A);
184
1.82k
      ConstAttrVisitor<Derived>::Visit(A);
185
1.82k
    });
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Attr const*)::'lambda'()::operator()() const
Line
Count
Source
182
1.80k
    getNodeDelegate().AddChild([=] {
183
1.80k
      getNodeDelegate().Visit(A);
184
1.80k
      ConstAttrVisitor<Derived>::Visit(A);
185
1.80k
    });
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Attr const*)::'lambda'()::operator()() const
Line
Count
Source
182
24
    getNodeDelegate().AddChild([=] {
183
24
      getNodeDelegate().Visit(A);
184
24
      ConstAttrVisitor<Derived>::Visit(A);
185
24
    });
186
1.82k
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::Attr const*)
Line
Count
Source
181
1.80k
  void Visit(const Attr *A) {
182
1.80k
    getNodeDelegate().AddChild([=] {
183
1.80k
      getNodeDelegate().Visit(A);
184
1.80k
      ConstAttrVisitor<Derived>::Visit(A);
185
1.80k
    });
186
1.80k
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::Attr const*)
Line
Count
Source
181
24
  void Visit(const Attr *A) {
182
24
    getNodeDelegate().AddChild([=] {
183
24
      getNodeDelegate().Visit(A);
184
24
      ConstAttrVisitor<Derived>::Visit(A);
185
24
    });
186
24
  }
187
188
121
  void Visit(const CXXCtorInitializer *Init) {
189
121
    if (Traversal == TK_IgnoreUnlessSpelledInSource && 
!Init->isWritten()0
)
190
0
      return;
191
121
    getNodeDelegate().AddChild([=] {
192
121
      getNodeDelegate().Visit(Init);
193
121
      Visit(Init->getInit());
194
121
    });
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::CXXCtorInitializer const*)::'lambda'()::operator()() const
Line
Count
Source
191
118
    getNodeDelegate().AddChild([=] {
192
118
      getNodeDelegate().Visit(Init);
193
118
      Visit(Init->getInit());
194
118
    });
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::CXXCtorInitializer const*)::'lambda'()::operator()() const
Line
Count
Source
191
3
    getNodeDelegate().AddChild([=] {
192
3
      getNodeDelegate().Visit(Init);
193
3
      Visit(Init->getInit());
194
3
    });
195
121
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::CXXCtorInitializer const*)
Line
Count
Source
188
118
  void Visit(const CXXCtorInitializer *Init) {
189
118
    if (Traversal == TK_IgnoreUnlessSpelledInSource && 
!Init->isWritten()0
)
190
0
      return;
191
118
    getNodeDelegate().AddChild([=] {
192
118
      getNodeDelegate().Visit(Init);
193
118
      Visit(Init->getInit());
194
118
    });
195
118
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::CXXCtorInitializer const*)
Line
Count
Source
188
3
  void Visit(const CXXCtorInitializer *Init) {
189
3
    if (Traversal == TK_IgnoreUnlessSpelledInSource && 
!Init->isWritten()0
)
190
0
      return;
191
3
    getNodeDelegate().AddChild([=] {
192
3
      getNodeDelegate().Visit(Init);
193
3
      Visit(Init->getInit());
194
3
    });
195
3
  }
196
197
  void Visit(const TemplateArgument &A, SourceRange R = {},
198
502
             const Decl *From = nullptr, const char *Label = nullptr) {
199
502
    getNodeDelegate().AddChild([=] {
200
502
      getNodeDelegate().Visit(A, R, From, Label);
201
502
      ConstTemplateArgumentVisitor<Derived>::Visit(A);
202
502
    });
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::TemplateArgument const&, clang::SourceRange, clang::Decl const*, char const*)::'lambda'()::operator()() const
Line
Count
Source
199
495
    getNodeDelegate().AddChild([=] {
200
495
      getNodeDelegate().Visit(A, R, From, Label);
201
495
      ConstTemplateArgumentVisitor<Derived>::Visit(A);
202
495
    });
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::TemplateArgument const&, clang::SourceRange, clang::Decl const*, char const*)::'lambda'()::operator()() const
Line
Count
Source
199
7
    getNodeDelegate().AddChild([=] {
200
7
      getNodeDelegate().Visit(A, R, From, Label);
201
7
      ConstTemplateArgumentVisitor<Derived>::Visit(A);
202
7
    });
203
502
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::TemplateArgument const&, clang::SourceRange, clang::Decl const*, char const*)
Line
Count
Source
198
495
             const Decl *From = nullptr, const char *Label = nullptr) {
199
495
    getNodeDelegate().AddChild([=] {
200
495
      getNodeDelegate().Visit(A, R, From, Label);
201
495
      ConstTemplateArgumentVisitor<Derived>::Visit(A);
202
495
    });
203
495
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::TemplateArgument const&, clang::SourceRange, clang::Decl const*, char const*)
Line
Count
Source
198
7
             const Decl *From = nullptr, const char *Label = nullptr) {
199
7
    getNodeDelegate().AddChild([=] {
200
7
      getNodeDelegate().Visit(A, R, From, Label);
201
7
      ConstTemplateArgumentVisitor<Derived>::Visit(A);
202
7
    });
203
7
  }
204
205
11
  void Visit(const BlockDecl::Capture &C) {
206
11
    getNodeDelegate().AddChild([=] {
207
11
      getNodeDelegate().Visit(C);
208
11
      if (C.hasCopyExpr())
209
2
        Visit(C.getCopyExpr());
210
11
    });
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::BlockDecl::Capture const&)::'lambda'()::operator()() const
Line
Count
Source
206
8
    getNodeDelegate().AddChild([=] {
207
8
      getNodeDelegate().Visit(C);
208
8
      if (C.hasCopyExpr())
209
2
        Visit(C.getCopyExpr());
210
8
    });
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::BlockDecl::Capture const&)::'lambda'()::operator()() const
Line
Count
Source
206
3
    getNodeDelegate().AddChild([=] {
207
3
      getNodeDelegate().Visit(C);
208
3
      if (C.hasCopyExpr())
209
0
        Visit(C.getCopyExpr());
210
3
    });
211
11
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::BlockDecl::Capture const&)
Line
Count
Source
205
8
  void Visit(const BlockDecl::Capture &C) {
206
8
    getNodeDelegate().AddChild([=] {
207
8
      getNodeDelegate().Visit(C);
208
8
      if (C.hasCopyExpr())
209
8
        Visit(C.getCopyExpr());
210
8
    });
211
8
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::BlockDecl::Capture const&)
Line
Count
Source
205
3
  void Visit(const BlockDecl::Capture &C) {
206
3
    getNodeDelegate().AddChild([=] {
207
3
      getNodeDelegate().Visit(C);
208
3
      if (C.hasCopyExpr())
209
3
        Visit(C.getCopyExpr());
210
3
    });
211
3
  }
212
213
160
  void Visit(const OMPClause *C) {
214
160
    getNodeDelegate().AddChild([=] {
215
160
      getNodeDelegate().Visit(C);
216
160
      for (const auto *S : C->children())
217
222
        Visit(S);
218
160
    });
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::OMPClause const*)::'lambda'()::operator()() const
Line
Count
Source
214
160
    getNodeDelegate().AddChild([=] {
215
160
      getNodeDelegate().Visit(C);
216
160
      for (const auto *S : C->children())
217
222
        Visit(S);
218
160
    });
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::OMPClause const*)::'lambda'()::operator()() const
219
160
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::OMPClause const*)
Line
Count
Source
213
160
  void Visit(const OMPClause *C) {
214
160
    getNodeDelegate().AddChild([=] {
215
160
      getNodeDelegate().Visit(C);
216
160
      for (const auto *S : C->children())
217
160
        Visit(S);
218
160
    });
219
160
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::OMPClause const*)
220
221
30
  void Visit(const GenericSelectionExpr::ConstAssociation &A) {
222
30
    getNodeDelegate().AddChild([=] {
223
30
      getNodeDelegate().Visit(A);
224
30
      if (const TypeSourceInfo *TSI = A.getTypeSourceInfo())
225
19
        Visit(TSI->getType());
226
30
      Visit(A.getAssociationExpr());
227
30
    });
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::GenericSelectionExpr::AssociationTy<true> const&)::'lambda'()::operator()() const
Line
Count
Source
222
12
    getNodeDelegate().AddChild([=] {
223
12
      getNodeDelegate().Visit(A);
224
12
      if (const TypeSourceInfo *TSI = A.getTypeSourceInfo())
225
7
        Visit(TSI->getType());
226
12
      Visit(A.getAssociationExpr());
227
12
    });
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::GenericSelectionExpr::AssociationTy<true> const&)::'lambda'()::operator()() const
Line
Count
Source
222
18
    getNodeDelegate().AddChild([=] {
223
18
      getNodeDelegate().Visit(A);
224
18
      if (const TypeSourceInfo *TSI = A.getTypeSourceInfo())
225
12
        Visit(TSI->getType());
226
18
      Visit(A.getAssociationExpr());
227
18
    });
228
30
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::GenericSelectionExpr::AssociationTy<true> const&)
Line
Count
Source
221
12
  void Visit(const GenericSelectionExpr::ConstAssociation &A) {
222
12
    getNodeDelegate().AddChild([=] {
223
12
      getNodeDelegate().Visit(A);
224
12
      if (const TypeSourceInfo *TSI = A.getTypeSourceInfo())
225
12
        Visit(TSI->getType());
226
12
      Visit(A.getAssociationExpr());
227
12
    });
228
12
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::GenericSelectionExpr::AssociationTy<true> const&)
Line
Count
Source
221
18
  void Visit(const GenericSelectionExpr::ConstAssociation &A) {
222
18
    getNodeDelegate().AddChild([=] {
223
18
      getNodeDelegate().Visit(A);
224
18
      if (const TypeSourceInfo *TSI = A.getTypeSourceInfo())
225
18
        Visit(TSI->getType());
226
18
      Visit(A.getAssociationExpr());
227
18
    });
228
18
  }
229
230
0
  void Visit(const APValue &Value, QualType Ty) {
231
0
    getNodeDelegate().AddChild([=] { getNodeDelegate().Visit(Value, Ty); });
232
0
  }
233
234
657
  void Visit(const comments::Comment *C, const comments::FullComment *FC) {
235
657
    getNodeDelegate().AddChild([=] {
236
657
      getNodeDelegate().Visit(C, FC);
237
657
      if (!C) {
238
0
        return;
239
0
      }
240
657
      comments::ConstCommentVisitor<Derived, void,
241
657
                                    const comments::FullComment *>::visit(C,
242
657
                                                                          FC);
243
657
      for (comments::Comment::child_iterator I = C->child_begin(),
244
657
                                             E = C->child_end();
245
1.18k
           I != E; 
++I525
)
246
525
        Visit(*I, FC);
247
657
    });
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::comments::Comment const*, clang::comments::FullComment const*)::'lambda'()::operator()() const
Line
Count
Source
235
64
    getNodeDelegate().AddChild([=] {
236
64
      getNodeDelegate().Visit(C, FC);
237
64
      if (!C) {
238
0
        return;
239
0
      }
240
64
      comments::ConstCommentVisitor<Derived, void,
241
64
                                    const comments::FullComment *>::visit(C,
242
64
                                                                          FC);
243
64
      for (comments::Comment::child_iterator I = C->child_begin(),
244
64
                                             E = C->child_end();
245
116
           I != E; 
++I52
)
246
52
        Visit(*I, FC);
247
64
    });
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::comments::Comment const*, clang::comments::FullComment const*)::'lambda'()::operator()() const
Line
Count
Source
235
593
    getNodeDelegate().AddChild([=] {
236
593
      getNodeDelegate().Visit(C, FC);
237
593
      if (!C) {
238
0
        return;
239
0
      }
240
593
      comments::ConstCommentVisitor<Derived, void,
241
593
                                    const comments::FullComment *>::visit(C,
242
593
                                                                          FC);
243
593
      for (comments::Comment::child_iterator I = C->child_begin(),
244
593
                                             E = C->child_end();
245
1.06k
           I != E; 
++I473
)
246
473
        Visit(*I, FC);
247
593
    });
248
657
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::Visit(clang::comments::Comment const*, clang::comments::FullComment const*)
Line
Count
Source
234
64
  void Visit(const comments::Comment *C, const comments::FullComment *FC) {
235
64
    getNodeDelegate().AddChild([=] {
236
64
      getNodeDelegate().Visit(C, FC);
237
64
      if (!C) {
238
64
        return;
239
64
      }
240
64
      comments::ConstCommentVisitor<Derived, void,
241
64
                                    const comments::FullComment *>::visit(C,
242
64
                                                                          FC);
243
64
      for (comments::Comment::child_iterator I = C->child_begin(),
244
64
                                             E = C->child_end();
245
64
           I != E; ++I)
246
64
        Visit(*I, FC);
247
64
    });
248
64
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::Visit(clang::comments::Comment const*, clang::comments::FullComment const*)
Line
Count
Source
234
593
  void Visit(const comments::Comment *C, const comments::FullComment *FC) {
235
593
    getNodeDelegate().AddChild([=] {
236
593
      getNodeDelegate().Visit(C, FC);
237
593
      if (!C) {
238
593
        return;
239
593
      }
240
593
      comments::ConstCommentVisitor<Derived, void,
241
593
                                    const comments::FullComment *>::visit(C,
242
593
                                                                          FC);
243
593
      for (comments::Comment::child_iterator I = C->child_begin(),
244
593
                                             E = C->child_end();
245
593
           I != E; ++I)
246
593
        Visit(*I, FC);
247
593
    });
248
593
  }
249
250
  void Visit(const DynTypedNode &N) {
251
    // FIXME: Improve this with a switch or a visitor pattern.
252
    if (const auto *D = N.get<Decl>())
253
      Visit(D);
254
    else if (const auto *S = N.get<Stmt>())
255
      Visit(S);
256
    else if (const auto *QT = N.get<QualType>())
257
      Visit(*QT);
258
    else if (const auto *T = N.get<Type>())
259
      Visit(T);
260
    else if (const auto *C = N.get<CXXCtorInitializer>())
261
      Visit(C);
262
    else if (const auto *C = N.get<OMPClause>())
263
      Visit(C);
264
    else if (const auto *T = N.get<TemplateArgument>())
265
      Visit(*T);
266
  }
267
268
4.38k
  void dumpDeclContext(const DeclContext *DC) {
269
4.38k
    if (!DC)
270
0
      return;
271
272
4.38k
    for (const auto *D : (Deserialize ? 
DC->decls()656
:
DC->noload_decls()3.72k
))
273
15.2k
      Visit(D);
274
4.38k
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::dumpDeclContext(clang::DeclContext const*)
Line
Count
Source
268
4.12k
  void dumpDeclContext(const DeclContext *DC) {
269
4.12k
    if (!DC)
270
0
      return;
271
272
4.12k
    for (const auto *D : (Deserialize ? 
DC->decls()656
:
DC->noload_decls()3.46k
))
273
14.4k
      Visit(D);
274
4.12k
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::dumpDeclContext(clang::DeclContext const*)
Line
Count
Source
268
262
  void dumpDeclContext(const DeclContext *DC) {
269
262
    if (!DC)
270
0
      return;
271
272
262
    for (const auto *D : (Deserialize ? 
DC->decls()0
: DC->noload_decls()))
273
837
      Visit(D);
274
262
  }
275
276
492
  void dumpTemplateParameters(const TemplateParameterList *TPL) {
277
492
    if (!TPL)
278
0
      return;
279
280
492
    for (const auto &TP : *TPL)
281
565
      Visit(TP);
282
283
492
    if (const Expr *RC = TPL->getRequiresClause())
284
0
      Visit(RC);
285
492
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::dumpTemplateParameters(clang::TemplateParameterList const*)
Line
Count
Source
276
459
  void dumpTemplateParameters(const TemplateParameterList *TPL) {
277
459
    if (!TPL)
278
0
      return;
279
280
459
    for (const auto &TP : *TPL)
281
529
      Visit(TP);
282
283
459
    if (const Expr *RC = TPL->getRequiresClause())
284
0
      Visit(RC);
285
459
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::dumpTemplateParameters(clang::TemplateParameterList const*)
Line
Count
Source
276
33
  void dumpTemplateParameters(const TemplateParameterList *TPL) {
277
33
    if (!TPL)
278
0
      return;
279
280
33
    for (const auto &TP : *TPL)
281
36
      Visit(TP);
282
283
33
    if (const Expr *RC = TPL->getRequiresClause())
284
0
      Visit(RC);
285
33
  }
286
287
  void
288
1
  dumpASTTemplateArgumentListInfo(const ASTTemplateArgumentListInfo *TALI) {
289
1
    if (!TALI)
290
0
      return;
291
292
1
    for (const auto &TA : TALI->arguments())
293
1
      dumpTemplateArgumentLoc(TA);
294
1
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::dumpASTTemplateArgumentListInfo(clang::ASTTemplateArgumentListInfo const*)
Line
Count
Source
288
1
  dumpASTTemplateArgumentListInfo(const ASTTemplateArgumentListInfo *TALI) {
289
1
    if (!TALI)
290
0
      return;
291
292
1
    for (const auto &TA : TALI->arguments())
293
1
      dumpTemplateArgumentLoc(TA);
294
1
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::dumpASTTemplateArgumentListInfo(clang::ASTTemplateArgumentListInfo const*)
295
296
  void dumpTemplateArgumentLoc(const TemplateArgumentLoc &A,
297
                               const Decl *From = nullptr,
298
20
                               const char *Label = nullptr) {
299
20
    Visit(A.getArgument(), A.getSourceRange(), From, Label);
300
20
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::dumpTemplateArgumentLoc(clang::TemplateArgumentLoc const&, clang::Decl const*, char const*)
Line
Count
Source
298
20
                               const char *Label = nullptr) {
299
20
    Visit(A.getArgument(), A.getSourceRange(), From, Label);
300
20
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::dumpTemplateArgumentLoc(clang::TemplateArgumentLoc const&, clang::Decl const*, char const*)
301
302
282
  void dumpTemplateArgumentList(const TemplateArgumentList &TAL) {
303
603
    for (unsigned i = 0, e = TAL.size(); i < e; 
++i321
)
304
321
      Visit(TAL[i]);
305
282
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::dumpTemplateArgumentList(clang::TemplateArgumentList const&)
Line
Count
Source
302
279
  void dumpTemplateArgumentList(const TemplateArgumentList &TAL) {
303
595
    for (unsigned i = 0, e = TAL.size(); i < e; 
++i316
)
304
316
      Visit(TAL[i]);
305
279
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::dumpTemplateArgumentList(clang::TemplateArgumentList const&)
Line
Count
Source
302
3
  void dumpTemplateArgumentList(const TemplateArgumentList &TAL) {
303
8
    for (unsigned i = 0, e = TAL.size(); i < e; 
++i5
)
304
5
      Visit(TAL[i]);
305
3
  }
306
307
125
  void dumpObjCTypeParamList(const ObjCTypeParamList *typeParams) {
308
125
    if (!typeParams)
309
121
      return;
310
311
5
    
for (const auto &typeParam : *typeParams)4
{
312
5
      Visit(typeParam);
313
5
    }
314
4
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::dumpObjCTypeParamList(clang::ObjCTypeParamList const*)
Line
Count
Source
307
120
  void dumpObjCTypeParamList(const ObjCTypeParamList *typeParams) {
308
120
    if (!typeParams)
309
117
      return;
310
311
4
    
for (const auto &typeParam : *typeParams)3
{
312
4
      Visit(typeParam);
313
4
    }
314
3
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::dumpObjCTypeParamList(clang::ObjCTypeParamList const*)
Line
Count
Source
307
5
  void dumpObjCTypeParamList(const ObjCTypeParamList *typeParams) {
308
5
    if (!typeParams)
309
4
      return;
310
311
1
    for (const auto &typeParam : *typeParams) {
312
1
      Visit(typeParam);
313
1
    }
314
1
  }
315
316
0
  void VisitComplexType(const ComplexType *T) { Visit(T->getElementType()); }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitComplexType(clang::ComplexType const*)
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitComplexType(clang::ComplexType const*)
317
  void VisitLocInfoType(const LocInfoType *T) {
318
    Visit(T->getTypeSourceInfo()->getType());
319
  }
320
457
  void VisitPointerType(const PointerType *T) { Visit(T->getPointeeType()); }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitPointerType(clang::PointerType const*)
Line
Count
Source
320
417
  void VisitPointerType(const PointerType *T) { Visit(T->getPointeeType()); }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitPointerType(clang::PointerType const*)
Line
Count
Source
320
40
  void VisitPointerType(const PointerType *T) { Visit(T->getPointeeType()); }
321
0
  void VisitBlockPointerType(const BlockPointerType *T) {
322
0
    Visit(T->getPointeeType());
323
0
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitBlockPointerType(clang::BlockPointerType const*)
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitBlockPointerType(clang::BlockPointerType const*)
324
17
  void VisitReferenceType(const ReferenceType *T) {
325
17
    Visit(T->getPointeeType());
326
17
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitReferenceType(clang::ReferenceType const*)
Line
Count
Source
324
17
  void VisitReferenceType(const ReferenceType *T) {
325
17
    Visit(T->getPointeeType());
326
17
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitReferenceType(clang::ReferenceType const*)
327
2
  void VisitMemberPointerType(const MemberPointerType *T) {
328
2
    Visit(T->getClass());
329
2
    Visit(T->getPointeeType());
330
2
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitMemberPointerType(clang::MemberPointerType const*)
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitMemberPointerType(clang::MemberPointerType const*)
Line
Count
Source
327
2
  void VisitMemberPointerType(const MemberPointerType *T) {
328
2
    Visit(T->getClass());
329
2
    Visit(T->getPointeeType());
330
2
  }
331
354
  void VisitArrayType(const ArrayType *T) { Visit(T->getElementType()); }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitArrayType(clang::ArrayType const*)
Line
Count
Source
331
316
  void VisitArrayType(const ArrayType *T) { Visit(T->getElementType()); }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitArrayType(clang::ArrayType const*)
Line
Count
Source
331
38
  void VisitArrayType(const ArrayType *T) { Visit(T->getElementType()); }
332
0
  void VisitVariableArrayType(const VariableArrayType *T) {
333
0
    VisitArrayType(T);
334
0
    Visit(T->getSizeExpr());
335
0
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitVariableArrayType(clang::VariableArrayType const*)
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitVariableArrayType(clang::VariableArrayType const*)
336
5
  void VisitDependentSizedArrayType(const DependentSizedArrayType *T) {
337
5
    Visit(T->getElementType());
338
5
    Visit(T->getSizeExpr());
339
5
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitDependentSizedArrayType(clang::DependentSizedArrayType const*)
Line
Count
Source
336
4
  void VisitDependentSizedArrayType(const DependentSizedArrayType *T) {
337
4
    Visit(T->getElementType());
338
4
    Visit(T->getSizeExpr());
339
4
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitDependentSizedArrayType(clang::DependentSizedArrayType const*)
Line
Count
Source
336
1
  void VisitDependentSizedArrayType(const DependentSizedArrayType *T) {
337
1
    Visit(T->getElementType());
338
1
    Visit(T->getSizeExpr());
339
1
  }
340
0
  void VisitDependentSizedExtVectorType(const DependentSizedExtVectorType *T) {
341
0
    Visit(T->getElementType());
342
0
    Visit(T->getSizeExpr());
343
0
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitDependentSizedExtVectorType(clang::DependentSizedExtVectorType const*)
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitDependentSizedExtVectorType(clang::DependentSizedExtVectorType const*)
344
8
  void VisitVectorType(const VectorType *T) { Visit(T->getElementType()); }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitVectorType(clang::VectorType const*)
Line
Count
Source
344
8
  void VisitVectorType(const VectorType *T) { Visit(T->getElementType()); }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitVectorType(clang::VectorType const*)
345
29
  void VisitFunctionType(const FunctionType *T) { Visit(T->getReturnType()); }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitFunctionType(clang::FunctionType const*)
Line
Count
Source
345
25
  void VisitFunctionType(const FunctionType *T) { Visit(T->getReturnType()); }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitFunctionType(clang::FunctionType const*)
Line
Count
Source
345
4
  void VisitFunctionType(const FunctionType *T) { Visit(T->getReturnType()); }
346
29
  void VisitFunctionProtoType(const FunctionProtoType *T) {
347
29
    VisitFunctionType(T);
348
29
    for (const QualType &PT : T->getParamTypes())
349
22
      Visit(PT);
350
29
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitFunctionProtoType(clang::FunctionProtoType const*)
Line
Count
Source
346
25
  void VisitFunctionProtoType(const FunctionProtoType *T) {
347
25
    VisitFunctionType(T);
348
25
    for (const QualType &PT : T->getParamTypes())
349
21
      Visit(PT);
350
25
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitFunctionProtoType(clang::FunctionProtoType const*)
Line
Count
Source
346
4
  void VisitFunctionProtoType(const FunctionProtoType *T) {
347
4
    VisitFunctionType(T);
348
4
    for (const QualType &PT : T->getParamTypes())
349
1
      Visit(PT);
350
4
  }
351
18
  void VisitTypeOfExprType(const TypeOfExprType *T) {
352
18
    Visit(T->getUnderlyingExpr());
353
18
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitTypeOfExprType(clang::TypeOfExprType const*)
Line
Count
Source
351
18
  void VisitTypeOfExprType(const TypeOfExprType *T) {
352
18
    Visit(T->getUnderlyingExpr());
353
18
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitTypeOfExprType(clang::TypeOfExprType const*)
354
7
  void VisitDecltypeType(const DecltypeType *T) {
355
7
    Visit(T->getUnderlyingExpr());
356
7
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitDecltypeType(clang::DecltypeType const*)
Line
Count
Source
354
7
  void VisitDecltypeType(const DecltypeType *T) {
355
7
    Visit(T->getUnderlyingExpr());
356
7
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitDecltypeType(clang::DecltypeType const*)
357
0
  void VisitUnaryTransformType(const UnaryTransformType *T) {
358
0
    Visit(T->getBaseType());
359
0
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitUnaryTransformType(clang::UnaryTransformType const*)
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitUnaryTransformType(clang::UnaryTransformType const*)
360
1
  void VisitAttributedType(const AttributedType *T) {
361
    // FIXME: AttrKind
362
1
    Visit(T->getModifiedType());
363
1
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitAttributedType(clang::AttributedType const*)
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitAttributedType(clang::AttributedType const*)
Line
Count
Source
360
1
  void VisitAttributedType(const AttributedType *T) {
361
    // FIXME: AttrKind
362
1
    Visit(T->getModifiedType());
363
1
  }
364
17
  void VisitSubstTemplateTypeParmType(const SubstTemplateTypeParmType *T) {
365
17
    Visit(T->getReplacedParameter());
366
17
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitSubstTemplateTypeParmType(clang::SubstTemplateTypeParmType const*)
Line
Count
Source
364
17
  void VisitSubstTemplateTypeParmType(const SubstTemplateTypeParmType *T) {
365
17
    Visit(T->getReplacedParameter());
366
17
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitSubstTemplateTypeParmType(clang::SubstTemplateTypeParmType const*)
367
  void
368
1
  VisitSubstTemplateTypeParmPackType(const SubstTemplateTypeParmPackType *T) {
369
1
    Visit(T->getReplacedParameter());
370
1
    Visit(T->getArgumentPack());
371
1
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitSubstTemplateTypeParmPackType(clang::SubstTemplateTypeParmPackType const*)
Line
Count
Source
368
1
  VisitSubstTemplateTypeParmPackType(const SubstTemplateTypeParmPackType *T) {
369
1
    Visit(T->getReplacedParameter());
370
1
    Visit(T->getArgumentPack());
371
1
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitSubstTemplateTypeParmPackType(clang::SubstTemplateTypeParmPackType const*)
372
54
  void VisitTemplateSpecializationType(const TemplateSpecializationType *T) {
373
54
    for (const auto &Arg : *T)
374
79
      Visit(Arg);
375
54
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitTemplateSpecializationType(clang::TemplateSpecializationType const*)
Line
Count
Source
372
54
  void VisitTemplateSpecializationType(const TemplateSpecializationType *T) {
373
54
    for (const auto &Arg : *T)
374
79
      Visit(Arg);
375
54
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitTemplateSpecializationType(clang::TemplateSpecializationType const*)
376
73
  void VisitObjCObjectPointerType(const ObjCObjectPointerType *T) {
377
73
    Visit(T->getPointeeType());
378
73
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitObjCObjectPointerType(clang::ObjCObjectPointerType const*)
Line
Count
Source
376
73
  void VisitObjCObjectPointerType(const ObjCObjectPointerType *T) {
377
73
    Visit(T->getPointeeType());
378
73
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitObjCObjectPointerType(clang::ObjCObjectPointerType const*)
379
72
  void VisitAtomicType(const AtomicType *T) { Visit(T->getValueType()); }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitAtomicType(clang::AtomicType const*)
Line
Count
Source
379
72
  void VisitAtomicType(const AtomicType *T) { Visit(T->getValueType()); }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitAtomicType(clang::AtomicType const*)
380
6
  void VisitPipeType(const PipeType *T) { Visit(T->getElementType()); }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitPipeType(clang::PipeType const*)
Line
Count
Source
380
6
  void VisitPipeType(const PipeType *T) { Visit(T->getElementType()); }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitPipeType(clang::PipeType const*)
381
0
  void VisitAdjustedType(const AdjustedType *T) { Visit(T->getOriginalType()); }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitAdjustedType(clang::AdjustedType const*)
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitAdjustedType(clang::AdjustedType const*)
382
5
  void VisitPackExpansionType(const PackExpansionType *T) {
383
5
    if (!T->isSugared())
384
5
      Visit(T->getPattern());
385
5
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitPackExpansionType(clang::PackExpansionType const*)
Line
Count
Source
382
5
  void VisitPackExpansionType(const PackExpansionType *T) {
383
5
    if (!T->isSugared())
384
5
      Visit(T->getPattern());
385
5
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitPackExpansionType(clang::PackExpansionType const*)
386
  // FIXME: ElaboratedType, DependentNameType,
387
  // DependentTemplateSpecializationType, ObjCObjectType
388
389
2.65k
  void VisitTypedefDecl(const TypedefDecl *D) { Visit(D->getUnderlyingType()); }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitTypedefDecl(clang::TypedefDecl const*)
Line
Count
Source
389
2.45k
  void VisitTypedefDecl(const TypedefDecl *D) { Visit(D->getUnderlyingType()); }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitTypedefDecl(clang::TypedefDecl const*)
Line
Count
Source
389
199
  void VisitTypedefDecl(const TypedefDecl *D) { Visit(D->getUnderlyingType()); }
390
391
86
  void VisitEnumConstantDecl(const EnumConstantDecl *D) {
392
86
    if (const Expr *Init = D->getInitExpr())
393
9
      Visit(Init);
394
86
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitEnumConstantDecl(clang::EnumConstantDecl const*)
Line
Count
Source
391
69
  void VisitEnumConstantDecl(const EnumConstantDecl *D) {
392
69
    if (const Expr *Init = D->getInitExpr())
393
8
      Visit(Init);
394
69
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitEnumConstantDecl(clang::EnumConstantDecl const*)
Line
Count
Source
391
17
  void VisitEnumConstantDecl(const EnumConstantDecl *D) {
392
17
    if (const Expr *Init = D->getInitExpr())
393
1
      Visit(Init);
394
17
  }
395
396
4.12k
  void VisitFunctionDecl(const FunctionDecl *D) {
397
4.12k
    if (const auto *FTSI = D->getTemplateSpecializationInfo())
398
130
      dumpTemplateArgumentList(*FTSI->TemplateArguments);
399
400
4.12k
    if (D->param_begin())
401
1.85k
      for (const auto *Parameter : D->parameters())
402
2.27k
        Visit(Parameter);
403
404
4.12k
    if (const Expr *TRC = D->getTrailingRequiresClause())
405
4
      Visit(TRC);
406
407
4.12k
    if (Traversal == TK_IgnoreUnlessSpelledInSource && 
D->isDefaulted()0
)
408
0
      return;
409
410
4.12k
    if (const auto *C = dyn_cast<CXXConstructorDecl>(D))
411
738
      for (const auto *I : C->inits())
412
119
        Visit(I);
413
414
4.12k
    if (D->doesThisDeclarationHaveABody())
415
2.11k
      Visit(D->getBody());
416
4.12k
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitFunctionDecl(clang::FunctionDecl const*)
Line
Count
Source
396
3.80k
  void VisitFunctionDecl(const FunctionDecl *D) {
397
3.80k
    if (const auto *FTSI = D->getTemplateSpecializationInfo())
398
129
      dumpTemplateArgumentList(*FTSI->TemplateArguments);
399
400
3.80k
    if (D->param_begin())
401
1.70k
      for (const auto *Parameter : D->parameters())
402
2.09k
        Visit(Parameter);
403
404
3.80k
    if (const Expr *TRC = D->getTrailingRequiresClause())
405
4
      Visit(TRC);
406
407
3.80k
    if (Traversal == TK_IgnoreUnlessSpelledInSource && 
D->isDefaulted()0
)
408
0
      return;
409
410
3.80k
    if (const auto *C = dyn_cast<CXXConstructorDecl>(D))
411
713
      for (const auto *I : C->inits())
412
116
        Visit(I);
413
414
3.80k
    if (D->doesThisDeclarationHaveABody())
415
1.94k
      Visit(D->getBody());
416
3.80k
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitFunctionDecl(clang::FunctionDecl const*)
Line
Count
Source
396
317
  void VisitFunctionDecl(const FunctionDecl *D) {
397
317
    if (const auto *FTSI = D->getTemplateSpecializationInfo())
398
1
      dumpTemplateArgumentList(*FTSI->TemplateArguments);
399
400
317
    if (D->param_begin())
401
148
      for (const auto *Parameter : D->parameters())
402
184
        Visit(Parameter);
403
404
317
    if (const Expr *TRC = D->getTrailingRequiresClause())
405
0
      Visit(TRC);
406
407
317
    if (Traversal == TK_IgnoreUnlessSpelledInSource && 
D->isDefaulted()0
)
408
0
      return;
409
410
317
    if (const auto *C = dyn_cast<CXXConstructorDecl>(D))
411
25
      for (const auto *I : C->inits())
412
3
        Visit(I);
413
414
317
    if (D->doesThisDeclarationHaveABody())
415
173
      Visit(D->getBody());
416
317
  }
417
418
1.89k
  void VisitFieldDecl(const FieldDecl *D) {
419
1.89k
    if (D->isBitField())
420
97
      Visit(D->getBitWidth());
421
1.89k
    if (Expr *Init = D->getInClassInitializer())
422
51
      Visit(Init);
423
1.89k
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitFieldDecl(clang::FieldDecl const*)
Line
Count
Source
418
1.80k
  void VisitFieldDecl(const FieldDecl *D) {
419
1.80k
    if (D->isBitField())
420
90
      Visit(D->getBitWidth());
421
1.80k
    if (Expr *Init = D->getInClassInitializer())
422
50
      Visit(Init);
423
1.80k
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitFieldDecl(clang::FieldDecl const*)
Line
Count
Source
418
95
  void VisitFieldDecl(const FieldDecl *D) {
419
95
    if (D->isBitField())
420
7
      Visit(D->getBitWidth());
421
95
    if (Expr *Init = D->getInClassInitializer())
422
1
      Visit(Init);
423
95
  }
424
425
7.75k
  void VisitVarDecl(const VarDecl *D) {
426
7.75k
    if (Traversal == TK_IgnoreUnlessSpelledInSource && 
D->isCXXForRangeDecl()0
)
427
0
      return;
428
429
7.75k
    if (D->hasInit())
430
2.38k
      Visit(D->getInit());
431
7.75k
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitVarDecl(clang::VarDecl const*)
Line
Count
Source
425
7.41k
  void VisitVarDecl(const VarDecl *D) {
426
7.41k
    if (Traversal == TK_IgnoreUnlessSpelledInSource && 
D->isCXXForRangeDecl()0
)
427
0
      return;
428
429
7.41k
    if (D->hasInit())
430
2.30k
      Visit(D->getInit());
431
7.41k
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitVarDecl(clang::VarDecl const*)
Line
Count
Source
425
337
  void VisitVarDecl(const VarDecl *D) {
426
337
    if (Traversal == TK_IgnoreUnlessSpelledInSource && 
D->isCXXForRangeDecl()0
)
427
0
      return;
428
429
337
    if (D->hasInit())
430
75
      Visit(D->getInit());
431
337
  }
432
433
0
  void VisitDecompositionDecl(const DecompositionDecl *D) {
434
0
    VisitVarDecl(D);
435
0
    for (const auto *B : D->bindings())
436
0
      Visit(B);
437
0
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitDecompositionDecl(clang::DecompositionDecl const*)
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitDecompositionDecl(clang::DecompositionDecl const*)
438
439
0
  void VisitBindingDecl(const BindingDecl *D) {
440
0
    if (const auto *E = D->getBinding())
441
0
      Visit(E);
442
0
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitBindingDecl(clang::BindingDecl const*)
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitBindingDecl(clang::BindingDecl const*)
443
444
3
  void VisitFileScopeAsmDecl(const FileScopeAsmDecl *D) {
445
3
    Visit(D->getAsmString());
446
3
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitFileScopeAsmDecl(clang::FileScopeAsmDecl const*)
Line
Count
Source
444
3
  void VisitFileScopeAsmDecl(const FileScopeAsmDecl *D) {
445
3
    Visit(D->getAsmString());
446
3
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitFileScopeAsmDecl(clang::FileScopeAsmDecl const*)
447
448
635
  void VisitCapturedDecl(const CapturedDecl *D) { Visit(D->getBody()); }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitCapturedDecl(clang::CapturedDecl const*)
Line
Count
Source
448
626
  void VisitCapturedDecl(const CapturedDecl *D) { Visit(D->getBody()); }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitCapturedDecl(clang::CapturedDecl const*)
Line
Count
Source
448
9
  void VisitCapturedDecl(const CapturedDecl *D) { Visit(D->getBody()); }
449
450
2
  void VisitOMPThreadPrivateDecl(const OMPThreadPrivateDecl *D) {
451
2
    for (const auto *E : D->varlists())
452
4
      Visit(E);
453
2
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitOMPThreadPrivateDecl(clang::OMPThreadPrivateDecl const*)
Line
Count
Source
450
2
  void VisitOMPThreadPrivateDecl(const OMPThreadPrivateDecl *D) {
451
2
    for (const auto *E : D->varlists())
452
4
      Visit(E);
453
2
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitOMPThreadPrivateDecl(clang::OMPThreadPrivateDecl const*)
454
455
6
  void VisitOMPDeclareReductionDecl(const OMPDeclareReductionDecl *D) {
456
6
    Visit(D->getCombiner());
457
6
    if (const auto *Initializer = D->getInitializer())
458
2
      Visit(Initializer);
459
6
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitOMPDeclareReductionDecl(clang::OMPDeclareReductionDecl const*)
Line
Count
Source
455
6
  void VisitOMPDeclareReductionDecl(const OMPDeclareReductionDecl *D) {
456
6
    Visit(D->getCombiner());
457
6
    if (const auto *Initializer = D->getInitializer())
458
2
      Visit(Initializer);
459
6
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitOMPDeclareReductionDecl(clang::OMPDeclareReductionDecl const*)
460
461
0
  void VisitOMPDeclareMapperDecl(const OMPDeclareMapperDecl *D) {
462
0
    for (const auto *C : D->clauselists())
463
0
      Visit(C);
464
0
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitOMPDeclareMapperDecl(clang::OMPDeclareMapperDecl const*)
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitOMPDeclareMapperDecl(clang::OMPDeclareMapperDecl const*)
465
466
96
  void VisitOMPCapturedExprDecl(const OMPCapturedExprDecl *D) {
467
96
    Visit(D->getInit());
468
96
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitOMPCapturedExprDecl(clang::OMPCapturedExprDecl const*)
Line
Count
Source
466
96
  void VisitOMPCapturedExprDecl(const OMPCapturedExprDecl *D) {
467
96
    Visit(D->getInit());
468
96
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitOMPCapturedExprDecl(clang::OMPCapturedExprDecl const*)
469
470
0
  void VisitOMPAllocateDecl(const OMPAllocateDecl *D) {
471
0
    for (const auto *E : D->varlists())
472
0
      Visit(E);
473
0
    for (const auto *C : D->clauselists())
474
0
      Visit(C);
475
0
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitOMPAllocateDecl(clang::OMPAllocateDecl const*)
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitOMPAllocateDecl(clang::OMPAllocateDecl const*)
476
477
  template <typename SpecializationDecl>
478
  void dumpTemplateDeclSpecialization(const SpecializationDecl *D) {
479
    for (const auto *RedeclWithBadType : D->redecls()) {
480
      // FIXME: The redecls() range sometimes has elements of a less-specific
481
      // type. (In particular, ClassTemplateSpecializationDecl::redecls() gives
482
      // us TagDecls, and should give CXXRecordDecls).
483
      auto *Redecl = dyn_cast<SpecializationDecl>(RedeclWithBadType);
484
      if (!Redecl) {
485
        // Found the injected-class-name for a class template. This will be
486
        // dumped as part of its surrounding class so we don't need to dump it
487
        // here.
488
        assert(isa<CXXRecordDecl>(RedeclWithBadType) &&
489
               "expected an injected-class-name");
490
        continue;
491
      }
492
      Visit(Redecl);
493
    }
494
  }
495
496
  template <typename TemplateDecl>
497
  void dumpTemplateDecl(const TemplateDecl *D) {
498
    dumpTemplateParameters(D->getTemplateParameters());
499
500
    Visit(D->getTemplatedDecl());
501
502
    if (Traversal == TK_AsIs) {
503
      for (const auto *Child : D->specializations())
504
        dumpTemplateDeclSpecialization(Child);
505
    }
506
  }
507
508
70
  void VisitTypeAliasDecl(const TypeAliasDecl *D) {
509
70
    Visit(D->getUnderlyingType());
510
70
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitTypeAliasDecl(clang::TypeAliasDecl const*)
Line
Count
Source
508
65
  void VisitTypeAliasDecl(const TypeAliasDecl *D) {
509
65
    Visit(D->getUnderlyingType());
510
65
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitTypeAliasDecl(clang::TypeAliasDecl const*)
Line
Count
Source
508
5
  void VisitTypeAliasDecl(const TypeAliasDecl *D) {
509
5
    Visit(D->getUnderlyingType());
510
5
  }
511
512
6
  void VisitTypeAliasTemplateDecl(const TypeAliasTemplateDecl *D) {
513
6
    dumpTemplateParameters(D->getTemplateParameters());
514
6
    Visit(D->getTemplatedDecl());
515
6
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitTypeAliasTemplateDecl(clang::TypeAliasTemplateDecl const*)
Line
Count
Source
512
6
  void VisitTypeAliasTemplateDecl(const TypeAliasTemplateDecl *D) {
513
6
    dumpTemplateParameters(D->getTemplateParameters());
514
6
    Visit(D->getTemplatedDecl());
515
6
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitTypeAliasTemplateDecl(clang::TypeAliasTemplateDecl const*)
516
517
43
  void VisitStaticAssertDecl(const StaticAssertDecl *D) {
518
43
    Visit(D->getAssertExpr());
519
43
    Visit(D->getMessage());
520
43
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitStaticAssertDecl(clang::StaticAssertDecl const*)
Line
Count
Source
517
43
  void VisitStaticAssertDecl(const StaticAssertDecl *D) {
518
43
    Visit(D->getAssertExpr());
519
43
    Visit(D->getMessage());
520
43
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitStaticAssertDecl(clang::StaticAssertDecl const*)
521
522
  void VisitFunctionTemplateDecl(const FunctionTemplateDecl *D) {
523
    dumpTemplateDecl(D);
524
  }
525
526
  void VisitClassTemplateDecl(const ClassTemplateDecl *D) {
527
    dumpTemplateDecl(D);
528
  }
529
530
  void VisitClassTemplateSpecializationDecl(
531
146
      const ClassTemplateSpecializationDecl *D) {
532
146
    dumpTemplateArgumentList(D->getTemplateArgs());
533
146
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitClassTemplateSpecializationDecl(clang::ClassTemplateSpecializationDecl const*)
Line
Count
Source
531
144
      const ClassTemplateSpecializationDecl *D) {
532
144
    dumpTemplateArgumentList(D->getTemplateArgs());
533
144
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitClassTemplateSpecializationDecl(clang::ClassTemplateSpecializationDecl const*)
Line
Count
Source
531
2
      const ClassTemplateSpecializationDecl *D) {
532
2
    dumpTemplateArgumentList(D->getTemplateArgs());
533
2
  }
534
535
  void VisitClassTemplatePartialSpecializationDecl(
536
17
      const ClassTemplatePartialSpecializationDecl *D) {
537
17
    VisitClassTemplateSpecializationDecl(D);
538
17
    dumpTemplateParameters(D->getTemplateParameters());
539
17
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitClassTemplatePartialSpecializationDecl(clang::ClassTemplatePartialSpecializationDecl const*)
Line
Count
Source
536
16
      const ClassTemplatePartialSpecializationDecl *D) {
537
16
    VisitClassTemplateSpecializationDecl(D);
538
16
    dumpTemplateParameters(D->getTemplateParameters());
539
16
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitClassTemplatePartialSpecializationDecl(clang::ClassTemplatePartialSpecializationDecl const*)
Line
Count
Source
536
1
      const ClassTemplatePartialSpecializationDecl *D) {
537
1
    VisitClassTemplateSpecializationDecl(D);
538
1
    dumpTemplateParameters(D->getTemplateParameters());
539
1
  }
540
541
  void VisitClassScopeFunctionSpecializationDecl(
542
1
      const ClassScopeFunctionSpecializationDecl *D) {
543
1
    Visit(D->getSpecialization());
544
1
    dumpASTTemplateArgumentListInfo(D->getTemplateArgsAsWritten());
545
1
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitClassScopeFunctionSpecializationDecl(clang::ClassScopeFunctionSpecializationDecl const*)
Line
Count
Source
542
1
      const ClassScopeFunctionSpecializationDecl *D) {
543
1
    Visit(D->getSpecialization());
544
1
    dumpASTTemplateArgumentListInfo(D->getTemplateArgsAsWritten());
545
1
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitClassScopeFunctionSpecializationDecl(clang::ClassScopeFunctionSpecializationDecl const*)
546
  void VisitVarTemplateDecl(const VarTemplateDecl *D) { dumpTemplateDecl(D); }
547
548
4
  void VisitBuiltinTemplateDecl(const BuiltinTemplateDecl *D) {
549
4
    dumpTemplateParameters(D->getTemplateParameters());
550
4
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitBuiltinTemplateDecl(clang::BuiltinTemplateDecl const*)
Line
Count
Source
548
4
  void VisitBuiltinTemplateDecl(const BuiltinTemplateDecl *D) {
549
4
    dumpTemplateParameters(D->getTemplateParameters());
550
4
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitBuiltinTemplateDecl(clang::BuiltinTemplateDecl const*)
551
552
  void
553
6
  VisitVarTemplateSpecializationDecl(const VarTemplateSpecializationDecl *D) {
554
6
    dumpTemplateArgumentList(D->getTemplateArgs());
555
6
    VisitVarDecl(D);
556
6
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitVarTemplateSpecializationDecl(clang::VarTemplateSpecializationDecl const*)
Line
Count
Source
553
6
  VisitVarTemplateSpecializationDecl(const VarTemplateSpecializationDecl *D) {
554
6
    dumpTemplateArgumentList(D->getTemplateArgs());
555
6
    VisitVarDecl(D);
556
6
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitVarTemplateSpecializationDecl(clang::VarTemplateSpecializationDecl const*)
557
558
  void VisitVarTemplatePartialSpecializationDecl(
559
0
      const VarTemplatePartialSpecializationDecl *D) {
560
0
    dumpTemplateParameters(D->getTemplateParameters());
561
0
    VisitVarTemplateSpecializationDecl(D);
562
0
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitVarTemplatePartialSpecializationDecl(clang::VarTemplatePartialSpecializationDecl const*)
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitVarTemplatePartialSpecializationDecl(clang::VarTemplatePartialSpecializationDecl const*)
563
564
460
  void VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D) {
565
460
    if (const auto *TC = D->getTypeConstraint())
566
8
      Visit(TC->getImmediatelyDeclaredConstraint());
567
460
    if (D->hasDefaultArgument())
568
15
      Visit(D->getDefaultArgument(), SourceRange(),
569
15
            D->getDefaultArgStorage().getInheritedFrom(),
570
11
            D->defaultArgumentWasInherited() ? 
"inherited from"4
: "previous");
571
460
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitTemplateTypeParmDecl(clang::TemplateTypeParmDecl const*)
Line
Count
Source
564
428
  void VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D) {
565
428
    if (const auto *TC = D->getTypeConstraint())
566
8
      Visit(TC->getImmediatelyDeclaredConstraint());
567
428
    if (D->hasDefaultArgument())
568
13
      Visit(D->getDefaultArgument(), SourceRange(),
569
13
            D->getDefaultArgStorage().getInheritedFrom(),
570
9
            D->defaultArgumentWasInherited() ? 
"inherited from"4
: "previous");
571
428
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitTemplateTypeParmDecl(clang::TemplateTypeParmDecl const*)
Line
Count
Source
564
32
  void VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D) {
565
32
    if (const auto *TC = D->getTypeConstraint())
566
0
      Visit(TC->getImmediatelyDeclaredConstraint());
567
32
    if (D->hasDefaultArgument())
568
2
      Visit(D->getDefaultArgument(), SourceRange(),
569
2
            D->getDefaultArgStorage().getInheritedFrom(),
570
2
            D->defaultArgumentWasInherited() ? 
"inherited from"0
: "previous");
571
32
  }
572
573
109
  void VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D) {
574
109
    if (const auto *E = D->getPlaceholderTypeConstraint())
575
0
      Visit(E);
576
109
    if (D->hasDefaultArgument())
577
12
      Visit(D->getDefaultArgument(), SourceRange(),
578
12
            D->getDefaultArgStorage().getInheritedFrom(),
579
11
            D->defaultArgumentWasInherited() ? 
"inherited from"1
: "previous");
580
109
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitNonTypeTemplateParmDecl(clang::NonTypeTemplateParmDecl const*)
Line
Count
Source
573
106
  void VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D) {
574
106
    if (const auto *E = D->getPlaceholderTypeConstraint())
575
0
      Visit(E);
576
106
    if (D->hasDefaultArgument())
577
12
      Visit(D->getDefaultArgument(), SourceRange(),
578
12
            D->getDefaultArgStorage().getInheritedFrom(),
579
11
            D->defaultArgumentWasInherited() ? 
"inherited from"1
: "previous");
580
106
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitNonTypeTemplateParmDecl(clang::NonTypeTemplateParmDecl const*)
Line
Count
Source
573
3
  void VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D) {
574
3
    if (const auto *E = D->getPlaceholderTypeConstraint())
575
0
      Visit(E);
576
3
    if (D->hasDefaultArgument())
577
0
      Visit(D->getDefaultArgument(), SourceRange(),
578
0
            D->getDefaultArgStorage().getInheritedFrom(),
579
0
            D->defaultArgumentWasInherited() ? "inherited from" : "previous");
580
3
  }
581
582
16
  void VisitTemplateTemplateParmDecl(const TemplateTemplateParmDecl *D) {
583
16
    dumpTemplateParameters(D->getTemplateParameters());
584
16
    if (D->hasDefaultArgument())
585
3
      dumpTemplateArgumentLoc(
586
3
          D->getDefaultArgument(), D->getDefaultArgStorage().getInheritedFrom(),
587
2
          D->defaultArgumentWasInherited() ? 
"inherited from"1
: "previous");
588
16
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl const*)
Line
Count
Source
582
15
  void VisitTemplateTemplateParmDecl(const TemplateTemplateParmDecl *D) {
583
15
    dumpTemplateParameters(D->getTemplateParameters());
584
15
    if (D->hasDefaultArgument())
585
3
      dumpTemplateArgumentLoc(
586
3
          D->getDefaultArgument(), D->getDefaultArgStorage().getInheritedFrom(),
587
2
          D->defaultArgumentWasInherited() ? 
"inherited from"1
: "previous");
588
15
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl const*)
Line
Count
Source
582
1
  void VisitTemplateTemplateParmDecl(const TemplateTemplateParmDecl *D) {
583
1
    dumpTemplateParameters(D->getTemplateParameters());
584
1
    if (D->hasDefaultArgument())
585
0
      dumpTemplateArgumentLoc(
586
0
          D->getDefaultArgument(), D->getDefaultArgStorage().getInheritedFrom(),
587
0
          D->defaultArgumentWasInherited() ? "inherited from" : "previous");
588
1
  }
589
590
0
  void VisitConceptDecl(const ConceptDecl *D) {
591
0
    dumpTemplateParameters(D->getTemplateParameters());
592
0
    Visit(D->getConstraintExpr());
593
0
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitConceptDecl(clang::ConceptDecl const*)
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitConceptDecl(clang::ConceptDecl const*)
594
595
12
  void VisitConceptSpecializationExpr(const ConceptSpecializationExpr *CSE) {
596
12
    if (CSE->hasExplicitTemplateArgs())
597
12
      for (const auto &ArgLoc : CSE->getTemplateArgsAsWritten()->arguments())
598
16
        dumpTemplateArgumentLoc(ArgLoc);
599
12
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitConceptSpecializationExpr(clang::ConceptSpecializationExpr const*)
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitConceptSpecializationExpr(clang::ConceptSpecializationExpr const*)
Line
Count
Source
595
12
  void VisitConceptSpecializationExpr(const ConceptSpecializationExpr *CSE) {
596
12
    if (CSE->hasExplicitTemplateArgs())
597
12
      for (const auto &ArgLoc : CSE->getTemplateArgsAsWritten()->arguments())
598
16
        dumpTemplateArgumentLoc(ArgLoc);
599
12
  }
600
601
47
  void VisitUsingShadowDecl(const UsingShadowDecl *D) {
602
47
    if (auto *TD = dyn_cast<TypeDecl>(D->getUnderlyingDecl()))
603
1
      Visit(TD->getTypeForDecl());
604
47
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitUsingShadowDecl(clang::UsingShadowDecl const*)
Line
Count
Source
601
44
  void VisitUsingShadowDecl(const UsingShadowDecl *D) {
602
44
    if (auto *TD = dyn_cast<TypeDecl>(D->getUnderlyingDecl()))
603
0
      Visit(TD->getTypeForDecl());
604
44
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitUsingShadowDecl(clang::UsingShadowDecl const*)
Line
Count
Source
601
3
  void VisitUsingShadowDecl(const UsingShadowDecl *D) {
602
3
    if (auto *TD = dyn_cast<TypeDecl>(D->getUnderlyingDecl()))
603
1
      Visit(TD->getTypeForDecl());
604
3
  }
605
606
10
  void VisitFriendDecl(const FriendDecl *D) {
607
10
    if (!D->getFriendType())
608
6
      Visit(D->getFriendDecl());
609
10
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitFriendDecl(clang::FriendDecl const*)
Line
Count
Source
606
10
  void VisitFriendDecl(const FriendDecl *D) {
607
10
    if (!D->getFriendType())
608
6
      Visit(D->getFriendDecl());
609
10
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitFriendDecl(clang::FriendDecl const*)
610
611
192
  void VisitObjCMethodDecl(const ObjCMethodDecl *D) {
612
192
    if (D->isThisDeclarationADefinition())
613
34
      dumpDeclContext(D);
614
158
    else
615
158
      for (const ParmVarDecl *Parameter : D->parameters())
616
59
        Visit(Parameter);
617
618
192
    if (D->hasBody())
619
34
      Visit(D->getBody());
620
192
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitObjCMethodDecl(clang::ObjCMethodDecl const*)
Line
Count
Source
611
177
  void VisitObjCMethodDecl(const ObjCMethodDecl *D) {
612
177
    if (D->isThisDeclarationADefinition())
613
31
      dumpDeclContext(D);
614
146
    else
615
146
      for (const ParmVarDecl *Parameter : D->parameters())
616
54
        Visit(Parameter);
617
618
177
    if (D->hasBody())
619
31
      Visit(D->getBody());
620
177
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitObjCMethodDecl(clang::ObjCMethodDecl const*)
Line
Count
Source
611
15
  void VisitObjCMethodDecl(const ObjCMethodDecl *D) {
612
15
    if (D->isThisDeclarationADefinition())
613
3
      dumpDeclContext(D);
614
12
    else
615
12
      for (const ParmVarDecl *Parameter : D->parameters())
616
5
        Visit(Parameter);
617
618
15
    if (D->hasBody())
619
3
      Visit(D->getBody());
620
15
  }
621
622
20
  void VisitObjCCategoryDecl(const ObjCCategoryDecl *D) {
623
20
    dumpObjCTypeParamList(D->getTypeParamList());
624
20
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitObjCCategoryDecl(clang::ObjCCategoryDecl const*)
Line
Count
Source
622
19
  void VisitObjCCategoryDecl(const ObjCCategoryDecl *D) {
623
19
    dumpObjCTypeParamList(D->getTypeParamList());
624
19
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitObjCCategoryDecl(clang::ObjCCategoryDecl const*)
Line
Count
Source
622
1
  void VisitObjCCategoryDecl(const ObjCCategoryDecl *D) {
623
1
    dumpObjCTypeParamList(D->getTypeParamList());
624
1
  }
625
626
105
  void VisitObjCInterfaceDecl(const ObjCInterfaceDecl *D) {
627
105
    dumpObjCTypeParamList(D->getTypeParamListAsWritten());
628
105
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitObjCInterfaceDecl(clang::ObjCInterfaceDecl const*)
Line
Count
Source
626
101
  void VisitObjCInterfaceDecl(const ObjCInterfaceDecl *D) {
627
101
    dumpObjCTypeParamList(D->getTypeParamListAsWritten());
628
101
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitObjCInterfaceDecl(clang::ObjCInterfaceDecl const*)
Line
Count
Source
626
4
  void VisitObjCInterfaceDecl(const ObjCInterfaceDecl *D) {
627
4
    dumpObjCTypeParamList(D->getTypeParamListAsWritten());
628
4
  }
629
630
27
  void VisitObjCImplementationDecl(const ObjCImplementationDecl *D) {
631
27
    for (const auto &I : D->inits())
632
2
      Visit(I);
633
27
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitObjCImplementationDecl(clang::ObjCImplementationDecl const*)
Line
Count
Source
630
24
  void VisitObjCImplementationDecl(const ObjCImplementationDecl *D) {
631
24
    for (const auto &I : D->inits())
632
2
      Visit(I);
633
24
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitObjCImplementationDecl(clang::ObjCImplementationDecl const*)
Line
Count
Source
630
3
  void VisitObjCImplementationDecl(const ObjCImplementationDecl *D) {
631
3
    for (const auto &I : D->inits())
632
0
      Visit(I);
633
3
  }
634
635
22
  void VisitBlockDecl(const BlockDecl *D) {
636
22
    for (const auto &I : D->parameters())
637
3
      Visit(I);
638
639
22
    for (const auto &I : D->captures())
640
11
      Visit(I);
641
22
    Visit(D->getBody());
642
22
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitBlockDecl(clang::BlockDecl const*)
Line
Count
Source
635
19
  void VisitBlockDecl(const BlockDecl *D) {
636
19
    for (const auto &I : D->parameters())
637
2
      Visit(I);
638
639
19
    for (const auto &I : D->captures())
640
8
      Visit(I);
641
19
    Visit(D->getBody());
642
19
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitBlockDecl(clang::BlockDecl const*)
Line
Count
Source
635
3
  void VisitBlockDecl(const BlockDecl *D) {
636
3
    for (const auto &I : D->parameters())
637
1
      Visit(I);
638
639
3
    for (const auto &I : D->captures())
640
3
      Visit(I);
641
3
    Visit(D->getBody());
642
3
  }
643
644
1.64k
  void VisitDeclStmt(const DeclStmt *Node) {
645
1.64k
    for (const auto &D : Node->decls())
646
1.69k
      Visit(D);
647
1.64k
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitDeclStmt(clang::DeclStmt const*)
Line
Count
Source
644
71
  void VisitDeclStmt(const DeclStmt *Node) {
645
71
    for (const auto &D : Node->decls())
646
73
      Visit(D);
647
71
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitDeclStmt(clang::DeclStmt const*)
Line
Count
Source
644
1.57k
  void VisitDeclStmt(const DeclStmt *Node) {
645
1.57k
    for (const auto &D : Node->decls())
646
1.62k
      Visit(D);
647
1.57k
  }
648
649
14
  void VisitAttributedStmt(const AttributedStmt *Node) {
650
14
    for (const auto *A : Node->getAttrs())
651
16
      Visit(A);
652
14
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitAttributedStmt(clang::AttributedStmt const*)
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitAttributedStmt(clang::AttributedStmt const*)
Line
Count
Source
649
14
  void VisitAttributedStmt(const AttributedStmt *Node) {
650
14
    for (const auto *A : Node->getAttrs())
651
16
      Visit(A);
652
14
  }
653
654
12
  void VisitCXXCatchStmt(const CXXCatchStmt *Node) {
655
12
    Visit(Node->getExceptionDecl());
656
12
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitCXXCatchStmt(clang::CXXCatchStmt const*)
Line
Count
Source
654
2
  void VisitCXXCatchStmt(const CXXCatchStmt *Node) {
655
2
    Visit(Node->getExceptionDecl());
656
2
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitCXXCatchStmt(clang::CXXCatchStmt const*)
Line
Count
Source
654
10
  void VisitCXXCatchStmt(const CXXCatchStmt *Node) {
655
10
    Visit(Node->getExceptionDecl());
656
10
  }
657
658
390
  void VisitCapturedStmt(const CapturedStmt *Node) {
659
390
    Visit(Node->getCapturedDecl());
660
390
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitCapturedStmt(clang::CapturedStmt const*)
Line
Count
Source
658
9
  void VisitCapturedStmt(const CapturedStmt *Node) {
659
9
    Visit(Node->getCapturedDecl());
660
9
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitCapturedStmt(clang::CapturedStmt const*)
Line
Count
Source
658
381
  void VisitCapturedStmt(const CapturedStmt *Node) {
659
381
    Visit(Node->getCapturedDecl());
660
381
  }
661
662
195
  void VisitOMPExecutableDirective(const OMPExecutableDirective *Node) {
663
195
    for (const auto *C : Node->clauses())
664
160
      Visit(C);
665
195
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitOMPExecutableDirective(clang::OMPExecutableDirective const*)
Line
Count
Source
662
8
  void VisitOMPExecutableDirective(const OMPExecutableDirective *Node) {
663
8
    for (const auto *C : Node->clauses())
664
0
      Visit(C);
665
8
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitOMPExecutableDirective(clang::OMPExecutableDirective const*)
Line
Count
Source
662
187
  void VisitOMPExecutableDirective(const OMPExecutableDirective *Node) {
663
187
    for (const auto *C : Node->clauses())
664
160
      Visit(C);
665
187
  }
666
667
286
  void VisitInitListExpr(const InitListExpr *ILE) {
668
286
    if (auto *Filler = ILE->getArrayFiller()) {
669
22
      Visit(Filler, "array_filler");
670
22
    }
671
286
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitInitListExpr(clang::InitListExpr const*)
Line
Count
Source
667
10
  void VisitInitListExpr(const InitListExpr *ILE) {
668
10
    if (auto *Filler = ILE->getArrayFiller()) {
669
1
      Visit(Filler, "array_filler");
670
1
    }
671
10
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitInitListExpr(clang::InitListExpr const*)
Line
Count
Source
667
276
  void VisitInitListExpr(const InitListExpr *ILE) {
668
276
    if (auto *Filler = ILE->getArrayFiller()) {
669
21
      Visit(Filler, "array_filler");
670
21
    }
671
276
  }
672
673
22
  void VisitBlockExpr(const BlockExpr *Node) { Visit(Node->getBlockDecl()); }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitBlockExpr(clang::BlockExpr const*)
Line
Count
Source
673
3
  void VisitBlockExpr(const BlockExpr *Node) { Visit(Node->getBlockDecl()); }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitBlockExpr(clang::BlockExpr const*)
Line
Count
Source
673
19
  void VisitBlockExpr(const BlockExpr *Node) { Visit(Node->getBlockDecl()); }
674
675
124
  void VisitOpaqueValueExpr(const OpaqueValueExpr *Node) {
676
124
    if (Expr *Source = Node->getSourceExpr())
677
122
      Visit(Source);
678
124
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitOpaqueValueExpr(clang::OpaqueValueExpr const*)
Line
Count
Source
675
52
  void VisitOpaqueValueExpr(const OpaqueValueExpr *Node) {
676
52
    if (Expr *Source = Node->getSourceExpr())
677
52
      Visit(Source);
678
52
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitOpaqueValueExpr(clang::OpaqueValueExpr const*)
Line
Count
Source
675
72
  void VisitOpaqueValueExpr(const OpaqueValueExpr *Node) {
676
72
    if (Expr *Source = Node->getSourceExpr())
677
70
      Visit(Source);
678
72
  }
679
680
17
  void VisitGenericSelectionExpr(const GenericSelectionExpr *E) {
681
17
    Visit(E->getControllingExpr());
682
17
    Visit(E->getControllingExpr()->getType()); // FIXME: remove
683
684
30
    for (const auto Assoc : E->associations()) {
685
30
      Visit(Assoc);
686
30
    }
687
17
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitGenericSelectionExpr(clang::GenericSelectionExpr const*)
Line
Count
Source
680
7
  void VisitGenericSelectionExpr(const GenericSelectionExpr *E) {
681
7
    Visit(E->getControllingExpr());
682
7
    Visit(E->getControllingExpr()->getType()); // FIXME: remove
683
684
12
    for (const auto Assoc : E->associations()) {
685
12
      Visit(Assoc);
686
12
    }
687
7
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitGenericSelectionExpr(clang::GenericSelectionExpr const*)
Line
Count
Source
680
10
  void VisitGenericSelectionExpr(const GenericSelectionExpr *E) {
681
10
    Visit(E->getControllingExpr());
682
10
    Visit(E->getControllingExpr()->getType()); // FIXME: remove
683
684
18
    for (const auto Assoc : E->associations()) {
685
18
      Visit(Assoc);
686
18
    }
687
10
  }
688
689
142
  void VisitLambdaExpr(const LambdaExpr *Node) {
690
142
    if (Traversal == TK_IgnoreUnlessSpelledInSource) {
691
0
      for (unsigned I = 0, N = Node->capture_size(); I != N; ++I) {
692
0
        const auto *C = Node->capture_begin() + I;
693
0
        if (!C->isExplicit())
694
0
          continue;
695
0
        if (Node->isInitCapture(C))
696
0
          Visit(C->getCapturedVar());
697
0
        else
698
0
          Visit(Node->capture_init_begin()[I]);
699
0
      }
700
0
      dumpTemplateParameters(Node->getTemplateParameterList());
701
0
      for (const auto *P : Node->getCallOperator()->parameters())
702
0
        Visit(P);
703
0
      Visit(Node->getBody());
704
142
    } else {
705
142
      return Visit(Node->getLambdaClass());
706
142
    }
707
142
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitLambdaExpr(clang::LambdaExpr const*)
Line
Count
Source
689
17
  void VisitLambdaExpr(const LambdaExpr *Node) {
690
17
    if (Traversal == TK_IgnoreUnlessSpelledInSource) {
691
0
      for (unsigned I = 0, N = Node->capture_size(); I != N; ++I) {
692
0
        const auto *C = Node->capture_begin() + I;
693
0
        if (!C->isExplicit())
694
0
          continue;
695
0
        if (Node->isInitCapture(C))
696
0
          Visit(C->getCapturedVar());
697
0
        else
698
0
          Visit(Node->capture_init_begin()[I]);
699
0
      }
700
0
      dumpTemplateParameters(Node->getTemplateParameterList());
701
0
      for (const auto *P : Node->getCallOperator()->parameters())
702
0
        Visit(P);
703
0
      Visit(Node->getBody());
704
17
    } else {
705
17
      return Visit(Node->getLambdaClass());
706
17
    }
707
17
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitLambdaExpr(clang::LambdaExpr const*)
Line
Count
Source
689
125
  void VisitLambdaExpr(const LambdaExpr *Node) {
690
125
    if (Traversal == TK_IgnoreUnlessSpelledInSource) {
691
0
      for (unsigned I = 0, N = Node->capture_size(); I != N; ++I) {
692
0
        const auto *C = Node->capture_begin() + I;
693
0
        if (!C->isExplicit())
694
0
          continue;
695
0
        if (Node->isInitCapture(C))
696
0
          Visit(C->getCapturedVar());
697
0
        else
698
0
          Visit(Node->capture_init_begin()[I]);
699
0
      }
700
0
      dumpTemplateParameters(Node->getTemplateParameterList());
701
0
      for (const auto *P : Node->getCallOperator()->parameters())
702
0
        Visit(P);
703
0
      Visit(Node->getBody());
704
125
    } else {
705
125
      return Visit(Node->getLambdaClass());
706
125
    }
707
125
  }
708
709
13
  void VisitSizeOfPackExpr(const SizeOfPackExpr *Node) {
710
13
    if (Node->isPartiallySubstituted())
711
0
      for (const auto &A : Node->getPartialArguments())
712
0
        Visit(A);
713
13
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitSizeOfPackExpr(clang::SizeOfPackExpr const*)
Line
Count
Source
709
1
  void VisitSizeOfPackExpr(const SizeOfPackExpr *Node) {
710
1
    if (Node->isPartiallySubstituted())
711
0
      for (const auto &A : Node->getPartialArguments())
712
0
        Visit(A);
713
1
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitSizeOfPackExpr(clang::SizeOfPackExpr const*)
Line
Count
Source
709
12
  void VisitSizeOfPackExpr(const SizeOfPackExpr *Node) {
710
12
    if (Node->isPartiallySubstituted())
711
0
      for (const auto &A : Node->getPartialArguments())
712
0
        Visit(A);
713
12
  }
714
715
19
  void VisitSubstNonTypeTemplateParmExpr(const SubstNonTypeTemplateParmExpr *E) {
716
19
    Visit(E->getParameter());
717
19
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitSubstNonTypeTemplateParmExpr(clang::SubstNonTypeTemplateParmExpr const*)
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitSubstNonTypeTemplateParmExpr(clang::SubstNonTypeTemplateParmExpr const*)
Line
Count
Source
715
19
  void VisitSubstNonTypeTemplateParmExpr(const SubstNonTypeTemplateParmExpr *E) {
716
19
    Visit(E->getParameter());
717
19
  }
718
  void VisitSubstNonTypeTemplateParmPackExpr(
719
1
      const SubstNonTypeTemplateParmPackExpr *E) {
720
1
    Visit(E->getParameterPack());
721
1
    Visit(E->getArgumentPack());
722
1
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitSubstNonTypeTemplateParmPackExpr(clang::SubstNonTypeTemplateParmPackExpr const*)
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitSubstNonTypeTemplateParmPackExpr(clang::SubstNonTypeTemplateParmPackExpr const*)
Line
Count
Source
719
1
      const SubstNonTypeTemplateParmPackExpr *E) {
720
1
    Visit(E->getParameterPack());
721
1
    Visit(E->getArgumentPack());
722
1
  }
723
724
11
  void VisitObjCAtCatchStmt(const ObjCAtCatchStmt *Node) {
725
11
    if (const VarDecl *CatchParam = Node->getCatchParamDecl())
726
8
      Visit(CatchParam);
727
11
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitObjCAtCatchStmt(clang::ObjCAtCatchStmt const*)
Line
Count
Source
724
2
  void VisitObjCAtCatchStmt(const ObjCAtCatchStmt *Node) {
725
2
    if (const VarDecl *CatchParam = Node->getCatchParamDecl())
726
1
      Visit(CatchParam);
727
2
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitObjCAtCatchStmt(clang::ObjCAtCatchStmt const*)
Line
Count
Source
724
9
  void VisitObjCAtCatchStmt(const ObjCAtCatchStmt *Node) {
725
9
    if (const VarDecl *CatchParam = Node->getCatchParamDecl())
726
7
      Visit(CatchParam);
727
9
  }
728
729
14
  void VisitCXXForRangeStmt(const CXXForRangeStmt *Node) {
730
14
    if (Traversal == TK_IgnoreUnlessSpelledInSource) {
731
0
      Visit(Node->getInit());
732
0
      Visit(Node->getLoopVariable());
733
0
      Visit(Node->getRangeInit());
734
0
      Visit(Node->getBody());
735
0
    }
736
14
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitCXXForRangeStmt(clang::CXXForRangeStmt const*)
Line
Count
Source
729
3
  void VisitCXXForRangeStmt(const CXXForRangeStmt *Node) {
730
3
    if (Traversal == TK_IgnoreUnlessSpelledInSource) {
731
0
      Visit(Node->getInit());
732
0
      Visit(Node->getLoopVariable());
733
0
      Visit(Node->getRangeInit());
734
0
      Visit(Node->getBody());
735
0
    }
736
3
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitCXXForRangeStmt(clang::CXXForRangeStmt const*)
Line
Count
Source
729
11
  void VisitCXXForRangeStmt(const CXXForRangeStmt *Node) {
730
11
    if (Traversal == TK_IgnoreUnlessSpelledInSource) {
731
0
      Visit(Node->getInit());
732
0
      Visit(Node->getLoopVariable());
733
0
      Visit(Node->getRangeInit());
734
0
      Visit(Node->getBody());
735
0
    }
736
11
  }
737
738
871
  void VisitCallExpr(const CallExpr *Node) {
739
871
    for (const auto *Child :
740
1.31k
         make_filter_range(Node->children(), [this](const Stmt *Child) {
741
1.31k
           if (Traversal != TK_IgnoreUnlessSpelledInSource)
742
1.31k
             return false;
743
0
           return !isa<CXXDefaultArgExpr>(Child);
744
0
         })) {
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitCallExpr(clang::CallExpr const*)::'lambda'(clang::Stmt const*)::operator()(clang::Stmt const*) const
Line
Count
Source
740
62
         make_filter_range(Node->children(), [this](const Stmt *Child) {
741
62
           if (Traversal != TK_IgnoreUnlessSpelledInSource)
742
62
             return false;
743
0
           return !isa<CXXDefaultArgExpr>(Child);
744
0
         })) {
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitCallExpr(clang::CallExpr const*)::'lambda'(clang::Stmt const*)::operator()(clang::Stmt const*) const
Line
Count
Source
740
1.25k
         make_filter_range(Node->children(), [this](const Stmt *Child) {
741
1.25k
           if (Traversal != TK_IgnoreUnlessSpelledInSource)
742
1.25k
             return false;
743
0
           return !isa<CXXDefaultArgExpr>(Child);
744
0
         })) {
745
0
      Visit(Child);
746
0
    }
747
871
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitCallExpr(clang::CallExpr const*)
Line
Count
Source
738
40
  void VisitCallExpr(const CallExpr *Node) {
739
40
    for (const auto *Child :
740
40
         make_filter_range(Node->children(), [this](const Stmt *Child) {
741
40
           if (Traversal != TK_IgnoreUnlessSpelledInSource)
742
40
             return false;
743
40
           return !isa<CXXDefaultArgExpr>(Child);
744
0
         })) {
745
0
      Visit(Child);
746
0
    }
747
40
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitCallExpr(clang::CallExpr const*)
Line
Count
Source
738
831
  void VisitCallExpr(const CallExpr *Node) {
739
831
    for (const auto *Child :
740
831
         make_filter_range(Node->children(), [this](const Stmt *Child) {
741
831
           if (Traversal != TK_IgnoreUnlessSpelledInSource)
742
831
             return false;
743
831
           return !isa<CXXDefaultArgExpr>(Child);
744
0
         })) {
745
0
      Visit(Child);
746
0
    }
747
831
  }
748
749
39
  void VisitExpressionTemplateArgument(const TemplateArgument &TA) {
750
39
    Visit(TA.getAsExpr());
751
39
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitExpressionTemplateArgument(clang::TemplateArgument const&)
Line
Count
Source
749
39
  void VisitExpressionTemplateArgument(const TemplateArgument &TA) {
750
39
    Visit(TA.getAsExpr());
751
39
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitExpressionTemplateArgument(clang::TemplateArgument const&)
752
753
351
  void VisitTypeTemplateArgument(const TemplateArgument &TA) {
754
351
    Visit(TA.getAsType());
755
351
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitTypeTemplateArgument(clang::TemplateArgument const&)
Line
Count
Source
753
344
  void VisitTypeTemplateArgument(const TemplateArgument &TA) {
754
344
    Visit(TA.getAsType());
755
344
  }
clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitTypeTemplateArgument(clang::TemplateArgument const&)
Line
Count
Source
753
7
  void VisitTypeTemplateArgument(const TemplateArgument &TA) {
754
7
    Visit(TA.getAsType());
755
7
  }
756
757
23
  void VisitPackTemplateArgument(const TemplateArgument &TA) {
758
23
    for (const auto &TArg : TA.pack_elements())
759
53
      Visit(TArg);
760
23
  }
clang::ASTNodeTraverser<clang::ASTDumper, clang::TextNodeDumper>::VisitPackTemplateArgument(clang::TemplateArgument const&)
Line
Count
Source
757
23
  void VisitPackTemplateArgument(const TemplateArgument &TA) {
758
23
    for (const auto &TArg : TA.pack_elements())
759
53
      Visit(TArg);
760
23
  }
Unexecuted instantiation: clang::ASTNodeTraverser<clang::JSONDumper, clang::JSONNodeDumper>::VisitPackTemplateArgument(clang::TemplateArgument const&)
761
762
  // Implements Visit methods for Attrs.
763
#include "clang/AST/AttrNodeTraverse.inc"
764
};
765
766
} // namespace clang
767
768
#endif // LLVM_CLANG_AST_ASTNODETRAVERSER_H