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)