@@ -16,11 +16,13 @@ trait TreeUtils
16
16
def foldTree (x : X , tree : Tree )(implicit ctx : Context ): X
17
17
def foldTypeTree (x : X , tree : TypeOrBoundsTree )(implicit ctx : Context ): X
18
18
def foldCaseDef (x : X , tree : CaseDef )(implicit ctx : Context ): X
19
+ def foldTypeCaseDef (x : X , tree : TypeCaseDef )(implicit ctx : Context ): X
19
20
def foldPattern (x : X , tree : Pattern )(implicit ctx : Context ): X
20
21
21
22
def foldTrees (x : X , trees : Iterable [Tree ])(implicit ctx : Context ): X = (x /: trees)(foldTree)
22
23
def foldTypeTrees (x : X , trees : Iterable [TypeOrBoundsTree ])(implicit ctx : Context ): X = (x /: trees)(foldTypeTree)
23
24
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)
24
26
def foldPatterns (x : X , trees : Iterable [Pattern ])(implicit ctx : Context ): X = (x /: trees)(foldPattern)
25
27
private def foldParents (x : X , trees : Iterable [TermOrTypeTree ])(implicit ctx : Context ): X = (x /: trees)(foldOverTermOrTypeTree)
26
28
@@ -97,13 +99,22 @@ trait TreeUtils
97
99
case TypeTree .Applied (tpt, args) => foldTypeTrees(foldTypeTree(x, tpt), args)
98
100
case TypeTree .ByName (result) => foldTypeTree(x, result)
99
101
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)
100
107
case TypeBoundsTree (lo, hi) => foldTypeTree(foldTypeTree(x, lo), hi)
101
108
}
102
109
103
110
def foldOverCaseDef (x : X , tree : CaseDef )(implicit ctx : Context ): X = tree match {
104
111
case CaseDef (pat, guard, body) => foldTree(foldTrees(foldPattern(x, pat), guard), body)
105
112
}
106
113
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
+
107
118
def foldOverPattern (x : X , tree : Pattern )(implicit ctx : Context ): X = tree match {
108
119
case Pattern .Value (v) => foldTree(x, v)
109
120
case Pattern .Bind (_, body) => foldPattern(x, body)
@@ -124,16 +135,19 @@ trait TreeUtils
124
135
def traverseTree (tree : Tree )(implicit ctx : Context ): Unit = traverseTreeChildren(tree)
125
136
def traverseTypeTree (tree : TypeOrBoundsTree )(implicit ctx : Context ): Unit = traverseTypeTreeChildren(tree)
126
137
def traverseCaseDef (tree : CaseDef )(implicit ctx : Context ): Unit = traverseCaseDefChildren(tree)
138
+ def traverseTypeCaseDef (tree : TypeCaseDef )(implicit ctx : Context ): Unit = traverseTypeCaseDefChildren(tree)
127
139
def traversePattern (tree : Pattern )(implicit ctx : Context ): Unit = traversePatternChildren(tree)
128
140
129
141
def foldTree (x : Unit , tree : Tree )(implicit ctx : Context ): Unit = traverseTree(tree)
130
142
def foldTypeTree (x : Unit , tree : TypeOrBoundsTree )(implicit ctx : Context ) = traverseTypeTree(tree)
131
143
def foldCaseDef (x : Unit , tree : CaseDef )(implicit ctx : Context ) = traverseCaseDef(tree)
144
+ def foldTypeCaseDef (x : Unit , tree : TypeCaseDef )(implicit ctx : Context ) = traverseTypeCaseDef(tree)
132
145
def foldPattern (x : Unit , tree : Pattern )(implicit ctx : Context ) = traversePattern(tree)
133
146
134
147
protected def traverseTreeChildren (tree : Tree )(implicit ctx : Context ): Unit = foldOverTree((), tree)
135
148
protected def traverseTypeTreeChildren (tree : TypeOrBoundsTree )(implicit ctx : Context ): Unit = foldOverTypeTree((), tree)
136
149
protected def traverseCaseDefChildren (tree : CaseDef )(implicit ctx : Context ): Unit = foldOverCaseDef((), tree)
150
+ protected def traverseTypeCaseDefChildren (tree : TypeCaseDef )(implicit ctx : Context ): Unit = foldOverTypeCaseDef((), tree)
137
151
protected def traversePatternChildren (tree : Pattern )(implicit ctx : Context ): Unit = foldOverPattern((), tree)
138
152
139
153
}
0 commit comments