Skip to content

Commit 02252a8

Browse files
authored
Merge pull request #3366 from dotty-staging/change-transform-phases-4
Rework tree transforms
2 parents 07e4968 + 5a41b3e commit 02252a8

File tree

88 files changed

+1763
-942
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+1763
-942
lines changed

compiler/src/dotty/tools/backend/jvm/CollectEntryPoints.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package dotty.tools.backend.jvm
33
import dotty.tools.dotc.ast.tpd
44
import dotty.tools.dotc.core.Contexts.Context
55
import dotty.tools.dotc.core.Types
6-
import dotty.tools.dotc.transform.TreeTransforms.{TransformerInfo, TreeTransform, MiniPhase, MiniPhaseTransform}
6+
import dotty.tools.dotc.transform.MegaPhase._
77
import dotty.tools.dotc.ast.tpd
88
import dotty.tools.dotc
99
import dotty.tools.dotc.backend.jvm.DottyPrimitives
@@ -35,10 +35,10 @@ import StdNames.nme
3535
/**
3636
* Created by dark on 26/11/14.
3737
*/
38-
class CollectEntryPoints extends MiniPhaseTransform {
38+
class CollectEntryPoints extends MiniPhase {
3939
def phaseName: String = "Collect entry points"
4040

41-
override def transformDefDef(tree: tpd.DefDef)(implicit ctx: Context, info: TransformerInfo): tpd.Tree = {
41+
override def transformDefDef(tree: tpd.DefDef)(implicit ctx: Context): tpd.Tree = {
4242
if ((tree.symbol ne NoSymbol) && CollectEntryPoints.isJavaEntryPoint(tree.symbol)) {
4343
ctx.genBCodePhase.asInstanceOf[GenBCode].registerEntryPoint(tree.symbol)
4444
}

compiler/src/dotty/tools/backend/jvm/CollectSuperCalls.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import dotty.tools.dotc.ast.Trees._
55
import dotty.tools.dotc.core.Contexts.Context
66
import dotty.tools.dotc.core.Symbols._
77
import dotty.tools.dotc.core.Flags.Trait
8-
import dotty.tools.dotc.transform.TreeTransforms.{MiniPhaseTransform, TransformerInfo}
8+
import dotty.tools.dotc.transform.MegaPhase.MiniPhase
99

1010
/** Collect all super calls to trait members.
1111
*
@@ -17,12 +17,12 @@ import dotty.tools.dotc.transform.TreeTransforms.{MiniPhaseTransform, Transforme
1717
* methods in a redundant mixin class could be implemented with a default abstract method,
1818
* the redundant mixin class could be required as a parent by the JVM.
1919
*/
20-
class CollectSuperCalls extends MiniPhaseTransform {
20+
class CollectSuperCalls extends MiniPhase {
2121
import tpd._
2222

2323
def phaseName: String = "collectSuperCalls"
2424

25-
override def transformSelect(tree: Select)(implicit ctx: Context, info: TransformerInfo): Tree = {
25+
override def transformSelect(tree: Select)(implicit ctx: Context): Tree = {
2626
tree.qualifier match {
2727
case sup: Super =>
2828
if (tree.symbol.owner.is(Trait))

compiler/src/dotty/tools/backend/jvm/LabelDefs.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import dotty.tools.dotc.ast.Trees.Thicket
44
import dotty.tools.dotc.ast.{Trees, tpd}
55
import dotty.tools.dotc.core.Contexts.Context
66
import dotty.tools.dotc.core.Types
7-
import dotty.tools.dotc.transform.TreeTransforms.{TransformerInfo, TreeTransform, MiniPhase, MiniPhaseTransform}
7+
import dotty.tools.dotc.transform.MegaPhase._
88
import dotty.tools.dotc
99
import dotty.tools.dotc.backend.jvm.DottyPrimitives
1010
import dotty.tools.dotc.core.Flags.FlagSet
@@ -81,14 +81,14 @@ import StdNames.nme
8181
*
8282
* @author Dmitry Petrashko
8383
*/
84-
class LabelDefs extends MiniPhaseTransform {
84+
class LabelDefs extends MiniPhase {
8585
def phaseName: String = "labelDef"
8686

8787
val queue = new ArrayBuffer[Tree]()
8888
val beingAppended = new mutable.HashSet[Symbol]()
8989
var labelLevel = 0
9090

91-
override def transformDefDef(tree: tpd.DefDef)(implicit ctx: Context, info: TransformerInfo): tpd.Tree = {
91+
override def transformDefDef(tree: tpd.DefDef)(implicit ctx: Context): tpd.Tree = {
9292
if (tree.symbol is Flags.Label) tree
9393
else {
9494
collectLabelDefs.clear

compiler/src/dotty/tools/dotc/Compiler.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import reporting.{Reporter, ConsoleReporter}
1212
import Phases.Phase
1313
import transform._
1414
import util.FreshNameCreator
15-
import transform.TreeTransforms.{TreeTransform, TreeTransformer}
1615
import core.DenotTransformers.DenotTransformer
1716
import core.Denotations.SingleDenotation
1817

compiler/src/dotty/tools/dotc/Run.scala

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import Types._
1010
import Scopes._
1111
import typer.{FrontEnd, Typer, ImportInfo, RefChecks}
1212
import Decorators._
13-
import dotty.tools.dotc.transform.TreeTransforms.TreeTransformer
1413
import io.PlainFile
1514
import scala.io.Codec
1615
import util._
@@ -116,23 +115,30 @@ class Run(comp: Compiler, ictx: Context) {
116115
val phases = ctx.squashPhases(ctx.phasePlan,
117116
ctx.settings.Yskip.value, ctx.settings.YstopBefore.value, stopAfter, ctx.settings.Ycheck.value)
118117
ctx.usePhases(phases)
119-
var lastPrintedTree: PrintedTree = NoPrintedTree
120-
for (phase <- ctx.allPhases)
121-
if (phase.isRunnable)
122-
Stats.trackTime(s"$phase ms ") {
123-
val start = System.currentTimeMillis
124-
units = phase.runOn(units)
125-
if (ctx.settings.Xprint.value.containsPhase(phase)) {
126-
for (unit <- units) {
127-
lastPrintedTree =
128-
printTree(lastPrintedTree)(ctx.fresh.setPhase(phase.next).setCompilationUnit(unit))
118+
119+
def runPhases(implicit ctx: Context) = {
120+
var lastPrintedTree: PrintedTree = NoPrintedTree
121+
for (phase <- ctx.allPhases)
122+
if (phase.isRunnable)
123+
Stats.trackTime(s"$phase ms ") {
124+
val start = System.currentTimeMillis
125+
units = phase.runOn(units)
126+
if (ctx.settings.Xprint.value.containsPhase(phase)) {
127+
for (unit <- units) {
128+
lastPrintedTree =
129+
printTree(lastPrintedTree)(ctx.fresh.setPhase(phase.next).setCompilationUnit(unit))
130+
}
129131
}
132+
ctx.informTime(s"$phase ", start)
133+
Stats.record(s"total trees at end of $phase", ast.Trees.ntrees)
134+
for (unit <- units)
135+
Stats.record(s"retained typed trees at end of $phase", unit.tpdTree.treeSize)
130136
}
131-
ctx.informTime(s"$phase ", start)
132-
Stats.record(s"total trees at end of $phase", ast.Trees.ntrees)
133-
for (unit <- units)
134-
Stats.record(s"retained typed trees at end of $phase", unit.tpdTree.treeSize)
135-
}
137+
}
138+
139+
val runCtx = ctx.fresh
140+
ctx.phases.foreach(_.initContext(runCtx))
141+
runPhases(runCtx)
136142
if (!ctx.reporter.hasErrors) Rewrites.writeBack()
137143
}
138144

0 commit comments

Comments
 (0)