Skip to content

Commit f826db2

Browse files
DarkDimiusodersky
authored andcommitted
Mixin: needs to call transformFollowing to make memoize run on traitInits.
1 parent e3449e9 commit f826db2

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,8 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
150150
def traitInits(mixin: ClassSymbol): List[Tree] =
151151
for (getter <- mixin.info.decls.filter(getr => getr.isGetter && !wasDeferred(getr)).toList)
152152
yield {
153-
DefDef(implementation(getter.asTerm), superRef(initializer(getter)).appliedToNone)
153+
// transformFollowing call is needed to make memoize & lazy vals run
154+
transformFollowing(DefDef(implementation(getter.asTerm), superRef(initializer(getter)).appliedToNone))
154155
}
155156

156157
def setters(mixin: ClassSymbol): List[Tree] =
@@ -163,7 +164,7 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
163164
if (cls is Trait) traitDefs(impl.body)
164165
else {
165166
val mixInits = mixins.flatMap { mixin =>
166-
traitInits(mixin) ::: superCallOpt(mixin) ::: setters(mixin)
167+
flatten(traitInits(mixin)) ::: superCallOpt(mixin) ::: setters(mixin)
167168
}
168169
superCallOpt(superCls) ::: mixInits ::: impl.body
169170
})

0 commit comments

Comments
 (0)