@@ -128,22 +128,19 @@ class TypeUtils:
128
128
case None => throw new AssertionError (" not a tuple" )
129
129
130
130
def namedTupleElementTypesUpTo (bound : Int , derived : Boolean , normalize : Boolean = true )(using Context ): List [(TermName , Type )] =
131
+ def extractNamesTypes (nmes : Type , vals : Type ): List [(TermName , Type )] =
132
+ val names = nmes.tupleElementTypesUpTo(bound, normalize).getOrElse(Nil ).map(_.dealias).map:
133
+ case ConstantType (Constant (str : String )) => str.toTermName
134
+ case t => throw TypeError (em " Malformed NamedTuple: names must be string types, but $t was found. " )
135
+ val values = vals.tupleElementTypesUpTo(bound, normalize).getOrElse(Nil )
136
+ names.zip(values)
137
+
131
138
(if normalize then self.normalized else self).dealias match
132
139
// for desugaring and printer, ignore derived types to avoid infinite recursion in NamedTuple.unapply
133
- 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:
135
- case ConstantType (Constant (str : String )) => str.toTermName
136
- 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 )
138
- names.zip(values)
140
+ case defn.NamedTupleDirect (nmes, vals) => extractNamesTypes(nmes, vals)
139
141
case t if ! derived => Nil
140
142
// default cause, used for post-typing
141
- case defn.NamedTuple (nmes, vals) =>
142
- val names = nmes.tupleElementTypesUpTo(bound, normalize).getOrElse(Nil ).map(_.dealias).map:
143
- case ConstantType (Constant (str : String )) => str.toTermName
144
- 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 )
146
- names.zip(values)
143
+ case defn.NamedTuple (nmes, vals) => extractNamesTypes(nmes, vals)
147
144
case t =>
148
145
Nil
149
146
0 commit comments