aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/Async.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-11-23 12:08:59 +0100
committerJason Zaugg <jzaugg@gmail.com>2012-11-23 12:08:59 +0100
commit5a2acf110233669e1cf1124ac54b28a526d37858 (patch)
tree739a82485d838a586809ddedbb2daede096706ed /src/main/scala/scala/async/Async.scala
parent8ff80d52047360f3236fcbc8e7849d388c4aa744 (diff)
downloadscala-async-5a2acf110233669e1cf1124ac54b28a526d37858.tar.gz
scala-async-5a2acf110233669e1cf1124ac54b28a526d37858.tar.bz2
scala-async-5a2acf110233669e1cf1124ac54b28a526d37858.zip
Ensure unique names for definitions in the async block.
- transform the provided tree using reflect.internal.Symbols#Symbol.name_= and treeCopy.{Ident, Select}. - not sure if this is possible within the public Symbol API. - move checking for unsupported nested module/class to AsyncAnalysis. - make block merging selective (only do so if there are nested await calls.)
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 546445a..0b77c78 100644
--- a/src/main/scala/scala/async/Async.scala
+++ b/src/main/scala/scala/async/Async.scala
@@ -79,8 +79,12 @@ abstract class AsyncBase {
// - if/match only used in statement position.
val anfTree: Block = {
val transform = new AnfTransform[c.type](c)
- val stats1 :+ expr1 = transform.anf.transformToList(body.tree)
- c.typeCheck(Block(stats1, expr1)).asInstanceOf[Block]
+ val unique = transform.uniqueNames(body.tree)
+ val stats1 :+ expr1 = transform.anf.transformToList(unique)
+
+ val block = Block(stats1, expr1)
+
+ c.typeCheck(block).asInstanceOf[Block]
}
// Analyze the block to find locals that will be accessed from multiple