From 1348daa6830f7ae133fe962261b81dcaae2ff59d Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 27 Sep 2024 16:31:13 +0900 Subject: [PATCH] vm.c: save offset in a local variable in OP_BLKPUSH --- src/vm.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/vm.c b/src/vm.c index 936808a3d..3ed498405 100644 --- a/src/vm.c +++ b/src/vm.c @@ -2380,21 +2380,22 @@ RETRY_TRY_BLOCK: int m2 = (b>>5)&0x1f; int kd = (b>>4)&0x1; int lv = (b>>0)&0xf; + int offset = m1+r+m2+kd; mrb_value *stack; if (lv == 0) stack = regs + 1; else { struct REnv *e = uvenv(mrb, lv-1); if (!e || (!MRB_ENV_ONSTACK_P(e) && e->mid == 0) || - MRB_ENV_LEN(e) <= m1+r+m2+1) { + MRB_ENV_LEN(e) <= offset+1) { RAISE_LIT(mrb, E_LOCALJUMP_ERROR, "unexpected yield"); } stack = e->stack + 1; } - if (mrb_nil_p(stack[m1+r+m2+kd])) { + if (mrb_nil_p(stack[offset])) { RAISE_LIT(mrb, E_LOCALJUMP_ERROR, "unexpected yield"); } - regs[a] = stack[m1+r+m2+kd]; + regs[a] = stack[offset]; NEXT; }