use futures_lite::future::block_on;
use std::env;
use std::fs;
use std::process;
fn safe_main() -> i32 {
let args: Vec<String> = env::args().collect();
let path = match args.as_slice() {
[_, path] => path,
_ => {
eprintln!("Usage error: expected a file name");
process::exit(1);
}
};
let mut machine = endbasic_std::MachineBuilder::default().build();
let mut input = match fs::File::open(path) {
Ok(file) => file,
Err(e) => {
eprintln!("ERROR: {}", e);
process::exit(1);
}
};
match machine.compile(&mut input) {
Ok(()) => match block_on(machine.exec()) {
Ok(None) => 0,
Ok(Some(code)) => code,
Err(e) => {
eprintln!("ERROR: {}", e);
1
}
},
Err(e) => {
eprintln!("ERROR: {}", e);
1
}
}
}
fn main() {
process::exit(safe_main());
}