blob: 70d8a826d0fd7866b05da9b347caa0911f4cee43 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
/* NSC -- new Scala compiler
* Copyright 2009-2011 Scala Solutions and LAMP/EPFL
* @author Martin Odersky
* @author Iulian Dragos
*/
package scala.tools.nsc.interactive
/** A presentation compiler thread. This is a lightweight class, delegating most
* of its functionality to the compiler instance.
*
*/
final class PresentationCompilerThread(var compiler: Global, name: String = "")
extends Thread("Scala Presentation Compiler [" + name + "]") {
/** The presentation compiler loop.
*/
override def run() {
compiler.debugLog("starting new runner thread")
while (compiler ne null) try {
compiler.checkNoResponsesOutstanding()
compiler.log.logreplay("wait for more work", { compiler.scheduler.waitForMoreWork(); true })
compiler.pollForWork(compiler.NoPosition)
while (compiler.isOutOfDate) {
try {
compiler.backgroundCompile()
} catch {
case ex: FreshRunReq =>
compiler.debugLog("fresh run req caught, starting new pass")
}
compiler.log.flush()
}
} catch {
case ex @ ShutdownReq =>
compiler.debugLog("exiting presentation compiler")
compiler.log.close()
// make sure we don't keep around stale instances
compiler = null
case ex: Throwable =>
compiler.log.flush()
ex match {
case ex: FreshRunReq =>
compiler.debugLog("fresh run req caught outside presentation compiler loop; ignored") // This shouldn't be reported
case _ : Global#ValidateException => // This will have been reported elsewhere
compiler.debugLog("validate exception caught outside presentation compiler loop; ignored")
case _ => ex.printStackTrace(); compiler.informIDE("Fatal Error: "+ex)
}
}
}
}
|