aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-04-10 16:32:34 +0200
committerJason Zaugg <jzaugg@gmail.com>2013-04-10 18:03:24 +0200
commitd332b4614dfd07b4fd91576dac3ff3fddd657106 (patch)
tree7f53a3829307e0170693d2134901a58deb21b0ec
parent78499a5d509fef4bcdf517f75a8bb29f3a54f569 (diff)
downloadscala-async-d332b4614dfd07b4fd91576dac3ff3fddd657106.tar.gz
scala-async-d332b4614dfd07b4fd91576dac3ff3fddd657106.tar.bz2
scala-async-d332b4614dfd07b4fd91576dac3ff3fddd657106.zip
Scala 2.10.1 compat: apply renaming to originals of TypeTrees
-rw-r--r--src/main/scala/scala/async/TransformUtils.scala7
-rw-r--r--src/test/scala/scala/async/TreeInterrogation.scala4
-rw-r--r--src/test/scala/scala/async/run/match0/Match0.scala35
3 files changed, 27 insertions, 19 deletions
diff --git a/src/main/scala/scala/async/TransformUtils.scala b/src/main/scala/scala/async/TransformUtils.scala
index db82ed6..434d6fd 100644
--- a/src/main/scala/scala/async/TransformUtils.scala
+++ b/src/main/scala/scala/async/TransformUtils.scala
@@ -58,6 +58,13 @@ private[async] final case class TransformUtils[C <: Context](c: C) {
val renamer = new Transformer {
override def transform(tree: Tree) = tree match {
case Ident(_) => (renameMap get tree.symbol).fold(tree)(Ident(_))
+ case tt: TypeTree if tt.original != EmptyTree && tt.original != null =>
+ // We also have to apply our renaming transform on originals of TypeTrees.
+ // TODO 2.10.1 Can we find a cleaner way?
+ val symTab = c.universe.asInstanceOf[reflect.internal.SymbolTable]
+ val tt1 = tt.asInstanceOf[symTab.TypeTree]
+ tt1.setOriginal(transform(tt.original).asInstanceOf[symTab.Tree])
+ super.transform(tree)
case _ => super.transform(tree)
}
}
diff --git a/src/test/scala/scala/async/TreeInterrogation.scala b/src/test/scala/scala/async/TreeInterrogation.scala
index 2bc4770..4d611e5 100644
--- a/src/test/scala/scala/async/TreeInterrogation.scala
+++ b/src/test/scala/scala/async/TreeInterrogation.scala
@@ -69,8 +69,10 @@ object TreeInterrogation extends App {
withDebug {
val cm = reflect.runtime.currentMirror
val tb = mkToolbox("-cp target/scala-2.10/classes -Xprint:flatten")
+ import scala.async.Async._
val tree = tb.parse(
- """ async {
+ """ import scala.async.AsyncId._
+ | async {
| val x = 1
| val opt = Some("")
| await(0)
diff --git a/src/test/scala/scala/async/run/match0/Match0.scala b/src/test/scala/scala/async/run/match0/Match0.scala
index 79a4e35..7624838 100644
--- a/src/test/scala/scala/async/run/match0/Match0.scala
+++ b/src/test/scala/scala/async/run/match0/Match0.scala
@@ -83,24 +83,23 @@ class MatchSpec {
result mustBe (2)
}
-// TODO 2.10.1
-// @Test def `support await referring to pattern matching vals`() {
-// import AsyncId.{async, await}
-// val result = async {
-// val x = 1
-// val opt = Some("")
-// await(0)
-// val o @ Some(y) = opt
-//
-// {
-// val o @ Some(y) = Some(".")
-// }
-//
-// await(0)
-// await((o, y.isEmpty))
-// }
-// result mustBe ((Some(""), true))
-// }
+ @Test def `support await referring to pattern matching vals`() {
+ import AsyncId.{async, await}
+ val result = async {
+ val x = 1
+ val opt = Some("")
+ await(0)
+ val o @ Some(y) = opt
+
+ {
+ val o @ Some(y) = Some(".")
+ }
+
+ await(0)
+ await((o, y.isEmpty))
+ }
+ result mustBe ((Some(""), true))
+ }
@Test def `await in scrutinee`() {
import AsyncId.{async, await}