def test_get_block_index(self): blocks = ControlFlowGraph() block0 = blocks[0] block1 = blocks.add_block() block2 = blocks.add_block() self.assertEqual(blocks.get_block_index(block0), 0) self.assertEqual(blocks.get_block_index(block1), 1) self.assertEqual(blocks.get_block_index(block2), 2) other_block = BasicBlock() self.assertRaises(ValueError, blocks.get_block_index, other_block)
def _create_nodes( blocks: ControlFlowGraph, ) -> Tuple[Dict[int, List[int]], Dict[int, pg.ProgramGraphNode]]: nodes: Dict[int, pg.ProgramGraphNode] = {} edges: Dict[int, List[int]] = {} for node_index, block in enumerate(blocks): node = pg.ProgramGraphNode(index=node_index, basic_block=block) nodes[node_index] = node if node_index not in edges: edges[node_index] = [] next_block = block.next_block if next_block: next_index = blocks.get_block_index(next_block) edges[node_index].append(next_index) if target_block := block.get_jump(): next_index = blocks.get_block_index(target_block) edges[node_index].append(next_index)