@@ -1033,13 +1033,19 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] {
1033
1033
else if (tp1 eq tp2) true
1034
1034
else {
1035
1035
val saved = constraint
1036
+ var savedGadt : GadtConstraint = null
1037
+ if (ctx.mode.is(Mode .GADTflexible )) savedGadt = ctx.gadt.fresh
1036
1038
val savedSuccessCount = successCount
1037
1039
try {
1038
1040
recCount = recCount + 1
1039
1041
if (recCount >= Config .LogPendingSubTypesThreshold ) monitored = true
1040
1042
val result = if (monitored) monitoredIsSubType else firstTry
1041
1043
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
+ }
1043
1049
else if (recCount == 0 && needsGc) {
1044
1050
state.gc()
1045
1051
needsGc = false
@@ -2132,18 +2138,18 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] {
2132
2138
}
2133
2139
2134
2140
def notIntersection (tp : Type , pt : Type ): Boolean =
2135
- trace(i " notIntersection( $tp, $pt) " )
2141
+ // trace.force (i"notIntersection($tp, $pt)")
2136
2142
{
2143
+ import config .Printers .debug
2137
2144
import typer .Inferencing ._
2138
2145
2139
2146
def incompatibleClasses : Boolean = {
2140
2147
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 )}" )
2145
2152
tpClassSym.exists && ptClassSym.exists && {
2146
- println(" here" )
2147
2153
if (tpClassSym.is(Final )) ! tpClassSym.derivesFrom(ptClassSym)
2148
2154
else if (ptClassSym.is(Final )) ! ptClassSym.derivesFrom(tpClassSym)
2149
2155
else if (! tpClassSym.is(Flags .Trait ) && ! ptClassSym.is(Flags .Trait ))
@@ -2153,7 +2159,7 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] {
2153
2159
}
2154
2160
2155
2161
def loop (tp : Type ): Boolean =
2156
- trace.force(i " loop( $tp) // ${tp.toString}" )
2162
+ // trace.force(i"loop($tp) // ${tp.toString}")
2157
2163
{
2158
2164
if (constrainPatternType(pt, tp)) true
2159
2165
else if (incompatibleClasses) {
@@ -2169,7 +2175,7 @@ class TypeComparer(initctx: Context) extends ConstraintHandling[AbsentContext] {
2169
2175
case tp @ AppliedType (tycon : TypeRef , _) if tycon.symbol.isClass =>
2170
2176
val ptClassSym = pt.classSymbol
2171
2177
def firstParentSharedWithPt (tp : Type , tpClassSym : ClassSymbol ): Symbol =
2172
- trace.force(i " f( $tp) " )
2178
+ // trace.force(i"f($tp)")
2173
2179
{
2174
2180
var parents = tpClassSym.info.parents
2175
2181
// println(i"parents of $tpClassSym = $parents%, %")
0 commit comments