Skip to content

Commit 57c6c85

Browse files
committed
Disentangle phases from treetransforms
TreeTransforms are no longer phases. This allows to generate new transforms in prepare... methods without running into the problem that thee new transforms are undefined as phases. It also makes for a cleaner separation of concerns.
1 parent 9024f25 commit 57c6c85

19 files changed

+167
-148
lines changed

src/dotty/tools/dotc/ElimLocals.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import DenotTransformers.SymTransformer
66
import Phases.Phase
77
import Contexts.Context
88
import SymDenotations.SymDenotation
9-
import TreeTransforms.TreeTransform
9+
import TreeTransforms.MiniPhaseTransform
1010
import Flags.Local
1111

1212
/** Widens all private[this] and protected[this] qualifiers to just private/protected */
13-
class ElimLocals extends TreeTransform with SymTransformer { thisTransformer =>
13+
class ElimLocals extends MiniPhaseTransform with SymTransformer { thisTransformer =>
1414
override def name = "elimlocals"
1515

1616
def transformSym(ref: SymDenotation)(implicit ctx: Context) =

src/dotty/tools/dotc/core/Decorators.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ object Decorators {
130130
*/
131131
implicit class PhaseListDecorator(val names: List[String]) extends AnyVal {
132132
def containsPhase(phase: Phase): Boolean = phase match {
133-
case phase: TreeTransformer => phase.transformations.exists(containsPhase)
133+
case phase: TreeTransformer => phase.transformations.exists(trans => containsPhase(trans.phase))
134134
case _ => names exists (n => n == "all" || phase.name.startsWith(n))
135135
}
136136
}

src/dotty/tools/dotc/core/Phases.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import DenotTransformers._
88
import Denotations._
99
import config.Printers._
1010
import scala.collection.mutable.{ListBuffer, ArrayBuffer}
11-
import dotty.tools.dotc.transform.TreeTransforms.{TreeTransformer, TreeTransform}
11+
import dotty.tools.dotc.transform.TreeTransforms.{TreeTransformer, MiniPhase, TreeTransform}
1212
import dotty.tools.dotc.transform.TreeTransforms
1313
import Periods._
1414

@@ -80,7 +80,7 @@ object Phases {
8080
val phasesInBlock: Set[String] = phasess(i).map(_.name).toSet
8181
for(phase<-phasess(i)) {
8282
phase match {
83-
case p: TreeTransform =>
83+
case p: MiniPhase =>
8484

8585
val unmetRequirements = p.runsAfterGroupsOf &~ prevPhases
8686
assert(unmetRequirements.isEmpty,
@@ -90,9 +90,9 @@ object Phases {
9090
assert(false, s"Only tree transforms can be squashed, ${phase.name} can not be squashed")
9191
}
9292
}
93-
val transforms = phasess(i).asInstanceOf[List[TreeTransform]]
93+
val transforms = phasess(i).asInstanceOf[List[MiniPhase]].map(_.treeTransform)
9494
val block = new TreeTransformer {
95-
override def name: String = transformations.map(_.name).mkString("TreeTransform:{", ", ", "}")
95+
override def name: String = transformations.map(_.phase.name).mkString("TreeTransform:{", ", ", "}")
9696
override def transformations: Array[TreeTransform] = transforms.toArray
9797
}
9898
squashedPhases += block

src/dotty/tools/dotc/transform/CollectEntryPoints.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package dotty.tools.dotc.transform
22

3-
import dotty.tools.dotc.transform.TreeTransforms.{TransformerInfo, TreeTransform, TreeTransformer}
3+
import dotty.tools.dotc.transform.TreeTransforms.{TransformerInfo, TreeTransform, TreeTransformer, MiniPhaseTransform}
44
import dotty.tools.dotc.ast.tpd
55
import dotty.tools.dotc.core.Contexts.Context
66
import scala.collection.mutable.ListBuffer
@@ -23,7 +23,7 @@ import StdNames._
2323
import dotty.tools.dotc.util.Positions.Position
2424
import dotty.tools.dotc.config.JavaPlatform
2525

26-
class CollectEntryPoints extends TreeTransform {
26+
class CollectEntryPoints extends MiniPhaseTransform {
2727

2828
/** perform context-dependant initialization */
2929
override def init(implicit ctx: Context, info: TransformerInfo): Unit = {

src/dotty/tools/dotc/transform/Constructors.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import dotty.tools.dotc.core.StdNames._
99
* Right now it's a dummy.
1010
* Awaiting for real implemetation
1111
*/
12-
class Constructors extends TreeTransform {
12+
class Constructors extends MiniPhaseTransform {
1313

1414
override def name: String = "constructors"
1515
override def transformDefDef(tree: DefDef)(implicit ctx: Context, info: TransformerInfo): Tree = {

src/dotty/tools/dotc/transform/ElimRepeated.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package transform
44
import core._
55
import Names._
66
import Types._
7-
import TreeTransforms.{TransformerInfo, TreeTransform, TreeTransformer}
7+
import TreeTransforms.{TransformerInfo, MiniPhaseTransform, TreeTransformer}
88
import ast.Trees.flatten
99
import Flags._
1010
import Contexts.Context
@@ -20,7 +20,7 @@ import TypeUtils._
2020
/** A transformer that removes repeated parameters (T*) from all types, replacing
2121
* them with Seq types.
2222
*/
23-
class ElimRepeated extends TreeTransform with InfoTransformer { thisTransformer =>
23+
class ElimRepeated extends MiniPhaseTransform with InfoTransformer { thisTransformer =>
2424
import ast.tpd._
2525

2626
override def name = "elimrepeated"

src/dotty/tools/dotc/transform/FirstTransform.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package transform
33

44
import core._
55
import Names._
6-
import TreeTransforms.{TransformerInfo, TreeTransform, TreeTransformer}
6+
import TreeTransforms.{TransformerInfo, MiniPhaseTransform, TreeTransformer}
77
import ast.Trees._
88
import Flags._
99
import Types._
@@ -23,7 +23,7 @@ import NameOps._
2323
* - checks the bounds of AppliedTypeTrees
2424
* - stubs out native methods
2525
*/
26-
class FirstTransform extends TreeTransform with IdentityDenotTransformer { thisTransformer =>
26+
class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer { thisTransformer =>
2727
import ast.tpd._
2828

2929
override def name = "companions"

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import StdNames._
4040
* using the most precise overload available
4141
* - `x.getClass` for getClass in primitives becomes `x.getClass` with getClass in class Object.
4242
*/
43-
class InterceptedMethods extends TreeTransform {
43+
class InterceptedMethods extends MiniPhaseTransform {
4444

4545
import tpd._
4646

src/dotty/tools/dotc/transform/LazyVals.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import Symbols._
88
import Decorators._
99
import NameOps._
1010
import StdNames.nme
11-
import dotty.tools.dotc.transform.TreeTransforms.{TransformerInfo, TreeTransformer, TreeTransform}
11+
import dotty.tools.dotc.transform.TreeTransforms.{TransformerInfo, TreeTransformer, MiniPhaseTransform}
1212
import dotty.tools.dotc.ast.Trees._
1313
import dotty.tools.dotc.ast.{untpd, tpd}
1414
import dotty.tools.dotc.core.Constants.Constant
@@ -43,7 +43,7 @@ class LazyValTranformContext {
4343
}
4444
}
4545

46-
class LazyValsTransform extends TreeTransform with DenotTransformer {
46+
class LazyValsTransform extends MiniPhaseTransform with DenotTransformer {
4747

4848
override def name: String = "LazyVals"
4949

src/dotty/tools/dotc/transform/Literalize.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import ast.Trees._
1515
* The constant types are eliminated by erasure, so we need to keep
1616
* the info about constantness in the trees.
1717
*/
18-
class Literalize extends TreeTransform {
18+
class Literalize extends MiniPhaseTransform {
1919
import ast.tpd._
2020

2121
override def name: String = "literalize"

0 commit comments

Comments
 (0)