Skip to content

Commit bde8617

Browse files
committed
Some opimizations on derived ops
In a commonly used derived... operation, deal with the common case that the types have not chanegd first.
1 parent 57a38b6 commit bde8617

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

compiler/src/dotty/tools/dotc/core/Types.scala

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)