summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorDominik Gruntz <dominik.gruntz@fhnw.ch>2012-05-10 11:45:49 +0200
committerDominik Gruntz <dominik.gruntz@fhnw.ch>2012-05-10 11:45:49 +0200
commitebfc16f6709f928a8ba1aa9d40f6bfddec69848b (patch)
tree28c3f7b31b61782d9bc46c049e2cd3bc0b7f4c58 /src/library
parentb0dd0452fd14ad46c4be782f9227a0540782a2d7 (diff)
downloadscala-ebfc16f6709f928a8ba1aa9d40f6bfddec69848b.tar.gz
scala-ebfc16f6709f928a8ba1aa9d40f6bfddec69848b.tar.bz2
scala-ebfc16f6709f928a8ba1aa9d40f6bfddec69848b.zip
Fixes SI-5640
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/runtime/BoxesRunTime.java5
-rw-r--r--src/library/scala/runtime/ScalaRunTime.scala11
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