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]
This commit is contained in:
卜部昌平 2021-05-07 10:04:08 +09:00
parent 773c690f25
commit 2bc293e899
Notes: git 2021-05-12 10:31:14 +09:00
5 changed files with 26 additions and 3 deletions

View file

@ -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))
{