Skip to content

Commit 387bcf3

Browse files
committed
[Serialization] InitAccessors: Serialization for @storageRestrictions attribute
1 parent 9719cd0 commit 387bcf3

File tree

3 files changed

+55
-1
lines changed

3 files changed

+55
-1
lines changed

lib/Serialization/Deserialization.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5630,6 +5630,30 @@ llvm::Error DeclDeserializer::deserializeDeclCommon() {
56305630
break;
56315631
}
56325632

5633+
case decls_block::StorageRestrictions_DECL_ATTR: {
5634+
unsigned numInitializesProperties;
5635+
ArrayRef<uint64_t> rawPropertyIDs;
5636+
serialization::decls_block::StorageRestrictionsDeclAttrLayout::
5637+
readRecord(scratch, numInitializesProperties, rawPropertyIDs);
5638+
5639+
SmallVector<Identifier> initializes;
5640+
SmallVector<Identifier> accesses;
5641+
5642+
for (unsigned i = 0, n = rawPropertyIDs.size(); i != n; ++i) {
5643+
auto propertyName = MF.getIdentifier(rawPropertyIDs[i]);
5644+
5645+
if (i < numInitializesProperties) {
5646+
initializes.push_back(propertyName);
5647+
} else {
5648+
accesses.push_back(propertyName);
5649+
}
5650+
}
5651+
5652+
Attr = StorageRestrictionsAttr::create(ctx, SourceLoc(), SourceRange(),
5653+
initializes, accesses);
5654+
break;
5655+
}
5656+
56335657
case decls_block::DynamicReplacement_DECL_ATTR: {
56345658
bool isImplicit;
56355659
uint64_t numArgs;

lib/Serialization/ModuleFormat.h

Lines changed: 7 additions & 1 deletion
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 = 794; // extension macros
61+
const uint16_t SWIFTMODULE_VERSION_MINOR = 795; // @storageRestrictions attribute
6262

6363
/// A standard hash seed used for all string hashes in a serialized module.
6464
///
@@ -2236,6 +2236,12 @@ namespace decls_block {
22362236
BCArray<IdentifierIDField> // initialized properties
22372237
>;
22382238

2239+
using StorageRestrictionsDeclAttrLayout = BCRecordLayout<
2240+
StorageRestrictions_DECL_ATTR,
2241+
BCVBR<16>, // num "initializes" properties
2242+
BCArray<IdentifierIDField> // properties
2243+
>;
2244+
22392245
using DifferentiableDeclAttrLayout = BCRecordLayout<
22402246
Differentiable_DECL_ATTR,
22412247
BCFixed<1>, // Implicit flag.

lib/Serialization/Serialization.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2956,6 +2956,30 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
29562956
return;
29572957
}
29582958

2959+
case DAK_StorageRestrictions: {
2960+
auto abbrCode = S.DeclTypeAbbrCodes[AccessesDeclAttrLayout::Code];
2961+
auto attr = cast<StorageRestrictionsAttr>(DA);
2962+
2963+
SmallVector<IdentifierID, 4> properties;
2964+
2965+
llvm::transform(attr->getInitializesNames(),
2966+
std::back_inserter(properties),
2967+
[&](Identifier propertyName) {
2968+
return S.addDeclBaseNameRef(propertyName);
2969+
});
2970+
2971+
llvm::transform(attr->getAccessesNames(),
2972+
std::back_inserter(properties),
2973+
[&](Identifier propertyName) {
2974+
return S.addDeclBaseNameRef(propertyName);
2975+
});
2976+
2977+
StorageRestrictionsDeclAttrLayout::emitRecord(
2978+
S.Out, S.ScratchRecord, abbrCode, attr->getNumInitializesProperties(),
2979+
properties);
2980+
return;
2981+
}
2982+
29592983
case DAK_DynamicReplacement: {
29602984
auto abbrCode =
29612985
S.DeclTypeAbbrCodes[DynamicReplacementDeclAttrLayout::Code];

0 commit comments

Comments
 (0)