diff options
author | Jeremy Evans <code@jeremyevans.net> | 2019-06-02 20:00:35 -0700 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2019-06-02 20:00:35 -0700 |
commit | 17af8bfce6508951edca8650155be5525a894f65 (patch) | |
tree | aa76ef5e567dca3b56937f2cbf18a43576a34397 /enum.c | |
parent | f48aad7ba22811dcd5e5be7af667ec49301ad7cd (diff) |
Make size on an infinite each_slice enumerator return Infinity
Fixes [Bug #15889]
Diffstat (limited to 'enum.c')
-rw-r--r-- | enum.c | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -2527,10 +2527,15 @@ enum_each_slice_size(VALUE obj, VALUE args, VALUE eobj) { VALUE n, size; long slice_size = NUM2LONG(RARRAY_AREF(args, 0)); + ID infinite_p; + CONST_ID(infinite_p, "infinite?"); if (slice_size <= 0) rb_raise(rb_eArgError, "invalid slice size"); size = enum_size(obj, 0, 0); if (size == Qnil) return Qnil; + if (RB_FLOAT_TYPE_P(size) && RTEST(rb_funcall(size, infinite_p, 0))) { + return size; + } n = add_int(size, slice_size-1); return div_int(n, slice_size); |