summaryrefslogtreecommitdiff
path: root/vm.c
diff options
context:
space:
mode:
authorJohn Hawthorn <john@hawthorn.email>2022-12-15 10:46:24 -0800
committerJohn Hawthorn <john@hawthorn.email>2022-12-17 14:51:49 -0800
commitfbaa5db44a3b0622e2755fd00e0519a603aa9bcb (patch)
tree8333e59e1fd500adc85a563f6ea5e81bda66e756 /vm.c
parent632beec01f6a293aa03da06f5f0e6f9a7c22a8c5 (diff)
Use a BOP for Hash#default
On a hash miss we need to call default if it is redefined in order to return the default value to be used. Previously we checked this with rb_method_basic_definition_p, which avoids the method call but requires a method lookup. This commit replaces the previous check with BASIC_OP_UNREDEFINED_P and a new BOP_DEFAULT. We still need to fall back to rb_method_basic_definition_p when called on a subclasss of hash. | |compare-ruby|built-ruby| |:---------------|-----------:|---------:| |hash_aref_miss | 2.692| 3.531| | | -| 1.31x| Co-authored-by: Daniel Colson <danieljamescolson@gmail.com> Co-authored-by: "Ian C. Anderson" <ian@iancanderson.com> Co-authored-by: Jack McCracken <me@jackmc.xyz>
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/6945
Diffstat (limited to 'vm.c')
-rw-r--r--vm.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/vm.c b/vm.c
index 8daed5d474..2821f58adb 100644
--- a/vm.c
+++ b/vm.c
@@ -2054,6 +2054,7 @@ vm_init_redefined_flag(void)
OP(Or, OR), (C(Integer));
OP(NilP, NIL_P), (C(NilClass));
OP(Cmp, CMP), (C(Integer), C(Float), C(String));
+ OP(Default, DEFAULT), (C(Hash));
#undef C
#undef OP
}