From cbde4e9091459fc8fc729464ed5c581a9b5a548b Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Sun, 22 Oct 2023 13:03:56 -0700 Subject: [PATCH 1/8] Adds test case for JUMP_IS_NONE --- Lib/test/test_sys_settrace.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py index f02169602e4925..77f7aa9a233693 100644 --- a/Lib/test/test_sys_settrace.py +++ b/Lib/test/test_sys_settrace.py @@ -2064,6 +2064,14 @@ def test_jump_simple_backwards(output): output.append(1) output.append(2) + @jump_test(1, 4, []) + def test_jump_is_none_forward(output): + x = None + if x is None: + output.append(1) + else: + output.append(2) + @jump_test(3, 5, [2, 5], warning=(RuntimeWarning, unbound_locals)) def test_jump_out_of_block_forwards(output): for i in 1, 2: From eb224c4370effc5112ce4d71932d084c40f43925 Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Sun, 22 Oct 2023 14:31:09 -0700 Subject: [PATCH 2/8] Add tests --- Lib/test/test_sys_settrace.py | 30 ++++++++++++++++++++++++++++-- Objects/frameobject.c | 2 ++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py index 77f7aa9a233693..9d318e34ae6bee 100644 --- a/Lib/test/test_sys_settrace.py +++ b/Lib/test/test_sys_settrace.py @@ -2064,13 +2064,39 @@ def test_jump_simple_backwards(output): output.append(1) output.append(2) - @jump_test(1, 4, []) - def test_jump_is_none_forward(output): + @jump_test(1, 4, [2]) + def test_jump_is_none_forwards(output): x = None if x is None: output.append(1) else: output.append(2) + + @jump_test(2, 1, [1, 3]) + def test_jump_is_none_backwards(output): + x = None + if x is None: + output.append(1) + else: + output.append(2) + output.append(3) + + @jump_test(1, 4, [2]) + def test_jump_is_not_none_forwards(output): + x = None + if x is not None: + output.append(1) + else: + output.append(2) + + @jump_test(2, 1, [2, 3]) + def test_jump_is_not_none_backwards(output): + x = None + if x is not None: + output.append(1) + else: + output.append(2) + output.append(3) @jump_test(3, 5, [2, 5], warning=(RuntimeWarning, unbound_locals)) def test_jump_out_of_block_forwards(output): diff --git a/Objects/frameobject.c b/Objects/frameobject.c index d75444393f3697..12faef031b6541 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -329,6 +329,8 @@ mark_stacks(PyCodeObject *code_obj, int len) switch (opcode) { case POP_JUMP_IF_FALSE: case POP_JUMP_IF_TRUE: + case POP_JUMP_IF_NONE: + case POP_JUMP_IF_NOT_NONE: { int64_t target_stack; int j = next_i + oparg; From c2b4538c863a894a9cf98d2f25627c0d4dfff56b Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Mon, 23 Oct 2023 15:05:43 -0700 Subject: [PATCH 3/8] Appease linter --- Lib/test/test_sys_settrace.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py index 9d318e34ae6bee..3e0245d725d805 100644 --- a/Lib/test/test_sys_settrace.py +++ b/Lib/test/test_sys_settrace.py @@ -2088,7 +2088,7 @@ def test_jump_is_not_none_forwards(output): output.append(1) else: output.append(2) - + @jump_test(2, 1, [2, 3]) def test_jump_is_not_none_backwards(output): x = None @@ -2097,7 +2097,7 @@ def test_jump_is_not_none_backwards(output): else: output.append(2) output.append(3) - + @jump_test(3, 5, [2, 5], warning=(RuntimeWarning, unbound_locals)) def test_jump_out_of_block_forwards(output): for i in 1, 2: From 40b2ca8ec75ae7181523127d9eec3a50af037c81 Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 22:11:09 +0000 Subject: [PATCH 4/8] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2023-10-23-22-11-09.gh-issue-94438.y2pITu.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2023-10-23-22-11-09.gh-issue-94438.y2pITu.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-10-23-22-11-09.gh-issue-94438.y2pITu.rst b/Misc/NEWS.d/next/Core and Builtins/2023-10-23-22-11-09.gh-issue-94438.y2pITu.rst new file mode 100644 index 00000000000000..983b40641a2c92 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-10-23-22-11-09.gh-issue-94438.y2pITu.rst @@ -0,0 +1 @@ +Fix a regression that prevented jumping across `is None` and `is not None` when debugging. Patch by Savannah Ostrowski. From 2b198b8abbd4b1b1ee2e33b535ba453a3b7ede8c Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Mon, 23 Oct 2023 22:49:25 +0000 Subject: [PATCH 5/8] Update tests for line numbers and blurb it for backticks --- Lib/test/test_sys_settrace.py | 22 +++++++++---------- ...3-10-23-22-11-09.gh-issue-94438.y2pITu.rst | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py index 3e0245d725d805..0db793a7a87779 100644 --- a/Lib/test/test_sys_settrace.py +++ b/Lib/test/test_sys_settrace.py @@ -2064,22 +2064,22 @@ def test_jump_simple_backwards(output): output.append(1) output.append(2) - @jump_test(1, 4, [2]) + @jump_test(1, 4, [5]) def test_jump_is_none_forwards(output): x = None if x is None: - output.append(1) + output.append(3) else: - output.append(2) + output.append(5) - @jump_test(2, 1, [1, 3]) + @jump_test(6, 5 [3, 5, 6]) def test_jump_is_none_backwards(output): x = None if x is None: - output.append(1) + output.append(3) else: - output.append(2) - output.append(3) + output.append(5) + output.append(6) @jump_test(1, 4, [2]) def test_jump_is_not_none_forwards(output): @@ -2089,14 +2089,14 @@ def test_jump_is_not_none_forwards(output): else: output.append(2) - @jump_test(2, 1, [2, 3]) + @jump_test(6, 5, [3, 5, 6]) def test_jump_is_not_none_backwards(output): x = None if x is not None: - output.append(1) + output.append(3) else: - output.append(2) - output.append(3) + output.append(5) + output.append(6) @jump_test(3, 5, [2, 5], warning=(RuntimeWarning, unbound_locals)) def test_jump_out_of_block_forwards(output): diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-10-23-22-11-09.gh-issue-94438.y2pITu.rst b/Misc/NEWS.d/next/Core and Builtins/2023-10-23-22-11-09.gh-issue-94438.y2pITu.rst index 983b40641a2c92..b6e147a48a8cd8 100644 --- a/Misc/NEWS.d/next/Core and Builtins/2023-10-23-22-11-09.gh-issue-94438.y2pITu.rst +++ b/Misc/NEWS.d/next/Core and Builtins/2023-10-23-22-11-09.gh-issue-94438.y2pITu.rst @@ -1 +1 @@ -Fix a regression that prevented jumping across `is None` and `is not None` when debugging. Patch by Savannah Ostrowski. +Fix a regression that prevented jumping across ``is None`` and ``is not None`` when debugging. Patch by Savannah Ostrowski. From 33fd7115a7e7183f31f965df25742b803822f362 Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Mon, 23 Oct 2023 22:54:14 +0000 Subject: [PATCH 6/8] Update tests --- Lib/test/test_sys_settrace.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py index 0db793a7a87779..da79e64cc48ec9 100644 --- a/Lib/test/test_sys_settrace.py +++ b/Lib/test/test_sys_settrace.py @@ -2072,7 +2072,7 @@ def test_jump_is_none_forwards(output): else: output.append(5) - @jump_test(6, 5 [3, 5, 6]) + @jump_test(6, 5, [3, 5, 6]) def test_jump_is_none_backwards(output): x = None if x is None: @@ -2081,15 +2081,15 @@ def test_jump_is_none_backwards(output): output.append(5) output.append(6) - @jump_test(1, 4, [2]) + @jump_test(1, 4, [5]) def test_jump_is_not_none_forwards(output): x = None if x is not None: - output.append(1) + output.append(3) else: - output.append(2) + output.append(5) - @jump_test(6, 5, [3, 5, 6]) + @jump_test(6, 2, [5, 5, 6]) def test_jump_is_not_none_backwards(output): x = None if x is not None: From 01431972ae501805e0616bc19f64b42654609d19 Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Mon, 23 Oct 2023 16:17:59 -0700 Subject: [PATCH 7/8] Update Lib/test/test_sys_settrace.py Co-authored-by: Brandt Bucher --- Lib/test/test_sys_settrace.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py index da79e64cc48ec9..6be9d3f5d0f9a7 100644 --- a/Lib/test/test_sys_settrace.py +++ b/Lib/test/test_sys_settrace.py @@ -2089,7 +2089,7 @@ def test_jump_is_not_none_forwards(output): else: output.append(5) - @jump_test(6, 2, [5, 5, 6]) + @jump_test(6, 5, [5, 5, 6]) def test_jump_is_not_none_backwards(output): x = None if x is not None: From 80e1ba446dc6046d444ffb120fffd22a3ca47065 Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Tue, 24 Oct 2023 00:04:05 +0000 Subject: [PATCH 8/8] Add myself to ACKS --- Misc/ACKS | 1 + 1 file changed, 1 insertion(+) diff --git a/Misc/ACKS b/Misc/ACKS index 94cb1965676f48..812aa1be6e796a 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1345,6 +1345,7 @@ Michele Orrù Tomáš Orsava Oleg Oshmyan Denis Osipov +Savannah Ostrowski Denis S. Otkidach Peter Otten Michael Otteneder