mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[NFC] Adopt TypeBase-isms for GenericSignature
Structurally prevent a number of common anti-patterns involving generic signatures by separating the interface into GenericSignature and the implementation into GenericSignatureBase. In particular, this allows the comparison operators to be deleted which forces callers to canonicalize the signature or ask to compare pointers explicitly.
This commit is contained in:
@@ -854,7 +854,7 @@ static void skipGenericRequirements(llvm::BitstreamCursor &Cursor) {
|
||||
}
|
||||
}
|
||||
|
||||
GenericSignature *ModuleFile::getGenericSignature(
|
||||
GenericSignature ModuleFile::getGenericSignature(
|
||||
serialization::GenericSignatureID ID) {
|
||||
auto signature = getGenericSignatureChecked(ID);
|
||||
if (!signature)
|
||||
@@ -862,7 +862,7 @@ GenericSignature *ModuleFile::getGenericSignature(
|
||||
return signature.get();
|
||||
}
|
||||
|
||||
Expected<GenericSignature *>
|
||||
Expected<GenericSignature>
|
||||
ModuleFile::getGenericSignatureChecked(serialization::GenericSignatureID ID) {
|
||||
using namespace decls_block;
|
||||
|
||||
@@ -1368,7 +1368,7 @@ ModuleFile::resolveCrossReference(ModuleID MID, uint32_t pathLen) {
|
||||
|
||||
// Filters for values discovered in the remaining path pieces.
|
||||
ModuleDecl *M = nullptr;
|
||||
CanGenericSignature genericSig = nullptr;
|
||||
CanGenericSignature genericSig = CanGenericSignature();
|
||||
|
||||
// For remaining path pieces, filter or drill down into the results we have.
|
||||
while (--pathLen) {
|
||||
@@ -1597,7 +1597,7 @@ giveUpFastPath:
|
||||
|
||||
ValueDecl *base = values.front();
|
||||
|
||||
GenericSignature *currentSig = nullptr;
|
||||
GenericSignature currentSig = GenericSignature();
|
||||
if (auto nominal = dyn_cast<NominalTypeDecl>(base)) {
|
||||
if (genericSig) {
|
||||
// Find an extension in the requested module that has the
|
||||
@@ -2288,7 +2288,7 @@ public:
|
||||
SourceLoc(), genericParams, DC);
|
||||
declOrOffset = alias;
|
||||
|
||||
auto *genericSig = MF.getGenericSignature(genericSigID);
|
||||
auto genericSig = MF.getGenericSignature(genericSigID);
|
||||
alias->setGenericSignature(genericSig);
|
||||
|
||||
auto underlying = MF.getType(underlyingTypeID);
|
||||
@@ -4575,7 +4575,7 @@ public:
|
||||
TypeID resultID;
|
||||
uint8_t rawRepresentation;
|
||||
bool noescape = false, throws;
|
||||
GenericSignature *genericSig = nullptr;
|
||||
GenericSignature genericSig = GenericSignature();
|
||||
|
||||
if (!isGeneric) {
|
||||
decls_block::FunctionTypeLayout::readRecord(scratch, resultID,
|
||||
@@ -4638,11 +4638,11 @@ public:
|
||||
}
|
||||
|
||||
if (!isGeneric) {
|
||||
assert(genericSig == nullptr);
|
||||
assert(genericSig.isNull());
|
||||
return FunctionType::get(params, resultTy.get(), info);
|
||||
}
|
||||
|
||||
assert(genericSig != nullptr);
|
||||
assert(!genericSig.isNull());
|
||||
return GenericFunctionType::get(genericSig, params, resultTy.get(), info);
|
||||
}
|
||||
|
||||
@@ -5051,7 +5051,7 @@ public:
|
||||
witnessMethodConformance = MF.readConformance(MF.DeclTypeCursor);
|
||||
}
|
||||
|
||||
GenericSignature *genericSig = MF.getGenericSignature(rawGenericSig);
|
||||
GenericSignature genericSig = MF.getGenericSignature(rawGenericSig);
|
||||
|
||||
return SILFunctionType::get(genericSig, extInfo, coroutineKind.getValue(),
|
||||
calleeConvention.getValue(),
|
||||
|
||||
Reference in New Issue
Block a user