Permalink
Browse files

Fixes SI-5640

  • Loading branch information...
dgruntz committed May 10, 2012
1 parent b0dd045 commit ebfc16f6709f928a8ba1aa9d40f6bfddec69848b
@@ -228,7 +228,7 @@ private static boolean equalsNumChar(java.lang.Number xn, java.lang.Character yc
* as yet have not.
*
* Note: Among primitives, Float.NaN != Float.NaN, but the boxed
* verisons are equal. This still needs reconciliation.
* versions are equal. This still needs reconciliation.
*/
public static int hashFromLong(java.lang.Long n) {
int iv = n.intValue();
@@ -242,6 +242,9 @@ public static int hashFromDouble(java.lang.Double n) {
long lv = n.longValue();
if (lv == dv) return java.lang.Long.valueOf(lv).hashCode();
float fv = n.floatValue();
if (fv == dv) return java.lang.Float.valueOf(fv).hashCode();
else return n.hashCode();
}
public static int hashFromFloat(java.lang.Float n) {
@@ -234,13 +234,10 @@ object ScalaRunTime {
// Note that these are the implementations called by ##, so they
// must not call ## themselves.
@inline def hash(x: Any): Int = x match {
case null => 0
case x: Double => hash(x)
case x: Float => hash(x)
case x: java.lang.Number => hash(x)
case _ => x.hashCode
}
@inline def hash(x: Any): Int =
if (x == null) 0
else if (x.isInstanceOf[java.lang.Number]) BoxesRunTime.hashFromNumber(x.asInstanceOf[java.lang.Number])
else x.hashCode
@inline def hash(dv: Double): Int = {
val iv = dv.toInt
@@ -9,7 +9,15 @@ object Test {
val x = (BigInt(1) << 64).toDouble
val y: Any = x
val f: Float = x.toFloat
val jn: java.lang.Number = x
val jf: java.lang.Float = x.toFloat
val jd: java.lang.Double = x
assert(x.## == y.##, ((x, y)))
assert(x.## == f.##, ((x, f)))
assert(x.## == jn.##, ((x, jn)))
assert(x.## == jf.##, ((x, jf)))
assert(x.## == jd.##, ((x, jd)))
}
}

0 comments on commit ebfc16f

Please sign in to comment.