diff options
author | Dominik Gruntz <dominik.gruntz@fhnw.ch> | 2012-05-10 11:45:49 +0200 |
---|---|---|
committer | Dominik Gruntz <dominik.gruntz@fhnw.ch> | 2012-05-10 11:45:49 +0200 |
commit | ebfc16f6709f928a8ba1aa9d40f6bfddec69848b (patch) | |
tree | 28c3f7b31b61782d9bc46c049e2cd3bc0b7f4c58 /src | |
parent | b0dd0452fd14ad46c4be782f9227a0540782a2d7 (diff) | |
download | scala-ebfc16f6709f928a8ba1aa9d40f6bfddec69848b.tar.gz scala-ebfc16f6709f928a8ba1aa9d40f6bfddec69848b.tar.bz2 scala-ebfc16f6709f928a8ba1aa9d40f6bfddec69848b.zip |
Fixes SI-5640
Diffstat (limited to 'src')
-rw-r--r-- | src/library/scala/runtime/BoxesRunTime.java | 5 | ||||
-rw-r--r-- | src/library/scala/runtime/ScalaRunTime.scala | 11 |
2 files changed, 8 insertions, 8 deletions
diff --git a/src/library/scala/runtime/BoxesRunTime.java b/src/library/scala/runtime/BoxesRunTime.java index 258a176671..8fe9a017d0 100644 --- a/src/library/scala/runtime/BoxesRunTime.java +++ b/src/library/scala/runtime/BoxesRunTime.java @@ -228,7 +228,7 @@ public final class BoxesRunTime * 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 final class BoxesRunTime 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) { diff --git a/src/library/scala/runtime/ScalaRunTime.scala b/src/library/scala/runtime/ScalaRunTime.scala index a04fd23710..4c5e0e408b 100644 --- a/src/library/scala/runtime/ScalaRunTime.scala +++ b/src/library/scala/runtime/ScalaRunTime.scala @@ -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 |