diff options
author | Martin Odersky <odersky@gmail.com> | 2014-08-31 18:08:32 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-08-31 18:08:32 +0200 |
commit | 47b1d735e8323b2587aeb4b2a7ce5e214d9f1f8d (patch) | |
tree | acca2788c66b97ee4b20f8e29acdb6130b3832f9 /tests/pos | |
parent | 8f321f2afd0cd363492665b410a70476c8a4b751 (diff) | |
download | dotty-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.scala | 48 |
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 +} |