Skip to content

Commit abf9a25

Browse files
authored
Use foreachSubTree instead of new TreeTraverser (#17303)
2 parents ab9e75d + 95d7e79 commit abf9a25

File tree

4 files changed

+26
-43
lines changed

4 files changed

+26
-43
lines changed

compiler/src/dotty/tools/dotc/ast/TreeMapWithImplicits.scala

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,10 @@ class TreeMapWithImplicits extends tpd.TreeMapWithPreciseStatContexts {
3030

3131
private def patternScopeCtx(pattern: Tree)(using Context): Context = {
3232
val nestedCtx = ctx.fresh.setNewScope
33-
new TreeTraverser {
34-
def traverse(tree: Tree)(using Context): Unit = {
35-
tree match {
36-
case d: DefTree if d.symbol.isOneOf(GivenOrImplicitVal) =>
37-
nestedCtx.enter(d.symbol)
38-
case _ =>
39-
}
40-
traverseChildren(tree)
41-
}
42-
}.traverse(pattern)
33+
pattern.foreachSubTree {
34+
case d: DefTree if d.symbol.isOneOf(GivenOrImplicitVal) => nestedCtx.enter(d.symbol)
35+
case _ =>
36+
}
4337
nestedCtx
4438
}
4539

compiler/src/dotty/tools/dotc/inlines/Inliner.scala

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -970,29 +970,24 @@ class Inliner(val call: tpd.Tree)(using Context):
970970
bindingOfSym(binding.symbol) = binding
971971
}
972972

973-
val countRefs = new TreeTraverser {
974-
override def traverse(t: Tree)(using Context) = {
975-
def updateRefCount(sym: Symbol, inc: Int) =
976-
for (x <- refCount.get(sym)) refCount(sym) = x + inc
977-
def updateTermRefCounts(t: Tree) =
978-
t.typeOpt.foreachPart {
979-
case ref: TermRef => updateRefCount(ref.symbol, 2) // can't be inlined, so make sure refCount is at least 2
980-
case _ =>
981-
}
982-
983-
t match {
984-
case t: RefTree =>
985-
updateRefCount(t.symbol, 1)
986-
updateTermRefCounts(t)
987-
case _: New | _: TypeTree =>
988-
updateTermRefCounts(t)
989-
case _ =>
990-
}
991-
traverseChildren(t)
973+
def updateRefCount(sym: Symbol, inc: Int) =
974+
for (x <- refCount.get(sym)) refCount(sym) = x + inc
975+
def updateTermRefCounts(tree: Tree) =
976+
tree.typeOpt.foreachPart {
977+
case ref: TermRef => updateRefCount(ref.symbol, 2) // can't be inlined, so make sure refCount is at least 2
978+
case _ =>
992979
}
993-
}
994-
countRefs.traverse(tree)
995-
for (binding <- bindings) countRefs.traverse(binding)
980+
def countRefs(tree: Tree) =
981+
tree.foreachSubTree {
982+
case t: RefTree =>
983+
updateRefCount(t.symbol, 1)
984+
updateTermRefCounts(t)
985+
case t @ (_: New | _: TypeTree) =>
986+
updateTermRefCounts(t)
987+
case _ =>
988+
}
989+
countRefs(tree)
990+
for (binding <- bindings) countRefs(binding)
996991

997992
def retain(boundSym: Symbol) = {
998993
refCount.get(boundSym) match {

compiler/src/dotty/tools/dotc/quoted/PickledQuotes.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -275,9 +275,7 @@ object PickledQuotes {
275275
QuotesCache(pickled) = tree
276276

277277
// Make sure trees and positions are fully loaded
278-
new TreeTraverser {
279-
def traverse(tree: Tree)(using Context): Unit = traverseChildren(tree)
280-
}.traverse(tree)
278+
tree.foreachSubTree(identity)
281279

282280
quotePickling.println(i"**** unpickled quote\n$tree")
283281

compiler/src/dotty/tools/dotc/typer/Checking.scala

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1193,15 +1193,11 @@ trait Checking {
11931193
*/
11941194
def checkNoForwardDependencies(vparams: List[ValDef])(using Context): Unit = vparams match {
11951195
case vparam :: vparams1 =>
1196-
val check = new TreeTraverser {
1197-
def traverse(tree: Tree)(using Context) = tree match {
1198-
case id: Ident if vparams.exists(_.symbol == id.symbol) =>
1199-
report.error(em"illegal forward reference to method parameter", id.srcPos)
1200-
case _ =>
1201-
traverseChildren(tree)
1202-
}
1196+
vparam.tpt.foreachSubTree {
1197+
case id: Ident if vparams.exists(_.symbol == id.symbol) =>
1198+
report.error(em"illegal forward reference to method parameter", id.srcPos)
1199+
case _ =>
12031200
}
1204-
check.traverse(vparam.tpt)
12051201
checkNoForwardDependencies(vparams1)
12061202
case Nil =>
12071203
}

0 commit comments

Comments
 (0)