aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/Types.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-05-07 18:26:37 +0200
committerSamuel Gruetter <samuel.gruetter@epfl.ch>2014-05-20 13:38:48 +0200
commitf7910005038c188e573e8d1a42ff3e31c69c90c1 (patch)
tree936ade866ca937ae2fda21cbc6187f0dfc34dca9 /src/dotty/tools/dotc/core/Types.scala
parentc2d5246bdb33d60d3eaff62a539d01368124d859 (diff)
downloaddotty-f7910005038c188e573e8d1a42ff3e31c69c90c1.tar.gz
dotty-f7910005038c188e573e8d1a42ff3e31c69c90c1.tar.bz2
dotty-f7910005038c188e573e8d1a42ff3e31c69c90c1.zip
Better printing of anonymous classes.
Used to be just $anon, now is `Ps { ... }`, where `Ps` are the instantiated parents of the anonymous class.
Diffstat (limited to 'src/dotty/tools/dotc/core/Types.scala')
-rw-r--r--src/dotty/tools/dotc/core/Types.scala11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/core/Types.scala b/src/dotty/tools/dotc/core/Types.scala
index 36b546230..89facfee5 100644
--- a/src/dotty/tools/dotc/core/Types.scala
+++ b/src/dotty/tools/dotc/core/Types.scala
@@ -2002,12 +2002,23 @@ object Types {
// cached because baseType needs parents
private var parentsCache: List[TypeRef] = null
+ /** The parent type refs as seen from the given prefix */
override def parents(implicit ctx: Context): List[TypeRef] = {
if (parentsCache == null)
parentsCache = cls.classParents.mapConserve(rebase(_).asInstanceOf[TypeRef])
parentsCache
}
+ /** The parent types with all type arguments */
+ def instantiatedParents(implicit ctx: Context): List[Type] =
+ parents mapConserve { pref =>
+ ((pref: Type) /: pref.classSymbol.typeParams) { (parent, tparam) =>
+ val targSym = decls.lookup(tparam.name)
+ if (targSym.exists) RefinedType(parent, targSym.name, targSym.info)
+ else parent
+ }
+ }
+
def derivedClassInfo(prefix: Type)(implicit ctx: Context) =
if (prefix eq this.prefix) this
else ClassInfo(prefix, cls, classParents, decls, selfInfo)