aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/rust-session-manager.cc27
-rw-r--r--gcc/rust/rust-session-manager.h3
2 files changed, 30 insertions, 0 deletions
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index 9fd112c..8d18f95 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -32,6 +32,7 @@
#include "rust-lint-scan-deadcode.h"
#include "rust-lint-unused-var.h"
#include "rust-hir-dump.h"
+#include "rust-ast-dump.h"
#include "diagnostic.h"
#include "input.h"
@@ -51,6 +52,7 @@ namespace Rust {
const char *kLexDumpFile = "gccrs.lex.dump";
const char *kASTDumpFile = "gccrs.ast.dump";
+const char *kASTPrettyDumpFile = "gccrs.ast-pretty.dump";
const char *kASTExpandedDumpFile = "gccrs.ast-expanded.dump";
const char *kHIRDumpFile = "gccrs.hir.dump";
const char *kHIRPrettyDumpFile = "gccrs.hir-pretty.dump";
@@ -506,6 +508,10 @@ Session::enable_dump (std::string arg)
{
options.enable_dump_option (CompileOptions::PARSER_AST_DUMP);
}
+ else if (arg == "ast-pretty")
+ {
+ options.enable_dump_option (CompileOptions::AST_DUMP_PRETTY);
+ }
else if (arg == "register_plugins")
{
options.enable_dump_option (CompileOptions::REGISTER_PLUGINS_DUMP);
@@ -667,6 +673,10 @@ Session::parse_file (const char *filename)
{
dump_ast (parser, parsed_crate);
}
+ if (options.dump_option_enabled (CompileOptions::AST_DUMP_PRETTY))
+ {
+ dump_ast_pretty (parsed_crate);
+ }
if (options.dump_option_enabled (CompileOptions::TARGET_OPTION_DUMP))
{
options.target_data.dump_target_options ();
@@ -1040,6 +1050,23 @@ Session::dump_ast (Parser<Lexer> &parser, AST::Crate &crate) const
}
void
+Session::dump_ast_pretty (AST::Crate &crate) const
+{
+ std::ofstream out;
+ out.open (kASTPrettyDumpFile);
+ if (out.fail ())
+ {
+ rust_error_at (Linemap::unknown_location (), "cannot open %s:%m; ignored",
+ kASTDumpFile);
+ return;
+ }
+
+ AST::Dump (out).go (crate);
+
+ out.close ();
+}
+
+void
Session::dump_ast_expanded (Parser<Lexer> &parser, AST::Crate &crate) const
{
std::ofstream out;
diff --git a/gcc/rust/rust-session-manager.h b/gcc/rust/rust-session-manager.h
index f616a07..b0e8bf8 100644
--- a/gcc/rust/rust-session-manager.h
+++ b/gcc/rust/rust-session-manager.h
@@ -166,6 +166,7 @@ struct CompileOptions
{
LEXER_DUMP,
PARSER_AST_DUMP,
+ AST_DUMP_PRETTY,
REGISTER_PLUGINS_DUMP,
INJECTION_DUMP,
EXPANSION_DUMP,
@@ -206,6 +207,7 @@ struct CompileOptions
{
enable_dump_option (DumpOption::LEXER_DUMP);
enable_dump_option (DumpOption::PARSER_AST_DUMP);
+ enable_dump_option (DumpOption::AST_DUMP_PRETTY);
enable_dump_option (DumpOption::REGISTER_PLUGINS_DUMP);
enable_dump_option (DumpOption::INJECTION_DUMP);
enable_dump_option (DumpOption::EXPANSION_DUMP);
@@ -291,6 +293,7 @@ private:
void dump_lex (Parser<Lexer> &parser) const;
void dump_ast (Parser<Lexer> &parser, AST::Crate &crate) const;
+ void dump_ast_pretty (AST::Crate &crate) const;
void dump_ast_expanded (Parser<Lexer> &parser, AST::Crate &crate) const;
void dump_hir (HIR::Crate &crate) const;
void dump_hir_pretty (HIR::Crate &crate) const;