@@ -259,10 +259,19 @@ class Definitions {
259
259
*/
260
260
@ tu lazy val AnyClass : ClassSymbol = completeClass(enterCompleteClassSymbol(ScalaPackageClass , tpnme.Any , Abstract , Nil ), ensureCtor = false )
261
261
def AnyType : TypeRef = AnyClass .typeRef
262
- @ tu lazy val AnyValClass : ClassSymbol = completeClass(enterCompleteClassSymbol(ScalaPackageClass , tpnme.AnyVal , Abstract , List (AnyClass .typeRef)))
262
+ @ tu lazy val MatchableClass : ClassSymbol = completeClass(enterCompleteClassSymbol(ScalaPackageClass , tpnme.Matchable , Trait , AnyType :: Nil ), ensureCtor = false )
263
+ def MatchableType : TypeRef = MatchableClass .typeRef
264
+ @ tu lazy val AnyValClass : ClassSymbol =
265
+ val res = completeClass(enterCompleteClassSymbol(ScalaPackageClass , tpnme.AnyVal , Abstract , List (AnyType , MatchableType )))
266
+ // Mark companion as absent, so that class does not get re-completed
267
+ val companion = ScalaPackageVal .info.decl(nme.AnyVal ).symbol
268
+ companion.moduleClass.markAbsent()
269
+ companion.markAbsent()
270
+ res
271
+
263
272
def AnyValType : TypeRef = AnyValClass .typeRef
264
273
265
- @ tu lazy val Any_== : TermSymbol = enterMethod(AnyClass , nme.EQ , methOfAny(BooleanType ), Final )
274
+ @ tu lazy val Any_== : TermSymbol = enterMethod(AnyClass , nme.EQ , methOfAny(BooleanType ), Final )
266
275
@ tu lazy val Any_!= : TermSymbol = enterMethod(AnyClass , nme.NE , methOfAny(BooleanType ), Final )
267
276
@ tu lazy val Any_equals : TermSymbol = enterMethod(AnyClass , nme.equals_, methOfAny(BooleanType ))
268
277
@ tu lazy val Any_hashCode : TermSymbol = enterMethod(AnyClass , nme.hashCode_, MethodType (Nil , IntType ))
@@ -288,7 +297,7 @@ class Definitions {
288
297
@ tu lazy val ObjectClass : ClassSymbol = {
289
298
val cls = requiredClass(" java.lang.Object" )
290
299
assert(! cls.isCompleted, " race for completing java.lang.Object" )
291
- cls.info = ClassInfo (cls.owner.thisType, cls, AnyClass .typeRef :: Nil , newScope)
300
+ cls.info = ClassInfo (cls.owner.thisType, cls, List ( AnyType , MatchableType ) , newScope)
292
301
cls.setFlag(NoInits | JavaDefined )
293
302
294
303
// The companion object doesn't really exist, so it needs to be marked as
@@ -444,7 +453,7 @@ class Definitions {
444
453
MethodType (List (ThrowableType ), NothingType ))
445
454
446
455
@ tu lazy val NothingClass : ClassSymbol = enterCompleteClassSymbol(
447
- ScalaPackageClass , tpnme.Nothing , AbstractFinal , List (AnyClass .typeRef ))
456
+ ScalaPackageClass , tpnme.Nothing , AbstractFinal , List (AnyType ))
448
457
def NothingType : TypeRef = NothingClass .typeRef
449
458
@ tu lazy val NullClass : ClassSymbol = {
450
459
val parent = if (ctx.explicitNulls) AnyType else ObjectType
@@ -520,7 +529,7 @@ class Definitions {
520
529
// but does not define it as an explicit class.
521
530
enterCompleteClassSymbol(
522
531
ScalaPackageClass , tpnme.Singleton , PureInterfaceCreationFlags | Final ,
523
- List (AnyClass .typeRef ), EmptyScope )
532
+ List (AnyType ), EmptyScope )
524
533
@ tu lazy val SingletonType : TypeRef = SingletonClass .typeRef
525
534
526
535
@ tu lazy val CollectionSeqType : TypeRef = requiredClassRef(" scala.collection.Seq" )
@@ -1144,6 +1153,8 @@ class Definitions {
1144
1153
1145
1154
// ----- Symbol sets ---------------------------------------------------
1146
1155
1156
+ @ tu lazy val topClasses : Set [Symbol ] = Set (AnyClass , MatchableClass , ObjectClass , AnyValClass )
1157
+
1147
1158
@ tu lazy val AbstractFunctionType : Array [TypeRef ] = mkArityArray(" scala.runtime.AbstractFunction" , MaxImplementedFunctionArity , 0 )
1148
1159
val AbstractFunctionClassPerRun : PerRun [Array [Symbol ]] = new PerRun (AbstractFunctionType .map(_.symbol.asClass))
1149
1160
def AbstractFunctionClass (n : Int )(using Context ): Symbol = AbstractFunctionClassPerRun ()(using ctx)(n)
@@ -1372,7 +1383,7 @@ class Definitions {
1372
1383
@ tu lazy val ShadowableImportNames : Set [TermName ] = Set (" Predef" .toTermName)
1373
1384
1374
1385
/** Class symbols for which no class exist at runtime */
1375
- @ tu lazy val NotRuntimeClasses : Set [Symbol ] = Set (AnyClass , AnyValClass , NullClass , NothingClass )
1386
+ @ tu lazy val NotRuntimeClasses : Set [Symbol ] = Set (AnyClass , MatchableClass , AnyValClass , NullClass , NothingClass )
1376
1387
1377
1388
@ tu lazy val SpecialClassTagClasses : Set [Symbol ] = Set (UnitClass , AnyClass , AnyValClass )
1378
1389
@@ -1672,6 +1683,7 @@ class Definitions {
1672
1683
@ tu lazy val specialErasure : SimpleIdentityMap [Symbol , ClassSymbol ] =
1673
1684
SimpleIdentityMap .empty[Symbol ]
1674
1685
.updated(AnyClass , ObjectClass )
1686
+ .updated(MatchableClass , ObjectClass )
1675
1687
.updated(AnyValClass , ObjectClass )
1676
1688
.updated(SingletonClass , ObjectClass )
1677
1689
.updated(TupleClass , ProductClass )
@@ -1683,6 +1695,7 @@ class Definitions {
1683
1695
@ tu lazy val syntheticScalaClasses : List [TypeSymbol ] = {
1684
1696
val synth = List (
1685
1697
AnyClass ,
1698
+ MatchableClass ,
1686
1699
AnyRefAlias ,
1687
1700
AnyKindClass ,
1688
1701
andType,
0 commit comments