diff options
author | Koichi Sasada <[email protected]> | 2020-01-08 08:20:36 +0900 |
---|---|---|
committer | Koichi Sasada <[email protected]> | 2020-02-22 09:58:59 +0900 |
commit | f2286925f08406bc857f7b03ad6779a5d61443ae () | |
tree | 62d056c0a8c253f17fccd4a506ddb6cbf1f7bed5 /vm_method.c | |
parent | a1eb1fabef1bca0696449cd358d93f5a644d5914 (diff) |
VALUE size packed callinfo (ci).
Now, rb_call_info contains how to call the method with tuple of (mid, orig_argc, flags, kwarg). Most of cases, kwarg == NULL and mid+argc+flags only requires 64bits. So this packed rb_call_info to VALUE (1 word) on such cases. If we can not represent it in VALUE, then use imemo_callinfo which contains conventional callinfo (rb_callinfo, renamed from rb_call_info). iseq->body->ci_kw_size is removed because all of callinfo is VALUE size (packed ci or a pointer to imemo_callinfo). To access ci information, we need to use these functions: vm_ci_mid(ci), _flag(ci), _argc(ci), _kwarg(ci). struct rb_call_info_kw_arg is renamed to rb_callinfo_kwarg. rb_funcallv_with_cc() and rb_method_basic_definition_p_with_cc() is temporary removed because cd->ci should be marked.
Notes: Merged: https://.com/ruby/ruby/pull/2888
-rw-r--r-- | vm_method.c | 11 |
1 files changed, 0 insertions, 11 deletions
@@ -2054,17 +2054,6 @@ rb_mod_modfunc(int argc, VALUE *argv, VALUE module) return module; } -bool -rb_method_basic_definition_p_with_cc(struct rb_call_data *cd, VALUE klass, ID mid) -{ - if (cd->ci.mid != mid) { - *cd = (struct rb_call_data) /* reset */ { .ci = { .mid = mid, }, }; - } - - vm_search_method_fastpath(cd, klass); - return cd->cc.me && METHOD_ENTRY_BASIC(cd->cc.me); -} - #ifdef __GNUC__ #pragma push_macro("rb_method_basic_definition_p") #undef rb_method_basic_definition_p |