|
clang 22.0.0git
|
A RecursiveASTVisitor subclass that guarantees that AST traversal is performed in a lexical order (i.e. More...
#include "clang/AST/LexicallyOrderedRecursiveASTVisitor.h"
Public Member Functions | |
| LexicallyOrderedRecursiveASTVisitor (const SourceManager &SM) | |
| bool | TraverseObjCImplementationDecl (ObjCImplementationDecl *D) |
| bool | TraverseObjCCategoryImplDecl (ObjCCategoryImplDecl *D) |
| bool | TraverseDeclContextHelper (DeclContext *DC) |
| Stmt::child_range | getStmtChildren (Stmt *S) |
| SmallVector< Stmt *, 8 > | getStmtChildren (CXXOperatorCallExpr *CE) |
| Public Member Functions inherited from clang::RecursiveASTVisitor< Derived > | |
| Derived & | getDerived () |
| Return a reference to the derived class. | |
| bool | shouldVisitTemplateInstantiations () const |
| Return whether this visitor should recurse into template instantiations. | |
| bool | shouldWalkTypesOfTypeLocs () const |
| Return whether this visitor should recurse into the types of TypeLocs. | |
| bool | shouldVisitImplicitCode () const |
| Return whether this visitor should recurse into implicit code, e.g., implicit constructors and destructors. | |
| bool | shouldVisitLambdaBody () const |
| Return whether this visitor should recurse into lambda body. | |
| bool | shouldTraversePostOrder () const |
| Return whether this visitor should traverse post-order. | |
| bool | TraverseAST (ASTContext &AST) |
| Recursively visits an entire AST, starting from the TranslationUnitDecl. | |
| bool | TraverseStmt (Stmt *S, DataRecursionQueue *Queue=nullptr) |
| Recursively visit a statement or expression, by dispatching to Traverse*() based on the argument's dynamic type. | |
| bool | dataTraverseStmtPre (Stmt *S) |
| Invoked before visiting a statement or expression via data recursion. | |
| bool | dataTraverseStmtPost (Stmt *S) |
| Invoked after visiting a statement or expression via data recursion. | |
| bool | TraverseType (QualType T, bool TraverseQualifier=true) |
| Recursively visit a type, by dispatching to Traverse*Type() based on the argument's getTypeClass() property. | |
| bool | TraverseTypeLoc (TypeLoc TL, bool TraverseQualifier=true) |
| Recursively visit a type with location, by dispatching to Traverse*TypeLoc() based on the argument type's getTypeClass() property. | |
| bool | TraverseAttr (Attr *At) |
| Recursively visit an attribute, by dispatching to Traverse*Attr() based on the argument's dynamic type. | |
| bool | TraverseDecl (Decl *D) |
| Recursively visit a declaration, by dispatching to Traverse*Decl() based on the argument's dynamic type. | |
| bool | TraverseNestedNameSpecifier (NestedNameSpecifier NNS) |
| Recursively visit a C++ nested-name-specifier. | |
| bool | TraverseNestedNameSpecifierLoc (NestedNameSpecifierLoc NNS) |
| Recursively visit a C++ nested-name-specifier with location information. | |
| bool | TraverseDeclarationNameInfo (DeclarationNameInfo NameInfo) |
| Recursively visit a name with its location information. | |
| bool | TraverseTemplateName (TemplateName Template) |
| Recursively visit a template name and dispatch to the appropriate method. | |
| bool | TraverseTemplateArgument (const TemplateArgument &Arg) |
| Recursively visit a template argument and dispatch to the appropriate method for the argument type. | |
| bool | TraverseTemplateArgumentLoc (const TemplateArgumentLoc &ArgLoc) |
| Recursively visit a template argument location and dispatch to the appropriate method for the argument type. | |
| bool | TraverseTemplateArguments (ArrayRef< TemplateArgument > Args) |
| Recursively visit a set of template arguments. | |
| bool | TraverseCXXBaseSpecifier (const CXXBaseSpecifier &Base) |
| Recursively visit a base specifier. | |
| bool | TraverseConstructorInitializer (CXXCtorInitializer *Init) |
| Recursively visit a constructor initializer. | |
| bool | TraverseLambdaCapture (LambdaExpr *LE, const LambdaCapture *C, Expr *Init) |
| Recursively visit a lambda capture. | |
| bool | TraverseSynOrSemInitListExpr (InitListExpr *S, DataRecursionQueue *Queue=nullptr) |
| Recursively visit the syntactic or semantic form of an initialization list. | |
| bool | TraverseObjCProtocolLoc (ObjCProtocolLoc ProtocolLoc) |
| Recursively visit an Objective-C protocol reference with location information. | |
| bool | TraverseConceptReference (ConceptReference *CR) |
| Recursively visit concept reference with location information. | |
| bool | VisitConceptReference (ConceptReference *CR) |
| bool | VisitAttr (Attr *A) |
| Stmt::child_range | getStmtChildren (Stmt *S) |
| bool | WalkUpFromStmt (Stmt *S) |
| bool | VisitStmt (Stmt *S) |
| bool | WalkUpFromType (Type *T) |
| bool | VisitType (Type *T) |
| bool | WalkUpFromTypeLoc (TypeLoc TL) |
| bool | VisitTypeLoc (TypeLoc TL) |
| bool | WalkUpFromQualifiedTypeLoc (QualifiedTypeLoc TL) |
| bool | VisitQualifiedTypeLoc (QualifiedTypeLoc TL) |
| bool | WalkUpFromUnqualTypeLoc (UnqualTypeLoc TL) |
| bool | VisitUnqualTypeLoc (UnqualTypeLoc TL) |
| bool | WalkUpFromDecl (Decl *D) |
| bool | VisitDecl (Decl *D) |
| bool | canIgnoreChildDeclWhileTraversingDeclContext (const Decl *Child) |
| bool | TraverseTypeConstraint (const TypeConstraint *C) |
| bool | TraverseConceptRequirement (concepts::Requirement *R) |
| bool | TraverseConceptTypeRequirement (concepts::TypeRequirement *R) |
| bool | TraverseConceptExprRequirement (concepts::ExprRequirement *R) |
| bool | TraverseConceptNestedRequirement (concepts::NestedRequirement *R) |
| bool | dataTraverseNode (Stmt *S, DataRecursionQueue *Queue) |
Additional Inherited Members | |
| Public Types inherited from clang::RecursiveASTVisitor< Derived > | |
| typedef SmallVectorImpl< llvm::PointerIntPair< Stmt *, 1, bool > > | DataRecursionQueue |
| A queue used for performing data recursion over statements. | |
A RecursiveASTVisitor subclass that guarantees that AST traversal is performed in a lexical order (i.e.
the order in which declarations are written in the source).
RecursiveASTVisitor doesn't guarantee lexical ordering because there are some declarations, like Objective-C @implementation declarations that might be represented in the AST differently to how they were written in the source. In particular, Objective-C @implementation declarations may contain non-Objective-C declarations, like functions:
@implementation MyClass
@end
Clang's AST stores these declarations outside of the @implementation declaration, so the example above would be represented using the following AST: |-ObjCImplementationDecl ... MyClass | -ObjCMethodDecl ... method / | ... / -FunctionDecl ... normalFunction ...
This class ensures that these declarations are traversed before the corresponding TraverseDecl for the @implementation returns. This ensures that the lexical parent relationship between these declarations and the @implementation is preserved while traversing the AST. Note that the current implementation doesn't mix these declarations with the declarations contained in the @implementation, so the traversal of all of the declarations in the @implementation still doesn't follow the lexical order.
Definition at line 59 of file LexicallyOrderedRecursiveASTVisitor.h.
|
inline |
Definition at line 64 of file LexicallyOrderedRecursiveASTVisitor.h.
|
inline |
Definition at line 115 of file LexicallyOrderedRecursiveASTVisitor.h.
References Children, clang::CallExpr::children(), clang::CXXOperatorCallExpr::getOperator(), and clang::CXXOperatorCallExpr::isInfixBinaryOp().
|
inline |
Definition at line 113 of file LexicallyOrderedRecursiveASTVisitor.h.
References clang::Stmt::children().
|
inline |
Definition at line 79 of file LexicallyOrderedRecursiveASTVisitor.h.
References clang::RecursiveASTVisitor< Derived >::canIgnoreChildDeclWhileTraversingDeclContext(), clang::DeclContext::decls_begin(), clang::DeclContext::decls_end(), clang::Decl::getBeginLoc(), clang::RecursiveASTVisitor< Derived >::getDerived(), clang::isa(), and clang::RecursiveASTVisitor< Derived >::TraverseDecl().
|
inline |
Definition at line 74 of file LexicallyOrderedRecursiveASTVisitor.h.
References clang::Result.
|
inline |
Definition at line 66 of file LexicallyOrderedRecursiveASTVisitor.h.
References clang::Result.