clang 20.0.0git
Classes | Public Member Functions | List of all members
clang::syntax::TreeBuilder Class Reference

A helper class for constructing the syntax tree while traversing a clang AST. More...

Public Member Functions

 TreeBuilder (syntax::Arena &Arena, TokenBufferTokenManager &TBTM)
 
llvm::BumpPtrAllocator & allocator ()
 
const SourceManagersourceManager () const
 
void foldNode (ArrayRef< syntax::Token > Range, syntax::Tree *New, ASTPtr From)
 Populate children for New node, assuming it covers tokens from Range.
 
void foldNode (ArrayRef< syntax::Token > Range, syntax::Tree *New, TypeLoc L)
 
void foldNode (llvm::ArrayRef< syntax::Token > Range, syntax::Tree *New, NestedNameSpecifierLoc From)
 
void foldList (ArrayRef< syntax::Token > SuperRange, syntax::List *New, ASTPtr From)
 Populate children for New list, assuming it covers tokens from a subrange of SuperRange.
 
void noticeDeclWithoutSemicolon (Decl *D)
 Notifies that we should not consume trailing semicolon when computing token range of D.
 
void markStmtChild (Stmt *Child, NodeRole Role)
 Mark the Child node with a corresponding Role.
 
void markExprChild (Expr *Child, NodeRole Role)
 Should be called for expressions in non-statement position to avoid wrapping into expression statement.
 
void markChildToken (SourceLocation Loc, NodeRole R)
 Set role for a token starting at Loc.
 
void markChildToken (const syntax::Token *T, NodeRole R)
 Set role for T.
 
void markChild (syntax::Node *N, NodeRole R)
 Set role for N.
 
void markChild (ASTPtr N, NodeRole R)
 Set role for the syntax node matching N.
 
void markChild (NestedNameSpecifierLoc N, NodeRole R)
 Set role for the syntax node matching N.
 
syntax::TranslationUnit * finalize () &&
 Finish building the tree and consume the root node.
 
const syntax::TokenfindToken (SourceLocation L) const
 Finds a token starting at L. The token must exist if L is valid.
 
ArrayRef< syntax::TokengetRange (SourceRange Range) const
 Finds the syntax tokens corresponding to the SourceRange.
 
ArrayRef< syntax::TokengetRange (SourceLocation First, SourceLocation Last) const
 Finds the syntax tokens corresponding to the passed source locations.
 
ArrayRef< syntax::TokengetTemplateRange (const ClassTemplateSpecializationDecl *D) const
 
bool isResponsibleForCreatingDeclaration (const Decl *D) const
 Returns true if D is the last declarator in a chain and is thus reponsible for creating SimpleDeclaration for the whole chain.
 
ArrayRef< syntax::TokengetDeclarationRange (Decl *D)
 
ArrayRef< syntax::TokengetExprRange (const Expr *E) const
 
ArrayRef< syntax::TokengetStmtRange (const Stmt *S) const
 Find the adjusted range for the statement, consuming the trailing semicolon when needed.
 

Detailed Description

A helper class for constructing the syntax tree while traversing a clang AST.

At each point of the traversal we maintain a list of pending nodes. Initially all tokens are added as pending nodes. When processing a clang AST node, the clients need to:

Note that all children are expected to be processed when building a node.

Call finalize() to finish building the tree and consume the root node.

Definition at line 367 of file BuildTree.cpp.

Constructor & Destructor Documentation

◆ TreeBuilder()

clang::syntax::TreeBuilder::TreeBuilder ( syntax::Arena Arena,
TokenBufferTokenManager TBTM 
)
inline

Member Function Documentation

◆ allocator()

llvm::BumpPtrAllocator & clang::syntax::TreeBuilder::allocator ( )
inline

Definition at line 377 of file BuildTree.cpp.

References clang::syntax::Arena::getAllocator().

◆ finalize()

syntax::TranslationUnit * clang::syntax::TreeBuilder::finalize ( ) &&
inline

◆ findToken()

const syntax::Token * clang::syntax::TreeBuilder::findToken ( SourceLocation  L) const

Finds a token starting at L. The token must exist if L is valid.

Definition at line 1746 of file BuildTree.cpp.

References clang::SourceLocation::isInvalid().

Referenced by clang::syntax::TreeBuilder::getRange().

◆ foldList()

void clang::syntax::TreeBuilder::foldList ( ArrayRef< syntax::Token SuperRange,
syntax::List New,
ASTPtr  From 
)
inline

Populate children for New list, assuming it covers tokens from a subrange of SuperRange.

Definition at line 406 of file BuildTree.cpp.

References clang::syntax::TokenBufferTokenManager::tokenBuffer().

◆ foldNode() [1/3]

void clang::syntax::TreeBuilder::foldNode ( ArrayRef< syntax::Token Range,
syntax::Tree New,
ASTPtr  From 
)
inline

Populate children for New node, assuming it covers tokens from Range.

Definition at line 384 of file BuildTree.cpp.

References Range, and clang::syntax::TokenBufferTokenManager::tokenBuffer().

Referenced by clang::syntax::TreeBuilder::foldNode().

◆ foldNode() [2/3]

void clang::syntax::TreeBuilder::foldNode ( ArrayRef< syntax::Token Range,
syntax::Tree New,
TypeLoc  L 
)
inline

Definition at line 391 of file BuildTree.cpp.

References clang::syntax::TreeBuilder::foldNode(), and Range.

◆ foldNode() [3/3]

void clang::syntax::TreeBuilder::foldNode ( llvm::ArrayRef< syntax::Token Range,
syntax::Tree New,
NestedNameSpecifierLoc  From 
)
inline

Definition at line 396 of file BuildTree.cpp.

References Range, and clang::syntax::TokenBufferTokenManager::tokenBuffer().

◆ getDeclarationRange()

ArrayRef< syntax::Token > clang::syntax::TreeBuilder::getDeclarationRange ( Decl D)
inline

◆ getExprRange()

ArrayRef< syntax::Token > clang::syntax::TreeBuilder::getExprRange ( const Expr E) const
inline

◆ getRange() [1/2]

ArrayRef< syntax::Token > clang::syntax::TreeBuilder::getRange ( SourceLocation  First,
SourceLocation  Last 
) const
inline

Finds the syntax tokens corresponding to the passed source locations.

First is the start position of the first token and Last is the start position of the last token.

Definition at line 466 of file BuildTree.cpp.

References clang::syntax::TreeBuilder::findToken(), clang::First, clang::SourceManager::isBeforeInTranslationUnit(), clang::Last, and clang::syntax::TokenBufferTokenManager::sourceManager().

◆ getRange() [2/2]

ArrayRef< syntax::Token > clang::syntax::TreeBuilder::getRange ( SourceRange  Range) const
inline

◆ getStmtRange()

ArrayRef< syntax::Token > clang::syntax::TreeBuilder::getStmtRange ( const Stmt S) const
inline

Find the adjusted range for the statement, consuming the trailing semicolon when needed.

Definition at line 525 of file BuildTree.cpp.

References clang::syntax::TreeBuilder::getRange().

◆ getTemplateRange()

ArrayRef< syntax::Token > clang::syntax::TreeBuilder::getTemplateRange ( const ClassTemplateSpecializationDecl D) const
inline

◆ isResponsibleForCreatingDeclaration()

bool clang::syntax::TreeBuilder::isResponsibleForCreatingDeclaration ( const Decl D) const
inline

Returns true if D is the last declarator in a chain and is thus reponsible for creating SimpleDeclaration for the whole chain.

Definition at line 483 of file BuildTree.cpp.

References D, clang::Decl::getBeginLoc(), clang::Decl::getKind(), and clang::Decl::getNextDeclInContext().

◆ markChild() [1/3]

void clang::syntax::TreeBuilder::markChild ( ASTPtr  N,
NodeRole  R 
)

Set role for the syntax node matching N.

Definition at line 1706 of file BuildTree.cpp.

◆ markChild() [2/3]

void clang::syntax::TreeBuilder::markChild ( NestedNameSpecifierLoc  N,
NodeRole  R 
)

Set role for the syntax node matching N.

Definition at line 1711 of file BuildTree.cpp.

◆ markChild() [3/3]

void clang::syntax::TreeBuilder::markChild ( syntax::Node N,
NodeRole  R 
)

Set role for N.

Definition at line 1701 of file BuildTree.cpp.

◆ markChildToken() [1/2]

void clang::syntax::TreeBuilder::markChildToken ( const syntax::Token T,
NodeRole  R 
)

Set role for T.

Definition at line 1695 of file BuildTree.cpp.

References clang::T.

◆ markChildToken() [2/2]

void clang::syntax::TreeBuilder::markChildToken ( SourceLocation  Loc,
NodeRole  R 
)

Set role for a token starting at Loc.

Definition at line 1689 of file BuildTree.cpp.

References clang::SourceLocation::isInvalid(), and Loc.

◆ markExprChild()

void clang::syntax::TreeBuilder::markExprChild ( Expr Child,
NodeRole  Role 
)

Should be called for expressions in non-statement position to avoid wrapping into expression statement.

Definition at line 1736 of file BuildTree.cpp.

References IgnoreImplicit().

◆ markStmtChild()

void clang::syntax::TreeBuilder::markStmtChild ( Stmt Child,
NodeRole  Role 
)

Mark the Child node with a corresponding Role.

All marked children should be consumed by foldNode. When called on expressions (clang::Expr is derived from clang::Stmt), wraps expressions into expression statement.

Definition at line 1717 of file BuildTree.cpp.

References clang::syntax::Expression.

◆ noticeDeclWithoutSemicolon()

void clang::syntax::TreeBuilder::noticeDeclWithoutSemicolon ( Decl D)

Notifies that we should not consume trailing semicolon when computing token range of D.

Definition at line 1685 of file BuildTree.cpp.

References D.

◆ sourceManager()

const SourceManager & clang::syntax::TreeBuilder::sourceManager ( ) const
inline

The documentation for this class was generated from the following file: