diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-04-06 17:11:50 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-04-06 17:11:50 +0000 |
commit | bdc00ba604b74646fbf551a544d973466ce39558 (patch) | |
tree | 89f1305b01dd6a98f5db131b1a235dcd767bd4ad /bignum.c | |
parent | a06fc80da67570a53c4790f7d7e053222aeef2a5 (diff) |
* 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
Diffstat (limited to 'bignum.c')
-rw-r--r-- | bignum.c | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -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) | \ |