diff options
author | Martin Odersky <odersky@gmail.com> | 2010-05-11 09:34:56 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2010-05-11 09:34:56 +0000 |
commit | 57a0b3d1657468c037751a2a6c833f6814ae78c0 (patch) | |
tree | 2cb41c8c6281270b7e4a4f965bd72cd3fc39852e /src/compiler | |
parent | e6ff7d3557fee8f3d7dcb6355dc218e8eaca13b8 (diff) | |
download | scala-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.scala | 11 |
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) } } |