mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
(De-)serialized ProtocolConformance::DefaultedDefinitions.
Swift SVN r6166
This commit is contained in:
@@ -181,11 +181,12 @@ ProtocolConformance *ModuleFile::maybeReadConformance() {
|
||||
return nullptr;
|
||||
|
||||
lastRecordOffset.reset();
|
||||
unsigned valueCount, typeCount, inheritedCount;
|
||||
unsigned valueCount, typeCount, inheritedCount, defaultedCount;
|
||||
ArrayRef<uint64_t> rawIDs;
|
||||
|
||||
ProtocolConformanceLayout::readRecord(scratch, valueCount, typeCount,
|
||||
inheritedCount, rawIDs);
|
||||
inheritedCount, defaultedCount,
|
||||
rawIDs);
|
||||
|
||||
ProtocolConformance *conformance =
|
||||
ModuleContext->Ctx.Allocate<ProtocolConformance>(1);
|
||||
@@ -219,6 +220,12 @@ ProtocolConformance *ModuleFile::maybeReadConformance() {
|
||||
conformance->InheritedMapping.insert(std::make_pair(proto, inherited));
|
||||
}
|
||||
|
||||
while (defaultedCount--) {
|
||||
BCOffsetRAII restoreOffset(DeclTypeCursor);
|
||||
auto decl = cast<ValueDecl>(getDecl(*rawIDIter++));
|
||||
conformance->DefaultedDefinitions.insert(decl);
|
||||
}
|
||||
|
||||
return conformance;
|
||||
}
|
||||
|
||||
|
||||
@@ -553,6 +553,7 @@ namespace decls_block {
|
||||
BCVBR<5>, // value mapping count
|
||||
BCVBR<5>, // type mapping count
|
||||
BCVBR<5>, // inherited conformances count
|
||||
BCVBR<5>, // defaulted definitions count
|
||||
BCArray<DeclIDField>
|
||||
// The array contains value-value pairs, then type-type pairs,
|
||||
// then protocol IDs. The additional conformances trail the record.
|
||||
|
||||
@@ -645,6 +645,7 @@ Serializer::writeConformances(ArrayRef<ProtocolConformance *> conformances) {
|
||||
for (auto conformance : conformances) {
|
||||
SmallVector<DeclID, 16> data;
|
||||
SmallVector<ProtocolConformance *, 8> inherited;
|
||||
unsigned numDefaultedDefinitions = 0;
|
||||
for (auto valueMapping : conformance->Mapping) {
|
||||
data.push_back(addDeclRef(valueMapping.first));
|
||||
data.push_back(addDeclRef(valueMapping.second));
|
||||
@@ -657,11 +658,16 @@ Serializer::writeConformances(ArrayRef<ProtocolConformance *> conformances) {
|
||||
data.push_back(addDeclRef(inheritedMapping.first));
|
||||
inherited.push_back(inheritedMapping.second);
|
||||
}
|
||||
for (auto defaulted : conformance->DefaultedDefinitions) {
|
||||
data.push_back(addDeclRef(defaulted));
|
||||
++numDefaultedDefinitions;
|
||||
}
|
||||
|
||||
ProtocolConformanceLayout::emitRecord(Out, ScratchRecord, abbrCode,
|
||||
conformance->Mapping.size(),
|
||||
conformance->TypeMapping.size(),
|
||||
conformance->InheritedMapping.size(),
|
||||
numDefaultedDefinitions,
|
||||
data);
|
||||
writeConformances(inherited);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user