From 9f012724fbfdf4f579947ff50ab0dd11f90f4f2f Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 12 Jan 2022 12:44:23 +0900 Subject: [PATCH] vm.c: need to adjust argument after packing keyword args; fix #5632 It was caused by #5628. --- src/vm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/vm.c b/src/vm.c index 698f59d0e..b0cd9428d 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1729,6 +1729,7 @@ RETRY_TRY_BLOCK: } mrb_assert(bidx < irep->nregs); + blk = regs[bidx]; uint8_t nk = (b >> 4) & 0x0f; if (nk > 0 && nk < CALL_MAXARGS) { /* pack keyword arguments */ uint8_t n = b & 0x0f; @@ -1737,6 +1738,8 @@ RETRY_TRY_BLOCK: regs[kidx] = kdict; nk = 15; b = n | (nk<<4); + bidx = kidx + 1; + regs[bidx] = blk; } if (mid == 0 || !target_class) { @@ -1761,7 +1764,6 @@ RETRY_TRY_BLOCK: mrb_exc_set(mrb, exc); goto L_RAISE; } - blk = regs[bidx]; if (!mrb_nil_p(blk) && !mrb_proc_p(blk)) { blk = mrb_type_convert(mrb, blk, MRB_TT_PROC, MRB_SYM(to_proc)); /* The stack or ci stack might have been reallocated during