From 88e356e7da2c5dce6498ec7669febd188d7da263 Mon Sep 17 00:00:00 2001 From: leviongit Date: Fri, 20 Mar 2026 21:20:18 +0100 Subject: [PATCH 1/2] remove redundant `mrb_hash_get` call `mrb_hash_delete` returns the removed element (which is guaranteed to exist due to the `mrb_hash_key_p` check), this prevents the hash from being searched twice. --- src/vm.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/vm.c b/src/vm.c index f898287d8..2f1d42163 100644 --- a/src/vm.c +++ b/src/vm.c @@ -2703,10 +2703,8 @@ RETRY_TRY_BLOCK: if (kidx < 0 || !mrb_hash_p(kdict=regs[kidx]) || !mrb_hash_key_p(mrb, kdict, k)) { RAISE_FORMAT(mrb, E_ARGUMENT_ERROR, "missing keyword: %v", k); } - v = mrb_hash_get(mrb, kdict, k); - ci = mrb->c->ci; + v = mrb_hash_delete_key(mrb, kdict, k); regs[a] = v; - mrb_hash_delete_key(mrb, kdict, k); ci = mrb->c->ci; NEXT; } From e8d0750458a7de4432dcfc34b78edfde25e823b4 Mon Sep 17 00:00:00 2001 From: leviongit Date: Fri, 20 Mar 2026 21:29:59 +0100 Subject: [PATCH 2/2] reload `ci` after `mrb_hash_delete_key` --- src/vm.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/vm.c b/src/vm.c index 2f1d42163..9b03789db 100644 --- a/src/vm.c +++ b/src/vm.c @@ -2703,9 +2703,10 @@ RETRY_TRY_BLOCK: if (kidx < 0 || !mrb_hash_p(kdict=regs[kidx]) || !mrb_hash_key_p(mrb, kdict, k)) { RAISE_FORMAT(mrb, E_ARGUMENT_ERROR, "missing keyword: %v", k); } + v = mrb_hash_delete_key(mrb, kdict, k); - regs[a] = v; ci = mrb->c->ci; + regs[a] = v; NEXT; }