Skip to content

Commit 3c34dbc

Browse files
committed
Simplify TreeAccumulator
1 parent 57b8dad commit 3c34dbc

File tree

1 file changed

+9
-21
lines changed

1 file changed

+9
-21
lines changed

library/src/scala/tasty/reflect/TreeUtils.scala

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,9 @@ trait TreeUtils
1313

1414
// Ties the knot of the traversal: call `foldOver(x, tree))` to dive in the `tree` node.
1515
def foldTree(x: X, tree: Tree)(implicit ctx: Context): X
16-
def foldCaseDef(x: X, tree: CaseDef)(implicit ctx: Context): X
17-
def foldTypeCaseDef(x: X, tree: TypeCaseDef)(implicit ctx: Context): X
1816
def foldPattern(x: X, tree: Pattern)(implicit ctx: Context): X
1917

2018
def foldTrees(x: X, trees: Iterable[Tree])(implicit ctx: Context): X = (x /: trees)(foldTree)
21-
def foldCaseDefs(x: X, trees: Iterable[CaseDef])(implicit ctx: Context): X = (x /: trees)(foldCaseDef)
22-
def foldTypeCaseDefs(x: X, trees: Iterable[TypeCaseDef])(implicit ctx: Context): X = (x /: trees)(foldTypeCaseDef)
2319
def foldPatterns(x: X, trees: Iterable[Pattern])(implicit ctx: Context): X = (x /: trees)(foldPattern)
2420

2521
def foldOverTree(x: X, tree: Tree)(implicit ctx: Context): X = {
@@ -55,11 +51,11 @@ trait TreeUtils
5551
val a = foldTree(x, meth)
5652
tpt.fold(a)(b => foldTree(a, b))
5753
case Term.Match(selector, cases) =>
58-
foldCaseDefs(foldTree(x, selector), cases)
54+
foldTrees(foldTree(x, selector), cases)
5955
case Term.Return(expr) =>
6056
foldTree(x, expr)
6157
case Term.Try(block, handler, finalizer) =>
62-
foldTrees(foldCaseDefs(foldTree(x, block), handler), finalizer)
58+
foldTrees(foldTrees(foldTree(x, block), handler), finalizer)
6359
case Term.Repeated(elems, elemtpt) =>
6460
foldTrees(foldTree(x, elemtpt), elems)
6561
case Term.Inlined(call, bindings, expansion) =>
@@ -93,20 +89,14 @@ trait TreeUtils
9389
case TypeTree.TypeBind(_, tbt) => foldTree(x, tbt)
9490
case TypeTree.TypeBlock(typedefs, tpt) => foldTree(foldTrees(x, typedefs), tpt)
9591
case TypeTree.MatchType(boundopt, selector, cases) =>
96-
foldTypeCaseDefs(foldTree(boundopt.fold(x)(foldTree(x, _)), selector), cases)
92+
foldTrees(foldTree(boundopt.fold(x)(foldTree(x, _)), selector), cases)
9793
case WildcardTypeTree() => x
9894
case TypeBoundsTree(lo, hi) => foldTree(foldTree(x, lo), hi)
95+
case CaseDef(pat, guard, body) => foldTree(foldTrees(foldPattern(x, pat), guard), body)
96+
case TypeCaseDef(pat, body) => foldTree(foldTree(x, pat), body)
9997
}
10098
}
10199

102-
def foldOverCaseDef(x: X, tree: CaseDef)(implicit ctx: Context): X = tree match {
103-
case CaseDef(pat, guard, body) => foldTree(foldTrees(foldPattern(x, pat), guard), body)
104-
}
105-
106-
def foldOverTypeCaseDef(x: X, tree: TypeCaseDef)(implicit ctx: Context): X = tree match {
107-
case TypeCaseDef(pat, body) => foldTree(foldTree(x, pat), body)
108-
}
109-
110100
def foldOverPattern(x: X, tree: Pattern)(implicit ctx: Context): X = tree match {
111101
case Pattern.Value(v) => foldTree(x, v)
112102
case Pattern.Bind(_, body) => foldPattern(x, body)
@@ -120,18 +110,12 @@ trait TreeUtils
120110
abstract class TreeTraverser extends TreeAccumulator[Unit] {
121111

122112
def traverseTree(tree: Tree)(implicit ctx: Context): Unit = traverseTreeChildren(tree)
123-
def traverseCaseDef(tree: CaseDef)(implicit ctx: Context): Unit = traverseCaseDefChildren(tree)
124-
def traverseTypeCaseDef(tree: TypeCaseDef)(implicit ctx: Context): Unit = traverseTypeCaseDefChildren(tree)
125113
def traversePattern(tree: Pattern)(implicit ctx: Context): Unit = traversePatternChildren(tree)
126114

127115
def foldTree(x: Unit, tree: Tree)(implicit ctx: Context): Unit = traverseTree(tree)
128-
def foldCaseDef(x: Unit, tree: CaseDef)(implicit ctx: Context) = traverseCaseDef(tree)
129-
def foldTypeCaseDef(x: Unit, tree: TypeCaseDef)(implicit ctx: Context) = traverseTypeCaseDef(tree)
130116
def foldPattern(x: Unit, tree: Pattern)(implicit ctx: Context) = traversePattern(tree)
131117

132118
protected def traverseTreeChildren(tree: Tree)(implicit ctx: Context): Unit = foldOverTree((), tree)
133-
protected def traverseCaseDefChildren(tree: CaseDef)(implicit ctx: Context): Unit = foldOverCaseDef((), tree)
134-
protected def traverseTypeCaseDefChildren(tree: TypeCaseDef)(implicit ctx: Context): Unit = foldOverTypeCaseDef((), tree)
135119
protected def traversePatternChildren(tree: Pattern)(implicit ctx: Context): Unit = foldOverPattern((), tree)
136120

137121
}
@@ -149,6 +133,10 @@ trait TreeUtils
149133
case IsTypeTree(tree) => transformTypeTree(tree)
150134
case IsTypeBoundsTree(tree) => tree // TODO traverse tree
151135
case IsWildcardTypeTree(tree) => tree // TODO traverse tree
136+
case IsCaseDef(tree) =>
137+
transformCaseDef(tree)
138+
case IsTypeCaseDef(tree) =>
139+
transformTypeCaseDef(tree)
152140
}
153141
}
154142

0 commit comments

Comments
 (0)