diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/rust-session-manager.cc | 27 | ||||
-rw-r--r-- | gcc/rust/rust-session-manager.h | 3 |
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; |