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:
@@ -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(())
|
||||||
|
|||||||
Reference in New Issue
Block a user