From 0578e518e653d5474abada2a06790a06d4a76f8c Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 25 Aug 2023 23:12:08 +0900 Subject: [PATCH] src/vm.c: adjust mrb_gc_protect() for kdict argument It was called repeatedly in some cases. --- src/vm.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/vm.c b/src/vm.c index 9887a07d5..b9742507d 100644 --- a/src/vm.c +++ b/src/vm.c @@ -2046,6 +2046,9 @@ RETRY_TRY_BLOCK: else if (MRB_ASPEC_KEY(a) > 0 && !mrb_nil_p(kdict)) { kdict = mrb_hash_dup(mrb, kdict); } + else if (!mrb_nil_p(kdict)) { + mrb_gc_protect(mrb, kdict); + } /* arguments is passed with Array */ if (argc == 15) { @@ -2053,7 +2056,6 @@ RETRY_TRY_BLOCK: argv = ARY_PTR(ary); argc = (int)ARY_LEN(ary); mrb_gc_protect(mrb, regs[1]); - if (kd && !mrb_nil_p(kdict)) mrb_gc_protect(mrb, kdict); } /* strict argument check */ @@ -2105,7 +2107,6 @@ RETRY_TRY_BLOCK: mrb_int rnum = 0; if (argv0 != argv) { mrb_gc_protect(mrb, blk); - mrb_gc_protect(mrb, kdict); value_move(®s[1], argv, m1+o); } if (r) {