diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-01-04 23:20:39 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-01-04 23:20:39 +0000 |
commit | f3844ccf44060801c7ceed331efa025d73e8f718 (patch) | |
tree | e23a7aa60c53d60b0efbf7446abc63ac420de584 /range.c | |
parent | 3c66767bda0dbd0a92ead7c2e2721614a9f82bbe (diff) | |
download | bundler-f3844ccf44060801c7ceed331efa025d73e8f718.tar.gz |
* range.c (range_step): should not add up errors on loops.
[ruby-dev:37691]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21330 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'range.c')
-rw-r--r-- | range.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -343,10 +343,13 @@ range_step(int argc, VALUE *argv, VALUE range) !NIL_P(rb_check_to_integer(b, "to_int")) || !NIL_P(rb_check_to_integer(e, "to_int"))) { ID op = EXCL(range) ? '<' : rb_intern("<="); + VALUE v = b; + int i = 0; - while (RTEST(rb_funcall(b, op, 1, e))) { - rb_yield(b); - b = rb_funcall(b, '+', 1, step); + while (RTEST(rb_funcall(v, op, 1, e))) { + rb_yield(v); + i++; + v = rb_funcall(b, '+', 1, rb_funcall(INT2NUM(i), '*', 1, step)); } } else { |