summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2010-05-11 09:34:56 +0000
committerMartin Odersky <odersky@gmail.com>2010-05-11 09:34:56 +0000
commit57a0b3d1657468c037751a2a6c833f6814ae78c0 (patch)
tree2cb41c8c6281270b7e4a4f965bd72cd3fc39852e /src/compiler
parente6ff7d3557fee8f3d7dcb6355dc218e8eaca13b8 (diff)
downloadscala-57a0b3d1657468c037751a2a6c833f6814ae78c0.tar.gz
scala-57a0b3d1657468c037751a2a6c833f6814ae78c0.tar.bz2
scala-57a0b3d1657468c037751a2a6c833f6814ae78c0.zip
Closes #t3363. Review by extempore.
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Types.scala11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala
index 8f1ece5b9e..dc59587c4a 100644
--- a/src/compiler/scala/tools/nsc/symtab/Types.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Types.scala
@@ -1179,18 +1179,19 @@ trait Types extends reflect.generic.Types { self: SymbolTable =>
if (!isValidForBaseClasses(period)) {
if (parents.exists(_.exists(_.isInstanceOf[TypeVar]))) {
// rename type vars to fresh type params, take base type sequence of
- // resulting type, and rename back allthe entries in thats sequence
+ // resulting type, and rename back all the entries in that sequence
var tvs = Set[TypeVar]()
for (p <- parents)
for (t <- p) t match {
case tv: TypeVar => tvs += tv
case _ =>
}
- val varToParamMap = (Map[Type, Symbol]() /: tvs)((m, tv) => m + (tv -> tv.origin.typeSymbol.cloneSymbol))
- val paramToVarMap = Map[Symbol, Type]() ++ (varToParamMap map { case (t, tsym) => (tsym -> t) })
+ val varToParamMap: Map[Type, Symbol] = tvs map (tv => tv -> tv.origin.typeSymbol.cloneSymbol) toMap
+ val paramToVarMap = varToParamMap map (_.swap)
+
val varToParam = new TypeMap {
- def apply(tp: Type): Type = tp match {
- case tv: TypeVar => varToParamMap(tp).tpe
+ def apply(tp: Type) = varToParamMap get tp match {
+ case Some(sym) => sym.tpe
case _ => mapOver(tp)
}
}