mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Fix invalid keyword argument separation warning for delegating calls
This removes an invalid keyword argument separation warning for code such as: ```ruby def foo(arg) arg end kw = {} foo(*[1], **kw) ``` This warning was caused because the remove_empty_keyword_hash was set based on a comparison with two variables, and in this case, one of the variables was updated after the check and we need to use the updated variable. Simplify things by just inlining the comparison.
This commit is contained in:
parent
6382f5cc91
commit
61d90da25c
2 changed files with 3 additions and 7 deletions
|
@ -215,6 +215,7 @@ class TestKeywordArguments < Test::Unit::TestCase
|
|||
assert_warn(/The keyword argument is passed as the last hash parameter.* for `m'/m) do
|
||||
assert_equal(kw, c.m(**kw))
|
||||
end
|
||||
assert_equal(kw, c.m(kw, **kw))
|
||||
assert_equal(h, c.m(**h))
|
||||
assert_equal(h, c.m(a: 1))
|
||||
assert_equal(h2, c.m(**h2))
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue