diff options
author | Jisi Liu <jisi.liu@gmail.com> | 2017-08-03 11:13:25 -0700 |
---|---|---|
committer | Jisi Liu <jisi.liu@gmail.com> | 2017-08-03 11:13:25 -0700 |
commit | 4cbbf33b773fb95aa339ee50517fd375f5120ffe (patch) | |
tree | 7b747f7af11853481922d327fc15de93f6d9b154 /src/google/protobuf/compiler | |
parent | 778178479626b0e5b4de0701103a1bb0a067702d (diff) | |
download | protobuf-4cbbf33b773fb95aa339ee50517fd375f5120ffe.tar.gz protobuf-4cbbf33b773fb95aa339ee50517fd375f5120ffe.tar.bz2 protobuf-4cbbf33b773fb95aa339ee50517fd375f5120ffe.zip |
Fix invalid offsetof warning.
Use composition instead of inheritance for oneof default.
Diffstat (limited to 'src/google/protobuf/compiler')
-rw-r--r-- | src/google/protobuf/compiler/cpp/cpp_file.cc | 9 | ||||
-rw-r--r-- | src/google/protobuf/compiler/cpp/cpp_message.cc | 12 | ||||
-rw-r--r-- | src/google/protobuf/compiler/plugin.pb.cc | 30 |
3 files changed, 32 insertions, 19 deletions
diff --git a/src/google/protobuf/compiler/cpp/cpp_file.cc b/src/google/protobuf/compiler/cpp/cpp_file.cc index e54288de..a1c13cf5 100644 --- a/src/google/protobuf/compiler/cpp/cpp_file.cc +++ b/src/google/protobuf/compiler/cpp/cpp_file.cc @@ -351,9 +351,10 @@ void FileGenerator::GenerateSource(io::Printer* printer) { "::"; } printer->Print( - "class $classname$DefaultTypeInternal : " - "public ::google::protobuf::internal::ExplicitlyConstructed<$parent$$classname$> " - "{\n", + "class $classname$DefaultTypeInternal {\n" + "public:\n" + " ::google::protobuf::internal::ExplicitlyConstructed<$parent$$classname$>\n" + " _instance;\n", "parent", parent, "classname", message_generators_[i]->classname_); printer->Indent(); message_generators_[i]->GenerateExtraDefaultFields(printer); @@ -740,7 +741,7 @@ void FileGenerator::GenerateBuildDescriptors(io::Printer* printer) { printer->Print( "file_level_metadata[$index$].reflection = " "$parent$::$classname$::CreateReflection(file_level_metadata[$index$]" - ".descriptor, _$classname$_default_instance_.get_mutable());\n", + ".descriptor, _$classname$_default_instance_._instance.get_mutable());\n", "index", SimpleItoa(i), "parent", ClassName(message_generators_[i]->descriptor_->containing_type(), false), diff --git a/src/google/protobuf/compiler/cpp/cpp_message.cc b/src/google/protobuf/compiler/cpp/cpp_message.cc index abb2e95a..36cbf5d7 100644 --- a/src/google/protobuf/compiler/cpp/cpp_message.cc +++ b/src/google/protobuf/compiler/cpp/cpp_message.cc @@ -1604,7 +1604,6 @@ GenerateExtraDefaultFields(io::Printer* printer) { // Generate oneof default instance and weak field instances for reflection // usage. if (descriptor_->oneof_decl_count() > 0 || num_weak_fields_ > 0) { - printer->Print("public:\n"); for (int i = 0; i < descriptor_->oneof_decl_count(); i++) { for (int j = 0; j < descriptor_->oneof_decl(i)->field_count(); j++) { const FieldDescriptor* field = descriptor_->oneof_decl(i)->field(j); @@ -1977,7 +1976,7 @@ GenerateDefaultInstanceAllocator(io::Printer* printer) { // Construct the default instance. We can't call InitAsDefaultInstance() yet // because we need to make sure all default instances that this one might // depend on are constructed first. - printer->Print("_$classname$_default_instance_.DefaultConstruct();\n" + printer->Print("_$classname$_default_instance_._instance.DefaultConstruct();\n" "::google::protobuf::internal::OnShutdownDestroyMessage(\n" " &_$classname$_default_instance_);", "classname", classname_); @@ -1987,9 +1986,9 @@ void MessageGenerator:: GenerateDefaultInstanceInitializer(io::Printer* printer) { if (IsMapEntryMessage(descriptor_)) { printer->Print( - "_$classname$_default_instance_.get_mutable()->set_default_instance(_$" - "classname$_default_instance_.get_mutable());\n" - "_$classname$_default_instance_.get_mutable()->InitAsDefaultInstance();" + "_$classname$_default_instance_._instance.get_mutable()->set_default_instance(_$" + "classname$_default_instance_._instance.get_mutable());\n" + "_$classname$_default_instance_._instance.get_mutable()->InitAsDefaultInstance();" "\n", "classname", classname_); return; @@ -2012,7 +2011,8 @@ GenerateDefaultInstanceInitializer(io::Printer* printer) { if (field->containing_oneof() || field->options().weak()) { name = "_" + classname_ + "_default_instance_."; } else { - name = "_" + classname_ + "_default_instance_.get_mutable()->"; + name = + "_" + classname_ + "_default_instance_._instance.get_mutable()->"; } name += FieldName(field); printer->Print( diff --git a/src/google/protobuf/compiler/plugin.pb.cc b/src/google/protobuf/compiler/plugin.pb.cc index 5d7dad98..ac6f59dc 100644 --- a/src/google/protobuf/compiler/plugin.pb.cc +++ b/src/google/protobuf/compiler/plugin.pb.cc @@ -20,13 +20,25 @@ namespace google { namespace protobuf { namespace compiler { -class VersionDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed<Version> { +class VersionDefaultTypeInternal { +public: + ::google::protobuf::internal::ExplicitlyConstructed<Version> + _instance; } _Version_default_instance_; -class CodeGeneratorRequestDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed<CodeGeneratorRequest> { +class CodeGeneratorRequestDefaultTypeInternal { +public: + ::google::protobuf::internal::ExplicitlyConstructed<CodeGeneratorRequest> + _instance; } _CodeGeneratorRequest_default_instance_; -class CodeGeneratorResponse_FileDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed<CodeGeneratorResponse_File> { +class CodeGeneratorResponse_FileDefaultTypeInternal { +public: + ::google::protobuf::internal::ExplicitlyConstructed<CodeGeneratorResponse_File> + _instance; } _CodeGeneratorResponse_File_default_instance_; -class CodeGeneratorResponseDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed<CodeGeneratorResponse> { +class CodeGeneratorResponseDefaultTypeInternal { +public: + ::google::protobuf::internal::ExplicitlyConstructed<CodeGeneratorResponse> + _instance; } _CodeGeneratorResponse_default_instance_; namespace protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto { @@ -144,15 +156,15 @@ void TableStruct::InitDefaultsImpl() { ::google::protobuf::internal::InitProtobufDefaults(); ::google::protobuf::protobuf_google_2fprotobuf_2fdescriptor_2eproto::InitDefaults(); - _Version_default_instance_.DefaultConstruct(); + _Version_default_instance_._instance.DefaultConstruct(); ::google::protobuf::internal::OnShutdownDestroyMessage( - &_Version_default_instance_);_CodeGeneratorRequest_default_instance_.DefaultConstruct(); + &_Version_default_instance_);_CodeGeneratorRequest_default_instance_._instance.DefaultConstruct(); ::google::protobuf::internal::OnShutdownDestroyMessage( - &_CodeGeneratorRequest_default_instance_);_CodeGeneratorResponse_File_default_instance_.DefaultConstruct(); + &_CodeGeneratorRequest_default_instance_);_CodeGeneratorResponse_File_default_instance_._instance.DefaultConstruct(); ::google::protobuf::internal::OnShutdownDestroyMessage( - &_CodeGeneratorResponse_File_default_instance_);_CodeGeneratorResponse_default_instance_.DefaultConstruct(); + &_CodeGeneratorResponse_File_default_instance_);_CodeGeneratorResponse_default_instance_._instance.DefaultConstruct(); ::google::protobuf::internal::OnShutdownDestroyMessage( - &_CodeGeneratorResponse_default_instance_);_CodeGeneratorRequest_default_instance_.get_mutable()->compiler_version_ = const_cast< ::google::protobuf::compiler::Version*>( + &_CodeGeneratorResponse_default_instance_);_CodeGeneratorRequest_default_instance_._instance.get_mutable()->compiler_version_ = const_cast< ::google::protobuf::compiler::Version*>( ::google::protobuf::compiler::Version::internal_default_instance()); } |