[Python-checkins] cpython (3.4): pop the loop block even for infinite while loops (closes #23048)
benjamin.peterson
python-checkins at python.org
Sat Dec 13 22:08:28 CET 2014
https://hg.python.org/cpython/rev/09f938915c6f
changeset: 93874:09f938915c6f
branch: 3.4
parent: 93872:c3f960cff3e6
user: Benjamin Peterson <benjamin at python.org>
date: Sat Dec 13 16:06:19 2014 -0500
summary:
pop the loop block even for infinite while loops (closes #23048)
files:
Lib/test/test_dis.py | 7 ++++---
Lib/test/test_sys_settrace.py | 11 +++++++++++
Misc/NEWS | 2 ++
Python/compile.c | 5 ++---
4 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py
--- a/Lib/test/test_dis.py
+++ b/Lib/test/test_dis.py
@@ -178,15 +178,16 @@
1 0 LOAD_CONST 0 (0)
3 STORE_NAME 0 (x)
- 2 6 SETUP_LOOP 13 (to 22)
+ 2 6 SETUP_LOOP 14 (to 23)
3 >> 9 LOAD_NAME 0 (x)
12 LOAD_CONST 1 (1)
15 INPLACE_ADD
16 STORE_NAME 0 (x)
19 JUMP_ABSOLUTE 9
- >> 22 LOAD_CONST 2 (None)
- 25 RETURN_VALUE
+ 22 POP_BLOCK
+ >> 23 LOAD_CONST 2 (None)
+ 26 RETURN_VALUE
"""
dis_traceback = """\
diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -579,6 +579,15 @@
jump_in_nested_finally.jump = (4, 9)
jump_in_nested_finally.output = [2, 9]
+def jump_infinite_while_loop(output):
+ output.append(1)
+ while 1:
+ output.append(2)
+ output.append(3)
+
+jump_infinite_while_loop.jump = (3, 4)
+jump_infinite_while_loop.output = [1, 3]
+
# The second set of 'jump' tests are for things that are not allowed:
def no_jump_too_far_forwards(output):
@@ -755,6 +764,8 @@
self.run_test(jump_to_same_line)
def test_07_jump_in_nested_finally(self):
self.run_test(jump_in_nested_finally)
+ def test_jump_infinite_while_loop(self):
+ self.run_test(jump_infinite_while_loop)
def test_08_no_jump_too_far_forwards(self):
self.run_test(no_jump_too_far_forwards)
def test_09_no_jump_too_far_backwards(self):
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -11,6 +11,8 @@
Core and Builtins
-----------------
+- Issue #23048: Fix jumping out of an infinite while loop in the pdb.
+
- Issue #20335: bytes constructor now raises TypeError when encoding or errors
is specified with non-string argument. Based on patch by Renaud Blanch.
diff --git a/Python/compile.c b/Python/compile.c
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2029,10 +2029,9 @@
if there is no else clause ?
*/
- if (constant == -1) {
+ if (constant == -1)
compiler_use_next_block(c, anchor);
- ADDOP(c, POP_BLOCK);
- }
+ ADDOP(c, POP_BLOCK);
compiler_pop_fblock(c, LOOP, loop);
if (orelse != NULL) /* what if orelse is just pass? */
VISIT_SEQ(c, stmt, s->v.While.orelse);
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list