Skip to content

Commit c239169

Browse files
committed
[NFC] Extracted getForwardedPackArchetype.
1 parent 6a44de2 commit c239169

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

lib/IRGen/GenPack.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -318,21 +318,29 @@ irgen::emitTypeMetadataPack(IRGenFunction &IGF,
318318
return pack;
319319
}
320320

321+
static CanPackArchetypeType
322+
getForwardedPackArchetypeType(CanPackType packType) {
323+
if (packType->getNumElements() != 1)
324+
return CanPackArchetypeType();
325+
auto uncastElement = packType.getElementType(0);
326+
auto element = dyn_cast<PackExpansionType>(uncastElement);
327+
if (!element)
328+
return CanPackArchetypeType();
329+
auto patternType = element.getPatternType();
330+
auto packArchetype = dyn_cast<PackArchetypeType>(patternType);
331+
return packArchetype;
332+
}
333+
321334
MetadataResponse
322335
irgen::emitTypeMetadataPackRef(IRGenFunction &IGF,
323336
CanPackType packType,
324337
DynamicMetadataRequest request) {
325338
if (auto result = IGF.tryGetLocalTypeMetadata(packType, request))
326339
return result;
327340

328-
if (packType->getNumElements() == 1 &&
329-
isa<PackExpansionType>(packType.getElementType(0))) {
330-
if (auto packArchetypeType = dyn_cast<PackArchetypeType>(
331-
cast<PackExpansionType>(packType.getElementType(0))
332-
.getPatternType())) {
333-
if (auto result = IGF.tryGetLocalTypeMetadata(packArchetypeType, request))
334-
return result;
335-
}
341+
if (auto packArchetypeType = getForwardedPackArchetypeType(packType)) {
342+
if (auto result = IGF.tryGetLocalTypeMetadata(packArchetypeType, request))
343+
return result;
336344
}
337345

338346
auto pack = emitTypeMetadataPack(IGF, packType, request);

0 commit comments

Comments
 (0)