From 3d984366ca809fdcc9320e776705ecd96efa49a0 Mon Sep 17 00:00:00 2001 From: Matt Valentine-House Date: Tue, 19 Dec 2023 22:06:50 +0000 Subject: [PATCH] [PRISM] Correct the jump target for redo in FOR_NODE --- prism_compile.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/prism_compile.c b/prism_compile.c index 9be075275d1eda..b60ca0ac680801 100644 --- a/prism_compile.c +++ b/prism_compile.c @@ -6153,11 +6153,16 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret, } case PM_FOR_NODE: { pm_for_node_t *for_node = (pm_for_node_t *)scope_node->ast_node; + LABEL *target = NEW_LABEL(lineno); + LABEL *old_start = ISEQ_COMPILE_DATA(iseq)->start_label; ADD_GETLOCAL(ret, &dummy_line_node, 1, 0); PM_COMPILE(for_node->index); PM_NOP; + ADD_LABEL(ret, target); + ISEQ_COMPILE_DATA(iseq)->start_label = target; pm_compile_node(iseq, (pm_node_t *)(scope_node->body), ret, src, popped, scope_node); + ISEQ_COMPILE_DATA(iseq)->start_label = old_start; break; } case PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: {