1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use crate::asm_lang::{Label, VirtualRegister};
#[derive(Default)]
pub(crate) 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)
}
}