aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-11-21 15:59:59 +0100
committerMartin Odersky <odersky@gmail.com>2014-11-24 14:57:49 +0100
commitf6ebe1ec66220db511d0080f3807c3a0512fc01c (patch)
treeb6917213086a870b17c8c51ae50bc1e7c73253a4
parent832957339c850a64fb7093f3ed6b19c91c5bdfac (diff)
downloaddotty-f6ebe1ec66220db511d0080f3807c3a0512fc01c.tar.gz
dotty-f6ebe1ec66220db511d0080f3807c3a0512fc01c.tar.bz2
dotty-f6ebe1ec66220db511d0080f3807c3a0512fc01c.zip
Take off the training wheels for refined type comparisons.
-rw-r--r--src/dotty/tools/dotc/core/TypeComparer.scala21
1 files changed, 2 insertions, 19 deletions
diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala
index 51c6f7271..2140f9bfe 100644
--- a/src/dotty/tools/dotc/core/TypeComparer.scala
+++ b/src/dotty/tools/dotc/core/TypeComparer.scala
@@ -690,31 +690,14 @@ class TypeComparer(initctx: Context) extends DotClass {
def compareRefined: Boolean = tp1.widen match {
case tp1 @ RefinedType(parent1, name1) if name1 == name2 && name1.isTypeName =>
normalizedInfo(tp1) match {
- case bounds1 @ TypeBounds(lo1, hi1) =>
- val fastResult = isSubType(bounds1, tp2.refinedInfo) && {
+ case bounds1 @ TypeBounds(lo1, hi1) if lo1 eq hi1 =>
+ isSubType(bounds1, tp2.refinedInfo) && {
val saved = pendingRefinedBases
try {
addPendingName(name1, tp1, tp2)
isSubType(parent1, parent2)
} finally pendingRefinedBases = saved
}
- if (lo1 eq hi1) fastResult
- else {
- val slowResult = compareRefinedSlow
- if (fastResult != slowResult) {
- println(i"!!! difference for $tp1 <: $tp2, fast = $fastResult, ${memberMatches(tp1.member(name1))}, slow = $slowResult ${lo1.getClass} ${hi1.getClass}")
- println(TypeComparer.explained(implicit ctx => tp1 <:< parent2))
- val tp1r = rebaseQual(tp1, name1)
- println(s"rebased = $tp1r / ${narrowRefined(tp1r)}")
- val mbr = narrowRefined(tp1r) member name1
- println(i"member = $mbr : ${mbr.info} / ${mbr.getClass}")
- val mbr2 = (tp1r) member name1
- println(i"member = $mbr2 : ${mbr2.info} / ${mbr2.getClass}")
- println(TypeComparer.explained(implicit ctx => mbr.info <:< tp2.refinedInfo))
- compareRefinedSlow
- }
- slowResult
- }
case _ =>
compareRefinedSlow
}