|
33 | 33 | using namespace swift;
|
34 | 34 | using namespace irgen;
|
35 | 35 |
|
| 36 | +static CanPackArchetypeType |
| 37 | +getForwardedPackArchetypeType(CanPackType packType) { |
| 38 | + if (packType->getNumElements() != 1) |
| 39 | + return CanPackArchetypeType(); |
| 40 | + auto uncastElement = packType.getElementType(0); |
| 41 | + auto element = dyn_cast<PackExpansionType>(uncastElement); |
| 42 | + if (!element) |
| 43 | + return CanPackArchetypeType(); |
| 44 | + auto patternType = element.getPatternType(); |
| 45 | + auto packArchetype = dyn_cast<PackArchetypeType>(patternType); |
| 46 | + return packArchetype; |
| 47 | +} |
| 48 | + |
| 49 | +static MetadataResponse |
| 50 | +tryGetLocalPackTypeMetadata(IRGenFunction &IGF, CanPackType packType, |
| 51 | + DynamicMetadataRequest request) { |
| 52 | + if (auto result = IGF.tryGetLocalTypeMetadata(packType, request)) |
| 53 | + return result; |
| 54 | + |
| 55 | + if (auto packArchetypeType = getForwardedPackArchetypeType(packType)) { |
| 56 | + if (auto result = IGF.tryGetLocalTypeMetadata(packArchetypeType, request)) |
| 57 | + return result; |
| 58 | + } |
| 59 | + |
| 60 | + return MetadataResponse(); |
| 61 | +} |
| 62 | + |
| 63 | +static llvm::Value *tryGetLocalPackTypeData(IRGenFunction &IGF, |
| 64 | + CanPackType packType, |
| 65 | + LocalTypeDataKind localDataKind) { |
| 66 | + if (auto *wtable = IGF.tryGetLocalTypeData(packType, localDataKind)) |
| 67 | + return wtable; |
| 68 | + |
| 69 | + if (auto packArchetypeType = getForwardedPackArchetypeType(packType)) { |
| 70 | + if (auto *wtable = |
| 71 | + IGF.tryGetLocalTypeData(packArchetypeType, localDataKind)) |
| 72 | + return wtable; |
| 73 | + } |
| 74 | + |
| 75 | + return nullptr; |
| 76 | +} |
| 77 | + |
36 | 78 | static void accumulateSum(IRGenFunction &IGF, llvm::Value *&result,
|
37 | 79 | llvm::Value *value) {
|
38 | 80 | if (result == nullptr) {
|
@@ -324,33 +366,6 @@ irgen::emitTypeMetadataPack(IRGenFunction &IGF,
|
324 | 366 | return pack;
|
325 | 367 | }
|
326 | 368 |
|
327 |
| -static CanPackArchetypeType |
328 |
| -getForwardedPackArchetypeType(CanPackType packType) { |
329 |
| - if (packType->getNumElements() != 1) |
330 |
| - return CanPackArchetypeType(); |
331 |
| - auto uncastElement = packType.getElementType(0); |
332 |
| - auto element = dyn_cast<PackExpansionType>(uncastElement); |
333 |
| - if (!element) |
334 |
| - return CanPackArchetypeType(); |
335 |
| - auto patternType = element.getPatternType(); |
336 |
| - auto packArchetype = dyn_cast<PackArchetypeType>(patternType); |
337 |
| - return packArchetype; |
338 |
| -} |
339 |
| - |
340 |
| -static MetadataResponse |
341 |
| -tryGetLocalPackTypeMetadata(IRGenFunction &IGF, CanPackType packType, |
342 |
| - DynamicMetadataRequest request) { |
343 |
| - if (auto result = IGF.tryGetLocalTypeMetadata(packType, request)) |
344 |
| - return result; |
345 |
| - |
346 |
| - if (auto packArchetypeType = getForwardedPackArchetypeType(packType)) { |
347 |
| - if (auto result = IGF.tryGetLocalTypeMetadata(packArchetypeType, request)) |
348 |
| - return result; |
349 |
| - } |
350 |
| - |
351 |
| - return MetadataResponse(); |
352 |
| -} |
353 |
| - |
354 | 369 | MetadataResponse
|
355 | 370 | irgen::emitTypeMetadataPackRef(IRGenFunction &IGF, CanPackType packType,
|
356 | 371 | DynamicMetadataRequest request) {
|
@@ -565,21 +580,6 @@ void irgen::cleanupWitnessTablePack(IRGenFunction &IGF, StackAddress pack,
|
565 | 580 | }
|
566 | 581 | }
|
567 | 582 |
|
568 |
| -static llvm::Value *tryGetLocalPackTypeData(IRGenFunction &IGF, |
569 |
| - CanPackType packType, |
570 |
| - LocalTypeDataKind localDataKind) { |
571 |
| - if (auto *wtable = IGF.tryGetLocalTypeData(packType, localDataKind)) |
572 |
| - return wtable; |
573 |
| - |
574 |
| - if (auto packArchetypeType = getForwardedPackArchetypeType(packType)) { |
575 |
| - if (auto *wtable = |
576 |
| - IGF.tryGetLocalTypeData(packArchetypeType, localDataKind)) |
577 |
| - return wtable; |
578 |
| - } |
579 |
| - |
580 |
| - return nullptr; |
581 |
| -} |
582 |
| - |
583 | 583 | llvm::Value *irgen::emitWitnessTablePackRef(IRGenFunction &IGF,
|
584 | 584 | CanPackType packType,
|
585 | 585 | PackConformance *conformance) {
|
|
0 commit comments