aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/ExprBuilder.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/ExprBuilder.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/ExprBuilder.scala')
-rw-r--r--src/main/scala/scala/async/ExprBuilder.scala10
1 files changed, 1 insertions, 9 deletions
diff --git a/src/main/scala/scala/async/ExprBuilder.scala b/src/main/scala/scala/async/ExprBuilder.scala
index 573af16..b7cfc8f 100644
--- a/src/main/scala/scala/async/ExprBuilder.scala
+++ b/src/main/scala/scala/async/ExprBuilder.scala
@@ -32,7 +32,7 @@ final class ExprBuilder[C <: Context, FS <: FutureSystem](override val c: C, val
val tr = newTermName("tr")
val onCompleteHandler = suffixedName("onCompleteHandler")
- def fresh(name: TermName) = newTermName(c.fresh("" + name + "$"))
+ def fresh(name: TermName) = if (name.toString.contains("$")) name else newTermName(c.fresh("" + name + "$"))
}
private[async] lazy val futureSystemOps = futureSystem.mkOps(c)
@@ -335,14 +335,6 @@ final class ExprBuilder[C <: Context, FS <: FutureSystem](override val c: C, val
currState = afterMatchState
stateBuilder = new builder.AsyncStateBuilder(currState, toRename)
- case ClassDef(_, name, _, _) =>
- // do not allow local class definitions, because of SI-5467 (specific to case classes, though)
- c.error(stat.pos, s"Local class ${name.decoded} illegal within `async` block")
-
- case ModuleDef(_, name, _) =>
- // local object definitions lead to spurious type errors (because of resetAllAttrs?)
- c.error(stat.pos, s"Local object ${name.decoded} illegal within `async` block")
-
case _ =>
checkForUnsupportedAwait(stat)
stateBuilder += stat