diff options
author | Jeremy Evans <code@jeremyevans.net> | 2019-09-03 11:32:02 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-03 11:32:02 -0700 |
commit | 39c3252cd175074581855e5f9681cc723c15ff72 (patch) | |
tree | d10d0915b8611efeb9dd231542c20b6bc60609a4 /vm_insnhelper.c | |
parent | f702cd6ace7e134714d42ffb1606c25b5ded24c7 (diff) |
Merge pull request #2422 from jeremyevans/rb_keyword_given_p
Add rb_keyword_given_p to the C-API
Notes
Notes:
Merged-By: jeremyevans <code@jeremyevans.net>
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r-- | vm_insnhelper.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 1c74b121e8..b1a13d078e 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -2185,6 +2185,7 @@ vm_call_cfunc_with_frame(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp VALUE recv = calling->recv; VALUE block_handler = calling->block_handler; + VALUE frame_type = VM_FRAME_MAGIC_CFUNC | VM_FRAME_FLAG_CFRAME | VM_ENV_FLAG_LOCAL; int argc = calling->argc; int orig_argc = argc; @@ -2193,11 +2194,14 @@ vm_call_cfunc_with_frame(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp argc--; } } + if (UNLIKELY(IS_ARGS_KW_OR_KW_SPLAT(ci))) { + frame_type |= VM_FRAME_FLAG_CFRAME_KW; + } RUBY_DTRACE_CMETHOD_ENTRY_HOOK(ec, me->owner, me->def->original_id); EXEC_EVENT_HOOK(ec, RUBY_EVENT_C_CALL, recv, me->def->original_id, ci->mid, me->owner, Qundef); - vm_push_frame(ec, NULL, VM_FRAME_MAGIC_CFUNC | VM_FRAME_FLAG_CFRAME | VM_ENV_FLAG_LOCAL, recv, + vm_push_frame(ec, NULL, frame_type, recv, block_handler, (VALUE)me, 0, ec->cfp->sp, 0, 0); |