NFC: Add GenericSignature::getCanonicalSignature. (#29105)

Motivation: `GenericSignatureImpl::getCanonicalSignature` crashes for
`GenericSignature` with underlying `nullptr`. This led to verbose workarounds
when computing `CanGenericSignature` from `GenericSignature`.

Solution: `GenericSignature::getCanonicalSignature` is a wrapper around
`GenericSignatureImpl::getCanonicalSignature` that returns the canonical
signature, or `nullptr` if the underlying pointer is `nullptr`.

Rewrite all verbose workarounds using `GenericSignature::getCanonicalSignature`.
This commit is contained in:
Dan Zheng
2020-01-12 12:17:41 -08:00
committed by GitHub
parent 0d87a14785
commit 1486d6b346
42 changed files with 184 additions and 189 deletions

View File

@@ -327,7 +327,7 @@ namespace {
void addGenericParameters() {
GenericSignature sig = asImpl().getGenericSignature();
assert(sig);
auto canSig = sig->getCanonicalSignature();
auto canSig = sig.getCanonicalSignature();
canSig->forEachParam([&](GenericTypeParamType *param, bool canonical) {
// Currently, there are only type parameters. The parameter is a key
@@ -1688,10 +1688,8 @@ namespace {
auto underlyingType = Type(O->getUnderlyingInterfaceType())
.subst(*O->getUnderlyingTypeSubstitutions())
->getCanonicalType(sig);
auto contextSig = O->getGenericSignature()
? O->getGenericSignature()->getCanonicalSignature()
: CanGenericSignature();
auto contextSig = O->getGenericSignature().getCanonicalSignature();
B.addRelativeAddress(IGM.getTypeRef(underlyingType, contextSig,
MangledTypeRefRole::Metadata).first);