diff --git a/src/bytecode/cfg.py b/src/bytecode/cfg.py index e511c045..c39124b5 100644 --- a/src/bytecode/cfg.py +++ b/src/bytecode/cfg.py @@ -710,6 +710,7 @@ def split_block(self, block: BasicBlock, index: int) -> BasicBlock: del block[index:] block2 = BasicBlock(instructions) + block2.next_block = block.next_block block.next_block = block2 for block in self[block_index + 1 :]: diff --git a/tests/test_cfg.py b/tests/test_cfg.py index 5eb6afe6..077a2980 100644 --- a/tests/test_cfg.py +++ b/tests/test_cfg.py @@ -534,6 +534,8 @@ def test_split_block(self): label = code.split_block(code[0], 2) self.assertIs(label, code[1]) + self.assertIs(code[0].next_block, label) + self.assertIs(label.next_block, None) self.assertBlocksEqual( code, [ @@ -546,6 +548,9 @@ def test_split_block(self): label2 = code.split_block(code[0], 1) self.assertIs(label2, code[1]) + self.assertIs(code[0].next_block, label2) + self.assertIs(label2.next_block, label) + self.assertIs(label.next_block, None) self.assertBlocksEqual( code, [Instr("LOAD_SMALL_INT" if PY314 else "LOAD_CONST", 1, lineno=1)], @@ -567,6 +572,8 @@ def test_split_block_end(self): # split at the end of the last block requires to add a new empty block label = code.split_block(code[0], 2) self.assertIs(label, code[1]) + self.assertIs(code[0].next_block, label) + self.assertIs(label.next_block, None) self.assertBlocksEqual( code, [ @@ -581,6 +588,8 @@ def test_split_block_end(self): # add a new block label = code.split_block(code[0], 2) self.assertIs(label, code[1]) + self.assertIs(code[0].next_block, label) + self.assertIs(label.next_block, None) self.assertBlocksEqual( code, [ @@ -596,6 +605,7 @@ def test_split_block_dont_split(self): # FIXME: is it really useful to support that? block = code.split_block(code[0], 0) self.assertIs(block, code[0]) + self.assertIs(code[0].next_block, None) self.assertBlocksEqual( code, [