Add --action option to not executable

* --action dump, parse, or run will cause the program to do the
  appropriate action.

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2020-09-18 16:37:23 -07:00
parent cb5689c513
commit 337be88849

View File

@@ -18,11 +18,20 @@ struct Options {
#[structopt(short = "d", long)] #[structopt(short = "d", long)]
disassemble: bool, disassemble: bool,
*/ */
#[structopt(long, default_value = "run")]
action: String,
} }
fn main() -> Result<()> { fn main() -> Result<()> {
let opt = Options::from_args(); let opt = Options::from_args();
let text = fs::read_to_string(&opt.input)?; 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()) { let ast = match ast::parse(text.as_str()) {
Ok(ast) => ast, Ok(ast) => ast,
Err(errs) => { Err(errs) => {
@@ -32,15 +41,17 @@ fn main() -> Result<()> {
return Err("errors reported, exiting".into()); return Err("errors reported, exiting".into());
} }
}.unwrap(); }.unwrap();
//println!("{:#?}", ast); if action == "parse" {
println!("{:#?}", ast);
return Ok(());
}
let package = Compile::new().compile(&ast)?; let package = Compile::new().compile(&ast)?;
//println!("{:#?}", inst); if action == "dump" {
//println!("{:#?}", const_pool);
{
let mut stdout = std::io::stdout(); let mut stdout = std::io::stdout();
package.dump(&mut stdout)?; package.dump(&mut stdout)?;
return Ok(());
} }
Ok(()) Ok(())