Skip to content

Commit d786b4c

Browse files
committed
Whitelist some Scala-2 classes as pure
Currently, this is not exploited but some rewrites might become more effective that way in the future.
1 parent fadd4b7 commit d786b4c

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,6 +1137,10 @@ class Definitions {
11371137
def isErasedFunctionType(tp: Type)(implicit ctx: Context) =
11381138
isFunctionType(tp) && tp.dealias.typeSymbol.name.isErasedFunction
11391139

1140+
/** A whitelist of Scala-2 classes that are known to be pure */
1141+
def isAssuredNoInits(sym: Symbol) =
1142+
(sym `eq` SomeClass) || isTupleClass(sym)
1143+
11401144
// ----- primitive value class machinery ------------------------------------------
11411145

11421146
/** This class would also be obviated by the implicit function type design */

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -596,7 +596,8 @@ object SymDenotations {
596596
* initaliazion code?
597597
*/
598598
def isNoInitsClass(implicit ctx: Context) =
599-
isClass && asClass.baseClasses.forall(_.is(NoInits))
599+
isClass &&
600+
(asClass.baseClasses.forall(_.is(NoInits)) || defn.isAssuredNoInits(symbol))
600601

601602
/** Is this a "real" method? A real method is a method which is:
602603
* - not an accessor

0 commit comments

Comments
 (0)