aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-12-09 12:30:46 +0100
committerMartin Odersky <odersky@gmail.com>2014-12-10 18:51:54 +0100
commitdb48496502eb1d86f54365b5a815e45a52f4819d (patch)
treed0f1a7f5564d3fa3af2572f014fb64dacfea99a8 /src
parentd4d11fe7732e436178d7fe0350e116c646452cc4 (diff)
downloaddotty-db48496502eb1d86f54365b5a815e45a52f4819d.tar.gz
dotty-db48496502eb1d86f54365b5a815e45a52f4819d.tar.bz2
dotty-db48496502eb1d86f54365b5a815e45a52f4819d.zip
TypeAlias unapply accepts only Type Aliases
Diffstat (limited to 'src')
-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)