diff --git a/src/bin/compile.rs b/src/bin/compile.rs new file mode 100644 index 0000000..0b263cf --- /dev/null +++ b/src/bin/compile.rs @@ -0,0 +1,30 @@ +use std::process::exit; + +use itertools::Itertools; + +use nixjit::compile::compile; +use nixjit::error::Error; +use nixjit::error::Result; +use nixjit::ir::downgrade; + +fn main() -> Result<()> { + let mut args = std::env::args(); + if args.len() != 2 { + eprintln!("Usage: {} expr", args.next().unwrap()); + exit(1); + } + args.next(); + let expr = args.next().unwrap(); + let root = rnix::Root::parse(&expr); + if !root.errors().is_empty() { + return Err(Error::ParseError( + root.errors().iter().map(|err| err.to_string()).join(";"), + )); + } + let expr = root.tree().expr().unwrap(); + let downgraded = downgrade(expr)?; + let prog = compile(downgraded); + println!("{:?}", prog); + + Ok(()) +}