[3.12] gh-98442: fix locations of with statement's cleanup instructions (GH-120763) (#120787)

gh-98442: fix locations of with statement's cleanup instructions (GH-120763)
(cherry picked from commit 55596ae044)


gh-98442: fix location of with statement's cleanup instructions

Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
This commit is contained in:
Miss Islington (bot) 2024-09-15 21:14:19 +02:00 committed by GitHub
parent b2a7d718e3
commit ffde4cddc9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 38 additions and 1 deletions

View file

@ -135,6 +135,7 @@ enum fblocktype { WHILE_LOOP, FOR_LOOP, TRY_EXCEPT, FINALLY_TRY, FINALLY_END,
struct fblockinfo {
enum fblocktype fb_type;
jump_target_label fb_block;
location fb_loc;
/* (optional) type-specific exit or cleanup block */
jump_target_label fb_exit;
/* (optional) additional information required for unwinding */
@ -1467,6 +1468,7 @@ compiler_push_fblock(struct compiler *c, location loc,
f = &c->u->u_fblock[c->u->u_nfblocks++];
f->fb_type = t;
f->fb_block = block_label;
f->fb_loc = loc;
f->fb_exit = exit;
f->fb_datum = datum;
return SUCCESS;
@ -1594,7 +1596,7 @@ compiler_unwind_fblock(struct compiler *c, location *ploc,
case WITH:
case ASYNC_WITH:
*ploc = LOC((stmt_ty)info->fb_datum);
*ploc = info->fb_loc;
ADDOP(c, *ploc, POP_BLOCK);
if (preserve_tos) {
ADDOP_I(c, *ploc, SWAP, 2);