@@ -16,11 +16,13 @@ trait TreeUtils
1616 def foldTree (x : X , tree : Tree )(implicit ctx : Context ): X
1717 def foldTypeTree (x : X , tree : TypeOrBoundsTree )(implicit ctx : Context ): X
1818 def foldCaseDef (x : X , tree : CaseDef )(implicit ctx : Context ): X
19+ def foldTypeCaseDef (x : X , tree : TypeCaseDef )(implicit ctx : Context ): X
1920 def foldPattern (x : X , tree : Pattern )(implicit ctx : Context ): X
2021
2122 def foldTrees (x : X , trees : Iterable [Tree ])(implicit ctx : Context ): X = (x /: trees)(foldTree)
2223 def foldTypeTrees (x : X , trees : Iterable [TypeOrBoundsTree ])(implicit ctx : Context ): X = (x /: trees)(foldTypeTree)
2324 def foldCaseDefs (x : X , trees : Iterable [CaseDef ])(implicit ctx : Context ): X = (x /: trees)(foldCaseDef)
25+ def foldTypeCaseDefs (x : X , trees : Iterable [TypeCaseDef ])(implicit ctx : Context ): X = (x /: trees)(foldTypeCaseDef)
2426 def foldPatterns (x : X , trees : Iterable [Pattern ])(implicit ctx : Context ): X = (x /: trees)(foldPattern)
2527 private def foldParents (x : X , trees : Iterable [TermOrTypeTree ])(implicit ctx : Context ): X = (x /: trees)(foldOverTermOrTypeTree)
2628
@@ -97,13 +99,22 @@ trait TreeUtils
9799 case TypeTree .Applied (tpt, args) => foldTypeTrees(foldTypeTree(x, tpt), args)
98100 case TypeTree .ByName (result) => foldTypeTree(x, result)
99101 case TypeTree .Annotated (arg, annot) => foldTree(foldTypeTree(x, arg), annot)
102+ case TypeTree .TypeLambdaTree (typedefs, arg) => foldTypeTree(foldTrees(x, typedefs), arg)
103+ case TypeTree .Bind (_, tbt) => foldTypeTree(x, tbt)
104+ case TypeTree .Block (typedefs, tpt) => foldTypeTree(foldTrees(x, typedefs), tpt)
105+ case TypeTree .MatchType (boundopt, selector, cases) =>
106+ foldTypeCaseDefs(foldTypeTree(boundopt.fold(x)(foldTypeTree(x, _)), selector), cases)
100107 case TypeBoundsTree (lo, hi) => foldTypeTree(foldTypeTree(x, lo), hi)
101108 }
102109
103110 def foldOverCaseDef (x : X , tree : CaseDef )(implicit ctx : Context ): X = tree match {
104111 case CaseDef (pat, guard, body) => foldTree(foldTrees(foldPattern(x, pat), guard), body)
105112 }
106113
114+ def foldOverTypeCaseDef (x : X , tree : TypeCaseDef )(implicit ctx : Context ): X = tree match {
115+ case TypeCaseDef (pat, body) => foldTypeTree(foldTypeTree(x, pat), body)
116+ }
117+
107118 def foldOverPattern (x : X , tree : Pattern )(implicit ctx : Context ): X = tree match {
108119 case Pattern .Value (v) => foldTree(x, v)
109120 case Pattern .Bind (_, body) => foldPattern(x, body)
@@ -124,16 +135,19 @@ trait TreeUtils
124135 def traverseTree (tree : Tree )(implicit ctx : Context ): Unit = traverseTreeChildren(tree)
125136 def traverseTypeTree (tree : TypeOrBoundsTree )(implicit ctx : Context ): Unit = traverseTypeTreeChildren(tree)
126137 def traverseCaseDef (tree : CaseDef )(implicit ctx : Context ): Unit = traverseCaseDefChildren(tree)
138+ def traverseTypeCaseDef (tree : TypeCaseDef )(implicit ctx : Context ): Unit = traverseTypeCaseDefChildren(tree)
127139 def traversePattern (tree : Pattern )(implicit ctx : Context ): Unit = traversePatternChildren(tree)
128140
129141 def foldTree (x : Unit , tree : Tree )(implicit ctx : Context ): Unit = traverseTree(tree)
130142 def foldTypeTree (x : Unit , tree : TypeOrBoundsTree )(implicit ctx : Context ) = traverseTypeTree(tree)
131143 def foldCaseDef (x : Unit , tree : CaseDef )(implicit ctx : Context ) = traverseCaseDef(tree)
144+ def foldTypeCaseDef (x : Unit , tree : TypeCaseDef )(implicit ctx : Context ) = traverseTypeCaseDef(tree)
132145 def foldPattern (x : Unit , tree : Pattern )(implicit ctx : Context ) = traversePattern(tree)
133146
134147 protected def traverseTreeChildren (tree : Tree )(implicit ctx : Context ): Unit = foldOverTree((), tree)
135148 protected def traverseTypeTreeChildren (tree : TypeOrBoundsTree )(implicit ctx : Context ): Unit = foldOverTypeTree((), tree)
136149 protected def traverseCaseDefChildren (tree : CaseDef )(implicit ctx : Context ): Unit = foldOverCaseDef((), tree)
150+ protected def traverseTypeCaseDefChildren (tree : TypeCaseDef )(implicit ctx : Context ): Unit = foldOverTypeCaseDef((), tree)
137151 protected def traversePatternChildren (tree : Pattern )(implicit ctx : Context ): Unit = foldOverPattern((), tree)
138152
139153 }
0 commit comments