summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vm_args.c1
-rw-r--r--vm_insnhelper.c7
2 files changed, 4 insertions, 4 deletions
diff --git a/vm_args.c b/vm_args.c
index a80100ea3c..add5dd5c6f 100644
--- a/vm_args.c
+++ b/vm_args.c
@@ -985,6 +985,7 @@ vm_caller_setup_arg_kw(rb_control_frame_t *cfp, struct rb_calling_info *calling,
cfp->sp -= kw_len - 1;
calling->argc -= kw_len - 1;
+ calling->kw_splat = 1;
}
static VALUE
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index 593804b930..57300073d2 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -2255,7 +2255,7 @@ vm_call_bmethod_body(rb_execution_context_t *ec, struct rb_calling_info *calling
/* control block frame */
GetProcPtr(cc->me->def->body.bmethod.proc, proc);
- val = rb_vm_invoke_bmethod(ec, proc, calling->recv, calling->argc, argv, calling->kw_splat || (ci->flag & (VM_CALL_KWARG | VM_CALL_KW_SPLAT)), calling->block_handler, cc->me);
+ val = rb_vm_invoke_bmethod(ec, proc, calling->recv, calling->argc, argv, calling->kw_splat, calling->block_handler, cc->me);
return val;
}
@@ -2412,8 +2412,7 @@ vm_call_method_missing(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
CALLER_SETUP_ARG(reg_cfp, calling, orig_ci, 0);
argc = calling->argc+1;
- ci_entry.flag = VM_CALL_FCALL | VM_CALL_OPT_SEND |
- (orig_ci->flag & (VM_CALL_KW_SPLAT |VM_CALL_KWARG) ? VM_CALL_KW_SPLAT : 0);
+ ci_entry.flag = VM_CALL_FCALL | VM_CALL_OPT_SEND | (orig_ci->flag & VM_CALL_KW_SPLAT);
ci_entry.mid = idMethodMissing;
ci_entry.orig_argc = argc;
ci = &ci_entry;
@@ -3016,7 +3015,7 @@ vm_invoke_symbol_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
int argc;
CALLER_SETUP_ARG(ec->cfp, calling, ci, 0);
argc = calling->argc;
- val = vm_yield_with_symbol(ec, symbol, argc, STACK_ADDR_FROM_TOP(argc), calling->kw_splat || (ci->flag & (VM_CALL_KWARG | VM_CALL_KW_SPLAT)), calling->block_handler);
+ val = vm_yield_with_symbol(ec, symbol, argc, STACK_ADDR_FROM_TOP(argc), calling->kw_splat, calling->block_handler);
POPN(argc);
return val;
}