summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2012-09-06 13:37:40 +0200
committerEugene Burmako <xeno.by@gmail.com>2012-09-06 20:18:22 +0200
commitf28e4d246cbb52e81228959fe9d80716cc7e2dc3 (patch)
tree93d05b1b3ad2f19a00e2167382ffbee7d04a5c4e /src/library
parentd27dc71d676abc62ad9ff64c60bd42516b39ea19 (diff)
downloadscala-f28e4d246cbb52e81228959fe9d80716cc7e2dc3.tar.gz
scala-f28e4d246cbb52e81228959fe9d80716cc7e2dc3.tar.bz2
scala-f28e4d246cbb52e81228959fe9d80716cc7e2dc3.zip
fixes Manifest.Nothing and Manifest.Null
Also introduces an important change to Manifest.Nothing and Manifest.Null. Previously their `erasure` was equal to classOf[Object]. Now it's correctly set to classOf[scala.runtime.Nothing$] and classOf[scala.runtime.Null$] correspondingly. See a discussion here: https://groups.google.com/forum/#!topic/scala-internals/Y0ALGo7QPqE
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/reflect/ClassTag.scala9
-rw-r--r--src/library/scala/reflect/Manifest.scala8
2 files changed, 11 insertions, 6 deletions
diff --git a/src/library/scala/reflect/ClassTag.scala b/src/library/scala/reflect/ClassTag.scala
index 373fdb4129..aaef959d7c 100644
--- a/src/library/scala/reflect/ClassTag.scala
+++ b/src/library/scala/reflect/ClassTag.scala
@@ -2,7 +2,7 @@ package scala.reflect
import java.lang.{ Class => jClass }
import language.{implicitConversions, existentials}
-import scala.runtime.ScalaRunTime.{ arrayClass }
+import scala.runtime.ScalaRunTime.{ arrayClass, arrayElementClass }
/** A `ClassTag[T]` wraps a runtime class, which can be accessed via the `runtimeClass` method.
*
@@ -60,7 +60,12 @@ trait ClassTag[T] extends ClassManifestDeprecatedApis[T] with Equals with Serial
override def canEqual(x: Any) = x.isInstanceOf[ClassTag[_]]
override def equals(x: Any) = x.isInstanceOf[ClassTag[_]] && this.runtimeClass == x.asInstanceOf[ClassTag[_]].runtimeClass
override def hashCode = scala.runtime.ScalaRunTime.hash(runtimeClass)
- override def toString = "ClassTag[" + runtimeClass + "]"
+ override def toString = {
+ def prettyprint(clazz: jClass[_]): String =
+ if (clazz.isArray) s"Array[${prettyprint(arrayElementClass(clazz))}]" else
+ clazz.getName
+ prettyprint(runtimeClass)
+ }
}
object ClassTag {
diff --git a/src/library/scala/reflect/Manifest.scala b/src/library/scala/reflect/Manifest.scala
index 8289fdab69..f2a23f4372 100644
--- a/src/library/scala/reflect/Manifest.scala
+++ b/src/library/scala/reflect/Manifest.scala
@@ -176,13 +176,13 @@ object ManifestFactory {
private def readResolve(): Any = Manifest.AnyVal
}
- val Null: Manifest[scala.Null] = new PhantomManifest[scala.Null](ObjectTYPE, "Null") {
+ val Null: Manifest[scala.Null] = new PhantomManifest[scala.Null](NullTYPE, "Null") {
override def <:<(that: ClassManifest[_]): Boolean =
(that ne null) && (that ne Nothing) && !(that <:< AnyVal)
private def readResolve(): Any = Manifest.Null
}
- val Nothing: Manifest[scala.Nothing] = new PhantomManifest[scala.Nothing](ObjectTYPE, "Nothing") {
+ val Nothing: Manifest[scala.Nothing] = new PhantomManifest[scala.Nothing](NothingTYPE, "Nothing") {
override def <:<(that: ClassManifest[_]): Boolean = (that ne null)
private def readResolve(): Any = Manifest.Nothing
}
@@ -217,8 +217,8 @@ object ManifestFactory {
def classType[T](prefix: Manifest[_], clazz: Predef.Class[_], args: Manifest[_]*): Manifest[T] =
new ClassTypeManifest[T](Some(prefix), clazz, args.toList)
- private abstract class PhantomManifest[T](override val runtimeClass: Predef.Class[_],
- override val toString: String) extends ClassTypeManifest[T](None, runtimeClass, Nil) {
+ private abstract class PhantomManifest[T](_runtimeClass: Predef.Class[_],
+ override val toString: String) extends ClassTypeManifest[T](None, _runtimeClass, Nil) {
override def equals(that: Any): Boolean = this eq that.asInstanceOf[AnyRef]
override val hashCode = System.identityHashCode(this)
}