Wasynth/src/backend/helper/register.rs
2021-10-12 01:33:54 -04:00

42 lines
635 B
Rust
Executable File

pub struct Register {
pub last: u32,
pub inner: u32,
saved: Vec<u32>,
}
impl Register {
pub fn new() -> Self {
Self {
last: 0,
inner: 0,
saved: vec![0],
}
}
fn extend(&mut self) {
self.last = self.last.max(self.inner);
}
pub fn save(&mut self) {
self.saved.push(self.inner);
}
pub fn load(&mut self) {
self.inner = self.saved.pop().unwrap();
}
pub fn push(&mut self, n: u32) -> u32 {
let prev = self.inner;
self.inner = self.inner.checked_add(n).unwrap();
self.extend();
prev
}
pub fn pop(&mut self, n: u32) -> u32 {
self.inner = self.inner.checked_sub(n).unwrap();
self.inner
}
}