Skip to content

Commit a355c38

Browse files
committed
AST: Rename ProtocolConformance::getSubstitutions() to getSubstitutionMap() and remove ModuleDecl parameter
1 parent b71cf4c commit a355c38

File tree

9 files changed

+26
-28
lines changed

9 files changed

+26
-28
lines changed

include/swift/AST/ProtocolConformance.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,8 +254,8 @@ class alignas(1 << DeclAlignInBits) ProtocolConformance
254254
/// interface type.
255255
GenericSignature getGenericSignature() const;
256256

257-
/// Get the substitutions associated with this conformance.
258-
SubstitutionMap getSubstitutions(ModuleDecl *M) const;
257+
/// Get the conformance substitution map.
258+
SubstitutionMap getSubstitutionMap() const;
259259

260260
/// Get the underlying normal conformance.
261261
/// FIXME: remove uses of this.
@@ -343,6 +343,9 @@ class RootProtocolConformance : public ProtocolConformance {
343343
/// TODO: maybe this should return a Witness?
344344
ConcreteDeclRef getWitnessDeclRef(ValueDecl *requirement) const;
345345

346+
/// Get the conformance substitution map.
347+
SubstitutionMap getSubstitutionMap() const;
348+
346349
/// Apply the given function object to each value witness within this
347350
/// protocol conformance.
348351
///
@@ -910,6 +913,11 @@ class InheritedProtocolConformance : public ProtocolConformance,
910913
return InheritedConformance;
911914
}
912915

916+
/// Get the conformance substitution map.
917+
SubstitutionMap getSubstitutionMap() const {
918+
return InheritedConformance->getSubstitutionMap();
919+
}
920+
913921
/// Get the protocol being conformed to.
914922
ProtocolDecl *getProtocol() const {
915923
return InheritedConformance->getProtocol();

lib/AST/ASTMangler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1812,7 +1812,7 @@ static bool containsRetroactiveConformance(
18121812

18131813
// If the conformance is conditional and any of the substitutions used to
18141814
// satisfy the conditions are retroactive, it's retroactive.
1815-
auto subMap = conformance->getSubstitutions(module);
1815+
auto subMap = conformance->getSubstitutionMap();
18161816
for (auto requirement : rootConformance->getConditionalRequirements()) {
18171817
if (requirement.getKind() != RequirementKind::Conformance)
18181818
continue;

lib/AST/ProtocolConformance.cpp

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -220,17 +220,12 @@ GenericSignature ProtocolConformance::getGenericSignature() const {
220220
llvm_unreachable("Unhandled ProtocolConformanceKind in switch.");
221221
}
222222

223-
SubstitutionMap ProtocolConformance::getSubstitutions(ModuleDecl *M) const {
224-
const ProtocolConformance *conformance = this;
225-
226-
if (auto *inheritedC = dyn_cast<InheritedProtocolConformance>(conformance))
227-
conformance = inheritedC->getInheritedConformance();
228-
229-
if (auto *specializedC = dyn_cast<SpecializedProtocolConformance>(conformance))
230-
return specializedC->getSubstitutionMap();
223+
SubstitutionMap ProtocolConformance::getSubstitutionMap() const {
224+
CONFORMANCE_SUBCLASS_DISPATCH(getSubstitutionMap, ())
225+
}
231226

232-
auto *rootC = cast<RootProtocolConformance>(conformance);
233-
if (auto genericSig = rootC->getGenericSignature())
227+
SubstitutionMap RootProtocolConformance::getSubstitutionMap() const {
228+
if (auto genericSig = getGenericSignature())
234229
return genericSig->getIdentitySubstitutionMap();
235230

236231
return SubstitutionMap();

lib/AST/ProtocolConformanceRef.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -286,8 +286,7 @@ bool ProtocolConformanceRef::hasUnavailableConformance() const {
286286
return true;
287287

288288
// Check the conformances in the substitution map.
289-
auto module = concrete->getDeclContext()->getParentModule();
290-
auto subMap = concrete->getSubstitutions(module);
289+
auto subMap = concrete->getSubstitutionMap();
291290
for (auto subConformance : subMap.getConformances()) {
292291
if (subConformance.hasUnavailableConformance())
293292
return true;
@@ -327,7 +326,7 @@ bool ProtocolConformanceRef::forEachMissingConformance(
327326
}
328327

329328
// Check conformances that are part of this conformance.
330-
auto subMap = concreteConf->getSubstitutions(module);
329+
auto subMap = concreteConf->getSubstitutionMap();
331330
for (auto conformance : subMap.getConformances()) {
332331
if (conformance.forEachMissingConformance(module, fn))
333332
return true;

lib/ClangImporter/ClangDerivedConformances.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ static bool isConcreteAndValid(ProtocolConformanceRef conformanceRef,
7979
if (!conformanceRef.isConcrete())
8080
return false;
8181
auto conformance = conformanceRef.getConcrete();
82-
auto subMap = conformance->getSubstitutions(module);
82+
auto subMap = conformance->getSubstitutionMap();
8383
return llvm::all_of(subMap.getConformances(),
8484
[&](ProtocolConformanceRef each) -> bool {
8585
return isConcreteAndValid(each, module);

lib/IRGen/GenProto.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,8 +1067,7 @@ emitConditionalConformancesBuffer(IRGenFunction &IGF,
10671067
// in the buffer that gets passed to the witness table accessor.
10681068
llvm::SmallVector<llvm::Value *, 4> tables;
10691069

1070-
auto subMap = substConformance->getSubstitutions(IGF.IGM.getSwiftModule());
1071-
1070+
auto subMap = substConformance->getSubstitutionMap();
10721071
SILWitnessTable::enumerateWitnessTableConditionalConformances(
10731072
rootConformance, [&](unsigned, CanType type, ProtocolDecl *proto) {
10741073
auto substType = type.subst(subMap)->getCanonicalType();

lib/SILOptimizer/Utils/Devirtualize.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -894,16 +894,14 @@ std::pair<FullApplySite, bool> swift::tryDevirtualizeClassMethod(
894894
/// \param classWitness The ClassDecl if this is a class witness method
895895
static SubstitutionMap
896896
getWitnessMethodSubstitutions(
897-
ModuleDecl *mod,
897+
ASTContext &ctx,
898898
ProtocolConformanceRef conformanceRef,
899899
GenericSignature requirementSig,
900900
GenericSignature witnessThunkSig,
901901
SubstitutionMap origSubMap,
902902
bool isSelfAbstract,
903903
ClassDecl *classWitness) {
904904

905-
auto &ctx = mod->getASTContext();
906-
907905
if (witnessThunkSig.isNull())
908906
return SubstitutionMap();
909907

@@ -917,7 +915,7 @@ getWitnessMethodSubstitutions(
917915

918916
// If `Self` maps to a bound generic type, this gives us the
919917
// substitutions for the concrete type's generic parameters.
920-
auto baseSubMap = conformance->getSubstitutions(mod);
918+
auto baseSubMap = conformance->getSubstitutionMap();
921919

922920
unsigned baseDepth = 0;
923921
auto *rootConformance = conformance->getRootConformance();
@@ -1023,7 +1021,7 @@ swift::getWitnessMethodSubstitutions(SILModule &module, ApplySite applySite,
10231021

10241022
SubstitutionMap origSubs = applySite.getSubstitutionMap();
10251023

1026-
auto *mod = module.getSwiftModule();
1024+
auto &ctx = module.getASTContext();
10271025
bool isSelfAbstract =
10281026
witnessFnTy
10291027
->getSelfInstanceType(
@@ -1032,7 +1030,7 @@ swift::getWitnessMethodSubstitutions(SILModule &module, ApplySite applySite,
10321030
auto *classWitness = witnessFnTy->getWitnessMethodClass(
10331031
module, applySite.getFunction()->getTypeExpansionContext());
10341032

1035-
return ::getWitnessMethodSubstitutions(mod, cRef, requirementSig,
1033+
return ::getWitnessMethodSubstitutions(ctx, cRef, requirementSig,
10361034
witnessThunkSig, origSubs,
10371035
isSelfAbstract, classWitness);
10381036
}

lib/Sema/TypeCheckAvailability.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4219,8 +4219,7 @@ swift::diagnoseConformanceAvailability(SourceLoc loc,
42194219
}
42204220

42214221
// Now, check associated conformances.
4222-
SubstitutionMap subConformanceSubs =
4223-
concreteConf->getSubstitutions(DC->getParentModule());
4222+
SubstitutionMap subConformanceSubs = concreteConf->getSubstitutionMap();
42244223
if (diagnoseSubstitutionMapAvailability(loc, subConformanceSubs, where,
42254224
depTy, replacementTy,
42264225
useConformanceAvailabilityErrorsOption))

lib/Sema/TypeCheckEffects.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ static bool classifyWitness(ModuleDecl *module,
155155
case PolymorphicEffectKind::ByConformance: {
156156
// Witness has the effect if the concrete type's conformances
157157
// recursively have the effect.
158-
auto substitutions = conformance->getSubstitutions(module);
158+
auto substitutions = conformance->getSubstitutionMap();
159159
for (auto conformanceRef : substitutions.getConformances()) {
160160
if (conformanceRef.hasEffect(kind)) {
161161
return true;

0 commit comments

Comments
 (0)