diff options
author | Josh Suereth <Joshua.Suereth@gmail.com> | 2012-10-11 05:22:27 -0700 |
---|---|---|
committer | Josh Suereth <Joshua.Suereth@gmail.com> | 2012-10-11 05:22:27 -0700 |
commit | 90c7596c0736d56ff7b8d699bd958d28cb213bdf (patch) | |
tree | 5f76ed86c3d31606c5dd03dc6d5d57cc5b0b05b5 /src/compiler | |
parent | 1d8469d5ddf1b9ae4addd5c8a69cf08db470e143 (diff) | |
parent | 19ea47b3425f973c1ca92890cb8ee561b0ecab3d (diff) | |
download | scala-90c7596c0736d56ff7b8d699bd958d28cb213bdf.tar.gz scala-90c7596c0736d56ff7b8d699bd958d28cb213bdf.tar.bz2 scala-90c7596c0736d56ff7b8d699bd958d28cb213bdf.zip |
Merge pull request #1487 from dragos/issue/fix-6505
Fixed SI-6505. Respond to ask calls by immediate failure after compiler shutdown.
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/interactive/CompilerControl.scala | 11 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/util/InterruptReq.scala | 5 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala index 9af90eb204..b528948716 100644 --- a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala +++ b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala @@ -13,6 +13,7 @@ import scala.tools.nsc.util.FailedInterrupt import scala.tools.nsc.util.EmptyAction import scala.tools.nsc.util.WorkScheduler import scala.reflect.internal.util.{SourceFile, Position} +import scala.tools.nsc.util.InterruptReq /** Interface of interactive compiler to a client such as an IDE * The model the presentation compiler consists of the following parts: @@ -415,6 +416,16 @@ trait CompilerControl { self: Global => override def doQuickly[A](op: () => A): A = { throw new FailedInterrupt(new Exception("Posted a work item to a compiler that's shutting down")) } + + override def askDoQuickly[A](op: () => A): InterruptReq { type R = A } = { + val ir = new InterruptReq { + type R = A + val todo = () => throw new MissingResponse + } + ir.execute() + ir + } + } } diff --git a/src/compiler/scala/tools/nsc/util/InterruptReq.scala b/src/compiler/scala/tools/nsc/util/InterruptReq.scala index 816d16f767..b1b81d0952 100644 --- a/src/compiler/scala/tools/nsc/util/InterruptReq.scala +++ b/src/compiler/scala/tools/nsc/util/InterruptReq.scala @@ -47,7 +47,10 @@ abstract class InterruptReq { } def onComplete(k: Continuation) = synchronized { - waiting = k :: waiting + if (result.isDefined) + k(result.get) + else + waiting = k :: waiting } } |