mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
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:
@@ -167,12 +167,12 @@ GenericSignatureBuilder *GenericSignatureImpl::getGenericSignatureBuilder() {
|
||||
}
|
||||
|
||||
bool GenericSignatureImpl::isEqual(GenericSignature Other) {
|
||||
return getCanonicalSignature() == Other.getPointer()->getCanonicalSignature();
|
||||
return getCanonicalSignature() == Other.getCanonicalSignature();
|
||||
}
|
||||
|
||||
bool GenericSignatureImpl::isCanonical() const {
|
||||
if (CanonicalSignatureOrASTContext.is<ASTContext*>()) return true;
|
||||
|
||||
if (CanonicalSignatureOrASTContext.is<ASTContext *>())
|
||||
return true;
|
||||
return getCanonicalSignature().getPointer() == this;
|
||||
}
|
||||
|
||||
@@ -310,6 +310,14 @@ CanGenericSignature::getCanonical(TypeArrayView<GenericTypeParamType> params,
|
||||
return CanGenericSignature(canSig);
|
||||
}
|
||||
|
||||
CanGenericSignature GenericSignature::getCanonicalSignature() const {
|
||||
// If the underlying pointer is null, return `CanGenericSignature()`.
|
||||
if (isNull())
|
||||
return CanGenericSignature();
|
||||
// Otherwise, return the canonical signature of the underlying pointer.
|
||||
return getPointer()->getCanonicalSignature();
|
||||
}
|
||||
|
||||
CanGenericSignature GenericSignatureImpl::getCanonicalSignature() const {
|
||||
// If we haven't computed the canonical signature yet, do so now.
|
||||
if (CanonicalSignatureOrASTContext.isNull()) {
|
||||
|
||||
Reference in New Issue
Block a user