Skip to content

Commit 9a875f8

Browse files
committed
AST: Type::transform() flattens pack types inside other pack types and tuples
1 parent 60e2fcb commit 9a875f8

File tree

1 file changed

+9
-10
lines changed

1 file changed

+9
-10
lines changed

lib/AST/Type.cpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5560,8 +5560,12 @@ case TypeKind::Id:
55605560
anyChanged = true;
55615561
}
55625562

5563-
elements.push_back(transformedEltTy);
5564-
++Index;
5563+
if (auto *transformedPack = transformedEltTy->getAs<PackType>()) {
5564+
elements.append(transformedPack->getElementTypes().begin(),
5565+
transformedPack->getElementTypes().end());
5566+
} else {
5567+
elements.push_back(transformedEltTy);
5568+
}
55655569
}
55665570

55675571
if (!anyChanged)
@@ -5698,17 +5702,12 @@ case TypeKind::Id:
56985702
anyChanged = true;
56995703
}
57005704

5701-
if (eltTy->isTypeSequenceParameter() &&
5702-
transformedEltTy->is<PackType>()) {
5703-
assert(anyChanged);
5704-
// Splat the tuple in by copying in all of the transformed elements.
5705-
auto tuple = dyn_cast<PackType>(transformedEltTy.getPointer());
5706-
elements.append(tuple->getElementTypes().begin(),
5707-
tuple->getElementTypes().end());
5705+
if (auto *transformedPack = transformedEltTy->getAs<PackType>()) {
5706+
elements.append(transformedPack->getElementTypes().begin(),
5707+
transformedPack->getElementTypes().end());
57085708
} else {
57095709
// Add the new tuple element, with the transformed type.
57105710
elements.push_back(elt.getWithType(transformedEltTy));
5711-
++Index;
57125711
}
57135712
}
57145713

0 commit comments

Comments
 (0)