@@ -2593,18 +2593,9 @@ PotentialArchetype *PotentialArchetype::updateNestedTypeForConformance(
2593
2593
return nullptr ;
2594
2594
2595
2595
// Always refer to the archetype anchor.
2596
- if (assocType)
2597
- assocType = assocType->getAssociatedTypeAnchor ();
2598
-
2599
- // If we were asked for a complete, well-formed archetype, make sure we
2600
- // process delayed requirements if anything changed.
2601
- SWIFT_DEFER {
2602
- if (kind == ArchetypeResolutionKind::CompleteWellFormed)
2603
- builder.processDelayedRequirements ();
2604
- };
2596
+ assocType = assocType->getAssociatedTypeAnchor ();
2605
2597
2606
2598
Identifier name = assocType->getName ();
2607
- auto *proto = assocType->getProtocol ();
2608
2599
2609
2600
// Look for either an unresolved potential archetype (which we can resolve
2610
2601
// now) or a potential archetype with the appropriate associated type.
@@ -2648,6 +2639,7 @@ PotentialArchetype *PotentialArchetype::updateNestedTypeForConformance(
2648
2639
if (shouldUpdatePA) {
2649
2640
// If there's a superclass constraint that conforms to the protocol,
2650
2641
// add the appropriate same-type relationship.
2642
+ const auto proto = assocType->getProtocol ();
2651
2643
if (proto) {
2652
2644
if (auto superSource = builder.resolveSuperConformance (this , proto)) {
2653
2645
maybeAddSameTypeRequirementForNestedType (resultPA, superSource,
@@ -2662,6 +2654,11 @@ PotentialArchetype *PotentialArchetype::updateNestedTypeForConformance(
2662
2654
}
2663
2655
}
2664
2656
2657
+ // If we were asked for a complete, well-formed archetype, make sure we
2658
+ // process delayed requirements if anything changed.
2659
+ if (kind == ArchetypeResolutionKind::CompleteWellFormed)
2660
+ builder.processDelayedRequirements ();
2661
+
2665
2662
return resultPA;
2666
2663
}
2667
2664
@@ -3512,16 +3509,20 @@ GenericSignatureBuilder::lookupConformance(CanType dependentType,
3512
3509
}
3513
3510
3514
3511
// / Resolve any unresolved dependent member types using the given builder.
3515
- static Type resolveDependentMemberTypes (GenericSignatureBuilder &builder,
3516
- Type type) {
3512
+ static Type resolveDependentMemberTypes (
3513
+ GenericSignatureBuilder &builder,
3514
+ Type type,
3515
+ ArchetypeResolutionKind resolutionKind
3516
+ = ArchetypeResolutionKind::WellFormed) {
3517
3517
if (!type->hasTypeParameter ()) return type;
3518
3518
3519
- return type.transformRec ([&builder](TypeBase *type) -> Optional<Type> {
3519
+ return type.transformRec ([&resolutionKind,
3520
+ &builder](TypeBase *type) -> Optional<Type> {
3520
3521
if (!type->isTypeParameter ())
3521
3522
return None;
3522
3523
3523
3524
auto resolved = builder.maybeResolveEquivalenceClass (
3524
- Type (type), ArchetypeResolutionKind::WellFormed , true );
3525
+ Type (type), resolutionKind , true );
3525
3526
3526
3527
if (!resolved)
3527
3528
return ErrorType::get (Type (type));
@@ -3546,7 +3547,8 @@ static Type resolveDependentMemberTypes(GenericSignatureBuilder &builder,
3546
3547
equivClass->recursiveConcreteType = false ;
3547
3548
};
3548
3549
3549
- return resolveDependentMemberTypes (builder, equivClass->concreteType );
3550
+ return resolveDependentMemberTypes (builder, equivClass->concreteType ,
3551
+ resolutionKind);
3550
3552
}
3551
3553
3552
3554
return equivClass->getAnchor (builder, builder.getGenericParams ());
@@ -3725,7 +3727,7 @@ ResolvedType GenericSignatureBuilder::maybeResolveEquivalenceClass(
3725
3727
// FIXME: Generic typealiases contradict the assumption above.
3726
3728
// If there is a type parameter somewhere in this type, resolve it.
3727
3729
if (type->hasTypeParameter ()) {
3728
- Type resolved = resolveDependentMemberTypes (*this , type);
3730
+ Type resolved = resolveDependentMemberTypes (*this , type, resolutionKind );
3729
3731
if (resolved->hasError () && !type->hasError ())
3730
3732
return ResolvedType::forUnresolved (nullptr );
3731
3733
@@ -3753,7 +3755,7 @@ auto GenericSignatureBuilder::resolve(UnresolvedType paOrT,
3753
3755
return ResolvedType (pa);
3754
3756
3755
3757
// Determine what kind of resolution we want.
3756
- Type type = paOrT.dyn_cast <Type>();
3758
+ Type type = paOrT.get <Type>();
3757
3759
ArchetypeResolutionKind resolutionKind =
3758
3760
ArchetypeResolutionKind::WellFormed;
3759
3761
if (!source.isExplicit () && source.isRecursive (type, *this ))
0 commit comments