aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/dotty/tools/dotc/core')
-rw-r--r--src/dotty/tools/dotc/core/Types.scala8
-rw-r--r--src/dotty/tools/dotc/core/Uniques.scala2
2 files changed, 6 insertions, 4 deletions
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)