From 40e566aef9e5d735bb638d836add209c2ca8ea8f Mon Sep 17 00:00:00 2001 From: matz Date: Thu, 2 May 2002 07:50:36 +0000 Subject: * error.c: use HAVE_DECL_SYS_NERR instead of platform names. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@2423 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- range.c | 43 +++++++++++++++---------------------------- 1 file changed, 15 insertions(+), 28 deletions(-) (limited to 'range.c') diff --git a/range.c b/range.c index 8a92eacec..81d00f007 100644 --- a/range.c +++ b/range.c @@ -265,26 +265,17 @@ range_step(argc, argv, range) } if (FIXNUM_P(b) && FIXNUM_P(e)) { /* fixnums are special */ - long beg = FIX2LONG(b), end = FIX2LONG(e), s = NUM2LONG(step); + long beg, end = FIX2LONG(e), s = NUM2LONG(step); long i; if (s <= 0) { rb_raise(rb_eArgError, "step can't be <= 0"); } - if ((end - beg) < 0) { - if (!EXCL(range)) end -= 1; - for (i=beg; i>end; i-=s) { - rb_yield(LONG2NUM(i)); - } - } - else { - if (!EXCL(range)) end += 1; - for (i=beg; i', 1, e))) { - rb_yield(b); - b = rb_funcall(b, '-', 1, step); - } - } - else { - if (!EXCL(range)) e = rb_funcall(e, '+', 1, INT2FIX(1)); - while (RTEST(rb_funcall(b, '<', 1, e))) { - rb_yield(b); - b = rb_funcall(b, '+', 1, step); - } + if (!EXCL(range)) e = rb_funcall(e, '+', 1, INT2FIX(1)); + while (RTEST(rb_funcall(b, '<', 1, e))) { + rb_yield(b); + b = rb_funcall(b, '+', 1, step); } } else if (TYPE(b) == T_STRING) { @@ -314,14 +295,20 @@ range_step(argc, argv, range) args[0] = b; args[1] = e; args[2] = range; iter[0] = 1; iter[1] = NUM2LONG(step); + if (iter[1] <= 0) { + rb_raise(rb_eArgError, "step can't be <= 0"); + } rb_iterate((VALUE(*)_((VALUE)))r_step_str, (VALUE)args, r_step_str_i, (VALUE)iter); } else { /* generic each */ VALUE v = b; - long lim = NUM2INT(step); + long lim = NUM2LONG(step); long i; + if (lim <= 0) { + rb_raise(rb_eArgError, "step can't be <= 0"); + } if (EXCL(range)) { while (r_lt(v, e)) { if (r_eq(v, e)) break; -- cgit