use crate::opcodes::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum ControlBlock {
If { executing: bool },
NotIf { executing: bool },
}
#[inline(always)]
pub(crate) fn in_false_branch(control_stack: &[ControlBlock]) -> bool {
control_stack.iter().any(|b| {
!matches!(
b,
ControlBlock::If { executing: true } | ControlBlock::NotIf { executing: true }
)
})
}
pub(crate) fn is_minimal_if_condition(bytes: &[u8]) -> bool {
match bytes.len() {
0 => true, 1 => {
let b = bytes[0];
b == 0 || (1..=16).contains(&b) || (OP_1..=OP_16).contains(&b)
}
_ => false,
}
}