summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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