diff options
author | Martin Odersky <odersky@gmail.com> | 2016-03-01 16:43:53 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-03-01 18:46:28 +0100 |
commit | e94e8ef5200471a99facd818a6c1a25f994b163d (patch) | |
tree | b9b4c64fe744bcd9808a9861d8d605e0f8a6a43b /tests | |
parent | 67de3d35019816a1297215770f1a8012c390db0e (diff) | |
download | dotty-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.scala | 9 | ||||
-rw-r--r-- | tests/run/llift.scala | 100 |
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) + } +} |