@@ -127,21 +127,22 @@ class TypeUtils:
127
127
case Some (types) => TypeOps .nestedPairs(types)
128
128
case None => throw new AssertionError (" not a tuple" )
129
129
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
133
133
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:
135
135
case ConstantType (Constant (str : String )) => str.toTermName
136
136
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 )
138
138
names.zip(values)
139
+ case t if ! derived => Nil
139
140
// 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:
142
143
case ConstantType (Constant (str : String )) => str.toTermName
143
144
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 )
145
146
names.zip(values)
146
147
case t =>
147
148
Nil
0 commit comments