aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/Async.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-11-25 13:12:03 +0100
committerJason Zaugg <jzaugg@gmail.com>2012-11-26 16:15:46 +0100
commite2b840b96a16f7d41dc43c3cf6d905e0db568629 (patch)
tree9d32f3a69a02aedbe2d16a9a1226beb60b3fb658 /src/main/scala/scala/async/Async.scala
parent26038aebf1555b582dba35e8bfc3698f126705c5 (diff)
downloadscala-async-e2b840b96a16f7d41dc43c3cf6d905e0db568629.tar.gz
scala-async-e2b840b96a16f7d41dc43c3cf6d905e0db568629.tar.bz2
scala-async-e2b840b96a16f7d41dc43c3cf6d905e0db568629.zip
Lift local defs and functions.
Any vals referred to in the body of these must also be lifted. Fixes #36
Diffstat (limited to 'src/main/scala/scala/async/Async.scala')
-rw-r--r--src/main/scala/scala/async/Async.scala8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/main/scala/scala/async/Async.scala b/src/main/scala/scala/async/Async.scala
index ef506a5..f868f79 100644
--- a/src/main/scala/scala/async/Async.scala
+++ b/src/main/scala/scala/async/Async.scala
@@ -11,6 +11,7 @@ import scala.reflect.macros.Context
* @author Philipp Haller
*/
object Async extends AsyncBase {
+
import scala.concurrent.Future
lazy val futureSystem = ScalaConcurrentFutureSystem
@@ -87,9 +88,9 @@ abstract class AsyncBase {
// states of our generated state machine, e.g. a value assigned before
// an `await` and read afterwards.
val renameMap: Map[Symbol, TermName] = {
- anaylzer.valDefsUsedInSubsequentStates(anfTree).map {
+ anaylzer.defTreesUsedInSubsequentStates(anfTree).map {
vd =>
- (vd.symbol, name.fresh(vd.name))
+ (vd.symbol, name.fresh(vd.name.toTermName))
}.toMap
}
@@ -97,9 +98,12 @@ abstract class AsyncBase {
import asyncBlock.asyncStates
logDiagnostics(c)(anfTree, asyncStates.map(_.toString))
+ // Important to retain the original declaration order here!
val localVarTrees = anfTree.collect {
case vd@ValDef(_, _, tpt, _) if renameMap contains vd.symbol =>
utils.mkVarDefTree(tpt.tpe, renameMap(vd.symbol))
+ case dd@DefDef(mods, name, tparams, vparamss, tpt, rhs) =>
+ DefDef(mods, renameMap(dd.symbol), tparams, vparamss, tpt, c.resetAllAttrs(utils.substituteNames(rhs, renameMap)))
}
val onCompleteHandler = asyncBlock.onCompleteHandler