Viewing file: BuildTree.h (2.51 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
//===- BuildTree.h - build syntax trees -----------------------*- C++ -*-=====// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // Functions to construct a syntax tree from an AST. //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLING_SYNTAX_BUILDTREE_H #define LLVM_CLANG_TOOLING_SYNTAX_BUILDTREE_H
#include "clang/AST/Decl.h" #include "clang/Basic/TokenKinds.h" #include "clang/Tooling/Syntax/Nodes.h" #include "clang/Tooling/Syntax/TokenBufferTokenManager.h" #include "clang/Tooling/Syntax/Tree.h"
namespace clang { namespace syntax {
/// Build a syntax tree for the main file. /// This usually covers the whole TranslationUnitDecl, but can be restricted by /// the ASTContext's traversal scope. syntax::TranslationUnit * buildSyntaxTree(Arena &A, TokenBufferTokenManager &TBTM, ASTContext &Context);
// Create syntax trees from subtrees not backed by the source code.
// Synthesis of Leafs /// Create `Leaf` from token with `Spelling` and assert it has the desired /// `TokenKind`. syntax::Leaf *createLeaf(syntax::Arena &A, TokenBufferTokenManager &TBTM, tok::TokenKind K, StringRef Spelling);
/// Infer the token spelling from its `TokenKind`, then create `Leaf` from /// this token syntax::Leaf *createLeaf(syntax::Arena &A, TokenBufferTokenManager &TBTM, tok::TokenKind K);
// Synthesis of Trees /// Creates the concrete syntax node according to the specified `NodeKind` `K`. /// Returns it as a pointer to the base class `Tree`. syntax::Tree * createTree(syntax::Arena &A, ArrayRef<std::pair<syntax::Node *, syntax::NodeRole>> Children, syntax::NodeKind K);
// Synthesis of Syntax Nodes syntax::EmptyStatement *createEmptyStatement(syntax::Arena &A, TokenBufferTokenManager &TBTM);
/// Creates a completely independent copy of `N` with its macros expanded. /// /// The copy is: /// * Detached, i.e. `Parent == NextSibling == nullptr` and /// `Role == Detached`. /// * Synthesized, i.e. `Original == false`. syntax::Node *deepCopyExpandingMacros(syntax::Arena &A, TokenBufferTokenManager &TBTM, const syntax::Node *N); } // namespace syntax } // namespace clang #endif
|