Skip to content

Commit 4686bf1

Browse files
committed
Simplify ContextDescriptorCache by using a type as the deleter
1 parent 32a39b8 commit 4686bf1

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

include/swift/Remote/MetadataReader.h

+9-8
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ class MetadataReader {
187187

188188
using ContextDescriptorRef =
189189
RemoteRef<const TargetContextDescriptor<Runtime>>;
190-
using OwnedContextDescriptorRef = MemoryReader::ReadBytesResult;
190+
using OwnedContextDescriptorRef = std::unique_ptr<const void, delete_with_free>;
191191

192192
/// A reference to a context descriptor that may be in an unloaded image.
193193
class ParentContextDescriptorRef {
@@ -1051,12 +1051,13 @@ class MetadataReader {
10511051
case ContextDescriptorKind::Module:
10521052
sizeEstimate = sizeof(TargetModuleContextDescriptor<Runtime>);
10531053
break;
1054-
case ContextDescriptorKind::Extension:
1055-
sizeEstimate = sizeof(TargetExtensionContextDescriptor<Runtime>);
1056-
break;
10571054

10581055
// For types that use trailing objects, ask the trailing object logic to
10591056
// look at what we have so far and tell us whether we're done or not.
1057+
case ContextDescriptorKind::Extension: {
1058+
sizeEstimate = TargetExtensionContextDescriptor<Runtime>::totalSizeOfPartialObject(buffer, available);
1059+
break;
1060+
}
10601061
case ContextDescriptorKind::Anonymous: {
10611062
sizeEstimate = TargetAnonymousContextDescriptor<Runtime>::totalSizeOfPartialObject(buffer, available);
10621063
break;
@@ -1093,10 +1094,10 @@ class MetadataReader {
10931094
// data.
10941095

10951096
// Insert the final object into the descriptor cache and return it
1096-
auto descriptor
1097-
= reinterpret_cast<TargetContextDescriptor<Runtime> *>(buffer);
1098-
ContextDescriptorCache.insert(
1099-
std::make_pair(address, std::move(readResult)));
1097+
OwnedContextDescriptorRef readResult(buffer);
1098+
ContextDescriptorCache.emplace(address, std::move(readResult));
1099+
auto descriptor =
1100+
reinterpret_cast<const TargetContextDescriptor<Runtime> *>(buffer);
11001101
return ContextDescriptorRef(address, descriptor);
11011102
}
11021103

0 commit comments

Comments
 (0)