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