97 return Visitor.ShouldVisitTemplateInstantiations;
101 return Visitor.ShouldWalkTypesOfTypeLocs;
105 return Visitor.ShouldVisitImplicitCode;
123 return Visitor.TraverseConstructorInitializer(
Init);
127 return Visitor.TraverseTemplateArgument(Arg);
131 return Visitor.TraverseTemplateArgumentLoc(ArgLoc);
135 return Visitor.TraverseTemplateName(Template);
139 return Visitor.TraverseObjCProtocolLoc(ProtocolLoc);
143 return Visitor.TraverseTypeConstraint(
C);
146 return Visitor.TraverseConceptRequirement(R);
149 return Visitor.TraverseConceptTypeRequirement(R);
152 return Visitor.TraverseConceptExprRequirement(R);
155 return Visitor.TraverseConceptNestedRequirement(R);
159 return Visitor.TraverseConceptReference(CR);
163 return Visitor.TraverseCXXBaseSpecifier(
Base);
167 return Visitor.TraverseDeclarationNameInfo(NameInfo);
172 return Visitor.TraverseLambdaCapture(LE,
C,
Init);
176 return Visitor.TraverseNestedNameSpecifier(NNS);
180 return Visitor.TraverseNestedNameSpecifierLoc(NNS);
184 return Visitor.VisitConceptReference(CR);
198 return Visitor.dataTraverseNode(S);
208#define DEF_TRAVERSE_TMPL_INST(kind) \
209 bool TraverseTemplateInstantiations(kind##TemplateDecl *D) { \
210 return Visitor.TraverseTemplateInstantiations(D); \
215#undef DEF_TRAVERSE_TMPL_INST
218#define ABSTRACT_DECL(DECL)
219#define DECL(CLASS, BASE) \
220 bool Traverse##CLASS##Decl(CLASS##Decl *D) { \
221 return Visitor.Traverse##CLASS##Decl(D); \
223#include "clang/AST/DeclNodes.inc"
225#define DECL(CLASS, BASE) \
226 bool Visit##CLASS##Decl(CLASS##Decl *D) { \
227 return Visitor.Visit##CLASS##Decl(D); \
229#include "clang/AST/DeclNodes.inc"
232#define ABSTRACT_STMT(STMT)
233#define STMT(CLASS, PARENT) \
234 bool Traverse##CLASS(CLASS *S) { return Visitor.Traverse##CLASS(S); }
235#include "clang/AST/StmtNodes.inc"
237#define STMT(CLASS, PARENT) \
238 bool Visit##CLASS(CLASS *S) { return Visitor.Visit##CLASS(S); }
239#include "clang/AST/StmtNodes.inc"
242#define ABSTRACT_TYPE(CLASS, BASE)
243#define TYPE(CLASS, BASE) \
244 bool Traverse##CLASS##Type(CLASS##Type *T) { \
245 return Visitor.Traverse##CLASS##Type(T); \
247#include "clang/AST/TypeNodes.inc"
249#define TYPE(CLASS, BASE) \
250 bool Visit##CLASS##Type(CLASS##Type *T) { \
251 return Visitor.Visit##CLASS##Type(T); \
253#include "clang/AST/TypeNodes.inc"
256#define ABSTRACT_TYPELOC(CLASS, BASE)
257#define TYPELOC(CLASS, BASE) \
258 bool Traverse##CLASS##TypeLoc(CLASS##TypeLoc TL) { \
259 return Visitor.Traverse##CLASS##TypeLoc(TL); \
261#include "clang/AST/TypeLocNodes.def"
263#define TYPELOC(CLASS, BASE) \
264 bool Visit##CLASS##TypeLoc(CLASS##TypeLoc TL) { \
265 return Visitor.Visit##CLASS##TypeLoc(TL); \
267#include "clang/AST/TypeLocNodes.def"
279#define FORWARD_TO_BASE(Function, Type, RefOrPointer) \
280 template <bool Const> \
281 bool DynamicRecursiveASTVisitorBase<Const>::Function( \
282 MaybeConst<Type> RefOrPointer Param) { \
283 return Impl<Const>(*this).RecursiveASTVisitor<Impl<Const>>::Function( \
284 const_cast<Type RefOrPointer>(Param)); \
288#define FORWARD_TO_BASE_EXACT(Function, Type) \
289 template <bool Const> \
290 bool DynamicRecursiveASTVisitorBase<Const>::Function(Type Param) { \
291 return Impl<Const>(*this).RecursiveASTVisitor<Impl<Const>>::Function( \
305FORWARD_TO_BASE(TraverseConceptTypeRequirement, concepts::TypeRequirement, *)
306FORWARD_TO_BASE(TraverseConceptExprRequirement, concepts::ExprRequirement, *)
309 concepts::NestedRequirement, *)
327 return Impl<Const>(*
this)
328 .RecursiveASTVisitor<Impl<Const>>::TraverseLambdaCapture(
335 return Impl<Const>(*this).RecursiveASTVisitor<Impl<Const>>::dataTraverseNode(
336 const_cast<Stmt *
>(S),
nullptr);
340#define ABSTRACT_DECL(DECL)
341#define DECL(CLASS, BASE) \
342 FORWARD_TO_BASE(Traverse##CLASS##Decl, CLASS##Decl, *) \
343 FORWARD_TO_BASE(WalkUpFrom##CLASS##Decl, CLASS##Decl, *)
344#include "clang/AST/DeclNodes.inc"
347#define ABSTRACT_STMT(STMT)
348#define STMT(CLASS, PARENT) FORWARD_TO_BASE(Traverse##CLASS, CLASS, *)
349#include "clang/AST/StmtNodes.inc"
351#define STMT(CLASS, PARENT) FORWARD_TO_BASE(WalkUpFrom##CLASS, CLASS, *)
352#include "clang/AST/StmtNodes.inc"
355#define ABSTRACT_TYPE(CLASS, BASE)
356#define TYPE(CLASS, BASE) \
357 FORWARD_TO_BASE(Traverse##CLASS##Type, CLASS##Type, *) \
358 FORWARD_TO_BASE(WalkUpFrom##CLASS##Type, CLASS##Type, *)
359#include "clang/AST/TypeNodes.inc"
361#define ABSTRACT_TYPELOC(CLASS, BASE)
362#define TYPELOC(CLASS, BASE) \
363 FORWARD_TO_BASE_EXACT(Traverse##CLASS##TypeLoc, CLASS##TypeLoc)
364#include "clang/AST/TypeLocNodes.def"
366#define TYPELOC(CLASS, BASE) \
367 FORWARD_TO_BASE_EXACT(WalkUpFrom##CLASS##TypeLoc, CLASS##TypeLoc)
368#include "clang/AST/TypeLocNodes.def"
#define FORWARD_TO_BASE_EXACT(Function, Type)
#define FORWARD_TO_BASE(Function, Type, RefOrPointer)
#define DEF_TRAVERSE_TMPL_INST(kind)
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Attr - This represents one attribute.
Represents a base class of a C++ class.
Represents a C++ base or member initializer.
Declaration of a class template.
A reference to a concept and its template args, as it appears in the code.
Decl - This represents one declaration (or definition), e.g.
Recursive AST visitor that supports extension via dynamic dispatch.
std::conditional_t< IsConst, const ASTNode, ASTNode > MaybeConst
virtual bool dataTraverseNode(MaybeConst< Stmt > *S)
This represents one expression.
Declaration of a template function.
Describes the capture of a variable or of this, or of a C++1y init-capture.
A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...
A C++ nested-name-specifier augmented with source location information.
Represents a C++ nested name specifier, such as "\::std::vector<int>::".
A (possibly-)qualified type.
A class that does preorder or postorder depth-first traversal on the entire Clang AST and visits each...
bool TraverseStmt(Stmt *S, DataRecursionQueue *Queue=nullptr)
Recursively visit a statement or expression, by dispatching to Traverse*() based on the argument's dy...
bool TraverseTemplateArgument(const TemplateArgument &Arg)
Recursively visit a template argument and dispatch to the appropriate method for the argument type.
bool TraverseConceptRequirement(concepts::Requirement *R)
bool TraverseType(QualType T)
Recursively visit a type, by dispatching to Traverse*Type() based on the argument's getTypeClass() pr...
bool dataTraverseStmtPre(Stmt *S)
Invoked before visiting a statement or expression via data recursion.
bool TraverseObjCProtocolLoc(ObjCProtocolLoc ProtocolLoc)
Recursively visit an Objective-C protocol reference with location information.
bool TraverseConceptExprRequirement(concepts::ExprRequirement *R)
bool TraverseAST(ASTContext &AST)
Recursively visits an entire AST, starting from the TranslationUnitDecl.
bool shouldVisitTemplateInstantiations() const
Return whether this visitor should recurse into template instantiations.
bool TraverseTemplateArgumentLoc(const TemplateArgumentLoc &ArgLoc)
Recursively visit a template argument location and dispatch to the appropriate method for the argumen...
bool dataTraverseStmtPost(Stmt *S)
Invoked after visiting a statement or expression via data recursion.
bool TraverseNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS)
Recursively visit a C++ nested-name-specifier with location information.
bool TraverseTemplateName(TemplateName Template)
Recursively visit a template name and dispatch to the appropriate method.
bool TraverseNestedNameSpecifier(NestedNameSpecifier *NNS)
Recursively visit a C++ nested-name-specifier.
bool shouldVisitImplicitCode() const
Return whether this visitor should recurse into implicit code, e.g., implicit constructors and destru...
bool TraverseConceptReference(ConceptReference *CR)
Recursively visit concept reference with location information.
bool dataTraverseNode(Stmt *S, DataRecursionQueue *Queue)
bool TraverseDecl(Decl *D)
Recursively visit a declaration, by dispatching to Traverse*Decl() based on the argument's dynamic ty...
bool TraverseTypeLoc(TypeLoc TL)
Recursively visit a type with location, by dispatching to Traverse*TypeLoc() based on the argument ty...
bool TraverseTypeConstraint(const TypeConstraint *C)
bool VisitTypeLoc(TypeLoc TL)
bool TraverseLambdaCapture(LambdaExpr *LE, const LambdaCapture *C, Expr *Init)
Recursively visit a lambda capture.
bool VisitConceptReference(ConceptReference *CR)
bool shouldTraversePostOrder() const
Return whether this visitor should traverse post-order.
bool shouldVisitLambdaBody() const
Return whether this visitor should recurse into lambda body.
bool TraverseAttr(Attr *At)
Recursively visit an attribute, by dispatching to Traverse*Attr() based on the argument's dynamic typ...
bool TraverseConceptNestedRequirement(concepts::NestedRequirement *R)
bool shouldWalkTypesOfTypeLocs() const
Return whether this visitor should recurse into the types of TypeLocs.
bool TraverseDeclarationNameInfo(DeclarationNameInfo NameInfo)
Recursively visit a name with its location information.
bool TraverseCXXBaseSpecifier(const CXXBaseSpecifier &Base)
Recursively visit a base specifier.
bool TraverseConceptTypeRequirement(concepts::TypeRequirement *R)
bool TraverseConstructorInitializer(CXXCtorInitializer *Init)
Recursively visit a constructor initializer.
Stmt - This represents one statement.
Location wrapper for a TemplateArgument.
Represents a template argument.
Represents a C++ template name within the type system.
Models the abbreviated syntax to constrain a template type parameter: template <convertible_to<string...
Base wrapper for a particular "section" of type source info.
The base class of the type hierarchy.
Declaration of a variable template.
A requires-expression requirement which queries the validity and properties of an expression ('simple...
A requires-expression requirement which is satisfied when a general constraint expression is satisfie...
A static requirement that can be used in a requires-expression to check properties of types and expre...
A requires-expression requirement which queries the existence of a type name or type template special...
The JSON file list parser is used to communicate input to InstallAPI.
const FunctionProtoType * T
DeclarationNameInfo - A collector data type for bundling together a DeclarationName and the correspon...