@@ -25,8 +25,7 @@ import dotty.tools.io.VirtualFile
2525import scala .util .control .NonFatal
2626
2727/** A compiler run. Exports various methods to compile source files */
28- class Run (comp : Compiler , ictx : Context ) {
29- import Run ._
28+ class Run (comp : Compiler , ictx : Context ) extends ImplicitRunInfo with ConstraintRunInfo {
3029
3130 /** Produces the following contexts, from outermost to innermost
3231 *
@@ -53,13 +52,42 @@ class Run(comp: Compiler, ictx: Context) {
5352 ctx.initialize()(start) // re-initialize the base context with start
5453 def addImport (ctx : Context , refFn : () => TermRef ) =
5554 ctx.fresh.setImportInfo(ImportInfo .rootImport(refFn)(ctx))
56- (start.setRunInfo( new RunInfo (start) ) /: defn.RootImportFns )(addImport)
55+ (start.setRun( this ) /: defn.RootImportFns )(addImport)
5756 }
5857
59- protected [this ] implicit val ctx : Context = rootContext(ictx)
58+ private [this ] var myCtx = rootContext(ictx)
59+
60+ /** The context created for this run */
61+ def runContext = myCtx
62+
63+ protected [this ] implicit def ctx : Context = myCtx
6064 assert(ctx.runId <= Periods .MaxPossibleRunId )
6165
62- def getSource (fileName : String ): SourceFile = {
66+ private [this ] var myUnits : List [CompilationUnit ] = _
67+ private [this ] var myUnitsCached : List [CompilationUnit ] = _
68+ private [this ] var myFiles : Set [AbstractFile ] = _
69+
70+ /** The compilation units currently being compiled, this may return different
71+ * results over time.
72+ */
73+ def units : List [CompilationUnit ] = myUnits
74+
75+ private def units_= (us : List [CompilationUnit ]): Unit =
76+ myUnits = us
77+
78+ /** The files currently being compiled, this may return different results over time.
79+ * These files do not have to be source files since it's possible to compile
80+ * from TASTY.
81+ */
82+ def files : Set [AbstractFile ] = {
83+ if (myUnits ne myUnitsCached) {
84+ myUnitsCached = myUnits
85+ myFiles = myUnits.map(_.source.file).toSet
86+ }
87+ myFiles
88+ }
89+
90+ private def getSource (fileName : String ): SourceFile = {
6391 val f = new PlainFile (io.Path (fileName))
6492 if (f.isDirectory) {
6593 ctx.error(s " expected file, received directory ' $fileName' " )
@@ -78,7 +106,7 @@ class Run(comp: Compiler, ictx: Context) {
78106 compileSources(sources)
79107 } catch {
80108 case NonFatal (ex) =>
81- ctx.echo(i " exception occurred while compiling ${ctx.runInfo. units} %, % " )
109+ ctx.echo(i " exception occurred while compiling $units%, % " )
82110 throw ex
83111 }
84112
@@ -90,17 +118,17 @@ class Run(comp: Compiler, ictx: Context) {
90118 */
91119 def compileSources (sources : List [SourceFile ]) =
92120 if (sources forall (_.exists)) {
93- ctx.runInfo. units = sources map (new CompilationUnit (_))
121+ units = sources map (new CompilationUnit (_))
94122 compileUnits()
95123 }
96124
97125 def compileUnits (us : List [CompilationUnit ]): Unit = {
98- ctx.runInfo. units = us
126+ units = us
99127 compileUnits()
100128 }
101129
102130 def compileUnits (us : List [CompilationUnit ], ctx : Context ): Unit = {
103- ctx.runInfo. units = us
131+ units = us
104132 compileUnits()(ctx)
105133 }
106134
@@ -122,16 +150,16 @@ class Run(comp: Compiler, ictx: Context) {
122150 if (phase.isRunnable)
123151 Stats .trackTime(s " $phase ms " ) {
124152 val start = System .currentTimeMillis
125- ctx.runInfo. units = phase.runOn(ctx.runInfo. units)
153+ units = phase.runOn(units)
126154 if (ctx.settings.Xprint .value.containsPhase(phase)) {
127- for (unit <- ctx.runInfo. units) {
155+ for (unit <- units) {
128156 lastPrintedTree =
129157 printTree(lastPrintedTree)(ctx.fresh.setPhase(phase.next).setCompilationUnit(unit))
130158 }
131159 }
132160 ctx.informTime(s " $phase " , start)
133161 Stats .record(s " total trees at end of $phase" , ast.Trees .ntrees)
134- for (unit <- ctx.runInfo. units)
162+ for (unit <- units)
135163 Stats .record(s " retained typed trees at end of $phase" , unit.tpdTree.treeSize)
136164 }
137165 }
@@ -180,46 +208,19 @@ class Run(comp: Compiler, ictx: Context) {
180208 compileSources(List (new SourceFile (virtualFile, Codec .UTF8 )))
181209 }
182210
183- /** The context created for this run */
184- def runContext = ctx
185-
186211 /** Print summary; return # of errors encountered */
187212 def printSummary (): Reporter = {
188- ctx.runInfo. printMaxConstraint()
213+ printMaxConstraint()
189214 val r = ctx.reporter
190215 r.printSummary
191216 r
192217 }
193- }
194-
195- object Run {
196- /** Info that changes on each compiler run */
197- class RunInfo (initctx : Context ) extends ImplicitRunInfo with ConstraintRunInfo {
198- implicit val ctx : Context = initctx
199-
200- private [this ] var myUnits : List [CompilationUnit ] = _
201- private [this ] var myUnitsCached : List [CompilationUnit ] = _
202- private [this ] var myFiles : Set [AbstractFile ] = _
203-
204- /** The compilation units currently being compiled, this may return different
205- * results over time.
206- */
207- def units : List [CompilationUnit ] = myUnits
208-
209- private [Run ] def units_= (us : List [CompilationUnit ]): Unit =
210- myUnits = us
211-
212-
213- /** The files currently being compiled, this may return different results over time.
214- * These files do not have to be source files since it's possible to compile
215- * from TASTY.
216- */
217- def files : Set [AbstractFile ] = {
218- if (myUnits ne myUnitsCached) {
219- myUnitsCached = myUnits
220- myFiles = myUnits.map(_.source.file).toSet
221- }
222- myFiles
223- }
218+
219+ override def reset () = {
220+ super [ImplicitRunInfo ].reset()
221+ super [ConstraintRunInfo ].reset()
222+ myCtx = null
223+ myUnits = null
224+ myUnitsCached = null
224225 }
225- }
226+ }
0 commit comments