diff options
Diffstat (limited to 'src/dotty')
-rw-r--r-- | src/dotty/tools/dotc/core/Constraint.scala | 5 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/TyperState.scala | 3 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/Constraint.scala b/src/dotty/tools/dotc/core/Constraint.scala index 64fb8764e..d3d19ec30 100644 --- a/src/dotty/tools/dotc/core/Constraint.scala +++ b/src/dotty/tools/dotc/core/Constraint.scala @@ -66,7 +66,10 @@ class Constraint(val myMap: SimpleMap[PolyType, Array[Type]]) extends Showable { def typeVarOfParam(param: PolyParam): Type = { val entries = myMap(param.binder) if (entries == null) NoType - else typeVar(entries, param.paramNum) + else { + val tvar = typeVar(entries, param.paramNum) + if (tvar != null) tvar else NoType + } } /** A new constraint which is derived from this constraint by adding or replacing diff --git a/src/dotty/tools/dotc/core/TyperState.scala b/src/dotty/tools/dotc/core/TyperState.scala index a4b365b17..65cebf967 100644 --- a/src/dotty/tools/dotc/core/TyperState.scala +++ b/src/dotty/tools/dotc/core/TyperState.scala @@ -27,6 +27,9 @@ class TyperState(val reporter: Reporter) extends DotClass with Showable { */ def instType(tvar: TypeVar): Type = constraint.at(tvar.origin) match { case _: TypeBounds => NoType + case tp: PolyParam => + var tvar1 = constraint.typeVarOfParam(tp) + if (tvar1.exists) tvar1 else tp case tp => tp } |