diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-11-23 12:08:59 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-11-23 12:08:59 +0100 |
commit | 5a2acf110233669e1cf1124ac54b28a526d37858 (patch) | |
tree | 739a82485d838a586809ddedbb2daede096706ed /src/main/scala/scala/async/Async.scala | |
parent | 8ff80d52047360f3236fcbc8e7849d388c4aa744 (diff) | |
download | scala-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.scala | 8 |
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 |