| 195 | } |
| 196 | |
| 197 | pub fn codegen(&mut self) -> (Assembler, AssemblyOffset, usize) { |
| 198 | let mut ops = Assembler::new().unwrap(); |
| 199 | let start = ops.offset(); |
| 200 | let mut ret = None; |
| 201 | let mut owner = self.owner.take().unwrap(); |
| 202 | self.in_region(self.master_region, |r, ir| { |
| 203 | let mut n = crate::region::NodeGraph::default(); |
| 204 | std::mem::swap(&mut r.nodes, &mut n); |
| 205 | ret = Some(n[ir.body.unwrap()].codegen(&owner, vec![], vec![], r, ir, &mut ops)); |
| 206 | std::mem::swap(&mut r.nodes, &mut n); |
| 207 | }); |
| 208 | let end = ops.offset(); |
| 209 | (ops, start, end.0 - start.0) |
| 210 | } |
| 211 | |
| 212 | pub fn compile_fn<A, O>(&mut self) -> Result<(extern "C" fn(A) -> O, usize), Box<dyn std::error::Error>> { |
| 213 | self.regalloc(); |