aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/scala/scala/async/AnfTransform.scala22
-rw-r--r--src/test/scala/scala/async/run/hygiene/Hygiene.scala2
2 files changed, 12 insertions, 12 deletions
diff --git a/src/main/scala/scala/async/AnfTransform.scala b/src/main/scala/scala/async/AnfTransform.scala
index d216e44..a2d21f6 100644
--- a/src/main/scala/scala/async/AnfTransform.scala
+++ b/src/main/scala/scala/async/AnfTransform.scala
@@ -31,20 +31,20 @@ private[async] final case class AnfTransform[C <: Context](c: C) {
* This step is needed to allow us to safely merge blocks during the `inline` transform below.
*/
private final class UniqueNames(tree: Tree) extends Transformer {
- class DuplicateNameTraverser extends AsyncTraverser {
- val result = collection.mutable.Buffer[Name]()
-
- override def traverse(tree: Tree) {
- tree match {
- case dt: DefTree => result += dt.symbol.name
- case _ => super.traverse(tree)
+ val repeatedNames: Set[Symbol] = {
+ class DuplicateNameTraverser extends AsyncTraverser {
+ val result = collection.mutable.Buffer[Symbol]()
+
+ override def traverse(tree: Tree) {
+ tree match {
+ case dt: DefTree => result += dt.symbol
+ case _ => super.traverse(tree)
+ }
}
}
- }
- val repeatedNames: Set[Name] = {
val dupNameTraverser = new DuplicateNameTraverser
dupNameTraverser.traverse(tree)
- dupNameTraverser.result.groupBy(x => x).filter(_._2.size > 1).keySet
+ dupNameTraverser.result.groupBy(x => x.name).filter(_._2.size > 1).values.flatten.toSet[Symbol]
}
/** Stepping outside of the public Macro API to call [[scala.reflect.internal.Symbols.Symbol.name_=]] */
@@ -54,7 +54,7 @@ private[async] final case class AnfTransform[C <: Context](c: C) {
override def transform(tree: Tree): Tree = {
tree match {
- case defTree: DefTree if repeatedNames(defTree.symbol.name) =>
+ case defTree: DefTree if repeatedNames(defTree.symbol) =>
val trans = super.transform(defTree)
val origName = defTree.symbol.name
val sym = defTree.symbol.asInstanceOf[symtab.Symbol]
diff --git a/src/test/scala/scala/async/run/hygiene/Hygiene.scala b/src/test/scala/scala/async/run/hygiene/Hygiene.scala
index 5306ecc..9d1df21 100644
--- a/src/test/scala/scala/async/run/hygiene/Hygiene.scala
+++ b/src/test/scala/scala/async/run/hygiene/Hygiene.scala
@@ -76,7 +76,7 @@ class HygieneSpec {
val f1 = async { state + 2 }
val x = await(f1)
val y = await(async { result })
- val z = await(async { resume() })
+ val z = await(async(await(async { resume() })))
(x, y, z)
}
res._1 mustBe (25)