aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-03-01 16:43:53 +0100
committerMartin Odersky <odersky@gmail.com>2016-03-01 18:46:28 +0100
commite94e8ef5200471a99facd818a6c1a25f994b163d (patch)
treeb9b4c64fe744bcd9808a9861d8d605e0f8a6a43b /tests
parent67de3d35019816a1297215770f1a8012c390db0e (diff)
downloaddotty-e94e8ef5200471a99facd818a6c1a25f994b163d.tar.gz
dotty-e94e8ef5200471a99facd818a6c1a25f994b163d.tar.bz2
dotty-e94e8ef5200471a99facd818a6c1a25f994b163d.zip
Handle local traits in lambda lift
Diffstat (limited to 'tests')
-rw-r--r--tests/pos/llift.scala9
-rw-r--r--tests/run/llift.scala100
2 files changed, 100 insertions, 9 deletions
diff --git a/tests/pos/llift.scala b/tests/pos/llift.scala
deleted file mode 100644
index 51631ac97..000000000
--- a/tests/pos/llift.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-class A {
- class B {
- def outer(): Unit = {
- def inner(): Int = 2
-
- val fi: Function0[Int] = () => inner()
- }
- }
-}
diff --git a/tests/run/llift.scala b/tests/run/llift.scala
new file mode 100644
index 000000000..0c8c9b4be
--- /dev/null
+++ b/tests/run/llift.scala
@@ -0,0 +1,100 @@
+class A {
+ class B {
+ def outer(): Unit = {
+ def inner(): Int = 2
+
+ val fi: Function0[Int] = () => inner()
+ }
+ }
+}
+object Test {
+ def foo(x: Int) = {
+ trait B {
+ def bar = x
+ }
+ class C extends B {
+ override def bar = super[B].bar
+ }
+ new C().bar
+ }
+
+
+ def f1(x: Int) = {
+ class C1 {
+ def f2 = {
+ class C2 {
+ def f3 = {
+ def f4 = x
+ f4
+ }
+ }
+ new C2().f3
+ }
+ }
+ new C1().f2
+ }
+
+ def f1a(x: Int) = {
+// class C1 {
+ def f2 = {
+ trait T2 {
+ def f3 = {
+ def f4 = x
+ def f5 = f4
+ f5
+ }
+ }
+ class C2 extends T2
+ new C2().f3
+ }
+// }
+ /*new C1().*/f2
+ }
+
+ def f1b(x: Int) = {
+ class T1 {
+ def f2 = {
+ trait T2 {
+ def f3 = {
+ def f4 = x
+ def f5 = f4
+ f5
+ }
+ }
+ class C2 extends T2
+ new C2().f3
+ }
+ }
+ class C1 extends T1
+ new C1().f2
+ }
+
+ def f1c(x: Int) = {
+ class T1 {
+ def f2 = {
+ trait T2 {
+ def f3: Int = {
+ def f4 = x
+ def f5 = f4
+ def f7 = this.f3
+ f5
+ }
+ }
+ class C2 extends T2
+ class C3 extends T1
+ new C2().f3 + new C3().f6
+ }
+ def f6 = x
+ }
+ class C1 extends T1
+ new C1().f2
+ }
+
+ def main(args: Array[String]) = {
+ assert(foo(3) == 3)
+ assert(f1(4) == 4)
+ assert(f1a(5) == 5)
+ assert(f1b(6) == 6)
+ assert(f1c(6) == 12)
+ }
+}