[clang] [clang][Frontend] Add overload to ASTPrinter that doesn't own output stream (PR #142163)
Michael Buch via cfe-commits
cfe-commits at lists.llvm.org
Fri May 30 07:47:45 PDT 2025
https://github.com/Michael137 created https://github.com/llvm/llvm-project/pull/142163
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.
>From 9bd15ee7ed44adc836bcd07ff7e856d7a32ba6a9 Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuch12 at gmail.com>
Date: Fri, 30 May 2025 15:44:09 +0100
Subject: [PATCH] [clang][Frontend] Add overload to ASTPrinter that doesn't own
output stream
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.
---
clang/include/clang/Frontend/ASTConsumers.h | 5 +++++
clang/lib/Frontend/ASTConsumers.cpp | 20 ++++++++++++++++++++
2 files changed, 25 insertions(+)
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);
}
More information about the cfe-commits
mailing list