diff options
author | 卜部昌平 <shyouhei@ruby-lang.org> | 2021-05-07 10:04:08 +0900 |
---|---|---|
committer | 卜部昌平 <shyouhei@ruby-lang.org> | 2021-05-12 10:30:46 +0900 |
commit | 2bc293e899c9d32dcd794a73de8925c49ecf8f15 (patch) | |
tree | 7579535ee779a40dcbb27df91193768bd92f771a /rational.c | |
parent | 773c690f2553db31a9cc83a037f5449e0c1ea456 (diff) | |
download | ruby-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.c | 13 |
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)) { |