use crate::eval::runtime::slots::LocalSlotId;
#[derive(Clone, Debug, PartialEq, Eq)]
pub(crate) struct BcDefinitelyAssigned {
definitely_assigned: Vec<bool>,
}
impl BcDefinitelyAssigned {
pub(crate) fn new(local_count: u32) -> BcDefinitelyAssigned {
BcDefinitelyAssigned {
definitely_assigned: vec![false; local_count as usize],
}
}
pub(crate) fn is_definitely_assigned(&self, local: LocalSlotId) -> bool {
self.definitely_assigned[local.0 as usize]
}
pub(crate) fn mark_definitely_assigned(&mut self, local: LocalSlotId) {
self.definitely_assigned[local.0 as usize] = true;
}
pub(crate) fn assert_smaller_then(&self, other: &BcDefinitelyAssigned) {
assert_eq!(
self.definitely_assigned.len(),
other.definitely_assigned.len()
);
for (&a, &b) in self
.definitely_assigned
.iter()
.zip(other.definitely_assigned.iter())
{
assert!(b || !a)
}
}
}