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;
|
return nullptr;
|
||||||
|
|
||||||
lastRecordOffset.reset();
|
lastRecordOffset.reset();
|
||||||
unsigned valueCount, typeCount, inheritedCount;
|
unsigned valueCount, typeCount, inheritedCount, defaultedCount;
|
||||||
ArrayRef<uint64_t> rawIDs;
|
ArrayRef<uint64_t> rawIDs;
|
||||||
|
|
||||||
ProtocolConformanceLayout::readRecord(scratch, valueCount, typeCount,
|
ProtocolConformanceLayout::readRecord(scratch, valueCount, typeCount,
|
||||||
inheritedCount, rawIDs);
|
inheritedCount, defaultedCount,
|
||||||
|
rawIDs);
|
||||||
|
|
||||||
ProtocolConformance *conformance =
|
ProtocolConformance *conformance =
|
||||||
ModuleContext->Ctx.Allocate<ProtocolConformance>(1);
|
ModuleContext->Ctx.Allocate<ProtocolConformance>(1);
|
||||||
@@ -219,6 +220,12 @@ ProtocolConformance *ModuleFile::maybeReadConformance() {
|
|||||||
conformance->InheritedMapping.insert(std::make_pair(proto, inherited));
|
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;
|
return conformance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -553,6 +553,7 @@ namespace decls_block {
|
|||||||
BCVBR<5>, // value mapping count
|
BCVBR<5>, // value mapping count
|
||||||
BCVBR<5>, // type mapping count
|
BCVBR<5>, // type mapping count
|
||||||
BCVBR<5>, // inherited conformances count
|
BCVBR<5>, // inherited conformances count
|
||||||
|
BCVBR<5>, // defaulted definitions count
|
||||||
BCArray<DeclIDField>
|
BCArray<DeclIDField>
|
||||||
// The array contains value-value pairs, then type-type pairs,
|
// The array contains value-value pairs, then type-type pairs,
|
||||||
// then protocol IDs. The additional conformances trail the record.
|
// then protocol IDs. The additional conformances trail the record.
|
||||||
|
|||||||
@@ -645,6 +645,7 @@ Serializer::writeConformances(ArrayRef<ProtocolConformance *> conformances) {
|
|||||||
for (auto conformance : conformances) {
|
for (auto conformance : conformances) {
|
||||||
SmallVector<DeclID, 16> data;
|
SmallVector<DeclID, 16> data;
|
||||||
SmallVector<ProtocolConformance *, 8> inherited;
|
SmallVector<ProtocolConformance *, 8> inherited;
|
||||||
|
unsigned numDefaultedDefinitions = 0;
|
||||||
for (auto valueMapping : conformance->Mapping) {
|
for (auto valueMapping : conformance->Mapping) {
|
||||||
data.push_back(addDeclRef(valueMapping.first));
|
data.push_back(addDeclRef(valueMapping.first));
|
||||||
data.push_back(addDeclRef(valueMapping.second));
|
data.push_back(addDeclRef(valueMapping.second));
|
||||||
@@ -657,11 +658,16 @@ Serializer::writeConformances(ArrayRef<ProtocolConformance *> conformances) {
|
|||||||
data.push_back(addDeclRef(inheritedMapping.first));
|
data.push_back(addDeclRef(inheritedMapping.first));
|
||||||
inherited.push_back(inheritedMapping.second);
|
inherited.push_back(inheritedMapping.second);
|
||||||
}
|
}
|
||||||
|
for (auto defaulted : conformance->DefaultedDefinitions) {
|
||||||
|
data.push_back(addDeclRef(defaulted));
|
||||||
|
++numDefaultedDefinitions;
|
||||||
|
}
|
||||||
|
|
||||||
ProtocolConformanceLayout::emitRecord(Out, ScratchRecord, abbrCode,
|
ProtocolConformanceLayout::emitRecord(Out, ScratchRecord, abbrCode,
|
||||||
conformance->Mapping.size(),
|
conformance->Mapping.size(),
|
||||||
conformance->TypeMapping.size(),
|
conformance->TypeMapping.size(),
|
||||||
conformance->InheritedMapping.size(),
|
conformance->InheritedMapping.size(),
|
||||||
|
numDefaultedDefinitions,
|
||||||
data);
|
data);
|
||||||
writeConformances(inherited);
|
writeConformances(inherited);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user