summaryrefslogtreecommitdiff
path: root/vm_eval.c
diff options
context:
space:
mode:
authorAaron Patterson <[email protected]>2024-05-24 14:33:03 -0700
committerAaron Patterson <[email protected]>2024-06-18 09:28:25 -0700
commita25dd5b12c550a152d9875720b423e141f36dfb0 (patch)
tree45a035d3c7af749ef9ebf2277b82211d928d289f /vm_eval.c
parentcfc5646cdc2b693aff1f8b74f30093765df16957 (diff)
Set a fast path for forwardable iseqs
Diffstat (limited to 'vm_eval.c')
-rw-r--r--vm_eval.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/vm_eval.c b/vm_eval.c
index 8da3f3c529..7840ecac4b 100644
--- a/vm_eval.c
+++ b/vm_eval.c
@@ -215,7 +215,12 @@ vm_call0_body(rb_execution_context_t *ec, struct rb_calling_info *calling, const
*reg_cfp->sp++ = argv[i];
}
- vm_call_iseq_setup(ec, reg_cfp, calling);
+ if (ISEQ_BODY(def_iseq_ptr(vm_cc_cme(cc)->def))->param.flags.forwardable) {
+ vm_call_iseq_fwd_setup(ec, reg_cfp, calling);
+ }
+ else {
+ vm_call_iseq_setup(ec, reg_cfp, calling);
+ }
VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH);
return vm_exec(ec); // CHECK_INTS in this function
}