@@ -337,13 +337,6 @@ object SpaceEngine {
337337 case pat : Ident if isBackquoted(pat) =>
338338 Typ (pat.tpe, decomposed = false )
339339
340- case Ident (nme.WILDCARD ) =>
341- val tp = pat.tpe.stripAnnots.widenSkolem
342- val isNullable = tp.isInstanceOf [FlexibleType ] || tp.classSymbol.isNullableClass
343- val tpSpace = Typ (erase(tp, isValue = true ), decomposed = false )
344- if isNullable then Or (tpSpace :: nullSpace :: Nil )
345- else tpSpace
346-
347340 case Ident (_) | Select (_, _) =>
348341 Typ (erase(pat.tpe.stripAnnots.widenSkolem, isValue = true ), decomposed = false )
349342
@@ -716,7 +709,6 @@ object SpaceEngine {
716709 else NoType
717710 }.filter(_.exists)
718711 parts
719- case tp : FlexibleType => List (tp.underlying, ConstantType (Constant (null )))
720712 case _ => ListOfNoType
721713 end rec
722714
@@ -939,11 +931,15 @@ object SpaceEngine {
939931 then project(OrType (selTyp, ConstantType (Constant (null )), soft = false ))
940932 else project(selTyp)
941933 var hadNullOnly = false
934+ def projectPat (pat : Tree ): Space =
935+ // Project toplevel wildcard pattern to nullable
936+ if isNullable && isWildcardArg(pat) then Or (project(pat) :: nullSpace :: Nil )
937+ else project(pat)
942938 @ tailrec def recur (cases : List [CaseDef ], prevs : List [Space ], deferred : List [Tree ]): Unit =
943939 cases match
944940 case Nil =>
945941 case CaseDef (pat, guard, _) :: rest =>
946- val curr = trace(i " project( $pat) " )(project (pat))
942+ val curr = trace(i " project( $pat) " )(projectPat (pat))
947943 val covered = trace(" covered" )(simplify(intersect(curr, targetSpace)))
948944 val prev = trace(" prev" )(simplify(Or (prevs)))
949945 if prev == Empty && covered == Empty then // defer until a case is reachable
0 commit comments