diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-12-20 11:32:15 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2016-01-04 11:20:42 +0100 |
commit | f0c6814a61768155d3e8c08093f365fce6360527 (patch) | |
tree | f84befaabcd01226135f955587b14bb718734136 /src | |
parent | a1a2961a3aba856f7753005541e439636ff1c5b6 (diff) | |
download | dotty-f0c6814a61768155d3e8c08093f365fce6360527.tar.gz dotty-f0c6814a61768155d3e8c08093f365fce6360527.tar.bz2 dotty-f0c6814a61768155d3e8c08093f365fce6360527.zip |
Allow comparisons between TypeRefs and ThisTypes.
Motivation comes from Linker:
List$.canBuildFrom is implemented as
ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]]
static type of field ReusableCBF here is
TypeRef(TypeRef(List$), GenericCanBuildFrom[Nothing])
but the ident ReusableCBF gets type
TypeRef(ThisType(List$), GenericCanBuildFrom[Nothing])
We already permit comparisons between static TermRefs and ThisTypes,
this change additionally allows TypeRefs to static modules to
become subtypes of ThisTypes of static modules.
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/core/TypeComparer.scala | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala index 163fa4919..ac4b8c366 100644 --- a/src/dotty/tools/dotc/core/TypeComparer.scala +++ b/src/dotty/tools/dotc/core/TypeComparer.scala @@ -218,7 +218,7 @@ class TypeComparer(initctx: Context) extends DotClass with ConstraintHandling { val cls1 = tp1.cls cls1.classInfo.selfType.derivesFrom(cls2) && cls2.classInfo.selfType.derivesFrom(cls1) - case tp1: TermRef if cls2.is(Module) && cls2.eq(tp1.widen.typeSymbol) => + case tp1: NamedType if cls2.is(Module) && cls2.eq(tp1.widen.typeSymbol) => cls2.isStaticOwner || isSubType(tp1.prefix, cls2.owner.thisType) || secondTry(tp1, tp2) |