diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-03-27 13:09:34 +0200 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2023-03-30 16:48:28 +0200 |
commit | 848bd4dfeb116f6cb029ccb44735c4c905ca46ca (patch) | |
tree | baacf713f23151805ca295c0a64ffd0e285e0617 /gcc | |
parent | c3a62ea7d7849efdee24808b5ebd4902af16d57e (diff) | |
download | gcc-848bd4dfeb116f6cb029ccb44735c4c905ca46ca.zip gcc-848bd4dfeb116f6cb029ccb44735c4c905ca46ca.tar.gz gcc-848bd4dfeb116f6cb029ccb44735c4c905ca46ca.tar.bz2 |
session: Add tokenstream dump option
Add an option to the command line interface to dump the ast back to a
tokenstream.
gcc/rust/ChangeLog:
* rust-session-manager.cc (Session::enable_dump): Enable new
dump.
(Session::compile_crate): CLI argument parsing.
(Session::dump_tokenstream): Dump the tokenstream as a string in
the specified file.
* rust-session-manager.h (struct CompileOptions): Add
tokenstream dump option.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/rust-session-manager.cc | 29 | ||||
-rw-r--r-- | gcc/rust/rust-session-manager.h | 3 |
2 files changed, 32 insertions, 0 deletions
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc index b8fa0c0..9b15452 100644 --- a/gcc/rust/rust-session-manager.cc +++ b/gcc/rust/rust-session-manager.cc @@ -35,6 +35,7 @@ #include "rust-lint-unused-var.h" #include "rust-hir-dump.h" #include "rust-ast-dump.h" +#include "rust-ast-tokenstream.h" #include "rust-export-metadata.h" #include "rust-imports.h" #include "rust-extern-crate.h" @@ -64,6 +65,7 @@ const char *kLexDumpFile = "gccrs.lex.dump"; const char *kASTDumpFile = "gccrs.ast.dump"; const char *kASTPrettyDumpFile = "gccrs.ast-pretty.dump"; const char *kASTPrettyDumpFileExpanded = "gccrs.ast-pretty-expanded.dump"; +const char *kASTDumpTokenStream = "gccrs.ast-tokenstream.dump"; const char *kASTExpandedDumpFile = "gccrs.ast-expanded.dump"; const char *kHIRDumpFile = "gccrs.hir.dump"; const char *kHIRPrettyDumpFile = "gccrs.hir-pretty.dump"; @@ -303,6 +305,10 @@ Session::enable_dump (std::string arg) { options.enable_dump_option (CompileOptions::AST_DUMP_PRETTY); } + else if (arg == "ast-tokenstream") + { + options.enable_dump_option (CompileOptions::AST_DUMP_TOKENSTREAM); + } else if (arg == "register_plugins") { options.enable_dump_option (CompileOptions::REGISTER_PLUGINS_DUMP); @@ -493,6 +499,10 @@ Session::compile_crate (const char *filename) { dump_ast (parser, *ast_crate.get ()); } + if (options.dump_option_enabled (CompileOptions::AST_DUMP_TOKENSTREAM)) + { + dump_tokenstream (*ast_crate.get ()); + } if (options.dump_option_enabled (CompileOptions::AST_DUMP_PRETTY)) { dump_ast_pretty (*ast_crate.get ()); @@ -922,6 +932,25 @@ Session::dump_ast_pretty (AST::Crate &crate, bool expanded) const } void +Session::dump_tokenstream (AST::Crate &crate) const +{ + std::ofstream out; + out.open (kASTDumpTokenStream); + if (out.fail ()) + { + rust_error_at (Linemap::unknown_location (), "cannot open %s:%m; ignored", + kASTDumpTokenStream); + } + std::vector<TokenPtr> tokenstream; + AST::TokenStream (tokenstream).visit (crate); + for (auto &token : tokenstream) + { + out << token->as_string () << " "; + } + 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 43f9ba4..12e20df 100644 --- a/gcc/rust/rust-session-manager.h +++ b/gcc/rust/rust-session-manager.h @@ -168,6 +168,7 @@ struct CompileOptions LEXER_DUMP, PARSER_AST_DUMP, AST_DUMP_PRETTY, + AST_DUMP_TOKENSTREAM, REGISTER_PLUGINS_DUMP, INJECTION_DUMP, EXPANSION_DUMP, @@ -227,6 +228,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::AST_DUMP_TOKENSTREAM); enable_dump_option (DumpOption::REGISTER_PLUGINS_DUMP); enable_dump_option (DumpOption::INJECTION_DUMP); enable_dump_option (DumpOption::EXPANSION_DUMP); @@ -343,6 +345,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, bool expanded = false) const; + void dump_tokenstream (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; |