diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | range.c | 6 |
2 files changed, 8 insertions, 3 deletions
@@ -1,4 +1,7 @@ -Thu May 1 23:35:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> +Thu May 1 23:43:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * range.c (range_step): check if step can be converted to an integer. + [ruby-dev:34558] * range.c (range_step): allow float step bigger than zero but less than one. [ruby-dev:34557] @@ -308,11 +308,13 @@ range_step(int argc, VALUE *argv, VALUE range) } else { rb_scan_args(argc, argv, "01", &step); - if (FIXNUM_P(step)) { + tmp = rb_check_to_integer(step, "to_int"); + if (!NIL_P(tmp)) { + step = tmp; unit = NUM2LONG(step); } else { - VALUE tmp = rb_funcall(rb_funcall(b, '+', 1, step), '-', 1, b); + tmp = rb_funcall(rb_funcall(b, '+', 1, step), '-', 1, b); unit = rb_cmpint(tmp, step, INT2FIX(0)); } } |