Skip to content

Commit 4a48e15

Browse files
committed
Make sure synthetic apply methods are generated in deterministic order
Fixes scala#17330
1 parent 9667958 commit 4a48e15

File tree

2 files changed

+19
-19
lines changed

2 files changed

+19
-19
lines changed

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

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1750,26 +1750,26 @@ class Definitions {
17501750
@tu lazy val Tuple2SpecializedParamClasses: PerRun[Set[Symbol]] = new PerRun(Tuple2SpecializedParamTypes.map(_.symbol))
17511751

17521752
// Specialized type parameters defined for scala.Function{0,1,2}.
1753-
@tu lazy val Function1SpecializedParamTypes: collection.Set[TypeRef] =
1754-
Set(IntType, LongType, FloatType, DoubleType)
1755-
@tu lazy val Function2SpecializedParamTypes: collection.Set[TypeRef] =
1756-
Set(IntType, LongType, DoubleType)
1757-
@tu lazy val Function0SpecializedReturnTypes: collection.Set[TypeRef] =
1758-
ScalaNumericValueTypeList.toSet + UnitType + BooleanType
1759-
@tu lazy val Function1SpecializedReturnTypes: collection.Set[TypeRef] =
1760-
Set(UnitType, BooleanType, IntType, FloatType, LongType, DoubleType)
1761-
@tu lazy val Function2SpecializedReturnTypes: collection.Set[TypeRef] =
1753+
@tu lazy val Function1SpecializedParamTypes: List[TypeRef] =
1754+
List(IntType, LongType, FloatType, DoubleType)
1755+
@tu lazy val Function2SpecializedParamTypes: List[TypeRef] =
1756+
List(IntType, LongType, DoubleType)
1757+
@tu lazy val Function0SpecializedReturnTypes: List[TypeRef] =
1758+
ScalaNumericValueTypeList :+ UnitType :+ BooleanType
1759+
@tu lazy val Function1SpecializedReturnTypes: List[TypeRef] =
1760+
List(UnitType, BooleanType, IntType, FloatType, LongType, DoubleType)
1761+
@tu lazy val Function2SpecializedReturnTypes: List[TypeRef] =
17621762
Function1SpecializedReturnTypes
17631763

1764-
@tu lazy val Function1SpecializedParamClasses: PerRun[collection.Set[Symbol]] =
1764+
@tu lazy val Function1SpecializedParamClasses: PerRun[List[Symbol]] =
17651765
new PerRun(Function1SpecializedParamTypes.map(_.symbol))
1766-
@tu lazy val Function2SpecializedParamClasses: PerRun[collection.Set[Symbol]] =
1766+
@tu lazy val Function2SpecializedParamClasses: PerRun[List[Symbol]] =
17671767
new PerRun(Function2SpecializedParamTypes.map(_.symbol))
1768-
@tu lazy val Function0SpecializedReturnClasses: PerRun[collection.Set[Symbol]] =
1768+
@tu lazy val Function0SpecializedReturnClasses: PerRun[List[Symbol]] =
17691769
new PerRun(Function0SpecializedReturnTypes.map(_.symbol))
1770-
@tu lazy val Function1SpecializedReturnClasses: PerRun[collection.Set[Symbol]] =
1770+
@tu lazy val Function1SpecializedReturnClasses: PerRun[List[Symbol]] =
17711771
new PerRun(Function1SpecializedReturnTypes.map(_.symbol))
1772-
@tu lazy val Function2SpecializedReturnClasses: PerRun[collection.Set[Symbol]] =
1772+
@tu lazy val Function2SpecializedReturnClasses: PerRun[List[Symbol]] =
17731773
new PerRun(Function2SpecializedReturnTypes.map(_.symbol))
17741774

17751775
def isSpecializableTuple(base: Symbol, args: List[Type])(using Context): Boolean =
@@ -1802,18 +1802,18 @@ class Definitions {
18021802
})
18031803
&& !ctx.settings.Yscala2Stdlib.value // We do not add the specilized FunctionN methods/classes when compiling the stdlib
18041804

1805-
@tu lazy val Function0SpecializedApplyNames: collection.Set[TermName] =
1805+
@tu lazy val Function0SpecializedApplyNames: List[TermName] =
18061806
for r <- Function0SpecializedReturnTypes
18071807
yield nme.apply.specializedFunction(r, Nil).asTermName
18081808

1809-
@tu lazy val Function1SpecializedApplyNames: collection.Set[TermName] =
1809+
@tu lazy val Function1SpecializedApplyNames: List[TermName] =
18101810
for
18111811
r <- Function1SpecializedReturnTypes
18121812
t1 <- Function1SpecializedParamTypes
18131813
yield
18141814
nme.apply.specializedFunction(r, List(t1)).asTermName
18151815

1816-
@tu lazy val Function2SpecializedApplyNames: collection.Set[TermName] =
1816+
@tu lazy val Function2SpecializedApplyNames: List[TermName] =
18171817
for
18181818
r <- Function2SpecializedReturnTypes
18191819
t1 <- Function2SpecializedParamTypes
@@ -1822,7 +1822,7 @@ class Definitions {
18221822
nme.apply.specializedFunction(r, List(t1, t2)).asTermName
18231823

18241824
@tu lazy val FunctionSpecializedApplyNames: collection.Set[Name] =
1825-
Function0SpecializedApplyNames ++ Function1SpecializedApplyNames ++ Function2SpecializedApplyNames
1825+
(Function0SpecializedApplyNames ++ Function1SpecializedApplyNames ++ Function2SpecializedApplyNames).toSet
18261826

18271827
def functionArity(tp: Type)(using Context): Int = tp.functionArgInfos.length - 1
18281828

compiler/src/dotty/tools/dotc/transform/SpecializeApplyMethods.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ class SpecializeApplyMethods extends MiniPhase with InfoTransformer {
9090
override def transformTemplate(tree: Template)(using Context) = {
9191
val cls = tree.symbol.owner.asClass
9292

93-
def synthesizeApply(names: collection.Set[TermName]): Tree = {
93+
def synthesizeApply(names: List[TermName]): Tree = {
9494
val applyBuf = new mutable.ListBuffer[DefDef]
9595
names.foreach { name =>
9696
val applySym = cls.info.decls.lookup(name)

0 commit comments

Comments
 (0)