scala.tools.nsc.interactive.PresentationCompilerThread.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scala-compiler Show documentation
Show all versions of scala-compiler Show documentation
Compiler for the Scala Programming Language
/* NSC -- new Scala compiler
* Copyright 2009-2013 Typesafe/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)
}
}
}
}