Skip to content

Commit a993182

Browse files
committed
Run most phases in 4th group at group end
Only exception: elimByName, which produces errors if run at group end.
1 parent b47d610 commit a993182

12 files changed

+37
-1
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ class AugmentScala2Traits extends MiniPhaseTransform with IdentityDenotTransform
3535

3636
override def phaseName: String = "augmentScala2Traits"
3737

38+
override def treeTransformPhase(implicit ctx: Context, info: TransformerInfo) =
39+
groupEndPhase
40+
3841
override def rewiredTarget(referenced: Symbol, derived: Symbol)(implicit ctx: Context) = NoSymbol
3942

4043
override def transformTemplate(impl: Template)(implicit ctx: Context, info: TransformerInfo) = {

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ class ElimByName extends TransformByNameApply with InfoTransformer { thisTransfo
4242

4343
override def phaseName: String = "elimByName"
4444

45-
override def runsAfterGroupsOf = Set(classOf[Splitter])
45+
//override def treeTransformPhase(implicit ctx: Context, info: TransformerInfo) =
46+
// groupEndPhase
47+
48+
override def runsAfterGroupsOf = Set(classOf[Splitter])
4649
// I got errors running this phase in an earlier group, but I did not track them down.
4750

4851
/** Map `tree` to `tree.apply()` is `ftree` was of ExprType and becomes now a function */

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ class ElimOuterSelect extends MiniPhaseTransform { thisTransform =>
1717

1818
override def phaseName: String = "elimOuterSelect"
1919

20+
override def treeTransformPhase(implicit ctx: Context, info: TransformerInfo) =
21+
groupEndPhase
22+
2023
override def runsAfterGroupsOf = Set(classOf[ExplicitOuter])
2124
// ExplicitOuter needs to have run to completion before so that all classes
2225
// that need an outer accessor have one.

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ class FunctionXXLForwarders extends MiniPhaseTransform with IdentityDenotTransfo
2727

2828
override def phaseName: String = "functionXXLForwarders"
2929

30+
override def treeTransformPhase(implicit ctx: Context, info: TransformerInfo) =
31+
groupEndPhase
32+
3033
override def transformTemplate(impl: Template)(implicit ctx: Context, info: TransformerInfo): Template = {
3134

3235
def forwarderRhs(receiver: Tree, xsTree: Tree): Tree = {

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ class Getters extends MiniPhaseTransform with SymTransformer { thisTransform =>
5151

5252
override def phaseName = "getters"
5353

54+
override def treeTransformPhase(implicit ctx: Context, info: TransformerInfo) =
55+
groupEndPhase
56+
5457
override def transformSym(d: SymDenotation)(implicit ctx: Context): SymDenotation = {
5558
def noGetterNeeded =
5659
d.is(NoGetterNeeded) ||

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ class InterceptedMethods extends MiniPhaseTransform {
4343

4444
override def phaseName: String = "intercepted"
4545

46+
override def treeTransformPhase(implicit ctx: Context, info: TransformerInfo) =
47+
groupEndPhase
48+
4649
private[this] var primitiveGetClassMethods: Set[Symbol] = _
4750

4851
var Any_## : Symbol = _ // cached for performance reason

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ class PhantomArgLift extends MiniPhaseTransform {
2929

3030
override def phaseName: String = "phantomArgLift"
3131

32+
override def treeTransformPhase(implicit ctx: Context, info: TransformerInfo) =
33+
groupEndPhase
34+
3235
/** Check what the phase achieves, to be called at any point after it is finished. */
3336
override def checkPostCondition(tree: Tree)(implicit ctx: Context): Unit = tree match {
3437
case tree: Apply =>

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ class PrimitiveForwarders extends MiniPhaseTransform with IdentityDenotTransform
3535

3636
override def phaseName: String = "primitiveForwarders"
3737

38+
override def treeTransformPhase(implicit ctx: Context, info: TransformerInfo) =
39+
groupEndPhase
40+
3841
override def runsAfter = Set(classOf[ResolveSuper])
3942

4043
override def changesMembers = true // the phase adds primitive forwarders

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ class ResolveSuper extends MiniPhaseTransform with IdentityDenotTransformer { th
5050

5151
override def phaseName: String = "resolveSuper"
5252

53+
override def treeTransformPhase(implicit ctx: Context, info: TransformerInfo) =
54+
groupEndPhase
55+
5356
override def runsAfter = Set(classOf[ElimByName], // verified empirically, need to figure out what the reason is.
5457
classOf[AugmentScala2Traits])
5558

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ class SeqLiterals extends MiniPhaseTransform {
2424
override def phaseName = "seqLiterals"
2525
override def runsAfter: Set[Class[_ <: Phase]] = Set(classOf[PatternMatcher])
2626

27+
override def treeTransformPhase(implicit ctx: Context, info: TransformerInfo) =
28+
groupEndPhase
29+
2730
override def checkPostCondition(tree: Tree)(implicit ctx: Context): Unit = tree match {
2831
case tpd: SeqLiteral => assert(tpd.isInstanceOf[JavaSeqLiteral])
2932
case _ =>

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ class VCInlineMethods extends MiniPhaseTransform with IdentityDenotTransformer {
4444

4545
override def phaseName: String = "vcInlineMethods"
4646

47+
override def treeTransformPhase(implicit ctx: Context, info: TransformerInfo) =
48+
groupEndPhase
49+
4750
override def runsAfter: Set[Class[_ <: Phase]] =
4851
Set(classOf[ExtensionMethods], classOf[PatternMatcher], classOf[PhantomArgLift])
4952

compiler/src/dotty/tools/dotc/transform/localopt/Simplify.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ class Simplify extends MiniPhaseTransform with IdentityDenotTransformer {
3535
private[localopt] var SeqFactoryClass: Symbol = null
3636
private[localopt] var CommutativePrimitiveOperations: Set[Symbol] = null
3737

38+
override def treeTransformPhase(implicit ctx: Context, info: TransformerInfo) =
39+
groupEndPhase
40+
3841
/** The original intention is to run most optimizations both before and after erasure.
3942
* Erasure creates new inefficiencies as well as new optimization opportunities.
4043
*

0 commit comments

Comments
 (0)