aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/scala/async/TreeInterrogation.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-04-10 23:52:31 +0200
committerJason Zaugg <jzaugg@gmail.com>2013-04-11 23:32:42 +0200
commit5a0b1918238cb385401f304b22132f51936d795b (patch)
tree3787f45b62cdf98912bf8ba7429bf6efeadf07e8 /src/test/scala/scala/async/TreeInterrogation.scala
parent74beb1b751f6abf1775d6a8ec3eea4d63f3fd41f (diff)
downloadscala-async-5a0b1918238cb385401f304b22132f51936d795b.tar.gz
scala-async-5a0b1918238cb385401f304b22132f51936d795b.tar.bz2
scala-async-5a0b1918238cb385401f304b22132f51936d795b.zip
Allow await in applications with multiple argument lists
Before, we levied an implementation restriction to prevent this. As it turned out, that needlessly prevented use of `await` in the receiver of a multi-param-list application. This commit lifts the restriction altogether, and treats such applications holistically, being careful to preserve the left-to-right evaluation order of arguments in the translated code. - use `TreeInfo.Applied` and `Type#paramss` from `reflect.internal` to get the info we need - use the parameter name for the lifted argument val, rather than `argN` - encapsulate handling of by-name-ness and parameter names in `mapArgumentss` - test for evaluation order preservation
Diffstat (limited to 'src/test/scala/scala/async/TreeInterrogation.scala')
-rw-r--r--src/test/scala/scala/async/TreeInterrogation.scala17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/test/scala/scala/async/TreeInterrogation.scala b/src/test/scala/scala/async/TreeInterrogation.scala
index 4d611e5..deaee03 100644
--- a/src/test/scala/scala/async/TreeInterrogation.scala
+++ b/src/test/scala/scala/async/TreeInterrogation.scala
@@ -71,17 +71,14 @@ object TreeInterrogation extends App {
val tb = mkToolbox("-cp target/scala-2.10/classes -Xprint:flatten")
import scala.async.Async._
val tree = tb.parse(
- """ import scala.async.AsyncId._
- | async {
- | val x = 1
- | val opt = Some("")
- | await(0)
- | val o @ Some(y) = opt
- |
- | {
- | val o @ Some(y) = Some(".")
- | }
+ """ import _root_.scala.async.AsyncId.{async, await}
+ | def foo[T](a0: Int)(b0: Int*) = s"a0 = $a0, b0 = ${b0.head}"
+ | val res = async {
+ | var i = 0
+ | def get = async {i += 1; i}
+ | foo[Int](await(get))(await(get) :: Nil : _*)
| }
+ | res
| """.stripMargin)
println(tree)
val tree1 = tb.typeCheck(tree.duplicate)