mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
[3.11] GH-94438: Restore ability to jump over None tests (GH-111338)
(cherry picked from commit 6640f1d
)
This commit is contained in:
parent
6fea61a9e0
commit
12c7e5071c
4 changed files with 46 additions and 2 deletions
|
@ -1952,6 +1952,40 @@ class JumpTestCase(unittest.TestCase):
|
|||
output.append(1)
|
||||
output.append(2)
|
||||
|
||||
@jump_test(1, 4, [5])
|
||||
def test_jump_is_none_forwards(output):
|
||||
x = None
|
||||
if x is None:
|
||||
output.append(3)
|
||||
else:
|
||||
output.append(5)
|
||||
|
||||
@jump_test(6, 5, [3, 5, 6])
|
||||
def test_jump_is_none_backwards(output):
|
||||
x = None
|
||||
if x is None:
|
||||
output.append(3)
|
||||
else:
|
||||
output.append(5)
|
||||
output.append(6)
|
||||
|
||||
@jump_test(1, 4, [5])
|
||||
def test_jump_is_not_none_forwards(output):
|
||||
x = None
|
||||
if x is not None:
|
||||
output.append(3)
|
||||
else:
|
||||
output.append(5)
|
||||
|
||||
@jump_test(6, 5, [5, 5, 6])
|
||||
def test_jump_is_not_none_backwards(output):
|
||||
x = None
|
||||
if x is not None:
|
||||
output.append(3)
|
||||
else:
|
||||
output.append(5)
|
||||
output.append(6)
|
||||
|
||||
@jump_test(3, 5, [2, 5])
|
||||
def test_jump_out_of_block_forwards(output):
|
||||
for i in 1, 2:
|
||||
|
|
|
@ -1324,6 +1324,7 @@ Michele Orrù
|
|||
Tomáš Orsava
|
||||
Oleg Oshmyan
|
||||
Denis Osipov
|
||||
Savannah Ostrowski
|
||||
Denis S. Otkidach
|
||||
Peter Otten
|
||||
Michael Otteneder
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix a regression that prevented jumping across ``is None`` and ``is not None`` when debugging. Patch by Savannah Ostrowski.
|
|
@ -315,19 +315,27 @@ mark_stacks(PyCodeObject *code_obj, int len)
|
|||
case POP_JUMP_BACKWARD_IF_FALSE:
|
||||
case POP_JUMP_FORWARD_IF_TRUE:
|
||||
case POP_JUMP_BACKWARD_IF_TRUE:
|
||||
case POP_JUMP_FORWARD_IF_NONE:
|
||||
case POP_JUMP_BACKWARD_IF_NONE:
|
||||
case POP_JUMP_FORWARD_IF_NOT_NONE:
|
||||
case POP_JUMP_BACKWARD_IF_NOT_NONE:
|
||||
{
|
||||
int64_t target_stack;
|
||||
int j = get_arg(code, i);
|
||||
if (opcode == POP_JUMP_FORWARD_IF_FALSE ||
|
||||
opcode == POP_JUMP_FORWARD_IF_TRUE ||
|
||||
opcode == JUMP_IF_FALSE_OR_POP ||
|
||||
opcode == JUMP_IF_TRUE_OR_POP)
|
||||
opcode == JUMP_IF_TRUE_OR_POP ||
|
||||
opcode == POP_JUMP_FORWARD_IF_NONE ||
|
||||
opcode == POP_JUMP_FORWARD_IF_NOT_NONE)
|
||||
{
|
||||
j += i + 1;
|
||||
}
|
||||
else {
|
||||
assert(opcode == POP_JUMP_BACKWARD_IF_FALSE ||
|
||||
opcode == POP_JUMP_BACKWARD_IF_TRUE);
|
||||
opcode == POP_JUMP_BACKWARD_IF_TRUE ||
|
||||
opcode == POP_JUMP_BACKWARD_IF_NONE ||
|
||||
opcode == POP_JUMP_BACKWARD_IF_NOT_NONE);
|
||||
j = i + 1 - j;
|
||||
}
|
||||
assert(j < len);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue