Skip to content

Commit 947c49e

Browse files
committed
Introduce NotNull type
NotNull is a common supertype of AnyRef and AnyVal. It will be interpreted specially in type comparisons.
1 parent 926b08e commit 947c49e

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

compiler/src/dotty/tools/dotc/core/Definitions.scala

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,9 @@ class Definitions {
249249
*/
250250
@tu lazy val AnyClass: ClassSymbol = completeClass(enterCompleteClassSymbol(ScalaPackageClass, tpnme.Any, Abstract, Nil), ensureCtor = false)
251251
def AnyType: TypeRef = AnyClass.typeRef
252-
@tu lazy val AnyValClass: ClassSymbol = completeClass(enterCompleteClassSymbol(ScalaPackageClass, tpnme.AnyVal, Abstract, List(AnyClass.typeRef)))
252+
@tu lazy val AnyValClass: ClassSymbol = completeClass(
253+
enterCompleteClassSymbol(ScalaPackageClass, tpnme.AnyVal, Abstract,
254+
List(AnyClass.typeRef, NotNullClass.typeRef)))
253255
def AnyValType: TypeRef = AnyValClass.typeRef
254256

255257
@tu lazy val Any_== : TermSymbol = enterMethod(AnyClass, nme.EQ, methOfAny(BooleanType), Final)
@@ -278,7 +280,8 @@ class Definitions {
278280
@tu lazy val ObjectClass: ClassSymbol = {
279281
val cls = ctx.requiredClass("java.lang.Object")
280282
assert(!cls.isCompleted, "race for completing java.lang.Object")
281-
cls.info = ClassInfo(cls.owner.thisType, cls, AnyClass.typeRef :: Nil, newScope)
283+
cls.info = ClassInfo(cls.owner.thisType, cls,
284+
List(AnyClass.typeRef, NotNullClass.typeRef), newScope)
282285
cls.setFlag(NoInits | JavaDefined)
283286

284287
// The companion object doesn't really exist, so it needs to be marked as
@@ -403,6 +406,11 @@ class Definitions {
403406
List(AnyClass.typeRef), EmptyScope)
404407
@tu lazy val SingletonType: TypeRef = SingletonClass.typeRef
405408

409+
@tu lazy val NotNullClass: ClassSymbol =
410+
enterCompleteClassSymbol(
411+
ScalaPackageClass, tpnme.NotNull, PureInterfaceCreationFlags,
412+
List(AnyClass.typeRef), EmptyScope)
413+
406414
@tu lazy val CollectionSeqType: TypeRef = ctx.requiredClassRef("scala.collection.Seq")
407415
@tu lazy val SeqType: TypeRef = ctx.requiredClassRef("scala.collection.immutable.Seq")
408416
def SeqClass(given Context): ClassSymbol = SeqType.symbol.asClass
@@ -1290,6 +1298,7 @@ class Definitions {
12901298
.updated(AnyClass, ObjectClass)
12911299
.updated(AnyValClass, ObjectClass)
12921300
.updated(SingletonClass, ObjectClass)
1301+
.updated(NotNullClass, ObjectClass)
12931302
.updated(TupleClass, ObjectClass)
12941303
.updated(NonEmptyTupleClass, ProductClass)
12951304

@@ -1306,6 +1315,7 @@ class Definitions {
13061315
ByNameParamClass2x,
13071316
AnyValClass,
13081317
NullClass,
1318+
NotNullClass,
13091319
NothingClass,
13101320
SingletonClass)
13111321

compiler/src/dotty/tools/dotc/core/StdNames.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ object StdNames {
195195
final val ExprApi: N = "ExprApi"
196196
final val Mirror: N = "Mirror"
197197
final val Nothing: N = "Nothing"
198+
final val NotNull: N = "NotNull"
198199
final val Null: N = "Null"
199200
final val Object: N = "Object"
200201
final val Product: N = "Product"

0 commit comments

Comments
 (0)