aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/Run.scala2
-rw-r--r--src/dotty/tools/dotc/core/Phases.scala8
-rw-r--r--src/dotty/tools/dotc/typer/FrontEnd.scala3
3 files changed, 9 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/Run.scala b/src/dotty/tools/dotc/Run.scala
index a9948c54a..f7d89e897 100644
--- a/src/dotty/tools/dotc/Run.scala
+++ b/src/dotty/tools/dotc/Run.scala
@@ -46,7 +46,7 @@ class Run(comp: Compiler)(implicit ctx: Context) {
.filterNot(ctx.settings.Yskip.value.containsPhase(_)) // TODO: skip only subphase
for (phase <- phasesToRun)
if (!ctx.reporter.hasErrors) {
- phase.runOn(units)
+ units = phase.runOn(units)
def foreachUnit(op: Context => Unit)(implicit ctx: Context): Unit =
for (unit <- units) op(ctx.fresh.setPhase(phase.next).setCompilationUnit(unit))
if (ctx.settings.Xprint.value.containsPhase(phase))
diff --git a/src/dotty/tools/dotc/core/Phases.scala b/src/dotty/tools/dotc/core/Phases.scala
index 476ce6e55..348789e14 100644
--- a/src/dotty/tools/dotc/core/Phases.scala
+++ b/src/dotty/tools/dotc/core/Phases.scala
@@ -192,8 +192,12 @@ object Phases {
def run(implicit ctx: Context): Unit
- def runOn(units: List[CompilationUnit])(implicit ctx: Context): Unit =
- for (unit <- units) run(ctx.fresh.setPhase(this).setCompilationUnit(unit))
+ def runOn(units: List[CompilationUnit])(implicit ctx: Context): List[CompilationUnit] =
+ units.map { unit =>
+ val unitCtx = ctx.fresh.setPhase(this).setCompilationUnit(unit)
+ run(unitCtx)
+ unitCtx.compilationUnit
+ }
def description: String = phaseName
diff --git a/src/dotty/tools/dotc/typer/FrontEnd.scala b/src/dotty/tools/dotc/typer/FrontEnd.scala
index 4c5e2549b..4f3b03fa1 100644
--- a/src/dotty/tools/dotc/typer/FrontEnd.scala
+++ b/src/dotty/tools/dotc/typer/FrontEnd.scala
@@ -40,13 +40,14 @@ class FrontEnd extends Phase {
record("retainedTypedTrees", unit.tpdTree.treeSize)
}
- override def runOn(units: List[CompilationUnit])(implicit ctx: Context): Unit = {
+ override def runOn(units: List[CompilationUnit])(implicit ctx: Context): List[CompilationUnit] = {
val unitContexts = units map (unit => ctx.fresh.setCompilationUnit(unit))
unitContexts foreach (parse(_))
record("parsedTrees", ast.Trees.ntrees)
unitContexts foreach (enterSyms(_))
unitContexts foreach (typeCheck(_))
record("totalTrees", ast.Trees.ntrees)
+ unitContexts.map(_.compilationUnit)
}
override def run(implicit ctx: Context): Unit = {