mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Add support for lifetime dependence in parameter position
This commit is contained in:
@@ -2572,17 +2572,20 @@ void Serializer::writeASTBlockEntity(const DeclContext *DC) {
|
||||
}
|
||||
}
|
||||
|
||||
void Serializer::writeLifetimeDependenceInfo(
|
||||
LifetimeDependenceInfo lifetimeDependenceInfo) {
|
||||
void Serializer::writeLifetimeDependencies(
|
||||
ArrayRef<LifetimeDependenceInfo> lifetimeDependencies) {
|
||||
using namespace decls_block;
|
||||
SmallVector<bool> paramIndices;
|
||||
lifetimeDependenceInfo.getConcatenatedData(paramIndices);
|
||||
for (auto info : lifetimeDependencies) {
|
||||
info.getConcatenatedData(paramIndices);
|
||||
|
||||
auto abbrCode = DeclTypeAbbrCodes[LifetimeDependenceLayout::Code];
|
||||
LifetimeDependenceLayout::emitRecord(
|
||||
Out, ScratchRecord, abbrCode, lifetimeDependenceInfo.isImmortal(),
|
||||
lifetimeDependenceInfo.hasInheritLifetimeParamIndices(),
|
||||
lifetimeDependenceInfo.hasScopeLifetimeParamIndices(), paramIndices);
|
||||
auto abbrCode = DeclTypeAbbrCodes[LifetimeDependenceLayout::Code];
|
||||
LifetimeDependenceLayout::emitRecord(
|
||||
Out, ScratchRecord, abbrCode, info.getTargetIndex(), info.isImmortal(),
|
||||
info.hasInheritLifetimeParamIndices(),
|
||||
info.hasScopeLifetimeParamIndices(), paramIndices);
|
||||
paramIndices.clear();
|
||||
}
|
||||
}
|
||||
|
||||
#define SIMPLE_CASE(TYPENAME, VALUE) \
|
||||
@@ -4587,9 +4590,9 @@ public:
|
||||
|
||||
auto fnType = ty->getAs<AnyFunctionType>();
|
||||
if (fnType) {
|
||||
if (auto *lifetimeDependenceInfo =
|
||||
fnType->getLifetimeDependenceInfoOrNull()) {
|
||||
S.writeLifetimeDependenceInfo(*lifetimeDependenceInfo);
|
||||
auto lifetimeDependencies = fnType->getLifetimeDependencies();
|
||||
if (!lifetimeDependencies.empty()) {
|
||||
S.writeLifetimeDependencies(lifetimeDependencies);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4714,9 +4717,9 @@ public:
|
||||
|
||||
auto fnType = ty->getAs<AnyFunctionType>();
|
||||
if (fnType) {
|
||||
if (auto *lifetimeDependenceInfo =
|
||||
fnType->getLifetimeDependenceInfoOrNull()) {
|
||||
S.writeLifetimeDependenceInfo(*lifetimeDependenceInfo);
|
||||
auto lifetimeDependencies = fnType->getLifetimeDependencies();
|
||||
if (!lifetimeDependencies.empty()) {
|
||||
S.writeLifetimeDependencies(lifetimeDependencies);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4884,9 +4887,9 @@ public:
|
||||
|
||||
auto fnType = ty->getAs<AnyFunctionType>();
|
||||
if (fnType) {
|
||||
if (auto *lifetimeDependenceInfo =
|
||||
fnType->getLifetimeDependenceInfoOrNull()) {
|
||||
S.writeLifetimeDependenceInfo(*lifetimeDependenceInfo);
|
||||
auto lifetimeDependencies = fnType->getLifetimeDependencies();
|
||||
if (!lifetimeDependencies.empty()) {
|
||||
S.writeLifetimeDependencies(lifetimeDependencies);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5631,9 +5634,9 @@ public:
|
||||
|
||||
serializeFunctionTypeParams(fnTy);
|
||||
|
||||
if (auto *lifetimeDependenceInfo =
|
||||
fnTy->getLifetimeDependenceInfoOrNull()) {
|
||||
S.writeLifetimeDependenceInfo(*lifetimeDependenceInfo);
|
||||
auto lifetimeDependencies = fnTy->getLifetimeDependencies();
|
||||
if (!lifetimeDependencies.empty()) {
|
||||
S.writeLifetimeDependencies(lifetimeDependencies);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5654,9 +5657,9 @@ public:
|
||||
|
||||
serializeFunctionTypeParams(fnTy);
|
||||
|
||||
if (auto *lifetimeDependenceInfo =
|
||||
fnTy->getLifetimeDependenceInfoOrNull()) {
|
||||
S.writeLifetimeDependenceInfo(*lifetimeDependenceInfo);
|
||||
auto lifetimeDependencies = fnTy->getLifetimeDependencies();
|
||||
if (!lifetimeDependencies.empty()) {
|
||||
S.writeLifetimeDependencies(lifetimeDependencies);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5747,9 +5750,9 @@ public:
|
||||
invocationSigID, invocationSubstMapID, patternSubstMapID,
|
||||
clangTypeID, variableData);
|
||||
|
||||
if (auto *lifetimeDependenceInfo =
|
||||
fnTy->getLifetimeDependenceInfoOrNull()) {
|
||||
S.writeLifetimeDependenceInfo(*lifetimeDependenceInfo);
|
||||
auto lifetimeDependencies = fnTy->getLifetimeDependencies();
|
||||
if (!lifetimeDependencies.empty()) {
|
||||
S.writeLifetimeDependencies(lifetimeDependencies);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user