@@ -266,6 +266,7 @@ class Definitions {
266266 @ tu lazy val CompiletimeOpsDoubleModuleClass : Symbol = requiredModule(" scala.compiletime.ops.double" ).moduleClass
267267 @ tu lazy val CompiletimeOpsStringModuleClass : Symbol = requiredModule(" scala.compiletime.ops.string" ).moduleClass
268268 @ tu lazy val CompiletimeOpsBooleanModuleClass : Symbol = requiredModule(" scala.compiletime.ops.boolean" ).moduleClass
269+ @ tu lazy val ErasedClass : ClassSymbol = requiredClass(" scala.compiletime.Erased" )
269270
270271 /** Note: We cannot have same named methods defined in Object and Any (and AnyVal, for that matter)
271272 * because after erasure the Any and AnyVal references get remapped to the Object methods
@@ -543,7 +544,7 @@ class Definitions {
543544 // needed as a synthetic class because Scala 2.x refers to it in classfiles
544545 // but does not define it as an explicit class.
545546 val cls = enterCompleteClassSymbol(
546- ScalaPackageClass , tpnme.Singleton , PureInterfaceCreationFlags | Final | Erased ,
547+ ScalaPackageClass , tpnme.Singleton , PureInterfaceCreationFlags | Final ,
547548 List (AnyType ))
548549 enterTypeField(cls, tpnme.Self , Deferred , cls.info.decls.openForMutations)
549550 cls
@@ -1004,16 +1005,18 @@ class Definitions {
10041005 @ tu lazy val Caps_Capability : ClassSymbol = requiredClass(" scala.caps.Capability" )
10051006 @ tu lazy val Caps_CapSet : ClassSymbol = requiredClass(" scala.caps.CapSet" )
10061007 @ tu lazy val CapsInternalModule : Symbol = requiredModule(" scala.caps.internal" )
1008+ @ tu lazy val Caps_erasedValue : Symbol = CapsInternalModule .requiredMethod(" erasedValue" )
10071009 @ tu lazy val CapsUnsafeModule : Symbol = requiredModule(" scala.caps.unsafe" )
10081010 @ tu lazy val Caps_unsafeAssumePure : Symbol = CapsUnsafeModule .requiredMethod(" unsafeAssumePure" )
10091011 @ tu lazy val Caps_unsafeAssumeSeparate : Symbol = CapsUnsafeModule .requiredMethod(" unsafeAssumeSeparate" )
1012+ @ tu lazy val Caps_unsafeErasedValue : Symbol = CapsUnsafeModule .requiredMethod(" unsafeErasedValue" )
10101013 @ tu lazy val Caps_ContainsTrait : TypeSymbol = CapsModule .requiredType(" Contains" )
10111014 @ tu lazy val Caps_ContainsModule : Symbol = requiredModule(" scala.caps.Contains" )
10121015 @ tu lazy val Caps_containsImpl : TermSymbol = Caps_ContainsModule .requiredMethod(" containsImpl" )
10131016 @ tu lazy val Caps_Mutable : ClassSymbol = requiredClass(" scala.caps.Mutable" )
10141017 @ tu lazy val Caps_SharedCapability : ClassSymbol = requiredClass(" scala.caps.SharedCapability" )
10151018
1016- @ tu lazy val PureClass : Symbol = requiredClass(" scala.Pure" )
1019+ @ tu lazy val PureClass : ClassSymbol = requiredClass(" scala.Pure" )
10171020
10181021 // Annotation base classes
10191022 @ tu lazy val AnnotationClass : ClassSymbol = requiredClass(" scala.annotation.Annotation" )
@@ -1563,6 +1566,11 @@ class Definitions {
15631566 @ tu lazy val pureSimpleClasses =
15641567 Set (StringClass , NothingClass , NullClass ) ++ ScalaValueClasses ()
15651568
1569+ @ tu lazy val capsErasedValueMethods =
1570+ Set (Caps_erasedValue , Caps_unsafeErasedValue )
1571+ @ tu lazy val erasedValueMethods =
1572+ capsErasedValueMethods + Compiletime_erasedValue
1573+
15661574 @ tu lazy val AbstractFunctionType : Array [TypeRef ] = mkArityArray(" scala.runtime.AbstractFunction" , MaxImplementedFunctionArity , 0 ).asInstanceOf [Array [TypeRef ]]
15671575 val AbstractFunctionClassPerRun : PerRun [Array [Symbol ]] = new PerRun (AbstractFunctionType .map(_.symbol.asClass))
15681576 def AbstractFunctionClass (n : Int )(using Context ): Symbol = AbstractFunctionClassPerRun ()(using ctx)(n)
@@ -2006,7 +2014,9 @@ class Definitions {
20062014
20072015 /** A allowlist of Scala-2 classes that are known to be pure */
20082016 def isAssuredNoInits (sym : Symbol ): Boolean =
2009- (sym `eq` SomeClass ) || isTupleClass(sym)
2017+ (sym `eq` SomeClass )
2018+ || isTupleClass(sym)
2019+ || sym.is(Module ) && isAssuredNoInits(sym.companionClass)
20102020
20112021 /** If `cls` is Tuple1..Tuple22, add the corresponding *: type as last parent to `parents` */
20122022 def adjustForTuple (cls : ClassSymbol , tparams : List [TypeSymbol ], parents : List [Type ]): List [Type ] = {
0 commit comments