Advertisement
Guest User

Untitled

a guest
Apr 26th, 2023
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 0.95 KB | None | 0 0
  1. impl Codegen {
  2.     fn do_some(&mut) {
  3.         let reg:Register;
  4.         reg.free(self.unspill());  
  5.     }
  6.  
  7.     fn unspill(&mut self) -> Box<dyn FnMut(&ScratchRegister, StackRegister, &NEWTypes) -> ()> {
  8.         Box::new(
  9.             |reg: &ScratchRegister, spilled: StackRegister, type_decl: &NEWTypes| {
  10.                 writeln!(
  11.                     self.output,
  12.                     "\tmovq    {}, {}",
  13.                     spilled.name(),
  14.                     reg.name(type_decl),
  15.                 )
  16.                 .unwrap();
  17.             },
  18.         )
  19.     }
  20. }
  21. impl ScratchRegister {
  22.     fn free(
  23.         &mut self,
  24.         type_decl: &NEWTypes,
  25.         mut unspill: Box<dyn FnMut(&ScratchRegister, StackRegister, &NEWTypes) -> ()>,
  26.     ) {
  27.         if self.spill_addr.len() > 0 {
  28.             let spilled_addr = self.spill_addr.pop().unwrap();
  29.             unspill(&*self, spilled_addr, type_decl);
  30.         } else {
  31.             self.in_use = false;
  32.         }
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement