diff options
author | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-12 18:42:30 +0000 |
---|---|---|
committer | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-12 18:42:30 +0000 |
commit | b027b019ef14f6883497e7f533eb8c82950ed15a (patch) | |
tree | 02c6e4cd65e2a92903a1256b41a41f4544812598 /complex.c | |
parent | b5be78c6bf27c668f174a90dd26a59eb11a5918f (diff) |
complex.c: refactoring
* complex.c: refactor to use some specific macros and
to reduce needless conversion by FIX2LONG.
* complex.c (k_fixnum_p, k_bignum_p): removed.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56762 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'complex.c')
-rw-r--r-- | complex.c | 41 |
1 files changed, 14 insertions, 27 deletions
@@ -81,9 +81,9 @@ inline static VALUE f_add(VALUE x, VALUE y) { #ifndef PRESERVE_SIGNEDZERO - if (FIXNUM_P(y) && FIX2LONG(y) == 0) + if (FIXNUM_P(y) && FIXNUM_ZERO_P(y)) return x; - else if (FIXNUM_P(x) && FIX2LONG(x) == 0) + else if (FIXNUM_P(x) && FIXNUM_ZERO_P(x)) return y; #endif return rb_funcall(x, '+', 1, y); @@ -135,7 +135,7 @@ inline static VALUE f_sub(VALUE x, VALUE y) { #ifndef PRESERVE_SIGNEDZERO - if (FIXNUM_P(y) && FIX2LONG(y) == 0) + if (FIXNUM_P(y) && FIXNUM_ZERO_P(y)) return x; #endif return rb_funcall(x, '-', 1, y); @@ -169,7 +169,7 @@ inline static VALUE f_eqeq_p(VALUE x, VALUE y) { if (FIXNUM_P(x) && FIXNUM_P(y)) - return f_boolcast(FIX2LONG(x) == FIX2LONG(y)); + return f_boolcast(x == y); return rb_funcall(x, id_eqeq_p, 1, y); } @@ -181,7 +181,7 @@ inline static VALUE f_negative_p(VALUE x) { if (FIXNUM_P(x)) - return f_boolcast(FIX2LONG(x) < 0); + return f_boolcast(FIXNUM_NEGATIVE_P(x)); return rb_funcall(x, '<', 1, ZERO); } @@ -190,8 +190,8 @@ f_negative_p(VALUE x) inline static VALUE f_zero_p(VALUE x) { - if (RB_TYPE_P(x, T_FIXNUM)) { - return f_boolcast(FIX2LONG(x) == 0); + if (FIXNUM_P(x)) { + return f_boolcast(FIXNUM_ZERO_P(x)); } else if (RB_TYPE_P(x, T_BIGNUM)) { return Qfalse; @@ -199,7 +199,7 @@ f_zero_p(VALUE x) else if (RB_TYPE_P(x, T_RATIONAL)) { VALUE num = RRATIONAL(x)->num; - return f_boolcast(FIXNUM_P(num) && FIX2LONG(num) == 0); + return f_boolcast(FIXNUM_P(num) && FIXNUM_ZERO_P(num)); } return rb_funcall(x, id_eqeq_p, 1, ZERO); } @@ -209,7 +209,7 @@ f_zero_p(VALUE x) inline static VALUE f_one_p(VALUE x) { - if (RB_TYPE_P(x, T_FIXNUM)) { + if (FIXNUM_P(x)) { return f_boolcast(FIX2LONG(x) == 1); } else if (RB_TYPE_P(x, T_BIGNUM)) { @@ -238,18 +238,6 @@ k_numeric_p(VALUE x) } inline static VALUE -k_fixnum_p(VALUE x) -{ - return FIXNUM_P(x); -} - -inline static VALUE -k_bignum_p(VALUE x) -{ - return RB_TYPE_P(x, T_BIGNUM); -} - -inline static VALUE k_float_p(VALUE x) { return f_kind_of_p(x, rb_cFloat); @@ -352,9 +340,8 @@ nucomp_canonicalization(int f) inline static void nucomp_real_check(VALUE num) { - if (!RB_TYPE_P(num, T_FIXNUM) && - !RB_TYPE_P(num, T_BIGNUM) && - !RB_TYPE_P(num, T_FLOAT) && + if (!RB_INTEGER_TYPE_P(num) && + !RB_FLOAT_TYPE_P(num) && !RB_TYPE_P(num, T_RATIONAL)) { if (!k_numeric_p(num) || !f_real_p(num)) rb_raise(rb_eTypeError, "not a real"); @@ -936,7 +923,7 @@ nucomp_expt(VALUE self, VALUE other) f_mul(dat->imag, m_log_bang(r))); return f_complex_polar(CLASS_OF(self), nr, ntheta); } - if (k_fixnum_p(other)) { + if (FIXNUM_P(other)) { if (f_gt_p(other, ZERO)) { VALUE x, z; long n; @@ -973,7 +960,7 @@ nucomp_expt(VALUE self, VALUE other) if (k_numeric_p(other) && f_real_p(other)) { VALUE r, theta; - if (k_bignum_p(other)) + if (RB_TYPE_P(other, T_BIGNUM)) rb_warn("in a**b, b may be too big"); r = f_abs(self); @@ -1258,7 +1245,7 @@ nucomp_eql_p(VALUE self, VALUE other) inline static VALUE f_signbit(VALUE x) { - if (RB_TYPE_P(x, T_FLOAT)) { + if (RB_FLOAT_TYPE_P(x)) { double f = RFLOAT_VALUE(x); return f_boolcast(!isnan(f) && signbit(f)); } |