mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
gh-98390: Fix source locations of boolean sub-expressions (GH-98396)
This commit is contained in:
parent
debacd9ad5
commit
c051d55ddb
3 changed files with 28 additions and 1 deletions
|
@ -1207,6 +1207,32 @@ f(
|
||||||
self.assertOpcodeSourcePositionIs(compiled_code, 'CALL',
|
self.assertOpcodeSourcePositionIs(compiled_code, 'CALL',
|
||||||
line=1, end_line=3, column=0, end_column=1)
|
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):
|
def test_very_long_line_end_offset(self):
|
||||||
# Make sure we get the correct column offset for offsets
|
# Make sure we get the correct column offset for offsets
|
||||||
# too large to store in a byte.
|
# too large to store in a byte.
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fix location of sub-expressions of boolean expressions, by reducing their scope to that of the sub-expression.
|
|
@ -2953,7 +2953,7 @@ compiler_jump_if(struct compiler *c, location *ploc,
|
||||||
|
|
||||||
/* general implementation */
|
/* general implementation */
|
||||||
VISIT(c, expr, e);
|
VISIT(c, expr, e);
|
||||||
ADDOP_JUMP(c, *ploc, cond ? POP_JUMP_IF_TRUE : POP_JUMP_IF_FALSE, next);
|
ADDOP_JUMP(c, LOC(e), cond ? POP_JUMP_IF_TRUE : POP_JUMP_IF_FALSE, next);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue