File tree Expand file tree Collapse file tree 1 file changed +11
-6
lines changed
src/dotty/tools/dotc/transform Expand file tree Collapse file tree 1 file changed +11
-6
lines changed Original file line number Diff line number Diff line change @@ -14,6 +14,7 @@ import DenotTransformers._
14
14
import StdNames ._
15
15
import NameOps ._
16
16
import Phases ._
17
+ import ast .untpd
17
18
import ast .Trees ._
18
19
import collection .mutable
19
20
@@ -150,16 +151,20 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
150
151
ctx.atPhase(thisTransform) { implicit ctx => sym is Deferred }
151
152
152
153
def traitInits (mixin : ClassSymbol ): List [Tree ] =
153
- for (getter <- mixin.info.decls.filter(getr => getr.isGetter && ! wasDeferred(getr)).toList)
154
- yield {
155
- // transformFollowing call is needed to make memoize & lazy vals run
156
- val rhs = transformFollowing(superRef(initializer(getter)).appliedToNone)
154
+ for (getter <- mixin.info.decls.filter(getr => getr.isGetter && ! wasDeferred(getr)).toList) yield {
157
155
// isCurrent: getter is a member of implementing class
158
156
val isCurrent = getter.is(ExpandedName ) || ctx.atPhase(thisTransform) { implicit ctx =>
159
157
cls.info.member(getter.name).suchThat(_.isGetter).symbol == getter
160
158
}
161
- if (isCurrent) transformFollowing(DefDef (implementation(getter.asTerm), rhs))
162
- else rhs
159
+ val isScala2x = mixin.is(Scala2x )
160
+ def default = Underscore (getter.info.resultType)
161
+ def initial = transformFollowing(superRef(initializer(getter)).appliedToNone)
162
+ if (isCurrent)
163
+ // transformFollowing call is needed to make memoize & lazy vals run
164
+ transformFollowing(
165
+ DefDef (implementation(getter.asTerm), if (isScala2x) default else initial))
166
+ else if (isScala2x) EmptyTree
167
+ else initial
163
168
}
164
169
165
170
def setters (mixin : ClassSymbol ): List [Tree ] =
You can’t perform that action at this time.
0 commit comments