summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-11-24 15:50:06 +0000
committerMartin Odersky <odersky@gmail.com>2009-11-24 15:50:06 +0000
commit4a1b22e19fcca892917868beb355daef27dc7b8f (patch)
treea089be4378af8d48fd1a4d2e6ae1e11b75666bff /src
parentd6b43c4b48dceb4ba6682c4a17dae02a0bc7f138 (diff)
downloadscala-4a1b22e19fcca892917868beb355daef27dc7b8f.tar.gz
scala-4a1b22e19fcca892917868beb355daef27dc7b8f.tar.bz2
scala-4a1b22e19fcca892917868beb355daef27dc7b8f.zip
Closed #2629 #2639 #2669
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Types.scala15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala
index bbbf4dfdec..823ed8ed6c 100644
--- a/src/compiler/scala/tools/nsc/symtab/Types.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Types.scala
@@ -4321,15 +4321,21 @@ A type's typeSymbol should never be inspected directly.
if (bound.typeSymbol != AnyClass)
tvar addHiBound bound.instantiateTypeParams(tparams, tvars)
for (tparam2 <- tparams)
- if (tparam2.info.bounds.lo =:= tparam.tpe) // declaration tp2 :> tparam implies ?tparam <: tp2
- tvar addHiBound tparam2.tpe.instantiateTypeParams(tparams, tvars)
+ tparam2.info.bounds.lo.dealias match {
+ case TypeRef(_, `tparam`, _) =>
+ tvar addHiBound tparam2.tpe.instantiateTypeParams(tparams, tvars)
+ case _ =>
+ }
} else {
if (bound.typeSymbol != NothingClass && bound.typeSymbol != tparam) {
tvar addLoBound bound.instantiateTypeParams(tparams, tvars)
}
for (tparam2 <- tparams)
- if (tparam2.info.bounds.hi =:= tparam.tpe)
- tvar addLoBound tparam2.tpe.instantiateTypeParams(tparams, tvars)
+ tparam2.info.bounds.hi.dealias match {
+ case TypeRef(_, `tparam`, _) =>
+ tvar addLoBound tparam2.tpe.instantiateTypeParams(tparams, tvars)
+ case _ =>
+ }
}
}
tvar.constr.inst = NoType // necessary because hibounds/lobounds may contain tvar
@@ -4345,6 +4351,7 @@ A type's typeSymbol should never be inspected directly.
}
}
+ // println("solving "+tvars+"/"+tparams+"/"+(tparams map (_.info)))
for ((tvar, (tparam, variance)) <- config)
solveOne(tvar, tparam, variance)