Skip to content

Commit 2afa89c

Browse files
committed
Removed redundant case and inlined RHSs
1 parent bf67516 commit 2afa89c

File tree

1 file changed

+67
-75
lines changed

1 file changed

+67
-75
lines changed

compiler/src/dotty/tools/dotc/typer/Implicits.scala

Lines changed: 67 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -936,7 +936,6 @@ trait Implicits { self: Typer =>
936936
}
937937

938938
formal.member(tpnme.MirroredType).info match {
939-
case TypeAlias(mirroredType) => mirrorFor(mirroredType)
940939
case TypeBounds(mirroredType, _) => mirrorFor(mirroredType)
941940
case other => EmptyTree
942941
}
@@ -947,76 +946,72 @@ trait Implicits { self: Typer =>
947946
*/
948947
lazy val synthesizedSumMirror: SpecialHandler =
949948
(formal: Type, span: Span) => implicit (ctx: Context) => {
950-
def mirrorFor(mirroredType0: Type): Tree = {
951-
val mirroredType = mirroredType0.stripTypeVar
952-
if (mirroredType.classSymbol.isGenericSum) {
953-
val cls = mirroredType.classSymbol
954-
val elemLabels = cls.children.map(c => ConstantType(Constant(c.name.toString)))
955-
956-
def solve(sym: Symbol): Type = sym match {
957-
case caseClass: ClassSymbol =>
958-
assert(caseClass.is(Case))
959-
if (caseClass.is(Module))
960-
caseClass.sourceModule.termRef
961-
else {
962-
caseClass.primaryConstructor.info match {
963-
case info: PolyType =>
964-
// Compute the the full child type by solving the subtype constraint
965-
// `C[X1, ..., Xn] <: P`, where
966-
//
967-
// - P is the current `mirroredType`
968-
// - C is the child class, with type parameters X1, ..., Xn
969-
//
970-
// Contravariant type parameters are minimized, all other type parameters are maximized.
971-
def instantiate(implicit ctx: Context) = {
972-
val poly = constrained(info, untpd.EmptyTree)._1
973-
val resType = poly.finalResultType
974-
val target = mirroredType match {
975-
case tp: HKTypeLambda => tp.resultType
976-
case tp => tp
949+
formal.member(tpnme.MirroredType).info match {
950+
case TypeBounds(mirroredType0, _) =>
951+
val mirroredType = mirroredType0.stripTypeVar
952+
if (mirroredType.classSymbol.isGenericSum) {
953+
val cls = mirroredType.classSymbol
954+
val elemLabels = cls.children.map(c => ConstantType(Constant(c.name.toString)))
955+
956+
def solve(sym: Symbol): Type = sym match {
957+
case caseClass: ClassSymbol =>
958+
assert(caseClass.is(Case))
959+
if (caseClass.is(Module))
960+
caseClass.sourceModule.termRef
961+
else {
962+
caseClass.primaryConstructor.info match {
963+
case info: PolyType =>
964+
// Compute the the full child type by solving the subtype constraint
965+
// `C[X1, ..., Xn] <: P`, where
966+
//
967+
// - P is the current `mirroredType`
968+
// - C is the child class, with type parameters X1, ..., Xn
969+
//
970+
// Contravariant type parameters are minimized, all other type parameters are maximized.
971+
def instantiate(implicit ctx: Context) = {
972+
val poly = constrained(info, untpd.EmptyTree)._1
973+
val resType = poly.finalResultType
974+
val target = mirroredType match {
975+
case tp: HKTypeLambda => tp.resultType
976+
case tp => tp
977+
}
978+
resType <:< target
979+
val tparams = poly.paramRefs
980+
val variances = caseClass.typeParams.map(_.paramVariance)
981+
val instanceTypes = (tparams, variances).zipped.map((tparam, variance) =>
982+
ctx.typeComparer.instanceType(tparam, fromBelow = variance < 0))
983+
resType.substParams(poly, instanceTypes)
977984
}
978-
resType <:< target
979-
val tparams = poly.paramRefs
980-
val variances = caseClass.typeParams.map(_.paramVariance)
981-
val instanceTypes = (tparams, variances).zipped.map((tparam, variance) =>
982-
ctx.typeComparer.instanceType(tparam, fromBelow = variance < 0))
983-
resType.substParams(poly, instanceTypes)
984-
}
985-
instantiate(ctx.fresh.setExploreTyperState().setOwner(caseClass))
986-
case _ =>
987-
caseClass.typeRef
985+
instantiate(ctx.fresh.setExploreTyperState().setOwner(caseClass))
986+
case _ =>
987+
caseClass.typeRef
988+
}
988989
}
989-
}
990-
case child => child.termRef
991-
}
992-
993-
val (monoType, elemsType) = mirroredType match {
994-
case mirroredType: HKTypeLambda =>
995-
val elems = mirroredType.derivedLambdaType(
996-
resType = TypeOps.nestedPairs(cls.children.map(solve))
997-
)
998-
val AppliedType(tycon, _) = mirroredType.resultType
999-
val monoType = AppliedType(tycon, mirroredType.paramInfos)
1000-
(monoType, elems)
1001-
case _ =>
1002-
val elems = TypeOps.nestedPairs(cls.children.map(solve))
1003-
(mirroredType, elems)
1004-
}
990+
case child => child.termRef
991+
}
1005992

1006-
val mirrorType =
1007-
mirrorCore(defn.Mirror_SumType, monoType, mirroredType, cls.name)
1008-
.refinedWith(tpnme.MirroredElemTypes, TypeAlias(elemsType))
1009-
.refinedWith(tpnme.MirroredElemLabels, TypeAlias(TypeOps.nestedPairs(elemLabels)))
1010-
val mirrorRef =
1011-
if (cls.linkedClass.exists && !cls.is(Scala2x)) companionPath(mirroredType, span)
1012-
else anonymousMirror(monoType, ExtendsSumMirror, span)
1013-
mirrorRef.cast(mirrorType)
1014-
} else EmptyTree
1015-
}
993+
val (monoType, elemsType) = mirroredType match {
994+
case mirroredType: HKTypeLambda =>
995+
val elems = mirroredType.derivedLambdaType(
996+
resType = TypeOps.nestedPairs(cls.children.map(solve))
997+
)
998+
val AppliedType(tycon, _) = mirroredType.resultType
999+
val monoType = AppliedType(tycon, mirroredType.paramInfos)
1000+
(monoType, elems)
1001+
case _ =>
1002+
val elems = TypeOps.nestedPairs(cls.children.map(solve))
1003+
(mirroredType, elems)
1004+
}
10161005

1017-
formal.member(tpnme.MirroredType).info match {
1018-
case TypeAlias(mirroredType) => mirrorFor(mirroredType)
1019-
case TypeBounds(mirroredType, _) => mirrorFor(mirroredType)
1006+
val mirrorType =
1007+
mirrorCore(defn.Mirror_SumType, monoType, mirroredType, cls.name)
1008+
.refinedWith(tpnme.MirroredElemTypes, TypeAlias(elemsType))
1009+
.refinedWith(tpnme.MirroredElemLabels, TypeAlias(TypeOps.nestedPairs(elemLabels)))
1010+
val mirrorRef =
1011+
if (cls.linkedClass.exists && !cls.is(Scala2x)) companionPath(mirroredType, span)
1012+
else anonymousMirror(monoType, ExtendsSumMirror, span)
1013+
mirrorRef.cast(mirrorType)
1014+
} else EmptyTree
10201015
case _ => EmptyTree
10211016
}
10221017
}
@@ -1026,15 +1021,12 @@ trait Implicits { self: Typer =>
10261021
*/
10271022
lazy val synthesizedMirror: SpecialHandler =
10281023
(formal: Type, span: Span) => implicit (ctx: Context) => {
1029-
def mirrorFor(mirroredType: Type): Tree =
1030-
if (mirroredType.termSymbol.is(CaseVal) || mirroredType.classSymbol.isGenericProduct)
1031-
synthesizedProductMirror(formal, span)(ctx)
1032-
else
1033-
synthesizedSumMirror(formal, span)(ctx)
1034-
10351024
formal.member(tpnme.MirroredType).info match {
1036-
case TypeAlias(mirroredType) => mirrorFor(mirroredType)
1037-
case TypeBounds(mirroredType, _) => mirrorFor(mirroredType)
1025+
case TypeBounds(mirroredType, _) =>
1026+
if (mirroredType.termSymbol.is(CaseVal) || mirroredType.classSymbol.isGenericProduct)
1027+
synthesizedProductMirror(formal, span)(ctx)
1028+
else
1029+
synthesizedSumMirror(formal, span)(ctx)
10381030
case _ => EmptyTree
10391031
}
10401032
}

0 commit comments

Comments
 (0)