|
7 | 7 |
|
8 | 8 | class BlockTests(unittest.TestCase): |
9 | 9 | def test_iter_invalid_types(self): |
| 10 | + # Labels are not allowed in basic blocks |
10 | 11 | block = BasicBlock() |
11 | 12 | block.append(Label()) |
12 | 13 | with self.assertRaises(ValueError): |
13 | 14 | list(block) |
14 | 15 |
|
| 16 | + # Only one jump allowed and only at the end |
15 | 17 | block = BasicBlock() |
16 | 18 | block2 = BasicBlock() |
17 | 19 | block.extend([Instr('JUMP_ABSOLUTE', block2), |
18 | 20 | Instr('NOP')]) |
19 | 21 | with self.assertRaises(ValueError): |
20 | 22 | list(block) |
21 | 23 |
|
| 24 | + # jump target must be a BasicBlock |
| 25 | + block = BasicBlock() |
| 26 | + label = Label() |
| 27 | + block.extend([Instr('JUMP_ABSOLUTE', label)]) |
| 28 | + with self.assertRaises(ValueError): |
| 29 | + list(block) |
| 30 | + |
22 | 31 |
|
23 | 32 | class BytecodeBlocksTests(TestCase): |
24 | 33 | maxDiff = 80 * 100 |
@@ -136,20 +145,6 @@ def test_to_bytecode(self): |
136 | 145 | Instr('RETURN_VALUE', lineno=3)]) |
137 | 146 | # FIXME: test other attributes |
138 | 147 |
|
139 | | - def test_to_bytecode_labels(self): |
140 | | - blocks = ControlFlowGraph() |
141 | | - label = Label() |
142 | | - blocks.add_block() |
143 | | - blocks[0].extend([Instr('LOAD_NAME', 'test'), |
144 | | - Instr('POP_JUMP_IF_FALSE', label)]) |
145 | | - blocks[1].append(label) |
146 | | - |
147 | | - with self.assertRaises(ValueError) as cm: |
148 | | - blocks.to_bytecode() |
149 | | - self.assertEqual(str(cm.exception), |
150 | | - 'BasicBlock must only contain SetLineno, Instr and ' |
151 | | - 'ConcreteInstr objects, but Label was found') |
152 | | - |
153 | 148 | def test_from_bytecode(self): |
154 | 149 | bytecode = Bytecode() |
155 | 150 | label = Label() |
|
0 commit comments