libjuno 0.1.0

Library for JunoLang
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;
}