Skip to content

Commit 5ad096f

Browse files
committed
AST: Remove special handling of protocols in getOverrideGenericSignature()
1 parent c236c30 commit 5ad096f

File tree

1 file changed

+30
-38
lines changed

1 file changed

+30
-38
lines changed

lib/AST/ASTContext.cpp

Lines changed: 30 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5321,49 +5321,41 @@ ASTContext::getOverrideGenericSignature(const NominalTypeDecl *baseNominal,
53215321

53225322
SmallVector<Requirement, 2> addedRequirements;
53235323

5324-
if (isa<ProtocolDecl>(baseNominal)) {
5325-
assert(isa<ProtocolDecl>(derivedNominal));
5326-
5327-
for (auto reqt : baseGenericSig.getRequirements()) {
5328-
addedRequirements.push_back(reqt);
5324+
unsigned derivedDepth = 0;
5325+
unsigned baseDepth = 0;
5326+
if (derivedNominalSig)
5327+
derivedDepth = derivedNominalSig.getGenericParams().back()->getDepth() + 1;
5328+
if (const auto baseNominalSig = baseNominal->getGenericSignature())
5329+
baseDepth = baseNominalSig.getGenericParams().back()->getDepth() + 1;
5330+
5331+
const auto subMap = derivedNominal->getDeclaredInterfaceType()
5332+
->getContextSubstitutionMap(derivedNominal->getModuleContext(),
5333+
baseNominal);
5334+
5335+
auto substFn = [&](SubstitutableType *type) -> Type {
5336+
auto *gp = cast<GenericTypeParamType>(type);
5337+
5338+
if (gp->getDepth() < baseDepth) {
5339+
return Type(gp).subst(subMap);
53295340
}
5330-
} else {
5331-
unsigned derivedDepth = 0;
5332-
unsigned baseDepth = 0;
5333-
if (derivedNominalSig)
5334-
derivedDepth = derivedNominalSig.getGenericParams().back()->getDepth() + 1;
5335-
if (const auto baseNominalSig = baseNominal->getGenericSignature())
5336-
baseDepth = baseNominalSig.getGenericParams().back()->getDepth() + 1;
5337-
5338-
const auto subMap = derivedNominal->getDeclaredInterfaceType()
5339-
->getContextSubstitutionMap(derivedNominal->getModuleContext(),
5340-
baseNominal);
5341-
5342-
auto substFn = [&](SubstitutableType *type) -> Type {
5343-
auto *gp = cast<GenericTypeParamType>(type);
5344-
5345-
if (gp->getDepth() < baseDepth) {
5346-
return Type(gp).subst(subMap);
5347-
}
53485341

5349-
return CanGenericTypeParamType::get(
5350-
gp->isTypeSequence(), gp->getDepth() - baseDepth + derivedDepth,
5351-
gp->getIndex(), *this);
5352-
};
5342+
return CanGenericTypeParamType::get(
5343+
gp->isTypeSequence(), gp->getDepth() - baseDepth + derivedDepth,
5344+
gp->getIndex(), *this);
5345+
};
53535346

5354-
auto lookupConformanceFn =
5355-
[&](CanType depTy, Type substTy,
5356-
ProtocolDecl *proto) -> ProtocolConformanceRef {
5357-
if (auto conf = subMap.lookupConformance(depTy, proto))
5358-
return conf;
5347+
auto lookupConformanceFn =
5348+
[&](CanType depTy, Type substTy,
5349+
ProtocolDecl *proto) -> ProtocolConformanceRef {
5350+
if (auto conf = subMap.lookupConformance(depTy, proto))
5351+
return conf;
53595352

5360-
return ProtocolConformanceRef(proto);
5361-
};
5353+
return ProtocolConformanceRef(proto);
5354+
};
53625355

5363-
for (auto reqt : baseGenericSig.getRequirements()) {
5364-
if (auto substReqt = reqt.subst(substFn, lookupConformanceFn)) {
5365-
addedRequirements.push_back(*substReqt);
5366-
}
5356+
for (auto reqt : baseGenericSig.getRequirements()) {
5357+
if (auto substReqt = reqt.subst(substFn, lookupConformanceFn)) {
5358+
addedRequirements.push_back(*substReqt);
53675359
}
53685360
}
53695361

0 commit comments

Comments
 (0)