summaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorxuwei-k <6b656e6a69@gmail.com>2016-07-26 18:03:14 +0900
committerxuwei-k <6b656e6a69@gmail.com>2016-10-28 15:51:56 +0900
commit26c87af9a9e86e13efb0b2eb4b8565a8089acaf5 (patch)
treef28cf2226a85e8e0b4e8b42eadfd604ec4e9e947 /src/reflect
parent4a487ca5d0da7925fcd23772e25cc10d8167a351 (diff)
downloadscala-26c87af9a9e86e13efb0b2eb4b8565a8089acaf5.tar.gz
scala-26c87af9a9e86e13efb0b2eb4b8565a8089acaf5.tar.bz2
scala-26c87af9a9e86e13efb0b2eb4b8565a8089acaf5.zip
avoid boxing
scala.runtime.Rich{Double, Float} has `isNaN` and these are value class. Also java.lang.{Double, Float} has `isNaN`. - https://docs.oracle.com/javase/8/docs/api/java/lang/Double.html#isNaN-- - https://docs.oracle.com/javase/8/docs/api/java/lang/Float.html#isNaN-- We can't call `RichDouble#isNaN` because `implicit def double2Double(x: Double): java.lang.Double` is higher priority than `implicit def doubleWrapper(x: Double): RichDouble` ``` $ scala -version Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL $ scala -Xprint:jvm -e "1.0.isNaN" [[syntax trees at end of jvm]] // scalacmd616162202928036892.scala package <empty> { object Main extends Object { def main(args: Array[String]): Unit = { new <$anon: Object>(); () }; def <init>(): Main.type = { Main.super.<init>(); () } }; final class anon$1 extends Object { def <init>(): <$anon: Object> = { anon$1.super.<init>(); scala.this.Predef.double2Double(1.0).isNaN(); () } } } ```
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/scala/reflect/internal/Constants.scala4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/reflect/scala/reflect/internal/Constants.scala b/src/reflect/scala/reflect/internal/Constants.scala
index 7b47798ff7..cd2debfaf4 100644
--- a/src/reflect/scala/reflect/internal/Constants.scala
+++ b/src/reflect/scala/reflect/internal/Constants.scala
@@ -87,8 +87,8 @@ trait Constants extends api.Constants {
}
def isNaN = value match {
- case f: Float => f.isNaN
- case d: Double => d.isNaN
+ case f: Float => java.lang.Float.isNaN(f)
+ case d: Double => java.lang.Double.isNaN(d)
case _ => false
}