From db48496502eb1d86f54365b5a815e45a52f4819d Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 9 Dec 2014 12:30:46 +0100 Subject: TypeAlias unapply accepts only Type Aliases --- src/dotty/tools/dotc/core/Types.scala | 8 +++++--- src/dotty/tools/dotc/core/Uniques.scala | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/dotty/tools/dotc/core/Types.scala b/src/dotty/tools/dotc/core/Types.scala index e41e7e907..b67aac1fe 100644 --- a/src/dotty/tools/dotc/core/Types.scala +++ b/src/dotty/tools/dotc/core/Types.scala @@ -2467,9 +2467,11 @@ object Types { override def computeHash = doHash(variance, lo, hi) } - class TypeAlias(val alias: Type, override val variance: Int, hc: Int) extends TypeBounds(alias, alias) { + abstract class TypeAlias(val alias: Type, override val variance: Int) extends TypeBounds(alias, alias) + + class CachedTypeAlias(alias: Type, variance: Int, hc: Int) extends TypeAlias(alias, variance) { myHash = hc - override def computeHash = unsupported("computeHash") + override def computeHash = doHash(variance, lo, hi) } object TypeBounds { @@ -2488,7 +2490,7 @@ object Types { def apply(alias: Type, variance: Int = 0)(implicit ctx: Context) = ctx.uniqueTypeAliases.enterIfNew(alias, variance) def unapply(tp: Type): Option[Type] = tp match { - case TypeBounds(lo, hi) if lo eq hi => Some(lo) + case tp: TypeAlias => Some(tp.alias) case _ => None } } diff --git a/src/dotty/tools/dotc/core/Uniques.scala b/src/dotty/tools/dotc/core/Uniques.scala index fee217dd3..fcf2df30b 100644 --- a/src/dotty/tools/dotc/core/Uniques.scala +++ b/src/dotty/tools/dotc/core/Uniques.scala @@ -80,7 +80,7 @@ object Uniques { def enterIfNew(alias: Type, variance: Int): TypeAlias = { val h = doHash(variance, alias) if (monitored) recordCaching(h, classOf[TypeAlias]) - def newAlias = new TypeAlias(alias, variance, h) + def newAlias = new CachedTypeAlias(alias, variance, h) if (h == NotCached) newAlias else { val r = findPrevious(h, alias, variance) -- cgit v1.2.3