@@ -764,6 +764,7 @@ class Typer extends Namer
764
764
def handlePattern : Tree = {
765
765
val tpt1 = typedTpt
766
766
if (! ctx.isAfterTyper && pt != defn.ImplicitScrutineeTypeRef )
767
+ checkScrutable(pt, tree.srcPos, pattern = true )
767
768
withMode(Mode .GadtConstraintInference ) {
768
769
TypeComparer .constrainPatternType(tpt1.tpe, pt)
769
770
}
@@ -1294,8 +1295,6 @@ class Typer extends Namer
1294
1295
assignType(cpy.Closure (tree)(env1, meth1, target), meth1, target)
1295
1296
}
1296
1297
1297
- protected def checkScrutable (sel : Tree )(using Context ): Unit = adapt(sel, defn.ScrutableType )
1298
-
1299
1298
def typedMatch (tree : untpd.Match , pt : Type )(using Context ): Tree =
1300
1299
tree.selector match {
1301
1300
case EmptyTree =>
@@ -1317,10 +1316,9 @@ class Typer extends Namer
1317
1316
typed(desugar.makeCaseLambda(tree.cases, checkMode, protoFormals.length).withSpan(tree.span), pt)
1318
1317
}
1319
1318
case _ =>
1319
+ if tree.isInline then checkInInlineContext(" inline match" , tree.srcPos)
1320
1320
val sel1 = typedExpr(tree.selector)
1321
1321
val selType = fullyDefinedType(sel1.tpe, " pattern selector" , tree.span).widen
1322
- if tree.isInline then checkInInlineContext(" inline match" , tree.srcPos)
1323
- else checkScrutable(sel1)
1324
1322
1325
1323
/** Extractor for match types hidden behind an AppliedType/MatchAlias */
1326
1324
object MatchTypeInDisguise {
@@ -3531,6 +3529,7 @@ class Typer extends Namer
3531
3529
case _ => pt.isScrutable
3532
3530
3533
3531
if isScrutableTarget && ! wtp.derivesFrom(defn.ScrutableClass ) then
3532
+ checkScrutable(wtp, tree.srcPos, pattern = false )
3534
3533
val target = AndType (tree.tpe.widenExpr, defn.ScrutableType )
3535
3534
if target <:< pt then
3536
3535
return readapt(tree.cast(target))
0 commit comments