diff options
author | John Hawthorn <john@hawthorn.email> | 2022-12-15 10:46:24 -0800 |
---|---|---|
committer | John Hawthorn <john@hawthorn.email> | 2022-12-17 14:51:49 -0800 |
commit | fbaa5db44a3b0622e2755fd00e0519a603aa9bcb (patch) | |
tree | 8333e59e1fd500adc85a563f6ea5e81bda66e756 /yjit | |
parent | 632beec01f6a293aa03da06f5f0e6f9a7c22a8c5 (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 'yjit')
-rw-r--r-- | yjit/src/cruby_bindings.inc.rs | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/yjit/src/cruby_bindings.inc.rs b/yjit/src/cruby_bindings.inc.rs index f20dc04966..759c4d0ec7 100644 --- a/yjit/src/cruby_bindings.inc.rs +++ b/yjit/src/cruby_bindings.inc.rs @@ -418,21 +418,22 @@ pub const tNUMPARAM_6: ruby_method_ids = 234; pub const tNUMPARAM_7: ruby_method_ids = 235; pub const tNUMPARAM_8: ruby_method_ids = 236; pub const tNUMPARAM_9: ruby_method_ids = 237; -pub const tTOKEN_LOCAL_END: ruby_method_ids = 238; -pub const tTOKEN_INSTANCE_BEGIN: ruby_method_ids = 237; -pub const tTOKEN_INSTANCE_END: ruby_method_ids = 238; -pub const tTOKEN_GLOBAL_BEGIN: ruby_method_ids = 237; -pub const tLASTLINE: ruby_method_ids = 238; -pub const tBACKREF: ruby_method_ids = 239; -pub const tERROR_INFO: ruby_method_ids = 240; -pub const tTOKEN_GLOBAL_END: ruby_method_ids = 241; -pub const tTOKEN_CONST_BEGIN: ruby_method_ids = 240; -pub const tTOKEN_CONST_END: ruby_method_ids = 241; -pub const tTOKEN_CLASS_BEGIN: ruby_method_ids = 240; -pub const tTOKEN_CLASS_END: ruby_method_ids = 241; -pub const tTOKEN_ATTRSET_BEGIN: ruby_method_ids = 240; -pub const tTOKEN_ATTRSET_END: ruby_method_ids = 241; -pub const tNEXT_ID: ruby_method_ids = 241; +pub const tDefault: ruby_method_ids = 238; +pub const tTOKEN_LOCAL_END: ruby_method_ids = 239; +pub const tTOKEN_INSTANCE_BEGIN: ruby_method_ids = 238; +pub const tTOKEN_INSTANCE_END: ruby_method_ids = 239; +pub const tTOKEN_GLOBAL_BEGIN: ruby_method_ids = 238; +pub const tLASTLINE: ruby_method_ids = 239; +pub const tBACKREF: ruby_method_ids = 240; +pub const tERROR_INFO: ruby_method_ids = 241; +pub const tTOKEN_GLOBAL_END: ruby_method_ids = 242; +pub const tTOKEN_CONST_BEGIN: ruby_method_ids = 241; +pub const tTOKEN_CONST_END: ruby_method_ids = 242; +pub const tTOKEN_CLASS_BEGIN: ruby_method_ids = 241; +pub const tTOKEN_CLASS_END: ruby_method_ids = 242; +pub const tTOKEN_ATTRSET_BEGIN: ruby_method_ids = 241; +pub const tTOKEN_ATTRSET_END: ruby_method_ids = 242; +pub const tNEXT_ID: ruby_method_ids = 242; pub const idMax: ruby_method_ids = 2721; pub const idMin: ruby_method_ids = 2737; pub const idFreeze: ruby_method_ids = 2753; @@ -501,9 +502,10 @@ pub const idNUMPARAM_6: ruby_method_ids = 3745; pub const idNUMPARAM_7: ruby_method_ids = 3761; pub const idNUMPARAM_8: ruby_method_ids = 3777; pub const idNUMPARAM_9: ruby_method_ids = 3793; -pub const idLASTLINE: ruby_method_ids = 3815; -pub const idBACKREF: ruby_method_ids = 3831; -pub const idERROR_INFO: ruby_method_ids = 3847; +pub const idDefault: ruby_method_ids = 3809; +pub const idLASTLINE: ruby_method_ids = 3831; +pub const idBACKREF: ruby_method_ids = 3847; +pub const idERROR_INFO: ruby_method_ids = 3863; pub const tLAST_OP_ID: ruby_method_ids = 169; pub const idLAST_OP_ID: ruby_method_ids = 10; pub type ruby_method_ids = u32; @@ -537,7 +539,8 @@ pub const BOP_CALL: ruby_basic_operators = 26; pub const BOP_AND: ruby_basic_operators = 27; pub const BOP_OR: ruby_basic_operators = 28; pub const BOP_CMP: ruby_basic_operators = 29; -pub const BOP_LAST_: ruby_basic_operators = 30; +pub const BOP_DEFAULT: ruby_basic_operators = 30; +pub const BOP_LAST_: ruby_basic_operators = 31; pub type ruby_basic_operators = u32; pub type rb_serial_t = ::std::os::raw::c_ulonglong; pub const imemo_env: imemo_type = 0; |