From bdc00ba604b74646fbf551a544d973466ce39558 Mon Sep 17 00:00:00 2001 From: matz Date: Sun, 6 Apr 2008 17:11:50 +0000 Subject: * bignum.c (rb_cmpint): moved from compar.c, to check bignum zero. * range.c (range_step): add step for each iteration if begin and end are numeric. [ruby-core:15990] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15911 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- bignum.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'bignum.c') diff --git a/bignum.c b/bignum.c index 6df3d23740..946ba8c8d5 100644 --- a/bignum.c +++ b/bignum.c @@ -50,6 +50,23 @@ bigzero_p(VALUE x) return 1; } +int +rb_cmpint(VALUE val, VALUE a, VALUE b) +{ + if (NIL_P(val)) { + rb_cmperr(a, b); + } + if (FIXNUM_P(val)) return FIX2INT(val); + if (TYPE(val) == T_BIGNUM) { + if (BIGZEROP(val)) return 0; + if (RBIGNUM_SIGN(val)) return 1; + return -1; + } + if (RTEST(rb_funcall(val, '>', 1, INT2FIX(0)))) return 1; + if (RTEST(rb_funcall(val, '<', 1, INT2FIX(0)))) return -1; + return 0; +} + #define RBIGNUM_SET_LEN(b,l) \ ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \ (RBASIC(b)->flags = (RBASIC(b)->flags & ~RBIGNUM_EMBED_LEN_MASK) | \ -- cgit v1.2.3