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"

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import ast.Trees._
3434
* expr ==> () => expr if other expr is an argument to a call-by-name parameter
3535
*
3636
*/
37-
class Nullarify extends TreeTransform with InfoTransformer {
37+
class Nullarify extends MiniPhaseTransform with InfoTransformer {
3838
import ast.tpd._
3939

4040
override def name: String = "nullarify"

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import ast.Trees._
1616
/** This transform eliminates patterns. Right now it's a dummy.
1717
* Awaiting the real pattern matcher.
1818
*/
19-
class PatternMatcher extends TreeTransform {
19+
class PatternMatcher extends MiniPhaseTransform {
2020
import ast.tpd._
2121

2222
override def name: String = "patternMatcher"

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import Contexts._, Types._, Decorators._, Denotations._, Symbols._, SymDenotatio
1212
*
1313
* For now, only self references are treated.
1414
*/
15-
class Splitter extends TreeTransform {
15+
class Splitter extends MiniPhaseTransform {
1616
import ast.tpd._
1717

1818
override def name: String = "splitter"

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import dotty.tools.dotc.core.Symbols._
1010
import dotty.tools.dotc.core.Types._
1111
import dotty.tools.dotc.core._
1212
import dotty.tools.dotc.transform.TailRec._
13-
import dotty.tools.dotc.transform.TreeTransforms.{TransformerInfo, TreeTransform}
13+
import dotty.tools.dotc.transform.TreeTransforms.{TransformerInfo, MiniPhaseTransform}
1414

1515
/**
1616
* A Tail Rec Transformer
@@ -62,7 +62,7 @@ import dotty.tools.dotc.transform.TreeTransforms.{TransformerInfo, TreeTransform
6262
* self recursive functions, that's why it's renamed to tailrec
6363
* </p>
6464
*/
65-
class TailRec extends TreeTransform with DenotTransformer with FullParameterization {
65+
class TailRec extends MiniPhaseTransform with DenotTransformer with FullParameterization {
6666

6767
import dotty.tools.dotc.ast.tpd._
6868

0 commit comments

Comments
 (0)