From b55e67711a678ab22234485f949c82c0d826a604 Mon Sep 17 00:00:00 2001 From: Berg Lucas <55436804+BergLucas@users.noreply.github.com> Date: Tue, 26 Aug 2025 16:13:51 +0200 Subject: [PATCH 1/2] Fix the next_block of the new block in ControlFlowGraph.split_block --- src/bytecode/cfg.py | 1 + 1 file changed, 1 insertion(+) 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 :]: From 29d660fc77c80ca0f580b37ec736912549e1c749 Mon Sep 17 00:00:00 2001 From: Berg Lucas <55436804+BergLucas@users.noreply.github.com> Date: Wed, 27 Aug 2025 00:08:14 +0200 Subject: [PATCH 2/2] Improve the split_block tests to verify the next blocks --- tests/test_cfg.py | 10 ++++++++++ 1 file changed, 10 insertions(+) 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, [