summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJosh Suereth <Joshua.Suereth@gmail.com>2012-10-11 05:22:27 -0700
committerJosh Suereth <Joshua.Suereth@gmail.com>2012-10-11 05:22:27 -0700
commit90c7596c0736d56ff7b8d699bd958d28cb213bdf (patch)
tree5f76ed86c3d31606c5dd03dc6d5d57cc5b0b05b5 /src
parent1d8469d5ddf1b9ae4addd5c8a69cf08db470e143 (diff)
parent19ea47b3425f973c1ca92890cb8ee561b0ecab3d (diff)
downloadscala-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')
-rw-r--r--src/compiler/scala/tools/nsc/interactive/CompilerControl.scala11
-rw-r--r--src/compiler/scala/tools/nsc/util/InterruptReq.scala5
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
}
}