Skip to content

Commit ec0dfc8

Browse files
committed
AST: Add new form of SubstitutionMap::getProtocolSubstitutions()
1 parent 0616333 commit ec0dfc8

File tree

10 files changed

+19
-22
lines changed

10 files changed

+19
-22
lines changed

include/swift/AST/SubstitutionMap.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,10 @@ class SubstitutionMap {
187187
SubstitutionMap mapIntoTypeExpansionContext(
188188
TypeExpansionContext context) const;
189189

190+
/// Create a substitution map for a protocol conformance.
191+
static SubstitutionMap
192+
getProtocolSubstitutions(ProtocolConformanceRef conformance);
193+
190194
/// Create a substitution map for a protocol conformance.
191195
static SubstitutionMap
192196
getProtocolSubstitutions(ProtocolDecl *protocol,

lib/AST/DistributedDecl.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,11 +364,10 @@ Type swift::getAssociatedTypeOfDistributedSystemOfActor(
364364
auto actorConformance =
365365
lookupConformance(
366366
actorType->getDeclaredInterfaceType(), actorProtocol);
367-
if (!actorConformance || actorConformance.isInvalid())
367+
if (actorConformance.isInvalid())
368368
return Type();
369369

370-
auto subs = SubstitutionMap::getProtocolSubstitutions(
371-
actorProtocol, actorType->getDeclaredInterfaceType(), actorConformance);
370+
auto subs = SubstitutionMap::getProtocolSubstitutions(actorConformance);
372371

373372
memberTy = memberTy.subst(subs);
374373

lib/AST/ProtocolConformanceRef.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ ProtocolConformanceRef::getWitnessByName(DeclName name) const {
164164
// For a type with dependent conformance, just return the requirement from
165165
// the protocol. There are no protocol conformance tables.
166166
if (!isConcrete()) {
167-
auto subs = SubstitutionMap::getProtocolSubstitutions(proto, getType(), *this);
167+
auto subs = SubstitutionMap::getProtocolSubstitutions(*this);
168168
return ConcreteDeclRef(requirement, subs);
169169
}
170170

@@ -214,9 +214,7 @@ Type ProtocolConformanceRef::getAssociatedType(Type assocType) const {
214214
if (isInvalid())
215215
return ErrorType::get(assocType->getASTContext());
216216

217-
auto substMap =
218-
SubstitutionMap::getProtocolSubstitutions(getProtocol(), getType(), *this);
219-
return assocType.subst(substMap);
217+
return assocType.subst(SubstitutionMap::getProtocolSubstitutions(*this));
220218
}
221219

222220
ProtocolConformanceRef

lib/AST/SubstitutionMap.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,13 @@ SubstitutionMap SubstitutionMap::subst(InFlightSubstitution &IFS) const {
380380
return SubstitutionMap(genericSig, newSubs, newConformances);
381381
}
382382

383+
SubstitutionMap
384+
SubstitutionMap::getProtocolSubstitutions(ProtocolConformanceRef conformance) {
385+
return getProtocolSubstitutions(conformance.getProtocol(),
386+
conformance.getType(),
387+
conformance);
388+
}
389+
383390
SubstitutionMap
384391
SubstitutionMap::getProtocolSubstitutions(ProtocolDecl *protocol,
385392
Type selfType,

lib/SILGen/SILGenApply.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ SubstitutionMap SILGenModule::mapSubstitutionsForWitnessOverride(
9595
Type origProtoSelfType = origProto->getSelfInterfaceType();
9696
auto baseProto = cast<ProtocolDecl>(overridden->getDeclContext());
9797
return SubstitutionMap::getProtocolSubstitutions(
98-
baseProto, origProtoSelfType.subst(subs),
9998
subs.lookupConformance(origProtoSelfType->getCanonicalType(), baseProto));
10099
}
101100

lib/SILOptimizer/Utils/CastOptimizer.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@ static SubstitutionMap lookupBridgeToObjCProtocolSubs(CanType target) {
7676
auto bridgedProto =
7777
target->getASTContext().getProtocol(KnownProtocolKind::ObjectiveCBridgeable);
7878
auto conf = lookupConformance(target, bridgedProto);
79-
return SubstitutionMap::getProtocolSubstitutions(conf.getProtocol(),
80-
target, conf);
79+
return SubstitutionMap::getProtocolSubstitutions(conf);
8180
}
8281

8382
/// Given that our insertion point is at the cast that we are trying to

lib/Sema/AssociatedTypeInference.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2901,17 +2901,14 @@ bool AssociatedTypeInference::checkCurrentTypeWitnesses(
29012901
// Check any same-type requirements in the protocol's requirement signature.
29022902
SubstOptions options = getSubstOptionsWithCurrentTypeWitnesses();
29032903

2904-
auto typeInContext = adoptee;
29052904
ProtocolConformanceRef conformanceInContext(conformance);
29062905
if (auto *genericEnv = conformance->getGenericEnvironment()) {
2907-
typeInContext = genericEnv->mapTypeIntoContext(typeInContext);
29082906
conformanceInContext =
29092907
conformanceInContext.subst(genericEnv->getForwardingSubstitutionMap());
29102908
}
29112909

29122910
auto substitutions =
2913-
SubstitutionMap::getProtocolSubstitutions(
2914-
proto, typeInContext, conformanceInContext);
2911+
SubstitutionMap::getProtocolSubstitutions(conformanceInContext);
29152912

29162913
SmallVector<Requirement, 4> sanitizedRequirements;
29172914
auto requirements = proto->getRequirementSignature().getRequirements();
@@ -4543,8 +4540,6 @@ AssociatedConformanceRequest::evaluate(Evaluator &eval,
45434540
CanType origTy, ProtocolDecl *reqProto,
45444541
unsigned index) const {
45454542
auto subMap = SubstitutionMap::getProtocolSubstitutions(
4546-
conformance->getProtocol(),
4547-
conformance->getType(),
45484543
ProtocolConformanceRef(conformance));
45494544
auto substTy = origTy.subst(subMap);
45504545

lib/Sema/TypeCheckConcurrency.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5127,7 +5127,6 @@ getIsolationFromWitnessedRequirements(ValueDecl *value) {
51275127
// Substitute into the global actor type.
51285128
auto conformance = std::get<0>(isolated);
51295129
auto requirementSubs = SubstitutionMap::getProtocolSubstitutions(
5130-
conformance->getProtocol(), dc->getSelfInterfaceType(),
51315130
ProtocolConformanceRef(conformance));
51325131
Type globalActor = isolation.getGlobalActor().subst(requirementSubs);
51335132
if (!globalActorTypes.insert(globalActor->getCanonicalType()).second)

lib/Sema/TypeCheckProtocol.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3354,9 +3354,8 @@ ConformanceChecker::checkActorIsolation(ValueDecl *requirement,
33543354
// Determine the isolation of the requirement itself.
33553355
auto requirementIsolation = getActorIsolation(requirement);
33563356
if (requirementIsolation.requiresSubstitution()) {
3357-
auto substitutingType = DC->mapTypeIntoContext(Conformance->getType());
33583357
auto subs = SubstitutionMap::getProtocolSubstitutions(
3359-
Proto, substitutingType, ProtocolConformanceRef(Conformance));
3358+
ProtocolConformanceRef(Conformance));
33603359
requirementIsolation = requirementIsolation.subst(subs);
33613360
}
33623361

@@ -3852,8 +3851,7 @@ filterProtocolRequirements(
38523851
const auto getProtocolSubstitutionMap = [&](ValueDecl *Req) {
38533852
auto *const PD = cast<ProtocolDecl>(Req->getDeclContext());
38543853
auto Conformance = lookupConformance(Adoptee, PD);
3855-
return SubstitutionMap::getProtocolSubstitutions(
3856-
PD, Adoptee, Conformance);
3854+
return SubstitutionMap::getProtocolSubstitutions(Conformance);
38573855
};
38583856

38593857
llvm::SmallDenseMap<DeclName, llvm::SmallVector<ValueDecl *, 2>, 4>

lib/Sema/TypeCheckRequestFunctions.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,6 @@ static Type inferResultBuilderType(ValueDecl *decl) {
369369
// into context when applying the result builder to the
370370
// function body in the constraint system.
371371
auto subs = SubstitutionMap::getProtocolSubstitutions(
372-
protocol, dc->getSelfInterfaceType(),
373372
ProtocolConformanceRef(conformance));
374373
Type subResultBuilderType = resultBuilderType.subst(subs);
375374

0 commit comments

Comments
 (0)