use crate::name_analysis::name_analysis; use deimos::asm::assemble_ir::assemble_ir_function; use deimos::ast::node::CompilationUnit; use deimos::ir::lower_ast::lower_compilation_unit; use deimos::ir::Ir; use deimos::util::indent_writer::IndentWriter; use std::path::PathBuf; pub fn compile_to_ir( paths: &[PathBuf], ) -> Result, Box> { let compilation_units = name_analysis(&paths)?; for compilation_unit in &compilation_units { let cu_irs = lower_compilation_unit(compilation_unit); let mut out = String::new(); let mut indent_writer = IndentWriter::new(0, " ", &mut out); for ir in &cu_irs { ir.pretty_print(&mut indent_writer)?; } println!("{}", &out); for ir in &cu_irs { match ir { Ir::Function(ir_function) => { let asm_function = assemble_ir_function(ir_function); println!("{}", asm_function); } _ => {} } } } Ok(compilation_units) }