@@ -351,14 +351,25 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
351
351
Typ (c.value.asInstanceOf [Symbol ].termRef, false )
352
352
else
353
353
Typ (ConstantType (c), false )
354
- case pat : Ident if isBackquoted(pat) => Typ (pat.tpe, false )
354
+
355
+ case pat : Ident if isBackquoted(pat) =>
356
+ Typ (pat.tpe, false )
357
+
355
358
case Ident (nme.WILDCARD ) =>
356
- Or (Typ (pat.tpe.stripAnnots, false ) :: constantNullSpace :: Nil )
359
+ Or (Typ (erase(pat.tpe.stripAnnots), false ) :: constantNullSpace :: Nil )
360
+
357
361
case Ident (_) | Select (_, _) =>
358
362
Typ (erase(pat.tpe.stripAnnots), false )
359
- case Alternative (trees) => Or (trees.map(project(_)))
360
- case Bind (_, pat) => project(pat)
361
- case SeqLiteral (pats, _) => projectSeq(pats)
363
+
364
+ case Alternative (trees) =>
365
+ Or (trees.map(project(_)))
366
+
367
+ case Bind (_, pat) =>
368
+ project(pat)
369
+
370
+ case SeqLiteral (pats, _) =>
371
+ projectSeq(pats)
372
+
362
373
case UnApply (fun, _, pats) =>
363
374
val (fun1, _, _) = decomposeCall(fun)
364
375
val funRef = fun1.tpe.asInstanceOf [TermRef ]
@@ -374,15 +385,22 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
374
385
}
375
386
else
376
387
Prod (erase(pat.tpe.stripAnnots), funRef, pats.map(project), isIrrefutableUnapply(fun, pats.length))
377
- case Typed (pat @ UnApply (_, _, _), _) => project(pat)
388
+
389
+ case Typed (pat @ UnApply (_, _, _), _) =>
390
+ project(pat)
391
+
378
392
case Typed (expr, _) =>
379
393
Typ (erase(expr.tpe.stripAnnots), true )
394
+
380
395
case This (_) =>
381
396
Typ (pat.tpe.stripAnnots, false )
397
+
382
398
case EmptyTree => // default rethrow clause of try/catch, check tests/patmat/try2.scala
383
399
Typ (WildcardType , false )
400
+
384
401
case Block (Nil , expr) =>
385
402
project(expr)
403
+
386
404
case _ =>
387
405
// Pattern is an arbitrary expression; assume a skolem (i.e. an unknown value) of the pattern type
388
406
Typ (pat.tpe.narrow, false )
@@ -490,6 +508,8 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
490
508
val unappSym = unapp.symbol
491
509
def caseClass = unappSym.owner.linkedClass
492
510
511
+ // println("scrutineeTp = " + scrutineeTp.show)
512
+
493
513
lazy val caseAccessors = caseClass.caseAccessors.filter(_.is(Method ))
494
514
495
515
def isSyntheticScala2Unapply (sym : Symbol ) =
@@ -503,6 +523,8 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
503
523
val mt = pt.instantiate(tvars).asInstanceOf [MethodType ]
504
524
scrutineeTp <:< mt.paramInfos(0 )
505
525
instantiateSelected(mt, tvars)
526
+ // isFullyDefined(mt, ForceDegree.flipBottom)
527
+ // println("mt = " + mt.show)
506
528
mt
507
529
}
508
530
}
@@ -648,7 +670,7 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
648
670
case _ => tp.show
649
671
}
650
672
651
- def refine (tp : Type ): String = tp.stripAnnots match {
673
+ def refine (tp : Type ): String = tp.stripAnnots.stripTypeVar match {
652
674
case tp : RefinedType => refine(tp.parent)
653
675
case tp : AppliedType =>
654
676
refine(tp.typeConstructor) + (
@@ -744,7 +766,7 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
744
766
val sym = fun.symbol
745
767
val isUnapplySeq = sym.name.eq(nme.unapplySeq)
746
768
val paramsStr = params.map(doShow(_, flattenList = isUnapplySeq)).mkString(" (" , " , " , " )" )
747
- showType(sym.owner.typeRef ) + paramsStr
769
+ showType(fun.prefix ) + paramsStr
748
770
}
749
771
case Or (_) =>
750
772
throw new Exception (" incorrect flatten result " + s)
0 commit comments