aboutsummaryrefslogtreecommitdiffstats
path: root/complex.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-10-28 06:19:00 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-10-28 06:19:00 +0000
commit620f456dcc232d70a016ccb9672dcc901d0bbaea (patch)
treeab2baa49f97424b838064e0d57baabbb40198d1c /complex.c
parent21ddf31e81c8053781e36a05f45e202037369346 (diff)
downloadruby-620f456dcc232d70a016ccb9672dcc901d0bbaea.tar.gz
complex.c: FINITE_TYPE_P
* complex.c (FINITE_TYPE_P): extract predicate. * complex.c (rb_complex_finite_p, rb_complex_infinite_p): use dedicated predicates instead of switch by TYPE. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56507 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'complex.c')
-rw-r--r--complex.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/complex.c b/complex.c
index 2544f3d9f7..7699463e28 100644
--- a/complex.c
+++ b/complex.c
@@ -1331,6 +1331,8 @@ nucomp_inspect(VALUE self)
return s;
}
+#define FINITE_TYPE_P(v) (RB_INTEGER_TYPE_P(v) || RB_TYPE_P(v, T_RATIONAL))
+
/*
* call-seq:
* cmp.finite? -> true or false
@@ -1342,17 +1344,15 @@ static VALUE
rb_complex_finite_p(VALUE self)
{
VALUE magnitude = nucomp_abs(self);
- double f;
- switch (TYPE(magnitude)) {
- case T_FIXNUM: case T_BIGNUM: case T_RATIONAL:
+ if (FINITE_TYPE_P(magnitude)) {
return Qtrue;
-
- case T_FLOAT:
- f = RFLOAT_VALUE(magnitude);
+ }
+ else if (RB_FLOAT_TYPE_P(magnitude)) {
+ const double f = RFLOAT_VALUE(magnitude);
return isinf(f) ? Qfalse : Qtrue;
-
- default:
+ }
+ else {
return rb_funcall(magnitude, rb_intern("finite?"), 0);
}
}
@@ -1375,20 +1375,18 @@ static VALUE
rb_complex_infinite_p(VALUE self)
{
VALUE magnitude = nucomp_abs(self);
- double f;
- switch (TYPE(magnitude)) {
- case T_FIXNUM: case T_BIGNUM: case T_RATIONAL:
+ if (FINITE_TYPE_P(magnitude)) {
return Qnil;
-
- case T_FLOAT:
- f = RFLOAT_VALUE(magnitude);
+ }
+ if (RB_FLOAT_TYPE_P(magnitude)) {
+ const double f = RFLOAT_VALUE(magnitude);
if (isinf(f)) {
return INT2FIX(f < 0 ? -1 : 1);
}
return Qnil;
-
- default:
+ }
+ else {
return rb_funcall(magnitude, rb_intern("infinite?"), 0);
}
}