[PRISM] Correct the jump target for redo in FOR_NODE
This commit is contained in:
parent
371ff80840
commit
3d984366ca
@ -6153,11 +6153,16 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret,
|
|||||||
}
|
}
|
||||||
case PM_FOR_NODE: {
|
case PM_FOR_NODE: {
|
||||||
pm_for_node_t *for_node = (pm_for_node_t *)scope_node->ast_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);
|
ADD_GETLOCAL(ret, &dummy_line_node, 1, 0);
|
||||||
PM_COMPILE(for_node->index);
|
PM_COMPILE(for_node->index);
|
||||||
PM_NOP;
|
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);
|
pm_compile_node(iseq, (pm_node_t *)(scope_node->body), ret, src, popped, scope_node);
|
||||||
|
ISEQ_COMPILE_DATA(iseq)->start_label = old_start;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: {
|
case PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user