gh-105658: fix excess trace events for except block ending with a conditional block (#109384)

This commit is contained in:
Irit Katriel 2023-09-14 17:06:08 +01:00 committed by GitHub
parent 1ce9ea0453
commit 4a54074a0f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 41 additions and 20 deletions

View file

@ -3261,18 +3261,6 @@ compiler_continue(struct compiler *c, location loc)
}
static location
location_of_last_executing_statement(asdl_stmt_seq *stmts)
{
for (Py_ssize_t i = asdl_seq_LEN(stmts) - 1; i >= 0; i++) {
location loc = LOC((stmt_ty)asdl_seq_GET(stmts, i));
if (loc.lineno > 0) {
return loc;
}
}
return NO_LOCATION;
}
/* Code generated for "try: <body> finally: <finalbody>" is as follows:
SETUP_FINALLY L
@ -3341,9 +3329,9 @@ compiler_try_finally(struct compiler *c, stmt_ty s)
RETURN_IF_ERROR(
compiler_push_fblock(c, loc, FINALLY_END, end, NO_LABEL, NULL));
VISIT_SEQ(c, stmt, s->v.Try.finalbody);
loc = location_of_last_executing_statement(s->v.Try.finalbody);
compiler_pop_fblock(c, FINALLY_END, end);
loc = NO_LOCATION;
ADDOP_I(c, loc, RERAISE, 0);
USE_LABEL(c, cleanup);
@ -3392,9 +3380,9 @@ compiler_try_star_finally(struct compiler *c, stmt_ty s)
compiler_push_fblock(c, loc, FINALLY_END, end, NO_LABEL, NULL));
VISIT_SEQ(c, stmt, s->v.TryStar.finalbody);
loc = location_of_last_executing_statement(s->v.Try.finalbody);
compiler_pop_fblock(c, FINALLY_END, end);
loc = NO_LOCATION;
ADDOP_I(c, loc, RERAISE, 0);
USE_LABEL(c, cleanup);