diff options
Diffstat (limited to 'vm_args.c')
-rw-r--r-- | vm_args.c | 9 |
1 files changed, 2 insertions, 7 deletions
@@ -654,7 +654,6 @@ setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * co VALUE keyword_hash = Qnil; VALUE * const orig_sp = ec->cfp->sp; unsigned int i; - int remove_empty_keyword_hash = 1; vm_check_canary(ec, orig_sp); /* @@ -704,10 +703,6 @@ setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * co args->kw_argv = NULL; } - if (given_argc == min_argc) { - remove_empty_keyword_hash = 0; - } - if (ci->flag & VM_CALL_ARGS_SPLAT) { args->rest = locals[--args->argc]; args->rest_index = 0; @@ -715,7 +710,7 @@ setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * co if (kw_flag & VM_CALL_KW_SPLAT) { int len = RARRAY_LENINT(args->rest); if (len > 0 && ignore_keyword_hash_p(RARRAY_AREF(args->rest, len - 1), iseq)) { - if (remove_empty_keyword_hash) { + if (given_argc != min_argc) { arg_rest_dup(args); rb_ary_pop(args->rest); given_argc--; @@ -730,7 +725,7 @@ setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * co else { if (kw_flag & VM_CALL_KW_SPLAT) { if (ignore_keyword_hash_p(args->argv[args->argc-1], iseq)) { - if (remove_empty_keyword_hash) { + if (given_argc != min_argc) { args->argc--; given_argc--; kw_flag &= ~VM_CALL_KW_SPLAT; |