aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorodersky <odersky@gmail.com>2016-03-07 16:50:12 +0100
committerodersky <odersky@gmail.com>2016-03-07 16:50:12 +0100
commit8b4f73fb73a2f57a0b3e6088443797e40f1d1720 (patch)
tree6e44261a51af83dff8bdaa43e330ce3af1be1153 /tests
parenta50926701ef5171779aa025d2d307751d166cabe (diff)
parentcf2fed8138cb399beb7d1249227107b943fe3905 (diff)
downloaddotty-8b4f73fb73a2f57a0b3e6088443797e40f1d1720.tar.gz
dotty-8b4f73fb73a2f57a0b3e6088443797e40f1d1720.tar.bz2
dotty-8b4f73fb73a2f57a0b3e6088443797e40f1d1720.zip
Merge pull request #1150 from dotty-staging/change-lambdalift-fasttrack
Change lambdalift - fasttrack
Diffstat (limited to 'tests')
-rw-r--r--tests/pos/llift.scala9
-rw-r--r--tests/run/llift.scala156
2 files changed, 156 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..60a1f4dce
--- /dev/null
+++ b/tests/run/llift.scala
@@ -0,0 +1,156 @@
+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
+ }
+ def f3a = f3
+ }
+ class C2 extends T2
+ class C3 extends T1
+ new C2().f3a + new C3().f6
+ }
+ def f6 = x
+ }
+ class C1 extends T1
+ new C1().f2
+ }
+
+ def f1d(x: Int) = {
+ trait T1 {
+ def f2 = {
+ trait T2 {
+ def f3: Int = {
+ def f4 = x
+ def f5 = f4
+ def f7 = this.f3
+ f5
+ }
+ def f3a = f3
+ }
+ class C2 extends T2
+ class C3 extends T1
+ new C2().f3a + new C3().f6
+ }
+ def f6 = x
+ }
+ class C1 extends T1
+ new C1().f2
+ }
+
+ def f1e(x: Int) = {
+ trait T1 {
+ def f2 = {
+ trait T2 {
+ def f3: Int = x
+ }
+ class C2 extends T2
+ new C2().f3
+ }
+ def f6 = x
+ }
+ class C1 extends T1
+ new C1().f6
+ }
+
+ def f1f(x: Int) = {
+ trait T1 {
+ trait T2 {
+ def f3: Int = x
+ }
+ class C2 extends T2 {
+ override def f3 = super.f3
+ }
+ new C2().f3
+ def f6 = x
+ }
+ class C1 extends T1
+ new C1().f6
+ }
+
+ def main(args: Array[String]) = {
+ assert(foo(3) == 3)
+ assert(f1(4) == 4)
+ assert(f1a(5) == 5)
+ assert(f1b(6) == 6)
+ assert(f1c(7) == 14)
+ assert(f1d(8) == 16)
+ assert(f1e(9) == 9)
+ assert(f1f(10) == 10)
+ }
+}