diff --git a/src/protocol/parser/mod.rs b/src/protocol/parser/mod.rs index 79f4c0fed6768f538799073c591e410813060cff..59235a8cd2397b44eea99458f897fb910aeb2959 100644 --- a/src/protocol/parser/mod.rs +++ b/src/protocol/parser/mod.rs @@ -32,6 +32,7 @@ use crate::protocol::input_source::*; use crate::protocol::ast_writer::ASTWriter; use crate::protocol::parser::type_table::PolymorphicVariable; +use crate::protocol::token_writer::TokenWriter; const REOWOLF_PATH_ENV: &'static str = "REOWOLF_ROOT"; // first lookup reowolf path const REOWOLF_PATH_DIR: &'static str = "std"; // then try folder in current working directory @@ -133,6 +134,7 @@ pub struct Parser { pass_rewriting: PassRewriting, pass_stack_size: PassStackSize, // Compiler options + pub write_tokens_to: Option, pub write_ast_to: Option, pub(crate) arch: TargetArch, } @@ -154,6 +156,7 @@ impl Parser { pass_typing: PassTyping::new(), pass_rewriting: PassRewriting::new(), pass_stack_size: PassStackSize::new(), + write_tokens_to: Some("tokens.txt".to_string()), write_ast_to: None, arch: TargetArch::new(), }; @@ -216,6 +219,12 @@ impl Parser { arch: &self.arch, }; + if let Some(filename) = &self.write_tokens_to { + let mut writer = TokenWriter::new(); + let mut file = std::fs::File::create(std::path::Path::new(filename)).unwrap(); + writer.write(&mut file, &self.modules); + } + // Advance all modules to the phase where all symbols are scanned for module_idx in 0..self.modules.len() { self.pass_symbols.parse(&mut self.modules, module_idx, &mut pass_ctx)?;