@@ -262,16 +262,13 @@ static llvm::Value *bindWitnessTableAtIndex(IRGenFunction &IGF,
262
262
}
263
263
264
264
struct OpenedElementContext {
265
- GenericEnvironment *packEnvironment;
266
- CanGenericSignature packSignature;
267
-
268
- GenericEnvironment *elementEnvironment;
269
- CanGenericSignature elementSignature;
265
+ GenericEnvironment *environment;
266
+ CanGenericSignature signature;
270
267
271
268
static OpenedElementContext
272
269
createForPackExpansion (IRGenFunction &IGF, CanPackExpansionType expansionTy) {
273
270
// Get the outer generic signature and environment.
274
- auto *genericEnv = cast<PackArchetypeType >(expansionTy.getCountType ())
271
+ auto *genericEnv = cast<ArchetypeType >(expansionTy.getCountType ())
275
272
->getGenericEnvironment ();
276
273
auto subMap = genericEnv->getForwardingSubstitutionMap ();
277
274
@@ -282,15 +279,15 @@ struct OpenedElementContext {
282
279
auto *elementEnv = GenericEnvironment::forOpenedElement (
283
280
elementSig, UUID::fromTime (), expansionTy.getCountType (), subMap);
284
281
285
- return {genericEnv, genericSig, elementEnv, elementSig};
282
+ return {elementEnv, elementSig};
286
283
}
287
284
};
288
285
289
286
static void bindElementSignatureRequirementsAtIndex (
290
287
IRGenFunction &IGF, OpenedElementContext const &context, llvm::Value *index,
291
288
DynamicMetadataRequest request) {
292
289
enumerateGenericSignatureRequirements (
293
- context.elementSignature , [&](GenericRequirement requirement) {
290
+ context.signature , [&](GenericRequirement requirement) {
294
291
switch (requirement.getKind ()) {
295
292
case GenericRequirement::Kind::Shape:
296
293
case GenericRequirement::Kind::Metadata:
@@ -299,12 +296,12 @@ static void bindElementSignatureRequirementsAtIndex(
299
296
case GenericRequirement::Kind::MetadataPack: {
300
297
auto ty = requirement.getTypeParameter ();
301
298
auto patternPackArchetype = cast<PackArchetypeType>(
302
- context.packEnvironment -> mapTypeIntoContext (ty)
299
+ context.environment -> maybeApplyOuterContextSubstitutions (ty)
303
300
->getCanonicalType ());
304
301
auto response =
305
302
IGF.emitTypeMetadataRef (patternPackArchetype, request);
306
303
auto elementArchetype =
307
- context.elementEnvironment
304
+ context.environment
308
305
->mapPackTypeIntoElementContext (
309
306
patternPackArchetype->getInterfaceType ())
310
307
->getCanonicalType ();
@@ -319,20 +316,20 @@ static void bindElementSignatureRequirementsAtIndex(
319
316
auto ty = requirement.getTypeParameter ();
320
317
auto proto = requirement.getProtocol ();
321
318
auto patternPackArchetype = cast<PackArchetypeType>(
322
- context.packEnvironment -> mapTypeIntoContext (ty)
319
+ context.environment -> maybeApplyOuterContextSubstitutions (ty)
323
320
->getCanonicalType ());
324
321
auto elementArchetype =
325
- context.elementEnvironment
322
+ context.environment
326
323
->mapPackTypeIntoElementContext (
327
324
patternPackArchetype->getInterfaceType ())
328
325
->getCanonicalType ();
329
326
llvm::Value *_metadata = nullptr ;
330
327
auto packConformance =
331
- context.packSignature ->lookupConformance (ty, proto);
328
+ context.signature ->lookupConformance (ty, proto);
332
329
auto *wtablePack = emitWitnessTableRef (IGF, patternPackArchetype,
333
330
&_metadata, packConformance);
334
331
auto elementConformance =
335
- context.elementSignature ->lookupConformance (ty, proto);
332
+ context.signature ->lookupConformance (ty, proto);
336
333
auto *wtable = bindWitnessTableAtIndex (
337
334
IGF, elementArchetype, elementConformance, wtablePack, index);
338
335
assert (wtable);
@@ -350,7 +347,7 @@ static llvm::Value *emitPackExpansionElementMetadata(
350
347
351
348
// Replace pack archetypes with element archetypes in the pattern type.
352
349
auto instantiatedPatternTy =
353
- context.elementEnvironment
350
+ context.environment
354
351
->mapPackTypeIntoElementContext (patternTy->mapTypeOutOfContext ())
355
352
->getCanonicalType ();
356
353
@@ -526,11 +523,11 @@ static llvm::Value *emitPackExpansionElementWitnessTable(
526
523
527
524
// Replace pack archetypes with element archetypes in the pattern type.
528
525
auto instantiatedPatternTy =
529
- context.elementEnvironment
526
+ context.environment
530
527
->mapPackTypeIntoElementContext (patternTy->mapTypeOutOfContext ())
531
528
->getCanonicalType ();
532
529
auto instantiatedConformance =
533
- context.elementEnvironment ->getGenericSignature ()->lookupConformance (
530
+ context.environment ->getGenericSignature ()->lookupConformance (
534
531
instantiatedPatternTy, conformance.getRequirement ());
535
532
536
533
// Emit the element witness table.
0 commit comments