diff options
author | Koichi Sasada <ko1@atdot.net> | 2020-01-08 08:20:36 +0900 |
---|---|---|
committer | Koichi Sasada <ko1@atdot.net> | 2020-02-22 09:58:59 +0900 |
commit | f2286925f08406bc857f7b03ad6779a5d61443ae (patch) | |
tree | 62d056c0a8c253f17fccd4a506ddb6cbf1f7bed5 /tool/ruby_vm/views/_sp_inc_helpers.erb | |
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 patch 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
Notes:
Merged: https://github.com/ruby/ruby/pull/2888
Diffstat (limited to 'tool/ruby_vm/views/_sp_inc_helpers.erb')
-rw-r--r-- | tool/ruby_vm/views/_sp_inc_helpers.erb | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/tool/ruby_vm/views/_sp_inc_helpers.erb b/tool/ruby_vm/views/_sp_inc_helpers.erb index f4cf50b8c8..d0b0bd79ef 100644 --- a/tool/ruby_vm/views/_sp_inc_helpers.erb +++ b/tool/ruby_vm/views/_sp_inc_helpers.erb @@ -9,7 +9,7 @@ #line <%= __LINE__ + 1 %> <%=cstr __FILE__ %> static rb_snum_t -sp_inc_of_sendish(const struct rb_call_info *ci) +sp_inc_of_sendish(const struct rb_callinfo *ci) { /* Send-ish instructions will: * @@ -18,8 +18,8 @@ sp_inc_of_sendish(const struct rb_call_info *ci) * 3. Pop receiver. * 4. Push return value. */ - const int argb = (ci->flag & VM_CALL_ARGS_BLOCKARG) ? 1 : 0; - const int argc = ci->orig_argc; + const int argb = (vm_ci_flag(ci) & VM_CALL_ARGS_BLOCKARG) ? 1 : 0; + const int argc = vm_ci_argc(ci); const int recv = 1; const int retn = 1; @@ -28,7 +28,7 @@ sp_inc_of_sendish(const struct rb_call_info *ci) } static rb_snum_t -sp_inc_of_invokeblock(const struct rb_call_info *ci) +sp_inc_of_invokeblock(const struct rb_callinfo *ci) { /* sp_inc of invokeblock is almost identical to that of sendish * instructions, except that it does not pop receiver. */ |