* complex.c (nucomp_hash): force hash values fixable.
  [ruby-core:85224] [Bug #14420]

* rational.c (nurat_hash): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62107 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2018-01-30 05:48:28 +00:00
Родитель 5af43b1ec2
Коммит 3f7221ad3d
4 изменённых файлов: 11 добавлений и 5 удалений

Просмотреть файл

@ -1253,7 +1253,7 @@ nucomp_hash(VALUE self)
n = rb_hash(dat->imag);
h[1] = NUM2LONG(n);
v = rb_memhash(h, sizeof(h));
return LONG2FIX(v);
return ST2FIX(v);
}
/* :nodoc: */

Просмотреть файл

@ -1783,7 +1783,7 @@ nurat_hash(VALUE self)
n = rb_hash(dat->den);
h[1] = NUM2LONG(n);
v = rb_memhash(h, sizeof(h));
return LONG2FIX(v);
return ST2FIX(v);
}
static VALUE

Просмотреть файл

@ -48,8 +48,12 @@ class Complex_Test < Test::Unit::TestCase
end
def test_hash
assert_kind_of(Integer, Complex(1,2).hash)
assert_kind_of(Integer, Complex(1.0,2.0).hash)
h = Complex(1,2).hash
assert_kind_of(Integer, h)
assert_nothing_raised {h.to_s}
h = Complex(1.0,2.0).hash
assert_kind_of(Integer, h)
assert_nothing_raised {h.to_s}
h = {}
h[Complex(0)] = 0

Просмотреть файл

@ -42,7 +42,9 @@ class Rational_Test < Test::Unit::TestCase
end
def test_hash
assert_kind_of(Integer, Rational(1,2).hash)
h = Rational(1,2).hash
assert_kind_of(Integer, h)
assert_nothing_raised {h.to_s}
h = {}
h[Rational(0)] = 0