Skip to content

Commit ac35aeb

Browse files
retronymmilessabin
authored andcommitted
Perform substitution in a single pass.
1 parent 5dd9909 commit ac35aeb

File tree

1 file changed

+6
-11
lines changed

1 file changed

+6
-11
lines changed

src/compiler/scala/tools/nsc/typechecker/Contexts.scala

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -340,19 +340,14 @@ trait Contexts { self: Analyzer =>
340340

341341
val vsymMap = (vsyms zip vsyms0).toMap
342342

343-
object patchRefs extends Transformer {
344-
override def transform(tree: Tree): Tree = {
345-
tree match {
346-
case i: Ident if vsymMap.contains(i.symbol) =>
347-
gen.mkAttributedSelect(gen.mkAttributedRef(msym0), vsymMap(i.symbol)) setType i.tpe
348-
case _ =>
349-
super.transform(tree)
350-
}
343+
val substitutor = new TreeSymSubstituter(vsyms, vsyms0) {
344+
override def transform(tree: Tree): Tree = tree match {
345+
case i: Ident if vsymMap.contains(i.symbol) =>
346+
super.transform(treeCopy.Select(i, gen.mkAttributedRef(msym0), i.name))
347+
case _ => super.transform(tree)
351348
}
352349
}
353-
354-
val tree0 = patchRefs.transform(result.tree)
355-
val tree1 = Block(mdef0, tree0).substituteSymbols(vsyms, vsyms0) setType tree.tpe
350+
val tree1 = substitutor(Block(mdef0, result.tree)) setType tree.tpe
356351

357352
new SearchResult(atPos(pos.focus)(tree1), result.subst, result.undetparams)
358353
}

0 commit comments

Comments
 (0)