diff options
author | Martin Odersky <odersky@gmail.com> | 2009-11-24 15:50:06 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2009-11-24 15:50:06 +0000 |
commit | 4a1b22e19fcca892917868beb355daef27dc7b8f (patch) | |
tree | a089be4378af8d48fd1a4d2e6ae1e11b75666bff /src | |
parent | d6b43c4b48dceb4ba6682c4a17dae02a0bc7f138 (diff) | |
download | scala-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.scala | 15 |
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) |