aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/rust-session-manager.cc
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-03-27 13:09:34 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 18:28:42 +0100
commitecbbfce5c566526b0e1eab5c9b9b1676c7dc450f (patch)
tree62bc726f4ad7e210de7418019f539d2626e86a37 /gcc/rust/rust-session-manager.cc
parent1a20b5b1165f43ac9db6cfa62afe91031c2a717b (diff)
downloadgcc-ecbbfce5c566526b0e1eab5c9b9b1676c7dc450f.zip
gcc-ecbbfce5c566526b0e1eab5c9b9b1676c7dc450f.tar.gz
gcc-ecbbfce5c566526b0e1eab5c9b9b1676c7dc450f.tar.bz2
gccrs: 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/rust/rust-session-manager.cc')
-rw-r--r--gcc/rust/rust-session-manager.cc29
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index e52d6f2..b1e14fa 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;