From 509aee4b8b3973e7e68927f7437b6bcaff978b78 Mon Sep 17 00:00:00 2001 From: Bo Yang Date: Tue, 17 Aug 2021 17:26:34 -0700 Subject: [PATCH] Sync from Piper @391414001 PROTOBUF_SYNC_PIPER --- .bazelignore | 1 + BUILD | 66 +- CHANGES.txt | 34 + SECURITY.md | 4 + cmake/conformance.cmake | 8 +- cmake/libprotobuf-lite.cmake | 2 +- cmake/libprotobuf.cmake | 3 +- cmake/tests.cmake | 16 +- java/core/BUILD | 1 + .../java/com/google/protobuf/FieldSet.java | 2 - java/kotlin-lite/pom.xml | 1 + java/lite/BUILD | 1 + kokoro/linux/bazel/build.sh | 2 +- php/ext/google/protobuf/package.xml | 2 - php/ext/google/protobuf/php-upb.c | 895 ++++++--- php/ext/google/protobuf/php-upb.h | 545 ++++-- php/generate_test_protos.sh | 8 +- php/prepare_c_extension.sh | 20 - php/tests/compile_extension.sh | 1 - python/google/protobuf/pyext/descriptor.cc | 3 +- ruby/Rakefile | 6 - ruby/ext/google/protobuf_c/convert.c | 9 +- ruby/ext/google/protobuf_c/extconf.rb | 1 - ruby/ext/google/protobuf_c/message.c | 3 +- ruby/ext/google/protobuf_c/repeated_field.c | 1 - ruby/ext/google/protobuf_c/ruby-upb.c | 893 ++++++--- ruby/ext/google/protobuf_c/ruby-upb.h | 547 ++++-- ruby/lib/google/protobuf/descriptor_dsl.rb | 21 +- src/Makefile.am | 469 ++--- src/google/protobuf/any.pb.cc | 14 +- src/google/protobuf/any.pb.h | 8 +- src/google/protobuf/api.pb.cc | 74 +- src/google/protobuf/api.pb.h | 236 +-- src/google/protobuf/arena.h | 10 +- src/google/protobuf/compiler/cpp/cpp_file.cc | 3 + .../protobuf/compiler/cpp/cpp_helpers.cc | 2 +- .../protobuf/compiler/cpp/cpp_helpers.h | 9 + .../protobuf/compiler/cpp/cpp_message.cc | 6 +- .../cpp/cpp_parse_function_generator.cc | 8 +- .../protobuf/compiler/cpp/cpp_unittest.inc | 11 +- .../protobuf/compiler/java/java_message.cc | 1 - src/google/protobuf/compiler/plugin.pb.cc | 94 +- src/google/protobuf/compiler/plugin.pb.h | 200 +- src/google/protobuf/descriptor.cc | 49 +- src/google/protobuf/descriptor.h | 36 +- src/google/protobuf/descriptor.pb.cc | 686 +++---- src/google/protobuf/descriptor.pb.h | 1736 +++++++++-------- src/google/protobuf/duration.pb.cc | 14 +- src/google/protobuf/duration.pb.h | 8 +- src/google/protobuf/empty.pb.cc | 10 +- src/google/protobuf/empty.pb.h | 9 +- src/google/protobuf/extension_set.cc | 29 +- src/google/protobuf/extension_set.h | 17 +- src/google/protobuf/extension_set_heavy.cc | 4 +- src/google/protobuf/extension_set_unittest.cc | 4 +- src/google/protobuf/field_access_listener.cc | 31 - src/google/protobuf/field_mask.pb.cc | 12 +- src/google/protobuf/field_mask.pb.h | 8 +- .../protobuf/generated_message_bases.cc | 125 ++ src/google/protobuf/generated_message_bases.h | 87 + .../protobuf/generated_message_reflection.cc | 43 +- .../protobuf/generated_message_tctable_impl.h | 22 +- .../generated_message_tctable_impl.inc | 10 +- .../generated_message_tctable_lite.cc | 5 + src/google/protobuf/map.h | 4 +- src/google/protobuf/message.cc | 78 - src/google/protobuf/message.h | 30 - src/google/protobuf/parse_context.cc | 11 +- src/google/protobuf/parse_context.h | 15 +- src/google/protobuf/port_def.inc | 14 +- src/google/protobuf/port_undef.inc | 2 + src/google/protobuf/repeated_field.h | 33 +- .../protobuf/repeated_field_unittest.cc | 9 +- src/google/protobuf/source_context.pb.cc | 12 +- src/google/protobuf/source_context.pb.h | 8 +- src/google/protobuf/struct.pb.cc | 90 +- src/google/protobuf/struct.pb.h | 190 +- src/google/protobuf/timestamp.pb.cc | 14 +- src/google/protobuf/timestamp.pb.h | 8 +- src/google/protobuf/type.pb.cc | 134 +- src/google/protobuf/type.pb.h | 466 ++--- .../util/internal/json_stream_parser.cc | 8 +- src/google/protobuf/wrappers.pb.cc | 108 +- src/google/protobuf/wrappers.pb.h | 72 +- third_party/wyhash/LICENSE | 25 - third_party/wyhash/wyhash.h | 145 -- 86 files changed, 5058 insertions(+), 3604 deletions(-) create mode 100644 SECURITY.md delete mode 100755 php/prepare_c_extension.sh delete mode 100644 src/google/protobuf/field_access_listener.cc create mode 100644 src/google/protobuf/generated_message_bases.cc create mode 100644 src/google/protobuf/generated_message_bases.h delete mode 100644 third_party/wyhash/LICENSE delete mode 100644 third_party/wyhash/wyhash.h diff --git a/.bazelignore b/.bazelignore index 201f851370..5c3a81cce9 100644 --- a/.bazelignore +++ b/.bazelignore @@ -1,3 +1,4 @@ # These are fetched as external repositories. third_party/benchmark third_party/googletest +_build/ diff --git a/BUILD b/BUILD index 441f28b3e1..ab49b5ac9c 100644 --- a/BUILD +++ b/BUILD @@ -4,7 +4,7 @@ load("@bazel_skylib//rules:common_settings.bzl", "string_flag") load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test", "objc_library", native_cc_proto_library = "cc_proto_library") load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain", "proto_library") load("@rules_python//python:defs.bzl", "py_library") -load("@rules_java//java:defs.bzl", "java_binary", "java_proto_library", "java_lite_proto_library") +load("@rules_java//java:defs.bzl", "java_binary", "java_lite_proto_library", "java_proto_library") load(":cc_proto_blacklist_test.bzl", "cc_proto_blacklist_test") licenses(["notice"]) @@ -39,7 +39,6 @@ MSVC_COPTS = [ "/wd4334", # 'operator' : result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?) "/wd4355", # 'this' : used in base member initializer list "/wd4506", # no definition for inline function 'function' - "/wd4514", # -Wno-unused-function "/wd4800", # 'type' : forcing value to bool 'true' or 'false' (performance warning) "/wd4996", # The compiler encountered a deprecated declaration. ] @@ -49,12 +48,9 @@ COPTS = select({ "//conditions:default": [ "-DHAVE_PTHREAD", "-DHAVE_ZLIB", + "-Wmissing-field-initializers", "-Woverloaded-virtual", "-Wno-sign-compare", - "-Wno-unused-function", - # Prevents ISO C++ const string assignment warnings for pyext sources. - "-Wno-write-strings", - "-Wno-deprecated-declarations", ], }) @@ -139,6 +135,7 @@ cc_library( "src/google/protobuf/generated_message_table_driven_lite.cc", "src/google/protobuf/generated_message_util.cc", "src/google/protobuf/implicit_weak_message.cc", + "src/google/protobuf/inlined_string_field.cc", "src/google/protobuf/io/coded_stream.cc", "src/google/protobuf/io/io_win32.cc", "src/google/protobuf/io/strtod.cc", @@ -334,8 +331,8 @@ filegroup( adapt_proto_library( name = "cc_wkt_protos_genproto", - deps = [proto + "_proto" for proto in WELL_KNOWN_PROTO_MAP.keys()], visibility = ["//visibility:public"], + deps = [proto + "_proto" for proto in WELL_KNOWN_PROTO_MAP.keys()], ) cc_library( @@ -366,13 +363,12 @@ cc_library( [native_cc_proto_library( name = proto + "_cc_proto", - deps = [proto + "_proto"], visibility = ["//visibility:private"], + deps = [proto + "_proto"], ) for proto in WELL_KNOWN_PROTO_MAP.keys()] cc_proto_blacklist_test( name = "cc_proto_blacklist_test", - deps = [proto + "_cc_proto" for proto in WELL_KNOWN_PROTO_MAP.keys()], tags = [ # Exclude this target from wildcard expansion (//...). Due to # https://github.com/bazelbuild/bazel/issues/10590, this test has to @@ -381,6 +377,7 @@ cc_proto_blacklist_test( # See also https://github.com/protocolbuffers/protobuf/pull/7096. "manual", ], + deps = [proto + "_cc_proto" for proto in WELL_KNOWN_PROTO_MAP.keys()], ) ################################################################################ @@ -496,8 +493,8 @@ cc_binary( filegroup( name = "testdata", - visibility = ["//:__subpackages__"], srcs = glob(["src/google/protobuf/testdata/**/*"]), + visibility = ["//:__subpackages__"], ) RELATIVE_LITE_TEST_PROTOS = [ @@ -594,9 +591,9 @@ GENERIC_TEST_PROTOS = ["src/" + s for s in GENERIC_RELATIVE_TEST_PROTOS] proto_library( name = "generic_test_protos", - visibility = ["//:__subpackages__"], - strip_import_prefix = "src", srcs = LITE_TEST_PROTOS + GENERIC_TEST_PROTOS, + strip_import_prefix = "src", + visibility = ["//:__subpackages__"], deps = [ "//:any_proto", "//:api_proto", @@ -625,6 +622,7 @@ COMMON_TEST_SRCS = [ # AUTOGEN(common_test_srcs) "src/google/protobuf/arena_test_util.cc", "src/google/protobuf/map_test_util.inc", + "src/google/protobuf/reflection_tester.cc", "src/google/protobuf/test_util.cc", "src/google/protobuf/test_util.inc", "src/google/protobuf/testing/file.cc", @@ -691,6 +689,7 @@ cc_test( "src/google/protobuf/dynamic_message_unittest.cc", "src/google/protobuf/extension_set_unittest.cc", "src/google/protobuf/generated_message_reflection_unittest.cc", + "src/google/protobuf/inlined_string_field_unittest.cc", "src/google/protobuf/io/coded_stream_unittest.cc", "src/google/protobuf/io/io_win32_unittest.cc", "src/google/protobuf/io/printer_unittest.cc", @@ -698,6 +697,7 @@ cc_test( "src/google/protobuf/io/zero_copy_stream_unittest.cc", "src/google/protobuf/map_field_test.cc", "src/google/protobuf/map_test.cc", + "src/google/protobuf/map_test.inc", "src/google/protobuf/message_unittest.cc", "src/google/protobuf/message_unittest.inc", "src/google/protobuf/no_field_presence_test.cc", @@ -737,6 +737,7 @@ cc_test( "src/google/protobuf/util/type_resolver_util_test.cc", "src/google/protobuf/well_known_types_unittest.cc", "src/google/protobuf/wire_format_unittest.cc", + "src/google/protobuf/wire_format_unittest.inc", ] + select({ "//conditions:default": [ # AUTOGEN(non_msvc_test_srcs) @@ -744,7 +745,12 @@ cc_test( ], ":msvc": [], }), - copts = COPTS, + copts = COPTS + select({ + ":msvc": [], + "//conditions:default": [ + "-Wno-deprecated-declarations", + ], + }), data = [ ":test_plugin", ] + glob([ @@ -772,19 +778,19 @@ cc_test( internal_gen_well_known_protos_java( name = "gen_well_known_protos_java", - deps = [proto + "_proto" for proto in WELL_KNOWN_PROTO_MAP.keys()], visibility = [ "//java:__subpackages__", ], + deps = [proto + "_proto" for proto in WELL_KNOWN_PROTO_MAP.keys()], ) internal_gen_well_known_protos_java( name = "gen_well_known_protos_javalite", - deps = [proto + "_proto" for proto in LITE_WELL_KNOWN_PROTO_MAP.keys()], javalite = True, visibility = [ "//java:__subpackages__", ], + deps = [proto + "_proto" for proto in LITE_WELL_KNOWN_PROTO_MAP.keys()], ) alias( @@ -842,6 +848,8 @@ cc_binary( copts = COPTS + [ "-DPYTHON_PROTO2_CPP_IMPL_V2", ], + linkshared = 1, + linkstatic = 1, tags = [ # Exclude this target from wildcard expansion (//...) because it may # not even be buildable. It will be built if it is needed according @@ -849,8 +857,6 @@ cc_binary( # https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes "manual", ], - linkshared = 1, - linkstatic = 1, deps = select({ "//conditions:default": [], ":use_fast_cpp_protos": ["//external:python_headers"], @@ -873,6 +879,8 @@ cc_binary( "python/", "src/", ], + linkshared = 1, + linkstatic = 1, tags = [ # Exclude this target from wildcard expansion (//...) because it may # not even be buildable. It will be built if it is needed according @@ -880,8 +888,6 @@ cc_binary( # https://docs.bazel.build/versions/master/be/common-definitions.html#common-attributes "manual", ], - linkshared = 1, - linkstatic = 1, deps = [ ":protobuf", ":proto_api", @@ -1226,7 +1232,7 @@ java_proto_library( name = "test_messages_proto3_java_proto", visibility = [ "//java:__subpackages__", - ], + ], deps = [":test_messages_proto3_proto"], ) @@ -1247,11 +1253,11 @@ java_lite_proto_library( ) java_lite_proto_library( - name = "conformance_java_proto_lite", - visibility = [ + name = "conformance_java_proto_lite", + visibility = [ "//java:__subpackages__", - ], - deps = [":conformance_proto"], + ], + deps = [":conformance_proto"], ) java_lite_proto_library( @@ -1265,10 +1271,10 @@ java_lite_proto_library( java_binary( name = "conformance_java", srcs = ["conformance/ConformanceJava.java"], + main_class = "ConformanceJava", visibility = [ "//java:__subpackages__", ], - main_class = "ConformanceJava", deps = [ ":conformance_java_proto", ":test_messages_proto2_java_proto", @@ -1281,16 +1287,16 @@ java_binary( java_binary( name = "conformance_java_lite", srcs = ["conformance/ConformanceJavaLite.java"], + main_class = "ConformanceJavaLite", visibility = [ "//java:__subpackages__", ], - main_class = "ConformanceJavaLite", deps = [ ":conformance_java_proto_lite", ":test_messages_proto2_java_proto_lite", ":test_messages_proto3_java_proto_lite", - "//:protobuf_javalite", "//:protobuf_java_util", + "//:protobuf_javalite", ], ) @@ -1301,3 +1307,9 @@ exports_files([ "conformance/text_format_failure_list_java.txt", "conformance/text_format_failure_list_java_lite.txt", ]) + +filegroup( + name = "bzl_srcs", + srcs = glob(["**/*.bzl"]), + visibility = ["//visibility:public"], +) diff --git a/CHANGES.txt b/CHANGES.txt index f614602ae5..343f512339 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,37 @@ +Unreleased Changes (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) + C++ + * Better Smaller ByteSizeLong + * Introduce event filters for inject_field_listener_events + * Reduce memory usage of DescriptorPool + * For lazy fields copy serialized form when allowed. + * Re-introduce the InlinedStringField class + * v2 access listener + * Reduce padding in the proto's ExtensionRegistry map. + * GetExtension performance optimizations + * Make tracker a static variable rather than call static functions + * Support extensions in field access listener + * Annotate MergeFrom for field access listener + * Fix incomplete types for field access listener + * Add map_entry/new_map_entry to SpecificField in MessageDifferencer. They + record the map items which are different in MessageDifferencer's reporter. + * Reduce binary size due to fieldless proto messages + * TextFormat: ParseInfoTree supports getting field end location in addition to + start. + * Fix repeated enum extension size in field listener + * Enable Any Text Expansion for Descriptors::DebugString() + * Switch from int{8,16,32,64} to int{8,16,32,64}_t + + Java + * Optimized FieldDescriptor.valueOf() to avoid array copying. + * Removing deprecated TimeUtil class. + * Add Durations.parseUnchecked(String) and Timestamps.parseUnchecked(String) + * FieldMaskUtil: Add convenience method to mask the fields out of a given proto. + + JavaScript + * Optimize binary parsing of repeated float64 + * Fix for optimization when reading doubles from binary wire format + * Replace toArray implementation with toJSON. + 2021-06-04 version 3.17.3 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) C++ * Introduce FieldAccessListener. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..76a40ee066 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,4 @@ +To report security concerns or vulnerabilities within protobuf, please use +Google's official channel for reporting these. + +https://www.google.com/appserve/security-bugs/m2/new diff --git a/cmake/conformance.cmake b/cmake/conformance.cmake index 056b5d0c60..b9485ff9d0 100644 --- a/cmake/conformance.cmake +++ b/cmake/conformance.cmake @@ -19,22 +19,22 @@ add_custom_command( ) add_executable(conformance_test_runner - ${protobuf_source_dir}/conformance/conformance.pb.cc - ${protobuf_source_dir}/conformance/conformance_test.cc ${protobuf_source_dir}/conformance/binary_json_conformance_suite.cc ${protobuf_source_dir}/conformance/binary_json_conformance_suite.h + ${protobuf_source_dir}/conformance/conformance.pb.cc + ${protobuf_source_dir}/conformance/conformance_test.cc ${protobuf_source_dir}/conformance/conformance_test_runner.cc ${protobuf_source_dir}/conformance/third_party/jsoncpp/json.h ${protobuf_source_dir}/conformance/third_party/jsoncpp/jsoncpp.cpp - ${protobuf_source_dir}/src/google/protobuf/test_messages_proto3.pb.cc ${protobuf_source_dir}/src/google/protobuf/test_messages_proto2.pb.cc + ${protobuf_source_dir}/src/google/protobuf/test_messages_proto3.pb.cc ) add_executable(conformance_cpp ${protobuf_source_dir}/conformance/conformance.pb.cc ${protobuf_source_dir}/conformance/conformance_cpp.cc - ${protobuf_source_dir}/src/google/protobuf/test_messages_proto3.pb.cc ${protobuf_source_dir}/src/google/protobuf/test_messages_proto2.pb.cc + ${protobuf_source_dir}/src/google/protobuf/test_messages_proto3.pb.cc ) target_include_directories( diff --git a/cmake/libprotobuf-lite.cmake b/cmake/libprotobuf-lite.cmake index 6d325d5dca..d98ac021b4 100644 --- a/cmake/libprotobuf-lite.cmake +++ b/cmake/libprotobuf-lite.cmake @@ -36,13 +36,13 @@ set(libprotobuf_lite_includes ${protobuf_source_dir}/src/google/protobuf/extension_set.h ${protobuf_source_dir}/src/google/protobuf/generated_message_util.h ${protobuf_source_dir}/src/google/protobuf/implicit_weak_message.h - ${protobuf_source_dir}/src/google/protobuf/parse_context.h ${protobuf_source_dir}/src/google/protobuf/io/coded_stream.h ${protobuf_source_dir}/src/google/protobuf/io/strtod.h ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream.h ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream_impl.h ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream_impl_lite.h ${protobuf_source_dir}/src/google/protobuf/message_lite.h + ${protobuf_source_dir}/src/google/protobuf/parse_context.h ${protobuf_source_dir}/src/google/protobuf/repeated_field.h ${protobuf_source_dir}/src/google/protobuf/stubs/bytestream.h ${protobuf_source_dir}/src/google/protobuf/stubs/common.h diff --git a/cmake/libprotobuf.cmake b/cmake/libprotobuf.cmake index 479e362c89..808f6db885 100644 --- a/cmake/libprotobuf.cmake +++ b/cmake/libprotobuf.cmake @@ -11,8 +11,8 @@ set(libprotobuf_files ${protobuf_source_dir}/src/google/protobuf/dynamic_message.cc ${protobuf_source_dir}/src/google/protobuf/empty.pb.cc ${protobuf_source_dir}/src/google/protobuf/extension_set_heavy.cc - ${protobuf_source_dir}/src/google/protobuf/field_access_listener.cc ${protobuf_source_dir}/src/google/protobuf/field_mask.pb.cc + ${protobuf_source_dir}/src/google/protobuf/generated_message_bases.cc ${protobuf_source_dir}/src/google/protobuf/generated_message_reflection.cc ${protobuf_source_dir}/src/google/protobuf/generated_message_table_driven.cc ${protobuf_source_dir}/src/google/protobuf/io/gzip_stream.cc @@ -68,6 +68,7 @@ set(libprotobuf_includes ${protobuf_source_dir}/src/google/protobuf/empty.pb.h ${protobuf_source_dir}/src/google/protobuf/field_access_listener.h ${protobuf_source_dir}/src/google/protobuf/field_mask.pb.h + ${protobuf_source_dir}/src/google/protobuf/generated_message_bases.h ${protobuf_source_dir}/src/google/protobuf/generated_message_reflection.h ${protobuf_source_dir}/src/google/protobuf/io/gzip_stream.h ${protobuf_source_dir}/src/google/protobuf/io/printer.h diff --git a/cmake/tests.cmake b/cmake/tests.cmake index 225db93d15..b2cedf6bb1 100644 --- a/cmake/tests.cmake +++ b/cmake/tests.cmake @@ -132,6 +132,7 @@ set(tests_files ${protobuf_source_dir}/src/google/protobuf/arena_unittest.cc ${protobuf_source_dir}/src/google/protobuf/arenastring_unittest.cc ${protobuf_source_dir}/src/google/protobuf/compiler/annotation_test_util.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/command_line_interface_unittest.cc ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_move_unittest.cc ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc @@ -203,21 +204,12 @@ set(tests_files ${protobuf_source_dir}/src/google/protobuf/wire_format_unittest.inc ) -set(non_msvc_tests_files - ${protobuf_source_dir}/src/google/protobuf/compiler/command_line_interface_unittest.cc -) - -set(all_tests_files - ${tests_files} - ${non_msvc_tests_files} -) - if(protobuf_ABSOLUTE_TEST_PLUGIN_PATH) add_compile_options(-DGOOGLE_PROTOBUF_TEST_PLUGIN_PATH="$") endif() if(MINGW) - set_source_files_properties(${all_tests_files} PROPERTIES COMPILE_FLAGS "-Wno-narrowing") + set_source_files_properties(${tests_files} PROPERTIES COMPILE_FLAGS "-Wno-narrowing") # required for tests on MinGW Win64 if (CMAKE_SIZEOF_VOID_P EQUAL 8) @@ -227,14 +219,14 @@ if(MINGW) endif() -add_executable(tests ${all_tests_files} ${common_test_files} ${tests_proto_files} ${lite_test_proto_files}) +add_executable(tests ${tests_files} ${common_test_files} ${tests_proto_files} ${lite_test_proto_files}) target_link_libraries(tests libprotoc libprotobuf gmock_main) set(test_plugin_files ${protobuf_source_dir}/src/google/protobuf/compiler/mock_code_generator.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/test_plugin.cc ${protobuf_source_dir}/src/google/protobuf/testing/file.cc ${protobuf_source_dir}/src/google/protobuf/testing/file.h - ${protobuf_source_dir}/src/google/protobuf/compiler/test_plugin.cc ) add_executable(test_plugin ${test_plugin_files}) diff --git a/java/core/BUILD b/java/core/BUILD index 6fa108463a..f77b2ce0ba 100644 --- a/java/core/BUILD +++ b/java/core/BUILD @@ -242,6 +242,7 @@ junit_tests( ":test_util", "//external:easymock", "//external:easymock_classextension", + "//external:guava", "//external:junit", "//external:truth", ] diff --git a/java/core/src/main/java/com/google/protobuf/FieldSet.java b/java/core/src/main/java/com/google/protobuf/FieldSet.java index f64b50a839..4853df2837 100644 --- a/java/core/src/main/java/com/google/protobuf/FieldSet.java +++ b/java/core/src/main/java/com/google/protobuf/FieldSet.java @@ -832,8 +832,6 @@ final class FieldSet> { */ static int computeElementSizeNoTag(final WireFormat.FieldType type, final Object value) { switch (type) { - // Note: Minor violation of 80-char limit rule here because this would - // actually be harder to read if we wrapped the lines. case DOUBLE: return CodedOutputStream.computeDoubleSizeNoTag((Double) value); case FLOAT: diff --git a/java/kotlin-lite/pom.xml b/java/kotlin-lite/pom.xml index 6d04939a70..8c4b1f8bc1 100644 --- a/java/kotlin-lite/pom.xml +++ b/java/kotlin-lite/pom.xml @@ -95,6 +95,7 @@ ${basedir}/../kotlin/src/main/kotlin/com/google/protobuf + ByteStrings.kt DslList.kt DslMap.kt DslProxy.kt diff --git a/java/lite/BUILD b/java/lite/BUILD index 35a1368b30..7089f958b0 100644 --- a/java/lite/BUILD +++ b/java/lite/BUILD @@ -50,6 +50,7 @@ junit_tests( deps = [ ":lite", "//external:junit", + "//external:truth", "//java/core:generic_test_protos_java_proto_lite", "//java/core:java_test_protos_java_proto_lite", "//java/core:test_util_lite", diff --git a/kokoro/linux/bazel/build.sh b/kokoro/linux/bazel/build.sh index 300e2128f6..1b4fb8d10a 100755 --- a/kokoro/linux/bazel/build.sh +++ b/kokoro/linux/bazel/build.sh @@ -23,7 +23,7 @@ cd $(dirname $0)/../../.. git submodule update --init --recursive trap print_test_logs EXIT -bazel test --copt=-Werror --host_copt=-Werror \ +bazel test -k --copt=-Werror --host_copt=-Werror \ //:build_files_updated_unittest \ //java:tests \ //:protoc \ diff --git a/php/ext/google/protobuf/package.xml b/php/ext/google/protobuf/package.xml index 7aaa5e25dd..30f5048272 100644 --- a/php/ext/google/protobuf/package.xml +++ b/php/ext/google/protobuf/package.xml @@ -46,8 +46,6 @@ - - diff --git a/php/ext/google/protobuf/php-upb.c b/php/ext/google/protobuf/php-upb.c index 774c8d22eb..a668fe0c6d 100644 --- a/php/ext/google/protobuf/php-upb.c +++ b/php/ext/google/protobuf/php-upb.c @@ -169,7 +169,7 @@ /* Configure whether fasttable is switched on or not. *************************/ -#if defined(__has_attribute) +#ifdef __has_attribute #define UPB_HAS_ATTRIBUTE(x) __has_attribute(x) #else #define UPB_HAS_ATTRIBUTE(x) 0 @@ -524,24 +524,43 @@ static void decode_munge(int type, wireval *val) { } static const upb_msglayout_field *upb_find_field(const upb_msglayout *l, - uint32_t field_number) { + uint32_t field_number, + int *last_field_index) { static upb_msglayout_field none = {0, 0, 0, 0, 0, 0}; - /* Lots of optimization opportunities here. */ - int i; if (l == NULL) return &none; - for (i = 0; i < l->field_count; i++) { - if (l->fields[i].number == field_number) { - return &l->fields[i]; + + size_t idx = ((size_t)field_number) - 1; // 0 wraps to SIZE_MAX + if (idx < l->dense_below) { + goto found; + } + + /* Resume scanning from last_field_index since fields are usually in order. */ + int last = *last_field_index; + for (idx = last; idx < l->field_count; idx++) { + if (l->fields[idx].number == field_number) { + goto found; + } + } + + for (idx = 0; idx < last; idx++) { + if (l->fields[idx].number == field_number) { + goto found; } } return &none; /* Unknown field. */ + + found: + UPB_ASSERT(l->fields[idx].number == field_number); + *last_field_index = idx; + return &l->fields[idx]; } -static upb_msg *decode_newsubmsg(upb_decstate *d, const upb_msglayout *layout, +static upb_msg *decode_newsubmsg(upb_decstate *d, + upb_msglayout const *const *submsgs, const upb_msglayout_field *field) { - const upb_msglayout *subl = layout->submsgs[field->submsg_index]; + const upb_msglayout *subl = submsgs[field->submsg_index]; return _upb_msg_new_inl(subl, &d->arena); } @@ -571,9 +590,10 @@ static const char *decode_readstr(upb_decstate *d, const char *ptr, int size, UPB_FORCEINLINE static const char *decode_tosubmsg(upb_decstate *d, const char *ptr, - upb_msg *submsg, const upb_msglayout *layout, + upb_msg *submsg, + upb_msglayout const *const *submsgs, const upb_msglayout_field *field, int size) { - const upb_msglayout *subl = layout->submsgs[field->submsg_index]; + const upb_msglayout *subl = submsgs[field->submsg_index]; int saved_delta = decode_pushlimit(d, ptr, size); if (--d->depth < 0) decode_err(d); if (!decode_isdone(d, &ptr)) { @@ -602,15 +622,17 @@ static const char *decode_group(upb_decstate *d, const char *ptr, UPB_FORCEINLINE static const char *decode_togroup(upb_decstate *d, const char *ptr, - upb_msg *submsg, const upb_msglayout *layout, + upb_msg *submsg, + upb_msglayout const *const *submsgs, const upb_msglayout_field *field) { - const upb_msglayout *subl = layout->submsgs[field->submsg_index]; + const upb_msglayout *subl = submsgs[field->submsg_index]; return decode_group(d, ptr, submsg, subl, field->number); } static const char *decode_toarray(upb_decstate *d, const char *ptr, - upb_msg *msg, const upb_msglayout *layout, - const upb_msglayout_field *field, wireval val, + upb_msg *msg, + upb_msglayout const *const *submsgs, + const upb_msglayout_field *field, wireval *val, int op) { upb_array **arrp = UPB_PTR_AT(msg, field->offset, void); upb_array *arr = *arrp; @@ -632,27 +654,27 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr, /* Append scalar value. */ mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << op, void); arr->len++; - memcpy(mem, &val, 1 << op); + memcpy(mem, val, 1 << op); return ptr; case OP_STRING: - decode_verifyutf8(d, ptr, val.size); + decode_verifyutf8(d, ptr, val->size); /* Fallthrough. */ case OP_BYTES: { /* Append bytes. */ upb_strview *str = (upb_strview*)_upb_array_ptr(arr) + arr->len; arr->len++; - return decode_readstr(d, ptr, val.size, str); + return decode_readstr(d, ptr, val->size, str); } case OP_SUBMSG: { /* Append submessage / group. */ - upb_msg *submsg = decode_newsubmsg(d, layout, field); + upb_msg *submsg = decode_newsubmsg(d, submsgs, field); *UPB_PTR_AT(_upb_array_ptr(arr), arr->len * sizeof(void *), upb_msg *) = submsg; arr->len++; if (UPB_UNLIKELY(field->descriptortype == UPB_DTYPE_GROUP)) { - return decode_togroup(d, ptr, submsg, layout, field); + return decode_togroup(d, ptr, submsg, submsgs, field); } else { - return decode_tosubmsg(d, ptr, submsg, layout, field, val.size); + return decode_tosubmsg(d, ptr, submsg, submsgs, field, val->size); } } case OP_FIXPCK_LG2(2): @@ -660,15 +682,15 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr, /* Fixed packed. */ int lg2 = op - OP_FIXPCK_LG2(0); int mask = (1 << lg2) - 1; - size_t count = val.size >> lg2; - if ((val.size & mask) != 0) { + size_t count = val->size >> lg2; + if ((val->size & mask) != 0) { decode_err(d); /* Length isn't a round multiple of elem size. */ } decode_reserve(d, arr, count); mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void); arr->len += count; - memcpy(mem, ptr, val.size); /* XXX: ptr boundary. */ - return ptr + val.size; + memcpy(mem, ptr, val->size); /* XXX: ptr boundary. */ + return ptr + val->size; } case OP_VARPCK_LG2(0): case OP_VARPCK_LG2(2): @@ -676,7 +698,7 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr, /* Varint packed. */ int lg2 = op - OP_VARPCK_LG2(0); int scale = 1 << lg2; - int saved_limit = decode_pushlimit(d, ptr, val.size); + int saved_limit = decode_pushlimit(d, ptr, val->size); char *out = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void); while (!decode_isdone(d, &ptr)) { wireval elem; @@ -698,16 +720,15 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr, } static const char *decode_tomap(upb_decstate *d, const char *ptr, upb_msg *msg, - const upb_msglayout *layout, - const upb_msglayout_field *field, wireval val) { + upb_msglayout const *const *submsgs, + const upb_msglayout_field *field, wireval *val) { upb_map **map_p = UPB_PTR_AT(msg, field->offset, upb_map *); upb_map *map = *map_p; upb_map_entry ent; - const upb_msglayout *entry = layout->submsgs[field->submsg_index]; + const upb_msglayout *entry = submsgs[field->submsg_index]; if (!map) { /* Lazily create map. */ - const upb_msglayout *entry = layout->submsgs[field->submsg_index]; const upb_msglayout_field *key_field = &entry->fields[0]; const upb_msglayout_field *val_field = &entry->fields[1]; char key_size = desctype_to_mapsize[key_field->descriptortype]; @@ -727,28 +748,28 @@ static const char *decode_tomap(upb_decstate *d, const char *ptr, upb_msg *msg, ent.v.val = upb_value_ptr(_upb_msg_new(entry->submsgs[0], &d->arena)); } - ptr = decode_tosubmsg(d, ptr, &ent.k, layout, field, val.size); + ptr = decode_tosubmsg(d, ptr, &ent.k, submsgs, field, val->size); _upb_map_set(map, &ent.k, map->key_size, &ent.v, map->val_size, &d->arena); return ptr; } static const char *decode_tomsg(upb_decstate *d, const char *ptr, upb_msg *msg, - const upb_msglayout *layout, - const upb_msglayout_field *field, wireval val, + upb_msglayout const *const *submsgs, + const upb_msglayout_field *field, wireval *val, int op) { void *mem = UPB_PTR_AT(msg, field->offset, void); int type = field->descriptortype; /* Set presence if necessary. */ - if (field->presence < 0) { + if (field->presence > 0) { + _upb_sethas_field(msg, field); + } else if (field->presence < 0) { /* Oneof case */ uint32_t *oneof_case = _upb_oneofcase_field(msg, field); if (op == OP_SUBMSG && *oneof_case != field->number) { memset(mem, 0, sizeof(void*)); } *oneof_case = field->number; - } else if (field->presence > 0) { - _upb_sethas_field(msg, field); } /* Store into message. */ @@ -757,29 +778,29 @@ static const char *decode_tomsg(upb_decstate *d, const char *ptr, upb_msg *msg, upb_msg **submsgp = mem; upb_msg *submsg = *submsgp; if (!submsg) { - submsg = decode_newsubmsg(d, layout, field); + submsg = decode_newsubmsg(d, submsgs, field); *submsgp = submsg; } if (UPB_UNLIKELY(type == UPB_DTYPE_GROUP)) { - ptr = decode_togroup(d, ptr, submsg, layout, field); + ptr = decode_togroup(d, ptr, submsg, submsgs, field); } else { - ptr = decode_tosubmsg(d, ptr, submsg, layout, field, val.size); + ptr = decode_tosubmsg(d, ptr, submsg, submsgs, field, val->size); } break; } case OP_STRING: - decode_verifyutf8(d, ptr, val.size); + decode_verifyutf8(d, ptr, val->size); /* Fallthrough. */ case OP_BYTES: - return decode_readstr(d, ptr, val.size, mem); + return decode_readstr(d, ptr, val->size, mem); case OP_SCALAR_LG2(3): - memcpy(mem, &val, 8); + memcpy(mem, val, 8); break; case OP_SCALAR_LG2(2): - memcpy(mem, &val, 4); + memcpy(mem, val, 4); break; case OP_SCALAR_LG2(0): - memcpy(mem, &val, 1); + memcpy(mem, val, 1); break; default: UPB_UNREACHABLE(); @@ -805,6 +826,7 @@ static bool decode_tryfastdispatch(upb_decstate *d, const char **ptr, UPB_NOINLINE static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg, const upb_msglayout *layout) { + int last_field_index = 0; while (true) { uint32_t tag; const upb_msglayout_field *field; @@ -819,7 +841,7 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg, field_number = tag >> 3; wire_type = tag & 7; - field = upb_find_field(layout, field_number); + field = upb_find_field(layout, field_number, &last_field_index); switch (wire_type) { case UPB_WIRE_TYPE_VARINT: @@ -844,7 +866,7 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg, case UPB_WIRE_TYPE_DELIMITED: { int ndx = field->descriptortype; uint64_t size; - if (_upb_isrepeated(field)) ndx += 18; + if (_upb_getmode(field) == _UPB_MODE_ARRAY) ndx += 18; ptr = decode_varint64(d, ptr, &size); if (size >= INT32_MAX || ptr - d->end + (int32_t)size > d->limit) { @@ -868,17 +890,18 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg, if (op >= 0) { /* Parse, using op for dispatch. */ - switch (field->label) { - case UPB_LABEL_REPEATED: - case _UPB_LABEL_PACKED: - ptr = decode_toarray(d, ptr, msg, layout, field, val, op); + switch (_upb_getmode(field)) { + case _UPB_MODE_ARRAY: + ptr = decode_toarray(d, ptr, msg, layout->submsgs, field, &val, op); break; - case _UPB_LABEL_MAP: - ptr = decode_tomap(d, ptr, msg, layout, field, val); + case _UPB_MODE_MAP: + ptr = decode_tomap(d, ptr, msg, layout->submsgs, field, &val); break; - default: - ptr = decode_tomsg(d, ptr, msg, layout, field, val, op); + case _UPB_MODE_SCALAR: + ptr = decode_tomsg(d, ptr, msg, layout->submsgs, field, &val, op); break; + default: + UPB_UNREACHABLE(); } } else { unknown: @@ -924,7 +947,8 @@ static bool decode_top(struct upb_decstate *d, const char *buf, void *msg, } bool _upb_decode(const char *buf, size_t size, void *msg, - const upb_msglayout *l, upb_arena *arena, int options) { + const upb_msglayout *l, const upb_extreg *extreg, int options, + upb_arena *arena) { bool ok; upb_decstate state; unsigned depth = (unsigned)options >> 16; @@ -1126,7 +1150,7 @@ static void encode_fixedarray(upb_encstate *e, const upb_array *arr, } } -static void encode_message(upb_encstate *e, const char *msg, +static void encode_message(upb_encstate *e, const upb_msg *msg, const upb_msglayout *m, size_t *size); static void encode_scalar(upb_encstate *e, const void *_field_mem, @@ -1218,10 +1242,10 @@ static void encode_scalar(upb_encstate *e, const void *_field_mem, encode_tag(e, f->number, wire_type); } -static void encode_array(upb_encstate *e, const char *field_mem, +static void encode_array(upb_encstate *e, const upb_msg *msg, const upb_msglayout *m, const upb_msglayout_field *f) { - const upb_array *arr = *(const upb_array**)field_mem; - bool packed = f->label == _UPB_LABEL_PACKED; + const upb_array *arr = *UPB_PTR_AT(msg, f->offset, upb_array*); + bool packed = f->mode & _UPB_MODE_IS_PACKED; size_t pre_len = e->limit - e->ptr; if (arr == NULL || arr->len == 0) { @@ -1337,9 +1361,9 @@ static void encode_mapentry(upb_encstate *e, uint32_t number, encode_tag(e, number, UPB_WIRE_TYPE_DELIMITED); } -static void encode_map(upb_encstate *e, const char *field_mem, +static void encode_map(upb_encstate *e, const upb_msg *msg, const upb_msglayout *m, const upb_msglayout_field *f) { - const upb_map *map = *(const upb_map**)field_mem; + const upb_map *map = *UPB_PTR_AT(msg, f->offset, const upb_map*); const upb_msglayout *layout = m->submsgs[f->submsg_index]; UPB_ASSERT(layout->field_count == 2); @@ -1385,7 +1409,7 @@ static void encode_scalarfield(upb_encstate *e, const char *msg, encode_scalar(e, msg + f->offset, m, f, skip_empty); } -static void encode_message(upb_encstate *e, const char *msg, +static void encode_message(upb_encstate *e, const upb_msg *msg, const upb_msglayout *m, size_t *size) { size_t pre_len = e->limit - e->ptr; const upb_msglayout_field *f = &m->fields[m->field_count]; @@ -1402,12 +1426,18 @@ static void encode_message(upb_encstate *e, const char *msg, while (f != first) { f--; - if (_upb_isrepeated(f)) { - encode_array(e, msg + f->offset, m, f); - } else if (f->label == _UPB_LABEL_MAP) { - encode_map(e, msg + f->offset, m, f); - } else { - encode_scalarfield(e, msg, m, f); + switch (_upb_getmode(f)) { + case _UPB_MODE_ARRAY: + encode_array(e, msg, m, f); + break; + case _UPB_MODE_MAP: + encode_map(e, msg, m, f); + break; + case _UPB_MODE_SCALAR: + encode_scalarfield(e, msg, m, f); + break; + default: + UPB_UNREACHABLE(); } } @@ -1452,7 +1482,7 @@ char *upb_encode_ex(const void *msg, const upb_msglayout *l, int options, /** upb_msg *******************************************************************/ -static const size_t overhead = sizeof(upb_msg_internal); +static const size_t overhead = sizeof(upb_msg_internaldata); static const upb_msg_internal *upb_msg_getinternal_const(const upb_msg *msg) { ptrdiff_t size = sizeof(upb_msg_internal); @@ -1468,49 +1498,107 @@ void _upb_msg_clear(upb_msg *msg, const upb_msglayout *l) { memset(mem, 0, upb_msg_sizeof(l)); } +static bool realloc_internal(upb_msg *msg, size_t need, upb_arena *arena) { + upb_msg_internal *in = upb_msg_getinternal(msg); + if (!in->internal) { + /* No internal data, allocate from scratch. */ + size_t size = UPB_MAX(128, _upb_lg2ceilsize(need + overhead)); + upb_msg_internaldata *internal = upb_arena_malloc(arena, size); + if (!internal) return false; + internal->size = size; + internal->unknown_end = overhead; + internal->ext_begin = size; + in->internal = internal; + } else if (in->internal->ext_begin - in->internal->unknown_end < need) { + /* Internal data is too small, reallocate. */ + size_t new_size = _upb_lg2ceilsize(in->internal->size + need); + size_t ext_bytes = in->internal->size - in->internal->ext_begin; + size_t new_ext_begin = new_size - ext_bytes; + upb_msg_internaldata *internal = + upb_arena_realloc(arena, in->internal, in->internal->size, new_size); + if (!internal) return false; + if (ext_bytes) { + /* Need to move extension data to the end. */ + char *ptr = (char*)internal; + memmove(ptr + new_ext_begin, ptr + internal->ext_begin, ext_bytes); + } + internal->ext_begin = new_ext_begin; + internal->size = new_size; + in->internal = internal; + } + UPB_ASSERT(in->internal->ext_begin - in->internal->unknown_end >= need); + return true; +} + bool _upb_msg_addunknown(upb_msg *msg, const char *data, size_t len, upb_arena *arena) { - + if (!realloc_internal(msg, len, arena)) return false; upb_msg_internal *in = upb_msg_getinternal(msg); - if (!in->unknown) { - size_t size = 128; - while (size < len) size *= 2; - in->unknown = upb_arena_malloc(arena, size + overhead); - if (!in->unknown) return false; - in->unknown->size = size; - in->unknown->len = 0; - } else if (in->unknown->size - in->unknown->len < len) { - size_t need = in->unknown->len + len; - size_t size = in->unknown->size; - while (size < need) size *= 2; - in->unknown = upb_arena_realloc( - arena, in->unknown, in->unknown->size + overhead, size + overhead); - if (!in->unknown) return false; - in->unknown->size = size; - } - memcpy(UPB_PTR_AT(in->unknown + 1, in->unknown->len, char), data, len); - in->unknown->len += len; + memcpy(UPB_PTR_AT(in->internal, in->internal->unknown_end, char), data, len); + in->internal->unknown_end += len; return true; } void _upb_msg_discardunknown_shallow(upb_msg *msg) { upb_msg_internal *in = upb_msg_getinternal(msg); - if (in->unknown) { - in->unknown->len = 0; + if (in->internal) { + in->internal->unknown_end = overhead; } } const char *upb_msg_getunknown(const upb_msg *msg, size_t *len) { const upb_msg_internal *in = upb_msg_getinternal_const(msg); - if (in->unknown) { - *len = in->unknown->len; - return (char*)(in->unknown + 1); + if (in->internal) { + *len = in->internal->unknown_end - overhead; + return (char*)(in->internal + 1); } else { *len = 0; return NULL; } } +const upb_msg_ext *_upb_msg_getexts(const upb_msg *msg, size_t *count) { + const upb_msg_internal *in = upb_msg_getinternal_const(msg); + if (in->internal) { + *count = + (in->internal->size - in->internal->ext_begin) / sizeof(upb_msg_ext); + return UPB_PTR_AT(in->internal, in->internal->ext_begin, void); + } else { + *count = 0; + return NULL; + } +} + +const upb_msg_ext *_upb_msg_getext(const upb_msg *msg, + const upb_msglayout_ext *e) { + size_t n; + const upb_msg_ext *ext = _upb_msg_getexts(msg, &n); + + /* For now we use linear search exclusively to find extensions. If this + * becomes an issue due to messages with lots of extensions, we can introduce + * a table of some sort. */ + for (size_t i = 0; i < n; i++) { + if (ext[i].ext == e) { + return &ext[i]; + } + } + + return NULL; +} + +upb_msg_ext *_upb_msg_getorcreateext(upb_msg *msg, const upb_msglayout_ext *e, + upb_arena *arena) { + upb_msg_ext *ext = (upb_msg_ext*)_upb_msg_getext(msg, e); + if (ext) return ext; + if (!realloc_internal(msg, sizeof(upb_msg_ext), arena)) return NULL; + upb_msg_internal *in = upb_msg_getinternal(msg); + in->internal->ext_begin -= sizeof(upb_msg_ext); + ext = UPB_PTR_AT(in->internal, in->internal->ext_begin, void); + memset(ext, 0, sizeof(upb_msg_ext)); + ext->ext = e; + return ext; +} + /** upb_array *****************************************************************/ bool _upb_array_realloc(upb_array *arr, size_t min_size, upb_arena *arena) { @@ -1700,6 +1788,63 @@ bool _upb_mapsorter_pushmap(_upb_mapsorter *s, upb_descriptortype_t key_type, return true; } +/** upb_extreg ****************************************************************/ + +struct upb_extreg { + upb_arena *arena; + upb_strtable exts; /* Key is upb_msglayout* concatenated with fieldnum. */ +}; + +#define EXTREG_KEY_SIZE (sizeof(upb_msglayout*) + sizeof(uint32_t)) + +static void extreg_key(char *buf, const upb_msglayout *l, uint32_t fieldnum) { + memcpy(buf, &l, sizeof(l)); + memcpy(buf + sizeof(l), &fieldnum, sizeof(fieldnum)); +} + +upb_extreg *upb_extreg_new(upb_arena *arena) { + upb_extreg *r = upb_arena_malloc(arena, sizeof(*r)); + if (!r) return NULL; + r->arena = arena; + if (!upb_strtable_init(&r->exts, 8, arena)) return NULL; + return r; +} + +bool _upb_extreg_add(upb_extreg *r, const upb_msglayout_ext *e, size_t count) { + char buf[EXTREG_KEY_SIZE]; + const upb_msglayout_ext *start = e; + const upb_msglayout_ext *end = e + count; + for (; e < end; e++) { + extreg_key(buf, e->extendee, e->field.number); + if (!upb_strtable_insert(&r->exts, buf, EXTREG_KEY_SIZE, + upb_value_constptr(e), r->arena)) { + goto failure; + } + } + return true; + +failure: + /* Back out the entries previously added. */ + for (end = e, e = start; e < end; e++) { + extreg_key(buf, e->extendee, e->field.number); + upb_strtable_remove(&r->exts, buf, EXTREG_KEY_SIZE, NULL); + } + return false; +} + +const upb_msglayout_field *_upb_extreg_get(const upb_extreg *r, + const upb_msglayout *l, + uint32_t num) { + char buf[EXTREG_KEY_SIZE]; + upb_value v; + extreg_key(buf, l, num); + if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, &v)) { + return upb_value_getconstptr(v); + } else { + return NULL; + } +} + /** upb/table.c ************************************************************/ /* * upb_table Implementation @@ -1709,7 +1854,6 @@ bool _upb_mapsorter_pushmap(_upb_mapsorter *s, upb_descriptortype_t key_type, #include -#include "third_party/wyhash/wyhash.h" /* Must be last. */ @@ -1982,8 +2126,143 @@ static upb_tabkey strcopy(lookupkey_t k2, upb_arena *a) { return (uintptr_t)str; } +/* Adapted from ABSL's wyhash. */ + +static uint64_t UnalignedLoad64(const void *p) { + uint64_t val; + memcpy(&val, p, 8); + return val; +} + +static uint32_t UnalignedLoad32(const void *p) { + uint32_t val; + memcpy(&val, p, 4); + return val; +} + +#if defined(_MSC_VER) && defined(_M_X64) +#include +#endif + +/* Computes a * b, returning the low 64 bits of the result and storing the high + * 64 bits in |*high|. */ +static uint64_t upb_umul128(uint64_t v0, uint64_t v1, uint64_t* out_high) { +#ifdef __SIZEOF_INT128__ + __uint128_t p = v0; + p *= v1; + *out_high = (uint64_t)(p >> 64); + return (uint64_t)p; +#elif defined(_MSC_VER) && defined(_M_X64) + return _umul128(v0, v1, out_high); +#else + uint64_t a32 = v0 >> 32; + uint64_t a00 = v0 & 0xffffffff; + uint64_t b32 = v1 >> 32; + uint64_t b00 = v1 & 0xffffffff; + uint64_t high = a32 * b32; + uint64_t low = a00 * b00; + uint64_t mid1 = a32 * b00; + uint64_t mid2 = a00 * b32; + low += (mid1 << 32) + (mid2 << 32); + // Omit carry bit, for mixing we do not care about exact numerical precision. + high += (mid1 >> 32) + (mid2 >> 32); + *out_high = high; + return low; +#endif +} + +static uint64_t WyhashMix(uint64_t v0, uint64_t v1) { + uint64_t high; + uint64_t low = upb_umul128(v0, v1, &high); + return low ^ high; +} + +static uint64_t Wyhash(const void *data, size_t len, uint64_t seed, + const uint64_t salt[]) { + const uint8_t* ptr = (const uint8_t*)data; + uint64_t starting_length = (uint64_t)len; + uint64_t current_state = seed ^ salt[0]; + + if (len > 64) { + // If we have more than 64 bytes, we're going to handle chunks of 64 + // bytes at a time. We're going to build up two separate hash states + // which we will then hash together. + uint64_t duplicated_state = current_state; + + do { + uint64_t a = UnalignedLoad64(ptr); + uint64_t b = UnalignedLoad64(ptr + 8); + uint64_t c = UnalignedLoad64(ptr + 16); + uint64_t d = UnalignedLoad64(ptr + 24); + uint64_t e = UnalignedLoad64(ptr + 32); + uint64_t f = UnalignedLoad64(ptr + 40); + uint64_t g = UnalignedLoad64(ptr + 48); + uint64_t h = UnalignedLoad64(ptr + 56); + + uint64_t cs0 = WyhashMix(a ^ salt[1], b ^ current_state); + uint64_t cs1 = WyhashMix(c ^ salt[2], d ^ current_state); + current_state = (cs0 ^ cs1); + + uint64_t ds0 = WyhashMix(e ^ salt[3], f ^ duplicated_state); + uint64_t ds1 = WyhashMix(g ^ salt[4], h ^ duplicated_state); + duplicated_state = (ds0 ^ ds1); + + ptr += 64; + len -= 64; + } while (len > 64); + + current_state = current_state ^ duplicated_state; + } + + // We now have a data `ptr` with at most 64 bytes and the current state + // of the hashing state machine stored in current_state. + while (len > 16) { + uint64_t a = UnalignedLoad64(ptr); + uint64_t b = UnalignedLoad64(ptr + 8); + + current_state = WyhashMix(a ^ salt[1], b ^ current_state); + + ptr += 16; + len -= 16; + } + + // We now have a data `ptr` with at most 16 bytes. + uint64_t a = 0; + uint64_t b = 0; + if (len > 8) { + // When we have at least 9 and at most 16 bytes, set A to the first 64 + // bits of the input and B to the last 64 bits of the input. Yes, they will + // overlap in the middle if we are working with less than the full 16 + // bytes. + a = UnalignedLoad64(ptr); + b = UnalignedLoad64(ptr + len - 8); + } else if (len > 3) { + // If we have at least 4 and at most 8 bytes, set A to the first 32 + // bits and B to the last 32 bits. + a = UnalignedLoad32(ptr); + b = UnalignedLoad32(ptr + len - 4); + } else if (len > 0) { + // If we have at least 1 and at most 3 bytes, read all of the provided + // bits into A, with some adjustments. + a = ((ptr[0] << 16) | (ptr[len >> 1] << 8) | ptr[len - 1]); + b = 0; + } else { + a = 0; + b = 0; + } + + uint64_t w = WyhashMix(a ^ salt[1], b ^ current_state); + uint64_t z = salt[1] ^ starting_length; + return WyhashMix(w, z); +} + +const uint64_t kWyhashSalt[5] = { + 0x243F6A8885A308D3ULL, 0x13198A2E03707344ULL, 0xA4093822299F31D0ULL, + 0x082EFA98EC4E6C89ULL, 0x452821E638D01377ULL, +}; + static uint32_t table_hash(const char *p, size_t n) { - return wyhash(p, n, 0, _wyp); + return Wyhash(p, n, 0, kWyhashSalt); } static uint32_t strhash(upb_tabkey key) { @@ -3710,13 +3989,13 @@ static const upb_msglayout *const google_protobuf_FileDescriptorSet_submsgs[1] = }; static const upb_msglayout_field google_protobuf_FileDescriptorSet__fields[1] = { - {1, UPB_SIZE(0, 0), 0, 0, 11, 3}, + {1, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_FileDescriptorSet_msginit = { &google_protobuf_FileDescriptorSet_submsgs[0], &google_protobuf_FileDescriptorSet__fields[0], - UPB_SIZE(8, 8), 1, false, 255, + UPB_SIZE(8, 8), 1, false, 1, 255, }; static const upb_msglayout *const google_protobuf_FileDescriptorProto_submsgs[6] = { @@ -3729,24 +4008,24 @@ static const upb_msglayout *const google_protobuf_FileDescriptorProto_submsgs[6] }; static const upb_msglayout_field google_protobuf_FileDescriptorProto__fields[12] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(12, 24), 2, 0, 12, 1}, - {3, UPB_SIZE(36, 72), 0, 0, 12, 3}, - {4, UPB_SIZE(40, 80), 0, 0, 11, 3}, - {5, UPB_SIZE(44, 88), 0, 1, 11, 3}, - {6, UPB_SIZE(48, 96), 0, 4, 11, 3}, - {7, UPB_SIZE(52, 104), 0, 2, 11, 3}, - {8, UPB_SIZE(28, 56), 3, 3, 11, 1}, - {9, UPB_SIZE(32, 64), 4, 5, 11, 1}, - {10, UPB_SIZE(56, 112), 0, 0, 5, 3}, - {11, UPB_SIZE(60, 120), 0, 0, 5, 3}, - {12, UPB_SIZE(20, 40), 5, 0, 12, 1}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(12, 24), 2, 0, 12, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(36, 72), 0, 0, 12, _UPB_MODE_ARRAY}, + {4, UPB_SIZE(40, 80), 0, 0, 11, _UPB_MODE_ARRAY}, + {5, UPB_SIZE(44, 88), 0, 1, 11, _UPB_MODE_ARRAY}, + {6, UPB_SIZE(48, 96), 0, 4, 11, _UPB_MODE_ARRAY}, + {7, UPB_SIZE(52, 104), 0, 2, 11, _UPB_MODE_ARRAY}, + {8, UPB_SIZE(28, 56), 3, 3, 11, _UPB_MODE_SCALAR}, + {9, UPB_SIZE(32, 64), 4, 5, 11, _UPB_MODE_SCALAR}, + {10, UPB_SIZE(56, 112), 0, 0, 5, _UPB_MODE_ARRAY}, + {11, UPB_SIZE(60, 120), 0, 0, 5, _UPB_MODE_ARRAY}, + {12, UPB_SIZE(20, 40), 5, 0, 12, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_FileDescriptorProto_msginit = { &google_protobuf_FileDescriptorProto_submsgs[0], &google_protobuf_FileDescriptorProto__fields[0], - UPB_SIZE(64, 128), 12, false, 255, + UPB_SIZE(64, 128), 12, false, 12, 255, }; static const upb_msglayout *const google_protobuf_DescriptorProto_submsgs[7] = { @@ -3760,22 +4039,22 @@ static const upb_msglayout *const google_protobuf_DescriptorProto_submsgs[7] = { }; static const upb_msglayout_field google_protobuf_DescriptorProto__fields[10] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(16, 32), 0, 4, 11, 3}, - {3, UPB_SIZE(20, 40), 0, 0, 11, 3}, - {4, UPB_SIZE(24, 48), 0, 3, 11, 3}, - {5, UPB_SIZE(28, 56), 0, 1, 11, 3}, - {6, UPB_SIZE(32, 64), 0, 4, 11, 3}, - {7, UPB_SIZE(12, 24), 2, 5, 11, 1}, - {8, UPB_SIZE(36, 72), 0, 6, 11, 3}, - {9, UPB_SIZE(40, 80), 0, 2, 11, 3}, - {10, UPB_SIZE(44, 88), 0, 0, 12, 3}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(16, 32), 0, 4, 11, _UPB_MODE_ARRAY}, + {3, UPB_SIZE(20, 40), 0, 0, 11, _UPB_MODE_ARRAY}, + {4, UPB_SIZE(24, 48), 0, 3, 11, _UPB_MODE_ARRAY}, + {5, UPB_SIZE(28, 56), 0, 1, 11, _UPB_MODE_ARRAY}, + {6, UPB_SIZE(32, 64), 0, 4, 11, _UPB_MODE_ARRAY}, + {7, UPB_SIZE(12, 24), 2, 5, 11, _UPB_MODE_SCALAR}, + {8, UPB_SIZE(36, 72), 0, 6, 11, _UPB_MODE_ARRAY}, + {9, UPB_SIZE(40, 80), 0, 2, 11, _UPB_MODE_ARRAY}, + {10, UPB_SIZE(44, 88), 0, 0, 12, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_DescriptorProto_msginit = { &google_protobuf_DescriptorProto_submsgs[0], &google_protobuf_DescriptorProto__fields[0], - UPB_SIZE(48, 96), 10, false, 255, + UPB_SIZE(48, 96), 10, false, 10, 255, }; static const upb_msglayout *const google_protobuf_DescriptorProto_ExtensionRange_submsgs[1] = { @@ -3783,26 +4062,26 @@ static const upb_msglayout *const google_protobuf_DescriptorProto_ExtensionRange }; static const upb_msglayout_field google_protobuf_DescriptorProto_ExtensionRange__fields[3] = { - {1, UPB_SIZE(4, 4), 1, 0, 5, 1}, - {2, UPB_SIZE(8, 8), 2, 0, 5, 1}, - {3, UPB_SIZE(12, 16), 3, 0, 11, 1}, + {1, UPB_SIZE(4, 4), 1, 0, 5, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(8, 8), 2, 0, 5, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(12, 16), 3, 0, 11, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_DescriptorProto_ExtensionRange_msginit = { &google_protobuf_DescriptorProto_ExtensionRange_submsgs[0], &google_protobuf_DescriptorProto_ExtensionRange__fields[0], - UPB_SIZE(16, 24), 3, false, 255, + UPB_SIZE(16, 24), 3, false, 3, 255, }; static const upb_msglayout_field google_protobuf_DescriptorProto_ReservedRange__fields[2] = { - {1, UPB_SIZE(4, 4), 1, 0, 5, 1}, - {2, UPB_SIZE(8, 8), 2, 0, 5, 1}, + {1, UPB_SIZE(4, 4), 1, 0, 5, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(8, 8), 2, 0, 5, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_DescriptorProto_ReservedRange_msginit = { NULL, &google_protobuf_DescriptorProto_ReservedRange__fields[0], - UPB_SIZE(16, 16), 2, false, 255, + UPB_SIZE(16, 16), 2, false, 2, 255, }; static const upb_msglayout *const google_protobuf_ExtensionRangeOptions_submsgs[1] = { @@ -3810,13 +4089,13 @@ static const upb_msglayout *const google_protobuf_ExtensionRangeOptions_submsgs[ }; static const upb_msglayout_field google_protobuf_ExtensionRangeOptions__fields[1] = { - {999, UPB_SIZE(0, 0), 0, 0, 11, 3}, + {999, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_ExtensionRangeOptions_msginit = { &google_protobuf_ExtensionRangeOptions_submsgs[0], &google_protobuf_ExtensionRangeOptions__fields[0], - UPB_SIZE(8, 8), 1, false, 255, + UPB_SIZE(8, 8), 1, false, 0, 255, }; static const upb_msglayout *const google_protobuf_FieldDescriptorProto_submsgs[1] = { @@ -3824,23 +4103,23 @@ static const upb_msglayout *const google_protobuf_FieldDescriptorProto_submsgs[1 }; static const upb_msglayout_field google_protobuf_FieldDescriptorProto__fields[11] = { - {1, UPB_SIZE(24, 24), 1, 0, 12, 1}, - {2, UPB_SIZE(32, 40), 2, 0, 12, 1}, - {3, UPB_SIZE(12, 12), 3, 0, 5, 1}, - {4, UPB_SIZE(4, 4), 4, 0, 14, 1}, - {5, UPB_SIZE(8, 8), 5, 0, 14, 1}, - {6, UPB_SIZE(40, 56), 6, 0, 12, 1}, - {7, UPB_SIZE(48, 72), 7, 0, 12, 1}, - {8, UPB_SIZE(64, 104), 8, 0, 11, 1}, - {9, UPB_SIZE(16, 16), 9, 0, 5, 1}, - {10, UPB_SIZE(56, 88), 10, 0, 12, 1}, - {17, UPB_SIZE(20, 20), 11, 0, 8, 1}, + {1, UPB_SIZE(24, 24), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(32, 40), 2, 0, 12, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(12, 12), 3, 0, 5, _UPB_MODE_SCALAR}, + {4, UPB_SIZE(4, 4), 4, 0, 14, _UPB_MODE_SCALAR}, + {5, UPB_SIZE(8, 8), 5, 0, 14, _UPB_MODE_SCALAR}, + {6, UPB_SIZE(40, 56), 6, 0, 12, _UPB_MODE_SCALAR}, + {7, UPB_SIZE(48, 72), 7, 0, 12, _UPB_MODE_SCALAR}, + {8, UPB_SIZE(64, 104), 8, 0, 11, _UPB_MODE_SCALAR}, + {9, UPB_SIZE(16, 16), 9, 0, 5, _UPB_MODE_SCALAR}, + {10, UPB_SIZE(56, 88), 10, 0, 12, _UPB_MODE_SCALAR}, + {17, UPB_SIZE(20, 20), 11, 0, 8, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_FieldDescriptorProto_msginit = { &google_protobuf_FieldDescriptorProto_submsgs[0], &google_protobuf_FieldDescriptorProto__fields[0], - UPB_SIZE(72, 112), 11, false, 255, + UPB_SIZE(72, 112), 11, false, 10, 255, }; static const upb_msglayout *const google_protobuf_OneofDescriptorProto_submsgs[1] = { @@ -3848,14 +4127,14 @@ static const upb_msglayout *const google_protobuf_OneofDescriptorProto_submsgs[1 }; static const upb_msglayout_field google_protobuf_OneofDescriptorProto__fields[2] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(12, 24), 2, 0, 11, 1}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(12, 24), 2, 0, 11, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_OneofDescriptorProto_msginit = { &google_protobuf_OneofDescriptorProto_submsgs[0], &google_protobuf_OneofDescriptorProto__fields[0], - UPB_SIZE(16, 32), 2, false, 255, + UPB_SIZE(16, 32), 2, false, 2, 255, }; static const upb_msglayout *const google_protobuf_EnumDescriptorProto_submsgs[3] = { @@ -3865,28 +4144,28 @@ static const upb_msglayout *const google_protobuf_EnumDescriptorProto_submsgs[3] }; static const upb_msglayout_field google_protobuf_EnumDescriptorProto__fields[5] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(16, 32), 0, 2, 11, 3}, - {3, UPB_SIZE(12, 24), 2, 1, 11, 1}, - {4, UPB_SIZE(20, 40), 0, 0, 11, 3}, - {5, UPB_SIZE(24, 48), 0, 0, 12, 3}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(16, 32), 0, 2, 11, _UPB_MODE_ARRAY}, + {3, UPB_SIZE(12, 24), 2, 1, 11, _UPB_MODE_SCALAR}, + {4, UPB_SIZE(20, 40), 0, 0, 11, _UPB_MODE_ARRAY}, + {5, UPB_SIZE(24, 48), 0, 0, 12, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_EnumDescriptorProto_msginit = { &google_protobuf_EnumDescriptorProto_submsgs[0], &google_protobuf_EnumDescriptorProto__fields[0], - UPB_SIZE(32, 64), 5, false, 255, + UPB_SIZE(32, 64), 5, false, 5, 255, }; static const upb_msglayout_field google_protobuf_EnumDescriptorProto_EnumReservedRange__fields[2] = { - {1, UPB_SIZE(4, 4), 1, 0, 5, 1}, - {2, UPB_SIZE(8, 8), 2, 0, 5, 1}, + {1, UPB_SIZE(4, 4), 1, 0, 5, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(8, 8), 2, 0, 5, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit = { NULL, &google_protobuf_EnumDescriptorProto_EnumReservedRange__fields[0], - UPB_SIZE(16, 16), 2, false, 255, + UPB_SIZE(16, 16), 2, false, 2, 255, }; static const upb_msglayout *const google_protobuf_EnumValueDescriptorProto_submsgs[1] = { @@ -3894,15 +4173,15 @@ static const upb_msglayout *const google_protobuf_EnumValueDescriptorProto_subms }; static const upb_msglayout_field google_protobuf_EnumValueDescriptorProto__fields[3] = { - {1, UPB_SIZE(8, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(4, 4), 2, 0, 5, 1}, - {3, UPB_SIZE(16, 24), 3, 0, 11, 1}, + {1, UPB_SIZE(8, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(4, 4), 2, 0, 5, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(16, 24), 3, 0, 11, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_EnumValueDescriptorProto_msginit = { &google_protobuf_EnumValueDescriptorProto_submsgs[0], &google_protobuf_EnumValueDescriptorProto__fields[0], - UPB_SIZE(24, 32), 3, false, 255, + UPB_SIZE(24, 32), 3, false, 3, 255, }; static const upb_msglayout *const google_protobuf_ServiceDescriptorProto_submsgs[2] = { @@ -3911,15 +4190,15 @@ static const upb_msglayout *const google_protobuf_ServiceDescriptorProto_submsgs }; static const upb_msglayout_field google_protobuf_ServiceDescriptorProto__fields[3] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(16, 32), 0, 0, 11, 3}, - {3, UPB_SIZE(12, 24), 2, 1, 11, 1}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(16, 32), 0, 0, 11, _UPB_MODE_ARRAY}, + {3, UPB_SIZE(12, 24), 2, 1, 11, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_ServiceDescriptorProto_msginit = { &google_protobuf_ServiceDescriptorProto_submsgs[0], &google_protobuf_ServiceDescriptorProto__fields[0], - UPB_SIZE(24, 48), 3, false, 255, + UPB_SIZE(24, 48), 3, false, 3, 255, }; static const upb_msglayout *const google_protobuf_MethodDescriptorProto_submsgs[1] = { @@ -3927,18 +4206,18 @@ static const upb_msglayout *const google_protobuf_MethodDescriptorProto_submsgs[ }; static const upb_msglayout_field google_protobuf_MethodDescriptorProto__fields[6] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(12, 24), 2, 0, 12, 1}, - {3, UPB_SIZE(20, 40), 3, 0, 12, 1}, - {4, UPB_SIZE(28, 56), 4, 0, 11, 1}, - {5, UPB_SIZE(1, 1), 5, 0, 8, 1}, - {6, UPB_SIZE(2, 2), 6, 0, 8, 1}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(12, 24), 2, 0, 12, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(20, 40), 3, 0, 12, _UPB_MODE_SCALAR}, + {4, UPB_SIZE(28, 56), 4, 0, 11, _UPB_MODE_SCALAR}, + {5, UPB_SIZE(1, 1), 5, 0, 8, _UPB_MODE_SCALAR}, + {6, UPB_SIZE(2, 2), 6, 0, 8, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_MethodDescriptorProto_msginit = { &google_protobuf_MethodDescriptorProto_submsgs[0], &google_protobuf_MethodDescriptorProto__fields[0], - UPB_SIZE(32, 64), 6, false, 255, + UPB_SIZE(32, 64), 6, false, 6, 255, }; static const upb_msglayout *const google_protobuf_FileOptions_submsgs[1] = { @@ -3946,33 +4225,33 @@ static const upb_msglayout *const google_protobuf_FileOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_FileOptions__fields[21] = { - {1, UPB_SIZE(20, 24), 1, 0, 12, 1}, - {8, UPB_SIZE(28, 40), 2, 0, 12, 1}, - {9, UPB_SIZE(4, 4), 3, 0, 14, 1}, - {10, UPB_SIZE(8, 8), 4, 0, 8, 1}, - {11, UPB_SIZE(36, 56), 5, 0, 12, 1}, - {16, UPB_SIZE(9, 9), 6, 0, 8, 1}, - {17, UPB_SIZE(10, 10), 7, 0, 8, 1}, - {18, UPB_SIZE(11, 11), 8, 0, 8, 1}, - {20, UPB_SIZE(12, 12), 9, 0, 8, 1}, - {23, UPB_SIZE(13, 13), 10, 0, 8, 1}, - {27, UPB_SIZE(14, 14), 11, 0, 8, 1}, - {31, UPB_SIZE(15, 15), 12, 0, 8, 1}, - {36, UPB_SIZE(44, 72), 13, 0, 12, 1}, - {37, UPB_SIZE(52, 88), 14, 0, 12, 1}, - {39, UPB_SIZE(60, 104), 15, 0, 12, 1}, - {40, UPB_SIZE(68, 120), 16, 0, 12, 1}, - {41, UPB_SIZE(76, 136), 17, 0, 12, 1}, - {42, UPB_SIZE(16, 16), 18, 0, 8, 1}, - {44, UPB_SIZE(84, 152), 19, 0, 12, 1}, - {45, UPB_SIZE(92, 168), 20, 0, 12, 1}, - {999, UPB_SIZE(100, 184), 0, 0, 11, 3}, + {1, UPB_SIZE(20, 24), 1, 0, 12, _UPB_MODE_SCALAR}, + {8, UPB_SIZE(28, 40), 2, 0, 12, _UPB_MODE_SCALAR}, + {9, UPB_SIZE(4, 4), 3, 0, 14, _UPB_MODE_SCALAR}, + {10, UPB_SIZE(8, 8), 4, 0, 8, _UPB_MODE_SCALAR}, + {11, UPB_SIZE(36, 56), 5, 0, 12, _UPB_MODE_SCALAR}, + {16, UPB_SIZE(9, 9), 6, 0, 8, _UPB_MODE_SCALAR}, + {17, UPB_SIZE(10, 10), 7, 0, 8, _UPB_MODE_SCALAR}, + {18, UPB_SIZE(11, 11), 8, 0, 8, _UPB_MODE_SCALAR}, + {20, UPB_SIZE(12, 12), 9, 0, 8, _UPB_MODE_SCALAR}, + {23, UPB_SIZE(13, 13), 10, 0, 8, _UPB_MODE_SCALAR}, + {27, UPB_SIZE(14, 14), 11, 0, 8, _UPB_MODE_SCALAR}, + {31, UPB_SIZE(15, 15), 12, 0, 8, _UPB_MODE_SCALAR}, + {36, UPB_SIZE(44, 72), 13, 0, 12, _UPB_MODE_SCALAR}, + {37, UPB_SIZE(52, 88), 14, 0, 12, _UPB_MODE_SCALAR}, + {39, UPB_SIZE(60, 104), 15, 0, 12, _UPB_MODE_SCALAR}, + {40, UPB_SIZE(68, 120), 16, 0, 12, _UPB_MODE_SCALAR}, + {41, UPB_SIZE(76, 136), 17, 0, 12, _UPB_MODE_SCALAR}, + {42, UPB_SIZE(16, 16), 18, 0, 8, _UPB_MODE_SCALAR}, + {44, UPB_SIZE(84, 152), 19, 0, 12, _UPB_MODE_SCALAR}, + {45, UPB_SIZE(92, 168), 20, 0, 12, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(100, 184), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_FileOptions_msginit = { &google_protobuf_FileOptions_submsgs[0], &google_protobuf_FileOptions__fields[0], - UPB_SIZE(104, 192), 21, false, 255, + UPB_SIZE(104, 192), 21, false, 1, 255, }; static const upb_msglayout *const google_protobuf_MessageOptions_submsgs[1] = { @@ -3980,17 +4259,17 @@ static const upb_msglayout *const google_protobuf_MessageOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_MessageOptions__fields[5] = { - {1, UPB_SIZE(1, 1), 1, 0, 8, 1}, - {2, UPB_SIZE(2, 2), 2, 0, 8, 1}, - {3, UPB_SIZE(3, 3), 3, 0, 8, 1}, - {7, UPB_SIZE(4, 4), 4, 0, 8, 1}, - {999, UPB_SIZE(8, 8), 0, 0, 11, 3}, + {1, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(2, 2), 2, 0, 8, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(3, 3), 3, 0, 8, _UPB_MODE_SCALAR}, + {7, UPB_SIZE(4, 4), 4, 0, 8, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(8, 8), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_MessageOptions_msginit = { &google_protobuf_MessageOptions_submsgs[0], &google_protobuf_MessageOptions__fields[0], - UPB_SIZE(16, 16), 5, false, 255, + UPB_SIZE(16, 16), 5, false, 3, 255, }; static const upb_msglayout *const google_protobuf_FieldOptions_submsgs[1] = { @@ -3998,19 +4277,19 @@ static const upb_msglayout *const google_protobuf_FieldOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_FieldOptions__fields[7] = { - {1, UPB_SIZE(4, 4), 1, 0, 14, 1}, - {2, UPB_SIZE(12, 12), 2, 0, 8, 1}, - {3, UPB_SIZE(13, 13), 3, 0, 8, 1}, - {5, UPB_SIZE(14, 14), 4, 0, 8, 1}, - {6, UPB_SIZE(8, 8), 5, 0, 14, 1}, - {10, UPB_SIZE(15, 15), 6, 0, 8, 1}, - {999, UPB_SIZE(16, 16), 0, 0, 11, 3}, + {1, UPB_SIZE(4, 4), 1, 0, 14, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(12, 12), 2, 0, 8, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(13, 13), 3, 0, 8, _UPB_MODE_SCALAR}, + {5, UPB_SIZE(14, 14), 4, 0, 8, _UPB_MODE_SCALAR}, + {6, UPB_SIZE(8, 8), 5, 0, 14, _UPB_MODE_SCALAR}, + {10, UPB_SIZE(15, 15), 6, 0, 8, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(16, 16), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_FieldOptions_msginit = { &google_protobuf_FieldOptions_submsgs[0], &google_protobuf_FieldOptions__fields[0], - UPB_SIZE(24, 24), 7, false, 255, + UPB_SIZE(24, 24), 7, false, 3, 255, }; static const upb_msglayout *const google_protobuf_OneofOptions_submsgs[1] = { @@ -4018,13 +4297,13 @@ static const upb_msglayout *const google_protobuf_OneofOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_OneofOptions__fields[1] = { - {999, UPB_SIZE(0, 0), 0, 0, 11, 3}, + {999, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_OneofOptions_msginit = { &google_protobuf_OneofOptions_submsgs[0], &google_protobuf_OneofOptions__fields[0], - UPB_SIZE(8, 8), 1, false, 255, + UPB_SIZE(8, 8), 1, false, 0, 255, }; static const upb_msglayout *const google_protobuf_EnumOptions_submsgs[1] = { @@ -4032,15 +4311,15 @@ static const upb_msglayout *const google_protobuf_EnumOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_EnumOptions__fields[3] = { - {2, UPB_SIZE(1, 1), 1, 0, 8, 1}, - {3, UPB_SIZE(2, 2), 2, 0, 8, 1}, - {999, UPB_SIZE(4, 8), 0, 0, 11, 3}, + {2, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(2, 2), 2, 0, 8, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(4, 8), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_EnumOptions_msginit = { &google_protobuf_EnumOptions_submsgs[0], &google_protobuf_EnumOptions__fields[0], - UPB_SIZE(8, 16), 3, false, 255, + UPB_SIZE(8, 16), 3, false, 0, 255, }; static const upb_msglayout *const google_protobuf_EnumValueOptions_submsgs[1] = { @@ -4048,14 +4327,14 @@ static const upb_msglayout *const google_protobuf_EnumValueOptions_submsgs[1] = }; static const upb_msglayout_field google_protobuf_EnumValueOptions__fields[2] = { - {1, UPB_SIZE(1, 1), 1, 0, 8, 1}, - {999, UPB_SIZE(4, 8), 0, 0, 11, 3}, + {1, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(4, 8), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_EnumValueOptions_msginit = { &google_protobuf_EnumValueOptions_submsgs[0], &google_protobuf_EnumValueOptions__fields[0], - UPB_SIZE(8, 16), 2, false, 255, + UPB_SIZE(8, 16), 2, false, 1, 255, }; static const upb_msglayout *const google_protobuf_ServiceOptions_submsgs[1] = { @@ -4063,14 +4342,14 @@ static const upb_msglayout *const google_protobuf_ServiceOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_ServiceOptions__fields[2] = { - {33, UPB_SIZE(1, 1), 1, 0, 8, 1}, - {999, UPB_SIZE(4, 8), 0, 0, 11, 3}, + {33, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(4, 8), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_ServiceOptions_msginit = { &google_protobuf_ServiceOptions_submsgs[0], &google_protobuf_ServiceOptions__fields[0], - UPB_SIZE(8, 16), 2, false, 255, + UPB_SIZE(8, 16), 2, false, 0, 255, }; static const upb_msglayout *const google_protobuf_MethodOptions_submsgs[1] = { @@ -4078,15 +4357,15 @@ static const upb_msglayout *const google_protobuf_MethodOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_MethodOptions__fields[3] = { - {33, UPB_SIZE(8, 8), 1, 0, 8, 1}, - {34, UPB_SIZE(4, 4), 2, 0, 14, 1}, - {999, UPB_SIZE(12, 16), 0, 0, 11, 3}, + {33, UPB_SIZE(8, 8), 1, 0, 8, _UPB_MODE_SCALAR}, + {34, UPB_SIZE(4, 4), 2, 0, 14, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(12, 16), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_MethodOptions_msginit = { &google_protobuf_MethodOptions_submsgs[0], &google_protobuf_MethodOptions__fields[0], - UPB_SIZE(16, 24), 3, false, 255, + UPB_SIZE(16, 24), 3, false, 0, 255, }; static const upb_msglayout *const google_protobuf_UninterpretedOption_submsgs[1] = { @@ -4094,30 +4373,30 @@ static const upb_msglayout *const google_protobuf_UninterpretedOption_submsgs[1] }; static const upb_msglayout_field google_protobuf_UninterpretedOption__fields[7] = { - {2, UPB_SIZE(56, 80), 0, 0, 11, 3}, - {3, UPB_SIZE(32, 32), 1, 0, 12, 1}, - {4, UPB_SIZE(8, 8), 2, 0, 4, 1}, - {5, UPB_SIZE(16, 16), 3, 0, 3, 1}, - {6, UPB_SIZE(24, 24), 4, 0, 1, 1}, - {7, UPB_SIZE(40, 48), 5, 0, 12, 1}, - {8, UPB_SIZE(48, 64), 6, 0, 12, 1}, + {2, UPB_SIZE(56, 80), 0, 0, 11, _UPB_MODE_ARRAY}, + {3, UPB_SIZE(32, 32), 1, 0, 12, _UPB_MODE_SCALAR}, + {4, UPB_SIZE(8, 8), 2, 0, 4, _UPB_MODE_SCALAR}, + {5, UPB_SIZE(16, 16), 3, 0, 3, _UPB_MODE_SCALAR}, + {6, UPB_SIZE(24, 24), 4, 0, 1, _UPB_MODE_SCALAR}, + {7, UPB_SIZE(40, 48), 5, 0, 12, _UPB_MODE_SCALAR}, + {8, UPB_SIZE(48, 64), 6, 0, 12, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_UninterpretedOption_msginit = { &google_protobuf_UninterpretedOption_submsgs[0], &google_protobuf_UninterpretedOption__fields[0], - UPB_SIZE(64, 96), 7, false, 255, + UPB_SIZE(64, 96), 7, false, 0, 255, }; static const upb_msglayout_field google_protobuf_UninterpretedOption_NamePart__fields[2] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 2}, - {2, UPB_SIZE(1, 1), 2, 0, 8, 2}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(1, 1), 2, 0, 8, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_UninterpretedOption_NamePart_msginit = { NULL, &google_protobuf_UninterpretedOption_NamePart__fields[0], - UPB_SIZE(16, 32), 2, false, 255, + UPB_SIZE(16, 32), 2, false, 2, 255, }; static const upb_msglayout *const google_protobuf_SourceCodeInfo_submsgs[1] = { @@ -4125,27 +4404,27 @@ static const upb_msglayout *const google_protobuf_SourceCodeInfo_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_SourceCodeInfo__fields[1] = { - {1, UPB_SIZE(0, 0), 0, 0, 11, 3}, + {1, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_SourceCodeInfo_msginit = { &google_protobuf_SourceCodeInfo_submsgs[0], &google_protobuf_SourceCodeInfo__fields[0], - UPB_SIZE(8, 8), 1, false, 255, + UPB_SIZE(8, 8), 1, false, 1, 255, }; static const upb_msglayout_field google_protobuf_SourceCodeInfo_Location__fields[5] = { - {1, UPB_SIZE(20, 40), 0, 0, 5, _UPB_LABEL_PACKED}, - {2, UPB_SIZE(24, 48), 0, 0, 5, _UPB_LABEL_PACKED}, - {3, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {4, UPB_SIZE(12, 24), 2, 0, 12, 1}, - {6, UPB_SIZE(28, 56), 0, 0, 12, 3}, + {1, UPB_SIZE(20, 40), 0, 0, 5, _UPB_MODE_ARRAY | _UPB_MODE_IS_PACKED}, + {2, UPB_SIZE(24, 48), 0, 0, 5, _UPB_MODE_ARRAY | _UPB_MODE_IS_PACKED}, + {3, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {4, UPB_SIZE(12, 24), 2, 0, 12, _UPB_MODE_SCALAR}, + {6, UPB_SIZE(28, 56), 0, 0, 12, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_SourceCodeInfo_Location_msginit = { NULL, &google_protobuf_SourceCodeInfo_Location__fields[0], - UPB_SIZE(32, 64), 5, false, 255, + UPB_SIZE(32, 64), 5, false, 4, 255, }; static const upb_msglayout *const google_protobuf_GeneratedCodeInfo_submsgs[1] = { @@ -4153,26 +4432,26 @@ static const upb_msglayout *const google_protobuf_GeneratedCodeInfo_submsgs[1] = }; static const upb_msglayout_field google_protobuf_GeneratedCodeInfo__fields[1] = { - {1, UPB_SIZE(0, 0), 0, 0, 11, 3}, + {1, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_GeneratedCodeInfo_msginit = { &google_protobuf_GeneratedCodeInfo_submsgs[0], &google_protobuf_GeneratedCodeInfo__fields[0], - UPB_SIZE(8, 8), 1, false, 255, + UPB_SIZE(8, 8), 1, false, 1, 255, }; static const upb_msglayout_field google_protobuf_GeneratedCodeInfo_Annotation__fields[4] = { - {1, UPB_SIZE(20, 32), 0, 0, 5, _UPB_LABEL_PACKED}, - {2, UPB_SIZE(12, 16), 1, 0, 12, 1}, - {3, UPB_SIZE(4, 4), 2, 0, 5, 1}, - {4, UPB_SIZE(8, 8), 3, 0, 5, 1}, + {1, UPB_SIZE(20, 32), 0, 0, 5, _UPB_MODE_ARRAY | _UPB_MODE_IS_PACKED}, + {2, UPB_SIZE(12, 16), 1, 0, 12, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(4, 4), 2, 0, 5, _UPB_MODE_SCALAR}, + {4, UPB_SIZE(8, 8), 3, 0, 5, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_GeneratedCodeInfo_Annotation_msginit = { NULL, &google_protobuf_GeneratedCodeInfo_Annotation__fields[0], - UPB_SIZE(24, 48), 4, false, 255, + UPB_SIZE(24, 48), 4, false, 4, 255, }; @@ -5552,13 +5831,44 @@ static int field_number_cmp(const void *p1, const void *p2) { return f1->number - f2->number; } -static void assign_layout_indices(const upb_msgdef *m, upb_msglayout_field *fields) { +static void assign_layout_indices(const upb_msgdef *m, upb_msglayout *l, + upb_msglayout_field *fields) { int i; int n = upb_msgdef_numfields(m); + int dense_below = 0; for (i = 0; i < n; i++) { upb_fielddef *f = (upb_fielddef*)upb_msgdef_itof(m, fields[i].number); UPB_ASSERT(f); f->layout_index = i; + if (i < UINT8_MAX && fields[i].number == i + 1 && + (i == 0 || fields[i-1].number == i)) { + dense_below = i + 1; + } + } + l->dense_below = dense_below; +} + +static void fill_fieldlayout(upb_msglayout_field *field, const upb_fielddef *f) { + field->number = upb_fielddef_number(f); + field->descriptortype = upb_fielddef_descriptortype(f); + + if (field->descriptortype == UPB_DTYPE_STRING && + f->file->syntax == UPB_SYNTAX_PROTO2) { + /* See TableDescriptorType() in upbc/generator.cc for details and + * rationale. */ + field->descriptortype = UPB_DTYPE_BYTES; + } + + if (upb_fielddef_ismap(f)) { + field->mode = _UPB_MODE_MAP; + } else if (upb_fielddef_isseq(f)) { + field->mode = _UPB_MODE_ARRAY; + } else { + field->mode = _UPB_MODE_SCALAR; + } + + if (upb_fielddef_packed(f)) { + field->mode |= _UPB_MODE_IS_PACKED; } } @@ -5603,8 +5913,8 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) { const upb_fielddef *val = upb_msgdef_itof(m, 2); fields[0].number = 1; fields[1].number = 2; - fields[0].label = UPB_LABEL_OPTIONAL; - fields[1].label = UPB_LABEL_OPTIONAL; + fields[0].mode = _UPB_MODE_SCALAR; + fields[1].mode = _UPB_MODE_SCALAR; fields[0].presence = 0; fields[1].presence = 0; fields[0].descriptortype = upb_fielddef_descriptortype(key); @@ -5640,22 +5950,7 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) { upb_fielddef* f = upb_msg_iter_field(&it); upb_msglayout_field *field = &fields[upb_fielddef_index(f)]; - field->number = upb_fielddef_number(f); - field->descriptortype = upb_fielddef_descriptortype(f); - field->label = upb_fielddef_label(f); - - if (field->descriptortype == UPB_DTYPE_STRING && - f->file->syntax == UPB_SYNTAX_PROTO2) { - /* See TableDescriptorType() in upbc/generator.cc for details and - * rationale. */ - field->descriptortype = UPB_DTYPE_BYTES; - } - - if (upb_fielddef_ismap(f)) { - field->label = _UPB_LABEL_MAP; - } else if (upb_fielddef_packed(f)) { - field->label = _UPB_LABEL_PACKED; - } + fill_fieldlayout(field, f); if (upb_fielddef_issubmsg(f)) { const upb_msgdef *subm = upb_fielddef_msgsubdef(f); @@ -5731,7 +6026,7 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) { /* Sort fields by number. */ qsort(fields, upb_msgdef_numfields(m), sizeof(*fields), field_number_cmp); - assign_layout_indices(m, fields); + assign_layout_indices(m, l, fields); } static char *strviewdup(symtab_addctx *ctx, upb_strview view) { @@ -6441,13 +6736,18 @@ static void build_filedef( const upb_strview* strs; size_t i, n; - count_types_in_file(file_proto, file); + file->symtab = ctx->symtab; + /* One pass to count and allocate. */ + file->msg_count = 0; + file->enum_count = 0; + file->ext_count = 0; + count_types_in_file(file_proto, file); file->msgs = symtab_alloc(ctx, sizeof(*file->msgs) * file->msg_count); file->enums = symtab_alloc(ctx, sizeof(*file->enums) * file->enum_count); file->exts = symtab_alloc(ctx, sizeof(*file->exts) * file->ext_count); - /* We increment these as defs are added. */ + /* In the second pass we increment these as defs are added. */ file->msg_count = 0; file->enum_count = 0; file->ext_count = 0; @@ -6576,41 +6876,43 @@ static void remove_filedef(upb_symtab *s, upb_filedef *file) { static const upb_filedef *_upb_symtab_addfile( upb_symtab *s, const google_protobuf_FileDescriptorProto *file_proto, const upb_msglayout **layouts, upb_status *status) { - upb_arena *file_arena = upb_arena_new(); - upb_filedef *file; symtab_addctx ctx; + upb_strview name = google_protobuf_FileDescriptorProto_name(file_proto); - if (!file_arena) return NULL; - - file = upb_arena_malloc(file_arena, sizeof(*file)); - if (!file) goto done; + if (upb_strtable_lookup2(&s->files, name.data, name.size, NULL)) { + upb_status_seterrf(status, "duplicate file name (%.*s)", + UPB_STRVIEW_ARGS(name)); + return NULL; + } - ctx.file = file; ctx.symtab = s; - ctx.arena = file_arena; ctx.layouts = layouts; ctx.status = status; + ctx.file = NULL; + ctx.arena = upb_arena_new(); - file->msg_count = 0; - file->enum_count = 0; - file->ext_count = 0; - file->symtab = s; + if (!ctx.arena) { + upb_status_setoom(status); + return NULL; + } if (UPB_UNLIKELY(UPB_SETJMP(ctx.err))) { UPB_ASSERT(!upb_ok(status)); - remove_filedef(s, file); - file = NULL; + if (ctx.file) { + remove_filedef(s, ctx.file); + ctx.file = NULL; + } } else { - build_filedef(&ctx, file, file_proto); - upb_strtable_insert(&s->files, file->name, strlen(file->name), - upb_value_constptr(file), ctx.arena); + ctx.file = symtab_alloc(&ctx, sizeof(*ctx.file)); + build_filedef(&ctx, ctx.file, file_proto); + upb_strtable_insert(&s->files, name.data, name.size, + upb_value_constptr(ctx.file), ctx.arena); UPB_ASSERT(upb_ok(status)); - upb_arena_fuse(s->arena, file_arena); + upb_arena_fuse(s->arena, ctx.arena); } -done: - upb_arena_free(file_arena); - return file; + upb_arena_free(ctx.arena); + return ctx.file; } const upb_filedef *upb_symtab_addfile( @@ -6643,7 +6945,8 @@ bool _upb_symtab_loaddefinit(upb_symtab *s, const upb_def_init *init) { } file = google_protobuf_FileDescriptorProto_parse_ex( - init->descriptor.data, init->descriptor.size, arena, UPB_DECODE_ALIAS); + init->descriptor.data, init->descriptor.size, NULL, UPB_DECODE_ALIAS, + arena); s->bytes_loaded += init->descriptor.size; if (!file) { @@ -8773,7 +9076,17 @@ static void jsonenc_double(jsonenc *e, const char *fmt, double val) { } else if (val != val) { jsonenc_putstr(e, "\"NaN\""); } else { + char *p = e->ptr; jsonenc_printf(e, fmt, val); + + /* printf() is dependent on locales; sadly there is no easy and portable way + * to avoid this. This little post-processing step will translate 1,2 -> 1.2 + * since JSON needs the latter. Arguably a hack, but it is simple and the + * alternatives are far more complicated, platform-dependent, and/or larger + * in code size. */ + for (char *end = e->ptr; p < end; p++) { + if (*p == ',') *p = '.'; + } } } diff --git a/php/ext/google/protobuf/php-upb.h b/php/ext/google/protobuf/php-upb.h index 77a87c7691..8883668b79 100644 --- a/php/ext/google/protobuf/php-upb.h +++ b/php/ext/google/protobuf/php-upb.h @@ -168,7 +168,7 @@ /* Configure whether fasttable is switched on or not. *************************/ -#if defined(__has_attribute) +#ifdef __has_attribute #define UPB_HAS_ATTRIBUTE(x) __has_attribute(x) #else #define UPB_HAS_ATTRIBUTE(x) 0 @@ -636,6 +636,48 @@ void upb_msg_addunknown(upb_msg *msg, const char *data, size_t len, /* Returns a reference to the message's unknown data. */ const char *upb_msg_getunknown(const upb_msg *msg, size_t *len); +/** upb_extreg *******************************************************************/ + +/* Extension registry: a dynamic data structure that stores a map of: + * (upb_msglayout, number) -> extension info + * + * upb_decode() uses upb_extreg to look up extensions while parsing binary + * format. + * + * upb_extreg is part of the mini-table (msglayout) family of objects. Like all + * mini-table objects, it is suitable for reflection-less builds that do not + * want to expose names into the binary. + * + * Unlike most mini-table types, upb_extreg requires dynamic memory allocation + * and dynamic initialization: + * * If reflection is being used, then upb_symtab will construct an appropriate + * upb_extreg automatically. + * * For a mini-table only build, the user must manually construct the + * upb_extreg and populate it with all of the extensions the user cares about. + * * A third alternative is to manually unpack relevant extensions after the + * main parse is complete, similar to how Any works. This is perhaps the + * nicest solution from the perspective of reducing dependencies, avoiding + * dynamic memory allocation, and avoiding the need to parse uninteresting + * extensions. The downsides are: + * (1) parse errors are not caught during the main parse + * (2) the CPU hit of parsing comes during access, which could cause an + * undesirable stutter in application performance. + * + * Users cannot directly get or put into this map. Users can only add the + * extensions from a generated module and pass the extension registry to the + * binary decoder. + * + * A upb_symtab provides a upb_extreg, so any users who use reflection do not + * need to populate a upb_extreg directly. + */ + +struct upb_extreg; +typedef struct upb_extreg upb_extreg; + +/* Creates a upb_extreg in the given arena. The arena must outlive any use of + * the extreg. */ +upb_extreg *upb_extreg_new(upb_arena *arena); + #ifdef __cplusplus } /* extern "C" */ #endif @@ -657,12 +699,13 @@ enum { #define UPB_DECODE_MAXDEPTH(depth) ((depth) << 16) bool _upb_decode(const char *buf, size_t size, upb_msg *msg, - const upb_msglayout *l, upb_arena *arena, int options); + const upb_msglayout *l, const upb_extreg *extreg, int options, + upb_arena *arena); UPB_INLINE bool upb_decode(const char *buf, size_t size, upb_msg *msg, const upb_msglayout *l, upb_arena *arena) { - return _upb_decode(buf, size, msg, l, arena, 0); + return _upb_decode(buf, size, msg, l, NULL, 0, arena); } #ifdef __cplusplus @@ -1047,9 +1090,34 @@ typedef struct { int16_t presence; /* If >0, hasbit_index. If <0, ~oneof_index. */ uint16_t submsg_index; /* undefined if descriptortype != MESSAGE or GROUP. */ uint8_t descriptortype; - uint8_t label; /* google.protobuf.Label or _UPB_LABEL_* above. */ + int8_t mode; /* upb_fieldmode, with flags from upb_labelflags */ } upb_msglayout_field; +typedef enum { + _UPB_MODE_MAP = 0, + _UPB_MODE_ARRAY = 1, + _UPB_MODE_SCALAR = 2, +} upb_fieldmode; + +/* Extra flags on the mode field. */ +enum upb_labelflags { + _UPB_MODE_IS_PACKED = 4, +}; + +UPB_INLINE upb_fieldmode _upb_getmode(const upb_msglayout_field *field) { + return (upb_fieldmode)(field->mode & 3); +} + +UPB_INLINE bool _upb_repeated_or_map(const upb_msglayout_field *field) { + /* This works because upb_fieldmode has no value 3. */ + return !(field->mode & _UPB_MODE_SCALAR); +} + +UPB_INLINE bool _upb_issubmsg(const upb_msglayout_field *field) { + return field->descriptortype == UPB_DTYPE_MESSAGE || + field->descriptortype == UPB_DTYPE_GROUP; +} + struct upb_decstate; struct upb_msglayout; @@ -1070,27 +1138,65 @@ struct upb_msglayout { uint16_t size; uint16_t field_count; bool extendable; + uint8_t dense_below; uint8_t table_mask; /* To constant-initialize the tables of variable length, we need a flexible * array member, and we need to compile in C99 mode. */ _upb_fasttable_entry fasttable[]; }; +typedef struct { + upb_msglayout_field field; + const upb_msglayout *extendee; + const upb_msglayout *submsg; /* NULL for non-submessage fields. */ +} upb_msglayout_ext; + +/** upb_extreg ****************************************************************/ + +/* Adds the given extension info for message type |l| and field number |num| + * into the registry. Returns false if this message type and field number were + * already in the map, or if memory allocation fails. */ +bool _upb_extreg_add(upb_extreg *r, const upb_msglayout_ext *e, size_t count); + +/* Looks up the extension (if any) defined for message type |l| and field + * number |num|. If an extension was found, copies the field info into |*ext| + * and returns true. Otherwise returns false. */ +const upb_msglayout_field *_upb_extreg_get(const upb_extreg *r, + const upb_msglayout *l, + uint32_t num); + /** upb_msg *******************************************************************/ -/* Internal members of a upb_msg. We can change this without breaking binary - * compatibility. We put these before the user's data. The user's upb_msg* - * points after the upb_msg_internal. */ +/* Internal members of a upb_msg that track unknown fields and/or extensions. + * We can change this without breaking binary compatibility. We put these + * before the user's data. The user's upb_msg* points after the + * upb_msg_internal. */ typedef struct { - uint32_t len; + /* Total size of this structure, including the data that follows. + * Must be aligned to 8, which is alignof(upb_msg_ext) */ uint32_t size; - /* Data follows. */ -} upb_msg_unknowndata; -/* Used when a message is not extendable. */ + /* Offsets relative to the beginning of this structure. + * + * Unknown data grows forward from the beginning to unknown_end. + * Extension data grows backward from size to ext_begin. + * When the two meet, we're out of data and have to realloc. + * + * If we imagine that the final member of this struct is: + * char data[size - overhead]; // overhead = sizeof(upb_msg_internaldata) + * + * Then we have: + * unknown data: data[0 .. (unknown_end - overhead)] + * extensions data: data[(ext_begin - overhead) .. (size - overhead)] */ + uint32_t unknown_end; + uint32_t ext_begin; + /* Data follows, as if there were an array: + * char data[size - sizeof(upb_msg_internaldata)]; */ +} upb_msg_internaldata; + typedef struct { - upb_msg_unknowndata *unknown; + upb_msg_internaldata *internal; } upb_msg_internal; /* Maps upb_fieldtype_t -> memory size. */ @@ -1129,6 +1235,35 @@ void _upb_msg_discardunknown_shallow(upb_msg *msg); bool _upb_msg_addunknown(upb_msg *msg, const char *data, size_t len, upb_arena *arena); +/** upb_msg_ext ***************************************************************/ + +/* The internal representation of an extension is self-describing: it contains + * enough information that we can serialize it to binary format without needing + * to look it up in a registry. */ +typedef struct { + const upb_msglayout_ext *ext; + union { + upb_strview str; + void *ptr; + double dbl; + char scalar_data[8]; + } data; +} upb_msg_ext; + +/* Adds the given extension data to the given message. The returned extension will + * have its "ext" member initialized according to |ext|. */ +upb_msg_ext *_upb_msg_getorcreateext(upb_msg *msg, const upb_msglayout_ext *ext, + upb_arena *arena); + +/* Returns an array of extensions for this message. Note: the array is + * ordered in reverse relative to the order of creation. */ +const upb_msg_ext *_upb_msg_getexts(const upb_msg *msg, size_t *count); + +/* Returns an extension for the given field number, or NULL if no extension + * exists for this field number. */ +const upb_msg_ext *_upb_msg_getext(const upb_msg *msg, + const upb_msglayout_ext *ext); + /** Hasbit access *************************************************************/ UPB_INLINE bool _upb_hasbit(const upb_msg *msg, size_t idx) { @@ -1192,14 +1327,6 @@ UPB_INLINE bool _upb_has_submsg_nohasbit(const upb_msg *msg, size_t ofs) { return *UPB_PTR_AT(msg, ofs, const upb_msg*) != NULL; } -UPB_INLINE bool _upb_isrepeated(const upb_msglayout_field *field) { - return (field->label & 3) == UPB_LABEL_REPEATED; -} - -UPB_INLINE bool _upb_repeated_or_map(const upb_msglayout_field *field) { - return field->label >= UPB_LABEL_REPEATED; -} - /** upb_array *****************************************************************/ /* Our internal representation for repeated fields. */ @@ -2121,13 +2248,19 @@ UPB_INLINE google_protobuf_FileDescriptorSet *google_protobuf_FileDescriptorSet_ UPB_INLINE google_protobuf_FileDescriptorSet *google_protobuf_FileDescriptorSet_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_FileDescriptorSet *ret = google_protobuf_FileDescriptorSet_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_FileDescriptorSet_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_FileDescriptorSet_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_FileDescriptorSet *google_protobuf_FileDescriptorSet_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_FileDescriptorSet *ret = google_protobuf_FileDescriptorSet_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_FileDescriptorSet_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_FileDescriptorSet_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_FileDescriptorSet_serialize(const google_protobuf_FileDescriptorSet *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_FileDescriptorSet_msginit, arena, len); @@ -2158,13 +2291,19 @@ UPB_INLINE google_protobuf_FileDescriptorProto *google_protobuf_FileDescriptorPr UPB_INLINE google_protobuf_FileDescriptorProto *google_protobuf_FileDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_FileDescriptorProto *ret = google_protobuf_FileDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_FileDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_FileDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_FileDescriptorProto *google_protobuf_FileDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_FileDescriptorProto *ret = google_protobuf_FileDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_FileDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_FileDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_FileDescriptorProto_serialize(const google_protobuf_FileDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_FileDescriptorProto_msginit, arena, len); @@ -2321,13 +2460,19 @@ UPB_INLINE google_protobuf_DescriptorProto *google_protobuf_DescriptorProto_new( UPB_INLINE google_protobuf_DescriptorProto *google_protobuf_DescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_DescriptorProto *ret = google_protobuf_DescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_DescriptorProto *google_protobuf_DescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_DescriptorProto *ret = google_protobuf_DescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_DescriptorProto_serialize(const google_protobuf_DescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_DescriptorProto_msginit, arena, len); @@ -2480,13 +2625,19 @@ UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange *google_protobuf_Descr UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange *google_protobuf_DescriptorProto_ExtensionRange_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_DescriptorProto_ExtensionRange *ret = google_protobuf_DescriptorProto_ExtensionRange_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ExtensionRange_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ExtensionRange_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange *google_protobuf_DescriptorProto_ExtensionRange_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_DescriptorProto_ExtensionRange *ret = google_protobuf_DescriptorProto_ExtensionRange_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ExtensionRange_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ExtensionRange_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_DescriptorProto_ExtensionRange_serialize(const google_protobuf_DescriptorProto_ExtensionRange *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_DescriptorProto_ExtensionRange_msginit, arena, len); @@ -2529,13 +2680,19 @@ UPB_INLINE google_protobuf_DescriptorProto_ReservedRange *google_protobuf_Descri UPB_INLINE google_protobuf_DescriptorProto_ReservedRange *google_protobuf_DescriptorProto_ReservedRange_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_DescriptorProto_ReservedRange *ret = google_protobuf_DescriptorProto_ReservedRange_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ReservedRange_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ReservedRange_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_DescriptorProto_ReservedRange *google_protobuf_DescriptorProto_ReservedRange_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_DescriptorProto_ReservedRange *ret = google_protobuf_DescriptorProto_ReservedRange_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ReservedRange_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ReservedRange_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_DescriptorProto_ReservedRange_serialize(const google_protobuf_DescriptorProto_ReservedRange *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_DescriptorProto_ReservedRange_msginit, arena, len); @@ -2563,13 +2720,19 @@ UPB_INLINE google_protobuf_ExtensionRangeOptions *google_protobuf_ExtensionRange UPB_INLINE google_protobuf_ExtensionRangeOptions *google_protobuf_ExtensionRangeOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_ExtensionRangeOptions *ret = google_protobuf_ExtensionRangeOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_ExtensionRangeOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_ExtensionRangeOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_ExtensionRangeOptions *google_protobuf_ExtensionRangeOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_ExtensionRangeOptions *ret = google_protobuf_ExtensionRangeOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_ExtensionRangeOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_ExtensionRangeOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_ExtensionRangeOptions_serialize(const google_protobuf_ExtensionRangeOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_ExtensionRangeOptions_msginit, arena, len); @@ -2600,13 +2763,19 @@ UPB_INLINE google_protobuf_FieldDescriptorProto *google_protobuf_FieldDescriptor UPB_INLINE google_protobuf_FieldDescriptorProto *google_protobuf_FieldDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_FieldDescriptorProto *ret = google_protobuf_FieldDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_FieldDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_FieldDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_FieldDescriptorProto *google_protobuf_FieldDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_FieldDescriptorProto *ret = google_protobuf_FieldDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_FieldDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_FieldDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_FieldDescriptorProto_serialize(const google_protobuf_FieldDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_FieldDescriptorProto_msginit, arena, len); @@ -2697,13 +2866,19 @@ UPB_INLINE google_protobuf_OneofDescriptorProto *google_protobuf_OneofDescriptor UPB_INLINE google_protobuf_OneofDescriptorProto *google_protobuf_OneofDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_OneofDescriptorProto *ret = google_protobuf_OneofDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_OneofDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_OneofDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_OneofDescriptorProto *google_protobuf_OneofDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_OneofDescriptorProto *ret = google_protobuf_OneofDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_OneofDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_OneofDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_OneofDescriptorProto_serialize(const google_protobuf_OneofDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_OneofDescriptorProto_msginit, arena, len); @@ -2740,13 +2915,19 @@ UPB_INLINE google_protobuf_EnumDescriptorProto *google_protobuf_EnumDescriptorPr UPB_INLINE google_protobuf_EnumDescriptorProto *google_protobuf_EnumDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_EnumDescriptorProto *ret = google_protobuf_EnumDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_EnumDescriptorProto *google_protobuf_EnumDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_EnumDescriptorProto *ret = google_protobuf_EnumDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_EnumDescriptorProto_serialize(const google_protobuf_EnumDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_EnumDescriptorProto_msginit, arena, len); @@ -2824,13 +3005,19 @@ UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange *google_protobu UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange *google_protobuf_EnumDescriptorProto_EnumReservedRange_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_EnumDescriptorProto_EnumReservedRange *ret = google_protobuf_EnumDescriptorProto_EnumReservedRange_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange *google_protobuf_EnumDescriptorProto_EnumReservedRange_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_EnumDescriptorProto_EnumReservedRange *ret = google_protobuf_EnumDescriptorProto_EnumReservedRange_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_EnumDescriptorProto_EnumReservedRange_serialize(const google_protobuf_EnumDescriptorProto_EnumReservedRange *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit, arena, len); @@ -2858,13 +3045,19 @@ UPB_INLINE google_protobuf_EnumValueDescriptorProto *google_protobuf_EnumValueDe UPB_INLINE google_protobuf_EnumValueDescriptorProto *google_protobuf_EnumValueDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_EnumValueDescriptorProto *ret = google_protobuf_EnumValueDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_EnumValueDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_EnumValueDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_EnumValueDescriptorProto *google_protobuf_EnumValueDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_EnumValueDescriptorProto *ret = google_protobuf_EnumValueDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_EnumValueDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_EnumValueDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_EnumValueDescriptorProto_serialize(const google_protobuf_EnumValueDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_EnumValueDescriptorProto_msginit, arena, len); @@ -2907,13 +3100,19 @@ UPB_INLINE google_protobuf_ServiceDescriptorProto *google_protobuf_ServiceDescri UPB_INLINE google_protobuf_ServiceDescriptorProto *google_protobuf_ServiceDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_ServiceDescriptorProto *ret = google_protobuf_ServiceDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_ServiceDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_ServiceDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_ServiceDescriptorProto *google_protobuf_ServiceDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_ServiceDescriptorProto *ret = google_protobuf_ServiceDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_ServiceDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_ServiceDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_ServiceDescriptorProto_serialize(const google_protobuf_ServiceDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_ServiceDescriptorProto_msginit, arena, len); @@ -2965,13 +3164,19 @@ UPB_INLINE google_protobuf_MethodDescriptorProto *google_protobuf_MethodDescript UPB_INLINE google_protobuf_MethodDescriptorProto *google_protobuf_MethodDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_MethodDescriptorProto *ret = google_protobuf_MethodDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_MethodDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_MethodDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_MethodDescriptorProto *google_protobuf_MethodDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_MethodDescriptorProto *ret = google_protobuf_MethodDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_MethodDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_MethodDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_MethodDescriptorProto_serialize(const google_protobuf_MethodDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_MethodDescriptorProto_msginit, arena, len); @@ -3032,13 +3237,19 @@ UPB_INLINE google_protobuf_FileOptions *google_protobuf_FileOptions_new(upb_aren UPB_INLINE google_protobuf_FileOptions *google_protobuf_FileOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_FileOptions *ret = google_protobuf_FileOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_FileOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_FileOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_FileOptions *google_protobuf_FileOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_FileOptions *ret = google_protobuf_FileOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_FileOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_FileOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_FileOptions_serialize(const google_protobuf_FileOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_FileOptions_msginit, arena, len); @@ -3189,13 +3400,19 @@ UPB_INLINE google_protobuf_MessageOptions *google_protobuf_MessageOptions_new(up UPB_INLINE google_protobuf_MessageOptions *google_protobuf_MessageOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_MessageOptions *ret = google_protobuf_MessageOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_MessageOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_MessageOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_MessageOptions *google_protobuf_MessageOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_MessageOptions *ret = google_protobuf_MessageOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_MessageOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_MessageOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_MessageOptions_serialize(const google_protobuf_MessageOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_MessageOptions_msginit, arena, len); @@ -3250,13 +3467,19 @@ UPB_INLINE google_protobuf_FieldOptions *google_protobuf_FieldOptions_new(upb_ar UPB_INLINE google_protobuf_FieldOptions *google_protobuf_FieldOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_FieldOptions *ret = google_protobuf_FieldOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_FieldOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_FieldOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_FieldOptions *google_protobuf_FieldOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_FieldOptions *ret = google_protobuf_FieldOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_FieldOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_FieldOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_FieldOptions_serialize(const google_protobuf_FieldOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_FieldOptions_msginit, arena, len); @@ -3323,13 +3546,19 @@ UPB_INLINE google_protobuf_OneofOptions *google_protobuf_OneofOptions_new(upb_ar UPB_INLINE google_protobuf_OneofOptions *google_protobuf_OneofOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_OneofOptions *ret = google_protobuf_OneofOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_OneofOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_OneofOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_OneofOptions *google_protobuf_OneofOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_OneofOptions *ret = google_protobuf_OneofOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_OneofOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_OneofOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_OneofOptions_serialize(const google_protobuf_OneofOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_OneofOptions_msginit, arena, len); @@ -3360,13 +3589,19 @@ UPB_INLINE google_protobuf_EnumOptions *google_protobuf_EnumOptions_new(upb_aren UPB_INLINE google_protobuf_EnumOptions *google_protobuf_EnumOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_EnumOptions *ret = google_protobuf_EnumOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_EnumOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_EnumOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_EnumOptions *google_protobuf_EnumOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_EnumOptions *ret = google_protobuf_EnumOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_EnumOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_EnumOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_EnumOptions_serialize(const google_protobuf_EnumOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_EnumOptions_msginit, arena, len); @@ -3409,13 +3644,19 @@ UPB_INLINE google_protobuf_EnumValueOptions *google_protobuf_EnumValueOptions_ne UPB_INLINE google_protobuf_EnumValueOptions *google_protobuf_EnumValueOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_EnumValueOptions *ret = google_protobuf_EnumValueOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_EnumValueOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_EnumValueOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_EnumValueOptions *google_protobuf_EnumValueOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_EnumValueOptions *ret = google_protobuf_EnumValueOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_EnumValueOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_EnumValueOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_EnumValueOptions_serialize(const google_protobuf_EnumValueOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_EnumValueOptions_msginit, arena, len); @@ -3452,13 +3693,19 @@ UPB_INLINE google_protobuf_ServiceOptions *google_protobuf_ServiceOptions_new(up UPB_INLINE google_protobuf_ServiceOptions *google_protobuf_ServiceOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_ServiceOptions *ret = google_protobuf_ServiceOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_ServiceOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_ServiceOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_ServiceOptions *google_protobuf_ServiceOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_ServiceOptions *ret = google_protobuf_ServiceOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_ServiceOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_ServiceOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_ServiceOptions_serialize(const google_protobuf_ServiceOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_ServiceOptions_msginit, arena, len); @@ -3495,13 +3742,19 @@ UPB_INLINE google_protobuf_MethodOptions *google_protobuf_MethodOptions_new(upb_ UPB_INLINE google_protobuf_MethodOptions *google_protobuf_MethodOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_MethodOptions *ret = google_protobuf_MethodOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_MethodOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_MethodOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_MethodOptions *google_protobuf_MethodOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_MethodOptions *ret = google_protobuf_MethodOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_MethodOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_MethodOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_MethodOptions_serialize(const google_protobuf_MethodOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_MethodOptions_msginit, arena, len); @@ -3544,13 +3797,19 @@ UPB_INLINE google_protobuf_UninterpretedOption *google_protobuf_UninterpretedOpt UPB_INLINE google_protobuf_UninterpretedOption *google_protobuf_UninterpretedOption_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_UninterpretedOption *ret = google_protobuf_UninterpretedOption_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_UninterpretedOption *google_protobuf_UninterpretedOption_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_UninterpretedOption *ret = google_protobuf_UninterpretedOption_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_UninterpretedOption_serialize(const google_protobuf_UninterpretedOption *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_UninterpretedOption_msginit, arena, len); @@ -3617,13 +3876,19 @@ UPB_INLINE google_protobuf_UninterpretedOption_NamePart *google_protobuf_Uninter UPB_INLINE google_protobuf_UninterpretedOption_NamePart *google_protobuf_UninterpretedOption_NamePart_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_UninterpretedOption_NamePart *ret = google_protobuf_UninterpretedOption_NamePart_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_NamePart_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_NamePart_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_UninterpretedOption_NamePart *google_protobuf_UninterpretedOption_NamePart_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_UninterpretedOption_NamePart *ret = google_protobuf_UninterpretedOption_NamePart_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_NamePart_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_NamePart_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_UninterpretedOption_NamePart_serialize(const google_protobuf_UninterpretedOption_NamePart *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_UninterpretedOption_NamePart_msginit, arena, len); @@ -3651,13 +3916,19 @@ UPB_INLINE google_protobuf_SourceCodeInfo *google_protobuf_SourceCodeInfo_new(up UPB_INLINE google_protobuf_SourceCodeInfo *google_protobuf_SourceCodeInfo_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_SourceCodeInfo *ret = google_protobuf_SourceCodeInfo_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_SourceCodeInfo *google_protobuf_SourceCodeInfo_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_SourceCodeInfo *ret = google_protobuf_SourceCodeInfo_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_SourceCodeInfo_serialize(const google_protobuf_SourceCodeInfo *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_SourceCodeInfo_msginit, arena, len); @@ -3688,13 +3959,19 @@ UPB_INLINE google_protobuf_SourceCodeInfo_Location *google_protobuf_SourceCodeIn UPB_INLINE google_protobuf_SourceCodeInfo_Location *google_protobuf_SourceCodeInfo_Location_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_SourceCodeInfo_Location *ret = google_protobuf_SourceCodeInfo_Location_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_Location_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_Location_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_SourceCodeInfo_Location *google_protobuf_SourceCodeInfo_Location_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_SourceCodeInfo_Location *ret = google_protobuf_SourceCodeInfo_Location_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_Location_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_Location_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_SourceCodeInfo_Location_serialize(const google_protobuf_SourceCodeInfo_Location *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_SourceCodeInfo_Location_msginit, arena, len); @@ -3755,13 +4032,19 @@ UPB_INLINE google_protobuf_GeneratedCodeInfo *google_protobuf_GeneratedCodeInfo_ UPB_INLINE google_protobuf_GeneratedCodeInfo *google_protobuf_GeneratedCodeInfo_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_GeneratedCodeInfo *ret = google_protobuf_GeneratedCodeInfo_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_GeneratedCodeInfo *google_protobuf_GeneratedCodeInfo_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_GeneratedCodeInfo *ret = google_protobuf_GeneratedCodeInfo_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_GeneratedCodeInfo_serialize(const google_protobuf_GeneratedCodeInfo *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_GeneratedCodeInfo_msginit, arena, len); @@ -3792,13 +4075,19 @@ UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation *google_protobuf_Generat UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation *google_protobuf_GeneratedCodeInfo_Annotation_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_GeneratedCodeInfo_Annotation *ret = google_protobuf_GeneratedCodeInfo_Annotation_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_Annotation_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_Annotation_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation *google_protobuf_GeneratedCodeInfo_Annotation_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_GeneratedCodeInfo_Annotation *ret = google_protobuf_GeneratedCodeInfo_Annotation_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_Annotation_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_Annotation_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_GeneratedCodeInfo_Annotation_serialize(const google_protobuf_GeneratedCodeInfo_Annotation *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_GeneratedCodeInfo_Annotation_msginit, arena, len); diff --git a/php/generate_test_protos.sh b/php/generate_test_protos.sh index e86ca07a68..8607499c8e 100755 --- a/php/generate_test_protos.sh +++ b/php/generate_test_protos.sh @@ -1,19 +1,19 @@ #!/bin/bash -set -e +set -ex cd `dirname $0` -./prepare_c_extension.sh - if ../src/protoc --help > /dev/null; then PROTOC=src/protoc else + # Bazel seems to be creating a problematic symlink in + # _build/out/external/com_google_protobuf, so we remove the _build directory + # before building protoc. (cd .. && bazel build -c opt :protoc) PROTOC=bazel-bin/protoc fi - if [[ -d tmp && -z $(find tests/proto ../$PROTOC -newer tmp) ]]; then # Generated protos are already present and up to date, so we can skip protoc. # diff --git a/php/prepare_c_extension.sh b/php/prepare_c_extension.sh deleted file mode 100755 index 1b6b9f1dae..0000000000 --- a/php/prepare_c_extension.sh +++ /dev/null @@ -1,20 +0,0 @@ - -cd $(dirname $0) - -if [[ -f ext/google/protobuf/third_party/wyhash/wyhash.h && -z $(find ../third_party/wyhash -newer ext/google/protobuf/third_party) ]]; then - # Generated protos are already present and up to date, so we can skip protoc. - # - # Protoc is very fast, but sometimes it is not available (like if we haven't - # built it in Docker). Skipping it helps us proceed in this case. - echo "wyhash is up to date, skipping." - exit 0 -fi - -# wyhash has to live in the base third_party directory. -# We copy it into the ext/google/protobuf directory for the build -# (and for the release to PECL). -rm -rf ext/google/protobuf/third_party -mkdir -p ext/google/protobuf/third_party/wyhash -cp ../third_party/wyhash/* ext/google/protobuf/third_party/wyhash - -echo "Copied wyhash from ../third_party -> ext/google/protobuf/third_party" diff --git a/php/tests/compile_extension.sh b/php/tests/compile_extension.sh index fce0469526..80378f02d5 100755 --- a/php/tests/compile_extension.sh +++ b/php/tests/compile_extension.sh @@ -4,7 +4,6 @@ set -e cd $(dirname $0) -../prepare_c_extension.sh pushd ../ext/google/protobuf > /dev/null CONFIGURE_OPTIONS=("./configure" "--with-php-config=$(which php-config)") diff --git a/python/google/protobuf/pyext/descriptor.cc b/python/google/protobuf/pyext/descriptor.cc index eeb844c2dc..8c326efa81 100644 --- a/python/google/protobuf/pyext/descriptor.cc +++ b/python/google/protobuf/pyext/descriptor.cc @@ -913,8 +913,9 @@ static int SetContainingType(PyBaseDescriptor *self, PyObject *value, } static PyObject* GetExtensionScope(PyBaseDescriptor *self, void *closure) { + const auto* desc = _GetDescriptor(self); const Descriptor* extension_scope = - _GetDescriptor(self)->extension_scope(); + desc->is_extension() ? desc->extension_scope() : nullptr; if (extension_scope) { return PyMessageDescriptor_FromDescriptor(extension_scope); } else { diff --git a/ruby/Rakefile b/ruby/Rakefile index 523d4de458..60ec6ea665 100644 --- a/ruby/Rakefile +++ b/ruby/Rakefile @@ -78,12 +78,6 @@ if RUBY_PLATFORM == "java" system("mvn --batch-mode package") end else - unless ENV['IN_DOCKER'] == 'true' - # We need wyhash in-tree. - FileUtils.mkdir_p("ext/google/protobuf_c/third_party/wyhash") - FileUtils.cp("../third_party/wyhash/wyhash.h", "ext/google/protobuf_c/third_party/wyhash/wyhash.h") - end - Rake::ExtensionTask.new("protobuf_c", spec) do |ext| unless RUBY_PLATFORM =~ /darwin/ # TODO: also set "no_native to true" for mac if possible. As is, diff --git a/ruby/ext/google/protobuf_c/convert.c b/ruby/ext/google/protobuf_c/convert.c index 2fddc09629..8bcf6eee00 100644 --- a/ruby/ext/google/protobuf_c/convert.c +++ b/ruby/ext/google/protobuf_c/convert.c @@ -41,7 +41,6 @@ #include "message.h" #include "protobuf.h" -#include "third_party/wyhash/wyhash.h" static upb_strview Convert_StringData(VALUE str, upb_arena *arena) { upb_strview ret; @@ -328,19 +327,19 @@ bool Msgval_IsEqual(upb_msgval val1, upb_msgval val2, TypeInfo type_info) { uint64_t Msgval_GetHash(upb_msgval val, TypeInfo type_info, uint64_t seed) { switch (type_info.type) { case UPB_TYPE_BOOL: - return wyhash(&val, 1, seed, _wyp); + return Wyhash(&val, 1, seed, kWyhashSalt); case UPB_TYPE_FLOAT: case UPB_TYPE_INT32: case UPB_TYPE_UINT32: case UPB_TYPE_ENUM: - return wyhash(&val, 4, seed, _wyp); + return Wyhash(&val, 4, seed, kWyhashSalt); case UPB_TYPE_DOUBLE: case UPB_TYPE_INT64: case UPB_TYPE_UINT64: - return wyhash(&val, 8, seed, _wyp); + return Wyhash(&val, 8, seed, kWyhashSalt); case UPB_TYPE_STRING: case UPB_TYPE_BYTES: - return wyhash(val.str_val.data, val.str_val.size, seed, _wyp); + return Wyhash(val.str_val.data, val.str_val.size, seed, kWyhashSalt); case UPB_TYPE_MESSAGE: return Message_Hash(val.msg_val, type_info.def.msgdef, seed); default: diff --git a/ruby/ext/google/protobuf_c/extconf.rb b/ruby/ext/google/protobuf_c/extconf.rb index eaab4db74f..ec17787f79 100755 --- a/ruby/ext/google/protobuf_c/extconf.rb +++ b/ruby/ext/google/protobuf_c/extconf.rb @@ -17,5 +17,4 @@ end $objs = ["protobuf.o", "convert.o", "defs.o", "message.o", "repeated_field.o", "map.o", "ruby-upb.o", "wrap_memcpy.o"] -find_header('third_party/wyhash/wyhash.h', '../../../..') create_makefile("google/protobuf_c") diff --git a/ruby/ext/google/protobuf_c/message.c b/ruby/ext/google/protobuf_c/message.c index 98f89e8277..59602cf089 100644 --- a/ruby/ext/google/protobuf_c/message.c +++ b/ruby/ext/google/protobuf_c/message.c @@ -35,7 +35,6 @@ #include "map.h" #include "protobuf.h" #include "repeated_field.h" -#include "third_party/wyhash/wyhash.h" static VALUE cParseError = Qnil; static ID descriptor_instancevar_interned; @@ -717,7 +716,7 @@ uint64_t Message_Hash(const upb_msg* msg, const upb_msgdef* m, uint64_t seed) { &size); if (data) { - uint64_t ret = wyhash(data, size, seed, _wyp); + uint64_t ret = Wyhash(data, size, seed, kWyhashSalt); upb_arena_free(arena); return ret; } else { diff --git a/ruby/ext/google/protobuf_c/repeated_field.c b/ruby/ext/google/protobuf_c/repeated_field.c index 1cc4915e06..88e8434f0a 100644 --- a/ruby/ext/google/protobuf_c/repeated_field.c +++ b/ruby/ext/google/protobuf_c/repeated_field.c @@ -34,7 +34,6 @@ #include "defs.h" #include "message.h" #include "protobuf.h" -#include "third_party/wyhash/wyhash.h" // ----------------------------------------------------------------------------- // Repeated field container type. diff --git a/ruby/ext/google/protobuf_c/ruby-upb.c b/ruby/ext/google/protobuf_c/ruby-upb.c index b1b701b4ee..d68caac0e2 100755 --- a/ruby/ext/google/protobuf_c/ruby-upb.c +++ b/ruby/ext/google/protobuf_c/ruby-upb.c @@ -524,24 +524,43 @@ static void decode_munge(int type, wireval *val) { } static const upb_msglayout_field *upb_find_field(const upb_msglayout *l, - uint32_t field_number) { + uint32_t field_number, + int *last_field_index) { static upb_msglayout_field none = {0, 0, 0, 0, 0, 0}; - /* Lots of optimization opportunities here. */ - int i; if (l == NULL) return &none; - for (i = 0; i < l->field_count; i++) { - if (l->fields[i].number == field_number) { - return &l->fields[i]; + + size_t idx = ((size_t)field_number) - 1; // 0 wraps to SIZE_MAX + if (idx < l->dense_below) { + goto found; + } + + /* Resume scanning from last_field_index since fields are usually in order. */ + int last = *last_field_index; + for (idx = last; idx < l->field_count; idx++) { + if (l->fields[idx].number == field_number) { + goto found; + } + } + + for (idx = 0; idx < last; idx++) { + if (l->fields[idx].number == field_number) { + goto found; } } return &none; /* Unknown field. */ + + found: + UPB_ASSERT(l->fields[idx].number == field_number); + *last_field_index = idx; + return &l->fields[idx]; } -static upb_msg *decode_newsubmsg(upb_decstate *d, const upb_msglayout *layout, +static upb_msg *decode_newsubmsg(upb_decstate *d, + upb_msglayout const *const *submsgs, const upb_msglayout_field *field) { - const upb_msglayout *subl = layout->submsgs[field->submsg_index]; + const upb_msglayout *subl = submsgs[field->submsg_index]; return _upb_msg_new_inl(subl, &d->arena); } @@ -571,9 +590,10 @@ static const char *decode_readstr(upb_decstate *d, const char *ptr, int size, UPB_FORCEINLINE static const char *decode_tosubmsg(upb_decstate *d, const char *ptr, - upb_msg *submsg, const upb_msglayout *layout, + upb_msg *submsg, + upb_msglayout const *const *submsgs, const upb_msglayout_field *field, int size) { - const upb_msglayout *subl = layout->submsgs[field->submsg_index]; + const upb_msglayout *subl = submsgs[field->submsg_index]; int saved_delta = decode_pushlimit(d, ptr, size); if (--d->depth < 0) decode_err(d); if (!decode_isdone(d, &ptr)) { @@ -602,15 +622,17 @@ static const char *decode_group(upb_decstate *d, const char *ptr, UPB_FORCEINLINE static const char *decode_togroup(upb_decstate *d, const char *ptr, - upb_msg *submsg, const upb_msglayout *layout, + upb_msg *submsg, + upb_msglayout const *const *submsgs, const upb_msglayout_field *field) { - const upb_msglayout *subl = layout->submsgs[field->submsg_index]; + const upb_msglayout *subl = submsgs[field->submsg_index]; return decode_group(d, ptr, submsg, subl, field->number); } static const char *decode_toarray(upb_decstate *d, const char *ptr, - upb_msg *msg, const upb_msglayout *layout, - const upb_msglayout_field *field, wireval val, + upb_msg *msg, + upb_msglayout const *const *submsgs, + const upb_msglayout_field *field, wireval *val, int op) { upb_array **arrp = UPB_PTR_AT(msg, field->offset, void); upb_array *arr = *arrp; @@ -632,27 +654,27 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr, /* Append scalar value. */ mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << op, void); arr->len++; - memcpy(mem, &val, 1 << op); + memcpy(mem, val, 1 << op); return ptr; case OP_STRING: - decode_verifyutf8(d, ptr, val.size); + decode_verifyutf8(d, ptr, val->size); /* Fallthrough. */ case OP_BYTES: { /* Append bytes. */ upb_strview *str = (upb_strview*)_upb_array_ptr(arr) + arr->len; arr->len++; - return decode_readstr(d, ptr, val.size, str); + return decode_readstr(d, ptr, val->size, str); } case OP_SUBMSG: { /* Append submessage / group. */ - upb_msg *submsg = decode_newsubmsg(d, layout, field); + upb_msg *submsg = decode_newsubmsg(d, submsgs, field); *UPB_PTR_AT(_upb_array_ptr(arr), arr->len * sizeof(void *), upb_msg *) = submsg; arr->len++; if (UPB_UNLIKELY(field->descriptortype == UPB_DTYPE_GROUP)) { - return decode_togroup(d, ptr, submsg, layout, field); + return decode_togroup(d, ptr, submsg, submsgs, field); } else { - return decode_tosubmsg(d, ptr, submsg, layout, field, val.size); + return decode_tosubmsg(d, ptr, submsg, submsgs, field, val->size); } } case OP_FIXPCK_LG2(2): @@ -660,15 +682,15 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr, /* Fixed packed. */ int lg2 = op - OP_FIXPCK_LG2(0); int mask = (1 << lg2) - 1; - size_t count = val.size >> lg2; - if ((val.size & mask) != 0) { + size_t count = val->size >> lg2; + if ((val->size & mask) != 0) { decode_err(d); /* Length isn't a round multiple of elem size. */ } decode_reserve(d, arr, count); mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void); arr->len += count; - memcpy(mem, ptr, val.size); /* XXX: ptr boundary. */ - return ptr + val.size; + memcpy(mem, ptr, val->size); /* XXX: ptr boundary. */ + return ptr + val->size; } case OP_VARPCK_LG2(0): case OP_VARPCK_LG2(2): @@ -676,7 +698,7 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr, /* Varint packed. */ int lg2 = op - OP_VARPCK_LG2(0); int scale = 1 << lg2; - int saved_limit = decode_pushlimit(d, ptr, val.size); + int saved_limit = decode_pushlimit(d, ptr, val->size); char *out = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void); while (!decode_isdone(d, &ptr)) { wireval elem; @@ -698,16 +720,15 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr, } static const char *decode_tomap(upb_decstate *d, const char *ptr, upb_msg *msg, - const upb_msglayout *layout, - const upb_msglayout_field *field, wireval val) { + upb_msglayout const *const *submsgs, + const upb_msglayout_field *field, wireval *val) { upb_map **map_p = UPB_PTR_AT(msg, field->offset, upb_map *); upb_map *map = *map_p; upb_map_entry ent; - const upb_msglayout *entry = layout->submsgs[field->submsg_index]; + const upb_msglayout *entry = submsgs[field->submsg_index]; if (!map) { /* Lazily create map. */ - const upb_msglayout *entry = layout->submsgs[field->submsg_index]; const upb_msglayout_field *key_field = &entry->fields[0]; const upb_msglayout_field *val_field = &entry->fields[1]; char key_size = desctype_to_mapsize[key_field->descriptortype]; @@ -727,28 +748,28 @@ static const char *decode_tomap(upb_decstate *d, const char *ptr, upb_msg *msg, ent.v.val = upb_value_ptr(_upb_msg_new(entry->submsgs[0], &d->arena)); } - ptr = decode_tosubmsg(d, ptr, &ent.k, layout, field, val.size); + ptr = decode_tosubmsg(d, ptr, &ent.k, submsgs, field, val->size); _upb_map_set(map, &ent.k, map->key_size, &ent.v, map->val_size, &d->arena); return ptr; } static const char *decode_tomsg(upb_decstate *d, const char *ptr, upb_msg *msg, - const upb_msglayout *layout, - const upb_msglayout_field *field, wireval val, + upb_msglayout const *const *submsgs, + const upb_msglayout_field *field, wireval *val, int op) { void *mem = UPB_PTR_AT(msg, field->offset, void); int type = field->descriptortype; /* Set presence if necessary. */ - if (field->presence < 0) { + if (field->presence > 0) { + _upb_sethas_field(msg, field); + } else if (field->presence < 0) { /* Oneof case */ uint32_t *oneof_case = _upb_oneofcase_field(msg, field); if (op == OP_SUBMSG && *oneof_case != field->number) { memset(mem, 0, sizeof(void*)); } *oneof_case = field->number; - } else if (field->presence > 0) { - _upb_sethas_field(msg, field); } /* Store into message. */ @@ -757,29 +778,29 @@ static const char *decode_tomsg(upb_decstate *d, const char *ptr, upb_msg *msg, upb_msg **submsgp = mem; upb_msg *submsg = *submsgp; if (!submsg) { - submsg = decode_newsubmsg(d, layout, field); + submsg = decode_newsubmsg(d, submsgs, field); *submsgp = submsg; } if (UPB_UNLIKELY(type == UPB_DTYPE_GROUP)) { - ptr = decode_togroup(d, ptr, submsg, layout, field); + ptr = decode_togroup(d, ptr, submsg, submsgs, field); } else { - ptr = decode_tosubmsg(d, ptr, submsg, layout, field, val.size); + ptr = decode_tosubmsg(d, ptr, submsg, submsgs, field, val->size); } break; } case OP_STRING: - decode_verifyutf8(d, ptr, val.size); + decode_verifyutf8(d, ptr, val->size); /* Fallthrough. */ case OP_BYTES: - return decode_readstr(d, ptr, val.size, mem); + return decode_readstr(d, ptr, val->size, mem); case OP_SCALAR_LG2(3): - memcpy(mem, &val, 8); + memcpy(mem, val, 8); break; case OP_SCALAR_LG2(2): - memcpy(mem, &val, 4); + memcpy(mem, val, 4); break; case OP_SCALAR_LG2(0): - memcpy(mem, &val, 1); + memcpy(mem, val, 1); break; default: UPB_UNREACHABLE(); @@ -805,6 +826,7 @@ static bool decode_tryfastdispatch(upb_decstate *d, const char **ptr, UPB_NOINLINE static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg, const upb_msglayout *layout) { + int last_field_index = 0; while (true) { uint32_t tag; const upb_msglayout_field *field; @@ -819,7 +841,7 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg, field_number = tag >> 3; wire_type = tag & 7; - field = upb_find_field(layout, field_number); + field = upb_find_field(layout, field_number, &last_field_index); switch (wire_type) { case UPB_WIRE_TYPE_VARINT: @@ -844,7 +866,7 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg, case UPB_WIRE_TYPE_DELIMITED: { int ndx = field->descriptortype; uint64_t size; - if (_upb_isrepeated(field)) ndx += 18; + if (_upb_getmode(field) == _UPB_MODE_ARRAY) ndx += 18; ptr = decode_varint64(d, ptr, &size); if (size >= INT32_MAX || ptr - d->end + (int32_t)size > d->limit) { @@ -868,17 +890,18 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg, if (op >= 0) { /* Parse, using op for dispatch. */ - switch (field->label) { - case UPB_LABEL_REPEATED: - case _UPB_LABEL_PACKED: - ptr = decode_toarray(d, ptr, msg, layout, field, val, op); + switch (_upb_getmode(field)) { + case _UPB_MODE_ARRAY: + ptr = decode_toarray(d, ptr, msg, layout->submsgs, field, &val, op); break; - case _UPB_LABEL_MAP: - ptr = decode_tomap(d, ptr, msg, layout, field, val); + case _UPB_MODE_MAP: + ptr = decode_tomap(d, ptr, msg, layout->submsgs, field, &val); break; - default: - ptr = decode_tomsg(d, ptr, msg, layout, field, val, op); + case _UPB_MODE_SCALAR: + ptr = decode_tomsg(d, ptr, msg, layout->submsgs, field, &val, op); break; + default: + UPB_UNREACHABLE(); } } else { unknown: @@ -924,7 +947,8 @@ static bool decode_top(struct upb_decstate *d, const char *buf, void *msg, } bool _upb_decode(const char *buf, size_t size, void *msg, - const upb_msglayout *l, upb_arena *arena, int options) { + const upb_msglayout *l, const upb_extreg *extreg, int options, + upb_arena *arena) { bool ok; upb_decstate state; unsigned depth = (unsigned)options >> 16; @@ -1126,7 +1150,7 @@ static void encode_fixedarray(upb_encstate *e, const upb_array *arr, } } -static void encode_message(upb_encstate *e, const char *msg, +static void encode_message(upb_encstate *e, const upb_msg *msg, const upb_msglayout *m, size_t *size); static void encode_scalar(upb_encstate *e, const void *_field_mem, @@ -1218,10 +1242,10 @@ static void encode_scalar(upb_encstate *e, const void *_field_mem, encode_tag(e, f->number, wire_type); } -static void encode_array(upb_encstate *e, const char *field_mem, +static void encode_array(upb_encstate *e, const upb_msg *msg, const upb_msglayout *m, const upb_msglayout_field *f) { - const upb_array *arr = *(const upb_array**)field_mem; - bool packed = f->label == _UPB_LABEL_PACKED; + const upb_array *arr = *UPB_PTR_AT(msg, f->offset, upb_array*); + bool packed = f->mode & _UPB_MODE_IS_PACKED; size_t pre_len = e->limit - e->ptr; if (arr == NULL || arr->len == 0) { @@ -1337,9 +1361,9 @@ static void encode_mapentry(upb_encstate *e, uint32_t number, encode_tag(e, number, UPB_WIRE_TYPE_DELIMITED); } -static void encode_map(upb_encstate *e, const char *field_mem, +static void encode_map(upb_encstate *e, const upb_msg *msg, const upb_msglayout *m, const upb_msglayout_field *f) { - const upb_map *map = *(const upb_map**)field_mem; + const upb_map *map = *UPB_PTR_AT(msg, f->offset, const upb_map*); const upb_msglayout *layout = m->submsgs[f->submsg_index]; UPB_ASSERT(layout->field_count == 2); @@ -1385,7 +1409,7 @@ static void encode_scalarfield(upb_encstate *e, const char *msg, encode_scalar(e, msg + f->offset, m, f, skip_empty); } -static void encode_message(upb_encstate *e, const char *msg, +static void encode_message(upb_encstate *e, const upb_msg *msg, const upb_msglayout *m, size_t *size) { size_t pre_len = e->limit - e->ptr; const upb_msglayout_field *f = &m->fields[m->field_count]; @@ -1402,12 +1426,18 @@ static void encode_message(upb_encstate *e, const char *msg, while (f != first) { f--; - if (_upb_isrepeated(f)) { - encode_array(e, msg + f->offset, m, f); - } else if (f->label == _UPB_LABEL_MAP) { - encode_map(e, msg + f->offset, m, f); - } else { - encode_scalarfield(e, msg, m, f); + switch (_upb_getmode(f)) { + case _UPB_MODE_ARRAY: + encode_array(e, msg, m, f); + break; + case _UPB_MODE_MAP: + encode_map(e, msg, m, f); + break; + case _UPB_MODE_SCALAR: + encode_scalarfield(e, msg, m, f); + break; + default: + UPB_UNREACHABLE(); } } @@ -1452,7 +1482,7 @@ char *upb_encode_ex(const void *msg, const upb_msglayout *l, int options, /** upb_msg *******************************************************************/ -static const size_t overhead = sizeof(upb_msg_internal); +static const size_t overhead = sizeof(upb_msg_internaldata); static const upb_msg_internal *upb_msg_getinternal_const(const upb_msg *msg) { ptrdiff_t size = sizeof(upb_msg_internal); @@ -1468,49 +1498,107 @@ void _upb_msg_clear(upb_msg *msg, const upb_msglayout *l) { memset(mem, 0, upb_msg_sizeof(l)); } +static bool realloc_internal(upb_msg *msg, size_t need, upb_arena *arena) { + upb_msg_internal *in = upb_msg_getinternal(msg); + if (!in->internal) { + /* No internal data, allocate from scratch. */ + size_t size = UPB_MAX(128, _upb_lg2ceilsize(need + overhead)); + upb_msg_internaldata *internal = upb_arena_malloc(arena, size); + if (!internal) return false; + internal->size = size; + internal->unknown_end = overhead; + internal->ext_begin = size; + in->internal = internal; + } else if (in->internal->ext_begin - in->internal->unknown_end < need) { + /* Internal data is too small, reallocate. */ + size_t new_size = _upb_lg2ceilsize(in->internal->size + need); + size_t ext_bytes = in->internal->size - in->internal->ext_begin; + size_t new_ext_begin = new_size - ext_bytes; + upb_msg_internaldata *internal = + upb_arena_realloc(arena, in->internal, in->internal->size, new_size); + if (!internal) return false; + if (ext_bytes) { + /* Need to move extension data to the end. */ + char *ptr = (char*)internal; + memmove(ptr + new_ext_begin, ptr + internal->ext_begin, ext_bytes); + } + internal->ext_begin = new_ext_begin; + internal->size = new_size; + in->internal = internal; + } + UPB_ASSERT(in->internal->ext_begin - in->internal->unknown_end >= need); + return true; +} + bool _upb_msg_addunknown(upb_msg *msg, const char *data, size_t len, upb_arena *arena) { - + if (!realloc_internal(msg, len, arena)) return false; upb_msg_internal *in = upb_msg_getinternal(msg); - if (!in->unknown) { - size_t size = 128; - while (size < len) size *= 2; - in->unknown = upb_arena_malloc(arena, size + overhead); - if (!in->unknown) return false; - in->unknown->size = size; - in->unknown->len = 0; - } else if (in->unknown->size - in->unknown->len < len) { - size_t need = in->unknown->len + len; - size_t size = in->unknown->size; - while (size < need) size *= 2; - in->unknown = upb_arena_realloc( - arena, in->unknown, in->unknown->size + overhead, size + overhead); - if (!in->unknown) return false; - in->unknown->size = size; - } - memcpy(UPB_PTR_AT(in->unknown + 1, in->unknown->len, char), data, len); - in->unknown->len += len; + memcpy(UPB_PTR_AT(in->internal, in->internal->unknown_end, char), data, len); + in->internal->unknown_end += len; return true; } void _upb_msg_discardunknown_shallow(upb_msg *msg) { upb_msg_internal *in = upb_msg_getinternal(msg); - if (in->unknown) { - in->unknown->len = 0; + if (in->internal) { + in->internal->unknown_end = overhead; } } const char *upb_msg_getunknown(const upb_msg *msg, size_t *len) { const upb_msg_internal *in = upb_msg_getinternal_const(msg); - if (in->unknown) { - *len = in->unknown->len; - return (char*)(in->unknown + 1); + if (in->internal) { + *len = in->internal->unknown_end - overhead; + return (char*)(in->internal + 1); } else { *len = 0; return NULL; } } +const upb_msg_ext *_upb_msg_getexts(const upb_msg *msg, size_t *count) { + const upb_msg_internal *in = upb_msg_getinternal_const(msg); + if (in->internal) { + *count = + (in->internal->size - in->internal->ext_begin) / sizeof(upb_msg_ext); + return UPB_PTR_AT(in->internal, in->internal->ext_begin, void); + } else { + *count = 0; + return NULL; + } +} + +const upb_msg_ext *_upb_msg_getext(const upb_msg *msg, + const upb_msglayout_ext *e) { + size_t n; + const upb_msg_ext *ext = _upb_msg_getexts(msg, &n); + + /* For now we use linear search exclusively to find extensions. If this + * becomes an issue due to messages with lots of extensions, we can introduce + * a table of some sort. */ + for (size_t i = 0; i < n; i++) { + if (ext[i].ext == e) { + return &ext[i]; + } + } + + return NULL; +} + +upb_msg_ext *_upb_msg_getorcreateext(upb_msg *msg, const upb_msglayout_ext *e, + upb_arena *arena) { + upb_msg_ext *ext = (upb_msg_ext*)_upb_msg_getext(msg, e); + if (ext) return ext; + if (!realloc_internal(msg, sizeof(upb_msg_ext), arena)) return NULL; + upb_msg_internal *in = upb_msg_getinternal(msg); + in->internal->ext_begin -= sizeof(upb_msg_ext); + ext = UPB_PTR_AT(in->internal, in->internal->ext_begin, void); + memset(ext, 0, sizeof(upb_msg_ext)); + ext->ext = e; + return ext; +} + /** upb_array *****************************************************************/ bool _upb_array_realloc(upb_array *arr, size_t min_size, upb_arena *arena) { @@ -1700,6 +1788,63 @@ bool _upb_mapsorter_pushmap(_upb_mapsorter *s, upb_descriptortype_t key_type, return true; } +/** upb_extreg ****************************************************************/ + +struct upb_extreg { + upb_arena *arena; + upb_strtable exts; /* Key is upb_msglayout* concatenated with fieldnum. */ +}; + +#define EXTREG_KEY_SIZE (sizeof(upb_msglayout*) + sizeof(uint32_t)) + +static void extreg_key(char *buf, const upb_msglayout *l, uint32_t fieldnum) { + memcpy(buf, &l, sizeof(l)); + memcpy(buf + sizeof(l), &fieldnum, sizeof(fieldnum)); +} + +upb_extreg *upb_extreg_new(upb_arena *arena) { + upb_extreg *r = upb_arena_malloc(arena, sizeof(*r)); + if (!r) return NULL; + r->arena = arena; + if (!upb_strtable_init(&r->exts, 8, arena)) return NULL; + return r; +} + +bool _upb_extreg_add(upb_extreg *r, const upb_msglayout_ext *e, size_t count) { + char buf[EXTREG_KEY_SIZE]; + const upb_msglayout_ext *start = e; + const upb_msglayout_ext *end = e + count; + for (; e < end; e++) { + extreg_key(buf, e->extendee, e->field.number); + if (!upb_strtable_insert(&r->exts, buf, EXTREG_KEY_SIZE, + upb_value_constptr(e), r->arena)) { + goto failure; + } + } + return true; + +failure: + /* Back out the entries previously added. */ + for (end = e, e = start; e < end; e++) { + extreg_key(buf, e->extendee, e->field.number); + upb_strtable_remove(&r->exts, buf, EXTREG_KEY_SIZE, NULL); + } + return false; +} + +const upb_msglayout_field *_upb_extreg_get(const upb_extreg *r, + const upb_msglayout *l, + uint32_t num) { + char buf[EXTREG_KEY_SIZE]; + upb_value v; + extreg_key(buf, l, num); + if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, &v)) { + return upb_value_getconstptr(v); + } else { + return NULL; + } +} + /** upb/table.c ************************************************************/ /* * upb_table Implementation @@ -1709,7 +1854,6 @@ bool _upb_mapsorter_pushmap(_upb_mapsorter *s, upb_descriptortype_t key_type, #include -#include "third_party/wyhash/wyhash.h" /* Must be last. */ @@ -1982,8 +2126,143 @@ static upb_tabkey strcopy(lookupkey_t k2, upb_arena *a) { return (uintptr_t)str; } +/* Adapted from ABSL's wyhash. */ + +static uint64_t UnalignedLoad64(const void *p) { + uint64_t val; + memcpy(&val, p, 8); + return val; +} + +static uint32_t UnalignedLoad32(const void *p) { + uint32_t val; + memcpy(&val, p, 4); + return val; +} + +#if defined(_MSC_VER) && defined(_M_X64) +#include +#endif + +/* Computes a * b, returning the low 64 bits of the result and storing the high + * 64 bits in |*high|. */ +static uint64_t upb_umul128(uint64_t v0, uint64_t v1, uint64_t* out_high) { +#ifdef __SIZEOF_INT128__ + __uint128_t p = v0; + p *= v1; + *out_high = (uint64_t)(p >> 64); + return (uint64_t)p; +#elif defined(_MSC_VER) && defined(_M_X64) + return _umul128(v0, v1, out_high); +#else + uint64_t a32 = v0 >> 32; + uint64_t a00 = v0 & 0xffffffff; + uint64_t b32 = v1 >> 32; + uint64_t b00 = v1 & 0xffffffff; + uint64_t high = a32 * b32; + uint64_t low = a00 * b00; + uint64_t mid1 = a32 * b00; + uint64_t mid2 = a00 * b32; + low += (mid1 << 32) + (mid2 << 32); + // Omit carry bit, for mixing we do not care about exact numerical precision. + high += (mid1 >> 32) + (mid2 >> 32); + *out_high = high; + return low; +#endif +} + +static uint64_t WyhashMix(uint64_t v0, uint64_t v1) { + uint64_t high; + uint64_t low = upb_umul128(v0, v1, &high); + return low ^ high; +} + +uint64_t Wyhash(const void *data, size_t len, uint64_t seed, + const uint64_t salt[]) { + const uint8_t* ptr = (const uint8_t*)data; + uint64_t starting_length = (uint64_t)len; + uint64_t current_state = seed ^ salt[0]; + + if (len > 64) { + // If we have more than 64 bytes, we're going to handle chunks of 64 + // bytes at a time. We're going to build up two separate hash states + // which we will then hash together. + uint64_t duplicated_state = current_state; + + do { + uint64_t a = UnalignedLoad64(ptr); + uint64_t b = UnalignedLoad64(ptr + 8); + uint64_t c = UnalignedLoad64(ptr + 16); + uint64_t d = UnalignedLoad64(ptr + 24); + uint64_t e = UnalignedLoad64(ptr + 32); + uint64_t f = UnalignedLoad64(ptr + 40); + uint64_t g = UnalignedLoad64(ptr + 48); + uint64_t h = UnalignedLoad64(ptr + 56); + + uint64_t cs0 = WyhashMix(a ^ salt[1], b ^ current_state); + uint64_t cs1 = WyhashMix(c ^ salt[2], d ^ current_state); + current_state = (cs0 ^ cs1); + + uint64_t ds0 = WyhashMix(e ^ salt[3], f ^ duplicated_state); + uint64_t ds1 = WyhashMix(g ^ salt[4], h ^ duplicated_state); + duplicated_state = (ds0 ^ ds1); + + ptr += 64; + len -= 64; + } while (len > 64); + + current_state = current_state ^ duplicated_state; + } + + // We now have a data `ptr` with at most 64 bytes and the current state + // of the hashing state machine stored in current_state. + while (len > 16) { + uint64_t a = UnalignedLoad64(ptr); + uint64_t b = UnalignedLoad64(ptr + 8); + + current_state = WyhashMix(a ^ salt[1], b ^ current_state); + + ptr += 16; + len -= 16; + } + + // We now have a data `ptr` with at most 16 bytes. + uint64_t a = 0; + uint64_t b = 0; + if (len > 8) { + // When we have at least 9 and at most 16 bytes, set A to the first 64 + // bits of the input and B to the last 64 bits of the input. Yes, they will + // overlap in the middle if we are working with less than the full 16 + // bytes. + a = UnalignedLoad64(ptr); + b = UnalignedLoad64(ptr + len - 8); + } else if (len > 3) { + // If we have at least 4 and at most 8 bytes, set A to the first 32 + // bits and B to the last 32 bits. + a = UnalignedLoad32(ptr); + b = UnalignedLoad32(ptr + len - 4); + } else if (len > 0) { + // If we have at least 1 and at most 3 bytes, read all of the provided + // bits into A, with some adjustments. + a = ((ptr[0] << 16) | (ptr[len >> 1] << 8) | ptr[len - 1]); + b = 0; + } else { + a = 0; + b = 0; + } + + uint64_t w = WyhashMix(a ^ salt[1], b ^ current_state); + uint64_t z = salt[1] ^ starting_length; + return WyhashMix(w, z); +} + +const uint64_t kWyhashSalt[5] = { + 0x243F6A8885A308D3ULL, 0x13198A2E03707344ULL, 0xA4093822299F31D0ULL, + 0x082EFA98EC4E6C89ULL, 0x452821E638D01377ULL, +}; + static uint32_t table_hash(const char *p, size_t n) { - return wyhash(p, n, 0, _wyp); + return Wyhash(p, n, 0, kWyhashSalt); } static uint32_t strhash(upb_tabkey key) { @@ -3710,13 +3989,13 @@ static const upb_msglayout *const google_protobuf_FileDescriptorSet_submsgs[1] = }; static const upb_msglayout_field google_protobuf_FileDescriptorSet__fields[1] = { - {1, UPB_SIZE(0, 0), 0, 0, 11, 3}, + {1, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_FileDescriptorSet_msginit = { &google_protobuf_FileDescriptorSet_submsgs[0], &google_protobuf_FileDescriptorSet__fields[0], - UPB_SIZE(8, 8), 1, false, 255, + UPB_SIZE(8, 8), 1, false, 1, 255, }; static const upb_msglayout *const google_protobuf_FileDescriptorProto_submsgs[6] = { @@ -3729,24 +4008,24 @@ static const upb_msglayout *const google_protobuf_FileDescriptorProto_submsgs[6] }; static const upb_msglayout_field google_protobuf_FileDescriptorProto__fields[12] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(12, 24), 2, 0, 12, 1}, - {3, UPB_SIZE(36, 72), 0, 0, 12, 3}, - {4, UPB_SIZE(40, 80), 0, 0, 11, 3}, - {5, UPB_SIZE(44, 88), 0, 1, 11, 3}, - {6, UPB_SIZE(48, 96), 0, 4, 11, 3}, - {7, UPB_SIZE(52, 104), 0, 2, 11, 3}, - {8, UPB_SIZE(28, 56), 3, 3, 11, 1}, - {9, UPB_SIZE(32, 64), 4, 5, 11, 1}, - {10, UPB_SIZE(56, 112), 0, 0, 5, 3}, - {11, UPB_SIZE(60, 120), 0, 0, 5, 3}, - {12, UPB_SIZE(20, 40), 5, 0, 12, 1}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(12, 24), 2, 0, 12, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(36, 72), 0, 0, 12, _UPB_MODE_ARRAY}, + {4, UPB_SIZE(40, 80), 0, 0, 11, _UPB_MODE_ARRAY}, + {5, UPB_SIZE(44, 88), 0, 1, 11, _UPB_MODE_ARRAY}, + {6, UPB_SIZE(48, 96), 0, 4, 11, _UPB_MODE_ARRAY}, + {7, UPB_SIZE(52, 104), 0, 2, 11, _UPB_MODE_ARRAY}, + {8, UPB_SIZE(28, 56), 3, 3, 11, _UPB_MODE_SCALAR}, + {9, UPB_SIZE(32, 64), 4, 5, 11, _UPB_MODE_SCALAR}, + {10, UPB_SIZE(56, 112), 0, 0, 5, _UPB_MODE_ARRAY}, + {11, UPB_SIZE(60, 120), 0, 0, 5, _UPB_MODE_ARRAY}, + {12, UPB_SIZE(20, 40), 5, 0, 12, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_FileDescriptorProto_msginit = { &google_protobuf_FileDescriptorProto_submsgs[0], &google_protobuf_FileDescriptorProto__fields[0], - UPB_SIZE(64, 128), 12, false, 255, + UPB_SIZE(64, 128), 12, false, 12, 255, }; static const upb_msglayout *const google_protobuf_DescriptorProto_submsgs[7] = { @@ -3760,22 +4039,22 @@ static const upb_msglayout *const google_protobuf_DescriptorProto_submsgs[7] = { }; static const upb_msglayout_field google_protobuf_DescriptorProto__fields[10] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(16, 32), 0, 4, 11, 3}, - {3, UPB_SIZE(20, 40), 0, 0, 11, 3}, - {4, UPB_SIZE(24, 48), 0, 3, 11, 3}, - {5, UPB_SIZE(28, 56), 0, 1, 11, 3}, - {6, UPB_SIZE(32, 64), 0, 4, 11, 3}, - {7, UPB_SIZE(12, 24), 2, 5, 11, 1}, - {8, UPB_SIZE(36, 72), 0, 6, 11, 3}, - {9, UPB_SIZE(40, 80), 0, 2, 11, 3}, - {10, UPB_SIZE(44, 88), 0, 0, 12, 3}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(16, 32), 0, 4, 11, _UPB_MODE_ARRAY}, + {3, UPB_SIZE(20, 40), 0, 0, 11, _UPB_MODE_ARRAY}, + {4, UPB_SIZE(24, 48), 0, 3, 11, _UPB_MODE_ARRAY}, + {5, UPB_SIZE(28, 56), 0, 1, 11, _UPB_MODE_ARRAY}, + {6, UPB_SIZE(32, 64), 0, 4, 11, _UPB_MODE_ARRAY}, + {7, UPB_SIZE(12, 24), 2, 5, 11, _UPB_MODE_SCALAR}, + {8, UPB_SIZE(36, 72), 0, 6, 11, _UPB_MODE_ARRAY}, + {9, UPB_SIZE(40, 80), 0, 2, 11, _UPB_MODE_ARRAY}, + {10, UPB_SIZE(44, 88), 0, 0, 12, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_DescriptorProto_msginit = { &google_protobuf_DescriptorProto_submsgs[0], &google_protobuf_DescriptorProto__fields[0], - UPB_SIZE(48, 96), 10, false, 255, + UPB_SIZE(48, 96), 10, false, 10, 255, }; static const upb_msglayout *const google_protobuf_DescriptorProto_ExtensionRange_submsgs[1] = { @@ -3783,26 +4062,26 @@ static const upb_msglayout *const google_protobuf_DescriptorProto_ExtensionRange }; static const upb_msglayout_field google_protobuf_DescriptorProto_ExtensionRange__fields[3] = { - {1, UPB_SIZE(4, 4), 1, 0, 5, 1}, - {2, UPB_SIZE(8, 8), 2, 0, 5, 1}, - {3, UPB_SIZE(12, 16), 3, 0, 11, 1}, + {1, UPB_SIZE(4, 4), 1, 0, 5, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(8, 8), 2, 0, 5, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(12, 16), 3, 0, 11, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_DescriptorProto_ExtensionRange_msginit = { &google_protobuf_DescriptorProto_ExtensionRange_submsgs[0], &google_protobuf_DescriptorProto_ExtensionRange__fields[0], - UPB_SIZE(16, 24), 3, false, 255, + UPB_SIZE(16, 24), 3, false, 3, 255, }; static const upb_msglayout_field google_protobuf_DescriptorProto_ReservedRange__fields[2] = { - {1, UPB_SIZE(4, 4), 1, 0, 5, 1}, - {2, UPB_SIZE(8, 8), 2, 0, 5, 1}, + {1, UPB_SIZE(4, 4), 1, 0, 5, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(8, 8), 2, 0, 5, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_DescriptorProto_ReservedRange_msginit = { NULL, &google_protobuf_DescriptorProto_ReservedRange__fields[0], - UPB_SIZE(16, 16), 2, false, 255, + UPB_SIZE(16, 16), 2, false, 2, 255, }; static const upb_msglayout *const google_protobuf_ExtensionRangeOptions_submsgs[1] = { @@ -3810,13 +4089,13 @@ static const upb_msglayout *const google_protobuf_ExtensionRangeOptions_submsgs[ }; static const upb_msglayout_field google_protobuf_ExtensionRangeOptions__fields[1] = { - {999, UPB_SIZE(0, 0), 0, 0, 11, 3}, + {999, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_ExtensionRangeOptions_msginit = { &google_protobuf_ExtensionRangeOptions_submsgs[0], &google_protobuf_ExtensionRangeOptions__fields[0], - UPB_SIZE(8, 8), 1, false, 255, + UPB_SIZE(8, 8), 1, false, 0, 255, }; static const upb_msglayout *const google_protobuf_FieldDescriptorProto_submsgs[1] = { @@ -3824,23 +4103,23 @@ static const upb_msglayout *const google_protobuf_FieldDescriptorProto_submsgs[1 }; static const upb_msglayout_field google_protobuf_FieldDescriptorProto__fields[11] = { - {1, UPB_SIZE(24, 24), 1, 0, 12, 1}, - {2, UPB_SIZE(32, 40), 2, 0, 12, 1}, - {3, UPB_SIZE(12, 12), 3, 0, 5, 1}, - {4, UPB_SIZE(4, 4), 4, 0, 14, 1}, - {5, UPB_SIZE(8, 8), 5, 0, 14, 1}, - {6, UPB_SIZE(40, 56), 6, 0, 12, 1}, - {7, UPB_SIZE(48, 72), 7, 0, 12, 1}, - {8, UPB_SIZE(64, 104), 8, 0, 11, 1}, - {9, UPB_SIZE(16, 16), 9, 0, 5, 1}, - {10, UPB_SIZE(56, 88), 10, 0, 12, 1}, - {17, UPB_SIZE(20, 20), 11, 0, 8, 1}, + {1, UPB_SIZE(24, 24), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(32, 40), 2, 0, 12, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(12, 12), 3, 0, 5, _UPB_MODE_SCALAR}, + {4, UPB_SIZE(4, 4), 4, 0, 14, _UPB_MODE_SCALAR}, + {5, UPB_SIZE(8, 8), 5, 0, 14, _UPB_MODE_SCALAR}, + {6, UPB_SIZE(40, 56), 6, 0, 12, _UPB_MODE_SCALAR}, + {7, UPB_SIZE(48, 72), 7, 0, 12, _UPB_MODE_SCALAR}, + {8, UPB_SIZE(64, 104), 8, 0, 11, _UPB_MODE_SCALAR}, + {9, UPB_SIZE(16, 16), 9, 0, 5, _UPB_MODE_SCALAR}, + {10, UPB_SIZE(56, 88), 10, 0, 12, _UPB_MODE_SCALAR}, + {17, UPB_SIZE(20, 20), 11, 0, 8, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_FieldDescriptorProto_msginit = { &google_protobuf_FieldDescriptorProto_submsgs[0], &google_protobuf_FieldDescriptorProto__fields[0], - UPB_SIZE(72, 112), 11, false, 255, + UPB_SIZE(72, 112), 11, false, 10, 255, }; static const upb_msglayout *const google_protobuf_OneofDescriptorProto_submsgs[1] = { @@ -3848,14 +4127,14 @@ static const upb_msglayout *const google_protobuf_OneofDescriptorProto_submsgs[1 }; static const upb_msglayout_field google_protobuf_OneofDescriptorProto__fields[2] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(12, 24), 2, 0, 11, 1}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(12, 24), 2, 0, 11, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_OneofDescriptorProto_msginit = { &google_protobuf_OneofDescriptorProto_submsgs[0], &google_protobuf_OneofDescriptorProto__fields[0], - UPB_SIZE(16, 32), 2, false, 255, + UPB_SIZE(16, 32), 2, false, 2, 255, }; static const upb_msglayout *const google_protobuf_EnumDescriptorProto_submsgs[3] = { @@ -3865,28 +4144,28 @@ static const upb_msglayout *const google_protobuf_EnumDescriptorProto_submsgs[3] }; static const upb_msglayout_field google_protobuf_EnumDescriptorProto__fields[5] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(16, 32), 0, 2, 11, 3}, - {3, UPB_SIZE(12, 24), 2, 1, 11, 1}, - {4, UPB_SIZE(20, 40), 0, 0, 11, 3}, - {5, UPB_SIZE(24, 48), 0, 0, 12, 3}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(16, 32), 0, 2, 11, _UPB_MODE_ARRAY}, + {3, UPB_SIZE(12, 24), 2, 1, 11, _UPB_MODE_SCALAR}, + {4, UPB_SIZE(20, 40), 0, 0, 11, _UPB_MODE_ARRAY}, + {5, UPB_SIZE(24, 48), 0, 0, 12, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_EnumDescriptorProto_msginit = { &google_protobuf_EnumDescriptorProto_submsgs[0], &google_protobuf_EnumDescriptorProto__fields[0], - UPB_SIZE(32, 64), 5, false, 255, + UPB_SIZE(32, 64), 5, false, 5, 255, }; static const upb_msglayout_field google_protobuf_EnumDescriptorProto_EnumReservedRange__fields[2] = { - {1, UPB_SIZE(4, 4), 1, 0, 5, 1}, - {2, UPB_SIZE(8, 8), 2, 0, 5, 1}, + {1, UPB_SIZE(4, 4), 1, 0, 5, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(8, 8), 2, 0, 5, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit = { NULL, &google_protobuf_EnumDescriptorProto_EnumReservedRange__fields[0], - UPB_SIZE(16, 16), 2, false, 255, + UPB_SIZE(16, 16), 2, false, 2, 255, }; static const upb_msglayout *const google_protobuf_EnumValueDescriptorProto_submsgs[1] = { @@ -3894,15 +4173,15 @@ static const upb_msglayout *const google_protobuf_EnumValueDescriptorProto_subms }; static const upb_msglayout_field google_protobuf_EnumValueDescriptorProto__fields[3] = { - {1, UPB_SIZE(8, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(4, 4), 2, 0, 5, 1}, - {3, UPB_SIZE(16, 24), 3, 0, 11, 1}, + {1, UPB_SIZE(8, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(4, 4), 2, 0, 5, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(16, 24), 3, 0, 11, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_EnumValueDescriptorProto_msginit = { &google_protobuf_EnumValueDescriptorProto_submsgs[0], &google_protobuf_EnumValueDescriptorProto__fields[0], - UPB_SIZE(24, 32), 3, false, 255, + UPB_SIZE(24, 32), 3, false, 3, 255, }; static const upb_msglayout *const google_protobuf_ServiceDescriptorProto_submsgs[2] = { @@ -3911,15 +4190,15 @@ static const upb_msglayout *const google_protobuf_ServiceDescriptorProto_submsgs }; static const upb_msglayout_field google_protobuf_ServiceDescriptorProto__fields[3] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(16, 32), 0, 0, 11, 3}, - {3, UPB_SIZE(12, 24), 2, 1, 11, 1}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(16, 32), 0, 0, 11, _UPB_MODE_ARRAY}, + {3, UPB_SIZE(12, 24), 2, 1, 11, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_ServiceDescriptorProto_msginit = { &google_protobuf_ServiceDescriptorProto_submsgs[0], &google_protobuf_ServiceDescriptorProto__fields[0], - UPB_SIZE(24, 48), 3, false, 255, + UPB_SIZE(24, 48), 3, false, 3, 255, }; static const upb_msglayout *const google_protobuf_MethodDescriptorProto_submsgs[1] = { @@ -3927,18 +4206,18 @@ static const upb_msglayout *const google_protobuf_MethodDescriptorProto_submsgs[ }; static const upb_msglayout_field google_protobuf_MethodDescriptorProto__fields[6] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {2, UPB_SIZE(12, 24), 2, 0, 12, 1}, - {3, UPB_SIZE(20, 40), 3, 0, 12, 1}, - {4, UPB_SIZE(28, 56), 4, 0, 11, 1}, - {5, UPB_SIZE(1, 1), 5, 0, 8, 1}, - {6, UPB_SIZE(2, 2), 6, 0, 8, 1}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(12, 24), 2, 0, 12, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(20, 40), 3, 0, 12, _UPB_MODE_SCALAR}, + {4, UPB_SIZE(28, 56), 4, 0, 11, _UPB_MODE_SCALAR}, + {5, UPB_SIZE(1, 1), 5, 0, 8, _UPB_MODE_SCALAR}, + {6, UPB_SIZE(2, 2), 6, 0, 8, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_MethodDescriptorProto_msginit = { &google_protobuf_MethodDescriptorProto_submsgs[0], &google_protobuf_MethodDescriptorProto__fields[0], - UPB_SIZE(32, 64), 6, false, 255, + UPB_SIZE(32, 64), 6, false, 6, 255, }; static const upb_msglayout *const google_protobuf_FileOptions_submsgs[1] = { @@ -3946,33 +4225,33 @@ static const upb_msglayout *const google_protobuf_FileOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_FileOptions__fields[21] = { - {1, UPB_SIZE(20, 24), 1, 0, 12, 1}, - {8, UPB_SIZE(28, 40), 2, 0, 12, 1}, - {9, UPB_SIZE(4, 4), 3, 0, 14, 1}, - {10, UPB_SIZE(8, 8), 4, 0, 8, 1}, - {11, UPB_SIZE(36, 56), 5, 0, 12, 1}, - {16, UPB_SIZE(9, 9), 6, 0, 8, 1}, - {17, UPB_SIZE(10, 10), 7, 0, 8, 1}, - {18, UPB_SIZE(11, 11), 8, 0, 8, 1}, - {20, UPB_SIZE(12, 12), 9, 0, 8, 1}, - {23, UPB_SIZE(13, 13), 10, 0, 8, 1}, - {27, UPB_SIZE(14, 14), 11, 0, 8, 1}, - {31, UPB_SIZE(15, 15), 12, 0, 8, 1}, - {36, UPB_SIZE(44, 72), 13, 0, 12, 1}, - {37, UPB_SIZE(52, 88), 14, 0, 12, 1}, - {39, UPB_SIZE(60, 104), 15, 0, 12, 1}, - {40, UPB_SIZE(68, 120), 16, 0, 12, 1}, - {41, UPB_SIZE(76, 136), 17, 0, 12, 1}, - {42, UPB_SIZE(16, 16), 18, 0, 8, 1}, - {44, UPB_SIZE(84, 152), 19, 0, 12, 1}, - {45, UPB_SIZE(92, 168), 20, 0, 12, 1}, - {999, UPB_SIZE(100, 184), 0, 0, 11, 3}, + {1, UPB_SIZE(20, 24), 1, 0, 12, _UPB_MODE_SCALAR}, + {8, UPB_SIZE(28, 40), 2, 0, 12, _UPB_MODE_SCALAR}, + {9, UPB_SIZE(4, 4), 3, 0, 14, _UPB_MODE_SCALAR}, + {10, UPB_SIZE(8, 8), 4, 0, 8, _UPB_MODE_SCALAR}, + {11, UPB_SIZE(36, 56), 5, 0, 12, _UPB_MODE_SCALAR}, + {16, UPB_SIZE(9, 9), 6, 0, 8, _UPB_MODE_SCALAR}, + {17, UPB_SIZE(10, 10), 7, 0, 8, _UPB_MODE_SCALAR}, + {18, UPB_SIZE(11, 11), 8, 0, 8, _UPB_MODE_SCALAR}, + {20, UPB_SIZE(12, 12), 9, 0, 8, _UPB_MODE_SCALAR}, + {23, UPB_SIZE(13, 13), 10, 0, 8, _UPB_MODE_SCALAR}, + {27, UPB_SIZE(14, 14), 11, 0, 8, _UPB_MODE_SCALAR}, + {31, UPB_SIZE(15, 15), 12, 0, 8, _UPB_MODE_SCALAR}, + {36, UPB_SIZE(44, 72), 13, 0, 12, _UPB_MODE_SCALAR}, + {37, UPB_SIZE(52, 88), 14, 0, 12, _UPB_MODE_SCALAR}, + {39, UPB_SIZE(60, 104), 15, 0, 12, _UPB_MODE_SCALAR}, + {40, UPB_SIZE(68, 120), 16, 0, 12, _UPB_MODE_SCALAR}, + {41, UPB_SIZE(76, 136), 17, 0, 12, _UPB_MODE_SCALAR}, + {42, UPB_SIZE(16, 16), 18, 0, 8, _UPB_MODE_SCALAR}, + {44, UPB_SIZE(84, 152), 19, 0, 12, _UPB_MODE_SCALAR}, + {45, UPB_SIZE(92, 168), 20, 0, 12, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(100, 184), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_FileOptions_msginit = { &google_protobuf_FileOptions_submsgs[0], &google_protobuf_FileOptions__fields[0], - UPB_SIZE(104, 192), 21, false, 255, + UPB_SIZE(104, 192), 21, false, 1, 255, }; static const upb_msglayout *const google_protobuf_MessageOptions_submsgs[1] = { @@ -3980,17 +4259,17 @@ static const upb_msglayout *const google_protobuf_MessageOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_MessageOptions__fields[5] = { - {1, UPB_SIZE(1, 1), 1, 0, 8, 1}, - {2, UPB_SIZE(2, 2), 2, 0, 8, 1}, - {3, UPB_SIZE(3, 3), 3, 0, 8, 1}, - {7, UPB_SIZE(4, 4), 4, 0, 8, 1}, - {999, UPB_SIZE(8, 8), 0, 0, 11, 3}, + {1, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(2, 2), 2, 0, 8, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(3, 3), 3, 0, 8, _UPB_MODE_SCALAR}, + {7, UPB_SIZE(4, 4), 4, 0, 8, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(8, 8), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_MessageOptions_msginit = { &google_protobuf_MessageOptions_submsgs[0], &google_protobuf_MessageOptions__fields[0], - UPB_SIZE(16, 16), 5, false, 255, + UPB_SIZE(16, 16), 5, false, 3, 255, }; static const upb_msglayout *const google_protobuf_FieldOptions_submsgs[1] = { @@ -3998,19 +4277,19 @@ static const upb_msglayout *const google_protobuf_FieldOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_FieldOptions__fields[7] = { - {1, UPB_SIZE(4, 4), 1, 0, 14, 1}, - {2, UPB_SIZE(12, 12), 2, 0, 8, 1}, - {3, UPB_SIZE(13, 13), 3, 0, 8, 1}, - {5, UPB_SIZE(14, 14), 4, 0, 8, 1}, - {6, UPB_SIZE(8, 8), 5, 0, 14, 1}, - {10, UPB_SIZE(15, 15), 6, 0, 8, 1}, - {999, UPB_SIZE(16, 16), 0, 0, 11, 3}, + {1, UPB_SIZE(4, 4), 1, 0, 14, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(12, 12), 2, 0, 8, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(13, 13), 3, 0, 8, _UPB_MODE_SCALAR}, + {5, UPB_SIZE(14, 14), 4, 0, 8, _UPB_MODE_SCALAR}, + {6, UPB_SIZE(8, 8), 5, 0, 14, _UPB_MODE_SCALAR}, + {10, UPB_SIZE(15, 15), 6, 0, 8, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(16, 16), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_FieldOptions_msginit = { &google_protobuf_FieldOptions_submsgs[0], &google_protobuf_FieldOptions__fields[0], - UPB_SIZE(24, 24), 7, false, 255, + UPB_SIZE(24, 24), 7, false, 3, 255, }; static const upb_msglayout *const google_protobuf_OneofOptions_submsgs[1] = { @@ -4018,13 +4297,13 @@ static const upb_msglayout *const google_protobuf_OneofOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_OneofOptions__fields[1] = { - {999, UPB_SIZE(0, 0), 0, 0, 11, 3}, + {999, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_OneofOptions_msginit = { &google_protobuf_OneofOptions_submsgs[0], &google_protobuf_OneofOptions__fields[0], - UPB_SIZE(8, 8), 1, false, 255, + UPB_SIZE(8, 8), 1, false, 0, 255, }; static const upb_msglayout *const google_protobuf_EnumOptions_submsgs[1] = { @@ -4032,15 +4311,15 @@ static const upb_msglayout *const google_protobuf_EnumOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_EnumOptions__fields[3] = { - {2, UPB_SIZE(1, 1), 1, 0, 8, 1}, - {3, UPB_SIZE(2, 2), 2, 0, 8, 1}, - {999, UPB_SIZE(4, 8), 0, 0, 11, 3}, + {2, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(2, 2), 2, 0, 8, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(4, 8), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_EnumOptions_msginit = { &google_protobuf_EnumOptions_submsgs[0], &google_protobuf_EnumOptions__fields[0], - UPB_SIZE(8, 16), 3, false, 255, + UPB_SIZE(8, 16), 3, false, 0, 255, }; static const upb_msglayout *const google_protobuf_EnumValueOptions_submsgs[1] = { @@ -4048,14 +4327,14 @@ static const upb_msglayout *const google_protobuf_EnumValueOptions_submsgs[1] = }; static const upb_msglayout_field google_protobuf_EnumValueOptions__fields[2] = { - {1, UPB_SIZE(1, 1), 1, 0, 8, 1}, - {999, UPB_SIZE(4, 8), 0, 0, 11, 3}, + {1, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(4, 8), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_EnumValueOptions_msginit = { &google_protobuf_EnumValueOptions_submsgs[0], &google_protobuf_EnumValueOptions__fields[0], - UPB_SIZE(8, 16), 2, false, 255, + UPB_SIZE(8, 16), 2, false, 1, 255, }; static const upb_msglayout *const google_protobuf_ServiceOptions_submsgs[1] = { @@ -4063,14 +4342,14 @@ static const upb_msglayout *const google_protobuf_ServiceOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_ServiceOptions__fields[2] = { - {33, UPB_SIZE(1, 1), 1, 0, 8, 1}, - {999, UPB_SIZE(4, 8), 0, 0, 11, 3}, + {33, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(4, 8), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_ServiceOptions_msginit = { &google_protobuf_ServiceOptions_submsgs[0], &google_protobuf_ServiceOptions__fields[0], - UPB_SIZE(8, 16), 2, false, 255, + UPB_SIZE(8, 16), 2, false, 0, 255, }; static const upb_msglayout *const google_protobuf_MethodOptions_submsgs[1] = { @@ -4078,15 +4357,15 @@ static const upb_msglayout *const google_protobuf_MethodOptions_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_MethodOptions__fields[3] = { - {33, UPB_SIZE(8, 8), 1, 0, 8, 1}, - {34, UPB_SIZE(4, 4), 2, 0, 14, 1}, - {999, UPB_SIZE(12, 16), 0, 0, 11, 3}, + {33, UPB_SIZE(8, 8), 1, 0, 8, _UPB_MODE_SCALAR}, + {34, UPB_SIZE(4, 4), 2, 0, 14, _UPB_MODE_SCALAR}, + {999, UPB_SIZE(12, 16), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_MethodOptions_msginit = { &google_protobuf_MethodOptions_submsgs[0], &google_protobuf_MethodOptions__fields[0], - UPB_SIZE(16, 24), 3, false, 255, + UPB_SIZE(16, 24), 3, false, 0, 255, }; static const upb_msglayout *const google_protobuf_UninterpretedOption_submsgs[1] = { @@ -4094,30 +4373,30 @@ static const upb_msglayout *const google_protobuf_UninterpretedOption_submsgs[1] }; static const upb_msglayout_field google_protobuf_UninterpretedOption__fields[7] = { - {2, UPB_SIZE(56, 80), 0, 0, 11, 3}, - {3, UPB_SIZE(32, 32), 1, 0, 12, 1}, - {4, UPB_SIZE(8, 8), 2, 0, 4, 1}, - {5, UPB_SIZE(16, 16), 3, 0, 3, 1}, - {6, UPB_SIZE(24, 24), 4, 0, 1, 1}, - {7, UPB_SIZE(40, 48), 5, 0, 12, 1}, - {8, UPB_SIZE(48, 64), 6, 0, 12, 1}, + {2, UPB_SIZE(56, 80), 0, 0, 11, _UPB_MODE_ARRAY}, + {3, UPB_SIZE(32, 32), 1, 0, 12, _UPB_MODE_SCALAR}, + {4, UPB_SIZE(8, 8), 2, 0, 4, _UPB_MODE_SCALAR}, + {5, UPB_SIZE(16, 16), 3, 0, 3, _UPB_MODE_SCALAR}, + {6, UPB_SIZE(24, 24), 4, 0, 1, _UPB_MODE_SCALAR}, + {7, UPB_SIZE(40, 48), 5, 0, 12, _UPB_MODE_SCALAR}, + {8, UPB_SIZE(48, 64), 6, 0, 12, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_UninterpretedOption_msginit = { &google_protobuf_UninterpretedOption_submsgs[0], &google_protobuf_UninterpretedOption__fields[0], - UPB_SIZE(64, 96), 7, false, 255, + UPB_SIZE(64, 96), 7, false, 0, 255, }; static const upb_msglayout_field google_protobuf_UninterpretedOption_NamePart__fields[2] = { - {1, UPB_SIZE(4, 8), 1, 0, 12, 2}, - {2, UPB_SIZE(1, 1), 2, 0, 8, 2}, + {1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {2, UPB_SIZE(1, 1), 2, 0, 8, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_UninterpretedOption_NamePart_msginit = { NULL, &google_protobuf_UninterpretedOption_NamePart__fields[0], - UPB_SIZE(16, 32), 2, false, 255, + UPB_SIZE(16, 32), 2, false, 2, 255, }; static const upb_msglayout *const google_protobuf_SourceCodeInfo_submsgs[1] = { @@ -4125,27 +4404,27 @@ static const upb_msglayout *const google_protobuf_SourceCodeInfo_submsgs[1] = { }; static const upb_msglayout_field google_protobuf_SourceCodeInfo__fields[1] = { - {1, UPB_SIZE(0, 0), 0, 0, 11, 3}, + {1, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_SourceCodeInfo_msginit = { &google_protobuf_SourceCodeInfo_submsgs[0], &google_protobuf_SourceCodeInfo__fields[0], - UPB_SIZE(8, 8), 1, false, 255, + UPB_SIZE(8, 8), 1, false, 1, 255, }; static const upb_msglayout_field google_protobuf_SourceCodeInfo_Location__fields[5] = { - {1, UPB_SIZE(20, 40), 0, 0, 5, _UPB_LABEL_PACKED}, - {2, UPB_SIZE(24, 48), 0, 0, 5, _UPB_LABEL_PACKED}, - {3, UPB_SIZE(4, 8), 1, 0, 12, 1}, - {4, UPB_SIZE(12, 24), 2, 0, 12, 1}, - {6, UPB_SIZE(28, 56), 0, 0, 12, 3}, + {1, UPB_SIZE(20, 40), 0, 0, 5, _UPB_MODE_ARRAY | _UPB_MODE_IS_PACKED}, + {2, UPB_SIZE(24, 48), 0, 0, 5, _UPB_MODE_ARRAY | _UPB_MODE_IS_PACKED}, + {3, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, + {4, UPB_SIZE(12, 24), 2, 0, 12, _UPB_MODE_SCALAR}, + {6, UPB_SIZE(28, 56), 0, 0, 12, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_SourceCodeInfo_Location_msginit = { NULL, &google_protobuf_SourceCodeInfo_Location__fields[0], - UPB_SIZE(32, 64), 5, false, 255, + UPB_SIZE(32, 64), 5, false, 4, 255, }; static const upb_msglayout *const google_protobuf_GeneratedCodeInfo_submsgs[1] = { @@ -4153,26 +4432,26 @@ static const upb_msglayout *const google_protobuf_GeneratedCodeInfo_submsgs[1] = }; static const upb_msglayout_field google_protobuf_GeneratedCodeInfo__fields[1] = { - {1, UPB_SIZE(0, 0), 0, 0, 11, 3}, + {1, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, }; const upb_msglayout google_protobuf_GeneratedCodeInfo_msginit = { &google_protobuf_GeneratedCodeInfo_submsgs[0], &google_protobuf_GeneratedCodeInfo__fields[0], - UPB_SIZE(8, 8), 1, false, 255, + UPB_SIZE(8, 8), 1, false, 1, 255, }; static const upb_msglayout_field google_protobuf_GeneratedCodeInfo_Annotation__fields[4] = { - {1, UPB_SIZE(20, 32), 0, 0, 5, _UPB_LABEL_PACKED}, - {2, UPB_SIZE(12, 16), 1, 0, 12, 1}, - {3, UPB_SIZE(4, 4), 2, 0, 5, 1}, - {4, UPB_SIZE(8, 8), 3, 0, 5, 1}, + {1, UPB_SIZE(20, 32), 0, 0, 5, _UPB_MODE_ARRAY | _UPB_MODE_IS_PACKED}, + {2, UPB_SIZE(12, 16), 1, 0, 12, _UPB_MODE_SCALAR}, + {3, UPB_SIZE(4, 4), 2, 0, 5, _UPB_MODE_SCALAR}, + {4, UPB_SIZE(8, 8), 3, 0, 5, _UPB_MODE_SCALAR}, }; const upb_msglayout google_protobuf_GeneratedCodeInfo_Annotation_msginit = { NULL, &google_protobuf_GeneratedCodeInfo_Annotation__fields[0], - UPB_SIZE(24, 48), 4, false, 255, + UPB_SIZE(24, 48), 4, false, 4, 255, }; @@ -5167,13 +5446,44 @@ static int field_number_cmp(const void *p1, const void *p2) { return f1->number - f2->number; } -static void assign_layout_indices(const upb_msgdef *m, upb_msglayout_field *fields) { +static void assign_layout_indices(const upb_msgdef *m, upb_msglayout *l, + upb_msglayout_field *fields) { int i; int n = upb_msgdef_numfields(m); + int dense_below = 0; for (i = 0; i < n; i++) { upb_fielddef *f = (upb_fielddef*)upb_msgdef_itof(m, fields[i].number); UPB_ASSERT(f); f->layout_index = i; + if (i < UINT8_MAX && fields[i].number == i + 1 && + (i == 0 || fields[i-1].number == i)) { + dense_below = i + 1; + } + } + l->dense_below = dense_below; +} + +static void fill_fieldlayout(upb_msglayout_field *field, const upb_fielddef *f) { + field->number = upb_fielddef_number(f); + field->descriptortype = upb_fielddef_descriptortype(f); + + if (field->descriptortype == UPB_DTYPE_STRING && + f->file->syntax == UPB_SYNTAX_PROTO2) { + /* See TableDescriptorType() in upbc/generator.cc for details and + * rationale. */ + field->descriptortype = UPB_DTYPE_BYTES; + } + + if (upb_fielddef_ismap(f)) { + field->mode = _UPB_MODE_MAP; + } else if (upb_fielddef_isseq(f)) { + field->mode = _UPB_MODE_ARRAY; + } else { + field->mode = _UPB_MODE_SCALAR; + } + + if (upb_fielddef_packed(f)) { + field->mode |= _UPB_MODE_IS_PACKED; } } @@ -5218,8 +5528,8 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) { const upb_fielddef *val = upb_msgdef_itof(m, 2); fields[0].number = 1; fields[1].number = 2; - fields[0].label = UPB_LABEL_OPTIONAL; - fields[1].label = UPB_LABEL_OPTIONAL; + fields[0].mode = _UPB_MODE_SCALAR; + fields[1].mode = _UPB_MODE_SCALAR; fields[0].presence = 0; fields[1].presence = 0; fields[0].descriptortype = upb_fielddef_descriptortype(key); @@ -5255,22 +5565,7 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) { upb_fielddef* f = upb_msg_iter_field(&it); upb_msglayout_field *field = &fields[upb_fielddef_index(f)]; - field->number = upb_fielddef_number(f); - field->descriptortype = upb_fielddef_descriptortype(f); - field->label = upb_fielddef_label(f); - - if (field->descriptortype == UPB_DTYPE_STRING && - f->file->syntax == UPB_SYNTAX_PROTO2) { - /* See TableDescriptorType() in upbc/generator.cc for details and - * rationale. */ - field->descriptortype = UPB_DTYPE_BYTES; - } - - if (upb_fielddef_ismap(f)) { - field->label = _UPB_LABEL_MAP; - } else if (upb_fielddef_packed(f)) { - field->label = _UPB_LABEL_PACKED; - } + fill_fieldlayout(field, f); if (upb_fielddef_issubmsg(f)) { const upb_msgdef *subm = upb_fielddef_msgsubdef(f); @@ -5346,7 +5641,7 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) { /* Sort fields by number. */ qsort(fields, upb_msgdef_numfields(m), sizeof(*fields), field_number_cmp); - assign_layout_indices(m, fields); + assign_layout_indices(m, l, fields); } static char *strviewdup(symtab_addctx *ctx, upb_strview view) { @@ -6056,13 +6351,18 @@ static void build_filedef( const upb_strview* strs; size_t i, n; - count_types_in_file(file_proto, file); + file->symtab = ctx->symtab; + /* One pass to count and allocate. */ + file->msg_count = 0; + file->enum_count = 0; + file->ext_count = 0; + count_types_in_file(file_proto, file); file->msgs = symtab_alloc(ctx, sizeof(*file->msgs) * file->msg_count); file->enums = symtab_alloc(ctx, sizeof(*file->enums) * file->enum_count); file->exts = symtab_alloc(ctx, sizeof(*file->exts) * file->ext_count); - /* We increment these as defs are added. */ + /* In the second pass we increment these as defs are added. */ file->msg_count = 0; file->enum_count = 0; file->ext_count = 0; @@ -6191,41 +6491,43 @@ static void remove_filedef(upb_symtab *s, upb_filedef *file) { static const upb_filedef *_upb_symtab_addfile( upb_symtab *s, const google_protobuf_FileDescriptorProto *file_proto, const upb_msglayout **layouts, upb_status *status) { - upb_arena *file_arena = upb_arena_new(); - upb_filedef *file; symtab_addctx ctx; + upb_strview name = google_protobuf_FileDescriptorProto_name(file_proto); - if (!file_arena) return NULL; - - file = upb_arena_malloc(file_arena, sizeof(*file)); - if (!file) goto done; + if (upb_strtable_lookup2(&s->files, name.data, name.size, NULL)) { + upb_status_seterrf(status, "duplicate file name (%.*s)", + UPB_STRVIEW_ARGS(name)); + return NULL; + } - ctx.file = file; ctx.symtab = s; - ctx.arena = file_arena; ctx.layouts = layouts; ctx.status = status; + ctx.file = NULL; + ctx.arena = upb_arena_new(); - file->msg_count = 0; - file->enum_count = 0; - file->ext_count = 0; - file->symtab = s; + if (!ctx.arena) { + upb_status_setoom(status); + return NULL; + } if (UPB_UNLIKELY(UPB_SETJMP(ctx.err))) { UPB_ASSERT(!upb_ok(status)); - remove_filedef(s, file); - file = NULL; + if (ctx.file) { + remove_filedef(s, ctx.file); + ctx.file = NULL; + } } else { - build_filedef(&ctx, file, file_proto); - upb_strtable_insert(&s->files, file->name, strlen(file->name), - upb_value_constptr(file), ctx.arena); + ctx.file = symtab_alloc(&ctx, sizeof(*ctx.file)); + build_filedef(&ctx, ctx.file, file_proto); + upb_strtable_insert(&s->files, name.data, name.size, + upb_value_constptr(ctx.file), ctx.arena); UPB_ASSERT(upb_ok(status)); - upb_arena_fuse(s->arena, file_arena); + upb_arena_fuse(s->arena, ctx.arena); } -done: - upb_arena_free(file_arena); - return file; + upb_arena_free(ctx.arena); + return ctx.file; } const upb_filedef *upb_symtab_addfile( @@ -6258,7 +6560,8 @@ bool _upb_symtab_loaddefinit(upb_symtab *s, const upb_def_init *init) { } file = google_protobuf_FileDescriptorProto_parse_ex( - init->descriptor.data, init->descriptor.size, arena, UPB_DECODE_ALIAS); + init->descriptor.data, init->descriptor.size, NULL, UPB_DECODE_ALIAS, + arena); s->bytes_loaded += init->descriptor.size; if (!file) { @@ -8388,7 +8691,17 @@ static void jsonenc_double(jsonenc *e, const char *fmt, double val) { } else if (val != val) { jsonenc_putstr(e, "\"NaN\""); } else { + char *p = e->ptr; jsonenc_printf(e, fmt, val); + + /* printf() is dependent on locales; sadly there is no easy and portable way + * to avoid this. This little post-processing step will translate 1,2 -> 1.2 + * since JSON needs the latter. Arguably a hack, but it is simple and the + * alternatives are far more complicated, platform-dependent, and/or larger + * in code size. */ + for (char *end = e->ptr; p < end; p++) { + if (*p == ',') *p = '.'; + } } } diff --git a/ruby/ext/google/protobuf_c/ruby-upb.h b/ruby/ext/google/protobuf_c/ruby-upb.h index 68d6345fc5..40072772b2 100755 --- a/ruby/ext/google/protobuf_c/ruby-upb.h +++ b/ruby/ext/google/protobuf_c/ruby-upb.h @@ -636,6 +636,48 @@ void upb_msg_addunknown(upb_msg *msg, const char *data, size_t len, /* Returns a reference to the message's unknown data. */ const char *upb_msg_getunknown(const upb_msg *msg, size_t *len); +/** upb_extreg *******************************************************************/ + +/* Extension registry: a dynamic data structure that stores a map of: + * (upb_msglayout, number) -> extension info + * + * upb_decode() uses upb_extreg to look up extensions while parsing binary + * format. + * + * upb_extreg is part of the mini-table (msglayout) family of objects. Like all + * mini-table objects, it is suitable for reflection-less builds that do not + * want to expose names into the binary. + * + * Unlike most mini-table types, upb_extreg requires dynamic memory allocation + * and dynamic initialization: + * * If reflection is being used, then upb_symtab will construct an appropriate + * upb_extreg automatically. + * * For a mini-table only build, the user must manually construct the + * upb_extreg and populate it with all of the extensions the user cares about. + * * A third alternative is to manually unpack relevant extensions after the + * main parse is complete, similar to how Any works. This is perhaps the + * nicest solution from the perspective of reducing dependencies, avoiding + * dynamic memory allocation, and avoiding the need to parse uninteresting + * extensions. The downsides are: + * (1) parse errors are not caught during the main parse + * (2) the CPU hit of parsing comes during access, which could cause an + * undesirable stutter in application performance. + * + * Users cannot directly get or put into this map. Users can only add the + * extensions from a generated module and pass the extension registry to the + * binary decoder. + * + * A upb_symtab provides a upb_extreg, so any users who use reflection do not + * need to populate a upb_extreg directly. + */ + +struct upb_extreg; +typedef struct upb_extreg upb_extreg; + +/* Creates a upb_extreg in the given arena. The arena must outlive any use of + * the extreg. */ +upb_extreg *upb_extreg_new(upb_arena *arena); + #ifdef __cplusplus } /* extern "C" */ #endif @@ -657,12 +699,13 @@ enum { #define UPB_DECODE_MAXDEPTH(depth) ((depth) << 16) bool _upb_decode(const char *buf, size_t size, upb_msg *msg, - const upb_msglayout *l, upb_arena *arena, int options); + const upb_msglayout *l, const upb_extreg *extreg, int options, + upb_arena *arena); UPB_INLINE bool upb_decode(const char *buf, size_t size, upb_msg *msg, const upb_msglayout *l, upb_arena *arena) { - return _upb_decode(buf, size, msg, l, arena, 0); + return _upb_decode(buf, size, msg, l, NULL, 0, arena); } #ifdef __cplusplus @@ -836,6 +879,10 @@ typedef struct upb_tabval { /* upb_table ******************************************************************/ +uint64_t Wyhash(const void *data, size_t len, uint64_t seed, + const uint64_t salt[]); +extern const uint64_t kWyhashSalt[5]; + typedef struct _upb_tabent { upb_tabkey key; upb_tabval val; @@ -1047,9 +1094,34 @@ typedef struct { int16_t presence; /* If >0, hasbit_index. If <0, ~oneof_index. */ uint16_t submsg_index; /* undefined if descriptortype != MESSAGE or GROUP. */ uint8_t descriptortype; - uint8_t label; /* google.protobuf.Label or _UPB_LABEL_* above. */ + int8_t mode; /* upb_fieldmode, with flags from upb_labelflags */ } upb_msglayout_field; +typedef enum { + _UPB_MODE_MAP = 0, + _UPB_MODE_ARRAY = 1, + _UPB_MODE_SCALAR = 2, +} upb_fieldmode; + +/* Extra flags on the mode field. */ +enum upb_labelflags { + _UPB_MODE_IS_PACKED = 4, +}; + +UPB_INLINE upb_fieldmode _upb_getmode(const upb_msglayout_field *field) { + return (upb_fieldmode)(field->mode & 3); +} + +UPB_INLINE bool _upb_repeated_or_map(const upb_msglayout_field *field) { + /* This works because upb_fieldmode has no value 3. */ + return !(field->mode & _UPB_MODE_SCALAR); +} + +UPB_INLINE bool _upb_issubmsg(const upb_msglayout_field *field) { + return field->descriptortype == UPB_DTYPE_MESSAGE || + field->descriptortype == UPB_DTYPE_GROUP; +} + struct upb_decstate; struct upb_msglayout; @@ -1070,27 +1142,65 @@ struct upb_msglayout { uint16_t size; uint16_t field_count; bool extendable; + uint8_t dense_below; uint8_t table_mask; /* To constant-initialize the tables of variable length, we need a flexible * array member, and we need to compile in C99 mode. */ _upb_fasttable_entry fasttable[]; }; +typedef struct { + upb_msglayout_field field; + const upb_msglayout *extendee; + const upb_msglayout *submsg; /* NULL for non-submessage fields. */ +} upb_msglayout_ext; + +/** upb_extreg ****************************************************************/ + +/* Adds the given extension info for message type |l| and field number |num| + * into the registry. Returns false if this message type and field number were + * already in the map, or if memory allocation fails. */ +bool _upb_extreg_add(upb_extreg *r, const upb_msglayout_ext *e, size_t count); + +/* Looks up the extension (if any) defined for message type |l| and field + * number |num|. If an extension was found, copies the field info into |*ext| + * and returns true. Otherwise returns false. */ +const upb_msglayout_field *_upb_extreg_get(const upb_extreg *r, + const upb_msglayout *l, + uint32_t num); + /** upb_msg *******************************************************************/ -/* Internal members of a upb_msg. We can change this without breaking binary - * compatibility. We put these before the user's data. The user's upb_msg* - * points after the upb_msg_internal. */ +/* Internal members of a upb_msg that track unknown fields and/or extensions. + * We can change this without breaking binary compatibility. We put these + * before the user's data. The user's upb_msg* points after the + * upb_msg_internal. */ typedef struct { - uint32_t len; + /* Total size of this structure, including the data that follows. + * Must be aligned to 8, which is alignof(upb_msg_ext) */ uint32_t size; - /* Data follows. */ -} upb_msg_unknowndata; -/* Used when a message is not extendable. */ + /* Offsets relative to the beginning of this structure. + * + * Unknown data grows forward from the beginning to unknown_end. + * Extension data grows backward from size to ext_begin. + * When the two meet, we're out of data and have to realloc. + * + * If we imagine that the final member of this struct is: + * char data[size - overhead]; // overhead = sizeof(upb_msg_internaldata) + * + * Then we have: + * unknown data: data[0 .. (unknown_end - overhead)] + * extensions data: data[(ext_begin - overhead) .. (size - overhead)] */ + uint32_t unknown_end; + uint32_t ext_begin; + /* Data follows, as if there were an array: + * char data[size - sizeof(upb_msg_internaldata)]; */ +} upb_msg_internaldata; + typedef struct { - upb_msg_unknowndata *unknown; + upb_msg_internaldata *internal; } upb_msg_internal; /* Maps upb_fieldtype_t -> memory size. */ @@ -1129,6 +1239,35 @@ void _upb_msg_discardunknown_shallow(upb_msg *msg); bool _upb_msg_addunknown(upb_msg *msg, const char *data, size_t len, upb_arena *arena); +/** upb_msg_ext ***************************************************************/ + +/* The internal representation of an extension is self-describing: it contains + * enough information that we can serialize it to binary format without needing + * to look it up in a registry. */ +typedef struct { + const upb_msglayout_ext *ext; + union { + upb_strview str; + void *ptr; + double dbl; + char scalar_data[8]; + } data; +} upb_msg_ext; + +/* Adds the given extension data to the given message. The returned extension will + * have its "ext" member initialized according to |ext|. */ +upb_msg_ext *_upb_msg_getorcreateext(upb_msg *msg, const upb_msglayout_ext *ext, + upb_arena *arena); + +/* Returns an array of extensions for this message. Note: the array is + * ordered in reverse relative to the order of creation. */ +const upb_msg_ext *_upb_msg_getexts(const upb_msg *msg, size_t *count); + +/* Returns an extension for the given field number, or NULL if no extension + * exists for this field number. */ +const upb_msg_ext *_upb_msg_getext(const upb_msg *msg, + const upb_msglayout_ext *ext); + /** Hasbit access *************************************************************/ UPB_INLINE bool _upb_hasbit(const upb_msg *msg, size_t idx) { @@ -1192,14 +1331,6 @@ UPB_INLINE bool _upb_has_submsg_nohasbit(const upb_msg *msg, size_t ofs) { return *UPB_PTR_AT(msg, ofs, const upb_msg*) != NULL; } -UPB_INLINE bool _upb_isrepeated(const upb_msglayout_field *field) { - return (field->label & 3) == UPB_LABEL_REPEATED; -} - -UPB_INLINE bool _upb_repeated_or_map(const upb_msglayout_field *field) { - return field->label >= UPB_LABEL_REPEATED; -} - /** upb_array *****************************************************************/ /* Our internal representation for repeated fields. */ @@ -2121,13 +2252,19 @@ UPB_INLINE google_protobuf_FileDescriptorSet *google_protobuf_FileDescriptorSet_ UPB_INLINE google_protobuf_FileDescriptorSet *google_protobuf_FileDescriptorSet_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_FileDescriptorSet *ret = google_protobuf_FileDescriptorSet_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_FileDescriptorSet_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_FileDescriptorSet_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_FileDescriptorSet *google_protobuf_FileDescriptorSet_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_FileDescriptorSet *ret = google_protobuf_FileDescriptorSet_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_FileDescriptorSet_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_FileDescriptorSet_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_FileDescriptorSet_serialize(const google_protobuf_FileDescriptorSet *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_FileDescriptorSet_msginit, arena, len); @@ -2158,13 +2295,19 @@ UPB_INLINE google_protobuf_FileDescriptorProto *google_protobuf_FileDescriptorPr UPB_INLINE google_protobuf_FileDescriptorProto *google_protobuf_FileDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_FileDescriptorProto *ret = google_protobuf_FileDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_FileDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_FileDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_FileDescriptorProto *google_protobuf_FileDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_FileDescriptorProto *ret = google_protobuf_FileDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_FileDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_FileDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_FileDescriptorProto_serialize(const google_protobuf_FileDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_FileDescriptorProto_msginit, arena, len); @@ -2321,13 +2464,19 @@ UPB_INLINE google_protobuf_DescriptorProto *google_protobuf_DescriptorProto_new( UPB_INLINE google_protobuf_DescriptorProto *google_protobuf_DescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_DescriptorProto *ret = google_protobuf_DescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_DescriptorProto *google_protobuf_DescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_DescriptorProto *ret = google_protobuf_DescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_DescriptorProto_serialize(const google_protobuf_DescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_DescriptorProto_msginit, arena, len); @@ -2480,13 +2629,19 @@ UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange *google_protobuf_Descr UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange *google_protobuf_DescriptorProto_ExtensionRange_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_DescriptorProto_ExtensionRange *ret = google_protobuf_DescriptorProto_ExtensionRange_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ExtensionRange_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ExtensionRange_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_DescriptorProto_ExtensionRange *google_protobuf_DescriptorProto_ExtensionRange_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_DescriptorProto_ExtensionRange *ret = google_protobuf_DescriptorProto_ExtensionRange_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ExtensionRange_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ExtensionRange_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_DescriptorProto_ExtensionRange_serialize(const google_protobuf_DescriptorProto_ExtensionRange *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_DescriptorProto_ExtensionRange_msginit, arena, len); @@ -2529,13 +2684,19 @@ UPB_INLINE google_protobuf_DescriptorProto_ReservedRange *google_protobuf_Descri UPB_INLINE google_protobuf_DescriptorProto_ReservedRange *google_protobuf_DescriptorProto_ReservedRange_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_DescriptorProto_ReservedRange *ret = google_protobuf_DescriptorProto_ReservedRange_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ReservedRange_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ReservedRange_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_DescriptorProto_ReservedRange *google_protobuf_DescriptorProto_ReservedRange_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_DescriptorProto_ReservedRange *ret = google_protobuf_DescriptorProto_ReservedRange_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ReservedRange_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_DescriptorProto_ReservedRange_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_DescriptorProto_ReservedRange_serialize(const google_protobuf_DescriptorProto_ReservedRange *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_DescriptorProto_ReservedRange_msginit, arena, len); @@ -2563,13 +2724,19 @@ UPB_INLINE google_protobuf_ExtensionRangeOptions *google_protobuf_ExtensionRange UPB_INLINE google_protobuf_ExtensionRangeOptions *google_protobuf_ExtensionRangeOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_ExtensionRangeOptions *ret = google_protobuf_ExtensionRangeOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_ExtensionRangeOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_ExtensionRangeOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_ExtensionRangeOptions *google_protobuf_ExtensionRangeOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_ExtensionRangeOptions *ret = google_protobuf_ExtensionRangeOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_ExtensionRangeOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_ExtensionRangeOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_ExtensionRangeOptions_serialize(const google_protobuf_ExtensionRangeOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_ExtensionRangeOptions_msginit, arena, len); @@ -2600,13 +2767,19 @@ UPB_INLINE google_protobuf_FieldDescriptorProto *google_protobuf_FieldDescriptor UPB_INLINE google_protobuf_FieldDescriptorProto *google_protobuf_FieldDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_FieldDescriptorProto *ret = google_protobuf_FieldDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_FieldDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_FieldDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_FieldDescriptorProto *google_protobuf_FieldDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_FieldDescriptorProto *ret = google_protobuf_FieldDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_FieldDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_FieldDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_FieldDescriptorProto_serialize(const google_protobuf_FieldDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_FieldDescriptorProto_msginit, arena, len); @@ -2697,13 +2870,19 @@ UPB_INLINE google_protobuf_OneofDescriptorProto *google_protobuf_OneofDescriptor UPB_INLINE google_protobuf_OneofDescriptorProto *google_protobuf_OneofDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_OneofDescriptorProto *ret = google_protobuf_OneofDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_OneofDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_OneofDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_OneofDescriptorProto *google_protobuf_OneofDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_OneofDescriptorProto *ret = google_protobuf_OneofDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_OneofDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_OneofDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_OneofDescriptorProto_serialize(const google_protobuf_OneofDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_OneofDescriptorProto_msginit, arena, len); @@ -2740,13 +2919,19 @@ UPB_INLINE google_protobuf_EnumDescriptorProto *google_protobuf_EnumDescriptorPr UPB_INLINE google_protobuf_EnumDescriptorProto *google_protobuf_EnumDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_EnumDescriptorProto *ret = google_protobuf_EnumDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_EnumDescriptorProto *google_protobuf_EnumDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_EnumDescriptorProto *ret = google_protobuf_EnumDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_EnumDescriptorProto_serialize(const google_protobuf_EnumDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_EnumDescriptorProto_msginit, arena, len); @@ -2824,13 +3009,19 @@ UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange *google_protobu UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange *google_protobuf_EnumDescriptorProto_EnumReservedRange_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_EnumDescriptorProto_EnumReservedRange *ret = google_protobuf_EnumDescriptorProto_EnumReservedRange_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_EnumDescriptorProto_EnumReservedRange *google_protobuf_EnumDescriptorProto_EnumReservedRange_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_EnumDescriptorProto_EnumReservedRange *ret = google_protobuf_EnumDescriptorProto_EnumReservedRange_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_EnumDescriptorProto_EnumReservedRange_serialize(const google_protobuf_EnumDescriptorProto_EnumReservedRange *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit, arena, len); @@ -2858,13 +3049,19 @@ UPB_INLINE google_protobuf_EnumValueDescriptorProto *google_protobuf_EnumValueDe UPB_INLINE google_protobuf_EnumValueDescriptorProto *google_protobuf_EnumValueDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_EnumValueDescriptorProto *ret = google_protobuf_EnumValueDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_EnumValueDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_EnumValueDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_EnumValueDescriptorProto *google_protobuf_EnumValueDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_EnumValueDescriptorProto *ret = google_protobuf_EnumValueDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_EnumValueDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_EnumValueDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_EnumValueDescriptorProto_serialize(const google_protobuf_EnumValueDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_EnumValueDescriptorProto_msginit, arena, len); @@ -2907,13 +3104,19 @@ UPB_INLINE google_protobuf_ServiceDescriptorProto *google_protobuf_ServiceDescri UPB_INLINE google_protobuf_ServiceDescriptorProto *google_protobuf_ServiceDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_ServiceDescriptorProto *ret = google_protobuf_ServiceDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_ServiceDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_ServiceDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_ServiceDescriptorProto *google_protobuf_ServiceDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_ServiceDescriptorProto *ret = google_protobuf_ServiceDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_ServiceDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_ServiceDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_ServiceDescriptorProto_serialize(const google_protobuf_ServiceDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_ServiceDescriptorProto_msginit, arena, len); @@ -2965,13 +3168,19 @@ UPB_INLINE google_protobuf_MethodDescriptorProto *google_protobuf_MethodDescript UPB_INLINE google_protobuf_MethodDescriptorProto *google_protobuf_MethodDescriptorProto_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_MethodDescriptorProto *ret = google_protobuf_MethodDescriptorProto_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_MethodDescriptorProto_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_MethodDescriptorProto_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_MethodDescriptorProto *google_protobuf_MethodDescriptorProto_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_MethodDescriptorProto *ret = google_protobuf_MethodDescriptorProto_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_MethodDescriptorProto_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_MethodDescriptorProto_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_MethodDescriptorProto_serialize(const google_protobuf_MethodDescriptorProto *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_MethodDescriptorProto_msginit, arena, len); @@ -3032,13 +3241,19 @@ UPB_INLINE google_protobuf_FileOptions *google_protobuf_FileOptions_new(upb_aren UPB_INLINE google_protobuf_FileOptions *google_protobuf_FileOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_FileOptions *ret = google_protobuf_FileOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_FileOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_FileOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_FileOptions *google_protobuf_FileOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_FileOptions *ret = google_protobuf_FileOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_FileOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_FileOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_FileOptions_serialize(const google_protobuf_FileOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_FileOptions_msginit, arena, len); @@ -3189,13 +3404,19 @@ UPB_INLINE google_protobuf_MessageOptions *google_protobuf_MessageOptions_new(up UPB_INLINE google_protobuf_MessageOptions *google_protobuf_MessageOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_MessageOptions *ret = google_protobuf_MessageOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_MessageOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_MessageOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_MessageOptions *google_protobuf_MessageOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_MessageOptions *ret = google_protobuf_MessageOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_MessageOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_MessageOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_MessageOptions_serialize(const google_protobuf_MessageOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_MessageOptions_msginit, arena, len); @@ -3250,13 +3471,19 @@ UPB_INLINE google_protobuf_FieldOptions *google_protobuf_FieldOptions_new(upb_ar UPB_INLINE google_protobuf_FieldOptions *google_protobuf_FieldOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_FieldOptions *ret = google_protobuf_FieldOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_FieldOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_FieldOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_FieldOptions *google_protobuf_FieldOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_FieldOptions *ret = google_protobuf_FieldOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_FieldOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_FieldOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_FieldOptions_serialize(const google_protobuf_FieldOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_FieldOptions_msginit, arena, len); @@ -3323,13 +3550,19 @@ UPB_INLINE google_protobuf_OneofOptions *google_protobuf_OneofOptions_new(upb_ar UPB_INLINE google_protobuf_OneofOptions *google_protobuf_OneofOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_OneofOptions *ret = google_protobuf_OneofOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_OneofOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_OneofOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_OneofOptions *google_protobuf_OneofOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_OneofOptions *ret = google_protobuf_OneofOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_OneofOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_OneofOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_OneofOptions_serialize(const google_protobuf_OneofOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_OneofOptions_msginit, arena, len); @@ -3360,13 +3593,19 @@ UPB_INLINE google_protobuf_EnumOptions *google_protobuf_EnumOptions_new(upb_aren UPB_INLINE google_protobuf_EnumOptions *google_protobuf_EnumOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_EnumOptions *ret = google_protobuf_EnumOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_EnumOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_EnumOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_EnumOptions *google_protobuf_EnumOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_EnumOptions *ret = google_protobuf_EnumOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_EnumOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_EnumOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_EnumOptions_serialize(const google_protobuf_EnumOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_EnumOptions_msginit, arena, len); @@ -3409,13 +3648,19 @@ UPB_INLINE google_protobuf_EnumValueOptions *google_protobuf_EnumValueOptions_ne UPB_INLINE google_protobuf_EnumValueOptions *google_protobuf_EnumValueOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_EnumValueOptions *ret = google_protobuf_EnumValueOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_EnumValueOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_EnumValueOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_EnumValueOptions *google_protobuf_EnumValueOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_EnumValueOptions *ret = google_protobuf_EnumValueOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_EnumValueOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_EnumValueOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_EnumValueOptions_serialize(const google_protobuf_EnumValueOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_EnumValueOptions_msginit, arena, len); @@ -3452,13 +3697,19 @@ UPB_INLINE google_protobuf_ServiceOptions *google_protobuf_ServiceOptions_new(up UPB_INLINE google_protobuf_ServiceOptions *google_protobuf_ServiceOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_ServiceOptions *ret = google_protobuf_ServiceOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_ServiceOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_ServiceOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_ServiceOptions *google_protobuf_ServiceOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_ServiceOptions *ret = google_protobuf_ServiceOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_ServiceOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_ServiceOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_ServiceOptions_serialize(const google_protobuf_ServiceOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_ServiceOptions_msginit, arena, len); @@ -3495,13 +3746,19 @@ UPB_INLINE google_protobuf_MethodOptions *google_protobuf_MethodOptions_new(upb_ UPB_INLINE google_protobuf_MethodOptions *google_protobuf_MethodOptions_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_MethodOptions *ret = google_protobuf_MethodOptions_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_MethodOptions_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_MethodOptions_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_MethodOptions *google_protobuf_MethodOptions_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_MethodOptions *ret = google_protobuf_MethodOptions_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_MethodOptions_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_MethodOptions_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_MethodOptions_serialize(const google_protobuf_MethodOptions *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_MethodOptions_msginit, arena, len); @@ -3544,13 +3801,19 @@ UPB_INLINE google_protobuf_UninterpretedOption *google_protobuf_UninterpretedOpt UPB_INLINE google_protobuf_UninterpretedOption *google_protobuf_UninterpretedOption_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_UninterpretedOption *ret = google_protobuf_UninterpretedOption_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_UninterpretedOption *google_protobuf_UninterpretedOption_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_UninterpretedOption *ret = google_protobuf_UninterpretedOption_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_UninterpretedOption_serialize(const google_protobuf_UninterpretedOption *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_UninterpretedOption_msginit, arena, len); @@ -3617,13 +3880,19 @@ UPB_INLINE google_protobuf_UninterpretedOption_NamePart *google_protobuf_Uninter UPB_INLINE google_protobuf_UninterpretedOption_NamePart *google_protobuf_UninterpretedOption_NamePart_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_UninterpretedOption_NamePart *ret = google_protobuf_UninterpretedOption_NamePart_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_NamePart_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_NamePart_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_UninterpretedOption_NamePart *google_protobuf_UninterpretedOption_NamePart_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_UninterpretedOption_NamePart *ret = google_protobuf_UninterpretedOption_NamePart_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_NamePart_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_UninterpretedOption_NamePart_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_UninterpretedOption_NamePart_serialize(const google_protobuf_UninterpretedOption_NamePart *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_UninterpretedOption_NamePart_msginit, arena, len); @@ -3651,13 +3920,19 @@ UPB_INLINE google_protobuf_SourceCodeInfo *google_protobuf_SourceCodeInfo_new(up UPB_INLINE google_protobuf_SourceCodeInfo *google_protobuf_SourceCodeInfo_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_SourceCodeInfo *ret = google_protobuf_SourceCodeInfo_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_SourceCodeInfo *google_protobuf_SourceCodeInfo_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_SourceCodeInfo *ret = google_protobuf_SourceCodeInfo_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_SourceCodeInfo_serialize(const google_protobuf_SourceCodeInfo *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_SourceCodeInfo_msginit, arena, len); @@ -3688,13 +3963,19 @@ UPB_INLINE google_protobuf_SourceCodeInfo_Location *google_protobuf_SourceCodeIn UPB_INLINE google_protobuf_SourceCodeInfo_Location *google_protobuf_SourceCodeInfo_Location_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_SourceCodeInfo_Location *ret = google_protobuf_SourceCodeInfo_Location_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_Location_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_Location_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_SourceCodeInfo_Location *google_protobuf_SourceCodeInfo_Location_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_SourceCodeInfo_Location *ret = google_protobuf_SourceCodeInfo_Location_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_Location_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_SourceCodeInfo_Location_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_SourceCodeInfo_Location_serialize(const google_protobuf_SourceCodeInfo_Location *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_SourceCodeInfo_Location_msginit, arena, len); @@ -3755,13 +4036,19 @@ UPB_INLINE google_protobuf_GeneratedCodeInfo *google_protobuf_GeneratedCodeInfo_ UPB_INLINE google_protobuf_GeneratedCodeInfo *google_protobuf_GeneratedCodeInfo_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_GeneratedCodeInfo *ret = google_protobuf_GeneratedCodeInfo_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_GeneratedCodeInfo *google_protobuf_GeneratedCodeInfo_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_GeneratedCodeInfo *ret = google_protobuf_GeneratedCodeInfo_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_GeneratedCodeInfo_serialize(const google_protobuf_GeneratedCodeInfo *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_GeneratedCodeInfo_msginit, arena, len); @@ -3792,13 +4079,19 @@ UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation *google_protobuf_Generat UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation *google_protobuf_GeneratedCodeInfo_Annotation_parse(const char *buf, size_t size, upb_arena *arena) { google_protobuf_GeneratedCodeInfo_Annotation *ret = google_protobuf_GeneratedCodeInfo_Annotation_new(arena); - return (ret && upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_Annotation_msginit, arena)) ? ret : NULL; + if (!ret) return NULL; + if (!upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_Annotation_msginit, arena)) return NULL; + return ret; } UPB_INLINE google_protobuf_GeneratedCodeInfo_Annotation *google_protobuf_GeneratedCodeInfo_Annotation_parse_ex(const char *buf, size_t size, - upb_arena *arena, int options) { + const upb_extreg *extreg, int options, + upb_arena *arena) { google_protobuf_GeneratedCodeInfo_Annotation *ret = google_protobuf_GeneratedCodeInfo_Annotation_new(arena); - return (ret && _upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_Annotation_msginit, arena, options)) - ? ret : NULL; + if (!ret) return NULL; + if (!_upb_decode(buf, size, ret, &google_protobuf_GeneratedCodeInfo_Annotation_msginit, extreg, options, arena)) { + return NULL; + } + return ret; } UPB_INLINE char *google_protobuf_GeneratedCodeInfo_Annotation_serialize(const google_protobuf_GeneratedCodeInfo_Annotation *msg, upb_arena *arena, size_t *len) { return upb_encode(msg, &google_protobuf_GeneratedCodeInfo_Annotation_msginit, arena, len); diff --git a/ruby/lib/google/protobuf/descriptor_dsl.rb b/ruby/lib/google/protobuf/descriptor_dsl.rb index 3c1b8e41d0..ba1a255f04 100644 --- a/ruby/lib/google/protobuf/descriptor_dsl.rb +++ b/ruby/lib/google/protobuf/descriptor_dsl.rb @@ -7,7 +7,24 @@ require 'google/protobuf/descriptor_pb' module Google module Protobuf module Internal + class AtomicCounter + def initialize + @n = 0 + @mu = Mutex.new + end + + def get_and_increment + n = @n + @mu.synchronize { + @n += 1 + } + return n + end + end + class Builder + @@file_number = AtomicCounter.new + def initialize(pool) @pool = pool @default_file = nil # Constructed lazily @@ -42,7 +59,9 @@ module Google end private def internal_default_file - @default_file ||= FileBuilder.new(@pool, "ruby_default_file.proto") + number = @@file_number.get_and_increment + filename = "ruby_default_file#{number}.proto" + @default_file ||= FileBuilder.new(@pool, filename) end end diff --git a/src/Makefile.am b/src/Makefile.am index 50fea7431a..17f5769ec7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -39,18 +39,19 @@ protodir = $(includedir) # If you are adding new files here, also remember to change the build files for # all other languages, //protoc-artifacts/build-zip.sh and run # //update_file_list.sh for bazel. -nobase_dist_proto_DATA = google/protobuf/descriptor.proto \ - google/protobuf/any.proto \ - google/protobuf/api.proto \ - google/protobuf/duration.proto \ - google/protobuf/empty.proto \ - google/protobuf/field_mask.proto \ - google/protobuf/source_context.proto \ - google/protobuf/struct.proto \ - google/protobuf/timestamp.proto \ - google/protobuf/type.proto \ - google/protobuf/wrappers.proto \ - google/protobuf/compiler/plugin.proto +nobase_dist_proto_DATA = \ + google/protobuf/any.proto \ + google/protobuf/api.proto \ + google/protobuf/compiler/plugin.proto \ + google/protobuf/descriptor.proto \ + google/protobuf/duration.proto \ + google/protobuf/empty.proto \ + google/protobuf/field_mask.proto \ + google/protobuf/source_context.proto \ + google/protobuf/struct.proto \ + google/protobuf/timestamp.proto \ + google/protobuf/type.proto \ + google/protobuf/wrappers.proto # Not sure why these don't get cleaned automatically. clean-local: @@ -64,32 +65,34 @@ MAINTAINERCLEANFILES = \ Makefile.in nobase_include_HEADERS = \ - google/protobuf/stubs/callback.h \ - google/protobuf/stubs/bytestream.h \ - google/protobuf/stubs/casts.h \ - google/protobuf/stubs/common.h \ - google/protobuf/stubs/hash.h \ - google/protobuf/stubs/logging.h \ - google/protobuf/stubs/macros.h \ - google/protobuf/stubs/map_util.h \ - google/protobuf/stubs/mutex.h \ - google/protobuf/stubs/once.h \ - google/protobuf/stubs/platform_macros.h \ - google/protobuf/stubs/port.h \ - google/protobuf/stubs/status.h \ - google/protobuf/stubs/stl_util.h \ - google/protobuf/stubs/stringpiece.h \ - google/protobuf/stubs/strutil.h \ - google/protobuf/stubs/template_util.h \ + google/protobuf/any.h \ google/protobuf/any.pb.h \ google/protobuf/api.pb.h \ - google/protobuf/any.h \ google/protobuf/arena.h \ google/protobuf/arena_impl.h \ google/protobuf/arenastring.h \ - google/protobuf/descriptor_database.h \ + google/protobuf/compiler/code_generator.h \ + google/protobuf/compiler/command_line_interface.h \ + google/protobuf/compiler/cpp/cpp_generator.h \ + google/protobuf/compiler/csharp/csharp_generator.h \ + google/protobuf/compiler/csharp/csharp_names.h \ + google/protobuf/compiler/importer.h \ + google/protobuf/compiler/java/java_generator.h \ + google/protobuf/compiler/java/java_kotlin_generator.h \ + google/protobuf/compiler/java/java_names.h \ + google/protobuf/compiler/js/js_generator.h \ + google/protobuf/compiler/js/well_known_types_embed.h \ + google/protobuf/compiler/objectivec/objectivec_generator.h \ + google/protobuf/compiler/objectivec/objectivec_helpers.h \ + google/protobuf/compiler/parser.h \ + google/protobuf/compiler/php/php_generator.h \ + google/protobuf/compiler/plugin.h \ + google/protobuf/compiler/plugin.pb.h \ + google/protobuf/compiler/python/python_generator.h \ + google/protobuf/compiler/ruby/ruby_generator.h \ google/protobuf/descriptor.h \ google/protobuf/descriptor.pb.h \ + google/protobuf/descriptor_database.h \ google/protobuf/duration.pb.h \ google/protobuf/dynamic_message.h \ google/protobuf/empty.pb.h \ @@ -99,28 +102,37 @@ nobase_include_HEADERS = \ google/protobuf/field_mask.pb.h \ google/protobuf/generated_enum_reflection.h \ google/protobuf/generated_enum_util.h \ + google/protobuf/generated_message_bases.h \ google/protobuf/generated_message_reflection.h \ google/protobuf/generated_message_table_driven.h \ google/protobuf/generated_message_util.h \ google/protobuf/has_bits.h \ google/protobuf/implicit_weak_message.h \ google/protobuf/inlined_string_field.h \ - google/protobuf/io/io_win32.h \ + google/protobuf/io/coded_stream.h \ + $(GZHEADERS) \ + google/protobuf/io/io_win32.h \ + google/protobuf/io/printer.h \ + google/protobuf/io/strtod.h \ + google/protobuf/io/tokenizer.h \ + google/protobuf/io/zero_copy_stream.h \ + google/protobuf/io/zero_copy_stream_impl.h \ + google/protobuf/io/zero_copy_stream_impl_lite.h \ + google/protobuf/map.h \ google/protobuf/map_entry.h \ google/protobuf/map_entry_lite.h \ google/protobuf/map_field.h \ google/protobuf/map_field_inl.h \ google/protobuf/map_field_lite.h \ - google/protobuf/map.h \ google/protobuf/map_type_handler.h \ google/protobuf/message.h \ google/protobuf/message_lite.h \ google/protobuf/metadata.h \ google/protobuf/metadata_lite.h \ google/protobuf/parse_context.h \ - google/protobuf/port.h \ google/protobuf/port_def.inc \ google/protobuf/port_undef.inc \ + google/protobuf/port.h \ google/protobuf/reflection.h \ google/protobuf/reflection_ops.h \ google/protobuf/repeated_field.h \ @@ -128,48 +140,38 @@ nobase_include_HEADERS = \ google/protobuf/source_context.pb.h \ google/protobuf/string_member_robber.h \ google/protobuf/struct.pb.h \ + google/protobuf/stubs/bytestream.h \ + google/protobuf/stubs/callback.h \ + google/protobuf/stubs/casts.h \ + google/protobuf/stubs/common.h \ + google/protobuf/stubs/hash.h \ + google/protobuf/stubs/logging.h \ + google/protobuf/stubs/macros.h \ + google/protobuf/stubs/map_util.h \ + google/protobuf/stubs/mutex.h \ + google/protobuf/stubs/once.h \ + google/protobuf/stubs/platform_macros.h \ + google/protobuf/stubs/port.h \ + google/protobuf/stubs/status.h \ + google/protobuf/stubs/stl_util.h \ + google/protobuf/stubs/stringpiece.h \ + google/protobuf/stubs/strutil.h \ + google/protobuf/stubs/template_util.h \ google/protobuf/text_format.h \ google/protobuf/timestamp.pb.h \ google/protobuf/type.pb.h \ google/protobuf/unknown_field_set.h \ - google/protobuf/wire_format.h \ - google/protobuf/wire_format_lite.h \ - google/protobuf/wrappers.pb.h \ - google/protobuf/io/coded_stream.h \ - $(GZHEADERS) \ - google/protobuf/io/printer.h \ - google/protobuf/io/strtod.h \ - google/protobuf/io/tokenizer.h \ - google/protobuf/io/zero_copy_stream.h \ - google/protobuf/io/zero_copy_stream_impl.h \ - google/protobuf/io/zero_copy_stream_impl_lite.h \ - google/protobuf/compiler/code_generator.h \ - google/protobuf/compiler/command_line_interface.h \ - google/protobuf/compiler/importer.h \ - google/protobuf/compiler/parser.h \ - google/protobuf/compiler/plugin.h \ - google/protobuf/compiler/plugin.pb.h \ - google/protobuf/compiler/cpp/cpp_generator.h \ - google/protobuf/compiler/csharp/csharp_generator.h \ - google/protobuf/compiler/csharp/csharp_names.h \ - google/protobuf/compiler/java/java_generator.h \ - google/protobuf/compiler/java/java_kotlin_generator.h \ - google/protobuf/compiler/java/java_names.h \ - google/protobuf/compiler/js/js_generator.h \ - google/protobuf/compiler/js/well_known_types_embed.h \ - google/protobuf/compiler/objectivec/objectivec_generator.h \ - google/protobuf/compiler/objectivec/objectivec_helpers.h \ - google/protobuf/compiler/php/php_generator.h \ - google/protobuf/compiler/python/python_generator.h \ - google/protobuf/compiler/ruby/ruby_generator.h \ - google/protobuf/util/type_resolver.h \ google/protobuf/util/delimited_message_util.h \ google/protobuf/util/field_comparator.h \ google/protobuf/util/field_mask_util.h \ google/protobuf/util/json_util.h \ + google/protobuf/util/message_differencer.h \ google/protobuf/util/time_util.h \ + google/protobuf/util/type_resolver.h \ google/protobuf/util/type_resolver_util.h \ - google/protobuf/util/message_differencer.h + google/protobuf/wire_format.h \ + google/protobuf/wire_format_lite.h \ + google/protobuf/wrappers.pb.h lib_LTLIBRARIES = libprotobuf-lite.la libprotobuf.la libprotoc.la @@ -180,18 +182,37 @@ libprotobuf_lite_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libprotobuf-lite.m EXTRA_libprotobuf_lite_la_DEPENDENCIES = libprotobuf-lite.map endif libprotobuf_lite_la_SOURCES = \ + google/protobuf/any_lite.cc \ + google/protobuf/arena.cc \ + google/protobuf/arenastring.cc \ + google/protobuf/extension_set.cc \ + google/protobuf/generated_enum_util.cc \ + google/protobuf/generated_message_table_driven_lite.cc \ + google/protobuf/generated_message_table_driven_lite.h \ + google/protobuf/generated_message_util.cc \ + google/protobuf/implicit_weak_message.cc \ + google/protobuf/inlined_string_field.cc \ + google/protobuf/io/coded_stream.cc \ + google/protobuf/io/io_win32.cc \ + google/protobuf/io/strtod.cc \ + google/protobuf/io/zero_copy_stream.cc \ + google/protobuf/io/zero_copy_stream_impl.cc \ + google/protobuf/io/zero_copy_stream_impl_lite.cc \ + google/protobuf/map.cc \ + google/protobuf/message_lite.cc \ + google/protobuf/parse_context.cc \ + google/protobuf/repeated_field.cc \ google/protobuf/stubs/bytestream.cc \ google/protobuf/stubs/bytestream.h \ google/protobuf/stubs/common.cc \ google/protobuf/stubs/hash.h \ google/protobuf/stubs/int128.cc \ google/protobuf/stubs/int128.h \ - google/protobuf/io/io_win32.cc \ google/protobuf/stubs/map_util.h \ google/protobuf/stubs/mathutil.h \ + google/protobuf/stubs/status_macros.h \ google/protobuf/stubs/status.cc \ google/protobuf/stubs/status.h \ - google/protobuf/stubs/status_macros.h \ google/protobuf/stubs/statusor.cc \ google/protobuf/stubs/statusor.h \ google/protobuf/stubs/stringpiece.cc \ @@ -202,27 +223,7 @@ libprotobuf_lite_la_SOURCES = \ google/protobuf/stubs/strutil.cc \ google/protobuf/stubs/time.cc \ google/protobuf/stubs/time.h \ - google/protobuf/any_lite.cc \ - google/protobuf/arena.cc \ - google/protobuf/arenastring.cc \ - google/protobuf/extension_set.cc \ - google/protobuf/field_access_listener.cc \ - google/protobuf/generated_enum_util.cc \ - google/protobuf/generated_message_util.cc \ - google/protobuf/generated_message_table_driven_lite.h \ - google/protobuf/generated_message_table_driven_lite.cc \ - google/protobuf/implicit_weak_message.cc \ - google/protobuf/inlined_string_field.cc \ - google/protobuf/map.cc \ - google/protobuf/message_lite.cc \ - google/protobuf/parse_context.cc \ - google/protobuf/repeated_field.cc \ - google/protobuf/wire_format_lite.cc \ - google/protobuf/io/coded_stream.cc \ - google/protobuf/io/strtod.cc \ - google/protobuf/io/zero_copy_stream.cc \ - google/protobuf/io/zero_copy_stream_impl.cc \ - google/protobuf/io/zero_copy_stream_impl_lite.cc + google/protobuf/wire_format_lite.cc libprotobuf_la_LIBADD = $(PTHREAD_LIBS) $(LIBATOMIC_LIBS) libprotobuf_la_LDFLAGS = -version-info $(PROTOBUF_VERSION) -export-dynamic -no-undefined @@ -232,20 +233,26 @@ EXTRA_libprotobuf_la_DEPENDENCIES = libprotobuf.map endif libprotobuf_la_SOURCES = \ $(libprotobuf_lite_la_SOURCES) \ + google/protobuf/any.cc \ google/protobuf/any.pb.cc \ google/protobuf/api.pb.cc \ - google/protobuf/any.cc \ + google/protobuf/compiler/importer.cc \ + google/protobuf/compiler/parser.cc \ google/protobuf/descriptor.cc \ - google/protobuf/descriptor_database.cc \ google/protobuf/descriptor.pb.cc \ + google/protobuf/descriptor_database.cc \ google/protobuf/duration.pb.cc \ google/protobuf/dynamic_message.cc \ google/protobuf/empty.pb.cc \ google/protobuf/extension_set_heavy.cc \ google/protobuf/field_mask.pb.cc \ + google/protobuf/generated_message_bases.cc \ google/protobuf/generated_message_reflection.cc \ - google/protobuf/generated_message_table_driven_lite.h \ google/protobuf/generated_message_table_driven.cc \ + google/protobuf/generated_message_table_driven_lite.h \ + google/protobuf/io/gzip_stream.cc \ + google/protobuf/io/printer.cc \ + google/protobuf/io/tokenizer.cc \ google/protobuf/map_field.cc \ google/protobuf/message.cc \ google/protobuf/reflection_internal.h \ @@ -259,13 +266,6 @@ libprotobuf_la_SOURCES = \ google/protobuf/timestamp.pb.cc \ google/protobuf/type.pb.cc \ google/protobuf/unknown_field_set.cc \ - google/protobuf/wire_format.cc \ - google/protobuf/wrappers.pb.cc \ - google/protobuf/io/gzip_stream.cc \ - google/protobuf/io/printer.cc \ - google/protobuf/io/tokenizer.cc \ - google/protobuf/compiler/importer.cc \ - google/protobuf/compiler/parser.cc \ google/protobuf/util/delimited_message_util.cc \ google/protobuf/util/field_comparator.cc \ google/protobuf/util/field_mask_util.cc \ @@ -291,12 +291,12 @@ libprotobuf_la_SOURCES = \ google/protobuf/util/internal/object_source.h \ google/protobuf/util/internal/object_writer.cc \ google/protobuf/util/internal/object_writer.h \ + google/protobuf/util/internal/proto_writer.cc \ + google/protobuf/util/internal/proto_writer.h \ google/protobuf/util/internal/protostream_objectsource.cc \ google/protobuf/util/internal/protostream_objectsource.h \ google/protobuf/util/internal/protostream_objectwriter.cc \ google/protobuf/util/internal/protostream_objectwriter.h \ - google/protobuf/util/internal/proto_writer.cc \ - google/protobuf/util/internal/proto_writer.h \ google/protobuf/util/internal/structured_objectwriter.h \ google/protobuf/util/internal/type_info.cc \ google/protobuf/util/internal/type_info.h \ @@ -307,7 +307,9 @@ libprotobuf_la_SOURCES = \ google/protobuf/util/json_util.cc \ google/protobuf/util/message_differencer.cc \ google/protobuf/util/time_util.cc \ - google/protobuf/util/type_resolver_util.cc + google/protobuf/util/type_resolver_util.cc \ + google/protobuf/wire_format.cc \ + google/protobuf/wrappers.pb.cc nodist_libprotobuf_la_SOURCES = $(nodist_libprotobuf_lite_la_SOURCES) @@ -320,13 +322,6 @@ endif libprotoc_la_SOURCES = \ google/protobuf/compiler/code_generator.cc \ google/protobuf/compiler/command_line_interface.cc \ - google/protobuf/compiler/plugin.cc \ - google/protobuf/compiler/plugin.pb.cc \ - google/protobuf/compiler/scc.h \ - google/protobuf/compiler/subprocess.cc \ - google/protobuf/compiler/subprocess.h \ - google/protobuf/compiler/zip_writer.cc \ - google/protobuf/compiler/zip_writer.h \ google/protobuf/compiler/cpp/cpp_enum.cc \ google/protobuf/compiler/cpp/cpp_enum.h \ google/protobuf/compiler/cpp/cpp_enum_field.cc \ @@ -359,15 +354,49 @@ libprotoc_la_SOURCES = \ google/protobuf/compiler/cpp/cpp_service.h \ google/protobuf/compiler/cpp/cpp_string_field.cc \ google/protobuf/compiler/cpp/cpp_string_field.h \ + google/protobuf/compiler/csharp/csharp_doc_comment.cc \ + google/protobuf/compiler/csharp/csharp_doc_comment.h \ + google/protobuf/compiler/csharp/csharp_enum.cc \ + google/protobuf/compiler/csharp/csharp_enum.h \ + google/protobuf/compiler/csharp/csharp_enum_field.cc \ + google/protobuf/compiler/csharp/csharp_enum_field.h \ + google/protobuf/compiler/csharp/csharp_field_base.cc \ + google/protobuf/compiler/csharp/csharp_field_base.h \ + google/protobuf/compiler/csharp/csharp_generator.cc \ + google/protobuf/compiler/csharp/csharp_helpers.cc \ + google/protobuf/compiler/csharp/csharp_helpers.h \ + google/protobuf/compiler/csharp/csharp_map_field.cc \ + google/protobuf/compiler/csharp/csharp_map_field.h \ + google/protobuf/compiler/csharp/csharp_message.cc \ + google/protobuf/compiler/csharp/csharp_message.h \ + google/protobuf/compiler/csharp/csharp_message_field.cc \ + google/protobuf/compiler/csharp/csharp_message_field.h \ + google/protobuf/compiler/csharp/csharp_options.h \ + google/protobuf/compiler/csharp/csharp_primitive_field.cc \ + google/protobuf/compiler/csharp/csharp_primitive_field.h \ + google/protobuf/compiler/csharp/csharp_reflection_class.cc \ + google/protobuf/compiler/csharp/csharp_reflection_class.h \ + google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc \ + google/protobuf/compiler/csharp/csharp_repeated_enum_field.h \ + google/protobuf/compiler/csharp/csharp_repeated_message_field.cc \ + google/protobuf/compiler/csharp/csharp_repeated_message_field.h \ + google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc \ + google/protobuf/compiler/csharp/csharp_repeated_primitive_field.h \ + google/protobuf/compiler/csharp/csharp_source_generator_base.cc \ + google/protobuf/compiler/csharp/csharp_source_generator_base.h \ + google/protobuf/compiler/csharp/csharp_wrapper_field.cc \ + google/protobuf/compiler/csharp/csharp_wrapper_field.h \ google/protobuf/compiler/java/java_context.cc \ google/protobuf/compiler/java/java_context.h \ + google/protobuf/compiler/java/java_doc_comment.cc \ + google/protobuf/compiler/java/java_doc_comment.h \ google/protobuf/compiler/java/java_enum.cc \ - google/protobuf/compiler/java/java_enum_lite.cc \ + google/protobuf/compiler/java/java_enum.h \ google/protobuf/compiler/java/java_enum_field.cc \ google/protobuf/compiler/java/java_enum_field.h \ google/protobuf/compiler/java/java_enum_field_lite.cc \ google/protobuf/compiler/java/java_enum_field_lite.h \ - google/protobuf/compiler/java/java_enum.h \ + google/protobuf/compiler/java/java_enum_lite.cc \ google/protobuf/compiler/java/java_enum_lite.h \ google/protobuf/compiler/java/java_extension.cc \ google/protobuf/compiler/java/java_extension.h \ @@ -388,17 +417,17 @@ libprotoc_la_SOURCES = \ google/protobuf/compiler/java/java_map_field_lite.cc \ google/protobuf/compiler/java/java_map_field_lite.h \ google/protobuf/compiler/java/java_message.cc \ - google/protobuf/compiler/java/java_message_lite.cc \ + google/protobuf/compiler/java/java_message.h \ google/protobuf/compiler/java/java_message_builder.cc \ + google/protobuf/compiler/java/java_message_builder.h \ google/protobuf/compiler/java/java_message_builder_lite.cc \ + google/protobuf/compiler/java/java_message_builder_lite.h \ google/protobuf/compiler/java/java_message_field.cc \ google/protobuf/compiler/java/java_message_field.h \ google/protobuf/compiler/java/java_message_field_lite.cc \ google/protobuf/compiler/java/java_message_field_lite.h \ - google/protobuf/compiler/java/java_message.h \ + google/protobuf/compiler/java/java_message_lite.cc \ google/protobuf/compiler/java/java_message_lite.h \ - google/protobuf/compiler/java/java_message_builder.h \ - google/protobuf/compiler/java/java_message_builder_lite.h \ google/protobuf/compiler/java/java_name_resolver.cc \ google/protobuf/compiler/java/java_name_resolver.h \ google/protobuf/compiler/java/java_options.h \ @@ -406,16 +435,14 @@ libprotoc_la_SOURCES = \ google/protobuf/compiler/java/java_primitive_field.h \ google/protobuf/compiler/java/java_primitive_field_lite.cc \ google/protobuf/compiler/java/java_primitive_field_lite.h \ - google/protobuf/compiler/java/java_shared_code_generator.cc \ - google/protobuf/compiler/java/java_shared_code_generator.h \ google/protobuf/compiler/java/java_service.cc \ google/protobuf/compiler/java/java_service.h \ + google/protobuf/compiler/java/java_shared_code_generator.cc \ + google/protobuf/compiler/java/java_shared_code_generator.h \ google/protobuf/compiler/java/java_string_field.cc \ google/protobuf/compiler/java/java_string_field.h \ google/protobuf/compiler/java/java_string_field_lite.cc \ google/protobuf/compiler/java/java_string_field_lite.h \ - google/protobuf/compiler/java/java_doc_comment.cc \ - google/protobuf/compiler/java/java_doc_comment.h \ google/protobuf/compiler/js/js_generator.cc \ google/protobuf/compiler/js/well_known_types_embed.cc \ google/protobuf/compiler/objectivec/objectivec_enum.cc \ @@ -437,46 +464,21 @@ libprotoc_la_SOURCES = \ google/protobuf/compiler/objectivec/objectivec_message.h \ google/protobuf/compiler/objectivec/objectivec_message_field.cc \ google/protobuf/compiler/objectivec/objectivec_message_field.h \ - google/protobuf/compiler/objectivec/objectivec_nsobject_methods.h \ + google/protobuf/compiler/objectivec/objectivec_nsobject_methods.h \ google/protobuf/compiler/objectivec/objectivec_oneof.cc \ google/protobuf/compiler/objectivec/objectivec_oneof.h \ google/protobuf/compiler/objectivec/objectivec_primitive_field.cc \ google/protobuf/compiler/objectivec/objectivec_primitive_field.h \ google/protobuf/compiler/php/php_generator.cc \ + google/protobuf/compiler/plugin.cc \ + google/protobuf/compiler/plugin.pb.cc \ google/protobuf/compiler/python/python_generator.cc \ google/protobuf/compiler/ruby/ruby_generator.cc \ - google/protobuf/compiler/csharp/csharp_doc_comment.cc \ - google/protobuf/compiler/csharp/csharp_doc_comment.h \ - google/protobuf/compiler/csharp/csharp_enum.cc \ - google/protobuf/compiler/csharp/csharp_enum.h \ - google/protobuf/compiler/csharp/csharp_enum_field.cc \ - google/protobuf/compiler/csharp/csharp_enum_field.h \ - google/protobuf/compiler/csharp/csharp_field_base.cc \ - google/protobuf/compiler/csharp/csharp_field_base.h \ - google/protobuf/compiler/csharp/csharp_generator.cc \ - google/protobuf/compiler/csharp/csharp_helpers.cc \ - google/protobuf/compiler/csharp/csharp_helpers.h \ - google/protobuf/compiler/csharp/csharp_map_field.cc \ - google/protobuf/compiler/csharp/csharp_map_field.h \ - google/protobuf/compiler/csharp/csharp_message.cc \ - google/protobuf/compiler/csharp/csharp_message.h \ - google/protobuf/compiler/csharp/csharp_message_field.cc \ - google/protobuf/compiler/csharp/csharp_message_field.h \ - google/protobuf/compiler/csharp/csharp_options.h \ - google/protobuf/compiler/csharp/csharp_primitive_field.cc \ - google/protobuf/compiler/csharp/csharp_primitive_field.h \ - google/protobuf/compiler/csharp/csharp_reflection_class.cc \ - google/protobuf/compiler/csharp/csharp_reflection_class.h \ - google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc \ - google/protobuf/compiler/csharp/csharp_repeated_enum_field.h \ - google/protobuf/compiler/csharp/csharp_repeated_message_field.cc \ - google/protobuf/compiler/csharp/csharp_repeated_message_field.h \ - google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc \ - google/protobuf/compiler/csharp/csharp_repeated_primitive_field.h \ - google/protobuf/compiler/csharp/csharp_source_generator_base.cc \ - google/protobuf/compiler/csharp/csharp_source_generator_base.h \ - google/protobuf/compiler/csharp/csharp_wrapper_field.cc \ - google/protobuf/compiler/csharp/csharp_wrapper_field.h + google/protobuf/compiler/scc.h \ + google/protobuf/compiler/subprocess.cc \ + google/protobuf/compiler/subprocess.h \ + google/protobuf/compiler/zip_writer.cc \ + google/protobuf/compiler/zip_writer.h bin_PROGRAMS = protoc protoc_LDADD = $(PTHREAD_LIBS) libprotobuf.la libprotoc.la @@ -487,32 +489,33 @@ protoc_SOURCES = google/protobuf/compiler/main.cc protoc_inputs = \ google/protobuf/any_test.proto \ google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto \ + google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto \ google/protobuf/map_lite_unittest.proto \ google/protobuf/map_proto2_unittest.proto \ google/protobuf/map_unittest.proto \ + google/protobuf/unittest.proto \ google/protobuf/unittest_arena.proto \ google/protobuf/unittest_custom_options.proto \ google/protobuf/unittest_drop_unknown_fields.proto \ google/protobuf/unittest_embed_optimize_for.proto \ google/protobuf/unittest_empty.proto \ google/protobuf/unittest_enormous_descriptor.proto \ - google/protobuf/unittest_import_lite.proto \ google/protobuf/unittest_import.proto \ - google/protobuf/unittest_import_public_lite.proto \ + google/protobuf/unittest_import_lite.proto \ google/protobuf/unittest_import_public.proto \ + google/protobuf/unittest_import_public_lite.proto \ google/protobuf/unittest_lazy_dependencies.proto \ google/protobuf/unittest_lazy_dependencies_custom_option.proto \ google/protobuf/unittest_lazy_dependencies_enum.proto \ - google/protobuf/unittest_lite_imports_nonlite.proto \ google/protobuf/unittest_lite.proto \ + google/protobuf/unittest_lite_imports_nonlite.proto \ google/protobuf/unittest_mset.proto \ google/protobuf/unittest_mset_wire_format.proto \ google/protobuf/unittest_no_field_presence.proto \ google/protobuf/unittest_no_generic_services.proto \ google/protobuf/unittest_optimize_for.proto \ - google/protobuf/unittest_preserve_unknown_enum2.proto \ google/protobuf/unittest_preserve_unknown_enum.proto \ - google/protobuf/unittest.proto \ + google/protobuf/unittest_preserve_unknown_enum2.proto \ google/protobuf/unittest_proto3.proto \ google/protobuf/unittest_proto3_arena.proto \ google/protobuf/unittest_proto3_arena_lite.proto \ @@ -532,22 +535,35 @@ protoc_inputs = \ google/protobuf/util/internal/testdata/wrappers.proto \ google/protobuf/util/json_format.proto \ google/protobuf/util/json_format_proto3.proto \ - google/protobuf/util/message_differencer_unittest.proto \ - google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto + google/protobuf/util/message_differencer_unittest.proto EXTRA_DIST = \ $(protoc_inputs) \ solaris/libstdc++.la \ - google/protobuf/test_messages_proto3.proto \ - google/protobuf/test_messages_proto2.proto \ + google/protobuf/compiler/package_info.h \ + google/protobuf/compiler/ruby/ruby_generated_code.proto \ + google/protobuf/compiler/ruby/ruby_generated_code_pb.rb \ + google/protobuf/compiler/ruby/ruby_generated_code_proto2.proto \ + google/protobuf/compiler/ruby/ruby_generated_code_proto2_pb.rb \ + google/protobuf/compiler/ruby/ruby_generated_pkg_explicit.proto \ + google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_legacy.proto \ + google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_legacy_pb.rb \ + google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_pb.rb \ + google/protobuf/compiler/ruby/ruby_generated_pkg_implicit.proto \ + google/protobuf/compiler/ruby/ruby_generated_pkg_implicit_pb.rb \ + google/protobuf/compiler/zip_output_unittest.sh \ google/protobuf/io/gzip_stream.h \ google/protobuf/io/gzip_stream_unittest.sh \ + google/protobuf/io/package_info.h \ + google/protobuf/package_info.h \ + google/protobuf/test_messages_proto2.proto \ + google/protobuf/test_messages_proto3.proto \ + google/protobuf/testdata/bad_utf8_string \ google/protobuf/testdata/golden_message \ google/protobuf/testdata/golden_message_maps \ google/protobuf/testdata/golden_message_oneof_implemented \ google/protobuf/testdata/golden_message_proto3 \ google/protobuf/testdata/golden_packed_fields_message \ - google/protobuf/testdata/bad_utf8_string \ google/protobuf/testdata/map_test_data.txt \ google/protobuf/testdata/text_format_unittest_data.txt \ google/protobuf/testdata/text_format_unittest_data_oneof_implemented.txt \ @@ -555,21 +571,7 @@ EXTRA_DIST = \ google/protobuf/testdata/text_format_unittest_data_pointy_oneof.txt \ google/protobuf/testdata/text_format_unittest_extensions_data.txt \ google/protobuf/testdata/text_format_unittest_extensions_data_pointy.txt \ - google/protobuf/package_info.h \ - google/protobuf/io/package_info.h \ google/protobuf/util/package_info.h \ - google/protobuf/compiler/ruby/ruby_generated_code.proto \ - google/protobuf/compiler/ruby/ruby_generated_code_pb.rb \ - google/protobuf/compiler/ruby/ruby_generated_code_proto2.proto \ - google/protobuf/compiler/ruby/ruby_generated_code_proto2_pb.rb \ - google/protobuf/compiler/ruby/ruby_generated_pkg_explicit.proto \ - google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_legacy.proto \ - google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_legacy_pb.rb \ - google/protobuf/compiler/ruby/ruby_generated_pkg_explicit_pb.rb \ - google/protobuf/compiler/ruby/ruby_generated_pkg_implicit.proto \ - google/protobuf/compiler/ruby/ruby_generated_pkg_implicit_pb.rb \ - google/protobuf/compiler/package_info.h \ - google/protobuf/compiler/zip_output_unittest.sh \ libprotobuf-lite.map \ libprotobuf.map \ libprotoc.map \ @@ -578,12 +580,12 @@ EXTRA_DIST = \ protoc_lite_outputs = \ google/protobuf/map_lite_unittest.pb.cc \ google/protobuf/map_lite_unittest.pb.h \ - google/protobuf/unittest_lite.pb.cc \ - google/protobuf/unittest_lite.pb.h \ google/protobuf/unittest_import_lite.pb.cc \ google/protobuf/unittest_import_lite.pb.h \ google/protobuf/unittest_import_public_lite.pb.cc \ - google/protobuf/unittest_import_public_lite.pb.h + google/protobuf/unittest_import_public_lite.pb.h \ + google/protobuf/unittest_lite.pb.cc \ + google/protobuf/unittest_lite.pb.h protoc_outputs = \ $(protoc_lite_outputs) \ @@ -597,6 +599,8 @@ protoc_outputs = \ google/protobuf/map_proto2_unittest.pb.h \ google/protobuf/map_unittest.pb.cc \ google/protobuf/map_unittest.pb.h \ + google/protobuf/unittest.pb.cc \ + google/protobuf/unittest.pb.h \ google/protobuf/unittest_arena.pb.cc \ google/protobuf/unittest_arena.pb.h \ google/protobuf/unittest_custom_options.pb.cc \ @@ -631,12 +635,10 @@ protoc_outputs = \ google/protobuf/unittest_no_generic_services.pb.h \ google/protobuf/unittest_optimize_for.pb.cc \ google/protobuf/unittest_optimize_for.pb.h \ - google/protobuf/unittest.pb.cc \ - google/protobuf/unittest.pb.h \ - google/protobuf/unittest_preserve_unknown_enum2.pb.cc \ - google/protobuf/unittest_preserve_unknown_enum2.pb.h \ google/protobuf/unittest_preserve_unknown_enum.pb.cc \ google/protobuf/unittest_preserve_unknown_enum.pb.h \ + google/protobuf/unittest_preserve_unknown_enum2.pb.cc \ + google/protobuf/unittest_preserve_unknown_enum2.pb.h \ google/protobuf/unittest_proto3.pb.cc \ google/protobuf/unittest_proto3.pb.h \ google/protobuf/unittest_proto3_arena.pb.cc \ @@ -700,8 +702,8 @@ $(protoc_outputs): unittest_proto_middleman COMMON_TEST_SOURCES = \ google/protobuf/arena_test_util.cc \ google/protobuf/arena_test_util.h \ - google/protobuf/map_test_util.inc \ google/protobuf/map_test_util.h \ + google/protobuf/map_test_util.inc \ google/protobuf/map_test_util_impl.h \ google/protobuf/reflection_tester.cc \ google/protobuf/reflection_tester.h \ @@ -709,10 +711,10 @@ COMMON_TEST_SOURCES = \ google/protobuf/test_util.h \ google/protobuf/test_util.inc \ google/protobuf/test_util2.h \ - google/protobuf/testing/googletest.cc \ - google/protobuf/testing/googletest.h \ google/protobuf/testing/file.cc \ - google/protobuf/testing/file.h + google/protobuf/testing/file.h \ + google/protobuf/testing/googletest.cc \ + google/protobuf/testing/googletest.h GOOGLETEST_BUILD_DIR=../third_party/googletest/googletest GOOGLEMOCK_BUILD_DIR=../third_party/googletest/googlemock @@ -731,25 +733,31 @@ protobuf_test_CPPFLAGS = -I$(GOOGLETEST_SRC_DIR)/include \ # since test_util.cc takes forever to compile with optimization (with GCC). # See configure.ac for more info. protobuf_test_CXXFLAGS = $(NO_OPT_CXXFLAGS) -# Doesn't pass on Windows with MSVC -NON_MSVC_TEST_SOURCES = \ - google/protobuf/compiler/command_line_interface_unittest.cc protobuf_test_SOURCES = \ - google/protobuf/stubs/bytestream_unittest.cc \ - google/protobuf/stubs/common_unittest.cc \ - google/protobuf/stubs/int128_unittest.cc \ - google/protobuf/io/io_win32_unittest.cc \ - google/protobuf/stubs/statusor_test.cc \ - google/protobuf/stubs/status_test.cc \ - google/protobuf/stubs/stringpiece_unittest.cc \ - google/protobuf/stubs/stringprintf_unittest.cc \ - google/protobuf/stubs/structurally_valid_unittest.cc \ - google/protobuf/stubs/strutil_unittest.cc \ - google/protobuf/stubs/template_util_unittest.cc \ - google/protobuf/stubs/time_test.cc \ google/protobuf/any_test.cc \ - google/protobuf/arenastring_unittest.cc \ google/protobuf/arena_unittest.cc \ + google/protobuf/arenastring_unittest.cc \ + google/protobuf/compiler/annotation_test_util.cc \ + google/protobuf/compiler/annotation_test_util.h \ + google/protobuf/compiler/command_line_interface_unittest.cc \ + google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc \ + google/protobuf/compiler/cpp/cpp_move_unittest.cc \ + google/protobuf/compiler/cpp/cpp_plugin_unittest.cc \ + google/protobuf/compiler/cpp/cpp_unittest.cc \ + google/protobuf/compiler/cpp/cpp_unittest.h \ + google/protobuf/compiler/cpp/cpp_unittest.inc \ + google/protobuf/compiler/cpp/metadata_test.cc \ + google/protobuf/compiler/csharp/csharp_bootstrap_unittest.cc \ + google/protobuf/compiler/csharp/csharp_generator_unittest.cc \ + google/protobuf/compiler/importer_unittest.cc \ + google/protobuf/compiler/java/java_doc_comment_unittest.cc \ + google/protobuf/compiler/java/java_plugin_unittest.cc \ + google/protobuf/compiler/mock_code_generator.cc \ + google/protobuf/compiler/mock_code_generator.h \ + google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc \ + google/protobuf/compiler/parser_unittest.cc \ + google/protobuf/compiler/python/python_plugin_unittest.cc \ + google/protobuf/compiler/ruby/ruby_generator_unittest.cc \ google/protobuf/descriptor_database_unittest.cc \ google/protobuf/descriptor_unittest.cc \ google/protobuf/drop_unknown_fields_test.cc \ @@ -757,6 +765,11 @@ protobuf_test_SOURCES = \ google/protobuf/extension_set_unittest.cc \ google/protobuf/generated_message_reflection_unittest.cc \ google/protobuf/inlined_string_field_unittest.cc \ + google/protobuf/io/coded_stream_unittest.cc \ + google/protobuf/io/io_win32_unittest.cc \ + google/protobuf/io/printer_unittest.cc \ + google/protobuf/io/tokenizer_unittest.cc \ + google/protobuf/io/zero_copy_stream_unittest.cc \ google/protobuf/map_field_test.cc \ google/protobuf/map_test.cc \ google/protobuf/message_unittest.cc \ @@ -770,35 +783,19 @@ protobuf_test_SOURCES = \ google/protobuf/reflection_ops_unittest.cc \ google/protobuf/repeated_field_reflection_unittest.cc \ google/protobuf/repeated_field_unittest.cc \ + google/protobuf/stubs/bytestream_unittest.cc \ + google/protobuf/stubs/common_unittest.cc \ + google/protobuf/stubs/int128_unittest.cc \ + google/protobuf/stubs/status_test.cc \ + google/protobuf/stubs/statusor_test.cc \ + google/protobuf/stubs/stringpiece_unittest.cc \ + google/protobuf/stubs/stringprintf_unittest.cc \ + google/protobuf/stubs/structurally_valid_unittest.cc \ + google/protobuf/stubs/strutil_unittest.cc \ + google/protobuf/stubs/template_util_unittest.cc \ + google/protobuf/stubs/time_test.cc \ google/protobuf/text_format_unittest.cc \ google/protobuf/unknown_field_set_unittest.cc \ - google/protobuf/well_known_types_unittest.cc \ - google/protobuf/wire_format_unittest.cc \ - google/protobuf/wire_format_unittest.inc \ - google/protobuf/io/coded_stream_unittest.cc \ - google/protobuf/io/printer_unittest.cc \ - google/protobuf/io/tokenizer_unittest.cc \ - google/protobuf/io/zero_copy_stream_unittest.cc \ - google/protobuf/compiler/annotation_test_util.h \ - google/protobuf/compiler/annotation_test_util.cc \ - google/protobuf/compiler/importer_unittest.cc \ - google/protobuf/compiler/mock_code_generator.cc \ - google/protobuf/compiler/mock_code_generator.h \ - google/protobuf/compiler/parser_unittest.cc \ - google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc \ - google/protobuf/compiler/cpp/cpp_move_unittest.cc \ - google/protobuf/compiler/cpp/cpp_unittest.h \ - google/protobuf/compiler/cpp/cpp_unittest.cc \ - google/protobuf/compiler/cpp/cpp_unittest.inc \ - google/protobuf/compiler/cpp/cpp_plugin_unittest.cc \ - google/protobuf/compiler/cpp/metadata_test.cc \ - google/protobuf/compiler/java/java_plugin_unittest.cc \ - google/protobuf/compiler/java/java_doc_comment_unittest.cc \ - google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc \ - google/protobuf/compiler/python/python_plugin_unittest.cc \ - google/protobuf/compiler/ruby/ruby_generator_unittest.cc \ - google/protobuf/compiler/csharp/csharp_bootstrap_unittest.cc \ - google/protobuf/compiler/csharp/csharp_generator_unittest.cc \ google/protobuf/util/delimited_message_util_test.cc \ google/protobuf/util/field_comparator_test.cc \ google/protobuf/util/field_mask_util_test.cc \ @@ -812,8 +809,11 @@ protobuf_test_SOURCES = \ google/protobuf/util/message_differencer_unittest.cc \ google/protobuf/util/time_util_test.cc \ google/protobuf/util/type_resolver_util_test.cc \ - $(NON_MSVC_TEST_SOURCES) \ + google/protobuf/well_known_types_unittest.cc \ + google/protobuf/wire_format_unittest.cc \ + google/protobuf/wire_format_unittest.inc \ $(COMMON_TEST_SOURCES) + nodist_protobuf_test_SOURCES = $(protoc_outputs) $(am_protobuf_test_OBJECTS): unittest_proto_middleman @@ -880,9 +880,9 @@ test_plugin_LDADD = $(PTHREAD_LIBS) libprotobuf.la libprotoc.la \ test_plugin_CPPFLAGS = -I$(GOOGLETEST_SRC_DIR)/include test_plugin_SOURCES = \ google/protobuf/compiler/mock_code_generator.cc \ + google/protobuf/compiler/test_plugin.cc \ google/protobuf/testing/file.cc \ - google/protobuf/testing/file.h \ - google/protobuf/compiler/test_plugin.cc + google/protobuf/testing/file.h if HAVE_ZLIB zcgzip_LDADD = $(PTHREAD_LIBS) libprotobuf.la @@ -898,7 +898,8 @@ endif no_warning_test.cc: echo "// Generated from Makefile.am" > no_warning_test.cc for FILE in $(nobase_include_HEADERS); do \ - echo "#include <$${FILE}>" >> no_warning_test.cc; \ + case $$FILE in *.inc) continue;; esac; \ + echo "#include <$${FILE}>" >> no_warning_test.cc; \ done echo "int main(int, char**) { return 0; }" >> no_warning_test.cc diff --git a/src/google/protobuf/any.pb.cc b/src/google/protobuf/any.pb.cc index aaf6c1c80a..d3b1b4c226 100644 --- a/src/google/protobuf/any.pb.cc +++ b/src/google/protobuf/any.pb.cc @@ -38,20 +38,20 @@ static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_s const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_google_2fprotobuf_2fany_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Any, _internal_metadata_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Any, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ ~0u, // no _inlined_string_donated_ - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Any, type_url_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Any, value_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Any, type_url_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Any, value_), }; static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { - { 0, -1, -1, sizeof(PROTOBUF_NAMESPACE_ID::Any)}, + { 0, -1, -1, sizeof(::PROTOBUF_NAMESPACE_ID::Any)}, }; static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = { - reinterpret_cast(&PROTOBUF_NAMESPACE_ID::_Any_default_instance_), + reinterpret_cast(&::PROTOBUF_NAMESPACE_ID::_Any_default_instance_), }; const char descriptor_table_protodef_google_2fprotobuf_2fany_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = @@ -331,8 +331,8 @@ void Any::InternalSwap(Any* other) { // @@protoc_insertion_point(namespace_scope) PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_NOINLINE PROTOBUF_NAMESPACE_ID::Any* Arena::CreateMaybeMessage< PROTOBUF_NAMESPACE_ID::Any >(Arena* arena) { - return Arena::CreateMessageInternal< PROTOBUF_NAMESPACE_ID::Any >(arena); +template<> PROTOBUF_NOINLINE ::PROTOBUF_NAMESPACE_ID::Any* Arena::CreateMaybeMessage< ::PROTOBUF_NAMESPACE_ID::Any >(Arena* arena) { + return Arena::CreateMessageInternal< ::PROTOBUF_NAMESPACE_ID::Any >(arena); } PROTOBUF_NAMESPACE_CLOSE diff --git a/src/google/protobuf/any.pb.h b/src/google/protobuf/any.pb.h index 36d57ee784..c6d70ec089 100644 --- a/src/google/protobuf/any.pb.h +++ b/src/google/protobuf/any.pb.h @@ -59,7 +59,7 @@ struct AnyDefaultTypeInternal; PROTOBUF_EXPORT extern AnyDefaultTypeInternal _Any_default_instance_; PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_EXPORT PROTOBUF_NAMESPACE_ID::Any* Arena::CreateMaybeMessage(Arena*); +template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Any* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Any>(Arena*); PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_OPEN @@ -84,7 +84,11 @@ class PROTOBUF_EXPORT Any final : } inline Any& operator=(Any&& from) noexcept { if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena()) { + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { InternalSwap(&from); } else { CopyFrom(from); diff --git a/src/google/protobuf/api.pb.cc b/src/google/protobuf/api.pb.cc index 4aeabb1d46..d3fb1dd52d 100644 --- a/src/google/protobuf/api.pb.cc +++ b/src/google/protobuf/api.pb.cc @@ -75,50 +75,50 @@ static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_s const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_google_2fprotobuf_2fapi_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Api, _internal_metadata_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Api, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ ~0u, // no _inlined_string_donated_ - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Api, name_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Api, methods_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Api, options_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Api, version_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Api, source_context_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Api, mixins_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Api, syntax_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Api, name_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Api, methods_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Api, options_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Api, version_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Api, source_context_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Api, mixins_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Api, syntax_), ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Method, _internal_metadata_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Method, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ ~0u, // no _inlined_string_donated_ - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Method, name_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Method, request_type_url_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Method, request_streaming_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Method, response_type_url_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Method, response_streaming_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Method, options_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Method, syntax_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Method, name_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Method, request_type_url_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Method, request_streaming_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Method, response_type_url_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Method, response_streaming_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Method, options_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Method, syntax_), ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Mixin, _internal_metadata_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Mixin, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ ~0u, // no _inlined_string_donated_ - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Mixin, name_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::Mixin, root_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Mixin, name_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::Mixin, root_), }; static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { - { 0, -1, -1, sizeof(PROTOBUF_NAMESPACE_ID::Api)}, - { 13, -1, -1, sizeof(PROTOBUF_NAMESPACE_ID::Method)}, - { 26, -1, -1, sizeof(PROTOBUF_NAMESPACE_ID::Mixin)}, + { 0, -1, -1, sizeof(::PROTOBUF_NAMESPACE_ID::Api)}, + { 13, -1, -1, sizeof(::PROTOBUF_NAMESPACE_ID::Method)}, + { 26, -1, -1, sizeof(::PROTOBUF_NAMESPACE_ID::Mixin)}, }; static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = { - reinterpret_cast(&PROTOBUF_NAMESPACE_ID::_Api_default_instance_), - reinterpret_cast(&PROTOBUF_NAMESPACE_ID::_Method_default_instance_), - reinterpret_cast(&PROTOBUF_NAMESPACE_ID::_Mixin_default_instance_), + reinterpret_cast(&::PROTOBUF_NAMESPACE_ID::_Api_default_instance_), + reinterpret_cast(&::PROTOBUF_NAMESPACE_ID::_Method_default_instance_), + reinterpret_cast(&::PROTOBUF_NAMESPACE_ID::_Mixin_default_instance_), }; const char descriptor_table_protodef_google_2fprotobuf_2fapi_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = @@ -165,10 +165,10 @@ PROTOBUF_NAMESPACE_OPEN class Api::_Internal { public: - static const PROTOBUF_NAMESPACE_ID::SourceContext& source_context(const Api* msg); + static const ::PROTOBUF_NAMESPACE_ID::SourceContext& source_context(const Api* msg); }; -const PROTOBUF_NAMESPACE_ID::SourceContext& +const ::PROTOBUF_NAMESPACE_ID::SourceContext& Api::_Internal::source_context(const Api* msg) { return *msg->source_context_; } @@ -210,7 +210,7 @@ Api::Api(const Api& from) GetArenaForAllocation()); } if (from._internal_has_source_context()) { - source_context_ = new PROTOBUF_NAMESPACE_ID::SourceContext(*from.source_context_); + source_context_ = new ::PROTOBUF_NAMESPACE_ID::SourceContext(*from.source_context_); } else { source_context_ = nullptr; } @@ -348,7 +348,7 @@ const char* Api::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::intern if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 56)) { ::PROTOBUF_NAMESPACE_ID::uint64 val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); CHK_(ptr); - _internal_set_syntax(static_cast(val)); + _internal_set_syntax(static_cast<::PROTOBUF_NAMESPACE_ID::Syntax>(val)); } else goto handle_unusual; continue; @@ -536,7 +536,7 @@ void Api::MergeFrom(const Api& from) { _internal_set_version(from._internal_version()); } if (from._internal_has_source_context()) { - _internal_mutable_source_context()->PROTOBUF_NAMESPACE_ID::SourceContext::MergeFrom(from._internal_source_context()); + _internal_mutable_source_context()->::PROTOBUF_NAMESPACE_ID::SourceContext::MergeFrom(from._internal_source_context()); } if (from._internal_syntax() != 0) { _internal_set_syntax(from._internal_syntax()); @@ -751,7 +751,7 @@ const char* Method::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::int if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 56)) { ::PROTOBUF_NAMESPACE_ID::uint64 val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); CHK_(ptr); - _internal_set_syntax(static_cast(val)); + _internal_set_syntax(static_cast<::PROTOBUF_NAMESPACE_ID::Syntax>(val)); } else goto handle_unusual; continue; @@ -1234,14 +1234,14 @@ void Mixin::InternalSwap(Mixin* other) { // @@protoc_insertion_point(namespace_scope) PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_NOINLINE PROTOBUF_NAMESPACE_ID::Api* Arena::CreateMaybeMessage< PROTOBUF_NAMESPACE_ID::Api >(Arena* arena) { - return Arena::CreateMessageInternal< PROTOBUF_NAMESPACE_ID::Api >(arena); +template<> PROTOBUF_NOINLINE ::PROTOBUF_NAMESPACE_ID::Api* Arena::CreateMaybeMessage< ::PROTOBUF_NAMESPACE_ID::Api >(Arena* arena) { + return Arena::CreateMessageInternal< ::PROTOBUF_NAMESPACE_ID::Api >(arena); } -template<> PROTOBUF_NOINLINE PROTOBUF_NAMESPACE_ID::Method* Arena::CreateMaybeMessage< PROTOBUF_NAMESPACE_ID::Method >(Arena* arena) { - return Arena::CreateMessageInternal< PROTOBUF_NAMESPACE_ID::Method >(arena); +template<> PROTOBUF_NOINLINE ::PROTOBUF_NAMESPACE_ID::Method* Arena::CreateMaybeMessage< ::PROTOBUF_NAMESPACE_ID::Method >(Arena* arena) { + return Arena::CreateMessageInternal< ::PROTOBUF_NAMESPACE_ID::Method >(arena); } -template<> PROTOBUF_NOINLINE PROTOBUF_NAMESPACE_ID::Mixin* Arena::CreateMaybeMessage< PROTOBUF_NAMESPACE_ID::Mixin >(Arena* arena) { - return Arena::CreateMessageInternal< PROTOBUF_NAMESPACE_ID::Mixin >(arena); +template<> PROTOBUF_NOINLINE ::PROTOBUF_NAMESPACE_ID::Mixin* Arena::CreateMaybeMessage< ::PROTOBUF_NAMESPACE_ID::Mixin >(Arena* arena) { + return Arena::CreateMessageInternal< ::PROTOBUF_NAMESPACE_ID::Mixin >(arena); } PROTOBUF_NAMESPACE_CLOSE diff --git a/src/google/protobuf/api.pb.h b/src/google/protobuf/api.pb.h index 1a3376e627..0702b48629 100644 --- a/src/google/protobuf/api.pb.h +++ b/src/google/protobuf/api.pb.h @@ -67,9 +67,9 @@ struct MixinDefaultTypeInternal; PROTOBUF_EXPORT extern MixinDefaultTypeInternal _Mixin_default_instance_; PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_EXPORT PROTOBUF_NAMESPACE_ID::Api* Arena::CreateMaybeMessage(Arena*); -template<> PROTOBUF_EXPORT PROTOBUF_NAMESPACE_ID::Method* Arena::CreateMaybeMessage(Arena*); -template<> PROTOBUF_EXPORT PROTOBUF_NAMESPACE_ID::Mixin* Arena::CreateMaybeMessage(Arena*); +template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Api* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Api>(Arena*); +template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Method* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Method>(Arena*); +template<> PROTOBUF_EXPORT ::PROTOBUF_NAMESPACE_ID::Mixin* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::Mixin>(Arena*); PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_OPEN @@ -94,7 +94,11 @@ class PROTOBUF_EXPORT Api final : } inline Api& operator=(Api&& from) noexcept { if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena()) { + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { InternalSwap(&from); } else { CopyFrom(from); @@ -204,16 +208,16 @@ class PROTOBUF_EXPORT Api final : int _internal_methods_size() const; public: void clear_methods(); - PROTOBUF_NAMESPACE_ID::Method* mutable_methods(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Method >* + ::PROTOBUF_NAMESPACE_ID::Method* mutable_methods(int index); + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Method >* mutable_methods(); private: - const PROTOBUF_NAMESPACE_ID::Method& _internal_methods(int index) const; - PROTOBUF_NAMESPACE_ID::Method* _internal_add_methods(); + const ::PROTOBUF_NAMESPACE_ID::Method& _internal_methods(int index) const; + ::PROTOBUF_NAMESPACE_ID::Method* _internal_add_methods(); public: - const PROTOBUF_NAMESPACE_ID::Method& methods(int index) const; - PROTOBUF_NAMESPACE_ID::Method* add_methods(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Method >& + const ::PROTOBUF_NAMESPACE_ID::Method& methods(int index) const; + ::PROTOBUF_NAMESPACE_ID::Method* add_methods(); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Method >& methods() const; // repeated .google.protobuf.Option options = 3; @@ -222,16 +226,16 @@ class PROTOBUF_EXPORT Api final : int _internal_options_size() const; public: void clear_options(); - PROTOBUF_NAMESPACE_ID::Option* mutable_options(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Option >* + ::PROTOBUF_NAMESPACE_ID::Option* mutable_options(int index); + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* mutable_options(); private: - const PROTOBUF_NAMESPACE_ID::Option& _internal_options(int index) const; - PROTOBUF_NAMESPACE_ID::Option* _internal_add_options(); + const ::PROTOBUF_NAMESPACE_ID::Option& _internal_options(int index) const; + ::PROTOBUF_NAMESPACE_ID::Option* _internal_add_options(); public: - const PROTOBUF_NAMESPACE_ID::Option& options(int index) const; - PROTOBUF_NAMESPACE_ID::Option* add_options(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Option >& + const ::PROTOBUF_NAMESPACE_ID::Option& options(int index) const; + ::PROTOBUF_NAMESPACE_ID::Option* add_options(); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& options() const; // repeated .google.protobuf.Mixin mixins = 6; @@ -240,16 +244,16 @@ class PROTOBUF_EXPORT Api final : int _internal_mixins_size() const; public: void clear_mixins(); - PROTOBUF_NAMESPACE_ID::Mixin* mutable_mixins(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Mixin >* + ::PROTOBUF_NAMESPACE_ID::Mixin* mutable_mixins(int index); + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Mixin >* mutable_mixins(); private: - const PROTOBUF_NAMESPACE_ID::Mixin& _internal_mixins(int index) const; - PROTOBUF_NAMESPACE_ID::Mixin* _internal_add_mixins(); + const ::PROTOBUF_NAMESPACE_ID::Mixin& _internal_mixins(int index) const; + ::PROTOBUF_NAMESPACE_ID::Mixin* _internal_add_mixins(); public: - const PROTOBUF_NAMESPACE_ID::Mixin& mixins(int index) const; - PROTOBUF_NAMESPACE_ID::Mixin* add_mixins(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Mixin >& + const ::PROTOBUF_NAMESPACE_ID::Mixin& mixins(int index) const; + ::PROTOBUF_NAMESPACE_ID::Mixin* add_mixins(); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Mixin >& mixins() const; // string name = 1; @@ -286,25 +290,25 @@ class PROTOBUF_EXPORT Api final : bool _internal_has_source_context() const; public: void clear_source_context(); - const PROTOBUF_NAMESPACE_ID::SourceContext& source_context() const; - PROTOBUF_MUST_USE_RESULT PROTOBUF_NAMESPACE_ID::SourceContext* release_source_context(); - PROTOBUF_NAMESPACE_ID::SourceContext* mutable_source_context(); - void set_allocated_source_context(PROTOBUF_NAMESPACE_ID::SourceContext* source_context); + const ::PROTOBUF_NAMESPACE_ID::SourceContext& source_context() const; + PROTOBUF_MUST_USE_RESULT ::PROTOBUF_NAMESPACE_ID::SourceContext* release_source_context(); + ::PROTOBUF_NAMESPACE_ID::SourceContext* mutable_source_context(); + void set_allocated_source_context(::PROTOBUF_NAMESPACE_ID::SourceContext* source_context); private: - const PROTOBUF_NAMESPACE_ID::SourceContext& _internal_source_context() const; - PROTOBUF_NAMESPACE_ID::SourceContext* _internal_mutable_source_context(); + const ::PROTOBUF_NAMESPACE_ID::SourceContext& _internal_source_context() const; + ::PROTOBUF_NAMESPACE_ID::SourceContext* _internal_mutable_source_context(); public: void unsafe_arena_set_allocated_source_context( - PROTOBUF_NAMESPACE_ID::SourceContext* source_context); - PROTOBUF_NAMESPACE_ID::SourceContext* unsafe_arena_release_source_context(); + ::PROTOBUF_NAMESPACE_ID::SourceContext* source_context); + ::PROTOBUF_NAMESPACE_ID::SourceContext* unsafe_arena_release_source_context(); // .google.protobuf.Syntax syntax = 7; void clear_syntax(); - PROTOBUF_NAMESPACE_ID::Syntax syntax() const; - void set_syntax(PROTOBUF_NAMESPACE_ID::Syntax value); + ::PROTOBUF_NAMESPACE_ID::Syntax syntax() const; + void set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value); private: - PROTOBUF_NAMESPACE_ID::Syntax _internal_syntax() const; - void _internal_set_syntax(PROTOBUF_NAMESPACE_ID::Syntax value); + ::PROTOBUF_NAMESPACE_ID::Syntax _internal_syntax() const; + void _internal_set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value); public: // @@protoc_insertion_point(class_scope:google.protobuf.Api) @@ -314,12 +318,12 @@ class PROTOBUF_EXPORT Api final : template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; typedef void InternalArenaConstructable_; typedef void DestructorSkippable_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Method > methods_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Option > options_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Mixin > mixins_; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Method > methods_; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option > options_; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Mixin > mixins_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr version_; - PROTOBUF_NAMESPACE_ID::SourceContext* source_context_; + ::PROTOBUF_NAMESPACE_ID::SourceContext* source_context_; int syntax_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; friend struct ::TableStruct_google_2fprotobuf_2fapi_2eproto; @@ -345,7 +349,11 @@ class PROTOBUF_EXPORT Method final : } inline Method& operator=(Method&& from) noexcept { if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena()) { + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { InternalSwap(&from); } else { CopyFrom(from); @@ -455,16 +463,16 @@ class PROTOBUF_EXPORT Method final : int _internal_options_size() const; public: void clear_options(); - PROTOBUF_NAMESPACE_ID::Option* mutable_options(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Option >* + ::PROTOBUF_NAMESPACE_ID::Option* mutable_options(int index); + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* mutable_options(); private: - const PROTOBUF_NAMESPACE_ID::Option& _internal_options(int index) const; - PROTOBUF_NAMESPACE_ID::Option* _internal_add_options(); + const ::PROTOBUF_NAMESPACE_ID::Option& _internal_options(int index) const; + ::PROTOBUF_NAMESPACE_ID::Option* _internal_add_options(); public: - const PROTOBUF_NAMESPACE_ID::Option& options(int index) const; - PROTOBUF_NAMESPACE_ID::Option* add_options(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Option >& + const ::PROTOBUF_NAMESPACE_ID::Option& options(int index) const; + ::PROTOBUF_NAMESPACE_ID::Option* add_options(); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& options() const; // string name = 1; @@ -529,11 +537,11 @@ class PROTOBUF_EXPORT Method final : // .google.protobuf.Syntax syntax = 7; void clear_syntax(); - PROTOBUF_NAMESPACE_ID::Syntax syntax() const; - void set_syntax(PROTOBUF_NAMESPACE_ID::Syntax value); + ::PROTOBUF_NAMESPACE_ID::Syntax syntax() const; + void set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value); private: - PROTOBUF_NAMESPACE_ID::Syntax _internal_syntax() const; - void _internal_set_syntax(PROTOBUF_NAMESPACE_ID::Syntax value); + ::PROTOBUF_NAMESPACE_ID::Syntax _internal_syntax() const; + void _internal_set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value); public: // @@protoc_insertion_point(class_scope:google.protobuf.Method) @@ -543,7 +551,7 @@ class PROTOBUF_EXPORT Method final : template friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper; typedef void InternalArenaConstructable_; typedef void DestructorSkippable_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Option > options_; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option > options_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr request_type_url_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr response_type_url_; @@ -574,7 +582,11 @@ class PROTOBUF_EXPORT Mixin final : } inline Mixin& operator=(Mixin&& from) noexcept { if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena()) { + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { InternalSwap(&from); } else { CopyFrom(from); @@ -780,31 +792,31 @@ inline int Api::methods_size() const { inline void Api::clear_methods() { methods_.Clear(); } -inline PROTOBUF_NAMESPACE_ID::Method* Api::mutable_methods(int index) { +inline ::PROTOBUF_NAMESPACE_ID::Method* Api::mutable_methods(int index) { // @@protoc_insertion_point(field_mutable:google.protobuf.Api.methods) return methods_.Mutable(index); } -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Method >* +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Method >* Api::mutable_methods() { // @@protoc_insertion_point(field_mutable_list:google.protobuf.Api.methods) return &methods_; } -inline const PROTOBUF_NAMESPACE_ID::Method& Api::_internal_methods(int index) const { +inline const ::PROTOBUF_NAMESPACE_ID::Method& Api::_internal_methods(int index) const { return methods_.Get(index); } -inline const PROTOBUF_NAMESPACE_ID::Method& Api::methods(int index) const { +inline const ::PROTOBUF_NAMESPACE_ID::Method& Api::methods(int index) const { // @@protoc_insertion_point(field_get:google.protobuf.Api.methods) return _internal_methods(index); } -inline PROTOBUF_NAMESPACE_ID::Method* Api::_internal_add_methods() { +inline ::PROTOBUF_NAMESPACE_ID::Method* Api::_internal_add_methods() { return methods_.Add(); } -inline PROTOBUF_NAMESPACE_ID::Method* Api::add_methods() { - PROTOBUF_NAMESPACE_ID::Method* _add = _internal_add_methods(); +inline ::PROTOBUF_NAMESPACE_ID::Method* Api::add_methods() { + ::PROTOBUF_NAMESPACE_ID::Method* _add = _internal_add_methods(); // @@protoc_insertion_point(field_add:google.protobuf.Api.methods) return _add; } -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Method >& +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Method >& Api::methods() const { // @@protoc_insertion_point(field_list:google.protobuf.Api.methods) return methods_; @@ -817,31 +829,31 @@ inline int Api::_internal_options_size() const { inline int Api::options_size() const { return _internal_options_size(); } -inline PROTOBUF_NAMESPACE_ID::Option* Api::mutable_options(int index) { +inline ::PROTOBUF_NAMESPACE_ID::Option* Api::mutable_options(int index) { // @@protoc_insertion_point(field_mutable:google.protobuf.Api.options) return options_.Mutable(index); } -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Option >* +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* Api::mutable_options() { // @@protoc_insertion_point(field_mutable_list:google.protobuf.Api.options) return &options_; } -inline const PROTOBUF_NAMESPACE_ID::Option& Api::_internal_options(int index) const { +inline const ::PROTOBUF_NAMESPACE_ID::Option& Api::_internal_options(int index) const { return options_.Get(index); } -inline const PROTOBUF_NAMESPACE_ID::Option& Api::options(int index) const { +inline const ::PROTOBUF_NAMESPACE_ID::Option& Api::options(int index) const { // @@protoc_insertion_point(field_get:google.protobuf.Api.options) return _internal_options(index); } -inline PROTOBUF_NAMESPACE_ID::Option* Api::_internal_add_options() { +inline ::PROTOBUF_NAMESPACE_ID::Option* Api::_internal_add_options() { return options_.Add(); } -inline PROTOBUF_NAMESPACE_ID::Option* Api::add_options() { - PROTOBUF_NAMESPACE_ID::Option* _add = _internal_add_options(); +inline ::PROTOBUF_NAMESPACE_ID::Option* Api::add_options() { + ::PROTOBUF_NAMESPACE_ID::Option* _add = _internal_add_options(); // @@protoc_insertion_point(field_add:google.protobuf.Api.options) return _add; } -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Option >& +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& Api::options() const { // @@protoc_insertion_point(field_list:google.protobuf.Api.options) return options_; @@ -900,17 +912,17 @@ inline bool Api::_internal_has_source_context() const { inline bool Api::has_source_context() const { return _internal_has_source_context(); } -inline const PROTOBUF_NAMESPACE_ID::SourceContext& Api::_internal_source_context() const { - const PROTOBUF_NAMESPACE_ID::SourceContext* p = source_context_; - return p != nullptr ? *p : reinterpret_cast( - PROTOBUF_NAMESPACE_ID::_SourceContext_default_instance_); +inline const ::PROTOBUF_NAMESPACE_ID::SourceContext& Api::_internal_source_context() const { + const ::PROTOBUF_NAMESPACE_ID::SourceContext* p = source_context_; + return p != nullptr ? *p : reinterpret_cast( + ::PROTOBUF_NAMESPACE_ID::_SourceContext_default_instance_); } -inline const PROTOBUF_NAMESPACE_ID::SourceContext& Api::source_context() const { +inline const ::PROTOBUF_NAMESPACE_ID::SourceContext& Api::source_context() const { // @@protoc_insertion_point(field_get:google.protobuf.Api.source_context) return _internal_source_context(); } inline void Api::unsafe_arena_set_allocated_source_context( - PROTOBUF_NAMESPACE_ID::SourceContext* source_context) { + ::PROTOBUF_NAMESPACE_ID::SourceContext* source_context) { if (GetArenaForAllocation() == nullptr) { delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(source_context_); } @@ -922,9 +934,9 @@ inline void Api::unsafe_arena_set_allocated_source_context( } // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.Api.source_context) } -inline PROTOBUF_NAMESPACE_ID::SourceContext* Api::release_source_context() { +inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Api::release_source_context() { - PROTOBUF_NAMESPACE_ID::SourceContext* temp = source_context_; + ::PROTOBUF_NAMESPACE_ID::SourceContext* temp = source_context_; source_context_ = nullptr; #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); @@ -937,27 +949,27 @@ inline PROTOBUF_NAMESPACE_ID::SourceContext* Api::release_source_context() { #endif // !PROTOBUF_FORCE_COPY_IN_RELEASE return temp; } -inline PROTOBUF_NAMESPACE_ID::SourceContext* Api::unsafe_arena_release_source_context() { +inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Api::unsafe_arena_release_source_context() { // @@protoc_insertion_point(field_release:google.protobuf.Api.source_context) - PROTOBUF_NAMESPACE_ID::SourceContext* temp = source_context_; + ::PROTOBUF_NAMESPACE_ID::SourceContext* temp = source_context_; source_context_ = nullptr; return temp; } -inline PROTOBUF_NAMESPACE_ID::SourceContext* Api::_internal_mutable_source_context() { +inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Api::_internal_mutable_source_context() { if (source_context_ == nullptr) { - auto* p = CreateMaybeMessage(GetArenaForAllocation()); + auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::SourceContext>(GetArenaForAllocation()); source_context_ = p; } return source_context_; } -inline PROTOBUF_NAMESPACE_ID::SourceContext* Api::mutable_source_context() { - PROTOBUF_NAMESPACE_ID::SourceContext* _msg = _internal_mutable_source_context(); +inline ::PROTOBUF_NAMESPACE_ID::SourceContext* Api::mutable_source_context() { + ::PROTOBUF_NAMESPACE_ID::SourceContext* _msg = _internal_mutable_source_context(); // @@protoc_insertion_point(field_mutable:google.protobuf.Api.source_context) return _msg; } -inline void Api::set_allocated_source_context(PROTOBUF_NAMESPACE_ID::SourceContext* source_context) { +inline void Api::set_allocated_source_context(::PROTOBUF_NAMESPACE_ID::SourceContext* source_context) { ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); if (message_arena == nullptr) { delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(source_context_); @@ -989,31 +1001,31 @@ inline int Api::mixins_size() const { inline void Api::clear_mixins() { mixins_.Clear(); } -inline PROTOBUF_NAMESPACE_ID::Mixin* Api::mutable_mixins(int index) { +inline ::PROTOBUF_NAMESPACE_ID::Mixin* Api::mutable_mixins(int index) { // @@protoc_insertion_point(field_mutable:google.protobuf.Api.mixins) return mixins_.Mutable(index); } -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Mixin >* +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Mixin >* Api::mutable_mixins() { // @@protoc_insertion_point(field_mutable_list:google.protobuf.Api.mixins) return &mixins_; } -inline const PROTOBUF_NAMESPACE_ID::Mixin& Api::_internal_mixins(int index) const { +inline const ::PROTOBUF_NAMESPACE_ID::Mixin& Api::_internal_mixins(int index) const { return mixins_.Get(index); } -inline const PROTOBUF_NAMESPACE_ID::Mixin& Api::mixins(int index) const { +inline const ::PROTOBUF_NAMESPACE_ID::Mixin& Api::mixins(int index) const { // @@protoc_insertion_point(field_get:google.protobuf.Api.mixins) return _internal_mixins(index); } -inline PROTOBUF_NAMESPACE_ID::Mixin* Api::_internal_add_mixins() { +inline ::PROTOBUF_NAMESPACE_ID::Mixin* Api::_internal_add_mixins() { return mixins_.Add(); } -inline PROTOBUF_NAMESPACE_ID::Mixin* Api::add_mixins() { - PROTOBUF_NAMESPACE_ID::Mixin* _add = _internal_add_mixins(); +inline ::PROTOBUF_NAMESPACE_ID::Mixin* Api::add_mixins() { + ::PROTOBUF_NAMESPACE_ID::Mixin* _add = _internal_add_mixins(); // @@protoc_insertion_point(field_add:google.protobuf.Api.mixins) return _add; } -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Mixin >& +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Mixin >& Api::mixins() const { // @@protoc_insertion_point(field_list:google.protobuf.Api.mixins) return mixins_; @@ -1023,18 +1035,18 @@ Api::mixins() const { inline void Api::clear_syntax() { syntax_ = 0; } -inline PROTOBUF_NAMESPACE_ID::Syntax Api::_internal_syntax() const { - return static_cast< PROTOBUF_NAMESPACE_ID::Syntax >(syntax_); +inline ::PROTOBUF_NAMESPACE_ID::Syntax Api::_internal_syntax() const { + return static_cast< ::PROTOBUF_NAMESPACE_ID::Syntax >(syntax_); } -inline PROTOBUF_NAMESPACE_ID::Syntax Api::syntax() const { +inline ::PROTOBUF_NAMESPACE_ID::Syntax Api::syntax() const { // @@protoc_insertion_point(field_get:google.protobuf.Api.syntax) return _internal_syntax(); } -inline void Api::_internal_set_syntax(PROTOBUF_NAMESPACE_ID::Syntax value) { +inline void Api::_internal_set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value) { syntax_ = value; } -inline void Api::set_syntax(PROTOBUF_NAMESPACE_ID::Syntax value) { +inline void Api::set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value) { _internal_set_syntax(value); // @@protoc_insertion_point(field_set:google.protobuf.Api.syntax) } @@ -1228,31 +1240,31 @@ inline int Method::_internal_options_size() const { inline int Method::options_size() const { return _internal_options_size(); } -inline PROTOBUF_NAMESPACE_ID::Option* Method::mutable_options(int index) { +inline ::PROTOBUF_NAMESPACE_ID::Option* Method::mutable_options(int index) { // @@protoc_insertion_point(field_mutable:google.protobuf.Method.options) return options_.Mutable(index); } -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Option >* +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >* Method::mutable_options() { // @@protoc_insertion_point(field_mutable_list:google.protobuf.Method.options) return &options_; } -inline const PROTOBUF_NAMESPACE_ID::Option& Method::_internal_options(int index) const { +inline const ::PROTOBUF_NAMESPACE_ID::Option& Method::_internal_options(int index) const { return options_.Get(index); } -inline const PROTOBUF_NAMESPACE_ID::Option& Method::options(int index) const { +inline const ::PROTOBUF_NAMESPACE_ID::Option& Method::options(int index) const { // @@protoc_insertion_point(field_get:google.protobuf.Method.options) return _internal_options(index); } -inline PROTOBUF_NAMESPACE_ID::Option* Method::_internal_add_options() { +inline ::PROTOBUF_NAMESPACE_ID::Option* Method::_internal_add_options() { return options_.Add(); } -inline PROTOBUF_NAMESPACE_ID::Option* Method::add_options() { - PROTOBUF_NAMESPACE_ID::Option* _add = _internal_add_options(); +inline ::PROTOBUF_NAMESPACE_ID::Option* Method::add_options() { + ::PROTOBUF_NAMESPACE_ID::Option* _add = _internal_add_options(); // @@protoc_insertion_point(field_add:google.protobuf.Method.options) return _add; } -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::Option >& +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::Option >& Method::options() const { // @@protoc_insertion_point(field_list:google.protobuf.Method.options) return options_; @@ -1262,18 +1274,18 @@ Method::options() const { inline void Method::clear_syntax() { syntax_ = 0; } -inline PROTOBUF_NAMESPACE_ID::Syntax Method::_internal_syntax() const { - return static_cast< PROTOBUF_NAMESPACE_ID::Syntax >(syntax_); +inline ::PROTOBUF_NAMESPACE_ID::Syntax Method::_internal_syntax() const { + return static_cast< ::PROTOBUF_NAMESPACE_ID::Syntax >(syntax_); } -inline PROTOBUF_NAMESPACE_ID::Syntax Method::syntax() const { +inline ::PROTOBUF_NAMESPACE_ID::Syntax Method::syntax() const { // @@protoc_insertion_point(field_get:google.protobuf.Method.syntax) return _internal_syntax(); } -inline void Method::_internal_set_syntax(PROTOBUF_NAMESPACE_ID::Syntax value) { +inline void Method::_internal_set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value) { syntax_ = value; } -inline void Method::set_syntax(PROTOBUF_NAMESPACE_ID::Syntax value) { +inline void Method::set_syntax(::PROTOBUF_NAMESPACE_ID::Syntax value) { _internal_set_syntax(value); // @@protoc_insertion_point(field_set:google.protobuf.Method.syntax) } diff --git a/src/google/protobuf/arena.h b/src/google/protobuf/arena.h index f454b84dcc..14d5e86eef 100644 --- a/src/google/protobuf/arena.h +++ b/src/google/protobuf/arena.h @@ -299,7 +299,7 @@ class PROTOBUF_EXPORT PROTOBUF_ALIGNAS(8) Arena final { // We must delegate to CreateMaybeMessage() and NOT CreateMessageInternal() // because protobuf generated classes specialize CreateMaybeMessage() and we // need to use that specialization for code size reasons. - return Arena::CreateMaybeMessage(arena, std::forward(args)...); + return Arena::CreateMaybeMessage(arena, static_cast(args)...); } // API to create any objects on the arena. Note that only the object will @@ -320,7 +320,7 @@ class PROTOBUF_EXPORT PROTOBUF_ALIGNAS(8) Arena final { template PROTOBUF_NDEBUG_INLINE static T* Create(Arena* arena, Args&&... args) { return CreateInternal(arena, std::is_convertible(), - std::forward(args)...); + static_cast(args)...); } // Create an array of object type T on the arena *without* invoking the @@ -484,7 +484,7 @@ class PROTOBUF_EXPORT PROTOBUF_ALIGNAS(8) Arena final { template static T* Construct(void* ptr, Args&&... args) { - return new (ptr) T(std::forward(args)...); + return new (ptr) T(static_cast(args)...); } static T* New() { @@ -528,9 +528,9 @@ class PROTOBUF_EXPORT PROTOBUF_ALIGNAS(8) Arena final { InternalHelper::is_arena_constructable::value, "CreateMessage can only construct types that are ArenaConstructable"); if (arena == NULL) { - return new T(nullptr, std::forward(args)...); + return new T(nullptr, static_cast(args)...); } else { - return arena->DoCreateMessage(std::forward(args)...); + return arena->DoCreateMessage(static_cast(args)...); } } diff --git a/src/google/protobuf/compiler/cpp/cpp_file.cc b/src/google/protobuf/compiler/cpp/cpp_file.cc index 8045b0597b..66c39b0c91 100644 --- a/src/google/protobuf/compiler/cpp/cpp_file.cc +++ b/src/google/protobuf/compiler/cpp/cpp_file.cc @@ -1181,6 +1181,9 @@ void FileGenerator::GenerateLibraryIncludes(io::Printer* 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) { diff --git a/src/google/protobuf/compiler/cpp/cpp_helpers.cc b/src/google/protobuf/compiler/cpp/cpp_helpers.cc index 001586aa03..6e954e7463 100644 --- a/src/google/protobuf/compiler/cpp/cpp_helpers.cc +++ b/src/google/protobuf/compiler/cpp/cpp_helpers.cc @@ -400,7 +400,7 @@ std::string Namespace(const FileDescriptor* d, const Options& options) { ret = StringReplace(ret, "::google::" "protobuf", - "PROTOBUF_NAMESPACE_ID", false); + "::PROTOBUF_NAMESPACE_ID", false); } return ret; } diff --git a/src/google/protobuf/compiler/cpp/cpp_helpers.h b/src/google/protobuf/compiler/cpp/cpp_helpers.h index 37bfb9e253..ca62fc2242 100644 --- a/src/google/protobuf/compiler/cpp/cpp_helpers.h +++ b/src/google/protobuf/compiler/cpp/cpp_helpers.h @@ -659,6 +659,15 @@ inline bool HasSimpleBaseClass(const Descriptor* desc, const Options& options) { return false; } +inline bool HasSimpleBaseClasses(const FileDescriptor* file, + const Options& options) { + bool v = false; + ForEachMessage(file, [&v, &options](const Descriptor* desc) { + v |= HasSimpleBaseClass(desc, options); + }); + return v; +} + inline std::string SimpleBaseClass(const Descriptor* desc, const Options& options) { if (!HasDescriptorMethods(desc->file(), options)) return ""; diff --git a/src/google/protobuf/compiler/cpp/cpp_message.cc b/src/google/protobuf/compiler/cpp/cpp_message.cc index 3955168171..814ddd926c 100644 --- a/src/google/protobuf/compiler/cpp/cpp_message.cc +++ b/src/google/protobuf/compiler/cpp/cpp_message.cc @@ -1460,7 +1460,11 @@ void MessageGenerator::GenerateClassDefinition(io::Printer* printer) { "}\n" "inline $classname$& operator=($classname$&& from) noexcept {\n" " if (this == &from) return *this;\n" - " if (GetOwningArena() == from.GetOwningArena()) {\n" + " if (GetOwningArena() == from.GetOwningArena()\n" + "#ifdef PROTOBUF_FORCE_COPY_IN_MOVE\n" + " && GetOwningArena() != nullptr\n" + "#endif // !PROTOBUF_FORCE_COPY_IN_MOVE\n" + " ) {\n" " InternalSwap(&from);\n" " } else {\n" " CopyFrom(from);\n" diff --git a/src/google/protobuf/compiler/cpp/cpp_parse_function_generator.cc b/src/google/protobuf/compiler/cpp/cpp_parse_function_generator.cc index c1f9e461cb..45dddc3250 100644 --- a/src/google/protobuf/compiler/cpp/cpp_parse_function_generator.cc +++ b/src/google/protobuf/compiler/cpp/cpp_parse_function_generator.cc @@ -214,7 +214,8 @@ TailCallTableInfo::TailCallTableInfo(const Descriptor* descriptor, case FieldDescriptor::TYPE_BYTES: if (field->options().ctype() == FieldOptions::STRING && - field->default_value_string().empty()) { + field->default_value_string().empty() && + !IsStringInlined(field, options)) { name = FieldParseFunctionName(field, options, table_size_log2); } break; @@ -628,8 +629,9 @@ void ParseFunctionGenerator::GenerateArenaString(Formatter& format, int inlined_string_index = inlined_string_indices_[field->index()]; GOOGLE_DCHECK_GE(inlined_string_index, 0); format( - ", $msg$_internal_$name$_donated(), &_inlined_string_donated_[$1$], " - "~0x$2$u", + ", $msg$_internal_$name$_donated()" + ", &$msg$_inlined_string_donated_[$1$]" + ", ~0x$2$u", inlined_string_index / 32, strings::Hex(1u << (inlined_string_index % 32), strings::ZERO_PAD_8)); } diff --git a/src/google/protobuf/compiler/cpp/cpp_unittest.inc b/src/google/protobuf/compiler/cpp/cpp_unittest.inc index 10e28a832d..663d25f5a8 100644 --- a/src/google/protobuf/compiler/cpp/cpp_unittest.inc +++ b/src/google/protobuf/compiler/cpp/cpp_unittest.inc @@ -510,7 +510,12 @@ TEST(GENERATED_MESSAGE_TEST_NAME, ADLSwap) { TestUtil::ExpectAllFieldsSet(message2); TestUtil::ExpectClear(message1); +#ifdef PROTOBUF_FORCE_COPY_IN_SWAP + EXPECT_NE(addr, &message2.repeated_int32().Get(0)); + EXPECT_EQ(*addr, message2.repeated_int32().Get(0)); +#else EXPECT_EQ(addr, &message2.repeated_int32().Get(0)); +#endif } TEST(GENERATED_MESSAGE_TEST_NAME, CopyConstructor) { @@ -938,12 +943,12 @@ TEST(GENERATED_MESSAGE_TEST_NAME, TestOneofSpaceUsed) { // Setting a message in oneof should delete the other fields and increase the // size by the size of the nested message type. NestedMessage is simple enough - // that it is equal to sizeof(NestedMessage) + // that it is equal to sizeof(NestedMessage). It may be backed by LazyField, + // increasing space used by LazyField and backing Cord. message1.mutable_foo_message(); ASSERT_EQ(sizeof(UNITTEST::TestOneof2::NestedMessage), message1.foo_message().SpaceUsedLong()); - EXPECT_EQ(empty_message_size + - sizeof(UNITTEST::TestOneof2::NestedMessage), + EXPECT_LE(empty_message_size + sizeof(UNITTEST::TestOneof2::NestedMessage), message1.SpaceUsedLong()); } diff --git a/src/google/protobuf/compiler/java/java_message.cc b/src/google/protobuf/compiler/java/java_message.cc index b7df10d175..7e4c1c91c0 100644 --- a/src/google/protobuf/compiler/java/java_message.cc +++ b/src/google/protobuf/compiler/java/java_message.cc @@ -316,7 +316,6 @@ void ImmutableMessageGenerator::Generate(io::Printer* printer) { WriteMessageDocComment(printer, descriptor_); MaybePrintGeneratedAnnotation(context_, printer, descriptor_, /* immutable = */ true); - // The builder_type stores the super type name of the nested Builder class. std::string builder_type; if (descriptor_->extension_range_count() > 0) { diff --git a/src/google/protobuf/compiler/plugin.pb.cc b/src/google/protobuf/compiler/plugin.pb.cc index 9f09ec225a..c11b3f8423 100644 --- a/src/google/protobuf/compiler/plugin.pb.cc +++ b/src/google/protobuf/compiler/plugin.pb.cc @@ -84,73 +84,73 @@ static const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* file_level_enum_descriptor static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_google_2fprotobuf_2fcompiler_2fplugin_2eproto = nullptr; const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::Version, _has_bits_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::Version, _internal_metadata_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::Version, _has_bits_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::Version, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ ~0u, // no _inlined_string_donated_ - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::Version, major_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::Version, minor_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::Version, patch_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::Version, suffix_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::Version, major_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::Version, minor_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::Version, patch_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::Version, suffix_), 1, 2, 3, 0, - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest, _has_bits_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest, _internal_metadata_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest, _has_bits_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ ~0u, // no _inlined_string_donated_ - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest, file_to_generate_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest, parameter_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest, proto_file_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest, compiler_version_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest, file_to_generate_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest, parameter_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest, proto_file_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest, compiler_version_), ~0u, 0, ~0u, 1, - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File, _has_bits_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File, _internal_metadata_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File, _has_bits_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ ~0u, // no _inlined_string_donated_ - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File, name_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File, insertion_point_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File, content_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File, generated_code_info_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File, name_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File, insertion_point_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File, content_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File, generated_code_info_), 0, 1, 2, 3, - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse, _has_bits_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse, _internal_metadata_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse, _has_bits_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ ~0u, // no _inlined_string_donated_ - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse, error_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse, supported_features_), - PROTOBUF_FIELD_OFFSET(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse, file_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse, error_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse, supported_features_), + PROTOBUF_FIELD_OFFSET(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse, file_), 0, 1, ~0u, }; static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { - { 0, 10, -1, sizeof(PROTOBUF_NAMESPACE_ID::compiler::Version)}, - { 14, 24, -1, sizeof(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest)}, - { 28, 38, -1, sizeof(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File)}, - { 42, 51, -1, sizeof(PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse)}, + { 0, 10, -1, sizeof(::PROTOBUF_NAMESPACE_ID::compiler::Version)}, + { 14, 24, -1, sizeof(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest)}, + { 28, 38, -1, sizeof(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File)}, + { 42, 51, -1, sizeof(::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse)}, }; static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = { - reinterpret_cast(&PROTOBUF_NAMESPACE_ID::compiler::_Version_default_instance_), - reinterpret_cast(&PROTOBUF_NAMESPACE_ID::compiler::_CodeGeneratorRequest_default_instance_), - reinterpret_cast(&PROTOBUF_NAMESPACE_ID::compiler::_CodeGeneratorResponse_File_default_instance_), - reinterpret_cast(&PROTOBUF_NAMESPACE_ID::compiler::_CodeGeneratorResponse_default_instance_), + reinterpret_cast(&::PROTOBUF_NAMESPACE_ID::compiler::_Version_default_instance_), + reinterpret_cast(&::PROTOBUF_NAMESPACE_ID::compiler::_CodeGeneratorRequest_default_instance_), + reinterpret_cast(&::PROTOBUF_NAMESPACE_ID::compiler::_CodeGeneratorResponse_File_default_instance_), + reinterpret_cast(&::PROTOBUF_NAMESPACE_ID::compiler::_CodeGeneratorResponse_default_instance_), }; const char descriptor_table_protodef_google_2fprotobuf_2fcompiler_2fplugin_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = @@ -538,13 +538,13 @@ class CodeGeneratorRequest::_Internal { static void set_has_parameter(HasBits* has_bits) { (*has_bits)[0] |= 1u; } - static const PROTOBUF_NAMESPACE_ID::compiler::Version& compiler_version(const CodeGeneratorRequest* msg); + static const ::PROTOBUF_NAMESPACE_ID::compiler::Version& compiler_version(const CodeGeneratorRequest* msg); static void set_has_compiler_version(HasBits* has_bits) { (*has_bits)[0] |= 2u; } }; -const PROTOBUF_NAMESPACE_ID::compiler::Version& +const ::PROTOBUF_NAMESPACE_ID::compiler::Version& CodeGeneratorRequest::_Internal::compiler_version(const CodeGeneratorRequest* msg) { return *msg->compiler_version_; } @@ -574,7 +574,7 @@ CodeGeneratorRequest::CodeGeneratorRequest(const CodeGeneratorRequest& from) GetArenaForAllocation()); } if (from._internal_has_compiler_version()) { - compiler_version_ = new PROTOBUF_NAMESPACE_ID::compiler::Version(*from.compiler_version_); + compiler_version_ = new ::PROTOBUF_NAMESPACE_ID::compiler::Version(*from.compiler_version_); } else { compiler_version_ = nullptr; } @@ -833,7 +833,7 @@ void CodeGeneratorRequest::MergeFrom(const CodeGeneratorRequest& from) { _internal_set_parameter(from._internal_parameter()); } if (cached_has_bits & 0x00000002u) { - _internal_mutable_compiler_version()->PROTOBUF_NAMESPACE_ID::compiler::Version::MergeFrom(from._internal_compiler_version()); + _internal_mutable_compiler_version()->::PROTOBUF_NAMESPACE_ID::compiler::Version::MergeFrom(from._internal_compiler_version()); } } _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); @@ -887,13 +887,13 @@ class CodeGeneratorResponse_File::_Internal { static void set_has_content(HasBits* has_bits) { (*has_bits)[0] |= 4u; } - static const PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& generated_code_info(const CodeGeneratorResponse_File* msg); + static const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& generated_code_info(const CodeGeneratorResponse_File* msg); static void set_has_generated_code_info(HasBits* has_bits) { (*has_bits)[0] |= 8u; } }; -const PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& +const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& CodeGeneratorResponse_File::_Internal::generated_code_info(const CodeGeneratorResponse_File* msg) { return *msg->generated_code_info_; } @@ -930,7 +930,7 @@ CodeGeneratorResponse_File::CodeGeneratorResponse_File(const CodeGeneratorRespon GetArenaForAllocation()); } if (from._internal_has_generated_code_info()) { - generated_code_info_ = new PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo(*from.generated_code_info_); + generated_code_info_ = new ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo(*from.generated_code_info_); } else { generated_code_info_ = nullptr; } @@ -1196,7 +1196,7 @@ void CodeGeneratorResponse_File::MergeFrom(const CodeGeneratorResponse_File& fro _internal_set_content(from._internal_content()); } if (cached_has_bits & 0x00000008u) { - _internal_mutable_generated_code_info()->PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo::MergeFrom(from._internal_generated_code_info()); + _internal_mutable_generated_code_info()->::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo::MergeFrom(from._internal_generated_code_info()); } } _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); @@ -1529,17 +1529,17 @@ void CodeGeneratorResponse::InternalSwap(CodeGeneratorResponse* other) { } // namespace compiler PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_OPEN -template<> PROTOBUF_NOINLINE PROTOBUF_NAMESPACE_ID::compiler::Version* Arena::CreateMaybeMessage< PROTOBUF_NAMESPACE_ID::compiler::Version >(Arena* arena) { - return Arena::CreateMessageInternal< PROTOBUF_NAMESPACE_ID::compiler::Version >(arena); +template<> PROTOBUF_NOINLINE ::PROTOBUF_NAMESPACE_ID::compiler::Version* Arena::CreateMaybeMessage< ::PROTOBUF_NAMESPACE_ID::compiler::Version >(Arena* arena) { + return Arena::CreateMessageInternal< ::PROTOBUF_NAMESPACE_ID::compiler::Version >(arena); } -template<> PROTOBUF_NOINLINE PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest* Arena::CreateMaybeMessage< PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest >(Arena* arena) { - return Arena::CreateMessageInternal< PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest >(arena); +template<> PROTOBUF_NOINLINE ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest* Arena::CreateMaybeMessage< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest >(Arena* arena) { + return Arena::CreateMessageInternal< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest >(arena); } -template<> PROTOBUF_NOINLINE PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* Arena::CreateMaybeMessage< PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >(Arena* arena) { - return Arena::CreateMessageInternal< PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >(arena); +template<> PROTOBUF_NOINLINE ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* Arena::CreateMaybeMessage< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >(Arena* arena) { + return Arena::CreateMessageInternal< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >(arena); } -template<> PROTOBUF_NOINLINE PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse* Arena::CreateMaybeMessage< PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse >(Arena* arena) { - return Arena::CreateMessageInternal< PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse >(arena); +template<> PROTOBUF_NOINLINE ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse* Arena::CreateMaybeMessage< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse >(Arena* arena) { + return Arena::CreateMessageInternal< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse >(arena); } PROTOBUF_NAMESPACE_CLOSE diff --git a/src/google/protobuf/compiler/plugin.pb.h b/src/google/protobuf/compiler/plugin.pb.h index d6124da232..1c6dabf2b8 100644 --- a/src/google/protobuf/compiler/plugin.pb.h +++ b/src/google/protobuf/compiler/plugin.pb.h @@ -78,10 +78,10 @@ PROTOC_EXPORT extern VersionDefaultTypeInternal _Version_default_instance_; } // namespace compiler PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_OPEN -template<> PROTOC_EXPORT PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest* Arena::CreateMaybeMessage(Arena*); -template<> PROTOC_EXPORT PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse* Arena::CreateMaybeMessage(Arena*); -template<> PROTOC_EXPORT PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* Arena::CreateMaybeMessage(Arena*); -template<> PROTOC_EXPORT PROTOBUF_NAMESPACE_ID::compiler::Version* Arena::CreateMaybeMessage(Arena*); +template<> PROTOC_EXPORT ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorRequest>(Arena*); +template<> PROTOC_EXPORT ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse>(Arena*); +template<> PROTOC_EXPORT ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File>(Arena*); +template<> PROTOC_EXPORT ::PROTOBUF_NAMESPACE_ID::compiler::Version* Arena::CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::compiler::Version>(Arena*); PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_OPEN namespace compiler { @@ -130,7 +130,11 @@ class PROTOC_EXPORT Version final : } inline Version& operator=(Version&& from) noexcept { if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena()) { + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { InternalSwap(&from); } else { CopyFrom(from); @@ -331,7 +335,11 @@ class PROTOC_EXPORT CodeGeneratorRequest final : } inline CodeGeneratorRequest& operator=(CodeGeneratorRequest&& from) noexcept { if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena()) { + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { InternalSwap(&from); } else { CopyFrom(from); @@ -469,16 +477,16 @@ class PROTOC_EXPORT CodeGeneratorRequest final : int _internal_proto_file_size() const; public: void clear_proto_file(); - PROTOBUF_NAMESPACE_ID::FileDescriptorProto* mutable_proto_file(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::FileDescriptorProto >* + ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* mutable_proto_file(int index); + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto >* mutable_proto_file(); private: - const PROTOBUF_NAMESPACE_ID::FileDescriptorProto& _internal_proto_file(int index) const; - PROTOBUF_NAMESPACE_ID::FileDescriptorProto* _internal_add_proto_file(); + const ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto& _internal_proto_file(int index) const; + ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* _internal_add_proto_file(); public: - const PROTOBUF_NAMESPACE_ID::FileDescriptorProto& proto_file(int index) const; - PROTOBUF_NAMESPACE_ID::FileDescriptorProto* add_proto_file(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::FileDescriptorProto >& + const ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto& proto_file(int index) const; + ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* add_proto_file(); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto >& proto_file() const; // optional string parameter = 2; @@ -505,17 +513,17 @@ class PROTOC_EXPORT CodeGeneratorRequest final : bool _internal_has_compiler_version() const; public: void clear_compiler_version(); - const PROTOBUF_NAMESPACE_ID::compiler::Version& compiler_version() const; - PROTOBUF_MUST_USE_RESULT PROTOBUF_NAMESPACE_ID::compiler::Version* release_compiler_version(); - PROTOBUF_NAMESPACE_ID::compiler::Version* mutable_compiler_version(); - void set_allocated_compiler_version(PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version); + const ::PROTOBUF_NAMESPACE_ID::compiler::Version& compiler_version() const; + PROTOBUF_MUST_USE_RESULT ::PROTOBUF_NAMESPACE_ID::compiler::Version* release_compiler_version(); + ::PROTOBUF_NAMESPACE_ID::compiler::Version* mutable_compiler_version(); + void set_allocated_compiler_version(::PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version); private: - const PROTOBUF_NAMESPACE_ID::compiler::Version& _internal_compiler_version() const; - PROTOBUF_NAMESPACE_ID::compiler::Version* _internal_mutable_compiler_version(); + const ::PROTOBUF_NAMESPACE_ID::compiler::Version& _internal_compiler_version() const; + ::PROTOBUF_NAMESPACE_ID::compiler::Version* _internal_mutable_compiler_version(); public: void unsafe_arena_set_allocated_compiler_version( - PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version); - PROTOBUF_NAMESPACE_ID::compiler::Version* unsafe_arena_release_compiler_version(); + ::PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version); + ::PROTOBUF_NAMESPACE_ID::compiler::Version* unsafe_arena_release_compiler_version(); // @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorRequest) private: @@ -527,9 +535,9 @@ class PROTOC_EXPORT CodeGeneratorRequest final : ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField file_to_generate_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::FileDescriptorProto > proto_file_; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto > proto_file_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr parameter_; - PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version_; + ::PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version_; friend struct ::TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto; }; // ------------------------------------------------------------------- @@ -553,7 +561,11 @@ class PROTOC_EXPORT CodeGeneratorResponse_File final : } inline CodeGeneratorResponse_File& operator=(CodeGeneratorResponse_File&& from) noexcept { if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena()) { + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { InternalSwap(&from); } else { CopyFrom(from); @@ -721,17 +733,17 @@ class PROTOC_EXPORT CodeGeneratorResponse_File final : bool _internal_has_generated_code_info() const; public: void clear_generated_code_info(); - const PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& generated_code_info() const; - PROTOBUF_MUST_USE_RESULT PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* release_generated_code_info(); - PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* mutable_generated_code_info(); - void set_allocated_generated_code_info(PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info); + const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& generated_code_info() const; + PROTOBUF_MUST_USE_RESULT ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* release_generated_code_info(); + ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* mutable_generated_code_info(); + void set_allocated_generated_code_info(::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info); private: - const PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& _internal_generated_code_info() const; - PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* _internal_mutable_generated_code_info(); + const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& _internal_generated_code_info() const; + ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* _internal_mutable_generated_code_info(); public: void unsafe_arena_set_allocated_generated_code_info( - PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info); - PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* unsafe_arena_release_generated_code_info(); + ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info); + ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* unsafe_arena_release_generated_code_info(); // @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorResponse.File) private: @@ -745,7 +757,7 @@ class PROTOC_EXPORT CodeGeneratorResponse_File final : ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr insertion_point_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr content_; - PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info_; + ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info_; friend struct ::TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto; }; // ------------------------------------------------------------------- @@ -769,7 +781,11 @@ class PROTOC_EXPORT CodeGeneratorResponse final : } inline CodeGeneratorResponse& operator=(CodeGeneratorResponse&& from) noexcept { if (this == &from) return *this; - if (GetOwningArena() == from.GetOwningArena()) { + if (GetOwningArena() == from.GetOwningArena() + #ifdef PROTOBUF_FORCE_COPY_IN_MOVE + && GetOwningArena() != nullptr + #endif // !PROTOBUF_FORCE_COPY_IN_MOVE + ) { InternalSwap(&from); } else { CopyFrom(from); @@ -914,16 +930,16 @@ class PROTOC_EXPORT CodeGeneratorResponse final : int _internal_file_size() const; public: void clear_file(); - PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* mutable_file(int index); - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >* + ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* mutable_file(int index); + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >* mutable_file(); private: - const PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File& _internal_file(int index) const; - PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* _internal_add_file(); + const ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File& _internal_file(int index) const; + ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* _internal_add_file(); public: - const PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File& file(int index) const; - PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* add_file(); - const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >& + const ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File& file(int index) const; + ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* add_file(); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >& file() const; // optional string error = 1; @@ -966,7 +982,7 @@ class PROTOC_EXPORT CodeGeneratorResponse final : typedef void DestructorSkippable_; ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; - ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File > file_; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File > file_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr error_; ::PROTOBUF_NAMESPACE_ID::uint64 supported_features_; friend struct ::TableStruct_google_2fprotobuf_2fcompiler_2fplugin_2eproto; @@ -1268,31 +1284,31 @@ inline int CodeGeneratorRequest::_internal_proto_file_size() const { inline int CodeGeneratorRequest::proto_file_size() const { return _internal_proto_file_size(); } -inline PROTOBUF_NAMESPACE_ID::FileDescriptorProto* CodeGeneratorRequest::mutable_proto_file(int index) { +inline ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* CodeGeneratorRequest::mutable_proto_file(int index) { // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorRequest.proto_file) return proto_file_.Mutable(index); } -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::FileDescriptorProto >* +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto >* CodeGeneratorRequest::mutable_proto_file() { // @@protoc_insertion_point(field_mutable_list:google.protobuf.compiler.CodeGeneratorRequest.proto_file) return &proto_file_; } -inline const PROTOBUF_NAMESPACE_ID::FileDescriptorProto& CodeGeneratorRequest::_internal_proto_file(int index) const { +inline const ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto& CodeGeneratorRequest::_internal_proto_file(int index) const { return proto_file_.Get(index); } -inline const PROTOBUF_NAMESPACE_ID::FileDescriptorProto& CodeGeneratorRequest::proto_file(int index) const { +inline const ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto& CodeGeneratorRequest::proto_file(int index) const { // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorRequest.proto_file) return _internal_proto_file(index); } -inline PROTOBUF_NAMESPACE_ID::FileDescriptorProto* CodeGeneratorRequest::_internal_add_proto_file() { +inline ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* CodeGeneratorRequest::_internal_add_proto_file() { return proto_file_.Add(); } -inline PROTOBUF_NAMESPACE_ID::FileDescriptorProto* CodeGeneratorRequest::add_proto_file() { - PROTOBUF_NAMESPACE_ID::FileDescriptorProto* _add = _internal_add_proto_file(); +inline ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* CodeGeneratorRequest::add_proto_file() { + ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto* _add = _internal_add_proto_file(); // @@protoc_insertion_point(field_add:google.protobuf.compiler.CodeGeneratorRequest.proto_file) return _add; } -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::FileDescriptorProto >& +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::FileDescriptorProto >& CodeGeneratorRequest::proto_file() const { // @@protoc_insertion_point(field_list:google.protobuf.compiler.CodeGeneratorRequest.proto_file) return proto_file_; @@ -1311,17 +1327,17 @@ inline void CodeGeneratorRequest::clear_compiler_version() { if (compiler_version_ != nullptr) compiler_version_->Clear(); _has_bits_[0] &= ~0x00000002u; } -inline const PROTOBUF_NAMESPACE_ID::compiler::Version& CodeGeneratorRequest::_internal_compiler_version() const { - const PROTOBUF_NAMESPACE_ID::compiler::Version* p = compiler_version_; - return p != nullptr ? *p : reinterpret_cast( - PROTOBUF_NAMESPACE_ID::compiler::_Version_default_instance_); +inline const ::PROTOBUF_NAMESPACE_ID::compiler::Version& CodeGeneratorRequest::_internal_compiler_version() const { + const ::PROTOBUF_NAMESPACE_ID::compiler::Version* p = compiler_version_; + return p != nullptr ? *p : reinterpret_cast( + ::PROTOBUF_NAMESPACE_ID::compiler::_Version_default_instance_); } -inline const PROTOBUF_NAMESPACE_ID::compiler::Version& CodeGeneratorRequest::compiler_version() const { +inline const ::PROTOBUF_NAMESPACE_ID::compiler::Version& CodeGeneratorRequest::compiler_version() const { // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorRequest.compiler_version) return _internal_compiler_version(); } inline void CodeGeneratorRequest::unsafe_arena_set_allocated_compiler_version( - PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version) { + ::PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version) { if (GetArenaForAllocation() == nullptr) { delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(compiler_version_); } @@ -1333,9 +1349,9 @@ inline void CodeGeneratorRequest::unsafe_arena_set_allocated_compiler_version( } // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.compiler.CodeGeneratorRequest.compiler_version) } -inline PROTOBUF_NAMESPACE_ID::compiler::Version* CodeGeneratorRequest::release_compiler_version() { +inline ::PROTOBUF_NAMESPACE_ID::compiler::Version* CodeGeneratorRequest::release_compiler_version() { _has_bits_[0] &= ~0x00000002u; - PROTOBUF_NAMESPACE_ID::compiler::Version* temp = compiler_version_; + ::PROTOBUF_NAMESPACE_ID::compiler::Version* temp = compiler_version_; compiler_version_ = nullptr; #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); @@ -1348,34 +1364,34 @@ inline PROTOBUF_NAMESPACE_ID::compiler::Version* CodeGeneratorRequest::release_c #endif // !PROTOBUF_FORCE_COPY_IN_RELEASE return temp; } -inline PROTOBUF_NAMESPACE_ID::compiler::Version* CodeGeneratorRequest::unsafe_arena_release_compiler_version() { +inline ::PROTOBUF_NAMESPACE_ID::compiler::Version* CodeGeneratorRequest::unsafe_arena_release_compiler_version() { // @@protoc_insertion_point(field_release:google.protobuf.compiler.CodeGeneratorRequest.compiler_version) _has_bits_[0] &= ~0x00000002u; - PROTOBUF_NAMESPACE_ID::compiler::Version* temp = compiler_version_; + ::PROTOBUF_NAMESPACE_ID::compiler::Version* temp = compiler_version_; compiler_version_ = nullptr; return temp; } -inline PROTOBUF_NAMESPACE_ID::compiler::Version* CodeGeneratorRequest::_internal_mutable_compiler_version() { +inline ::PROTOBUF_NAMESPACE_ID::compiler::Version* CodeGeneratorRequest::_internal_mutable_compiler_version() { _has_bits_[0] |= 0x00000002u; if (compiler_version_ == nullptr) { - auto* p = CreateMaybeMessage(GetArenaForAllocation()); + auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::compiler::Version>(GetArenaForAllocation()); compiler_version_ = p; } return compiler_version_; } -inline PROTOBUF_NAMESPACE_ID::compiler::Version* CodeGeneratorRequest::mutable_compiler_version() { - PROTOBUF_NAMESPACE_ID::compiler::Version* _msg = _internal_mutable_compiler_version(); +inline ::PROTOBUF_NAMESPACE_ID::compiler::Version* CodeGeneratorRequest::mutable_compiler_version() { + ::PROTOBUF_NAMESPACE_ID::compiler::Version* _msg = _internal_mutable_compiler_version(); // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorRequest.compiler_version) return _msg; } -inline void CodeGeneratorRequest::set_allocated_compiler_version(PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version) { +inline void CodeGeneratorRequest::set_allocated_compiler_version(::PROTOBUF_NAMESPACE_ID::compiler::Version* compiler_version) { ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); if (message_arena == nullptr) { delete compiler_version_; } if (compiler_version) { ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = - ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper::GetOwningArena(compiler_version); + ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper<::PROTOBUF_NAMESPACE_ID::compiler::Version>::GetOwningArena(compiler_version); if (message_arena != submessage_arena) { compiler_version = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage( message_arena, compiler_version, submessage_arena); @@ -1575,17 +1591,17 @@ inline bool CodeGeneratorResponse_File::_internal_has_generated_code_info() cons inline bool CodeGeneratorResponse_File::has_generated_code_info() const { return _internal_has_generated_code_info(); } -inline const PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& CodeGeneratorResponse_File::_internal_generated_code_info() const { - const PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* p = generated_code_info_; - return p != nullptr ? *p : reinterpret_cast( - PROTOBUF_NAMESPACE_ID::_GeneratedCodeInfo_default_instance_); +inline const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& CodeGeneratorResponse_File::_internal_generated_code_info() const { + const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* p = generated_code_info_; + return p != nullptr ? *p : reinterpret_cast( + ::PROTOBUF_NAMESPACE_ID::_GeneratedCodeInfo_default_instance_); } -inline const PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& CodeGeneratorResponse_File::generated_code_info() const { +inline const ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo& CodeGeneratorResponse_File::generated_code_info() const { // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info) return _internal_generated_code_info(); } inline void CodeGeneratorResponse_File::unsafe_arena_set_allocated_generated_code_info( - PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info) { + ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info) { if (GetArenaForAllocation() == nullptr) { delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(generated_code_info_); } @@ -1597,9 +1613,9 @@ inline void CodeGeneratorResponse_File::unsafe_arena_set_allocated_generated_cod } // @@protoc_insertion_point(field_unsafe_arena_set_allocated:google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info) } -inline PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* CodeGeneratorResponse_File::release_generated_code_info() { +inline ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* CodeGeneratorResponse_File::release_generated_code_info() { _has_bits_[0] &= ~0x00000008u; - PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* temp = generated_code_info_; + ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* temp = generated_code_info_; generated_code_info_ = nullptr; #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE auto* old = reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp); @@ -1612,27 +1628,27 @@ inline PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* CodeGeneratorResponse_File::rel #endif // !PROTOBUF_FORCE_COPY_IN_RELEASE return temp; } -inline PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* CodeGeneratorResponse_File::unsafe_arena_release_generated_code_info() { +inline ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* CodeGeneratorResponse_File::unsafe_arena_release_generated_code_info() { // @@protoc_insertion_point(field_release:google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info) _has_bits_[0] &= ~0x00000008u; - PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* temp = generated_code_info_; + ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* temp = generated_code_info_; generated_code_info_ = nullptr; return temp; } -inline PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* CodeGeneratorResponse_File::_internal_mutable_generated_code_info() { +inline ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* CodeGeneratorResponse_File::_internal_mutable_generated_code_info() { _has_bits_[0] |= 0x00000008u; if (generated_code_info_ == nullptr) { - auto* p = CreateMaybeMessage(GetArenaForAllocation()); + auto* p = CreateMaybeMessage<::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo>(GetArenaForAllocation()); generated_code_info_ = p; } return generated_code_info_; } -inline PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* CodeGeneratorResponse_File::mutable_generated_code_info() { - PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* _msg = _internal_mutable_generated_code_info(); +inline ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* CodeGeneratorResponse_File::mutable_generated_code_info() { + ::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* _msg = _internal_mutable_generated_code_info(); // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info) return _msg; } -inline void CodeGeneratorResponse_File::set_allocated_generated_code_info(PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info) { +inline void CodeGeneratorResponse_File::set_allocated_generated_code_info(::PROTOBUF_NAMESPACE_ID::GeneratedCodeInfo* generated_code_info) { ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation(); if (message_arena == nullptr) { delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(generated_code_info_); @@ -1754,31 +1770,31 @@ inline int CodeGeneratorResponse::file_size() const { inline void CodeGeneratorResponse::clear_file() { file_.Clear(); } -inline PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* CodeGeneratorResponse::mutable_file(int index) { +inline ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* CodeGeneratorResponse::mutable_file(int index) { // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.file) return file_.Mutable(index); } -inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >* +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >* CodeGeneratorResponse::mutable_file() { // @@protoc_insertion_point(field_mutable_list:google.protobuf.compiler.CodeGeneratorResponse.file) return &file_; } -inline const PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File& CodeGeneratorResponse::_internal_file(int index) const { +inline const ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File& CodeGeneratorResponse::_internal_file(int index) const { return file_.Get(index); } -inline const PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File& CodeGeneratorResponse::file(int index) const { +inline const ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File& CodeGeneratorResponse::file(int index) const { // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.file) return _internal_file(index); } -inline PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* CodeGeneratorResponse::_internal_add_file() { +inline ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* CodeGeneratorResponse::_internal_add_file() { return file_.Add(); } -inline PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* CodeGeneratorResponse::add_file() { - PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* _add = _internal_add_file(); +inline ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* CodeGeneratorResponse::add_file() { + ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File* _add = _internal_add_file(); // @@protoc_insertion_point(field_add:google.protobuf.compiler.CodeGeneratorResponse.file) return _add; } -inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >& +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_File >& CodeGeneratorResponse::file() const { // @@protoc_insertion_point(field_list:google.protobuf.compiler.CodeGeneratorResponse.file) return file_; @@ -1801,10 +1817,10 @@ PROTOBUF_NAMESPACE_CLOSE PROTOBUF_NAMESPACE_OPEN -template <> struct is_proto_enum< PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_Feature> : ::std::true_type {}; +template <> struct is_proto_enum< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_Feature> : ::std::true_type {}; template <> -inline const EnumDescriptor* GetEnumDescriptor< PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_Feature>() { - return PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_Feature_descriptor(); +inline const EnumDescriptor* GetEnumDescriptor< ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_Feature>() { + return ::PROTOBUF_NAMESPACE_ID::compiler::CodeGeneratorResponse_Feature_descriptor(); } PROTOBUF_NAMESPACE_CLOSE diff --git a/src/google/protobuf/descriptor.cc b/src/google/protobuf/descriptor.cc index 408caf8da6..41c946217c 100644 --- a/src/google/protobuf/descriptor.cc +++ b/src/google/protobuf/descriptor.cc @@ -1010,7 +1010,7 @@ class TableArena { } Block* current_ = nullptr; - std::array small_size_blocks_{}; + std::array small_size_blocks_ = {{}}; Block* full_blocks_ = nullptr; size_t num_allocations_ = 0; @@ -2465,7 +2465,7 @@ bool DescriptorPool::TryFindExtensionInFallbackDatabase( // =================================================================== bool FieldDescriptor::is_map_message_type() const { - return message_type_->options().map_entry(); + return type_descriptor_.message_type->options().map_entry(); } std::string FieldDescriptor::DefaultValueAsString( @@ -5249,6 +5249,7 @@ void DescriptorBuilder::BuildFieldOrExtension(const FieldDescriptorProto& proto, result->file_ = file_; result->number_ = proto.number(); result->is_extension_ = is_extension; + result->is_oneof_ = false; result->proto3_optional_ = proto.proto3_optional(); if (proto.proto3_optional() && @@ -5284,9 +5285,6 @@ void DescriptorBuilder::BuildFieldOrExtension(const FieldDescriptorProto& proto, // Some of these may be filled in when cross-linking. result->containing_type_ = nullptr; - result->extension_scope_ = nullptr; - result->message_type_ = nullptr; - result->enum_type_ = nullptr; result->type_once_ = nullptr; result->default_value_enum_ = nullptr; @@ -5461,16 +5459,13 @@ void DescriptorBuilder::BuildFieldOrExtension(const FieldDescriptorProto& proto, "FieldDescriptorProto.extendee not set for extension field."); } - result->extension_scope_ = parent; + result->scope_.extension_scope = parent; if (proto.has_oneof_index()) { AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::TYPE, "FieldDescriptorProto.oneof_index should not be set for " "extensions."); } - - // Fill in later (maybe). - result->containing_oneof_ = nullptr; } else { if (proto.has_extendee()) { AddError(result->full_name(), proto, @@ -5488,12 +5483,11 @@ void DescriptorBuilder::BuildFieldOrExtension(const FieldDescriptorProto& proto, strings::Substitute("FieldDescriptorProto.oneof_index $0 is " "out of range for type \"$1\".", proto.oneof_index(), parent->name())); - result->containing_oneof_ = nullptr; } else { - result->containing_oneof_ = parent->oneof_decl(proto.oneof_index()); + result->is_oneof_ = true; + result->scope_.containing_oneof = + parent->oneof_decl(proto.oneof_index()); } - } else { - result->containing_oneof_ = nullptr; } } @@ -6159,8 +6153,8 @@ void DescriptorBuilder::CrossLinkField(FieldDescriptor* field, } if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) { - field->message_type_ = type.descriptor(); - if (field->message_type_ == nullptr) { + field->type_descriptor_.message_type = type.descriptor(); + if (field->type_descriptor_.message_type == nullptr) { AddError(field->full_name(), proto, DescriptorPool::ErrorCollector::TYPE, "\"" + proto.type_name() + "\" is not a message type."); @@ -6173,8 +6167,8 @@ void DescriptorBuilder::CrossLinkField(FieldDescriptor* field, "Messages can't have default values."); } } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM) { - field->enum_type_ = type.enum_descriptor(); - if (field->enum_type_ == nullptr) { + field->type_descriptor_.enum_type = type.enum_descriptor(); + if (field->type_descriptor_.enum_type == nullptr) { AddError(field->full_name(), proto, DescriptorPool::ErrorCollector::TYPE, "\"" + proto.type_name() + "\" is not an enum type."); @@ -7772,22 +7766,23 @@ Symbol DescriptorPool::CrossLinkOnDemandHelper(StringPiece name, // enum_type_, message_type_, and default_value_enum_ appropriately. void FieldDescriptor::InternalTypeOnceInit() const { GOOGLE_CHECK(file()->finished_building_ == true); + const EnumDescriptor* enum_type = nullptr; if (type_once_->field.type_name) { Symbol result = file()->pool()->CrossLinkOnDemandHelper( *type_once_->field.type_name, type_ == FieldDescriptor::TYPE_ENUM); if (result.type() == Symbol::MESSAGE) { type_ = FieldDescriptor::TYPE_MESSAGE; - message_type_ = result.descriptor(); + type_descriptor_.message_type = result.descriptor(); } else if (result.type() == Symbol::ENUM) { type_ = FieldDescriptor::TYPE_ENUM; - enum_type_ = result.enum_descriptor(); + enum_type = type_descriptor_.enum_type = result.enum_descriptor(); } } - if (enum_type_ && !default_value_enum_) { + if (enum_type && !default_value_enum_) { if (type_once_->field.default_value_enum_name) { // Have to build the full name now instead of at CrossLink time, - // because enum_type_ may not be known at the time. - std::string name = enum_type_->full_name(); + // because enum_type may not be known at the time. + std::string name = enum_type->full_name(); // Enum values reside in the same scope as the enum type. std::string::size_type last_dot = name.find_last_of('.'); if (last_dot != std::string::npos) { @@ -7802,8 +7797,8 @@ void FieldDescriptor::InternalTypeOnceInit() const { if (!default_value_enum_) { // We use the first defined value as the default // if a default is not explicitly defined. - GOOGLE_CHECK(enum_type_->value_count()); - default_value_enum_ = enum_type_->value(0); + GOOGLE_CHECK(enum_type->value_count()); + default_value_enum_ = enum_type->value(0); } } } @@ -7819,14 +7814,16 @@ const Descriptor* FieldDescriptor::message_type() const { if (type_once_) { internal::call_once(type_once_->once, FieldDescriptor::TypeOnceInit, this); } - return message_type_; + return type_ == TYPE_MESSAGE || type_ == TYPE_GROUP + ? type_descriptor_.message_type + : nullptr; } const EnumDescriptor* FieldDescriptor::enum_type() const { if (type_once_) { internal::call_once(type_once_->once, FieldDescriptor::TypeOnceInit, this); } - return enum_type_; + return type_ == TYPE_ENUM ? type_descriptor_.enum_type : nullptr; } const EnumValueDescriptor* FieldDescriptor::default_value_enum() const { diff --git a/src/google/protobuf/descriptor.h b/src/google/protobuf/descriptor.h index d2bf86e918..67c3f69214 100644 --- a/src/google/protobuf/descriptor.h +++ b/src/google/protobuf/descriptor.h @@ -62,6 +62,7 @@ #include #include +#include #include #include #include @@ -916,6 +917,8 @@ class PROTOBUF_EXPORT FieldDescriptor : private internal::SymbolBase { // Actually a `Label` but stored as uint8_t to save space. uint8_t label_; + bool is_oneof_ : 1; + // Logically: // all_names_ = [name, full_name, lower, camel, json] // However: @@ -935,10 +938,14 @@ class PROTOBUF_EXPORT FieldDescriptor : private internal::SymbolBase { int number_; int index_in_oneof_; const Descriptor* containing_type_; - const OneofDescriptor* containing_oneof_; - const Descriptor* extension_scope_; - mutable const Descriptor* message_type_; - mutable const EnumDescriptor* enum_type_; + union { + const OneofDescriptor* containing_oneof; + const Descriptor* extension_scope; + } scope_; + union { + mutable const Descriptor* message_type; + mutable const EnumDescriptor* enum_type; + } type_descriptor_; const FieldOptions* options_; // IMPORTANT: If you add a new field, make sure to search for all instances // of Allocate() and AllocateArray() in @@ -2089,10 +2096,7 @@ PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, file, const FileDescriptor*) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, number, int) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, is_extension, bool) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, containing_type, const Descriptor*) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, containing_oneof, - const OneofDescriptor*) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, index_in_oneof, int) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, extension_scope, const Descriptor*) PROTOBUF_DEFINE_OPTIONS_ACCESSOR(FieldDescriptor, FieldOptions) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, has_default_value, bool) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, has_json_name, bool) @@ -2225,6 +2229,15 @@ inline const std::string& FieldDescriptor::json_name() const { return all_names_[json_name_index_]; } +inline const OneofDescriptor* FieldDescriptor::containing_oneof() const { + return is_oneof_ ? scope_.containing_oneof : nullptr; +} + +inline const Descriptor* FieldDescriptor::extension_scope() const { + GOOGLE_CHECK(is_extension_); + return scope_.extension_scope; +} + inline FieldDescriptor::Label FieldDescriptor::label() const { return static_cast