aboutsummaryrefslogtreecommitdiff
path: root/src/dotty
diff options
context:
space:
mode:
authorodersky <odersky@gmail.com>2015-11-17 22:02:10 +0100
committerodersky <odersky@gmail.com>2015-11-17 22:02:10 +0100
commitda97bfb6e1284f906d529b62ca4c1c69e15c140e (patch)
treeec57941728389450297195da83377033db0691a7 /src/dotty
parent57d05d3cc2456bcb7bfa743ad664690ad5a3aaac (diff)
parent3ec504cf4586dc99964b1b049eae745077c20b37 (diff)
downloaddotty-da97bfb6e1284f906d529b62ca4c1c69e15c140e.tar.gz
dotty-da97bfb6e1284f906d529b62ca4c1c69e15c140e.tar.bz2
dotty-da97bfb6e1284f906d529b62ca4c1c69e15c140e.zip
Merge pull request #957 from dotty-staging/fix-#938
Fix #938
Diffstat (limited to 'src/dotty')
-rw-r--r--src/dotty/tools/dotc/core/Phases.scala4
-rw-r--r--src/dotty/tools/dotc/core/TypeComparer.scala3
-rw-r--r--src/dotty/tools/dotc/typer/TypeAssigner.scala7
3 files changed, 8 insertions, 6 deletions
diff --git a/src/dotty/tools/dotc/core/Phases.scala b/src/dotty/tools/dotc/core/Phases.scala
index 8d5ec08f7..970a9297a 100644
--- a/src/dotty/tools/dotc/core/Phases.scala
+++ b/src/dotty/tools/dotc/core/Phases.scala
@@ -7,6 +7,7 @@ import dotty.tools.backend.jvm.{LabelDefs, GenBCode}
import util.DotClass
import DenotTransformers._
import Denotations._
+import Decorators._
import config.Printers._
import scala.collection.mutable.{ListBuffer, ArrayBuffer}
import dotty.tools.dotc.transform.TreeTransforms.{TreeTransformer, MiniPhase, TreeTransform}
@@ -121,10 +122,9 @@ object Phases {
phase
}
squashedPhases += phaseToAdd
- val shouldAddYCheck = YCheckAfter.exists(nm => phaseToAdd.phaseName.contains(nm)) || YCheckAll
+ val shouldAddYCheck = YCheckAfter.containsPhase(phaseToAdd) || YCheckAll
if (shouldAddYCheck) {
val checker = new TreeChecker
-
squashedPhases += checker
}
}
diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala
index 2045de3ce..6e2346710 100644
--- a/src/dotty/tools/dotc/core/TypeComparer.scala
+++ b/src/dotty/tools/dotc/core/TypeComparer.scala
@@ -488,6 +488,9 @@ class TypeComparer(initctx: Context) extends DotClass with ConstraintHandling {
case _ => tp2 isRef ObjectClass
}
compareJavaArray
+ case tp1: ExprType if ctx.phase.id > ctx.gettersPhase.id =>
+ // getters might have converted T to => T, need to compensate.
+ isSubType(tp1.widenExpr, tp2)
case _ =>
false
}
diff --git a/src/dotty/tools/dotc/typer/TypeAssigner.scala b/src/dotty/tools/dotc/typer/TypeAssigner.scala
index af5fdd428..f7cda1ef6 100644
--- a/src/dotty/tools/dotc/typer/TypeAssigner.scala
+++ b/src/dotty/tools/dotc/typer/TypeAssigner.scala
@@ -46,10 +46,9 @@ trait TypeAssigner {
// TODO: measure the cost of using `existsPart`, and if necessary replace it
// by a `TypeAccumulator` where we have set `stopAtStatic = true`.
tp existsPart {
- case tp: NamedType =>
- forbidden contains tp.symbol
- case _ =>
- false
+ case tp: NamedType => forbidden contains tp.symbol
+ case tp: ThisType => forbidden contains tp.cls
+ case _ => false
}
def apply(tp: Type): Type = tp match {
case tp: TermRef if toAvoid(tp) && variance > 0 =>