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, absl::Status MoveExtension(upb_Message* message, upb_Arena* message_arena,
const upb_MiniTableExtension* ext, const upb_MiniTableExtension* ext,
upb_Message* extension, upb_Arena* extension_arena) { upb_Message* extension, upb_Arena* extension_arena) {
upb_Extension* msg_ext = if (message_arena != extension_arena &&
_upb_Message_GetOrCreateExtension(message, ext, message_arena); // Try fuse, if fusing is not allowed or fails, create copy of extension.
if (!msg_ext) { !upb_Arena_Fuse(message_arena, extension_arena)) {
return MessageAllocationError(); extension = DeepClone(extension, upb_MiniTableExtension_GetSubMessage(ext),
} message_arena);
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();
}
} }
msg_ext->data.ptr = extension; return _upb_Message_SetExtensionField(message, ext, &extension, message_arena)
return absl::OkStatus(); ? absl::OkStatus()
: MessageAllocationError();
} }
absl::Status SetExtension(upb_Message* message, upb_Arena* message_arena, 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(); return MessageAllocationError();
} }
// Clone extension into target message arena. // Clone extension into target message arena.
msg_ext->data.ptr = extension = DeepClone(extension, upb_MiniTableExtension_GetSubMessage(ext),
DeepClone(extension, upb_MiniTableExtension_GetSubMessage(msg_ext->ext), message_arena);
message_arena); return _upb_Message_SetExtensionField(message, ext, &extension, message_arena)
return absl::OkStatus(); ? absl::OkStatus()
: MessageAllocationError();
} }
} // namespace internal } // namespace internal

Loading…
Cancel
Save