pub struct Temp { counter: usize, } #[derive(Copy,Clone,Debug,Eq,PartialEq)] pub struct TempName(usize); #[derive(Copy,Clone,Debug,Eq,PartialEq)] pub struct TempLabel(usize); impl Temp { pub fn new() -> Temp { Temp { counter: 0 } } pub fn next_name(&mut self) -> TempName { let idx = self.counter; self.counter += 1; TempName(idx) } pub fn next_label(&mut self) -> TempLabel { let idx = self.counter; self.counter += 1; TempLabel(idx) } }