summaryrefslogtreecommitdiff
path: root/range.c
diff options
context:
space:
mode:
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;
}