summaryrefslogtreecommitdiff
path: root/rational.c
diff options
context:
space:
mode:
author卜部昌平 <shyouhei@ruby-lang.org>2020-06-16 14:42:24 +0900
committer卜部昌平 <shyouhei@ruby-lang.org>2020-06-29 11:05:41 +0900
commitd7eec15f8e7e8667cdca144a1e288a3f72015d30 (patch)
tree1048422295295ed810c5cfb9520af593fb887362 /rational.c
parent9c5804ac1ce78126670082327fa3ab80cff0ee25 (diff)
rb_rational_cmp: do not goto into a branch
I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3247
Diffstat (limited to 'rational.c')
-rw-r--r--rational.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/rational.c b/rational.c
index fcad116..f50f20d 100644
--- a/rational.c
+++ b/rational.c
@@ -1085,21 +1085,19 @@ rb_rational_pow(VALUE self, VALUE other)
VALUE
rb_rational_cmp(VALUE self, VALUE other)
{
- if (RB_INTEGER_TYPE_P(other)) {
+ switch (TYPE(other)) {
+ case T_FIXNUM:
+ case T_BIGNUM:
{
get_dat1(self);
if (dat->den == LONG2FIX(1))
return rb_int_cmp(dat->num, other); /* c14n */
other = f_rational_new_bang1(CLASS_OF(self), other);
- goto other_is_rational;
+ /* FALLTHROUGH */
}
- }
- else if (RB_FLOAT_TYPE_P(other)) {
- return rb_dbl_cmp(nurat_to_double(self), RFLOAT_VALUE(other));
- }
- else if (RB_TYPE_P(other, T_RATIONAL)) {
- other_is_rational:
+
+ case T_RATIONAL:
{
VALUE num1, num2;
@@ -1116,8 +1114,11 @@ rb_rational_cmp(VALUE self, VALUE other)
}
return rb_int_cmp(rb_int_minus(num1, num2), ZERO);
}
- }
- else {
+
+ case T_FLOAT:
+ return rb_dbl_cmp(nurat_to_double(self), RFLOAT_VALUE(other));
+
+ default:
return rb_num_coerce_cmp(self, other, rb_intern("<=>"));
}
}