From 4d39003f3ca112d03af1e7a51c9e59bf5eb510c5 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sat, 31 Oct 2015 21:06:50 +0100 Subject: Require outer pointer also for proxies of enclosing classes. There was a missing case where an outer pointer is required. --- src/dotty/tools/dotc/transform/ExplicitOuter.scala | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/dotty/tools/dotc/transform/ExplicitOuter.scala b/src/dotty/tools/dotc/transform/ExplicitOuter.scala index 7391f3cec..024247734 100644 --- a/src/dotty/tools/dotc/transform/ExplicitOuter.scala +++ b/src/dotty/tools/dotc/transform/ExplicitOuter.scala @@ -220,9 +220,14 @@ object ExplicitOuter { case id: Ident => id.tpe match { case ref @ TermRef(NoPrefix, _) => - ref.symbol.is(Hoistable) && isOuter(id.symbol.owner.enclosingClass) - // methods will be placed in enclosing class scope by LambdaLift, so they will get - // an outer path then. + if (ref.symbol is Hoistable) + // ref.symbol will be placed in enclosing class scope by LambdaLift, so it might need + // an outer path then. + isOuter(ref.symbol.owner.enclosingClass) + else + // ref.symbol will get a proxy in immediately enclosing class. If this properly + // contains the current class, it needs an outer path. + ctx.owner.enclosingClass.owner.enclosingClass.isContainedIn(ref.symbol.owner) case _ => false } case nw: New => -- cgit v1.2.3