1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Fixed premature return

After setting ruby2_keywords for bmethod, the rest of arguments
had been ignored. [Bug #17558]
This commit is contained in:
Nobuyoshi Nakada 2021-01-19 16:40:46 +09:00
parent e6af81bde1
commit eeacdcb9a0
Notes: git 2021-01-19 18:00:03 +09:00
2 changed files with 10 additions and 1 deletions

View file

@ -2366,6 +2366,11 @@ class TestKeywordArguments < Test::Unit::TestCase
baz(*args) baz(*args)
end end
define_method(:block_splat) {|*args| }
ruby2_keywords :block_splat, def foo_bar_after_bmethod(*args)
bar(*args)
end
ruby2_keywords def foo_baz2(*args) ruby2_keywords def foo_baz2(*args)
baz(*args) baz(*args)
baz(*args) baz(*args)
@ -2501,6 +2506,7 @@ class TestKeywordArguments < Test::Unit::TestCase
assert_equal([1, h1], o.foo(:foo_baz, 1, :a=>1)) assert_equal([1, h1], o.foo(:foo_baz, 1, :a=>1))
assert_equal([[1], h1], o.foo_foo_bar(1, :a=>1)) assert_equal([[1], h1], o.foo_foo_bar(1, :a=>1))
assert_equal([1, h1], o.foo_foo_baz(1, :a=>1)) assert_equal([1, h1], o.foo_foo_baz(1, :a=>1))
assert_equal([[1], h1], o.foo_bar_after_bmethod(1, :a=>1))
assert_equal([[1], h1], o.foo(:bar, 1, **h1)) assert_equal([[1], h1], o.foo(:bar, 1, **h1))
assert_equal([1, h1], o.foo(:baz, 1, **h1)) assert_equal([1, h1], o.foo(:baz, 1, **h1))
@ -2516,6 +2522,7 @@ class TestKeywordArguments < Test::Unit::TestCase
assert_equal([1, h1], o.foo(:foo_baz, 1, **h1)) assert_equal([1, h1], o.foo(:foo_baz, 1, **h1))
assert_equal([[1], h1], o.foo_foo_bar(1, **h1)) assert_equal([[1], h1], o.foo_foo_bar(1, **h1))
assert_equal([1, h1], o.foo_foo_baz(1, **h1)) assert_equal([1, h1], o.foo_foo_baz(1, **h1))
assert_equal([[1], h1], o.foo_bar_after_bmethod(1, **h1))
assert_equal([[h1], {}], o.foo(:bar, h1, **{})) assert_equal([[h1], {}], o.foo(:bar, h1, **{}))
assert_equal([h1], o.foo(:baz, h1, **{})) assert_equal([h1], o.foo(:baz, h1, **{}))
@ -2531,6 +2538,7 @@ class TestKeywordArguments < Test::Unit::TestCase
assert_equal([h1], o.foo(:foo_baz, h1, **{})) assert_equal([h1], o.foo(:foo_baz, h1, **{}))
assert_equal([[h1], {}], o.foo_foo_bar(h1, **{})) assert_equal([[h1], {}], o.foo_foo_bar(h1, **{}))
assert_equal([h1], o.foo_foo_baz(h1, **{})) assert_equal([h1], o.foo_foo_baz(h1, **{}))
assert_equal([[h1], {}], o.foo_bar_after_bmethod(h1, **{}))
assert_equal([[1, h1], {}], o.foo(:bar, 1, h1)) assert_equal([[1, h1], {}], o.foo(:bar, 1, h1))
assert_equal([1, h1], o.foo(:baz, 1, h1)) assert_equal([1, h1], o.foo(:baz, 1, h1))
@ -2540,6 +2548,7 @@ class TestKeywordArguments < Test::Unit::TestCase
assert_equal([1, h1], o.store_foo(:baz, 1, h1)) assert_equal([1, h1], o.store_foo(:baz, 1, h1))
assert_equal([[1, h1], {}], o.foo_bar(1, h1)) assert_equal([[1, h1], {}], o.foo_bar(1, h1))
assert_equal([1, h1], o.foo_baz(1, h1)) assert_equal([1, h1], o.foo_baz(1, h1))
assert_equal([[1, h1], {}], o.foo_bar_after_bmethod(1, h1))
assert_equal([[1, h1, 1], {}], o.foo_mod(:bar, 1, :a=>1)) assert_equal([[1, h1, 1], {}], o.foo_mod(:bar, 1, :a=>1))
assert_equal([1, h1, 1], o.foo_mod(:baz, 1, :a=>1)) assert_equal([1, h1, 1], o.foo_mod(:baz, 1, :a=>1))

View file

@ -2208,7 +2208,7 @@ rb_mod_ruby2_keywords(int argc, VALUE *argv, VALUE module)
else { else {
rb_warn("Skipping set of ruby2_keywords flag for %s (method accepts keywords or method does not accept argument splat)", rb_id2name(name)); rb_warn("Skipping set of ruby2_keywords flag for %s (method accepts keywords or method does not accept argument splat)", rb_id2name(name));
} }
return Qnil; break;
} }
} }
/* fallthrough */ /* fallthrough */