Skip to content

Commit 4128bef

Browse files
committed
AST: getOpenedExistentialSignature() uses LocalArchetypeRequirementCollector
1 parent 8c8d78c commit 4128bef

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"
@@ -5897,33 +5898,25 @@ ASTContext::getOpenedExistentialSignature(Type type, GenericSignature parentSig)
58975898
type = existential->getConstraintType();
58985899

58995900
const CanType constraint = type->getCanonicalType();
5900-
assert(parentSig || !constraint->hasTypeParameter() &&
5901-
"Interface type here requires a parent signature");
59025901

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

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

59215914
auto result = getImpl().ExistentialSignatures.insert(
5922-
std::make_pair(key, canGenericSig));
5915+
std::make_pair(key, genericSig));
59235916
assert(result.second);
59245917
(void) result;
59255918

5926-
return canGenericSig;
5919+
return genericSig;
59275920
}
59285921

59295922
CanGenericSignature

0 commit comments

Comments
 (0)