neo-decompiler 0.6.2

Minimal tooling for inspecting Neo N3 NEF bytecode
Documentation
use super::super::basic_block::{BasicBlock, BlockId};
use super::CfgBuilder;

impl<'a> CfgBuilder<'a> {
    pub(super) fn create_blocks(&self) -> Vec<BasicBlock> {
        let mut blocks = Vec::new();
        let leaders: Vec<_> = self.leaders.iter().copied().collect();

        for (block_idx, &start_offset) in leaders.iter().enumerate() {
            let end_offset = leaders
                .get(block_idx + 1)
                .copied()
                .unwrap_or_else(|| self.end_offset());

            let start_index = self
                .offset_to_index
                .get(&start_offset)
                .copied()
                .unwrap_or(0);
            let end_index = self
                .offset_to_index
                .get(&end_offset)
                .copied()
                .unwrap_or(self.instructions.len());

            let terminator = self.compute_terminator(start_index, end_index, &leaders);

            blocks.push(BasicBlock::new(
                BlockId::new(block_idx),
                start_offset,
                end_offset,
                start_index..end_index,
                terminator,
            ));
        }

        blocks
    }
}