@@ -259,10 +259,19 @@ class Definitions {
259259 */
260260 @ tu lazy val AnyClass : ClassSymbol = completeClass(enterCompleteClassSymbol(ScalaPackageClass , tpnme.Any , Abstract , Nil ), ensureCtor = false )
261261 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+
263272 def AnyValType : TypeRef = AnyValClass .typeRef
264273
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 )
266275 @ tu lazy val Any_!= : TermSymbol = enterMethod(AnyClass , nme.NE , methOfAny(BooleanType ), Final )
267276 @ tu lazy val Any_equals : TermSymbol = enterMethod(AnyClass , nme.equals_, methOfAny(BooleanType ))
268277 @ tu lazy val Any_hashCode : TermSymbol = enterMethod(AnyClass , nme.hashCode_, MethodType (Nil , IntType ))
@@ -288,7 +297,7 @@ class Definitions {
288297 @ tu lazy val ObjectClass : ClassSymbol = {
289298 val cls = requiredClass(" java.lang.Object" )
290299 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)
292301 cls.setFlag(NoInits | JavaDefined )
293302
294303 // The companion object doesn't really exist, so it needs to be marked as
@@ -444,7 +453,7 @@ class Definitions {
444453 MethodType (List (ThrowableType ), NothingType ))
445454
446455 @ tu lazy val NothingClass : ClassSymbol = enterCompleteClassSymbol(
447- ScalaPackageClass , tpnme.Nothing , AbstractFinal , List (AnyClass .typeRef ))
456+ ScalaPackageClass , tpnme.Nothing , AbstractFinal , List (AnyType ))
448457 def NothingType : TypeRef = NothingClass .typeRef
449458 @ tu lazy val NullClass : ClassSymbol = {
450459 val parent = if (ctx.explicitNulls) AnyType else ObjectType
@@ -520,7 +529,7 @@ class Definitions {
520529 // but does not define it as an explicit class.
521530 enterCompleteClassSymbol(
522531 ScalaPackageClass , tpnme.Singleton , PureInterfaceCreationFlags | Final ,
523- List (AnyClass .typeRef ), EmptyScope )
532+ List (AnyType ), EmptyScope )
524533 @ tu lazy val SingletonType : TypeRef = SingletonClass .typeRef
525534
526535 @ tu lazy val CollectionSeqType : TypeRef = requiredClassRef(" scala.collection.Seq" )
@@ -1144,6 +1153,8 @@ class Definitions {
11441153
11451154 // ----- Symbol sets ---------------------------------------------------
11461155
1156+ @ tu lazy val topClasses : Set [Symbol ] = Set (AnyClass , MatchableClass , ObjectClass , AnyValClass )
1157+
11471158 @ tu lazy val AbstractFunctionType : Array [TypeRef ] = mkArityArray(" scala.runtime.AbstractFunction" , MaxImplementedFunctionArity , 0 )
11481159 val AbstractFunctionClassPerRun : PerRun [Array [Symbol ]] = new PerRun (AbstractFunctionType .map(_.symbol.asClass))
11491160 def AbstractFunctionClass (n : Int )(using Context ): Symbol = AbstractFunctionClassPerRun ()(using ctx)(n)
@@ -1372,7 +1383,7 @@ class Definitions {
13721383 @ tu lazy val ShadowableImportNames : Set [TermName ] = Set (" Predef" .toTermName)
13731384
13741385 /** 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 )
13761387
13771388 @ tu lazy val SpecialClassTagClasses : Set [Symbol ] = Set (UnitClass , AnyClass , AnyValClass )
13781389
@@ -1672,6 +1683,7 @@ class Definitions {
16721683 @ tu lazy val specialErasure : SimpleIdentityMap [Symbol , ClassSymbol ] =
16731684 SimpleIdentityMap .empty[Symbol ]
16741685 .updated(AnyClass , ObjectClass )
1686+ .updated(MatchableClass , ObjectClass )
16751687 .updated(AnyValClass , ObjectClass )
16761688 .updated(SingletonClass , ObjectClass )
16771689 .updated(TupleClass , ProductClass )
@@ -1683,6 +1695,7 @@ class Definitions {
16831695 @ tu lazy val syntheticScalaClasses : List [TypeSymbol ] = {
16841696 val synth = List (
16851697 AnyClass ,
1698+ MatchableClass ,
16861699 AnyRefAlias ,
16871700 AnyKindClass ,
16881701 andType,
0 commit comments