From 9a67bdb6aa875a8522afd8b3d81ea1d3fb99e60a Mon Sep 17 00:00:00 2001 From: dearblue Date: Sun, 1 Dec 2024 11:40:17 +0900 Subject: [PATCH] Fix `redo` keyword Add `OP_NOP` to distinguish `retry` and jump targets while maintaining instruction compatibility. Ideally, it might be preferable to separate them into `OP_REDO`. fixed #6439 --- mrbgems/mruby-compiler/core/codegen.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 96525e53e..364ce2048 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -1323,6 +1323,7 @@ for_body(codegen_scope *s, node *tree) /* construct loop */ lp = loop_push(s, LOOP_FOR); lp->pc1 = new_label(s); + genop_0(s, OP_NOP); /* for redo */ /* loop body */ codegen(s, tree->cdr->cdr->car, VAL); @@ -2589,6 +2590,7 @@ codegen(codegen_scope *s, node *tree, int val) pos = genjmp2_0(s, OP_JMPIF, cursp(), NOVAL); } lp->pc1 = new_label(s); + genop_0(s, OP_NOP); /* for redo */ codegen(s, tree->cdr, NOVAL); genjmp(s, OP_JMP, lp->pc0); dispatch(s, pos);