@@ -127,21 +127,22 @@ 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 )(using Context ): List [(TermName , Type )] =
131- self.normalized.dealias match
132- // for desugaring, ignore derived types to avoid infinite recursion in NamedTuple.unapply
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
133133 case AppliedType (tycon, nmes :: vals :: Nil ) if ! derived && tycon.typeSymbol == defn.NamedTupleTypeRef .symbol =>
134- val names = nmes.tupleElementTypesUpTo(bound).getOrElse(Nil ).map(_.dealias).map:
134+ val names = nmes.tupleElementTypesUpTo(bound, normalize ).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, true ).getOrElse(Nil )
137+ val values = vals.tupleElementTypesUpTo(bound, normalize ).getOrElse(Nil )
138138 names.zip(values)
139+ case t if ! derived => Nil
139140 // default cause, used for post-typing
140- case defn.NamedTuple (nmes, vals) if derived =>
141- val names = nmes.tupleElementTypesUpTo(bound).getOrElse(Nil ).map(_.dealias).map:
141+ case defn.NamedTuple (nmes, vals) =>
142+ val names = nmes.tupleElementTypesUpTo(bound, normalize ).getOrElse(Nil ).map(_.dealias).map:
142143 case ConstantType (Constant (str : String )) => str.toTermName
143144 case t => throw TypeError (em " Malformed NamedTuple: names must be string types, but $t was found. " )
144- val values = vals.tupleElementTypesUpTo(bound, derived ).getOrElse(Nil )
145+ val values = vals.tupleElementTypesUpTo(bound, normalize ).getOrElse(Nil )
145146 names.zip(values)
146147 case t =>
147148 Nil
0 commit comments