Move `GetTypeName` implementation into `ClassData`.

For LITE messages we append the type name to the data, avoiding an
indirection and a relocation.
For descriptor messages we mark them as such and have a secondary vtable. This
way we avoid having to put those pointers on each message ClassData. We save in
data size and relocations. If in the future we determine that the extra jump is
costly we can inline the relevant descriptor method pointers into `ClassData`.

PiperOrigin-RevId: 565775188
pull/14106/head
Protobuf Team Bot 1 year ago committed by Copybara-Service
parent 111d655427
commit 6fc84676c1
  1. 99
      src/google/protobuf/compiler/cpp/message.cc
  2. 56
      src/google/protobuf/compiler/plugin.pb.cc
  3. 16
      src/google/protobuf/compiler/plugin.pb.h
  4. 14
      src/google/protobuf/cpp_features.pb.cc
  5. 4
      src/google/protobuf/cpp_features.pb.h
  6. 448
      src/google/protobuf/descriptor.pb.cc
  7. 128
      src/google/protobuf/descriptor.pb.h
  8. 6
      src/google/protobuf/generated_message_bases.cc
  9. 13
      src/google/protobuf/generated_message_reflection.cc
  10. 2
      src/google/protobuf/generated_message_util.cc
  11. 9
      src/google/protobuf/implicit_weak_message.h
  12. 4
      src/google/protobuf/map_entry.h
  13. 4
      src/google/protobuf/message.cc
  14. 1
      src/google/protobuf/message.h
  15. 12
      src/google/protobuf/message_lite.cc
  16. 14
      src/google/protobuf/message_lite.h
  17. 1351
      upb/cmake/google/protobuf/descriptor.upb_minitable.c
  18. 78
      upb/cmake/google/protobuf/descriptor.upb_minitable.h

@ -1586,26 +1586,21 @@ void MessageGenerator::GenerateClassDefinition(io::Printer* p) {
break;
}
if (!HasSimpleBaseClass(descriptor_, options_) &&
HasGeneratedMethods(descriptor_->file(), options_)) {
p->Emit(R"cc(
const ::$proto_ns$::MessageLite::ClassData* GetClassData() const final;
)cc");
}
format(
"public:\n"
"\n");
if (HasDescriptorMethods(descriptor_->file(), options_)) {
if (HasGeneratedMethods(descriptor_->file(), options_) &&
!HasSimpleBaseClass(descriptor_, options_)) {
format(
"static const ClassData _class_data_;\n"
"const ::$proto_ns$::Message::ClassData*"
"GetClassData() const final;\n"
"\n");
}
format(
"::$proto_ns$::Metadata GetMetadata() const final;\n"
"\n");
} else {
format(
"std::string GetTypeName() const final;\n"
"\n");
}
if (ShouldSplit(descriptor_, options_)) {
@ -2110,12 +2105,6 @@ void MessageGenerator::GenerateClassMethods(io::Printer* p) {
"}\n",
index_in_file_messages_);
}
} else {
format(
"std::string $classname$::GetTypeName() const {\n"
" return \"$full_name$\";\n"
"}\n"
"\n");
}
if (HasTracker(descriptor_, options_)) {
@ -3917,18 +3906,26 @@ void MessageGenerator::GenerateSwap(io::Printer* p) {
void MessageGenerator::GenerateMergeFrom(io::Printer* p) {
Formatter format(p);
if (HasSimpleBaseClass(descriptor_, options_)) return;
if (HasDescriptorMethods(descriptor_->file(), options_)) {
// We don't override the generalized MergeFrom (aka that which
// takes in the Message base class as a parameter); instead we just
// let the base Message::MergeFrom take care of it. The base MergeFrom
// knows how to quickly confirm the types exactly match, and if so, will
// use GetClassData() to retrieve the address of MergeImpl, which calls
// the fast MergeFrom overload. Most callers avoid all this by passing
// a "from" message that is the same type as the message being merged
// into, rather than a generic Message.
const auto class_data_members = [&] {
p->Emit(
{
{"merge_impl",
[&] {
// TODO(sbenza): This check is not needed once we migrate
// CheckTypeAndMergeFrom to ClassData fully.
if (HasDescriptorMethods(descriptor_->file(), options_)) {
p->Emit(
R"cc(
$classname$::MergeImpl,
)cc");
} else {
p->Emit(
R"cc(
nullptr,
)cc");
}
}},
{"on_demand_register_arena_dtor",
[&] {
if (NeedsArenaDestructor() == ArenaDtorNeeds::kOnDemand) {
@ -3941,17 +3938,51 @@ void MessageGenerator::GenerateMergeFrom(io::Printer* p) {
)cc");
}
}},
{"has_descriptor_methods",
HasDescriptorMethods(descriptor_->file(), options_) ? "true"
: "false"},
},
R"cc(
const ::$proto_ns$::Message::ClassData $classname$::_class_data_ = {
$classname$::MergeImpl,
$on_demand_register_arena_dtor$,
};
const ::$proto_ns$::Message::ClassData* $classname$::GetClassData() const {
return &_class_data_;
}
$merge_impl$, $on_demand_register_arena_dtor$,
$has_descriptor_methods$,
)cc");
};
if (HasDescriptorMethods(descriptor_->file(), options_)) {
p->Emit({{"class_data_members", class_data_members}},
R"cc(
const ::$proto_ns$::MessageLite::ClassData*
$classname$::GetClassData() const {
static constexpr ::$proto_ns$::MessageLite::ClassData data = {
$class_data_members$,
};
return &data;
}
)cc");
} else {
p->Emit(
{
{"class_data_members", class_data_members},
{"type_size", descriptor_->full_name().size() + 1},
},
R"cc(
const ::$proto_ns$::MessageLite::ClassData*
$classname$::GetClassData() const {
struct ClassData_ {
::$proto_ns$::MessageLite::ClassData header;
char type_name[$type_size$];
};
static constexpr ClassData_ data = {
{
$class_data_members$,
},
"$full_name$",
};
return &data.header;
}
)cc");
// Generate CheckTypeAndMergeFrom().
format(
"void $classname$::CheckTypeAndMergeFrom(\n"

@ -541,12 +541,14 @@ const ::_pbi::TcParseTable<2, 4, 0, 47, 2> Version::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData Version::_class_data_ = {
Version::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* Version::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
Version::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
Version::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void Version::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -887,12 +889,14 @@ const ::_pbi::TcParseTable<3, 5, 3, 79, 2> CodeGeneratorRequest::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData CodeGeneratorRequest::_class_data_ = {
CodeGeneratorRequest::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* CodeGeneratorRequest::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
CodeGeneratorRequest::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
CodeGeneratorRequest::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void CodeGeneratorRequest::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -1218,12 +1222,14 @@ const ::_pbi::TcParseTable<2, 4, 1, 86, 2> CodeGeneratorResponse_File::_table_ =
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData CodeGeneratorResponse_File::_class_data_ = {
CodeGeneratorResponse_File::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* CodeGeneratorResponse_File::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
CodeGeneratorResponse_File::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
CodeGeneratorResponse_File::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void CodeGeneratorResponse_File::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -1492,12 +1498,14 @@ const ::_pbi::TcParseTable<2, 3, 1, 60, 2> CodeGeneratorResponse::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData CodeGeneratorResponse::_class_data_ = {
CodeGeneratorResponse::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* CodeGeneratorResponse::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
CodeGeneratorResponse::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
CodeGeneratorResponse::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void CodeGeneratorResponse::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {

@ -240,11 +240,9 @@ class PROTOC_EXPORT Version final :
}
protected:
explicit Version(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -461,11 +459,9 @@ class PROTOC_EXPORT CodeGeneratorResponse_File final :
}
protected:
explicit CodeGeneratorResponse_File(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -698,11 +694,9 @@ class PROTOC_EXPORT CodeGeneratorResponse final :
}
protected:
explicit CodeGeneratorResponse(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -936,11 +930,9 @@ class PROTOC_EXPORT CodeGeneratorRequest final :
}
protected:
explicit CodeGeneratorRequest(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------

@ -307,12 +307,14 @@ const ::_pbi::TcParseTable<1, 2, 1, 0, 2> CppFeatures::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData CppFeatures::_class_data_ = {
CppFeatures::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* CppFeatures::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
CppFeatures::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
CppFeatures::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void CppFeatures::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {

@ -224,11 +224,9 @@ class PROTOBUF_EXPORT CppFeatures final :
}
protected:
explicit CppFeatures(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------

@ -2479,12 +2479,14 @@ constexpr ::_pbi::TcParseTable<0, 1, 1, 0, 2> FileDescriptorSet::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData FileDescriptorSet::_class_data_ = {
FileDescriptorSet::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* FileDescriptorSet::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
FileDescriptorSet::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
FileDescriptorSet::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void FileDescriptorSet::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -3051,12 +3053,14 @@ constexpr ::_pbi::TcParseTable<4, 14, 7, 86, 2> FileDescriptorProto::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData FileDescriptorProto::_class_data_ = {
FileDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* FileDescriptorProto::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
FileDescriptorProto::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
FileDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void FileDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -3389,12 +3393,14 @@ constexpr ::_pbi::TcParseTable<2, 3, 1, 0, 2> DescriptorProto_ExtensionRange::_t
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData DescriptorProto_ExtensionRange::_class_data_ = {
DescriptorProto_ExtensionRange::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* DescriptorProto_ExtensionRange::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
DescriptorProto_ExtensionRange::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
DescriptorProto_ExtensionRange::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void DescriptorProto_ExtensionRange::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -3621,12 +3627,14 @@ constexpr ::_pbi::TcParseTable<1, 2, 0, 0, 2> DescriptorProto_ReservedRange::_ta
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData DescriptorProto_ReservedRange::_class_data_ = {
DescriptorProto_ReservedRange::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* DescriptorProto_ReservedRange::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
DescriptorProto_ReservedRange::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
DescriptorProto_ReservedRange::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void DescriptorProto_ReservedRange::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -4073,12 +4081,14 @@ constexpr ::_pbi::TcParseTable<4, 10, 8, 65, 2> DescriptorProto::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData DescriptorProto::_class_data_ = {
DescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* DescriptorProto::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
DescriptorProto::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
DescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void DescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -4442,12 +4452,14 @@ constexpr ::_pbi::TcParseTable<3, 5, 0, 71, 2> ExtensionRangeOptions_Declaration
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData ExtensionRangeOptions_Declaration::_class_data_ = {
ExtensionRangeOptions_Declaration::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* ExtensionRangeOptions_Declaration::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
ExtensionRangeOptions_Declaration::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
ExtensionRangeOptions_Declaration::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void ExtensionRangeOptions_Declaration::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -4767,12 +4779,14 @@ constexpr ::_pbi::TcParseTable<3, 4, 4, 0, 12> ExtensionRangeOptions::_table_ =
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData ExtensionRangeOptions::_class_data_ = {
ExtensionRangeOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* ExtensionRangeOptions::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
ExtensionRangeOptions::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
ExtensionRangeOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void ExtensionRangeOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -5298,12 +5312,14 @@ constexpr ::_pbi::TcParseTable<4, 11, 3, 96, 2> FieldDescriptorProto::_table_ =
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData FieldDescriptorProto::_class_data_ = {
FieldDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* FieldDescriptorProto::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
FieldDescriptorProto::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
FieldDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void FieldDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -5598,12 +5614,14 @@ constexpr ::_pbi::TcParseTable<1, 2, 1, 49, 2> OneofDescriptorProto::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData OneofDescriptorProto::_class_data_ = {
OneofDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* OneofDescriptorProto::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
OneofDescriptorProto::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
OneofDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void OneofDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -5825,12 +5843,14 @@ constexpr ::_pbi::TcParseTable<1, 2, 0, 0, 2> EnumDescriptorProto_EnumReservedRa
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData EnumDescriptorProto_EnumReservedRange::_class_data_ = {
EnumDescriptorProto_EnumReservedRange::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* EnumDescriptorProto_EnumReservedRange::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
EnumDescriptorProto_EnumReservedRange::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
EnumDescriptorProto_EnumReservedRange::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void EnumDescriptorProto_EnumReservedRange::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -6154,12 +6174,14 @@ constexpr ::_pbi::TcParseTable<3, 5, 3, 61, 2> EnumDescriptorProto::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData EnumDescriptorProto::_class_data_ = {
EnumDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* EnumDescriptorProto::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
EnumDescriptorProto::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
EnumDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void EnumDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -6450,12 +6472,14 @@ constexpr ::_pbi::TcParseTable<2, 3, 1, 53, 2> EnumValueDescriptorProto::_table_
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData EnumValueDescriptorProto::_class_data_ = {
EnumValueDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* EnumValueDescriptorProto::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
EnumValueDescriptorProto::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
EnumValueDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void EnumValueDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -6740,12 +6764,14 @@ constexpr ::_pbi::TcParseTable<2, 3, 2, 51, 2> ServiceDescriptorProto::_table_ =
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData ServiceDescriptorProto::_class_data_ = {
ServiceDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* ServiceDescriptorProto::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
ServiceDescriptorProto::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
ServiceDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void ServiceDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -7120,12 +7146,14 @@ constexpr ::_pbi::TcParseTable<3, 6, 1, 71, 2> MethodDescriptorProto::_table_ =
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData MethodDescriptorProto::_class_data_ = {
MethodDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* MethodDescriptorProto::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
MethodDescriptorProto::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
MethodDescriptorProto::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void MethodDescriptorProto::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -7950,12 +7978,14 @@ constexpr ::_pbi::TcParseTable<5, 22, 3, 202, 12> FileOptions::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData FileOptions::_class_data_ = {
FileOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* FileOptions::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
FileOptions::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
FileOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void FileOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -8422,12 +8452,14 @@ constexpr ::_pbi::TcParseTable<3, 7, 2, 0, 7> MessageOptions::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData MessageOptions::_class_data_ = {
MessageOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* MessageOptions::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
MessageOptions::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
MessageOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void MessageOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -8721,12 +8753,14 @@ constexpr ::_pbi::TcParseTable<2, 3, 1, 64, 2> FieldOptions_EditionDefault::_tab
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData FieldOptions_EditionDefault::_class_data_ = {
FieldOptions_EditionDefault::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* FieldOptions_EditionDefault::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
FieldOptions_EditionDefault::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
FieldOptions_EditionDefault::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void FieldOptions_EditionDefault::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -9250,12 +9284,14 @@ constexpr ::_pbi::TcParseTable<4, 13, 7, 0, 7> FieldOptions::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData FieldOptions::_class_data_ = {
FieldOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* FieldOptions::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
FieldOptions::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
FieldOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void FieldOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -9551,12 +9587,14 @@ constexpr ::_pbi::TcParseTable<2, 2, 2, 0, 7> OneofOptions::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData OneofOptions::_class_data_ = {
OneofOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* OneofOptions::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
OneofOptions::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
OneofOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void OneofOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -9887,12 +9925,14 @@ constexpr ::_pbi::TcParseTable<3, 5, 2, 0, 7> EnumOptions::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData EnumOptions::_class_data_ = {
EnumOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* EnumOptions::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
EnumOptions::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
EnumOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void EnumOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -10223,12 +10263,14 @@ constexpr ::_pbi::TcParseTable<3, 4, 2, 0, 7> EnumValueOptions::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData EnumValueOptions::_class_data_ = {
EnumValueOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* EnumValueOptions::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
EnumValueOptions::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
EnumValueOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void EnumValueOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -10525,12 +10567,14 @@ constexpr ::_pbi::TcParseTable<2, 3, 2, 0, 12> ServiceOptions::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData ServiceOptions::_class_data_ = {
ServiceOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* ServiceOptions::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
ServiceOptions::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
ServiceOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void ServiceOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -10860,12 +10904,14 @@ constexpr ::_pbi::TcParseTable<3, 4, 3, 0, 12> MethodOptions::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData MethodOptions::_class_data_ = {
MethodOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* MethodOptions::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
MethodOptions::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
MethodOptions::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void MethodOptions::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -11119,12 +11165,14 @@ constexpr ::_pbi::TcParseTable<1, 2, 0, 62, 2> UninterpretedOption_NamePart::_ta
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData UninterpretedOption_NamePart::_class_data_ = {
UninterpretedOption_NamePart::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* UninterpretedOption_NamePart::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
UninterpretedOption_NamePart::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
UninterpretedOption_NamePart::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void UninterpretedOption_NamePart::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -11502,12 +11550,14 @@ constexpr ::_pbi::TcParseTable<3, 7, 1, 75, 2> UninterpretedOption::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData UninterpretedOption::_class_data_ = {
UninterpretedOption::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* UninterpretedOption::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
UninterpretedOption::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
UninterpretedOption::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void UninterpretedOption::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -11854,12 +11904,14 @@ constexpr ::_pbi::TcParseTable<3, 5, 5, 0, 2> FeatureSet::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData FeatureSet::_class_data_ = {
FeatureSet::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* FeatureSet::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
FeatureSet::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
FeatureSet::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void FeatureSet::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -12153,12 +12205,14 @@ constexpr ::_pbi::TcParseTable<2, 3, 2, 75, 2> FeatureSetDefaults_FeatureSetEdit
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData FeatureSetDefaults_FeatureSetEditionDefault::_class_data_ = {
FeatureSetDefaults_FeatureSetEditionDefault::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* FeatureSetDefaults_FeatureSetEditionDefault::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
FeatureSetDefaults_FeatureSetEditionDefault::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
FeatureSetDefaults_FeatureSetEditionDefault::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void FeatureSetDefaults_FeatureSetEditionDefault::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -12501,12 +12555,14 @@ constexpr ::_pbi::TcParseTable<3, 5, 3, 73, 2> FeatureSetDefaults::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData FeatureSetDefaults::_class_data_ = {
FeatureSetDefaults::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* FeatureSetDefaults::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
FeatureSetDefaults::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
FeatureSetDefaults::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void FeatureSetDefaults::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -12858,12 +12914,14 @@ constexpr ::_pbi::TcParseTable<3, 5, 0, 106, 2> SourceCodeInfo_Location::_table_
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData SourceCodeInfo_Location::_class_data_ = {
SourceCodeInfo_Location::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* SourceCodeInfo_Location::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
SourceCodeInfo_Location::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
SourceCodeInfo_Location::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void SourceCodeInfo_Location::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -13059,12 +13117,14 @@ constexpr ::_pbi::TcParseTable<0, 1, 1, 0, 2> SourceCodeInfo::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData SourceCodeInfo::_class_data_ = {
SourceCodeInfo::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* SourceCodeInfo::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
SourceCodeInfo::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
SourceCodeInfo::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void SourceCodeInfo::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -13380,12 +13440,14 @@ constexpr ::_pbi::TcParseTable<3, 5, 1, 64, 2> GeneratedCodeInfo_Annotation::_ta
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData GeneratedCodeInfo_Annotation::_class_data_ = {
GeneratedCodeInfo_Annotation::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* GeneratedCodeInfo_Annotation::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
GeneratedCodeInfo_Annotation::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
GeneratedCodeInfo_Annotation::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void GeneratedCodeInfo_Annotation::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {
@ -13588,12 +13650,14 @@ constexpr ::_pbi::TcParseTable<0, 1, 1, 0, 2> GeneratedCodeInfo::_table_ = {
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
const ::google::protobuf::Message::ClassData GeneratedCodeInfo::_class_data_ = {
GeneratedCodeInfo::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
};
const ::google::protobuf::Message::ClassData* GeneratedCodeInfo::GetClassData() const {
return &_class_data_;
const ::google::protobuf::MessageLite::ClassData*
GeneratedCodeInfo::GetClassData() const {
static constexpr ::google::protobuf::MessageLite::ClassData data = {
GeneratedCodeInfo::MergeImpl,
nullptr, // OnDemandRegisterArenaDtor
true,
};
return &data;
}
void GeneratedCodeInfo::MergeImpl(::google::protobuf::Message& to_msg, const ::google::protobuf::Message& from_msg) {

@ -789,11 +789,9 @@ class PROTOBUF_EXPORT UninterpretedOption_NamePart final :
}
protected:
explicit UninterpretedOption_NamePart(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -984,11 +982,9 @@ class PROTOBUF_EXPORT SourceCodeInfo_Location final :
}
protected:
explicit SourceCodeInfo_Location(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -1257,11 +1253,9 @@ class PROTOBUF_EXPORT GeneratedCodeInfo_Annotation final :
}
protected:
explicit GeneratedCodeInfo_Annotation(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -1520,11 +1514,9 @@ class PROTOBUF_EXPORT FieldOptions_EditionDefault final :
}
protected:
explicit FieldOptions_EditionDefault(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -1734,11 +1726,9 @@ class PROTOBUF_EXPORT FeatureSet final :
}
protected:
explicit FeatureSet(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -2221,11 +2211,9 @@ class PROTOBUF_EXPORT ExtensionRangeOptions_Declaration final :
}
protected:
explicit ExtensionRangeOptions_Declaration(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -2461,11 +2449,9 @@ class PROTOBUF_EXPORT EnumDescriptorProto_EnumReservedRange final :
}
protected:
explicit EnumDescriptorProto_EnumReservedRange(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -2650,11 +2636,9 @@ class PROTOBUF_EXPORT DescriptorProto_ReservedRange final :
}
protected:
explicit DescriptorProto_ReservedRange(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -2839,11 +2823,9 @@ class PROTOBUF_EXPORT UninterpretedOption final :
}
protected:
explicit UninterpretedOption(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -3120,11 +3102,9 @@ class PROTOBUF_EXPORT SourceCodeInfo final :
}
protected:
explicit SourceCodeInfo(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -3304,11 +3284,9 @@ class PROTOBUF_EXPORT GeneratedCodeInfo final :
}
protected:
explicit GeneratedCodeInfo(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -3488,11 +3466,9 @@ class PROTOBUF_EXPORT FeatureSetDefaults_FeatureSetEditionDefault final :
}
protected:
explicit FeatureSetDefaults_FeatureSetEditionDefault(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -3700,11 +3676,9 @@ class PROTOBUF_EXPORT ServiceOptions final :
}
protected:
explicit ServiceOptions(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -4066,11 +4040,9 @@ class PROTOBUF_EXPORT OneofOptions final :
}
protected:
explicit OneofOptions(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -4419,11 +4391,9 @@ class PROTOBUF_EXPORT MethodOptions final :
}
protected:
explicit MethodOptions(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -4819,11 +4789,9 @@ class PROTOBUF_EXPORT MessageOptions final :
}
protected:
explicit MessageOptions(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -5237,11 +5205,9 @@ class PROTOBUF_EXPORT FileOptions final :
}
protected:
explicit FileOptions(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -5931,11 +5897,9 @@ class PROTOBUF_EXPORT FieldOptions final :
}
protected:
explicit FieldOptions(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -6535,11 +6499,9 @@ class PROTOBUF_EXPORT FeatureSetDefaults final :
}
protected:
explicit FeatureSetDefaults(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -6784,11 +6746,9 @@ class PROTOBUF_EXPORT ExtensionRangeOptions final :
}
protected:
explicit ExtensionRangeOptions(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -7192,11 +7152,9 @@ class PROTOBUF_EXPORT EnumValueOptions final :
}
protected:
explicit EnumValueOptions(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -7571,11 +7529,9 @@ class PROTOBUF_EXPORT EnumOptions final :
}
protected:
explicit EnumOptions(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -7963,11 +7919,9 @@ class PROTOBUF_EXPORT OneofDescriptorProto final :
}
protected:
explicit OneofDescriptorProto(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -8162,11 +8116,9 @@ class PROTOBUF_EXPORT MethodDescriptorProto final :
}
protected:
explicit MethodDescriptorProto(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -8425,11 +8377,9 @@ class PROTOBUF_EXPORT FieldDescriptorProto final :
}
protected:
explicit FieldDescriptorProto(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -8822,11 +8772,9 @@ class PROTOBUF_EXPORT EnumValueDescriptorProto final :
}
protected:
explicit EnumValueDescriptorProto(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -9034,11 +8982,9 @@ class PROTOBUF_EXPORT DescriptorProto_ExtensionRange final :
}
protected:
explicit DescriptorProto_ExtensionRange(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -9240,11 +9186,9 @@ class PROTOBUF_EXPORT ServiceDescriptorProto final :
}
protected:
explicit ServiceDescriptorProto(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -9459,11 +9403,9 @@ class PROTOBUF_EXPORT EnumDescriptorProto final :
}
protected:
explicit EnumDescriptorProto(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -9730,11 +9672,9 @@ class PROTOBUF_EXPORT DescriptorProto final :
}
protected:
explicit DescriptorProto(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -10102,11 +10042,9 @@ class PROTOBUF_EXPORT FileDescriptorProto final :
}
protected:
explicit FileDescriptorProto(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------
@ -10538,11 +10476,9 @@ class PROTOBUF_EXPORT FileDescriptorSet final :
}
protected:
explicit FileDescriptorSet(::google::protobuf::Arena* arena);
const ::google::protobuf::MessageLite::ClassData* GetClassData() const final;
public:
static const ClassData _class_data_;
const ::google::protobuf::Message::ClassData*GetClassData() const final;
::google::protobuf::Metadata GetMetadata() const final;
// nested types ----------------------------------------------------

@ -95,7 +95,11 @@ void ZeroFieldsBase::InternalSwap(ZeroFieldsBase* other) {
}
const Message::ClassData* ZeroFieldsBase::GetClassData() const {
static constexpr ClassData data = {&MergeImpl};
static constexpr ClassData data = {
&MergeImpl,
nullptr,
true,
};
return &data;
}

@ -3794,6 +3794,19 @@ bool SplitFieldHasExtraIndirection(const FieldDescriptor* field) {
return field->is_repeated();
}
static std::string GetTypeNameImpl(const MessageLite& msg) {
const auto* descriptor = DownCast<const Message&>(msg).GetDescriptor();
// Keep the preexisting behavior on MapEntry types to return an empty name.
if (descriptor->options().map_entry()) return "";
return descriptor->full_name();
}
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_PRAGMA_INIT_SEG
std::true_type inject_descriptor_methods =
(descriptor_methods.get_type_name.store(GetTypeNameImpl,
std::memory_order_relaxed),
std::true_type{});
} // namespace internal
} // namespace protobuf
} // namespace google

@ -381,6 +381,8 @@ MessageLite* GetOwnedMessageInternal(Arena* message_arena,
}
}
PROTOBUF_CONSTINIT DescriptorMethods descriptor_methods{};
} // namespace internal
} // namespace protobuf
} // namespace google

@ -56,7 +56,14 @@ class PROTOBUF_EXPORT ImplicitWeakMessage : public MessageLite {
static const ImplicitWeakMessage* default_instance();
std::string GetTypeName() const override { return ""; }
const ClassData* GetClassData() const final {
struct Data {
ClassData header;
char name[1];
};
static constexpr Data data = {{}, ""};
return &data.header;
}
MessageLite* New(Arena* arena) const override {
return Arena::CreateMessage<ImplicitWeakMessage>(arena);

@ -146,10 +146,6 @@ class MapEntry : public Message {
// implements MessageLite =========================================
// MapEntry is for implementation only and this function isn't called
// anywhere. Just provide a fake implementation here for MessageLite.
std::string GetTypeName() const override { return ""; }
size_t SpaceUsedLong() const final {
size_t size = sizeof(Derived);
size += KeyTypeHandler::SpaceUsedInMapEntryLong(this->key_);

@ -99,10 +99,6 @@ void Message::CopyFrom(const Message& from) {
}
}
std::string Message::GetTypeName() const {
return GetDescriptor()->full_name();
}
void Message::Clear() { ReflectionOps::Clear(this); }
bool Message::IsInitialized() const {

@ -328,7 +328,6 @@ class PROTOBUF_EXPORT Message : public MessageLite {
// These methods are pure-virtual in MessageLite, but Message provides
// reflection-based default implementations.
std::string GetTypeName() const override;
void Clear() override;
// Returns whether all required fields have been set. Note that required

@ -44,6 +44,18 @@
namespace google {
namespace protobuf {
std::string MessageLite::GetTypeName() const {
auto* data = GetClassData();
// For LITE messages, the type name is a char[] just beyond ClassData.
if (data != nullptr && !data->has_descriptor_methods) {
return reinterpret_cast<const char*>(data) + sizeof(ClassData);
}
// For !LITE messages, we use the descriptor method function.
auto* getter = internal::descriptor_methods.get_type_name.load(
std::memory_order_relaxed);
return getter ? getter(*this) : "";
}
void MessageLite::OnDemandRegisterArenaDtor(Arena* arena) {
if (arena == nullptr) return;
auto* data = GetClassData();

@ -211,7 +211,7 @@ class PROTOBUF_EXPORT MessageLite {
// Basic Operations ------------------------------------------------
// Get the name of this message type, e.g. "foo.bar.BazProto".
virtual std::string GetTypeName() const = 0;
std::string GetTypeName() const;
// Construct a new instance of the same type. Ownership is passed to the
// caller.
@ -531,6 +531,9 @@ class PROTOBUF_EXPORT MessageLite {
// pointer becomes the first argument in the free function.
void (*merge_to_from)(Message& to, const Message& from_msg);
void (*on_demand_register_arena_dtor)(MessageLite& msg, Arena& arena);
// LITE objects (ie !has_descriptor_methods) collocate their name as a
// char[] just beyond the ClassData.
bool has_descriptor_methods;
};
// GetClassData() returns a pointer to a ClassData struct which
@ -538,7 +541,7 @@ class PROTOBUF_EXPORT MessageLite {
// property is used in order to quickly determine whether two messages are
// of the same type.
//
// This is a work in progress. Currently only SPEED messages return an
// This is a work in progress. Currently only LITE/SPEED messages return an
// instance. In the future all message types will return one.
virtual const ClassData* GetClassData() const;
@ -683,6 +686,13 @@ T* OnShutdownDelete(T* p) {
return p;
}
// We inject a single vtable for the descriptor based methods that we use from
// MessageLite to avoid having to put these pointers on each message's tables.
struct DescriptorMethods {
std::atomic<std::string (*)(const MessageLite&)> get_type_name;
};
extern DescriptorMethods descriptor_methods;
} // namespace internal
std::string ShortFormat(const MessageLite& message_lite);

File diff suppressed because it is too large Load Diff

@ -1,78 +0,0 @@
/* This file was generated by upbc (the upb compiler) from the input
* file:
*
* google/protobuf/descriptor.proto
*
* Do not edit -- your changes will be discarded when the file is
* regenerated. */
#ifndef GOOGLE_PROTOBUF_DESCRIPTOR_PROTO_UPB_MINITABLE_H_
#define GOOGLE_PROTOBUF_DESCRIPTOR_PROTO_UPB_MINITABLE_H_
#include "upb/upb/generated_code_support.h"
// Must be last.
#include "upb/upb/port/def.inc"
#ifdef __cplusplus
extern "C" {
#endif
extern const upb_MiniTable google_protobuf_FileDescriptorSet_msg_init;
extern const upb_MiniTable google_protobuf_FileDescriptorProto_msg_init;
extern const upb_MiniTable google_protobuf_DescriptorProto_msg_init;
extern const upb_MiniTable google_protobuf_DescriptorProto_ExtensionRange_msg_init;
extern const upb_MiniTable google_protobuf_DescriptorProto_ReservedRange_msg_init;
extern const upb_MiniTable google_protobuf_ExtensionRangeOptions_msg_init;
extern const upb_MiniTable google_protobuf_ExtensionRangeOptions_Declaration_msg_init;
extern const upb_MiniTable google_protobuf_FieldDescriptorProto_msg_init;
extern const upb_MiniTable google_protobuf_OneofDescriptorProto_msg_init;
extern const upb_MiniTable google_protobuf_EnumDescriptorProto_msg_init;
extern const upb_MiniTable google_protobuf_EnumDescriptorProto_EnumReservedRange_msg_init;
extern const upb_MiniTable google_protobuf_EnumValueDescriptorProto_msg_init;
extern const upb_MiniTable google_protobuf_ServiceDescriptorProto_msg_init;
extern const upb_MiniTable google_protobuf_MethodDescriptorProto_msg_init;
extern const upb_MiniTable google_protobuf_FileOptions_msg_init;
extern const upb_MiniTable google_protobuf_MessageOptions_msg_init;
extern const upb_MiniTable google_protobuf_FieldOptions_msg_init;
extern const upb_MiniTable google_protobuf_FieldOptions_EditionDefault_msg_init;
extern const upb_MiniTable google_protobuf_OneofOptions_msg_init;
extern const upb_MiniTable google_protobuf_EnumOptions_msg_init;
extern const upb_MiniTable google_protobuf_EnumValueOptions_msg_init;
extern const upb_MiniTable google_protobuf_ServiceOptions_msg_init;
extern const upb_MiniTable google_protobuf_MethodOptions_msg_init;
extern const upb_MiniTable google_protobuf_UninterpretedOption_msg_init;
extern const upb_MiniTable google_protobuf_UninterpretedOption_NamePart_msg_init;
extern const upb_MiniTable google_protobuf_FeatureSet_msg_init;
extern const upb_MiniTable google_protobuf_FeatureSetDefaults_msg_init;
extern const upb_MiniTable google_protobuf_FeatureSetDefaults_FeatureSetEditionDefault_msg_init;
extern const upb_MiniTable google_protobuf_SourceCodeInfo_msg_init;
extern const upb_MiniTable google_protobuf_SourceCodeInfo_Location_msg_init;
extern const upb_MiniTable google_protobuf_GeneratedCodeInfo_msg_init;
extern const upb_MiniTable google_protobuf_GeneratedCodeInfo_Annotation_msg_init;
extern const upb_MiniTableEnum google_protobuf_Edition_enum_init;
extern const upb_MiniTableEnum google_protobuf_ExtensionRangeOptions_VerificationState_enum_init;
extern const upb_MiniTableEnum google_protobuf_FeatureSet_EnumType_enum_init;
extern const upb_MiniTableEnum google_protobuf_FeatureSet_FieldPresence_enum_init;
extern const upb_MiniTableEnum google_protobuf_FeatureSet_JsonFormat_enum_init;
extern const upb_MiniTableEnum google_protobuf_FeatureSet_MessageEncoding_enum_init;
extern const upb_MiniTableEnum google_protobuf_FeatureSet_RepeatedFieldEncoding_enum_init;
extern const upb_MiniTableEnum google_protobuf_FieldDescriptorProto_Label_enum_init;
extern const upb_MiniTableEnum google_protobuf_FieldDescriptorProto_Type_enum_init;
extern const upb_MiniTableEnum google_protobuf_FieldOptions_CType_enum_init;
extern const upb_MiniTableEnum google_protobuf_FieldOptions_JSType_enum_init;
extern const upb_MiniTableEnum google_protobuf_FieldOptions_OptionRetention_enum_init;
extern const upb_MiniTableEnum google_protobuf_FieldOptions_OptionTargetType_enum_init;
extern const upb_MiniTableEnum google_protobuf_FileOptions_OptimizeMode_enum_init;
extern const upb_MiniTableEnum google_protobuf_GeneratedCodeInfo_Annotation_Semantic_enum_init;
extern const upb_MiniTableEnum google_protobuf_MethodOptions_IdempotencyLevel_enum_init;
extern const upb_MiniTableFile google_protobuf_descriptor_proto_upb_file_layout;
#ifdef __cplusplus
} /* extern "C" */
#endif
#include "upb/upb/port/undef.inc"
#endif /* GOOGLE_PROTOBUF_DESCRIPTOR_PROTO_UPB_MINITABLE_H_ */
Loading…
Cancel
Save