diff options
author | Martin Odersky <odersky@gmail.com> | 2011-04-05 16:22:21 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2011-04-05 16:22:21 +0000 |
commit | 329fd609f31339f11340a18aa6c7f225f7c7cdae (patch) | |
tree | 1c55c3333c558d345fc96427b1d300a3f53cecea /src/compiler | |
parent | f0a2dd936e3ccc7d3dbd8d86b55e20ac29933839 (diff) | |
download | scala-329fd609f31339f11340a18aa6c7f225f7c7cdae.tar.gz scala-329fd609f31339f11340a18aa6c7f225f7c7cdae.tar.bz2 scala-329fd609f31339f11340a18aa6c7f225f7c7cdae.zip |
better handling of on-same-thread calls.
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/interactive/CompilerControl.scala | 14 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/interactive/Picklers.scala | 8 |
2 files changed, 12 insertions, 10 deletions
diff --git a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala index bcc8f46b19..373db5cdc3 100644 --- a/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala +++ b/src/compiler/scala/tools/nsc/interactive/CompilerControl.scala @@ -176,7 +176,8 @@ trait CompilerControl { self: Global => * the a NoSuchUnitError is raised in the response. */ def askLoadedTyped(source: SourceFile, response: Response[Tree]) = - postWorkItem(new AskLoadedTypedItem(source, response, onCompilerThread)) + if (onCompilerThread) waitLoadedTyped(source, response, onSameThread = true) + else postWorkItem(new AskLoadedTypedItem(source, response)) /** If source if not yet loaded, get an outline view with askParseEntered. * If source is loaded, wait for it to be typechecked. @@ -197,7 +198,8 @@ trait CompilerControl { self: Global => * @param response The response. */ def askParsedEntered(source: SourceFile, keepLoaded: Boolean, response: Response[Tree]) = - postWorkItem(new AskParsedEnteredItem(source, keepLoaded, response, onCompilerThread)) + if (onCompilerThread) getParsedEntered(source, keepLoaded, response, onSameThread = true) + else postWorkItem(new AskParsedEnteredItem(source, keepLoaded, response)) /** Cancels current compiler run and start a fresh one where everything will be re-typechecked * (but not re-loaded). @@ -290,13 +292,13 @@ trait CompilerControl { self: Global => override def toString = "linkpos "+sym+" in "+source } - class AskLoadedTypedItem(val source: SourceFile, response: Response[Tree], val onSameThread: Boolean) extends WorkItem { - def apply() = self.waitLoadedTyped(source, response, onSameThread) + class AskLoadedTypedItem(val source: SourceFile, response: Response[Tree]) extends WorkItem { + def apply() = self.waitLoadedTyped(source, response, onSameThread = false) override def toString = "wait loaded & typed "+source } - class AskParsedEnteredItem(val source: SourceFile, val keepLoaded: Boolean, response: Response[Tree], val onSameThread: Boolean) extends WorkItem { - def apply() = self.getParsedEntered(source, keepLoaded, response, onSameThread) + class AskParsedEnteredItem(val source: SourceFile, val keepLoaded: Boolean, response: Response[Tree]) extends WorkItem { + def apply() = self.getParsedEntered(source, keepLoaded, response, onSameThread = false) override def toString = "getParsedEntered "+source+", keepLoaded = "+keepLoaded } } diff --git a/src/compiler/scala/tools/nsc/interactive/Picklers.scala b/src/compiler/scala/tools/nsc/interactive/Picklers.scala index 4591cf2522..53ef20507f 100644 --- a/src/compiler/scala/tools/nsc/interactive/Picklers.scala +++ b/src/compiler/scala/tools/nsc/interactive/Picklers.scala @@ -159,13 +159,13 @@ trait Picklers { self: Global => .asClass (classOf[AskLinkPosItem]) implicit def askLoadedTypedItem: CondPickler[AskLoadedTypedItem] = - (pkl[SourceFile] ~ pkl[Boolean]) - .wrapped { case source ~ onSameThread => new AskLoadedTypedItem(source, new Response, onSameThread) } { w => w.source ~ w.onSameThread } + pkl[SourceFile] + .wrapped { source => new AskLoadedTypedItem(source, new Response) } { _.source } .asClass (classOf[AskLoadedTypedItem]) implicit def askParsedEnteredItem: CondPickler[AskParsedEnteredItem] = - (pkl[SourceFile] ~ pkl[Boolean] ~ pkl[Boolean]) - .wrapped { case source ~ keepLoaded ~ onSameThread => new AskParsedEnteredItem(source, keepLoaded, new Response, onSameThread) } { w => w.source ~ w.keepLoaded ~ w.onSameThread } + (pkl[SourceFile] ~ pkl[Boolean]) + .wrapped { case source ~ keepLoaded => new AskParsedEnteredItem(source, keepLoaded, new Response) } { w => w.source ~ w.keepLoaded } .asClass (classOf[AskParsedEnteredItem]) implicit def emptyAction: CondPickler[EmptyAction] = |