clang
15.0.0git
|
A helper class for constructing the syntax tree while traversing a clang AST. More...
Public Member Functions | |
TreeBuilder (syntax::Arena &Arena) | |
llvm::BumpPtrAllocator & | allocator () |
const SourceManager & | sourceManager () const |
void | foldNode (ArrayRef< syntax::Token > Range, syntax::Tree *New, ASTPtr From) |
Populate children for New node, assuming it covers tokens from Range . More... | |
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 . More... | |
void | noticeDeclWithoutSemicolon (Decl *D) |
Notifies that we should not consume trailing semicolon when computing token range of D . More... | |
void | markStmtChild (Stmt *Child, NodeRole Role) |
Mark the Child node with a corresponding Role . More... | |
void | markExprChild (Expr *Child, NodeRole Role) |
Should be called for expressions in non-statement position to avoid wrapping into expression statement. More... | |
void | markChildToken (SourceLocation Loc, NodeRole R) |
Set role for a token starting at Loc . More... | |
void | markChildToken (const syntax::Token *T, NodeRole R) |
Set role for T . More... | |
void | markChild (syntax::Node *N, NodeRole R) |
Set role for N . More... | |
void | markChild (ASTPtr N, NodeRole R) |
Set role for the syntax node matching N . More... | |
void | markChild (NestedNameSpecifierLoc N, NodeRole R) |
Set role for the syntax node matching N . More... | |
syntax::TranslationUnit * | finalize () && |
Finish building the tree and consume the root node. More... | |
const syntax::Token * | findToken (SourceLocation L) const |
Finds a token starting at L . The token must exist if L is valid. More... | |
ArrayRef< syntax::Token > | getRange (SourceRange Range) const |
Finds the syntax tokens corresponding to the SourceRange . More... | |
ArrayRef< syntax::Token > | getRange (SourceLocation First, SourceLocation Last) const |
Finds the syntax tokens corresponding to the passed source locations. More... | |
ArrayRef< syntax::Token > | getTemplateRange (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. More... | |
ArrayRef< syntax::Token > | getDeclarationRange (Decl *D) |
ArrayRef< syntax::Token > | getExprRange (const Expr *E) const |
ArrayRef< syntax::Token > | getStmtRange (const Stmt *S) const |
Find the adjusted range for the statement, consuming the trailing semicolon when needed. More... | |
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 366 of file BuildTree.cpp.
|
inline |
Definition at line 368 of file BuildTree.cpp.
References clang::syntax::TokenBuffer::expandedTokens(), and clang::syntax::Arena::getTokenBuffer().
|
inline |
Definition at line 373 of file BuildTree.cpp.
References clang::syntax::Arena::getAllocator().
|
inline |
Finish building the tree and consume the root node.
Definition at line 436 of file BuildTree.cpp.
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 1739 of file BuildTree.cpp.
References clang::SourceLocation::isInvalid().
Referenced by clang::syntax::TreeBuilder::getRange().
|
inline |
Populate children for New
list, assuming it covers tokens from a subrange of SuperRange
.
Definition at line 402 of file BuildTree.cpp.
|
inline |
Populate children for New
node, assuming it covers tokens from Range
.
Definition at line 380 of file BuildTree.cpp.
Referenced by clang::syntax::TreeBuilder::foldNode().
|
inline |
Definition at line 387 of file BuildTree.cpp.
References clang::syntax::TreeBuilder::foldNode().
|
inline |
Definition at line 392 of file BuildTree.cpp.
|
inline |
Definition at line 505 of file BuildTree.cpp.
|
inline |
Definition at line 515 of file BuildTree.cpp.
References clang::syntax::TreeBuilder::getRange(), and clang::Stmt::getSourceRange().
|
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 462 of file BuildTree.cpp.
References clang::syntax::TreeBuilder::findToken(), clang::First, clang::syntax::Arena::getSourceManager(), clang::SourceManager::isBeforeInTranslationUnit(), and clang::Last.
|
inline |
Finds the syntax tokens corresponding to the SourceRange
.
Definition at line 454 of file BuildTree.cpp.
Referenced by clang::syntax::TreeBuilder::getExprRange().
|
inline |
Find the adjusted range for the statement, consuming the trailing semicolon when needed.
Definition at line 521 of file BuildTree.cpp.
|
inline |
Definition at line 472 of file BuildTree.cpp.
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 479 of file BuildTree.cpp.
void clang::syntax::TreeBuilder::markChild | ( | ASTPtr | N, |
NodeRole | R | ||
) |
Set role for the syntax node matching N
.
Definition at line 1699 of file BuildTree.cpp.
void clang::syntax::TreeBuilder::markChild | ( | NestedNameSpecifierLoc | N, |
NodeRole | R | ||
) |
Set role for the syntax node matching N
.
Definition at line 1704 of file BuildTree.cpp.
void clang::syntax::TreeBuilder::markChild | ( | syntax::Node * | N, |
NodeRole | R | ||
) |
Set role for N
.
Definition at line 1694 of file BuildTree.cpp.
void clang::syntax::TreeBuilder::markChildToken | ( | const syntax::Token * | T, |
NodeRole | R | ||
) |
Set role for T
.
Definition at line 1688 of file BuildTree.cpp.
void clang::syntax::TreeBuilder::markChildToken | ( | SourceLocation | Loc, |
NodeRole | R | ||
) |
Set role for a token starting at Loc
.
Definition at line 1682 of file BuildTree.cpp.
References clang::SourceLocation::isInvalid().
Should be called for expressions in non-statement position to avoid wrapping into expression statement.
Definition at line 1729 of file BuildTree.cpp.
References IgnoreImplicit().
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 1710 of file BuildTree.cpp.
void clang::syntax::TreeBuilder::noticeDeclWithoutSemicolon | ( | Decl * | D | ) |
Notifies that we should not consume trailing semicolon when computing token range of D
.
Definition at line 1678 of file BuildTree.cpp.
|
inline |
Definition at line 374 of file BuildTree.cpp.
References clang::syntax::Arena::getSourceManager().