Skip to content

Commit c8d57c8

Browse files
committed
[NFC] Simplified transient helper type.
Just use the opened element environment for all substitutions rather than keeping the outer environment around.
1 parent 29a62aa commit c8d57c8

File tree

1 file changed

+14
-17
lines changed

1 file changed

+14
-17
lines changed

lib/IRGen/GenPack.cpp

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -262,16 +262,13 @@ static llvm::Value *bindWitnessTableAtIndex(IRGenFunction &IGF,
262262
}
263263

264264
struct OpenedElementContext {
265-
GenericEnvironment *packEnvironment;
266-
CanGenericSignature packSignature;
267-
268-
GenericEnvironment *elementEnvironment;
269-
CanGenericSignature elementSignature;
265+
GenericEnvironment *environment;
266+
CanGenericSignature signature;
270267

271268
static OpenedElementContext
272269
createForPackExpansion(IRGenFunction &IGF, CanPackExpansionType expansionTy) {
273270
// Get the outer generic signature and environment.
274-
auto *genericEnv = cast<PackArchetypeType>(expansionTy.getCountType())
271+
auto *genericEnv = cast<ArchetypeType>(expansionTy.getCountType())
275272
->getGenericEnvironment();
276273
auto subMap = genericEnv->getForwardingSubstitutionMap();
277274

@@ -282,15 +279,15 @@ struct OpenedElementContext {
282279
auto *elementEnv = GenericEnvironment::forOpenedElement(
283280
elementSig, UUID::fromTime(), expansionTy.getCountType(), subMap);
284281

285-
return {genericEnv, genericSig, elementEnv, elementSig};
282+
return {elementEnv, elementSig};
286283
}
287284
};
288285

289286
static void bindElementSignatureRequirementsAtIndex(
290287
IRGenFunction &IGF, OpenedElementContext const &context, llvm::Value *index,
291288
DynamicMetadataRequest request) {
292289
enumerateGenericSignatureRequirements(
293-
context.elementSignature, [&](GenericRequirement requirement) {
290+
context.signature, [&](GenericRequirement requirement) {
294291
switch (requirement.getKind()) {
295292
case GenericRequirement::Kind::Shape:
296293
case GenericRequirement::Kind::Metadata:
@@ -299,12 +296,12 @@ static void bindElementSignatureRequirementsAtIndex(
299296
case GenericRequirement::Kind::MetadataPack: {
300297
auto ty = requirement.getTypeParameter();
301298
auto patternPackArchetype = cast<PackArchetypeType>(
302-
context.packEnvironment->mapTypeIntoContext(ty)
299+
context.environment->maybeApplyOuterContextSubstitutions(ty)
303300
->getCanonicalType());
304301
auto response =
305302
IGF.emitTypeMetadataRef(patternPackArchetype, request);
306303
auto elementArchetype =
307-
context.elementEnvironment
304+
context.environment
308305
->mapPackTypeIntoElementContext(
309306
patternPackArchetype->getInterfaceType())
310307
->getCanonicalType();
@@ -319,20 +316,20 @@ static void bindElementSignatureRequirementsAtIndex(
319316
auto ty = requirement.getTypeParameter();
320317
auto proto = requirement.getProtocol();
321318
auto patternPackArchetype = cast<PackArchetypeType>(
322-
context.packEnvironment->mapTypeIntoContext(ty)
319+
context.environment->maybeApplyOuterContextSubstitutions(ty)
323320
->getCanonicalType());
324321
auto elementArchetype =
325-
context.elementEnvironment
322+
context.environment
326323
->mapPackTypeIntoElementContext(
327324
patternPackArchetype->getInterfaceType())
328325
->getCanonicalType();
329326
llvm::Value *_metadata = nullptr;
330327
auto packConformance =
331-
context.packSignature->lookupConformance(ty, proto);
328+
context.signature->lookupConformance(ty, proto);
332329
auto *wtablePack = emitWitnessTableRef(IGF, patternPackArchetype,
333330
&_metadata, packConformance);
334331
auto elementConformance =
335-
context.elementSignature->lookupConformance(ty, proto);
332+
context.signature->lookupConformance(ty, proto);
336333
auto *wtable = bindWitnessTableAtIndex(
337334
IGF, elementArchetype, elementConformance, wtablePack, index);
338335
assert(wtable);
@@ -350,7 +347,7 @@ static llvm::Value *emitPackExpansionElementMetadata(
350347

351348
// Replace pack archetypes with element archetypes in the pattern type.
352349
auto instantiatedPatternTy =
353-
context.elementEnvironment
350+
context.environment
354351
->mapPackTypeIntoElementContext(patternTy->mapTypeOutOfContext())
355352
->getCanonicalType();
356353

@@ -526,11 +523,11 @@ static llvm::Value *emitPackExpansionElementWitnessTable(
526523

527524
// Replace pack archetypes with element archetypes in the pattern type.
528525
auto instantiatedPatternTy =
529-
context.elementEnvironment
526+
context.environment
530527
->mapPackTypeIntoElementContext(patternTy->mapTypeOutOfContext())
531528
->getCanonicalType();
532529
auto instantiatedConformance =
533-
context.elementEnvironment->getGenericSignature()->lookupConformance(
530+
context.environment->getGenericSignature()->lookupConformance(
534531
instantiatedPatternTy, conformance.getRequirement());
535532

536533
// Emit the element witness table.

0 commit comments

Comments
 (0)