@@ -172,40 +172,33 @@ object Matcher {
172
172
val bindMatch =
173
173
if (hasBindAnnotation(pattern.symbol) || hasBindTypeAnnotation(tpt2)) bindingMatch(scrutinee.symbol)
174
174
else matched
175
- val returnTptMatch = tpt1 =#= tpt2
176
- val rhsEnv = the[Env ] + (scrutinee.symbol -> pattern.symbol)
177
- val rhsMatchings = treeOptMatches(rhs1, rhs2) given rhsEnv
178
- bindMatch && returnTptMatch && rhsMatchings
175
+ def rhsEnv = the[Env ] + (scrutinee.symbol -> pattern.symbol)
176
+ bindMatch && tpt1 =#= tpt2 && (treeOptMatches(rhs1, rhs2) given rhsEnv )
179
177
180
178
case (DefDef (_, typeParams1, paramss1, tpt1, Some (rhs1)), DefDef (_, typeParams2, paramss2, tpt2, Some (rhs2))) =>
181
- val typeParmasMatch = typeParams1 =##= typeParams2
182
- val paramssMatch = matchLists(paramss1, paramss2)(_ =##= _)
183
179
val bindMatch =
184
180
if (hasBindAnnotation(pattern.symbol)) bindingMatch(scrutinee.symbol)
185
181
else matched
186
- val tptMatch = tpt1 =#= tpt2
187
- val rhsEnv =
182
+ def rhsEnv =
188
183
the[Env ] + (scrutinee.symbol -> pattern.symbol) ++
189
184
typeParams1.zip(typeParams2).map((tparam1, tparam2) => tparam1.symbol -> tparam2.symbol) ++
190
185
paramss1.flatten.zip(paramss2.flatten).map((param1, param2) => param1.symbol -> param2.symbol)
191
- val rhsMatch = (rhs1 =#= rhs2) given rhsEnv
192
186
193
- bindMatch && typeParmasMatch && paramssMatch && tptMatch && rhsMatch
187
+ bindMatch &&
188
+ typeParams1 =##= typeParams2 &&
189
+ matchLists(paramss1, paramss2)(_ =##= _) &&
190
+ tpt1 =#= tpt2 &&
191
+ withEnv(rhsEnv)(rhs1 =#= rhs2)
194
192
195
193
case (Lambda (_, tpt1), Lambda (_, tpt2)) =>
196
194
// TODO match tpt1 with tpt2?
197
195
matched
198
196
199
197
case (Match (scru1, cases1), Match (scru2, cases2)) =>
200
- val scrutineeMacth = scru1 =#= scru2
201
- val casesMatch = matchLists(cases1, cases2)(caseMatches)
202
- scrutineeMacth && casesMatch
198
+ scru1 =#= scru2 && matchLists(cases1, cases2)(caseMatches)
203
199
204
200
case (Try (body1, cases1, finalizer1), Try (body2, cases2, finalizer2)) =>
205
- val bodyMacth = body1 =#= body2
206
- val casesMatch = matchLists(cases1, cases2)(caseMatches)
207
- val finalizerMatch = treeOptMatches(finalizer1, finalizer2)
208
- bodyMacth && casesMatch && finalizerMatch
201
+ body1 =#= body2 && matchLists(cases1, cases2)(caseMatches) && treeOptMatches(finalizer1, finalizer2)
209
202
210
203
// Ignore type annotations
211
204
case (Annotated (tpt, _), _) =>
@@ -247,9 +240,9 @@ object Matcher {
247
240
def caseMatches (scrutinee : CaseDef , pattern : CaseDef ) given Env : Matching = {
248
241
val (caseEnv, patternMatch) = scrutinee.pattern =%= pattern.pattern
249
242
withEnv(caseEnv) {
250
- val guardMatch = treeOptMatches(scrutinee.guard, pattern.guard)
251
- val rhsMatch = scrutinee.rhs =#= pattern.rhs
252
- patternMatch && guardMatch && rhsMatch
243
+ patternMatch &&
244
+ treeOptMatches( scrutinee.guard, pattern.guard) &&
245
+ scrutinee.rhs =#= pattern.rhs
253
246
}
254
247
}
255
248
@@ -276,10 +269,8 @@ object Matcher {
276
269
(body1 =%= body2) given bindEnv
277
270
278
271
case (Pattern .Unapply (fun1, implicits1, patterns1), Pattern .Unapply (fun2, implicits2, patterns2)) =>
279
- val funMatch = fun1 =#= fun2
280
- val implicitsMatch = implicits1 =##= implicits2
281
272
val (patEnv, patternsMatch) = foldPatterns(patterns1, patterns2)
282
- (patEnv, funMatch && implicitsMatch && patternsMatch)
273
+ (patEnv, fun1 =#= fun2 && implicits1 =##= implicits2 && patternsMatch)
283
274
284
275
case (Pattern .Alternatives (patterns1), Pattern .Alternatives (patterns2)) =>
285
276
foldPatterns(patterns1, patterns2)
0 commit comments