@@ -3919,7 +3919,8 @@ object Types {
3919
3919
}
3920
3920
3921
3921
override protected def derivedRefinedType (tp : RefinedType , parent : Type , info : Type ) =
3922
- parent match {
3922
+ if ((parent eq tp.parent) && (info eq tp.refinedInfo)) tp
3923
+ else parent match {
3923
3924
case Range (parentLo, parentHi) =>
3924
3925
range(derivedRefinedType(tp, parentLo, info), derivedRefinedType(tp, parentHi, info))
3925
3926
case _ =>
@@ -3950,21 +3951,24 @@ object Types {
3950
3951
}
3951
3952
3952
3953
override protected def derivedRecType (tp : RecType , parent : Type ) =
3953
- parent match {
3954
+ if (parent eq tp.parent) tp
3955
+ else parent match {
3954
3956
case Range (lo, hi) => range(tp.rebind(lo), tp.rebind(hi))
3955
3957
case _ => tp.rebind(parent)
3956
3958
}
3957
3959
3958
3960
override protected def derivedTypeAlias (tp : TypeAlias , alias : Type ) =
3959
- alias match {
3961
+ if (alias eq tp.alias) tp
3962
+ else alias match {
3960
3963
case Range (lo, hi) =>
3961
3964
if (variance > 0 ) TypeBounds (lo, hi)
3962
3965
else range(TypeAlias (lo), TypeAlias (hi))
3963
3966
case _ => tp.derivedTypeAlias(alias)
3964
3967
}
3965
3968
3966
3969
override protected def derivedTypeBounds (tp : TypeBounds , lo : Type , hi : Type ) =
3967
- if (isRange(lo) || isRange(hi))
3970
+ if ((lo eq tp.lo) && (hi eq tp.hi)) tp
3971
+ else if (isRange(lo) || isRange(hi))
3968
3972
if (variance > 0 ) TypeBounds (lower(lo), upper(hi))
3969
3973
else range(TypeBounds (upper(lo), lower(hi)), TypeBounds (lower(lo), upper(hi)))
3970
3974
else tp.derivedTypeBounds(lo, hi)
0 commit comments