aboutsummaryrefslogtreecommitdiffstats
path: root/vm_args.c
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2019-09-16 13:19:06 -0700
committerJeremy Evans <code@jeremyevans.net>2019-09-17 16:22:44 -0700
commit9b35dc38644c10eed008f9ba19a7224f2fb49af2 (patch)
tree9c6c97cfd1cd828d8796145956621d6ac08ea6e8 /vm_args.c
parent0785469a400b00eb4576fedbf93b614c70eaf760 (diff)
downloadruby-9b35dc38644c10eed008f9ba19a7224f2fb49af2.tar.gz
Pass keyword argument flag when rb_call_super_kw calls method_missing
This makes method_missing take a flag for whether keyword arguments were passed. Adds tests both for rb_call_super_kw usage as well as general usage of super calling method_missing in Ruby methods.
Diffstat (limited to 'vm_args.c')
-rw-r--r--vm_args.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/vm_args.c b/vm_args.c
index 0f4f95e4cd..459f60ea76 100644
--- a/vm_args.c
+++ b/vm_args.c
@@ -13,7 +13,7 @@ NORETURN(static void argument_arity_error(rb_execution_context_t *ec, const rb_i
NORETURN(static void argument_kw_error(rb_execution_context_t *ec, const rb_iseq_t *iseq, const char *error, const VALUE keys));
VALUE rb_keyword_error_new(const char *error, VALUE keys); /* class.c */
static VALUE method_missing(VALUE obj, ID id, int argc, const VALUE *argv,
- enum method_missing_reason call_status);
+ enum method_missing_reason call_status, int kw_splat);
struct args_info {
/* basic args info */
@@ -1072,7 +1072,7 @@ refine_sym_proc_call(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg))
vm_passed_block_handler_set(ec, blockarg);
}
if (!me) {
- return method_missing(obj, mid, argc, argv, MISSING_NOENTRY);
+ return method_missing(obj, mid, argc, argv, MISSING_NOENTRY, VM_NO_KEYWORDS);
}
return rb_vm_call0(ec, obj, mid, argc, argv, me, VM_NO_KEYWORDS);
}