Skip to content

Commit c4c29e3

Browse files
committed
Mixin: implementations of Scala2 LazyVals need a rhs.
Unlike normal fields, they aren't initialised in $init method, and need to know a bit about class layout of implementation class. Luckily AugmentScala2Traits added just enough symbols to make this work.
1 parent 5c5145d commit c4c29e3

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,13 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
163163
if (isCurrent(getter) || getter.is(ExpandedName))
164164
// transformFollowing call is needed to make memoize & lazy vals run
165165
transformFollowing(
166-
DefDef(implementation(getter.asTerm), if (isScala2x) default else initial))
166+
DefDef(implementation(getter.asTerm),
167+
if (isScala2x) {
168+
if (getter.is(Flags.Lazy)) // lazy vals need to have a rhs that will be the lazy initializer
169+
ref(mixin.implClass).select(getter.name).appliedTo(This(ctx.owner.asClass))
170+
else default
171+
} else initial)
172+
)
167173
else if (isScala2x) EmptyTree
168174
else initial
169175
}

0 commit comments

Comments
 (0)