Skip to content

Commit 45917fc

Browse files
committed
Introduce perRun scheme in Definitions
Use an IFT instead of duplicating Type and Symbol definitions everywhere.
1 parent e577f8d commit 45917fc

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

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

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ object Definitions {
2828
* else without affecting the set of programs that can be compiled.
2929
*/
3030
val MaxImplementedFunctionArity: Int = MaxTupleArity
31+
32+
type SymbolPerRun = given Context => Symbol
33+
34+
def perRun(tp: NamedType): given Context => Symbol =
35+
tp.symbol
36+
37+
def perRunClass(tp: TypeRef): given Context => ClassSymbol = tp.symbol.asClass
3138
}
3239

3340
/** A class defining symbols and types of standard definitions
@@ -444,19 +451,14 @@ class Definitions {
444451
@threadUnsafe lazy val SeqType: TypeRef =
445452
if (isNewCollections) ctx.requiredClassRef("scala.collection.immutable.Seq")
446453
else ctx.requiredClassRef("scala.collection.Seq")
447-
def SeqClass(implicit ctx: Context): ClassSymbol = SeqType.symbol.asClass
448-
@threadUnsafe lazy val Seq_applyR: TermRef = SeqClass.requiredMethodRef(nme.apply)
449-
def Seq_apply(implicit ctx: Context): Symbol = Seq_applyR.symbol
450-
@threadUnsafe lazy val Seq_headR: TermRef = SeqClass.requiredMethodRef(nme.head)
451-
def Seq_head(implicit ctx: Context): Symbol = Seq_headR.symbol
452-
@threadUnsafe lazy val Seq_dropR: TermRef = SeqClass.requiredMethodRef(nme.drop)
453-
def Seq_drop(implicit ctx: Context): Symbol = Seq_dropR.symbol
454-
@threadUnsafe lazy val Seq_lengthCompareR: TermRef = SeqClass.requiredMethodRef(nme.lengthCompare, List(IntType))
455-
def Seq_lengthCompare(implicit ctx: Context): Symbol = Seq_lengthCompareR.symbol
456-
@threadUnsafe lazy val Seq_lengthR: TermRef = SeqClass.requiredMethodRef(nme.length)
457-
def Seq_length(implicit ctx: Context): Symbol = Seq_lengthR.symbol
458-
@threadUnsafe lazy val Seq_toSeqR: TermRef = SeqClass.requiredMethodRef(nme.toSeq)
459-
def Seq_toSeq(implicit ctx: Context): Symbol = Seq_toSeqR.symbol
454+
def SeqClass: ClassSymbol = perRunClass(SeqType)
455+
456+
@threadUnsafe lazy val Seq_apply: SymbolPerRun = perRun(SeqClass.requiredMethodRef(nme.apply))
457+
@threadUnsafe lazy val Seq_head: SymbolPerRun = perRun(SeqClass.requiredMethodRef(nme.head))
458+
@threadUnsafe lazy val Seq_drop: SymbolPerRun = perRun(SeqClass.requiredMethodRef(nme.drop))
459+
@threadUnsafe lazy val Seq_lengthCompare: SymbolPerRun = perRun(SeqClass.requiredMethodRef(nme.lengthCompare, List(IntType)))
460+
@threadUnsafe lazy val Seq_length: SymbolPerRun = perRun(SeqClass.requiredMethodRef(nme.length))
461+
@threadUnsafe lazy val Seq_toSeq: SymbolPerRun = perRun(SeqClass.requiredMethodRef(nme.toSeq))
460462

461463
@threadUnsafe lazy val ArrayType: TypeRef = ctx.requiredClassRef("scala.Array")
462464
def ArrayClass(implicit ctx: Context): ClassSymbol = ArrayType.symbol.asClass

0 commit comments

Comments
 (0)