summaryrefslogtreecommitdiff
path: root/range.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-02-09 20:37:34 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2023-02-09 20:37:34 +0900
commitda4464b824857d7610f9865ceb452ce0ead49164 (patch)
treefce8cb0636b401a5db8a225a3ef5c9fee9854d3b /range.c
parent8edd350bda66a9ecb2c1043627679f2dc48d6f66 (diff)
downloadruby-da4464b824857d7610f9865ceb452ce0ead49164.tar.gz
[Bug #19426] Fix endless `Range#step` with `#succ` method
Diffstat (limited to 'range.c')
-rw-r--r--range.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/range.c b/range.c
index 6d90ecf4f3..fc43d2973e 100644
--- a/range.c
+++ b/range.c
@@ -532,7 +532,11 @@ range_step(int argc, VALUE *argv, VALUE range)
rb_raise(rb_eTypeError, "can't iterate from %s",
rb_obj_classname(b));
}
- range_each_func(range, step_i, (VALUE)iter);
+ if (!NIL_P(e))
+ range_each_func(range, step_i, (VALUE)iter);
+ else
+ for (;; b = rb_funcallv(b, id_succ, 0, 0))
+ step_i(b, (VALUE)iter);
}
}
return range;