blob: 1293bdf44c2a1d0100b3366241b3bdd2d6a8987d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package scala.async
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.junit.Test
import AsyncId._
@RunWith(classOf[JUnit4])
class TreeInterrogation {
@Test
def `a minimal set of vals are lifted to vars`() {
val cm = reflect.runtime.currentMirror
val tb = mkToolbox("-cp target/scala-2.10/classes")
val tree = mkToolbox().parse(
"""| import _root_.scala.async.AsyncId._
| async {
| val x = await(1)
| val y = x * 2
| val z = await(x * 3)
| z
| }""".stripMargin)
val tree1 = tb.typeCheck(tree)
// println(cm.universe.showRaw(tree1))
import tb.mirror.universe._
val functions = tree1.collect {
case f: Function => f
}
functions.size mustBe 1
val varDefs = tree1.collect {
case ValDef(mods, name, _, _) if mods.hasFlag(Flag.MUTABLE) => name
}
// TODO no need to lift `y` as it is only accessed from a single state.
varDefs.map(_.decoded).toSet mustBe(Set("state$async", "onCompleteHandler$async", "x$1", "z$1", "y$1"))
}
}
|