feat: eval cli
This commit is contained in:
35
src/bin/eval.rs
Normal file
35
src/bin/eval.rs
Normal file
@@ -0,0 +1,35 @@
|
||||
use std::process::exit;
|
||||
|
||||
use inkwell::context::Context;
|
||||
use itertools::Itertools;
|
||||
|
||||
use nixjit::compile::compile;
|
||||
use nixjit::error::Error;
|
||||
use nixjit::ir::downgrade;
|
||||
use nixjit::jit::JITContext;
|
||||
use nixjit::vm::run;
|
||||
use nixjit::error::Result;
|
||||
|
||||
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);
|
||||
let ctx = Context::create();
|
||||
let jit = JITContext::new(&ctx);
|
||||
println!("{}", run(prog, jit)?);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user