mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
no longer rescue exceptions of #coerce in Integer#step
* numeric.c (num_step_negative_p): no more error hiding. * test/ruby/test_float.rb, test/ruby/test_numeric.rb: follow the change. [Feature #7688] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58475 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
bc1827e882
commit
413cece5c9
4 changed files with 8 additions and 17 deletions
2
NEWS
2
NEWS
|
@ -28,6 +28,8 @@ with all sufficient information, see the ChangeLog file or Redmine
|
||||||
* Integer
|
* Integer
|
||||||
|
|
||||||
* Integer.sqrt [Feature #13219]
|
* Integer.sqrt [Feature #13219]
|
||||||
|
* Integer#step does no longer rescue exceptions when given
|
||||||
|
a step value which cannot be compared with #> to 0. [Feature #7688]
|
||||||
|
|
||||||
* IO
|
* IO
|
||||||
|
|
||||||
|
|
17
numeric.c
17
numeric.c
|
@ -446,12 +446,6 @@ coerce_failed(VALUE x, VALUE y)
|
||||||
y, rb_obj_class(x));
|
y, rb_obj_class(x));
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
|
||||||
coerce_rescue_quiet(VALUE arg, VALUE errinfo)
|
|
||||||
{
|
|
||||||
return Qundef;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
do_coerce(VALUE *x, VALUE *y, int err)
|
do_coerce(VALUE *x, VALUE *y, int err)
|
||||||
{
|
{
|
||||||
|
@ -2585,17 +2579,11 @@ ruby_num_interval_step_size(VALUE from, VALUE to, VALUE step, int excl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
|
||||||
num_step_compare_with_zero(VALUE num)
|
|
||||||
{
|
|
||||||
VALUE zero = INT2FIX(0);
|
|
||||||
return rb_check_funcall(num, '>', 1, &zero);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
num_step_negative_p(VALUE num)
|
num_step_negative_p(VALUE num)
|
||||||
{
|
{
|
||||||
const ID mid = '<';
|
const ID mid = '<';
|
||||||
|
VALUE zero = INT2FIX(0);
|
||||||
VALUE r;
|
VALUE r;
|
||||||
|
|
||||||
if (FIXNUM_P(num)) {
|
if (FIXNUM_P(num)) {
|
||||||
|
@ -2606,7 +2594,8 @@ num_step_negative_p(VALUE num)
|
||||||
if (method_basic_p(rb_cInteger))
|
if (method_basic_p(rb_cInteger))
|
||||||
return BIGNUM_NEGATIVE_P(num);
|
return BIGNUM_NEGATIVE_P(num);
|
||||||
}
|
}
|
||||||
r = rb_rescue(num_step_compare_with_zero, num, coerce_rescue_quiet, Qnil);
|
|
||||||
|
r = rb_check_funcall(num, '>', 1, &zero);
|
||||||
if (r == Qundef) {
|
if (r == Qundef) {
|
||||||
coerce_failed(num, INT2FIX(0));
|
coerce_failed(num, INT2FIX(0));
|
||||||
}
|
}
|
||||||
|
|
|
@ -788,7 +788,7 @@ class TestFloat < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_num2dbl
|
def test_num2dbl
|
||||||
assert_raise(TypeError) do
|
assert_raise(ArgumentError, "comparison of String with 0 failed") do
|
||||||
1.0.step(2.0, "0.5") {}
|
1.0.step(2.0, "0.5") {}
|
||||||
end
|
end
|
||||||
assert_raise(TypeError) do
|
assert_raise(TypeError) do
|
||||||
|
|
|
@ -261,8 +261,8 @@ class TestNumeric < Test::Unit::TestCase
|
||||||
assert_raise(ArgumentError) { 1.step(10, 1, 0).size }
|
assert_raise(ArgumentError) { 1.step(10, 1, 0).size }
|
||||||
assert_raise(ArgumentError) { 1.step(10, 0) { } }
|
assert_raise(ArgumentError) { 1.step(10, 0) { } }
|
||||||
assert_raise(ArgumentError) { 1.step(10, 0).size }
|
assert_raise(ArgumentError) { 1.step(10, 0).size }
|
||||||
assert_raise(TypeError) { 1.step(10, "1") { } }
|
assert_raise(ArgumentError) { 1.step(10, "1") { } }
|
||||||
assert_raise(TypeError) { 1.step(10, "1").size }
|
assert_raise(ArgumentError) { 1.step(10, "1").size }
|
||||||
assert_raise(TypeError) { 1.step(10, nil) { } }
|
assert_raise(TypeError) { 1.step(10, nil) { } }
|
||||||
assert_raise(TypeError) { 1.step(10, nil).size }
|
assert_raise(TypeError) { 1.step(10, nil).size }
|
||||||
assert_nothing_raised { 1.step(by: 0, to: nil) }
|
assert_nothing_raised { 1.step(by: 0, to: nil) }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue