summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-09-30 01:08:32 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-09-30 01:17:55 +0900
commit59648af296ab15a2e34ebce62a7cc14deb889e7b (patch)
tree70280207aa841638e8aca72551b35c4db5f6d076
parentf39314a98ac6e762e8f5d72d80923038b0b5f01a (diff)
Suppress keyword argument warning from #step
* numeric.c (num_step): pass the extracted argument from keyword argument, not the last argument itself which should have been warned already.
-rw-r--r--numeric.c2
-rw-r--r--test/ruby/test_numeric.rb8
2 files changed, 9 insertions, 1 deletions
diff --git a/numeric.c b/numeric.c
index 5bf87bd752..c1655c0dbd 100644
--- a/numeric.c
+++ b/numeric.c
@@ -2768,7 +2768,7 @@ num_step(int argc, VALUE *argv, VALUE from)
num_step_size, from, to, step, FALSE);
}
- RETURN_SIZED_ENUMERATOR(from, argc, argv, num_step_size);
+ return SIZED_ENUMERATOR(from, 2, ((VALUE [2]){to, step}), num_step_size);
}
desc = num_step_scan_args(argc, argv, &to, &step, TRUE, FALSE);
diff --git a/test/ruby/test_numeric.rb b/test/ruby/test_numeric.rb
index f87abbb4a8..797fd209af 100644
--- a/test/ruby/test_numeric.rb
+++ b/test/ruby/test_numeric.rb
@@ -292,6 +292,14 @@ class TestNumeric < Test::Unit::TestCase
assert_raise(ArgumentError, bug9811) { 1.step(10, 1, by: 11) {} }
assert_raise(ArgumentError, bug9811) { 1.step(10, 1, by: 11).size }
+
+ e = assert_warn(/The last argument is used as the keyword parameter/) {
+ 1.step(10, {by: "1"})
+ }
+ assert_warn('') {
+ assert_raise(ArgumentError) {e.size}
+ }
+
assert_equal(bignum*2+1, (-bignum).step(bignum, 1).size)
assert_equal(bignum*2, (-bignum).step(bignum-1, 1).size)