@@ -22,8 +22,6 @@ import core.tasty.TreePickler.Hole
22
22
* @param newOwners New owners, replacing previous owners.
23
23
* @param substFrom The symbols that need to be substituted.
24
24
* @param substTo The substitution targets.
25
- * @param stopAtInlinedArgument Whether one should stop at an inlined argument,
26
- * i.e. a node of form Inlined(EmptyTree, _, _).
27
25
*
28
26
* The reason the substitution is broken out from the rest of the type map is
29
27
* that all symbols have to be substituted at the same time. If we do not do this,
@@ -38,16 +36,24 @@ import core.tasty.TreePickler.Hole
38
36
* nested scopes. Any subclass of TreeTypeMap would revert to the standard
39
37
* TreeTypeMap in these recursive invocations.
40
38
*/
41
- final class TreeTypeMap (
39
+ class TreeTypeMap (
42
40
val typeMap : Type => Type = IdentityTypeMap ,
43
41
val treeMap : tpd.Tree => tpd.Tree = identity _,
44
42
val oldOwners : List [Symbol ] = Nil ,
45
43
val newOwners : List [Symbol ] = Nil ,
46
44
val substFrom : List [Symbol ] = Nil ,
47
- val substTo : List [Symbol ] = Nil ,
48
- stopAtInlinedArgument : Boolean = false )(using Context ) extends tpd.TreeMap {
45
+ val substTo : List [Symbol ] = Nil )(using Context ) extends tpd.TreeMap {
49
46
import tpd ._
50
47
48
+ def copy (
49
+ typeMap : Type => Type ,
50
+ treeMap : tpd.Tree => tpd.Tree ,
51
+ oldOwners : List [Symbol ],
52
+ newOwners : List [Symbol ],
53
+ substFrom : List [Symbol ],
54
+ substTo : List [Symbol ])(using Context ): TreeTypeMap =
55
+ new TreeTypeMap (typeMap, treeMap, oldOwners, newOwners, substFrom, substTo)
56
+
51
57
/** If `sym` is one of `oldOwners`, replace by corresponding symbol in `newOwners` */
52
58
def mapOwner (sym : Symbol ): Symbol = sym.subst(oldOwners, newOwners)
53
59
@@ -119,15 +125,8 @@ final class TreeTypeMap(
119
125
val (tmap1, stats1) = transformDefs(stats)
120
126
val expr1 = tmap1.transform(expr)
121
127
cpy.Block (blk)(stats1, expr1)
122
- case inlined @ Inlined (call, bindings, expanded) =>
123
- if stopAtInlinedArgument && call.isEmpty then
124
- expanded match
125
- case expanded : TypeTree => assert(bindings.isEmpty); expanded
126
- case _ => inlined
127
- else
128
- val (tmap1, bindings1) = transformDefs(bindings)
129
- val expanded1 = tmap1.transform(expanded)
130
- cpy.Inlined (inlined)(call, bindings1, expanded1)
128
+ case inlined : Inlined =>
129
+ transformInlined(inlined)
131
130
case cdef @ CaseDef (pat, guard, rhs) =>
132
131
val tmap = withMappedSyms(patVars(pat))
133
132
val pat1 = tmap.transform(pat)
@@ -183,14 +182,13 @@ final class TreeTypeMap(
183
182
assert(! to.exists(substFrom contains _))
184
183
assert(! from.exists(newOwners contains _))
185
184
assert(! to.exists(oldOwners contains _))
186
- new TreeTypeMap (
185
+ copy (
187
186
typeMap,
188
187
treeMap,
189
188
from ++ oldOwners,
190
189
to ++ newOwners,
191
190
from ++ substFrom,
192
- to ++ substTo,
193
- stopAtInlinedArgument)
191
+ to ++ substTo)
194
192
}
195
193
196
194
/** Apply `typeMap` and `ownerMap` to given symbols `syms`
0 commit comments