diff options
author | Koichi Sasada <[email protected]> | 2023-03-10 01:30:30 +0900 |
---|---|---|
committer | Koichi Sasada <[email protected]> | 2023-03-23 14:03:12 +0900 |
commit | c9fd81b860b5ec193ba57c73c740955937452497 () | |
tree | 37d7f0ac40f0122c222b1dc952ef0f0907440b0a /vm_callinfo.h | |
parent | e5a5e43c36443e06756aba6de95c94b41b910a82 (diff) |
`vm_call_single_noarg_inline_builtin`
If the iseq only contains `opt_invokebuiltin_delegate_leave` insn and the builtin-function (bf) is inline-able, the caller doesn't need to build a method frame. `vm_call_single_noarg_inline_builtin` is fast path for such cases.
Notes: Merged: https://.com/ruby/ruby/pull/7486
-rw-r--r-- | vm_callinfo.h | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -290,6 +290,7 @@ struct rb_callcache { } attr; const enum method_missing_reason method_missing_reason; /* used by method_missing */ VALUE v; } aux_; }; @@ -439,6 +440,9 @@ vm_cc_valid_p(const struct rb_callcache *cc, const rb_callable_method_entry_t *c /* callcache: mutate */ static inline void vm_cc_call_set(const struct rb_callcache *cc, vm_call_handler call) { @@ -458,6 +462,13 @@ vm_cc_attr_index_set(const struct rb_callcache *cc, attr_index_t index, shape_id VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache)); VM_ASSERT(cc != vm_cc_empty()); *attr_value = (attr_index_t)(index + 1) | ((uintptr_t)(dest_shape_id) << SHAPE_FLAG_SHIFT); } static inline void @@ -481,6 +492,21 @@ vm_cc_method_missing_reason_set(const struct rb_callcache *cc, enum method_missi } static inline void vm_cc_invalidate(const struct rb_callcache *cc) { VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache)); |