From e2b840b96a16f7d41dc43c3cf6d905e0db568629 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Sun, 25 Nov 2012 13:12:03 +0100 Subject: Lift local defs and functions. Any vals referred to in the body of these must also be lifted. Fixes #36 --- src/test/scala/scala/async/TreeInterrogation.scala | 4 +-- .../scala/async/run/nesteddef/NestedDef.scala | 40 ++++++++++++++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 src/test/scala/scala/async/run/nesteddef/NestedDef.scala (limited to 'src/test') diff --git a/src/test/scala/scala/async/TreeInterrogation.scala b/src/test/scala/scala/async/TreeInterrogation.scala index e3012c7..ca4a309 100644 --- a/src/test/scala/scala/async/TreeInterrogation.scala +++ b/src/test/scala/scala/async/TreeInterrogation.scala @@ -56,9 +56,7 @@ object TreeInterrogation extends App { val tb = mkToolbox("-cp target/scala-2.10/classes -Xprint:all") val tree = tb.parse( """ import _root_.scala.async.AsyncId._ - | async { - | await(0) match { case _ => 0 } - | } + | async { val a = 0; val x = await(a) - 1; def foo(z: Any) = (a.toDouble, x.toDouble, z); foo(await(2)) } | """.stripMargin) println(tree) val tree1 = tb.typeCheck(tree.duplicate) diff --git a/src/test/scala/scala/async/run/nesteddef/NestedDef.scala b/src/test/scala/scala/async/run/nesteddef/NestedDef.scala new file mode 100644 index 0000000..2baef0d --- /dev/null +++ b/src/test/scala/scala/async/run/nesteddef/NestedDef.scala @@ -0,0 +1,40 @@ +package scala.async +package run +package nesteddef + +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 +import org.junit.Test + +@RunWith(classOf[JUnit4]) +class NestedDef { + + @Test + def nestedDef() { + import AsyncId._ + val result = async { + val a = 0 + val x = await(a) - 1 + val local = 43 + def bar(d: Double) = -d + a + local + def foo(z: Any) = (a.toDouble, bar(x).toDouble, z) + foo(await(2)) + } + result mustBe (0d, 44d, 2) + } + + + @Test + def nestedFunction() { + import AsyncId._ + val result = async { + val a = 0 + val x = await(a) - 1 + val local = 43 + val bar = (d: Double) => -d + a + local + val foo = (z: Any) => (a.toDouble, bar(x).toDouble, z) + foo(await(2)) + } + result mustBe (0d, 44d, 2) + } +} -- cgit v1.2.3