@@ -187,7 +187,7 @@ class MetadataReader {
187
187
188
188
using ContextDescriptorRef =
189
189
RemoteRef<const TargetContextDescriptor<Runtime>>;
190
- using OwnedContextDescriptorRef = MemoryReader::ReadBytesResult ;
190
+ using OwnedContextDescriptorRef = std::unique_ptr< const void , delete_with_free> ;
191
191
192
192
// / A reference to a context descriptor that may be in an unloaded image.
193
193
class ParentContextDescriptorRef {
@@ -1051,12 +1051,13 @@ class MetadataReader {
1051
1051
case ContextDescriptorKind::Module:
1052
1052
sizeEstimate = sizeof (TargetModuleContextDescriptor<Runtime>);
1053
1053
break ;
1054
- case ContextDescriptorKind::Extension:
1055
- sizeEstimate = sizeof (TargetExtensionContextDescriptor<Runtime>);
1056
- break ;
1057
1054
1058
1055
// For types that use trailing objects, ask the trailing object logic to
1059
1056
// 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
+ }
1060
1061
case ContextDescriptorKind::Anonymous: {
1061
1062
sizeEstimate = TargetAnonymousContextDescriptor<Runtime>::totalSizeOfPartialObject (buffer, available);
1062
1063
break ;
@@ -1093,10 +1094,10 @@ class MetadataReader {
1093
1094
// data.
1094
1095
1095
1096
// 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 );
1100
1101
return ContextDescriptorRef (address, descriptor);
1101
1102
}
1102
1103
0 commit comments