[gcc r14-7430] gccrs: session: Add tokenstream dump option

Arthur Cohen cohenarthur@gcc.gnu.org
Tue Jan 16 17:34:04 GMT 2024


https://gcc.gnu.org/g:ecbbfce5c566526b0e1eab5c9b9b1676c7dc450f

commit r14-7430-gecbbfce5c566526b0e1eab5c9b9b1676c7dc450f
Author: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Date:   Mon Mar 27 13:09:34 2023 +0200

    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>

Diff:
---
 gcc/rust/rust-session-manager.cc | 29 +++++++++++++++++++++++++++++
 gcc/rust/rust-session-manager.h  |  3 +++
 2 files changed, 32 insertions(+)

diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index e52d6f2ce35..b1e14fab8c2 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 ());
@@ -921,6 +931,25 @@ Session::dump_ast_pretty (AST::Crate &crate, bool expanded) const
   out.close ();
 }
 
+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
 {
diff --git a/gcc/rust/rust-session-manager.h b/gcc/rust/rust-session-manager.h
index 9aa90628e00..a4e6400ea30 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;


More information about the Gcc-cvs mailing list