Skip to main content

luaur_code_gen/functions/
predecessors.rs

1use crate::macros::codegen_assert::CODEGEN_ASSERT;
2use crate::records::block_iterator_wrapper::BlockIteratorWrapper;
3use crate::records::cfg_info::CfgInfo;
4
5pub fn predecessors(cfg: &CfgInfo, block_idx: u32) -> BlockIteratorWrapper {
6    CODEGEN_ASSERT!(block_idx < cfg.predecessors_offsets.len() as u32);
7
8    let start = cfg.predecessors_offsets[block_idx as usize];
9    let end = if block_idx + 1 < cfg.predecessors_offsets.len() as u32 {
10        cfg.predecessors_offsets[(block_idx + 1) as usize]
11    } else {
12        cfg.predecessors.len() as u32
13    };
14
15    BlockIteratorWrapper {
16        itBegin: unsafe { cfg.predecessors.as_ptr().add(start as usize) },
17        itEnd: unsafe { cfg.predecessors.as_ptr().add(end as usize) },
18    }
19}