From 919f5b2e5c5a091326a0693db49ac30ca1e6bf0f Mon Sep 17 00:00:00 2001 From: vsalvis Date: Wed, 24 Jun 2015 16:14:59 +0200 Subject: Partest 1/3: Pass PrintWriter as argument for context creation --- src/dotty/tools/dotc/Bench.scala | 11 ++++++----- src/dotty/tools/dotc/Compiler.scala | 10 +++++----- src/dotty/tools/dotc/Driver.scala | 9 +++++---- src/dotty/tools/dotc/FromTasty.scala | 3 ++- src/dotty/tools/dotc/Main.scala | 4 ++-- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/dotty/tools/dotc/Bench.scala b/src/dotty/tools/dotc/Bench.scala index 2e0e15e83..6abad7e85 100644 --- a/src/dotty/tools/dotc/Bench.scala +++ b/src/dotty/tools/dotc/Bench.scala @@ -29,14 +29,15 @@ object Bench extends Driver { private def ntimes(n: Int)(op: => Reporter): Reporter = (emptyReporter /: (0 until n)) ((_, _) => op) - override def doCompile(compiler: Compiler, fileNames: List[String])(implicit ctx: Context): Reporter = + override def doCompile(compiler: Compiler, fileNames: List[String], reporter: Option[Reporter] = None) + (implicit ctx: Context): Reporter = if (new config.Settings.Setting.SettingDecorator[Boolean](ctx.base.settings.resident).value(ctx)) resident(compiler) else ntimes(numRuns) { val start = System.nanoTime() - val r = super.doCompile(compiler, fileNames) - println(s"time elapsed: ${(System.nanoTime - start) / 1000000}ms") + val r = super.doCompile(compiler, fileNames, reporter) + ctx.println(s"time elapsed: ${(System.nanoTime - start) / 1000000}ms") r } @@ -46,11 +47,11 @@ object Bench extends Driver { else (args(pos + 1).toInt, (args take pos) ++ (args drop (pos + 2))) } - override def process(args: Array[String], rootCtx: Context): Reporter = { + override def process(args: Array[String], rootCtx: Context, reporter: Option[Reporter] = None): Reporter = { val (numCompilers, args1) = extractNumArg(args, "#compilers") val (numRuns, args2) = extractNumArg(args1, "#runs") this.numRuns = numRuns - ntimes(numCompilers)(super.process(args2, rootCtx)) + ntimes(numCompilers)(super.process(args2, rootCtx, reporter)) } } diff --git a/src/dotty/tools/dotc/Compiler.scala b/src/dotty/tools/dotc/Compiler.scala index 386f976cf..94be0342b 100644 --- a/src/dotty/tools/dotc/Compiler.scala +++ b/src/dotty/tools/dotc/Compiler.scala @@ -7,7 +7,7 @@ import Periods._ import Symbols._ import Scopes._ import typer.{FrontEnd, Typer, Mode, ImportInfo, RefChecks} -import reporting.ConsoleReporter +import reporting.{ConsoleReporter, Reporter} import Phases.Phase import dotty.tools.dotc.transform._ import dotty.tools.dotc.transform.TreeTransforms.{TreeTransform, TreeTransformer} @@ -93,7 +93,7 @@ class Compiler { * for type checking. * imports For each element of RootImports, an import context */ - def rootContext(implicit ctx: Context): Context = { + def rootContext(implicit ctx: Context, r: Option[Reporter] = None): Context = { ctx.definitions.init(ctx) ctx.setPhasePlan(phases) val rootScope = new MutableScope @@ -105,7 +105,7 @@ class Compiler { .setOwner(defn.RootClass) .setTyper(new Typer) .setMode(Mode.ImplicitsEnabled) - .setTyperState(new MutableTyperState(ctx.typerState, new ConsoleReporter()(ctx), isCommittable = true)) + .setTyperState(new MutableTyperState(ctx.typerState, r.getOrElse(new ConsoleReporter()(ctx)), isCommittable = true)) ctx.definitions.init(start) // set context of definitions to start def addImport(ctx: Context, symf: () => Symbol) = ctx.fresh.setImportInfo(ImportInfo.rootImport(symf)(ctx)) @@ -117,8 +117,8 @@ class Compiler { ctx.runInfo.clear() } - def newRun(implicit ctx: Context): Run = { + def newRun(implicit ctx: Context, r: Option[Reporter] = None): Run = { reset() - new Run(this)(rootContext) + new Run(this)(rootContext(ctx, r)) } } diff --git a/src/dotty/tools/dotc/Driver.scala b/src/dotty/tools/dotc/Driver.scala index dc1431aca..f5e41cbef 100644 --- a/src/dotty/tools/dotc/Driver.scala +++ b/src/dotty/tools/dotc/Driver.scala @@ -14,21 +14,22 @@ abstract class Driver extends DotClass { protected def emptyReporter: Reporter = new StoreReporter - protected def doCompile(compiler: Compiler, fileNames: List[String])(implicit ctx: Context): Reporter = + protected def doCompile(compiler: Compiler, fileNames: List[String], reporter: Option[Reporter] = None) + (implicit ctx: Context): Reporter = if (fileNames.nonEmpty) { - val run = compiler.newRun + val run = compiler.newRun(ctx, reporter) run.compile(fileNames) run.printSummary() } else emptyReporter protected def initCtx = (new ContextBase).initialCtx - def process(args: Array[String], rootCtx: Context): Reporter = { + def process(args: Array[String], rootCtx: Context, reporter: Option[Reporter] = None): Reporter = { val summary = CompilerCommand.distill(args)(rootCtx) implicit val ctx: Context = initCtx.fresh.setSettings(summary.sstate) val fileNames = CompilerCommand.checkUsage(summary) try { - doCompile(newCompiler(), fileNames) + doCompile(newCompiler(), fileNames, reporter) } catch { case ex: FatalError => ctx.error(ex.getMessage) // signals that we should fail compilation. diff --git a/src/dotty/tools/dotc/FromTasty.scala b/src/dotty/tools/dotc/FromTasty.scala index 019846396..1662d57e7 100644 --- a/src/dotty/tools/dotc/FromTasty.scala +++ b/src/dotty/tools/dotc/FromTasty.scala @@ -12,6 +12,7 @@ import SymDenotations._ import typer.FrontEnd import Phases.Phase import util._ +import reporting.Reporter import Decorators._ import dotty.tools.dotc.transform.Pickler import tasty.DottyUnpickler @@ -41,7 +42,7 @@ object FromTasty extends Driver { List(new ReadTastyTreesFromClasses) :: backendPhases } - override def newRun(implicit ctx: Context): Run = { + override def newRun(implicit ctx: Context, reporter: Option[Reporter] = None): Run = { reset() new TASTYRun(this)(rootContext) } diff --git a/src/dotty/tools/dotc/Main.scala b/src/dotty/tools/dotc/Main.scala index 0b136d72f..9aafc83ef 100644 --- a/src/dotty/tools/dotc/Main.scala +++ b/src/dotty/tools/dotc/Main.scala @@ -19,10 +19,10 @@ object Main extends Driver { override def newCompiler(): Compiler = new Compiler - override def doCompile(compiler: Compiler, fileNames: List[String])(implicit ctx: Context): Reporter = { + override def doCompile(compiler: Compiler, fileNames: List[String], reporter: Option[Reporter] = None)(implicit ctx: Context): Reporter = { if (new config.Settings.Setting.SettingDecorator[Boolean](ctx.base.settings.resident).value(ctx)) resident(compiler) else - super.doCompile(compiler, fileNames) + super.doCompile(compiler, fileNames, reporter) } } -- cgit v1.2.3