mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
mruby-range-ext (range_size): raise TypeError if not iterable
According ruby/ruby#8663, `Range#size` behavior has changed.
This commit is contained in:
@@ -111,7 +111,13 @@ range_size(mrb_state *mrb, mrb_value range)
|
||||
mrb_value beg = RANGE_BEG(r);
|
||||
mrb_value end = RANGE_END(r);
|
||||
|
||||
if ((mrb_integer_p(beg) || mrb_float_p(beg)) && mrb_nil_p(end)) {
|
||||
if (mrb_float_p(beg)) {
|
||||
mrb_raise(mrb, E_TYPE_ERROR, "can't iterate from Float");
|
||||
}
|
||||
if (mrb_nil_p(beg)) {
|
||||
mrb_raise(mrb, E_TYPE_ERROR, "can't iterate from nil");
|
||||
}
|
||||
if (mrb_integer_p(beg) && mrb_nil_p(end)) {
|
||||
return mrb_float_value(mrb, INFINITY);
|
||||
}
|
||||
|
||||
@@ -167,6 +173,9 @@ range_size(mrb_state *mrb, mrb_value range)
|
||||
|
||||
mrb_value beg = RANGE_BEG(r);
|
||||
mrb_value end = RANGE_END(r);
|
||||
if (mrb_nil_p(beg)) {
|
||||
mrb_raise(mrb, E_TYPE_ERROR, "can't iterate from nil");
|
||||
}
|
||||
if (mrb_integer_p(beg) && mrb_nil_p(end)) {
|
||||
return mrb_nil_value();
|
||||
}
|
||||
|
||||
@@ -55,13 +55,10 @@ assert('Range#size') do
|
||||
skip unless Object.const_defined?(:Float)
|
||||
assert_equal 6, (1...6.3).size
|
||||
assert_equal 5, (1...6.0).size
|
||||
assert_equal 5, (1.1...6).size
|
||||
assert_equal 15, (1.0..15.9).size
|
||||
assert_equal Float::INFINITY, (0..Float::INFINITY).size
|
||||
|
||||
assert_equal Float::INFINITY, (1..).size
|
||||
assert_equal Float::INFINITY, (1...).size
|
||||
assert_equal Float::INFINITY, (1.0..).size
|
||||
end
|
||||
|
||||
assert('Range#max') do
|
||||
|
||||
Reference in New Issue
Block a user