From 087d1e4e138eccf4b2d420298affb4289632bf73 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Thu, 22 Nov 2012 17:50:50 +0100 Subject: 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. --- src/main/scala/scala/async/Async.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/main/scala/scala/async/Async.scala') 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 -- cgit v1.2.3