summaryrefslogtreecommitdiff
path: root/range.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-10-10 11:41:26 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-10-10 11:41:26 +0900
commit2293547d9b59e0641e26837500986e78f9ba891b (patch)
tree073df99730375f376ef926ace122a08dff0c9203 /range.c
parentafb95d1004676f71beb0dab389b19695728726e5 (diff)
downloadruby-2293547d9b59e0641e26837500986e78f9ba891b.tar.gz
Update iteration step in step_i_iter
Diffstat (limited to 'range.c')
-rw-r--r--range.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/range.c b/range.c
index 96fcfe577b..cb86f540d8 100644
--- a/range.c
+++ b/range.c
@@ -308,7 +308,7 @@ range_each_func(VALUE range, int (*func)(VALUE, VALUE), VALUE arg)
}
}
-static VALUE*
+static bool
step_i_iter(VALUE arg)
{
VALUE *iter = (VALUE *)arg;
@@ -319,17 +319,16 @@ step_i_iter(VALUE arg)
else {
iter[0] = rb_funcall(iter[0], '-', 1, INT2FIX(1));
}
- return iter;
+ if (iter[0] != INT2FIX(0)) return false;
+ iter[0] = iter[1];
+ return true;
}
static int
sym_step_i(VALUE i, VALUE arg)
{
- VALUE *iter = step_i_iter(arg);
-
- if (iter[0] == INT2FIX(0)) {
+ if (step_i_iter(arg)) {
rb_yield(rb_str_intern(i));
- iter[0] = iter[1];
}
return 0;
}
@@ -337,11 +336,8 @@ sym_step_i(VALUE i, VALUE arg)
static int
step_i(VALUE i, VALUE arg)
{
- VALUE *iter = step_i_iter(arg);
-
- if (iter[0] == INT2FIX(0)) {
+ if (step_i_iter(arg)) {
rb_yield(i);
- iter[0] = iter[1];
}
return 0;
}