aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/TransformUtils.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-11-26 14:05:04 +0100
committerJason Zaugg <jzaugg@gmail.com>2012-11-26 16:25:16 +0100
commitbe275dcf295f0addf8d41c9a3b4cfe2acaadfaa4 (patch)
tree70426486df39db37860ab90f15ecb41ff51994c1 /src/main/scala/scala/async/TransformUtils.scala
parent4da04eee1893ead433a624f6b146d56aca46cb7e (diff)
downloadscala-async-be275dcf295f0addf8d41c9a3b4cfe2acaadfaa4.tar.gz
scala-async-be275dcf295f0addf8d41c9a3b4cfe2acaadfaa4.tar.bz2
scala-async-be275dcf295f0addf8d41c9a3b4cfe2acaadfaa4.zip
Rewrite the state machine to a class, rather than an object.
To avoid suprises in tree retyping, the instance of this class is immediately upcase to StateMachine[Promise[T], ExecContext]. Allow nested non-case classes. These pop up when we use nested async calls. Only look for duplicate names in the subtrees traversed by AsyncTraverser.
Diffstat (limited to 'src/main/scala/scala/async/TransformUtils.scala')
-rw-r--r--src/main/scala/scala/async/TransformUtils.scala23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/main/scala/scala/async/TransformUtils.scala b/src/main/scala/scala/async/TransformUtils.scala
index 553211a..5b1fcbe 100644
--- a/src/main/scala/scala/async/TransformUtils.scala
+++ b/src/main/scala/scala/async/TransformUtils.scala
@@ -18,17 +18,18 @@ private[async] final case class TransformUtils[C <: Context](c: C) {
def suffixedName(prefix: String) = newTermName(suffix(prefix))
- val state = suffixedName("state")
- val result = suffixedName("result")
- val resume = suffixedName("resume")
- val execContext = suffixedName("execContext")
- val stateMachine = suffixedName("stateMachine")
- val apply = newTermName("apply")
- val tr = newTermName("tr")
- val matchRes = "matchres"
- val ifRes = "ifres"
- val await = "await"
- val bindSuffix = "$bind"
+ val state = suffixedName("state")
+ val result = suffixedName("result")
+ val resume = suffixedName("resume")
+ val execContext = suffixedName("execContext")
+ val stateMachine = newTermName(fresh("stateMachine"))
+ val stateMachineT = stateMachine.toTypeName
+ val apply = newTermName("apply")
+ val tr = newTermName("tr")
+ val matchRes = "matchres"
+ val ifRes = "ifres"
+ val await = "await"
+ val bindSuffix = "$bind"
def fresh(name: TermName): TermName = newTermName(fresh(name.toString))