Skip to content

Commit 2f03f86

Browse files
committed
remove normalize and rely on stackoverflow
1 parent 092da2b commit 2f03f86

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

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

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -127,22 +127,21 @@ class TypeUtils:
127127
case Some(types) => TypeOps.nestedPairs(types)
128128
case None => throw new AssertionError("not a tuple")
129129

130-
def namedTupleElementTypesUpTo(bound: Int, derived: Boolean, normalize: Boolean = true)(using Context): List[(TermName, Type)] =
131-
(if normalize then self.normalized else self).dealias match
132-
// for desugaring and printer, ignore derived types to avoid infinite recursion in NamedTuple.unapply
130+
def namedTupleElementTypesUpTo(bound: Int, derived: Boolean)(using Context): List[(TermName, Type)] =
131+
self.normalized.dealias match
132+
// for desugaring, ignore derived types to avoid infinite recursion in NamedTuple.unapply
133133
case AppliedType(tycon, nmes :: vals :: Nil) if !derived && tycon.typeSymbol == defn.NamedTupleTypeRef.symbol =>
134-
val names = nmes.tupleElementTypesUpTo(bound, normalize).getOrElse(Nil).map(_.dealias).map:
134+
val names = nmes.tupleElementTypesUpTo(bound).getOrElse(Nil).map(_.dealias).map:
135135
case ConstantType(Constant(str: String)) => str.toTermName
136136
case t => throw TypeError(em"Malformed NamedTuple: names must be string types, but $t was found.")
137-
val values = vals.tupleElementTypesUpTo(bound, normalize).getOrElse(Nil)
137+
val values = vals.tupleElementTypesUpTo(bound, true).getOrElse(Nil)
138138
names.zip(values)
139-
case t if !derived => Nil
140139
// default cause, used for post-typing
141-
case defn.NamedTuple(nmes, vals) =>
142-
val names = nmes.tupleElementTypesUpTo(bound, normalize).getOrElse(Nil).map(_.dealias).map:
140+
case defn.NamedTuple(nmes, vals) if derived =>
141+
val names = nmes.tupleElementTypesUpTo(bound).getOrElse(Nil).map(_.dealias).map:
143142
case ConstantType(Constant(str: String)) => str.toTermName
144143
case t => throw TypeError(em"Malformed NamedTuple: names must be string types, but $t was found.")
145-
val values = vals.tupleElementTypesUpTo(bound, normalize).getOrElse(Nil)
144+
val values = vals.tupleElementTypesUpTo(bound, derived).getOrElse(Nil)
146145
names.zip(values)
147146
case t =>
148147
Nil

compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,10 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
248248
def appliedText(tp: Type): Text = tp match
249249
case tp @ AppliedType(tycon, args) =>
250250
val namedElems =
251-
try tp.namedTupleElementTypesUpTo(200, false, normalize = false)
251+
try tp.namedTupleElementTypesUpTo(200, true)
252252
catch
253253
case ex: TypeError => Nil
254+
case ex: StackOverflowError => Nil
254255
if namedElems.nonEmpty then
255256
toTextNamedTuple(namedElems)
256257
else tp.tupleElementTypesUpTo(200, normalize = false) match

0 commit comments

Comments
 (0)