Skip to content

Commit 8f44be3

Browse files
committed
Serialization: Simplify PackType serialization
1 parent 0a79968 commit 8f44be3

File tree

4 files changed

+18
-37
lines changed

4 files changed

+18
-37
lines changed

lib/Serialization/DeclTypeRecordNodes.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ TYPE(NAME_ALIAS)
115115

116116
TYPE(PACK_EXPANSION)
117117
TYPE(PACK)
118-
TRAILING_INFO(PACK_TYPE_ELT)
119118
TYPE(SIL_PACK)
120119

121120
TYPE(ERROR)

lib/Serialization/Deserialization.cpp

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6866,31 +6866,18 @@ Expected<Type> DESERIALIZE_TYPE(PACK_EXPANSION_TYPE)(
68666866

68676867
Expected<Type> DESERIALIZE_TYPE(PACK_TYPE)(
68686868
ModuleFile &MF, SmallVectorImpl<uint64_t> &scratch, StringRef blobData) {
6869-
// The pack record itself is empty. Read all trailing elements.
6870-
SmallVector<Type, 8> elements;
6871-
while (true) {
6872-
llvm::BitstreamEntry entry =
6873-
MF.fatalIfUnexpected(MF.DeclTypeCursor.advance(AF_DontPopBlockAtEnd));
6874-
if (entry.Kind != llvm::BitstreamEntry::Record)
6875-
break;
6876-
6877-
scratch.clear();
6878-
unsigned recordID = MF.fatalIfUnexpected(
6879-
MF.DeclTypeCursor.readRecord(entry.ID, scratch, &blobData));
6880-
if (recordID != decls_block::PACK_TYPE_ELT)
6881-
break;
6882-
6883-
TypeID typeID;
6884-
decls_block::PackTypeEltLayout::readRecord(scratch, typeID);
6885-
6886-
auto elementTy = MF.getTypeChecked(typeID);
6887-
if (!elementTy)
6888-
return elementTy.takeError();
6869+
ArrayRef<uint64_t> elementTypeIDs;
6870+
decls_block::PackTypeLayout::readRecord(scratch, elementTypeIDs);
68896871

6890-
elements.push_back(elementTy.get());
6872+
SmallVector<Type, 8> elementTypes;
6873+
for (auto elementTypeID : elementTypeIDs) {
6874+
auto elementType = MF.getTypeChecked(elementTypeID);
6875+
if (!elementType)
6876+
return elementType.takeError();
6877+
elementTypes.push_back(elementType.get());
68916878
}
68926879

6893-
return PackType::get(MF.getContext(), elements);
6880+
return PackType::get(MF.getContext(), elementTypes);
68946881
}
68956882

68966883
Expected<Type> DESERIALIZE_TYPE(SIL_PACK_TYPE)(

lib/Serialization/ModuleFormat.h

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ const uint16_t SWIFTMODULE_VERSION_MAJOR = 0;
5858
/// describe what change you made. The content of this comment isn't important;
5959
/// it just ensures a conflict if two people change the module format.
6060
/// Don't worry about adhering to the 80-column limit for this line.
61-
const uint16_t SWIFTMODULE_VERSION_MINOR = 757; // expanded macro definitions
61+
const uint16_t SWIFTMODULE_VERSION_MINOR = 759; // change PackType
6262

6363
/// A standard hash seed used for all string hashes in a serialized module.
6464
///
@@ -1327,14 +1327,10 @@ namespace decls_block {
13271327
);
13281328

13291329
TYPE_LAYOUT(PackTypeLayout,
1330-
PACK_TYPE
1330+
PACK_TYPE,
1331+
BCArray<TypeIDField> // component types
13311332
);
13321333

1333-
using PackTypeEltLayout = BCRecordLayout<
1334-
PACK_TYPE_ELT,
1335-
TypeIDField // type
1336-
>;
1337-
13381334
TYPE_LAYOUT(SILPackTypeLayout,
13391335
SIL_PACK_TYPE,
13401336
BCFixed<1>, // is address

lib/Serialization/Serialization.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5004,14 +5004,14 @@ class Serializer::TypeSerializer : public TypeVisitor<TypeSerializer> {
50045004
void visitPackType(const PackType *packTy) {
50055005
using namespace decls_block;
50065006
unsigned abbrCode = S.DeclTypeAbbrCodes[PackTypeLayout::Code];
5007-
PackTypeLayout::emitRecord(S.Out, S.ScratchRecord, abbrCode);
50085007

5009-
abbrCode = S.DeclTypeAbbrCodes[PackTypeEltLayout::Code];
5010-
for (auto elt : packTy->getElementTypes()) {
5011-
PackTypeEltLayout::emitRecord(
5012-
S.Out, S.ScratchRecord, abbrCode,
5013-
S.addTypeRef(elt));
5008+
SmallVector<TypeID, 8> variableData;
5009+
for (auto elementType : packTy->getElementTypes()) {
5010+
variableData.push_back(S.addTypeRef(elementType));
50145011
}
5012+
5013+
PackTypeLayout::emitRecord(S.Out, S.ScratchRecord, abbrCode,
5014+
variableData);
50155015
}
50165016

50175017
void visitSILPackType(const SILPackType *packTy) {
@@ -5568,7 +5568,6 @@ void Serializer::writeAllDeclsAndTypes() {
55685568
registerDeclTypeAbbr<DynamicSelfTypeLayout>();
55695569
registerDeclTypeAbbr<PackExpansionTypeLayout>();
55705570
registerDeclTypeAbbr<PackTypeLayout>();
5571-
registerDeclTypeAbbr<PackTypeEltLayout>();
55725571

55735572
registerDeclTypeAbbr<ErrorFlagLayout>();
55745573
registerDeclTypeAbbr<ErrorTypeLayout>();

0 commit comments

Comments
 (0)