use crate::asm_lang::{Label, VirtualRegister};
#[derive(Clone, Copy, Default)]
pub struct RegisterSequencer {
next_register: usize,
next_jump_label: usize,
}
impl RegisterSequencer {
pub(crate) fn new() -> Self {
Default::default()
}
pub(crate) fn next(&mut self) -> VirtualRegister {
let next_val = self.next_register;
self.next_register += 1;
VirtualRegister::Virtual(next_val.to_string())
}
pub(crate) fn get_label(&mut self) -> Label {
let next_val = self.next_jump_label;
self.next_jump_label += 1;
Label(next_val)
}
}