@@ -34,11 +34,11 @@ class InlineLocalObjects(val simplifyPhase: Simplify) extends Optimisation {
34
34
val gettersCalled = mutable.HashSet [Symbol ]()
35
35
36
36
// Map from class to new fields, initialised between visitor and transformer.
37
- var newFieldsMapping : Map [Symbol , Map [ Symbol , Symbol ]] = null
38
- // | | |
39
- // | | New fields, replacements these getters
40
- // | Usages of getters of these classes
41
- // ValDefs of the classes that are being torn apart; = candidates.intersect(gettersCalled)
37
+ var newFieldsMapping : Map [Symbol , List [( Symbol , Symbol ) ]] = null
38
+ // | | |
39
+ // | | New fields, replacements these getters
40
+ // | Usages of getters of these classes
41
+ // ValDefs of the classes that are being torn apart; = candidates.intersect(gettersCalled)
42
42
43
43
def clear (): Unit = {
44
44
candidates.clear()
@@ -57,7 +57,7 @@ class InlineLocalObjects(val simplifyPhase: Simplify) extends Optimisation {
57
57
val info : Type = x.asSeenFrom(refVal.info).info.finalResultType.widenDealias
58
58
ctx.newSymbol(owner, name, flags, info)
59
59
}
60
- (refVal, accessors.zip(newLocals).toMap )
60
+ (refVal, accessors.zip(newLocals))
61
61
}.toMap
62
62
}
63
63
@@ -89,7 +89,7 @@ class InlineLocalObjects(val simplifyPhase: Simplify) extends Optimisation {
89
89
initNewFieldsMapping();
90
90
{
91
91
case t @ NewCaseClassValDef (fun, args) if newFieldsMapping.contains(t.symbol) =>
92
- val newFields = newFieldsMapping(t.symbol).values.toList
92
+ val newFields = newFieldsMapping(t.symbol).map(_._2)
93
93
val newFieldsDefs = newFields.zip(args).map { case (nf, arg) =>
94
94
val rhs = arg.changeOwnerAfter(t.symbol, nf.symbol, simplifyPhase)
95
95
ValDef (nf.asTerm, rhs)
@@ -99,10 +99,9 @@ class InlineLocalObjects(val simplifyPhase: Simplify) extends Optimisation {
99
99
Thicket (newFieldsDefs :+ recreate)
100
100
101
101
case t @ Select (rec, _) if isImmutableAccessor(t) =>
102
- newFieldsMapping.getOrElse(rec.symbol, Map .empty).get(t.symbol) match {
103
- case None => t
104
- case Some (newSym) => ref(newSym)
105
- }
102
+ newFieldsMapping.getOrElse(rec.symbol, Nil ).collect {
103
+ case ((oldSym, newSym)) if oldSym == t.symbol => ref(newSym)
104
+ }.headOption.getOrElse(t)
106
105
107
106
case t => t
108
107
}
0 commit comments