diff options
author | Martin Odersky <odersky@gmail.com> | 2013-11-15 12:25:13 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-11-15 12:25:13 +0100 |
commit | 18da7faf93ffaefa0ee7e37211c740c1f34ddfa2 (patch) | |
tree | 272e28de24a61720d8cf278124c325afdfc0823c /src/dotty/tools/dotc/core/TypeComparer.scala | |
parent | 7a9e632c64865084e6e8559a0e6ea90e2b706a8b (diff) | |
download | dotty-18da7faf93ffaefa0ee7e37211c740c1f34ddfa2.tar.gz dotty-18da7faf93ffaefa0ee7e37211c740c1f34ddfa2.tar.bz2 dotty-18da7faf93ffaefa0ee7e37211c740c1f34ddfa2.zip |
Tweaks to adaptation and interpolation
1. Needed to interpolate aftyer implicit parameyters are added.
2. Also needed to avoid constraining typevars if compared against selection proto.
Original coder example now typechecks.
Diffstat (limited to 'src/dotty/tools/dotc/core/TypeComparer.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/TypeComparer.scala | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala index 8e0b1d01c..22d0a1d0b 100644 --- a/src/dotty/tools/dotc/core/TypeComparer.scala +++ b/src/dotty/tools/dotc/core/TypeComparer.scala @@ -216,7 +216,7 @@ class TypeComparer(initctx: Context) extends DotClass { case tp2: TypeVar => (tp1 eq tp2) || isSubType(tp1, tp2.underlying) case tp2: ProtoType => - tp2.isMatchedBy(tp1) + isMatchedByProto(tp2, tp1) case tp2: WildcardType => tp2.optBounds match { case TypeBounds(_, hi) => isSubType(tp1, hi) @@ -388,6 +388,12 @@ class TypeComparer(initctx: Context) extends DotClass { case _ => param.binder.paramBounds(param.paramNum) } + /** Defer constraining type variables when comnpared against prototypes */ + def isMatchedByProto(proto: ProtoType, tp: Type) = tp.stripTypeVar match { + case tp: PolyParam if constraint(tp).exists => true + case _ => proto.isMatchedBy(tp) + } + /* not needed def isSubArgs(tps1: List[Type], tps2: List[Type], tparams: List[TypeSymbol]): Boolean = tparams match { case tparam :: tparams1 => |