@@ -128,22 +128,19 @@ class TypeUtils:
128128 case None => throw new AssertionError (" not a tuple" )
129129
130130 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+
131138 (if normalize then self.normalized else self).dealias match
132139 // 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)
139141 case t if ! derived => Nil
140142 // 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)
147144 case t =>
148145 Nil
149146
0 commit comments