36 lines
1.1 KiB
Rust
36 lines
1.1 KiB
Rust
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<Vec<CompilationUnit>, Box<dyn std::error::Error>> {
|
|
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)
|
|
}
|