aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-12-13 11:33:26 +0100
committerMartin Odersky <odersky@gmail.com>2014-12-13 11:33:31 +0100
commit179b9cc31552408c01928e1fca0e0af2a7453843 (patch)
treea06a049da3c51a942a8c591d8a152866af411c28 /src
parent7cdf3d0dc5709634825b1300d77d1a0ef01c69fa (diff)
downloaddotty-179b9cc31552408c01928e1fca0e0af2a7453843.tar.gz
dotty-179b9cc31552408c01928e1fca0e0af2a7453843.tar.bz2
dotty-179b9cc31552408c01928e1fca0e0af2a7453843.zip
Fix subtyping of null and refined types.
Diffstat (limited to 'src')
-rw-r--r--src/dotty/tools/dotc/core/TypeComparer.scala7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala
index 2140f9bfe..eddf0b3e9 100644
--- a/src/dotty/tools/dotc/core/TypeComparer.scala
+++ b/src/dotty/tools/dotc/core/TypeComparer.scala
@@ -777,8 +777,13 @@ class TypeComparer(initctx: Context) extends DotClass {
case TypeBounds(lo1, hi1) =>
isSubType(hi1, tp2)
case _ =>
+ def isNullable(tp: Type): Boolean = tp.dealias match {
+ case tp: TypeRef => tp.symbol.isNullableClass
+ case RefinedType(parent, _) => isNullable(parent)
+ case _ => false
+ }
(tp1.symbol eq NothingClass) && tp2.isInstanceOf[ValueType] ||
- (tp1.symbol eq NullClass) && tp2.dealias.typeSymbol.isNullableClass
+ (tp1.symbol eq NullClass) && isNullable(tp2)
}
case tp1: SingletonType =>
isNewSubType(tp1.underlying.widenExpr, tp2) || {