diff options
author | xuwei-k <6b656e6a69@gmail.com> | 2016-07-26 18:03:14 +0900 |
---|---|---|
committer | xuwei-k <6b656e6a69@gmail.com> | 2016-10-28 15:51:56 +0900 |
commit | 26c87af9a9e86e13efb0b2eb4b8565a8089acaf5 (patch) | |
tree | f28cf2226a85e8e0b4e8b42eadfd604ec4e9e947 /src/reflect/scala/reflect | |
parent | 4a487ca5d0da7925fcd23772e25cc10d8167a351 (diff) | |
download | scala-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/scala/reflect')
-rw-r--r-- | src/reflect/scala/reflect/internal/Constants.scala | 4 |
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 } |