Skip to content

Commit 12ead8d

Browse files
committed
Fix #4559: Don't force initializers of lazy mixin fields
1 parent c3469da commit 12ead8d

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

compiler/src/dotty/tools/dotc/transform/Mixin.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ class Mixin extends MiniPhase with SymTransformer { thisPhase =>
214214
EmptyTree
215215
}
216216

217-
for (getter <- mixin.info.decls.toList if getter.isGetter && !was(getter, Deferred)) yield {
217+
for (getter <- mixin.info.decls.toList if getter.isGetter && !was(getter, Deferred | Lazy)) yield {
218218
val isScala2x = mixin.is(Scala2x)
219219
def default = Underscore(getter.info.resultType)
220220
def initial = transformFollowing(superRef(initializer(getter)).appliedToNone)

tests/run/i4559.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
trait A {
2+
lazy val x = { println("super[A].x()"); 123 }
3+
}
4+
5+
class B extends A {
6+
override lazy val x = 456
7+
}
8+
9+
object Test { def main(args: Array[String]): Unit = { new B() } }

0 commit comments

Comments
 (0)