self.assertOpcodeSourcePositionIs(compiled_code, 'CALL',
line=1, end_line=3, column=0, end_column=1)
+ def test_multiline_boolean_expression(self):
+ snippet = """\
+if (a or
+ (b and not c) or
+ not (
+ d > 0)):
+ x = 42
+"""
+
+ compiled_code, _ = self.check_positions_against_ast(snippet)
+ # jump if a is true:
+ self.assertOpcodeSourcePositionIs(compiled_code, 'POP_JUMP_IF_TRUE',
+ line=1, end_line=1, column=4, end_column=5, occurrence=1)
+ # jump if b is false:
+ self.assertOpcodeSourcePositionIs(compiled_code, 'POP_JUMP_IF_FALSE',
+ line=2, end_line=2, column=5, end_column=6, occurrence=1)
+ # jump if c is false:
+ self.assertOpcodeSourcePositionIs(compiled_code, 'POP_JUMP_IF_FALSE',
+ line=2, end_line=2, column=15, end_column=16, occurrence=2)
+ # compare d and 0
+ self.assertOpcodeSourcePositionIs(compiled_code, 'COMPARE_OP',
+ line=4, end_line=4, column=8, end_column=13, occurrence=1)
+ # jump if comparison it True
+ self.assertOpcodeSourcePositionIs(compiled_code, 'POP_JUMP_IF_TRUE',
+ line=4, end_line=4, column=8, end_column=13, occurrence=2)
+
def test_very_long_line_end_offset(self):
# Make sure we get the correct column offset for offsets
# too large to store in a byte.