@@ -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