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/ExprBuilder.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/ExprBuilder.scala')
-rw-r--r-- | src/main/scala/scala/async/ExprBuilder.scala | 10 |
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 |