use crate::{Assigner, RenameTable, SymbolTable};
pub struct StaticSingleAssigner<'a> {
pub(crate) symbol_table: &'a SymbolTable,
pub(crate) rename_table: RenameTable,
pub(crate) is_lhs: bool,
pub(crate) assigner: Assigner,
}
impl<'a> StaticSingleAssigner<'a> {
pub(crate) fn new(symbol_table: &'a SymbolTable) -> Self {
Self {
symbol_table,
rename_table: RenameTable::new(None),
is_lhs: false,
assigner: Assigner::default(),
}
}
pub(crate) fn push(&mut self) {
let parent_table = core::mem::take(&mut self.rename_table);
self.rename_table = RenameTable::new(Some(Box::from(parent_table)));
}
pub(crate) fn pop(&mut self) -> RenameTable {
let parent = self.rename_table.parent.clone().unwrap_or_default();
core::mem::replace(&mut self.rename_table, *parent)
}
}