Refactored a few protos:: methods to no longer access `upb_Extension` directly.

PiperOrigin-RevId: 600588767
pull/15533/head
Joshua Haberman 1 year ago committed by Copybara-Service
parent 787447430f
commit 03ff7af37e
  1. 32
      protos/protos.cc

@ -163,22 +163,15 @@ upb_Message* DeepClone(const upb_Message* source,
absl::Status MoveExtension(upb_Message* message, upb_Arena* message_arena,
const upb_MiniTableExtension* ext,
upb_Message* extension, upb_Arena* extension_arena) {
upb_Extension* msg_ext =
_upb_Message_GetOrCreateExtension(message, ext, message_arena);
if (!msg_ext) {
return MessageAllocationError();
}
if (message_arena != extension_arena) {
// Try fuse, if fusing is not allowed or fails, create copy of extension.
if (!upb_Arena_Fuse(message_arena, extension_arena)) {
msg_ext->data.ptr = DeepClone(
extension, upb_MiniTableExtension_GetSubMessage(msg_ext->ext),
message_arena);
return absl::OkStatus();
}
if (message_arena != extension_arena &&
// Try fuse, if fusing is not allowed or fails, create copy of extension.
!upb_Arena_Fuse(message_arena, extension_arena)) {
extension = DeepClone(extension, upb_MiniTableExtension_GetSubMessage(ext),
message_arena);
}
msg_ext->data.ptr = extension;
return absl::OkStatus();
return _upb_Message_SetExtensionField(message, ext, &extension, message_arena)
? absl::OkStatus()
: MessageAllocationError();
}
absl::Status SetExtension(upb_Message* message, upb_Arena* message_arena,
@ -190,10 +183,11 @@ absl::Status SetExtension(upb_Message* message, upb_Arena* message_arena,
return MessageAllocationError();
}
// Clone extension into target message arena.
msg_ext->data.ptr =
DeepClone(extension, upb_MiniTableExtension_GetSubMessage(msg_ext->ext),
message_arena);
return absl::OkStatus();
extension = DeepClone(extension, upb_MiniTableExtension_GetSubMessage(ext),
message_arena);
return _upb_Message_SetExtensionField(message, ext, &extension, message_arena)
? absl::OkStatus()
: MessageAllocationError();
}
} // namespace internal

Loading…
Cancel
Save