diff options
Diffstat (limited to 'src/compiler/scala/reflect/internal/Definitions.scala')
-rw-r--r-- | src/compiler/scala/reflect/internal/Definitions.scala | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/src/compiler/scala/reflect/internal/Definitions.scala b/src/compiler/scala/reflect/internal/Definitions.scala index 092c478bef..1cc3d580d9 100644 --- a/src/compiler/scala/reflect/internal/Definitions.scala +++ b/src/compiler/scala/reflect/internal/Definitions.scala @@ -172,11 +172,27 @@ trait Definitions extends reflect.api.StandardDefinitions { lazy val AnyValCompanionClass = getClass("scala.AnyValCompanion") setFlag (SEALED | ABSTRACT | TRAIT) // bottom types - lazy val NullClass = newClass(ScalaPackageClass, tpnme.Null, anyrefparam) setFlag (ABSTRACT | TRAIT | FINAL) - lazy val NothingClass = newClass(ScalaPackageClass, tpnme.Nothing, anyparam) setFlag (ABSTRACT | TRAIT | FINAL) lazy val RuntimeNothingClass = getClass(ClassfileConstants.SCALA_NOTHING) lazy val RuntimeNullClass = getClass(ClassfileConstants.SCALA_NULL) + sealed abstract class BottomClassSymbol(name: TypeName, parent: Symbol) extends ClassSymbol(ScalaPackageClass, NoPosition, name) { + locally { + this setFlag ABSTRACT | TRAIT | FINAL + this setInfo ClassInfoType(List(parent.tpe), new Scope, this) + owner.info.decls enter this + } + final override def isBottomClass = true + } + final object NothingClass extends BottomClassSymbol(tpnme.Nothing, AnyClass) { + override def isSubClass(that: Symbol) = true + } + final object NullClass extends BottomClassSymbol(tpnme.Null, AnyRefClass) { + override def isSubClass(that: Symbol) = ( + (that eq AnyClass) + || (that ne NothingClass) && (that isSubClass ObjectClass) + ) + } + // exceptions and other throwables lazy val ClassCastExceptionClass = getClass("java.lang.ClassCastException") lazy val IndexOutOfBoundsExceptionClass = getClass(sn.IOOBException) @@ -351,12 +367,6 @@ trait Definitions extends reflect.api.StandardDefinitions { lazy val ScalaSignatureAnnotation = getClass("scala.reflect.ScalaSignature") lazy val ScalaLongSignatureAnnotation = getClass("scala.reflect.ScalaLongSignature") - // invoke dynamic support - lazy val LinkageModule = getModule("java.dyn.Linkage") - lazy val Linkage_invalidateCallerClass = getMember(LinkageModule, "invalidateCallerClass") - lazy val DynamicDispatchClass = getModule("scala.runtime.DynamicDispatch") - lazy val DynamicDispatch_DontSetTarget = getMember(DynamicDispatchClass, "DontSetTarget") - // Option classes lazy val OptionClass: Symbol = getClass("scala.Option") lazy val SomeClass: Symbol = getClass("scala.Some") |