@@ -787,16 +787,9 @@ MessageLite* ExtensionSet::AddMessage(int number, FieldType type,
787787 ABSL_DCHECK_TYPE (*extension, REPEATED_FIELD, MESSAGE);
788788 }
789789
790- // RepeatedPtrField<MessageLite> does not know how to Add() since it cannot
791- // allocate an abstract object, so we have to be tricky.
792- MessageLite* result = reinterpret_cast <internal::RepeatedPtrFieldBase*>(
793- extension->repeated_message_value )
794- ->AddFromCleared <GenericTypeHandler<MessageLite>>();
795- if (result == nullptr ) {
796- result = prototype.New (arena_);
797- extension->repeated_message_value ->AddAllocated (result);
798- }
799- return result;
790+ return reinterpret_cast <internal::RepeatedPtrFieldBase*>(
791+ extension->repeated_message_value )
792+ ->AddMessage (&prototype);
800793}
801794
802795// Defined in extension_set_heavy.cc.
@@ -996,32 +989,8 @@ void ExtensionSet::InternalExtensionMergeFrom(const MessageLite* extendee,
996989 HANDLE_TYPE (BOOL, bool , RepeatedField<bool >);
997990 HANDLE_TYPE (ENUM, enum , RepeatedField<int >);
998991 HANDLE_TYPE (STRING, string, RepeatedPtrField<std::string>);
992+ HANDLE_TYPE (MESSAGE, message, RepeatedPtrField<MessageLite>);
999993#undef HANDLE_TYPE
1000-
1001- case WireFormatLite::CPPTYPE_MESSAGE: {
1002- Arena* const arena = arena_;
1003- if (is_new) {
1004- extension->repeated_message_value =
1005- Arena::CreateMessage<RepeatedPtrField<MessageLite>>(arena);
1006- }
1007- // We can't call RepeatedPtrField<MessageLite>::MergeFrom() because
1008- // it would attempt to allocate new objects.
1009- RepeatedPtrField<MessageLite>* other_repeated_message =
1010- other_extension.repeated_message_value ;
1011- for (int i = 0 ; i < other_repeated_message->size (); i++) {
1012- const MessageLite& other_message = other_repeated_message->Get (i);
1013- MessageLite* target =
1014- reinterpret_cast <internal::RepeatedPtrFieldBase*>(
1015- extension->repeated_message_value )
1016- ->AddFromCleared <GenericTypeHandler<MessageLite>>();
1017- if (target == nullptr ) {
1018- target = other_message.New (arena);
1019- extension->repeated_message_value ->AddAllocated (target);
1020- }
1021- target->CheckTypeAndMergeFrom (other_message);
1022- }
1023- break ;
1024- }
1025994 }
1026995 } else {
1027996 if (!other_extension.is_cleared ) {
0 commit comments