summaryrefslogtreecommitdiff
path: root/vm_insnhelper.c
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2019-09-03 11:32:02 -0700
committerGitHub <noreply@github.com>2019-09-03 11:32:02 -0700
commit39c3252cd175074581855e5f9681cc723c15ff72 (patch)
treed10d0915b8611efeb9dd231542c20b6bc60609a4 /vm_insnhelper.c
parentf702cd6ace7e134714d42ffb1606c25b5ded24c7 (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.c6
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);