diff --git a/src/bin/not.rs b/src/bin/not.rs index fb0a875..5cb7853 100644 --- a/src/bin/not.rs +++ b/src/bin/not.rs @@ -18,11 +18,20 @@ struct Options { #[structopt(short = "d", long)] disassemble: bool, */ + + #[structopt(long, default_value = "run")] + action: String, } fn main() -> Result<()> { let opt = Options::from_args(); let text = fs::read_to_string(&opt.input)?; + let action = &opt.action.to_lowercase(); + match action.as_str() { + "run" | "parse" | "dump" => {}, + _ => eprintln!("WARNING: unknown action {}", action) + } + let ast = match ast::parse(text.as_str()) { Ok(ast) => ast, Err(errs) => { @@ -32,15 +41,17 @@ fn main() -> Result<()> { return Err("errors reported, exiting".into()); } }.unwrap(); - //println!("{:#?}", ast); + if action == "parse" { + println!("{:#?}", ast); + return Ok(()); + } let package = Compile::new().compile(&ast)?; - //println!("{:#?}", inst); - //println!("{:#?}", const_pool); - { + if action == "dump" { let mut stdout = std::io::stdout(); package.dump(&mut stdout)?; + return Ok(()); } Ok(())