diff options
author | Martin Odersky <odersky@gmail.com> | 2014-12-13 11:33:26 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-12-13 11:33:31 +0100 |
commit | 179b9cc31552408c01928e1fca0e0af2a7453843 (patch) | |
tree | a06a049da3c51a942a8c591d8a152866af411c28 /src | |
parent | 7cdf3d0dc5709634825b1300d77d1a0ef01c69fa (diff) | |
download | dotty-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.scala | 7 |
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) || { |