diff options
author | Martin Odersky <odersky@gmail.com> | 2015-06-05 22:38:01 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-06-06 11:05:27 +0200 |
commit | 0ee8e506dac87bae6ec432b2cd277109df872145 (patch) | |
tree | 1a916c66c738c9005b534ed2efe48c382ccaa031 /src/dotty/tools/dotc/core/TypeComparer.scala | |
parent | 84bf5902dba61c88f1b50229bb3afa5a335ded94 (diff) | |
download | dotty-0ee8e506dac87bae6ec432b2cd277109df872145.tar.gz dotty-0ee8e506dac87bae6ec432b2cd277109df872145.tar.bz2 dotty-0ee8e506dac87bae6ec432b2cd277109df872145.zip |
Skolemize unstable prefixes in asSeenFrom
Skolemize unstable prefixes in asSeenFrom provided
- the prefix appears at least once in non-variant or contra-variant position
- we are in phase typer.
After typer, we have already established soundness, so there's no need to
do skolemization again. We can simply do the (otherwise unsound) substitution
from this-type to prefix.
Diffstat (limited to 'src/dotty/tools/dotc/core/TypeComparer.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/TypeComparer.scala | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala index 1f80a8a10..ea815f6c0 100644 --- a/src/dotty/tools/dotc/core/TypeComparer.scala +++ b/src/dotty/tools/dotc/core/TypeComparer.scala @@ -274,6 +274,11 @@ class TypeComparer(initctx: Context) extends DotClass with ConstraintHandling { case _ => thirdTry(tp1, tp2) } + case tp1: SkolemType => + tp2 match { + case tp2: SkolemType if !ctx.phase.isTyper && tp1.info <:< tp2.info => true + case _ => thirdTry(tp1, tp2) + } case tp1: TypeVar => isSubType(tp1.underlying, tp2) case tp1: WildcardType => |