aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-03-26 01:52:00 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-03-26 01:52:00 +0000
commited47a0ec808fc89ac3ce17185419911fee5c7eb4 (patch)
treecca206ca0d66fa76ad4845dff694569c96cb3377
parent3f519a7bfa8f1c806c5791efaa80d76817f7d61d (diff)
downloadruby-ed47a0ec808fc89ac3ce17185419911fee5c7eb4.tar.gz
numeric.c: Fixnum predicts
* numeric.c (FIXNUM_{POSITIVE,NEGATIVE,ZERO}_P): predict macros only for Fixnum. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54295 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--numeric.c8
2 files changed, 11 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 268d8d09a1..f06378e08e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat Mar 26 10:51:58 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (FIXNUM_{POSITIVE,NEGATIVE,ZERO}_P): predict macros
+ only for Fixnum.
+
Sat Mar 26 06:34:24 2016 NARUSE, Yui <naruse@ruby-lang.org>
* localeinit.c (rb_locale_charmap_index): fix prototype.
diff --git a/numeric.c b/numeric.c
index d251742bbc..844c0d3bc1 100644
--- a/numeric.c
+++ b/numeric.c
@@ -173,6 +173,10 @@ compare_with_zero(VALUE num, ID mid)
return r;
}
+#define FIXNUM_POSITIVE_P(num) ((SIGNED_VALUE)(num) > (SIGNED_VALUE)INT2FIX(0))
+#define FIXNUM_NEGATIVE_P(num) ((SIGNED_VALUE)(num) < 0)
+#define FIXNUM_ZERO_P(num) ((num) == INT2FIX(0))
+
static inline int
positive_int_p(VALUE num)
{
@@ -180,7 +184,7 @@ positive_int_p(VALUE num)
if (FIXNUM_P(num)) {
if (method_basic_p(rb_cFixnum))
- return (SIGNED_VALUE)num > 0;
+ return FIXNUM_POSITIVE_P(num);
}
else if (RB_TYPE_P(num, T_BIGNUM)) {
if (method_basic_p(rb_cBignum))
@@ -196,7 +200,7 @@ negative_int_p(VALUE num)
if (FIXNUM_P(num)) {
if (method_basic_p(rb_cFixnum))
- return (SIGNED_VALUE)num < 0;
+ return FIXNUM_NEGATIVE_P(num);
}
else if (RB_TYPE_P(num, T_BIGNUM)) {
if (method_basic_p(rb_cBignum))