File tree Expand file tree Collapse file tree 3 files changed +11
-5
lines changed
compiler/src/dotty/tools/dotc Expand file tree Collapse file tree 3 files changed +11
-5
lines changed Original file line number Diff line number Diff line change @@ -274,9 +274,13 @@ object NameOps {
274
274
def setterName : TermName = name.exclude(FieldName ) ++ str.SETTER_SUFFIX
275
275
276
276
def getterName : TermName =
277
- name.exclude(FieldName ).mapLast(n =>
278
- if (n.endsWith(str.SETTER_SUFFIX )) n.take(n.length - str.SETTER_SUFFIX .length).asSimpleName
279
- else n)
277
+ if name.is(TraitSetterName ) then
278
+ val TraitSetterName (_, original) = name
279
+ original.getterName
280
+ else
281
+ name.exclude(FieldName ).mapLast(n =>
282
+ if (n.endsWith(str.SETTER_SUFFIX )) n.take(n.length - str.SETTER_SUFFIX .length).asSimpleName
283
+ else n)
280
284
281
285
def fieldName : TermName =
282
286
if (name.isSetterName)
Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ import SymUtils._
12
12
import Constants ._
13
13
import ast .Trees ._
14
14
import MegaPhase ._
15
+ import NameKinds .TraitSetterName
15
16
import NameOps ._
16
17
import Flags ._
17
18
import Decorators ._
@@ -119,7 +120,8 @@ class Memoize extends MiniPhase with IdentityDenotTransformer { thisPhase =>
119
120
120
121
val constantFinalVal = sym.isAllOf(Accessor | Final , butNot = Mutable ) && tree.rhs.isInstanceOf [Literal ]
121
122
122
- if (sym.is(Accessor , butNot = NoFieldNeeded ) && ! constantFinalVal) {
123
+ if (sym.is(Accessor , butNot = NoFieldNeeded ) && ! constantFinalVal
124
+ && (! sym.name.is(TraitSetterName ) || sym.getter.is(Accessor , butNot = NoFieldNeeded ))) {
123
125
val field = sym.field.orElse(newField).asTerm
124
126
125
127
def adaptToField (tree : Tree ): Tree =
Original file line number Diff line number Diff line change 2
2
T.f2
3
3
T.f3
4
4
T.f4
5
- 3 2 0 0
5
+ 3 2 -3 -4
6
6
3
7
7
g
You can’t perform that action at this time.
0 commit comments