use std::{path::Path, process::exit};
use inkwell::module::Module;
use pest::Parser;
use crate::*;
pub fn compile_file(p: &Path) -> Module<'static> {
let input = match std::fs::read_to_string(p) {
Err(e) => panic!("Error while reading file {} (ERR: {})", p.to_str().unwrap(), e),
Ok(s) => s,
};
let pairs = JunoParser::parse(Rule::program, &input.as_str()).expect("parse error");
let expr = parse_program(pairs.into_iter().next().unwrap());
let mut metairgen = MetaIRGen::new(&expr);
let metair = Box::leak(Box::new(metairgen.lower_program(&expr)));
let context = Box::leak(Box::new(inkwell::context::Context::create()));
let mut irgen = LLVMBackend::new(context, metair, "main");
if let Err(e) = irgen.compile() {
eprintln!("{:#?}", e);
exit(1);
}
return irgen.module;
}