summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2011-04-05 16:22:21 +0000
committerMartin Odersky <odersky@gmail.com>2011-04-05 16:22:21 +0000
commit329fd609f31339f11340a18aa6c7f225f7c7cdae (patch)
tree1c55c3333c558d345fc96427b1d300a3f53cecea
parentf0a2dd936e3ccc7d3dbd8d86b55e20ac29933839 (diff)
downloadscala-329fd609f31339f11340a18aa6c7f225f7c7cdae.tar.gz
scala-329fd609f31339f11340a18aa6c7f225f7c7cdae.tar.bz2
scala-329fd609f31339f11340a18aa6c7f225f7c7cdae.zip
better handling of on-same-thread calls.
-rw-r--r--src/compiler/scala/tools/nsc/interactive/CompilerControl.scala14
-rw-r--r--src/compiler/scala/tools/nsc/interactive/Picklers.scala8
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] =