#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"
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";
{
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);
{
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 ());
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
{
LEXER_DUMP,
PARSER_AST_DUMP,
AST_DUMP_PRETTY,
+ AST_DUMP_TOKENSTREAM,
REGISTER_PLUGINS_DUMP,
INJECTION_DUMP,
EXPANSION_DUMP,
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);
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;