Skip to content

Commit

Permalink
Override setInst in AppliedTypeVar
Browse files Browse the repository at this point in the history
  • Loading branch information
joroKr21 committed Apr 28, 2018
1 parent 4ed9119 commit a50ccac
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions src/reflect/scala/reflect/internal/Types.scala
Expand Up @@ -3096,13 +3096,16 @@ trait Types
_constr: TypeConstraint,
zippedArgs: List[(Symbol, Type)]
) extends TypeVar(_origin, _constr) {

require(zippedArgs.nonEmpty, this)

override def params: List[Symbol] = zippedArgs map (_._1)
override def typeArgs: List[Type] = zippedArgs map (_._2)

override def safeToString: String = super.safeToString + typeArgs.map(_.safeToString).mkString("[", ", ", "]")
override def setInst(tp: Type): this.type = super.setInst {
val instArgs = tp.typeArgs
if (sameLength(zippedArgs, instArgs) && forall3(params, typeArgs, instArgs) { (param, targ, inst) =>
param.isCovariant && targ <:< inst || param.isContravariant && inst <:< targ || targ =:= inst
}) tp.typeConstructor else NoType
}
}

trait UntouchableTypeVar extends TypeVar {
Expand Down Expand Up @@ -3422,7 +3425,7 @@ trait Types
val newInst = wildcardToTypeVarMap(tp)
(constr isWithinBounds newInst) && {
setInst(newInst)
true
instValid
}
}
}
Expand Down

0 comments on commit a50ccac

Please sign in to comment.