diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-11-26 17:01:15 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-11-26 17:01:15 +0100 |
commit | 6c3c0f0a37d337aa297f5b2481d4727ea2a20434 (patch) | |
tree | 31fd1d999bd88275d1202c0ef7f7c8a7fa4f0928 /src | |
parent | fe26ed3f0e589c91d3f1099000a83e44814224d9 (diff) | |
download | scala-async-6c3c0f0a37d337aa297f5b2481d4727ea2a20434.tar.gz scala-async-6c3c0f0a37d337aa297f5b2481d4727ea2a20434.tar.bz2 scala-async-6c3c0f0a37d337aa297f5b2481d4727ea2a20434.zip |
Show that indirectly nested defs aren't lifted.
Diffstat (limited to 'src')
-rw-r--r-- | src/test/scala/scala/async/TreeInterrogation.scala | 17 | ||||
-rw-r--r-- | src/test/scala/scala/async/package.scala | 4 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/test/scala/scala/async/TreeInterrogation.scala b/src/test/scala/scala/async/TreeInterrogation.scala index 9a31337..a46eaf2 100644 --- a/src/test/scala/scala/async/TreeInterrogation.scala +++ b/src/test/scala/scala/async/TreeInterrogation.scala @@ -8,6 +8,7 @@ import org.junit.runner.RunWith import org.junit.runners.JUnit4 import org.junit.Test import AsyncId._ +import tools.reflect.ToolBox @RunWith(classOf[JUnit4]) class TreeInterrogation { @@ -20,14 +21,16 @@ class TreeInterrogation { | async { | val x = await(1) | val y = x * 2 + | def foo(a: Int) = { def nested = 0; a } // don't lift `nested`. | val z = await(x * 3) + | foo(z) | z | }""".stripMargin) val tree1 = tb.typeCheck(tree) //println(cm.universe.show(tree1)) - import tb.mirror.universe._ + import tb.u._ val functions = tree1.collect { case f: Function => f case t: Template => t @@ -38,6 +41,18 @@ class TreeInterrogation { case ValDef(mods, name, _, _) if mods.hasFlag(Flag.MUTABLE) => name } varDefs.map(_.decoded.trim).toSet mustBe (Set("state$async", "await$1", "await$2")) + varDefs.map(_.decoded.trim).toSet mustBe (Set("state$async", "await$1", "await$2")) + + val defDefs = tree1.collect { + case t: Template => + val stats: List[Tree] = t.body + stats.collect { + case dd : DefDef + if !dd.symbol.isImplementationArtifact + && !dd.symbol.asTerm.isAccessor && !dd.symbol.asTerm.isSetter => dd.name + } + }.flatten + defDefs.map(_.decoded.trim).toSet mustBe (Set("foo$1", "apply", "resume$async", "<init>")) } } diff --git a/src/test/scala/scala/async/package.scala b/src/test/scala/scala/async/package.scala index bc4ebac..4a7a958 100644 --- a/src/test/scala/scala/async/package.scala +++ b/src/test/scala/scala/async/package.scala @@ -5,7 +5,7 @@ package scala import reflect._ -import tools.reflect.ToolBoxError +import tools.reflect.{ToolBox, ToolBoxError} package object async { @@ -36,7 +36,7 @@ package object async { tb.eval(tb.parse(code)) } - def mkToolbox(compileOptions: String = "") = { + def mkToolbox(compileOptions: String = ""): ToolBox[_ <: scala.reflect.api.Universe] = { val m = scala.reflect.runtime.currentMirror import scala.tools.reflect.ToolBox m.mkToolBox(options = compileOptions) |