mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[Serialization] Add a "unavailable" bit to conditional substitution record
A step towards supporting different opaque result type produced by a `if #unavailable` block.
This commit is contained in:
committed by
Pavel Yaskevich
parent
0fdba62bd8
commit
8185db433a
@@ -3945,17 +3945,19 @@ public:
|
||||
S.DeclTypeAbbrCodes[ConditionalSubstitutionLayout::Code];
|
||||
for (const auto *subs :
|
||||
opaqueDecl->getConditionallyAvailableSubstitutions().drop_back()) {
|
||||
SmallVector<IdentifierID, 4> conditions;
|
||||
|
||||
for (const auto &condition : subs->getAvailability()) {
|
||||
auto lowerEndpoint = condition.getLowerEndpoint();
|
||||
conditions.push_back(
|
||||
S.addUniquedStringRef(lowerEndpoint.getAsString()));
|
||||
}
|
||||
|
||||
ConditionalSubstitutionLayout::emitRecord(
|
||||
S.Out, S.ScratchRecord, abbrCode,
|
||||
S.addSubstitutionMapRef(subs->getSubstitutions()), conditions);
|
||||
S.addSubstitutionMapRef(subs->getSubstitutions()));
|
||||
|
||||
unsigned condAbbrCode =
|
||||
S.DeclTypeAbbrCodes[ConditionalSubstitutionConditionLayout::Code];
|
||||
for (const auto &condition : subs->getAvailability()) {
|
||||
ENCODE_VER_TUPLE(osVersion, llvm::Optional<llvm::VersionTuple>(
|
||||
condition.getLowerEndpoint()));
|
||||
ConditionalSubstitutionConditionLayout::emitRecord(
|
||||
S.Out, S.ScratchRecord, condAbbrCode, /*isUnavailable=*/false,
|
||||
LIST_VER_TUPLE_PIECES(osVersion));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5134,6 +5136,7 @@ void Serializer::writeAllDeclsAndTypes() {
|
||||
registerDeclTypeAbbr<XRefLayout>();
|
||||
|
||||
registerDeclTypeAbbr<ConditionalSubstitutionLayout>();
|
||||
registerDeclTypeAbbr<ConditionalSubstitutionConditionLayout>();
|
||||
|
||||
#define DECL_ATTR(X, NAME, ...) \
|
||||
registerDeclTypeAbbr<NAME##DeclAttrLayout>();
|
||||
|
||||
Reference in New Issue
Block a user