Browse Source

bpo-44616: Mark all clean up instructions at end of named exception block as artificial (GH-27109)

pull/27139/head
Mark Shannon 5 years ago
committed by GitHub
parent
commit
e5862f79c1
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 23
      Lib/test/test_sys_settrace.py
  2. 5
      Python/compile.c
  3. 4
      Python/importlib_zipimport.h

23
Lib/test/test_sys_settrace.py

@ -1077,6 +1077,29 @@ class TraceTestCase(unittest.TestCase):
(1, 'line'),
(1, 'return')])
def test_no_tracing_of_named_except_cleanup(self):
def func():
x = 0
try:
1/x
except ZeroDivisionError as error:
if x:
raise
return "done"
self.run_and_compare(func,
[(0, 'call'),
(1, 'line'),
(2, 'line'),
(3, 'line'),
(3, 'exception'),
(4, 'line'),
(5, 'line'),
(7, 'line'),
(7, 'return')])
class SkipLineEventsTraceTestCase(TraceTestCase):
"""Repeat the trace tests, but with per-line events skipped"""

5
Python/compile.c

@ -3312,11 +3312,11 @@ compiler_try_except(struct compiler *c, stmt_ty s)
/* second # body */
VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body);
compiler_pop_fblock(c, HANDLER_CLEANUP, cleanup_body);
/* name = None; del name; # Mark as artificial */
UNSET_LOC(c);
ADDOP(c, POP_BLOCK);
ADDOP(c, POP_BLOCK);
ADDOP(c, POP_EXCEPT);
/* name = None; del name; # Mark as artificial */
UNSET_LOC(c);
ADDOP_LOAD_CONST(c, Py_None);
compiler_nameop(c, handler->v.ExceptHandler.name, Store);
compiler_nameop(c, handler->v.ExceptHandler.name, Del);
@ -3348,7 +3348,6 @@ compiler_try_except(struct compiler *c, stmt_ty s)
return 0;
VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body);
compiler_pop_fblock(c, HANDLER_CLEANUP, cleanup_body);
/* name = None; del name; # Mark as artificial */
UNSET_LOC(c);
ADDOP(c, POP_BLOCK);
ADDOP(c, POP_EXCEPT);

4
Python/importlib_zipimport.h

@ -1403,8 +1403,8 @@ const unsigned char _Py_M__zipimport[] = {
23,35,13,20,20,29,30,34,30,42,44,53,20,54,13,17,
20,24,13,17,16,26,13,54,17,39,28,43,44,48,50,57,
59,67,69,77,79,83,28,84,21,25,21,25,0,0,17,39,
24,35,17,39,17,39,17,39,17,39,36,39,21,33,21,39,
21,39,21,39,21,39,21,39,0,0,0,0,0,0,0,0,
24,35,17,39,17,39,17,39,17,39,36,39,21,33,21,33,
21,33,21,33,21,33,21,33,0,0,0,0,0,0,0,0,
0,0,24,39,40,47,49,53,24,54,17,21,16,20,24,28,
16,28,13,25,17,25,23,32,33,34,23,35,13,20,20,24,
26,35,37,44,20,44,13,44,13,44,13,44,12,24,9,83,

Loading…
Cancel
Save