summaryrefslogtreecommitdiff
path: root/rational.c
diff options
context:
space:
mode:
author卜部昌平 <shyouhei@ruby-lang.org>2021-05-07 10:04:08 +0900
committer卜部昌平 <shyouhei@ruby-lang.org>2021-05-12 10:30:46 +0900
commit2bc293e899c9d32dcd794a73de8925c49ecf8f15 (patch)
tree7579535ee779a40dcbb27df91193768bd92f771a /rational.c
parent773c690f2553db31a9cc83a037f5449e0c1ea456 (diff)
downloadruby-2bc293e899c9d32dcd794a73de8925c49ecf8f15.tar.gz
cdhash_cmp: can take rational literals
Rational literals are those integers suffixed with `r`. They tend to be a part of more complex expressions like `123/456r`, but in theory they can live alone. When such "bare" rational literals are passed to case-when branch, we have to take care of them. Fixes [Bug #17854]
Diffstat (limited to 'rational.c')
-rw-r--r--rational.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/rational.c b/rational.c
index c7437df86f..846e8bd586 100644
--- a/rational.c
+++ b/rational.c
@@ -1742,8 +1742,8 @@ nurat_rationalize(int argc, VALUE *argv, VALUE self)
}
/* :nodoc: */
-static VALUE
-nurat_hash(VALUE self)
+st_index_t
+rb_rational_hash(VALUE self)
{
st_index_t v, h[2];
VALUE n;
@@ -1754,9 +1754,16 @@ nurat_hash(VALUE self)
n = rb_hash(dat->den);
h[1] = NUM2LONG(n);
v = rb_memhash(h, sizeof(h));
- return ST2FIX(v);
+ return v;
+}
+
+static VALUE
+nurat_hash(VALUE self)
+{
+ return ST2FIX(rb_rational_hash(self));
}
+
static VALUE
f_format(VALUE self, VALUE (*func)(VALUE))
{