clang: clang::syntax::TreeBuilder Class Reference (original) (raw)
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 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. | |
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::Token * | findToken (SourceLocation L) const |
Finds a token starting at L. The token must exist if L is valid. | |
ArrayRef< syntax::Token > | getRange (SourceRange Range) const |
Finds the syntax tokens corresponding to the SourceRange. | |
ArrayRef< syntax::Token > | getRange (SourceLocation First, SourceLocation Last) const |
Finds the syntax tokens corresponding to the passed source locations. | |
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. | |
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. | |
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:
- create a corresponding syntax node,
- assign roles to all pending child nodes with 'markChild' and 'markChildToken',
- replace the child nodes with the new syntax node in the pending list with 'foldNode'.
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.
◆ allocator()
llvm::BumpPtrAllocator & clang::syntax::TreeBuilder::allocator ( ) | inline |
---|
◆ finalize()
syntax::TranslationUnit * clang::syntax::TreeBuilder::finalize ( ) && | inline |
---|
◆ findToken()
◆ foldList()
◆ foldNode() [1/3]
◆ foldNode() [2/3]
◆ foldNode() [3/3]
◆ getDeclarationRange()
◆ getExprRange()
◆ getRange() [1/2]
◆ getRange() [2/2]
◆ getStmtRange()
◆ getTemplateRange()
◆ isResponsibleForCreatingDeclaration()
bool clang::syntax::TreeBuilder::isResponsibleForCreatingDeclaration ( const Decl * D) const | inline |
---|
◆ 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]
Set role for the syntax node matching N
.
Definition at line 1711 of file BuildTree.cpp.
◆ markChild() [3/3]
◆ markChildToken() [1/2]
◆ markChildToken() [2/2]
◆ 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 | ||
) |
◆ 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:
- lib/Tooling/Syntax/BuildTree.cpp