mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
rb_vm_call0: on-stack call info
This changeset reduces the generated binary of rb_vm_call0 from 281 bytes to 211 bytes on my machine. Should reduce GC pressure as well.
This commit is contained in:
parent
db406daa60
commit
46728557c1
Notes:
git
2020-06-09 09:53:17 +09:00
3 changed files with 35 additions and 44 deletions
20
vm_eval.c
20
vm_eval.c
|
@ -45,12 +45,20 @@ static VALUE vm_call0_body(rb_execution_context_t* ec, struct rb_calling_info *c
|
|||
MJIT_FUNC_EXPORTED VALUE
|
||||
rb_vm_call0(rb_execution_context_t *ec, VALUE recv, ID id, int argc, const VALUE *argv, const rb_callable_method_entry_t *me, int kw_splat)
|
||||
{
|
||||
struct rb_calling_info calling = { Qundef, recv, argc, kw_splat, };
|
||||
const struct rb_callinfo *ci = vm_ci_new_runtime(id, kw_splat ? VM_CALL_KW_SPLAT : 0, argc, NULL);
|
||||
struct rb_callcache cc_body;
|
||||
const struct rb_callcache *cc = vm_cc_fill(&cc_body, 0, me, vm_call_general);
|
||||
struct rb_call_data cd = { ci, cc, };
|
||||
return vm_call0_body(ec, &calling, &cd, argv);
|
||||
return vm_call0_body(
|
||||
ec,
|
||||
&(struct rb_calling_info) {
|
||||
.block_handler = VM_BLOCK_HANDLER_NONE,
|
||||
.recv = recv,
|
||||
.argc = argc,
|
||||
.kw_splat = kw_splat,
|
||||
},
|
||||
&(struct rb_call_data) {
|
||||
.ci = &VM_CI_ON_STACK(id, kw_splat ? VM_CALL_KW_SPLAT : 0, argc, NULL),
|
||||
.cc = &VM_CC_ON_STACK(Qfalse, vm_call_general, { 0 }, me),
|
||||
},
|
||||
argv
|
||||
);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue