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

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

(cherry picked from commit 4a54074a0f)
This commit is contained in:
Irit Katriel 2023-09-14 23:41:03 +01:00 committed by GitHub
parent 5c7e8c3b72
commit 3eae45f94d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 15 deletions

View file

@ -3184,18 +3184,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
@ -3264,9 +3252,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);
@ -3315,9 +3303,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);