@@ -266,6 +266,7 @@ class Definitions {
266
266
@ tu lazy val CompiletimeOpsDoubleModuleClass : Symbol = requiredModule(" scala.compiletime.ops.double" ).moduleClass
267
267
@ tu lazy val CompiletimeOpsStringModuleClass : Symbol = requiredModule(" scala.compiletime.ops.string" ).moduleClass
268
268
@ tu lazy val CompiletimeOpsBooleanModuleClass : Symbol = requiredModule(" scala.compiletime.ops.boolean" ).moduleClass
269
+ @ tu lazy val ErasedClass : ClassSymbol = requiredClass(" scala.compiletime.Erased" )
269
270
270
271
/** Note: We cannot have same named methods defined in Object and Any (and AnyVal, for that matter)
271
272
* because after erasure the Any and AnyVal references get remapped to the Object methods
@@ -543,7 +544,7 @@ class Definitions {
543
544
// needed as a synthetic class because Scala 2.x refers to it in classfiles
544
545
// but does not define it as an explicit class.
545
546
val cls = enterCompleteClassSymbol(
546
- ScalaPackageClass , tpnme.Singleton , PureInterfaceCreationFlags | Final | Erased ,
547
+ ScalaPackageClass , tpnme.Singleton , PureInterfaceCreationFlags | Final ,
547
548
List (AnyType ))
548
549
enterTypeField(cls, tpnme.Self , Deferred , cls.info.decls.openForMutations)
549
550
cls
@@ -1004,16 +1005,18 @@ class Definitions {
1004
1005
@ tu lazy val Caps_Capability : ClassSymbol = requiredClass(" scala.caps.Capability" )
1005
1006
@ tu lazy val Caps_CapSet : ClassSymbol = requiredClass(" scala.caps.CapSet" )
1006
1007
@ tu lazy val CapsInternalModule : Symbol = requiredModule(" scala.caps.internal" )
1008
+ @ tu lazy val Caps_erasedValue : Symbol = CapsInternalModule .requiredMethod(" erasedValue" )
1007
1009
@ tu lazy val CapsUnsafeModule : Symbol = requiredModule(" scala.caps.unsafe" )
1008
1010
@ tu lazy val Caps_unsafeAssumePure : Symbol = CapsUnsafeModule .requiredMethod(" unsafeAssumePure" )
1009
1011
@ tu lazy val Caps_unsafeAssumeSeparate : Symbol = CapsUnsafeModule .requiredMethod(" unsafeAssumeSeparate" )
1012
+ @ tu lazy val Caps_unsafeErasedValue : Symbol = CapsUnsafeModule .requiredMethod(" unsafeErasedValue" )
1010
1013
@ tu lazy val Caps_ContainsTrait : TypeSymbol = CapsModule .requiredType(" Contains" )
1011
1014
@ tu lazy val Caps_ContainsModule : Symbol = requiredModule(" scala.caps.Contains" )
1012
1015
@ tu lazy val Caps_containsImpl : TermSymbol = Caps_ContainsModule .requiredMethod(" containsImpl" )
1013
1016
@ tu lazy val Caps_Mutable : ClassSymbol = requiredClass(" scala.caps.Mutable" )
1014
1017
@ tu lazy val Caps_SharedCapability : ClassSymbol = requiredClass(" scala.caps.SharedCapability" )
1015
1018
1016
- @ tu lazy val PureClass : Symbol = requiredClass(" scala.Pure" )
1019
+ @ tu lazy val PureClass : ClassSymbol = requiredClass(" scala.Pure" )
1017
1020
1018
1021
// Annotation base classes
1019
1022
@ tu lazy val AnnotationClass : ClassSymbol = requiredClass(" scala.annotation.Annotation" )
@@ -1563,6 +1566,11 @@ class Definitions {
1563
1566
@ tu lazy val pureSimpleClasses =
1564
1567
Set (StringClass , NothingClass , NullClass ) ++ ScalaValueClasses ()
1565
1568
1569
+ @ tu lazy val capsErasedValueMethods =
1570
+ Set (Caps_erasedValue , Caps_unsafeErasedValue )
1571
+ @ tu lazy val erasedValueMethods =
1572
+ capsErasedValueMethods + Compiletime_erasedValue
1573
+
1566
1574
@ tu lazy val AbstractFunctionType : Array [TypeRef ] = mkArityArray(" scala.runtime.AbstractFunction" , MaxImplementedFunctionArity , 0 ).asInstanceOf [Array [TypeRef ]]
1567
1575
val AbstractFunctionClassPerRun : PerRun [Array [Symbol ]] = new PerRun (AbstractFunctionType .map(_.symbol.asClass))
1568
1576
def AbstractFunctionClass (n : Int )(using Context ): Symbol = AbstractFunctionClassPerRun ()(using ctx)(n)
@@ -2006,7 +2014,9 @@ class Definitions {
2006
2014
2007
2015
/** A allowlist of Scala-2 classes that are known to be pure */
2008
2016
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)
2010
2020
2011
2021
/** If `cls` is Tuple1..Tuple22, add the corresponding *: type as last parent to `parents` */
2012
2022
def adjustForTuple (cls : ClassSymbol , tparams : List [TypeSymbol ], parents : List [Type ]): List [Type ] = {
0 commit comments