Skip to main content

luaur_bytecode/methods/
bytecode_graph_parser_is_unreachable.rs

1use crate::enums::bc_block_edge_kind::BcBlockEdgeKind;
2use crate::records::bc_op::BcOp;
3use crate::records::bytecode_graph_parser::BytecodeGraphParser;
4
5pub fn bytecode_graph_parser_is_unreachable(
6    self_: &mut BytecodeGraphParser<'_>,
7    block_op: BcOp,
8) -> bool {
9    if block_op == self_.func.entry_block {
10        return false;
11    }
12
13    let predecessors = self_.func.block_op(block_op).predecessors.clone();
14    for pred in &predecessors {
15        if pred.kind == BcBlockEdgeKind::Loop {
16            continue;
17        }
18        if !bytecode_graph_parser_is_unreachable(self_, pred.target) {
19            return false;
20        }
21    }
22
23    true
24}