diff options
Diffstat (limited to 'bytecode/src/main.rs')
| -rw-r--r-- | bytecode/src/main.rs | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/bytecode/src/main.rs b/bytecode/src/main.rs index 8315d5a..89e205a 100644 --- a/bytecode/src/main.rs +++ b/bytecode/src/main.rs @@ -3,8 +3,42 @@ mod data; mod encoding; mod heap; +use std::fs::File; + +fn usage() { + println!("Usage: bytecode <file>"); +} + fn main() { - let prog = encoding::decode(&mut std::io::stdin().lock()).unwrap(); - let exit_code = bytecode::eval(&prog).unwrap(); + let filepath = match std::env::args().nth(1) { + Some(x) => x, + None => { + usage(); + std::process::exit(255); + } + }; + let prog = { + let mut file = match File::open(filepath) { + Ok(x) => x, + Err(err) => { + println!("Can't open file for reading: {}", err); + std::process::exit(255); + } + }; + match encoding::decode(&mut file) { + Ok(x) => x, + Err(err) => { + println!("Invalid bytecode: {}", err); + std::process::exit(255); + } + } + }; + let exit_code = match bytecode::eval(&prog) { + Ok(x) => x, + Err(err) => { + println!("{}", err); + std::process::exit(255); + } + }; std::process::exit(i32::from(exit_code)); } |
