diff --git a/werbolg-tales/src/main.rs b/werbolg-tales/src/main.rs index 9ca6703..a7cc515 100644 --- a/werbolg-tales/src/main.rs +++ b/werbolg-tales/src/main.rs @@ -12,6 +12,8 @@ use params::{Frontend, TalesParams}; #[derive(Clone, Debug, PartialEq, Eq)] enum Flag { + Help, + Version, DumpIr, DumpInstr, ExecStepTrace, @@ -19,12 +21,18 @@ enum Flag { Frontend(Frontend), } +fn version() { + println!("v0.0.1") +} + fn help() { println!( r#" usage: werbolg-tales [options] Options: + --help Print this help + --version Print the version of werbolg-tales --dump-ir Dump the IR on stdout --dump-instr Dump the Code Instructions on stdout --exec-step-trace Trace every step of execution @@ -38,6 +46,11 @@ fn main() -> Result<(), Box> { let options = args::ArgOptions { short: &[], long: &[ + ("help", args::FlagDescr::NoArg(Box::new(|| Flag::Help))), + ( + "version", + args::FlagDescr::NoArg(Box::new(|| Flag::Version)), + ), ("dump-ir", args::FlagDescr::NoArg(Box::new(|| Flag::DumpIr))), ( "dump-instr", @@ -73,6 +86,18 @@ fn main() -> Result<(), Box> { }; let (flags, args) = args::args(options)?; + let help_req = flags.contains(&Flag::Help); + let ver_req = flags.contains(&Flag::Version); + + if help_req { + help(); + return Ok(()); + } + if ver_req { + version(); + return Ok(()); + } + let dump_ir = flags.contains(&Flag::DumpIr); let dump_instr = flags.contains(&Flag::DumpInstr); let exec_step_trace = flags.contains(&Flag::ExecStepTrace);