Skip to content

Commit 256589f

Browse files
committed
AST: getOpenedExistentialSignature() uses LocalArchetypeRequirementCollector
1 parent 70f7812 commit 256589f

File tree

1 file changed

+7
-14
lines changed

1 file changed

+7
-14
lines changed

lib/AST/ASTContext.cpp

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include "swift/AST/IndexSubset.h"
3737
#include "swift/AST/KnownProtocols.h"
3838
#include "swift/AST/LazyResolver.h"
39+
#include "swift/AST/LocalArchetypeRequirementCollector.h"
3940
#include "swift/AST/MacroDiscriminatorContext.h"
4041
#include "swift/AST/ModuleDependencies.h"
4142
#include "swift/AST/ModuleLoader.h"
@@ -5900,33 +5901,25 @@ ASTContext::getOpenedExistentialSignature(Type type, GenericSignature parentSig)
59005901
type = existential->getConstraintType();
59015902

59025903
const CanType constraint = type->getCanonicalType();
5903-
assert(parentSig || !constraint->hasTypeParameter() &&
5904-
"Interface type here requires a parent signature");
59055904

59065905
auto canParentSig = parentSig.getCanonicalSignature();
59075906
auto key = std::make_pair(constraint, canParentSig.getPointer());
59085907
auto found = getImpl().ExistentialSignatures.find(key);
59095908
if (found != getImpl().ExistentialSignatures.end())
59105909
return found->second;
59115910

5912-
auto genericParam = OpenedArchetypeType::getSelfInterfaceTypeFromContext(
5913-
canParentSig, *this)
5914-
->castTo<GenericTypeParamType>();
5915-
Requirement requirement(RequirementKind::Conformance, genericParam,
5916-
constraint);
5911+
LocalArchetypeRequirementCollector collector(*this, canParentSig);
5912+
collector.addOpenedExistential(type);
59175913
auto genericSig = buildGenericSignature(
5918-
*this, canParentSig,
5919-
{genericParam}, {requirement},
5920-
/*allowInverses=*/true);
5921-
5922-
CanGenericSignature canGenericSig(genericSig);
5914+
*this, collector.OuterSig, collector.Params, collector.Requirements,
5915+
/*allowInverses=*/true).getCanonicalSignature();
59235916

59245917
auto result = getImpl().ExistentialSignatures.insert(
5925-
std::make_pair(key, canGenericSig));
5918+
std::make_pair(key, genericSig));
59265919
assert(result.second);
59275920
(void) result;
59285921

5929-
return canGenericSig;
5922+
return genericSig;
59305923
}
59315924

59325925
CanGenericSignature

0 commit comments

Comments
 (0)