@@ -3924,7 +3924,8 @@ object Types {
39243924 }
39253925
39263926 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 {
39283929 case Range (parentLo, parentHi) =>
39293930 range(derivedRefinedType(tp, parentLo, info), derivedRefinedType(tp, parentHi, info))
39303931 case _ =>
@@ -3948,21 +3949,24 @@ object Types {
39483949 }
39493950
39503951 override protected def derivedRecType (tp : RecType , parent : Type ) =
3951- parent match {
3952+ if (parent eq tp.parent) tp
3953+ else parent match {
39523954 case Range (lo, hi) => range(tp.rebind(lo), tp.rebind(hi))
39533955 case _ => tp.rebind(parent)
39543956 }
39553957
39563958 override protected def derivedTypeAlias (tp : TypeAlias , alias : Type ) =
3957- alias match {
3959+ if (alias eq tp.alias) tp
3960+ else alias match {
39583961 case Range (lo, hi) =>
39593962 if (variance > 0 ) TypeBounds (lo, hi)
39603963 else range(TypeAlias (lo), TypeAlias (hi))
39613964 case _ => tp.derivedTypeAlias(alias)
39623965 }
39633966
39643967 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))
39663970 if (variance > 0 ) TypeBounds (lower(lo), upper(hi))
39673971 else range(TypeBounds (upper(lo), lower(hi)), TypeBounds (lower(lo), upper(hi)))
39683972 else tp.derivedTypeBounds(lo, hi)
0 commit comments