[clang] [clang][Frontend] Add overload to ASTPrinter that doesn't own output stream (PR #142163)
via cfe-commits
cfe-commits at lists.llvm.org
Fri May 30 07:48:19 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Michael Buch (Michael137)
<details>
<summary>Changes</summary>
We're planning on using the ASTPrinter in LLDB for AST dumping. But it currently takes the output stream via `unique_ptr`. In LLDB we don't have the output stream available in this form and instead it would be convenient if we could just pass a reference to the stream.
This patch adds that overload.
---
Full diff: https://github.com/llvm/llvm-project/pull/142163.diff
2 Files Affected:
- (modified) clang/include/clang/Frontend/ASTConsumers.h (+5)
- (modified) clang/lib/Frontend/ASTConsumers.cpp (+20)
``````````diff
diff --git a/clang/include/clang/Frontend/ASTConsumers.h b/clang/include/clang/Frontend/ASTConsumers.h
index 0e068bf5cccb5..890701b6ff188 100644
--- a/clang/include/clang/Frontend/ASTConsumers.h
+++ b/clang/include/clang/Frontend/ASTConsumers.h
@@ -35,6 +35,11 @@ CreateASTDumper(std::unique_ptr<raw_ostream> OS, StringRef FilterString,
bool DumpDecls, bool Deserialize, bool DumpLookups,
bool DumpDeclTypes, ASTDumpOutputFormat Format);
+std::unique_ptr<ASTConsumer>
+CreateASTDumper(raw_ostream &OS, StringRef FilterString, bool DumpDecls,
+ bool Deserialize, bool DumpLookups, bool DumpDeclTypes,
+ ASTDumpOutputFormat Format);
+
// AST Decl node lister: prints qualified names of all filterable AST Decl
// nodes.
std::unique_ptr<ASTConsumer> CreateASTDeclNodeLister();
diff --git a/clang/lib/Frontend/ASTConsumers.cpp b/clang/lib/Frontend/ASTConsumers.cpp
index a6e35452b4fbe..a5ff4d44592d4 100644
--- a/clang/lib/Frontend/ASTConsumers.cpp
+++ b/clang/lib/Frontend/ASTConsumers.cpp
@@ -41,6 +41,13 @@ namespace {
OutputKind(K), OutputFormat(Format), FilterString(FilterString),
DumpLookups(DumpLookups), DumpDeclTypes(DumpDeclTypes) {}
+ ASTPrinter(raw_ostream &Out, Kind K, ASTDumpOutputFormat Format,
+ StringRef FilterString, bool DumpLookups = false,
+ bool DumpDeclTypes = false)
+ : Out(Out), OwnedOut(nullptr), OutputKind(K), OutputFormat(Format),
+ FilterString(FilterString), DumpLookups(DumpLookups),
+ DumpDeclTypes(DumpDeclTypes) {}
+
void HandleTranslationUnit(ASTContext &Context) override {
TranslationUnitDecl *D = Context.getTranslationUnitDecl();
@@ -176,6 +183,19 @@ clang::CreateASTDumper(std::unique_ptr<raw_ostream> Out, StringRef FilterString,
Format, FilterString, DumpLookups, DumpDeclTypes);
}
+std::unique_ptr<ASTConsumer>
+clang::CreateASTDumper(raw_ostream &Out, StringRef FilterString, bool DumpDecls,
+ bool Deserialize, bool DumpLookups, bool DumpDeclTypes,
+ ASTDumpOutputFormat Format) {
+ assert((DumpDecls || Deserialize || DumpLookups) && "nothing to dump");
+ return std::make_unique<ASTPrinter>(Out,
+ Deserialize ? ASTPrinter::DumpFull
+ : DumpDecls ? ASTPrinter::Dump
+ : ASTPrinter::None,
+ Format, FilterString, DumpLookups,
+ DumpDeclTypes);
+}
+
std::unique_ptr<ASTConsumer> clang::CreateASTDeclNodeLister() {
return std::make_unique<ASTDeclNodeLister>(nullptr);
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/142163
More information about the cfe-commits
mailing list