@@ -1017,13 +1017,19 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] {
10171017 else if (tp1 eq tp2) true
10181018 else {
10191019 val saved = constraint
1020+ var savedGadt : GadtConstraint = null
1021+ if (ctx.mode.is(Mode .GADTflexible )) savedGadt = ctx.gadt.fresh
10201022 val savedSuccessCount = successCount
10211023 try {
10221024 recCount = recCount + 1
10231025 if (recCount >= Config .LogPendingSubTypesThreshold ) monitored = true
10241026 val result = if (monitored) monitoredIsSubType else firstTry
10251027 recCount = recCount - 1
1026- if (! result) state.resetConstraintTo(saved)
1028+ if (! result) {
1029+ state.resetConstraintTo(saved)
1030+ if (savedGadt ne null )
1031+ ctx.gadt.restore(savedGadt)
1032+ }
10271033 else if (recCount == 0 && needsGc) {
10281034 state.gc()
10291035 needsGc = false
@@ -2093,18 +2099,18 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] {
20932099 }
20942100
20952101 def notIntersection (tp : Type , pt : Type ): Boolean =
2096- trace(i " notIntersection( $tp, $pt) " )
2102+ // trace.force (i"notIntersection($tp, $pt)")
20972103 {
2104+ import config .Printers .debug
20982105 import typer .Inferencing ._
20992106
21002107 def incompatibleClasses : Boolean = {
21012108 import Flags ._
2102- val tpClassSym = tp.classSymbol
2103- val ptClassSym = pt.classSymbol
2104- println(i " tpClassSym= $tpClassSym, fin= ${tpClassSym.is(Final )}" )
2105- println(i " ptClassSym= $ptClassSym, fin= ${ptClassSym.is(Final )}" )
2109+ val tpClassSym = tp.widenSingleton. classSymbol
2110+ val ptClassSym = pt.widenSingleton. classSymbol
2111+ debug. println(i " tpClassSym= $tpClassSym, fin= ${tpClassSym.is(Final )}" )
2112+ debug. println(i " pt= $pt { ${pt.getClass} }, ptClassSym= $ptClassSym, fin= ${ptClassSym.is(Final )}" )
21062113 tpClassSym.exists && ptClassSym.exists && {
2107- println(" here" )
21082114 if (tpClassSym.is(Final )) ! tpClassSym.derivesFrom(ptClassSym)
21092115 else if (ptClassSym.is(Final )) ! ptClassSym.derivesFrom(tpClassSym)
21102116 else if (! tpClassSym.is(Flags .Trait ) && ! ptClassSym.is(Flags .Trait ))
@@ -2114,7 +2120,7 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] {
21142120 }
21152121
21162122 def loop (tp : Type ): Boolean =
2117- trace.force(i " loop( $tp) // ${tp.toString}" )
2123+ // trace.force(i"loop($tp) // ${tp.toString}")
21182124 {
21192125 if (constrainPatternType(pt, tp)) true
21202126 else if (incompatibleClasses) {
@@ -2130,7 +2136,7 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] {
21302136 case tp @ AppliedType (tycon : TypeRef , _) if tycon.symbol.isClass =>
21312137 val ptClassSym = pt.classSymbol
21322138 def firstParentSharedWithPt (tp : Type , tpClassSym : ClassSymbol ): Symbol =
2133- trace.force(i " f( $tp) " )
2139+ // trace.force(i"f($tp)")
21342140 {
21352141 var parents = tpClassSym.info.parents
21362142// println(i"parents of $tpClassSym = $parents%, %")
0 commit comments