diff options
author | liu fengyun <liu@fengy.me> | 2016-12-19 14:08:36 +0100 |
---|---|---|
committer | liu fengyun <liu@fengy.me> | 2016-12-19 15:08:59 +0100 |
commit | bfabceeb1d19848e86f69019a4614c3653420ccc (patch) | |
tree | 24765b7cc31ad1763ee05875190bf008a9192a28 /compiler | |
parent | 152e4690edd3e5ad484519baccdf679cfa0919ed (diff) | |
download | dotty-bfabceeb1d19848e86f69019a4614c3653420ccc.tar.gz dotty-bfabceeb1d19848e86f69019a4614c3653420ccc.tar.bz2 dotty-bfabceeb1d19848e86f69019a4614c3653420ccc.zip |
Fix #1820: condition of whether generates outer
Previously, we don't generate `outer` for the anonymous class `new Inner2 {}`.
This is incorrect, as `Inner2 {}` extends `A.Inner`, which requires an outer.
trait A {
val a = "a"
trait Inner {
def f = println(a)
def h = 3
}
}
trait B extends A {
trait Inner2 extends Inner
new Inner2 {}
}
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/src/dotty/tools/dotc/transform/ExplicitOuter.scala | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/compiler/src/dotty/tools/dotc/transform/ExplicitOuter.scala b/compiler/src/dotty/tools/dotc/transform/ExplicitOuter.scala index e792518ce..007210926 100644 --- a/compiler/src/dotty/tools/dotc/transform/ExplicitOuter.scala +++ b/compiler/src/dotty/tools/dotc/transform/ExplicitOuter.scala @@ -79,7 +79,8 @@ class ExplicitOuter extends MiniPhaseTransform with InfoTransformer { thisTransf val isTrait = cls.is(Trait) if (needsOuterIfReferenced(cls) && !needsOuterAlways(cls) && - impl.existsSubTree(referencesOuter(cls, _))) + (cls.mixins.exists(needsOuterIfReferenced) || + impl.existsSubTree(referencesOuter(cls, _)))) ensureOuterAccessors(cls) val hasOuterFlag = hasOuter(cls) |