Skip to content

Commit 79f36c5

Browse files
committed
Revert the override of Enumerator#to_set that performed size checks
[Bug #21780]
1 parent 54d3945 commit 79f36c5

File tree

4 files changed

+8
-30
lines changed

4 files changed

+8
-30
lines changed

NEWS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,8 @@ Note: We're only listing outstanding class updates.
188188

189189
* Range
190190

191-
* `Range#to_set` and `Enumerator#to_set` now perform size checks to prevent
192-
issues with endless ranges. [[Bug #21654]]
191+
* `Range#to_set` now performs size checks to prevent issues with
192+
endless ranges. [[Bug #21654]]
193193

194194
* `Range#overlap?` now correctly handles infinite (unbounded) ranges.
195195
[[Bug #21185]]

enumerator.c

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3366,24 +3366,6 @@ enumerator_plus(VALUE obj, VALUE eobj)
33663366
return new_enum_chain(rb_ary_new_from_args(2, obj, eobj));
33673367
}
33683368

3369-
/*
3370-
* call-seq:
3371-
* e.to_set -> set
3372-
*
3373-
* Returns a set generated from this enumerator.
3374-
*
3375-
* e = Enumerator.new { |y| y << 1 << 1 << 2 << 3 << 5 }
3376-
* e.to_set #=> #<Set: {1, 2, 3, 5}>
3377-
*/
3378-
static VALUE enumerator_to_set(int argc, VALUE *argv, VALUE obj)
3379-
{
3380-
VALUE size = rb_funcall(obj, id_size, 0);
3381-
if (RB_TYPE_P(size, T_FLOAT) && RFLOAT_VALUE(size) == INFINITY) {
3382-
rb_raise(rb_eArgError, "cannot convert an infinite enumerator to a set");
3383-
}
3384-
return rb_call_super(argc, argv);
3385-
}
3386-
33873369
/*
33883370
* Document-class: Enumerator::Product
33893371
*
@@ -4540,7 +4522,6 @@ InitVM_Enumerator(void)
45404522
rb_define_method(rb_cEnumerator, "rewind", enumerator_rewind, 0);
45414523
rb_define_method(rb_cEnumerator, "inspect", enumerator_inspect, 0);
45424524
rb_define_method(rb_cEnumerator, "size", enumerator_size, 0);
4543-
rb_define_method(rb_cEnumerator, "to_set", enumerator_to_set, -1);
45444525
rb_define_method(rb_cEnumerator, "+", enumerator_plus, 1);
45454526
rb_define_method(rb_mEnumerable, "chain", enum_chain, -1);
45464527

test/ruby/test_enumerator.rb

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,13 +1070,4 @@ def initialize(val)
10701070
enum = ary.each
10711071
assert_equal(35.0, enum.sum)
10721072
end
1073-
1074-
def test_to_set
1075-
e = Enumerator.new { it << 1 << 1 << 2 << 3 << 5 }
1076-
set = e.to_set
1077-
assert_equal(Set[1, 2, 3, 5], set)
1078-
1079-
ei = Enumerator.new(Float::INFINITY) { it << 1 << 1 << 2 << 3 << 5 }
1080-
assert_raise(ArgumentError) { ei.to_set }
1081-
end
10821073
end

test/ruby/test_set.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,6 +1003,12 @@ def test_to_set_not_calling_size
10031003
set = assert_nothing_raised { enum.to_set }
10041004
assert(set.is_a?(Set))
10051005
assert_equal(Set[1,2,3], set)
1006+
1007+
enumerator = enum.to_enum
1008+
1009+
set = assert_nothing_raised { enumerator.to_set }
1010+
assert(set.is_a?(Set))
1011+
assert_equal(Set[1,2,3], set)
10061012
end
10071013
end
10081014

0 commit comments

Comments
 (0)