summaryrefslogtreecommitdiff
path: root/range.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-04-03 17:20:48 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-04-03 17:20:48 +0000
commit4d87d0778293cc672baaf9b91414176a75c85fb9 (patch)
tree7d6da896f12e7a2e2c00d362b8afc52c299041fa /range.c
parent9ee1ced6d95eaf139ea69364ee7b10e74b5afa04 (diff)
* range.c (range_step): should not round step into integer if
begin and end are numeric. [ruby-core:15990] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15899 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'range.c')
-rw-r--r--range.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/range.c b/range.c
index b60cbcac91..e1909047d1 100644
--- a/range.c
+++ b/range.c
@@ -322,7 +322,6 @@ range_step(argc, argv, range)
else {
VALUE tmp = rb_to_int(step);
unit = rb_cmpint(tmp, step, INT2FIX(0));
- step = tmp;
}
if (unit < 0) {
rb_raise(rb_eArgError, "step can't be negative");
@@ -354,8 +353,10 @@ range_step(argc, argv, range)
rb_iterate((VALUE(*)_((VALUE)))str_step, (VALUE)args, step_i,
(VALUE)iter);
}
- else if (rb_obj_is_kind_of(b, rb_cNumeric)) {
- ID c = rb_intern(EXCL(range) ? "<" : "<=");
+ else if (rb_obj_is_kind_of(b, rb_cNumeric) ||
+ !NIL_P(rb_check_to_integer(b, "to_int")) ||
+ !NIL_P(rb_check_to_integer(e, "to_int"))) {
+ ID c = EXCL(range) ? '<' : rb_intern("<=");
while (RTEST(rb_funcall(b, c, 1, e))) {
rb_yield(b);