aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/Async.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-11-22 17:50:50 +0100
committerJason Zaugg <jzaugg@gmail.com>2012-11-22 17:50:50 +0100
commit087d1e4e138eccf4b2d420298affb4289632bf73 (patch)
treefd0fc1c034f4cbc2d92fa7958c6b03c59e23aa92 /src/main/scala/scala/async/Async.scala
parent1c91fec998d09e31c2c52760452af1771a092182 (diff)
downloadscala-async-087d1e4e138eccf4b2d420298affb4289632bf73.tar.gz
scala-async-087d1e4e138eccf4b2d420298affb4289632bf73.tar.bz2
scala-async-087d1e4e138eccf4b2d420298affb4289632bf73.zip
Support match as an expression.
- corrects detection of await calls in the ANF transform. - Split AsyncAnalyzer into two parts. Unsupported await detection must happen prior to the async transform to prevent the ANF lifting out by-name arguments to vals and hence changing the semantics.
Diffstat (limited to 'src/main/scala/scala/async/Async.scala')
-rw-r--r--src/main/scala/scala/async/Async.scala6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/main/scala/scala/async/Async.scala b/src/main/scala/scala/async/Async.scala
index bd766f2..645f3f7 100644
--- a/src/main/scala/scala/async/Async.scala
+++ b/src/main/scala/scala/async/Async.scala
@@ -71,6 +71,8 @@ abstract class AsyncBase {
import builder.name
import builder.futureSystemOps
+ builder.reportUnsupportedAwaits(body.tree)
+
// Transform to A-normal form:
// - no await calls in qualifiers or arguments,
// - if/match only used in statement position.
@@ -84,9 +86,7 @@ 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] = {
- val analyzer = new builder.AsyncAnalyzer
- analyzer.traverse(anfTree)
- analyzer.valDefsToLift.map {
+ builder.valDefsUsedInSubsequentStates(anfTree).map {
vd =>
(vd.symbol, builder.name.fresh(vd.name))
}.toMap