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

@@ -93,6 +93,7 @@ public:
SWIFT_DEBUG_DUMP;
};
class CanGenericSignature;
class GenericSignatureImpl;
class GenericTypeParamType;
@@ -140,6 +141,10 @@ public:
SWIFT_DEBUG_DUMP;
std::string getAsString() const;
/// Returns the canonical generic signature, or \c nullptr if the underlying
/// pointer is \c nullptr. The result is cached.
CanGenericSignature getCanonicalSignature() const;
// Support for FoldingSet.
void Profile(llvm::FoldingSetNodeID &id) const;
@@ -300,8 +305,8 @@ public:
bool isCanonical() const;
ASTContext &getASTContext() const;
/// Canonicalize the components of a generic signature.
/// Returns the canonical generic signature. The result is cached.
CanGenericSignature getCanonicalSignature() const;
/// Retrieve the generic signature builder for the given generic signature.