Skip to content

Commit 95d7e79

Browse files
committed
Use foreachSubTree instead of new TreeTraverser
1 parent ef382de commit 95d7e79

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
@@ -963,29 +963,24 @@ class Inliner(val call: tpd.Tree)(using Context):
963963
bindingOfSym(binding.symbol) = binding
964964
}
965965

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

990985
def retain(boundSym: Symbol) = {
991986
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)