aboutsummaryrefslogtreecommitdiff
path: root/tests/pos
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-08-31 18:08:32 +0200
committerMartin Odersky <odersky@gmail.com>2014-08-31 18:08:32 +0200
commit47b1d735e8323b2587aeb4b2a7ce5e214d9f1f8d (patch)
treeacca2788c66b97ee4b20f8e29acdb6130b3832f9 /tests/pos
parent8f321f2afd0cd363492665b410a70476c8a4b751 (diff)
downloaddotty-47b1d735e8323b2587aeb4b2a7ce5e214d9f1f8d.tar.gz
dotty-47b1d735e8323b2587aeb4b2a7ce5e214d9f1f8d.tar.bz2
dotty-47b1d735e8323b2587aeb4b2a7ce5e214d9f1f8d.zip
New phase: outerAccessors
The new phase replaces attachOuter. It creates outer accessors where needed but does not yet define outer parameters or pass outer arguments. It should run before pattern matcher, so that pattern matcher can access the outer fields of scrutinees.
Diffstat (limited to 'tests/pos')
-rw-r--r--tests/pos/explicitOuter.scala48
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/pos/explicitOuter.scala b/tests/pos/explicitOuter.scala
new file mode 100644
index 000000000..747f07e8f
--- /dev/null
+++ b/tests/pos/explicitOuter.scala
@@ -0,0 +1,48 @@
+class Outer(elem: Int, val next: Outer) {
+
+ trait InnerTrait {
+ def foo = elem
+ }
+
+ class InnerClass extends next.InnerTrait {
+ def bar = elem
+ }
+
+ class EmptyInnerClass {
+ def foo = 1 // still needs outer because it is not private
+ }
+
+ def inner = {
+ trait InnerTrait {
+ def foo = elem
+ }
+
+ class InnerClass extends next.InnerTrait {
+ def bar = elem
+ }
+
+ class EmptyInnerClass {
+ def foo = 1 // does not need outer
+ }
+
+ val ic = new InnerClass
+ println(ic.bar)
+ println(ic.foo)
+ val it = new InnerTrait {}
+ println(it.foo)
+ val ec = new EmptyInnerClass
+ }
+
+}
+
+object Test extends App {
+
+ val o = new Outer(1, new Outer(2, null))
+ val ic = new o.InnerClass
+ println(ic.bar)
+ println(ic.foo)
+ val it = new o.InnerTrait {}
+ println(it.foo)
+ val ec = new o.EmptyInnerClass
+ o.inner
+}