summaryrefslogtreecommitdiffstats
path: root/contrib/libs/protoc/src/google/protobuf/compiler/cpp/cpp_file.cc
diff options
context:
space:
mode:
authorheretic <[email protected]>2022-06-14 13:29:31 +0300
committerheretic <[email protected]>2022-06-14 13:29:31 +0300
commit16f8be4f481c275c34795233c18f8d078382fcb3 (patch)
tree2363f1306ce2e17e72c0a48614256acd046990e6 /contrib/libs/protoc/src/google/protobuf/compiler/cpp/cpp_file.cc
parent647dc68b78e469e5ab416e9b62885c9846fd511d (diff)
Update protobuf to 3.18.1
ref:4846abb21711ea0dc148d4c5df7b5edd3d1bdc69
Diffstat (limited to 'contrib/libs/protoc/src/google/protobuf/compiler/cpp/cpp_file.cc')
-rw-r--r--contrib/libs/protoc/src/google/protobuf/compiler/cpp/cpp_file.cc46
1 files changed, 30 insertions, 16 deletions
diff --git a/contrib/libs/protoc/src/google/protobuf/compiler/cpp/cpp_file.cc b/contrib/libs/protoc/src/google/protobuf/compiler/cpp/cpp_file.cc
index c371a55233c..6e3f174c5b7 100644
--- a/contrib/libs/protoc/src/google/protobuf/compiler/cpp/cpp_file.cc
+++ b/contrib/libs/protoc/src/google/protobuf/compiler/cpp/cpp_file.cc
@@ -131,7 +131,7 @@ FileGenerator::FileGenerator(const FileDescriptor* file, const Options& options)
}
for (int i = 0; i < file->extension_count(); i++) {
extension_generators_.emplace_back(
- new ExtensionGenerator(file->extension(i), options));
+ new ExtensionGenerator(file->extension(i), options, &scc_analyzer_));
}
for (int i = 0; i < file->weak_dependency_count(); ++i) {
weak_deps_.insert(file->weak_dependency(i));
@@ -468,6 +468,19 @@ void FileGenerator::GenerateSourceDefaultInstance(int idx,
DefaultInstanceType(generator->descriptor_, options_),
DefaultInstanceName(generator->descriptor_, options_));
+ for (int i = 0; i < generator->descriptor_->field_count(); i++) {
+ const FieldDescriptor* field = generator->descriptor_->field(i);
+ if (IsStringInlined(field, options_)) {
+ // Force the initialization of the inlined string in the default instance.
+ format(
+ "PROTOBUF_ATTRIBUTE_INIT_PRIORITY std::true_type "
+ "$1$::_init_inline_$2$_ = "
+ "($3$._instance.$2$_.Init(), std::true_type{});\n",
+ ClassName(generator->descriptor_), FieldName(field),
+ DefaultInstanceName(generator->descriptor_, options_));
+ }
+ }
+
if (options_.lite_implicit_weak_fields) {
format("$1$* $2$ = &$3$;\n",
DefaultInstanceType(generator->descriptor_, options_),
@@ -583,6 +596,13 @@ void FileGenerator::GenerateSourceForMessage(int idx, io::Printer* printer) {
"// @@protoc_insertion_point(global_scope)\n");
}
+void FileGenerator::GenerateSourceForExtension(int idx, io::Printer* printer) {
+ Formatter format(printer, variables_);
+ GenerateSourceIncludes(printer);
+ NamespaceOpener ns(Namespace(file_, options_), format);
+ extension_generators_[idx]->GenerateDefinition(printer);
+}
+
void FileGenerator::GenerateGlobalSource(io::Printer* printer) {
Formatter format(printer, variables_);
GenerateSourceIncludes(printer);
@@ -603,21 +623,6 @@ void FileGenerator::GenerateGlobalSource(io::Printer* printer) {
for (int i = 0; i < enum_generators_.size(); i++) {
enum_generators_[i]->GenerateMethods(i, printer);
}
-
- // Define extensions.
- for (int i = 0; i < extension_generators_.size(); i++) {
- extension_generators_[i]->GenerateDefinition(printer);
- }
-
- if (HasGenericServices(file_, options_)) {
- // Generate services.
- for (int i = 0; i < service_generators_.size(); i++) {
- if (i == 0) format("\n");
- format(kThickSeparator);
- format("\n");
- service_generators_[i]->GenerateImplementation(printer);
- }
- }
}
void FileGenerator::GenerateSource(io::Printer* printer) {
@@ -1176,6 +1181,9 @@ void FileGenerator::GenerateLibraryIncludes(io::Printer* printer) {
GOOGLE_CHECK(!options_.opensource_runtime);
IncludeFile("net/proto2/public/lazy_field.h", printer);
}
+ if (ShouldVerify(file_, options_, &scc_analyzer_)) {
+ IncludeFile("net/proto2/public/wire_format_verify.h", printer);
+ }
if (options_.opensource_runtime) {
// Verify the protobuf library header version is compatible with the protoc
@@ -1203,6 +1211,12 @@ void FileGenerator::GenerateLibraryIncludes(io::Printer* printer) {
IncludeFile("net/proto2/io/public/coded_stream.h", printer);
IncludeFile("net/proto2/public/arena.h", printer);
IncludeFile("net/proto2/public/arenastring.h", printer);
+ if (options_.force_inline_string || options_.profile_driven_inline_string) {
+ IncludeFile("net/proto2/public/inlined_string_field.h", printer);
+ }
+ if (HasSimpleBaseClasses(file_, options_)) {
+ IncludeFile("net/proto2/public/generated_message_bases.h", printer);
+ }
IncludeFile("net/proto2/public/generated_message_table_driven.h", printer);
if (HasGeneratedMethods(file_, options_) &&
options_.tctable_mode != Options::kTCTableNever) {