@@ -233,25 +233,31 @@ class TypeDecoder {
233233 return decodeMangledType (Node->getChild (0 ));
234234 case NodeKind::ReturnType:
235235 return decodeMangledType (Node->getChild (0 ));
236- case NodeKind::NonVariadicTuple:
237- case NodeKind::VariadicTuple: {
236+ case NodeKind::Tuple: {
238237 std::vector<BuiltType> elements;
239238 std::string labels;
239+ bool variadic = false ;
240240 for (auto &element : *Node) {
241241 if (element->getKind () != NodeKind::TupleElement)
242242 return BuiltType ();
243243
244244 // If the tuple element is labeled, add its label to 'labels'.
245245 unsigned typeChildIndex = 0 ;
246- if (element->getChild (0 )->getKind () == NodeKind::TupleElementName) {
246+ unsigned nameIdx = 0 ;
247+ if (element->getChild (nameIdx)->getKind () == NodeKind::VariadicMarker) {
248+ variadic = true ;
249+ nameIdx = 1 ;
250+ typeChildIndex = 1 ;
251+ }
252+ if (element->getChild (nameIdx)->getKind () == NodeKind::TupleElementName) {
247253 // Add spaces to terminate all the previous labels if this
248254 // is the first we've seen.
249255 if (labels.empty ()) labels.append (elements.size (), ' ' );
250256
251257 // Add the label and its terminator.
252258 labels += element->getChild (0 )->getText ();
253259 labels += ' ' ;
254- typeChildIndex = 1 ;
260+ typeChildIndex++ ;
255261
256262 // Otherwise, add a space if a previous element had a label.
257263 } else if (!labels.empty ()) {
@@ -266,7 +272,6 @@ class TypeDecoder {
266272
267273 elements.push_back (elementType);
268274 }
269- bool variadic = (Node->getKind () == NodeKind::VariadicTuple);
270275 return Builder.createTupleType (elements, std::move (labels), variadic);
271276 }
272277 case NodeKind::TupleElement:
@@ -378,8 +383,7 @@ class TypeDecoder {
378383 };
379384
380385 // Expand a single level of tuple.
381- if (node->getKind () == NodeKind::VariadicTuple ||
382- node->getKind () == NodeKind::NonVariadicTuple) {
386+ if (node->getKind () == NodeKind::Tuple) {
383387 // TODO: preserve variadic somewhere?
384388
385389 // Decode all the elements as separate arguments.
0 commit comments