@@ -394,7 +394,7 @@ TupleTypeRepr::TupleTypeRepr(ArrayRef<TypeRepr *> Elements, SourceRange Parens,
394
394
ArrayRef<SourceLoc> underscoreLocs,
395
395
SourceLoc Ellipsis, unsigned EllipsisIdx)
396
396
: TypeRepr(TypeReprKind::Tuple), NumElements(Elements.size()),
397
- Parens(Parens), Ellipsis (Ellipsis), EllipsisIdx(EllipsisIdx ) {
397
+ Parens(Parens), HasEllipsis (Ellipsis.isValid() ) {
398
398
399
399
NameStatus = ElementNames.empty () ? NotNamed
400
400
: underscoreLocs.empty () ? HasNames : HasLabels;
@@ -415,6 +415,10 @@ TupleTypeRepr::TupleTypeRepr(ArrayRef<TypeRepr *> Elements, SourceRange Parens,
415
415
std::uninitialized_copy (underscoreLocs.begin (), underscoreLocs.end (),
416
416
getTrailingObjects<SourceLoc>() +
417
417
ElementNameLocs.size ());
418
+
419
+ // Set ellipsis location and index.
420
+ if (Ellipsis.isValid ())
421
+ getTrailingObjects<SourceLocAndIdx>()[0 ] = {Ellipsis, EllipsisIdx};
418
422
}
419
423
420
424
TupleTypeRepr *TupleTypeRepr::create (const ASTContext &C,
@@ -432,10 +436,12 @@ TupleTypeRepr *TupleTypeRepr::create(const ASTContext &C,
432
436
assert (Ellipsis.isValid () ? EllipsisIdx < Elements.size ()
433
437
: EllipsisIdx == Elements.size ());
434
438
435
- size_t size = totalSizeToAlloc<TypeRepr *, Identifier, SourceLoc>(
439
+ size_t size =
440
+ totalSizeToAlloc<TypeRepr *, Identifier, SourceLoc, SourceLocAndIdx>(
436
441
Elements.size (),
437
442
ElementNames.size (),
438
- ElementNameLocs.size () + underscoreLocs.size ());
443
+ ElementNameLocs.size () + underscoreLocs.size (),
444
+ Ellipsis.isValid () ? 1 : 0 );
439
445
void *mem = C.Allocate (size, alignof (TupleTypeRepr));
440
446
return new (mem) TupleTypeRepr (Elements, Parens, ElementNames,
441
447
ElementNameLocs, underscoreLocs,
0 commit comments