@@ -1033,13 +1033,19 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] {
10331033 else if (tp1 eq tp2) true
10341034 else {
10351035 val saved = constraint
1036+ var savedGadt : GadtConstraint = null
1037+ if (ctx.mode.is(Mode .GADTflexible )) savedGadt = ctx.gadt.fresh
10361038 val savedSuccessCount = successCount
10371039 try {
10381040 recCount = recCount + 1
10391041 if (recCount >= Config .LogPendingSubTypesThreshold ) monitored = true
10401042 val result = if (monitored) monitoredIsSubType else firstTry
10411043 recCount = recCount - 1
1042- if (! result) state.resetConstraintTo(saved)
1044+ if (! result) {
1045+ state.resetConstraintTo(saved)
1046+ if (savedGadt ne null )
1047+ ctx.gadt.restore(savedGadt)
1048+ }
10431049 else if (recCount == 0 && needsGc) {
10441050 state.gc()
10451051 needsGc = false
@@ -2132,18 +2138,18 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] {
21322138 }
21332139
21342140 def notIntersection (tp : Type , pt : Type ): Boolean =
2135- trace(i " notIntersection( $tp, $pt) " )
2141+ // trace.force (i"notIntersection($tp, $pt)")
21362142 {
2143+ import config .Printers .debug
21372144 import typer .Inferencing ._
21382145
21392146 def incompatibleClasses : Boolean = {
21402147 import Flags ._
2141- val tpClassSym = tp.classSymbol
2142- val ptClassSym = pt.classSymbol
2143- println(i " tpClassSym= $tpClassSym, fin= ${tpClassSym.is(Final )}" )
2144- println(i " ptClassSym= $ptClassSym, fin= ${ptClassSym.is(Final )}" )
2148+ val tpClassSym = tp.widenSingleton. classSymbol
2149+ val ptClassSym = pt.widenSingleton. classSymbol
2150+ debug. println(i " tpClassSym= $tpClassSym, fin= ${tpClassSym.is(Final )}" )
2151+ debug. println(i " pt= $pt { ${pt.getClass} }, ptClassSym= $ptClassSym, fin= ${ptClassSym.is(Final )}" )
21452152 tpClassSym.exists && ptClassSym.exists && {
2146- println(" here" )
21472153 if (tpClassSym.is(Final )) ! tpClassSym.derivesFrom(ptClassSym)
21482154 else if (ptClassSym.is(Final )) ! ptClassSym.derivesFrom(tpClassSym)
21492155 else if (! tpClassSym.is(Flags .Trait ) && ! ptClassSym.is(Flags .Trait ))
@@ -2153,7 +2159,7 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] {
21532159 }
21542160
21552161 def loop (tp : Type ): Boolean =
2156- trace.force(i " loop( $tp) // ${tp.toString}" )
2162+ // trace.force(i"loop($tp) // ${tp.toString}")
21572163 {
21582164 if (constrainPatternType(pt, tp)) true
21592165 else if (incompatibleClasses) {
@@ -2169,7 +2175,7 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] {
21692175 case tp @ AppliedType (tycon : TypeRef , _) if tycon.symbol.isClass =>
21702176 val ptClassSym = pt.classSymbol
21712177 def firstParentSharedWithPt (tp : Type , tpClassSym : ClassSymbol ): Symbol =
2172- trace.force(i " f( $tp) " )
2178+ // trace.force(i"f($tp)")
21732179 {
21742180 var parents = tpClassSym.info.parents
21752181// println(i"parents of $tpClassSym = $parents%, %")
0 commit comments