From 0acead4ea3631240659836ce6ecd6d7f67fd352b Mon Sep 17 00:00:00 2001 From: Jakob Buchgraber Date: Thu, 4 May 2017 09:46:02 +0200 Subject: [PATCH] Update protobuf to latest master at a64497c and apply @laszlocsomor's latest changes from https://github.com/google/protobuf/pull/2969 on top of it. Change-Id: Ie49c5dcac06e370c5ab3863dc061513531ec8c0d --- third_party/protobuf/3.2.0/.travis.yml | 88 + third_party/protobuf/3.2.0/BUILD | 102 +- third_party/protobuf/3.2.0/CHANGES.txt | 108 + third_party/protobuf/3.2.0/Makefile.am | 125 +- third_party/protobuf/3.2.0/Protobuf.podspec | 2 +- third_party/protobuf/3.2.0/README.bazel.md | 34 - third_party/protobuf/3.2.0/README.md | 25 +- .../3.2.0/cmake/extract_includes.bat.in | 3 + .../3.2.0/cmake/libprotobuf-lite.cmake | 1 + .../protobuf/3.2.0/cmake/libprotoc.cmake | 2 + third_party/protobuf/3.2.0/cmake/tests.cmake | 8 +- .../3.2.0/com_google_protobuf_java.BUILD | 2 +- third_party/protobuf/3.2.0/configure.ac | 2 +- .../3.2.0/conformance/conformance_test.cc | 17 + .../3.2.0/conformance/conformance_test.h | 1 + .../3.2.0/conformance/failure_list_cpp.txt | 2 - .../3.2.0/conformance/failure_list_csharp.txt | 4 + .../3.2.0/conformance/failure_list_objc.txt | 6 +- .../3.2.0/conformance/failure_list_php_c.txt | 28 +- .../3.2.0/conformance/failure_list_python.txt | 4 + .../3.2.0/csharp/Google.Protobuf.Tools.nuspec | 2 +- .../Google.Protobuf/Reflection/Descriptor.cs | 93 +- .../WellKnownTypes/Duration.cs | 15 +- .../WellKnownTypes/Timestamp.cs | 25 + .../csharp/src/Google.Protobuf/project.json | 2 +- .../protobuf/3.2.0/docs/third_party.md | 3 +- .../3.2.0/generate_descriptor_proto.sh | 21 +- third_party/protobuf/3.2.0/java/core/pom.xml | 7 +- .../com/google/protobuf/AbstractMessage.java | 4 +- .../google/protobuf/AbstractMessageLite.java | 21 +- .../com/google/protobuf/AbstractParser.java | 26 +- .../com/google/protobuf/BooleanArrayList.java | 12 +- .../com/google/protobuf/CodedInputStream.java | 4 +- .../google/protobuf/CodedOutputStream.java | 4 +- .../java/com/google/protobuf/Descriptors.java | 7 +- .../com/google/protobuf/DoubleArrayList.java | 12 +- .../com/google/protobuf/DynamicMessage.java | 7 +- .../java/com/google/protobuf/FieldSet.java | 7 +- .../com/google/protobuf/FloatArrayList.java | 12 +- .../google/protobuf/GeneratedMessageLite.java | 22 +- .../google/protobuf/GeneratedMessageV3.java | 2 +- .../com/google/protobuf/IntArrayList.java | 12 +- .../java/com/google/protobuf/Internal.java | 15 + .../com/google/protobuf/LazyFieldLite.java | 1 + .../com/google/protobuf/LongArrayList.java | 12 +- .../java/com/google/protobuf/MapEntry.java | 24 +- .../com/google/protobuf/MapEntryLite.java | 5 + .../java/com/google/protobuf/MapField.java | 8 + .../com/google/protobuf/MapFieldLite.java | 14 +- .../main/java/com/google/protobuf/Parser.java | 13 + .../PrimitiveNonBoxingCollection.java | 34 + .../protobuf/RepeatedFieldBuilderV3.java | 18 +- .../google/protobuf/SingleFieldBuilderV3.java | 12 +- .../java/com/google/protobuf/TextFormat.java | 4 +- .../com/google/protobuf/UnknownFieldSet.java | 4 +- .../java/com/google/protobuf/UnsafeUtil.java | 401 +++- .../main/java/com/google/protobuf/Utf8.java | 2 +- .../com/google/protobuf/LazyFieldTest.java | 2 +- .../java/com/google/protobuf/LiteTest.java | 108 + .../com/google/protobuf/MapForProto2Test.java | 1 + .../java/com/google/protobuf/MapTest.java | 63 +- .../java/com/google/protobuf/ParserTest.java | 27 +- .../java/com/google/protobuf/TestUtil.java | 2 + .../com/google/protobuf/TextFormatTest.java | 92 + .../protobuf/lite_equals_and_hash.proto | 8 + third_party/protobuf/3.2.0/java/lite/pom.xml | 1 + third_party/protobuf/3.2.0/java/pom.xml | 10 +- third_party/protobuf/3.2.0/java/util/pom.xml | 2 +- .../com/google/protobuf/util/JsonFormat.java | 178 +- .../com/google/protobuf/util/Timestamps.java | 2 +- .../google/protobuf/util/JsonFormatTest.java | 161 +- .../jenkins/buildcmds/pull_request_32.sh | 2 +- .../protobuf/3.2.0/jenkins/docker/Dockerfile | 33 +- .../3.2.0/jenkins/docker32/Dockerfile | 21 +- .../protobuf/3.2.0/js/binary/decoder.js | 17 +- .../protobuf/3.2.0/js/binary/decoder_test.js | 19 + .../protobuf/3.2.0/js/binary/encoder.js | 4 +- .../protobuf/3.2.0/js/binary/reader.js | 2 +- third_party/protobuf/3.2.0/js/binary/utils.js | 2 +- .../protobuf/3.2.0/js/binary/writer.js | 4 +- .../protobuf/3.2.0/js/binary/writer_test.js | 2 +- .../v3.0.0/binary/arith_test.js | 355 ++++ .../v3.0.0/binary/decoder_test.js | 334 ++++ .../v3.0.0/binary/proto_test.js | 628 ++++++ .../v3.0.0/binary/reader_test.js | 922 +++++++++ .../v3.0.0/binary/utils_test.js | 668 +++++++ .../v3.0.0/binary/writer_test.js | 122 ++ .../v3.0.0/commonjs/export_asserts.js | 37 + .../v3.0.0/commonjs/export_testdeps.js | 18 + .../v3.0.0/commonjs/import_test.js | 52 + .../v3.0.0/commonjs/jasmine.json | 9 + .../commonjs/rewrite_tests_for_commonjs.js | 97 + .../v3.0.0/commonjs/test6/test6.proto | 40 + .../v3.0.0/commonjs/test7/test7.proto | 42 + .../js/compatibility_tests/v3.0.0/data.proto | 51 + .../compatibility_tests/v3.0.0/debug_test.js | 105 + .../compatibility_tests/v3.0.0/jasmine1.json | 17 + .../compatibility_tests/v3.0.0/jasmine2.json | 17 + .../compatibility_tests/v3.0.0/jasmine3.json | 17 + .../v3.0.0/message_test.js | 1080 ++++++++++ .../compatibility_tests/v3.0.0/proto3_test.js | 329 ++++ .../v3.0.0/proto3_test.proto | 89 + .../js/compatibility_tests/v3.0.0/test.proto | 236 +++ .../js/compatibility_tests/v3.0.0/test.sh | 92 + .../js/compatibility_tests/v3.0.0/test2.proto | 54 + .../js/compatibility_tests/v3.0.0/test3.proto | 53 + .../js/compatibility_tests/v3.0.0/test4.proto | 42 + .../js/compatibility_tests/v3.0.0/test5.proto | 44 + .../v3.0.0/testbinary.proto | 212 ++ .../v3.0.0/testempty.proto | 34 + third_party/protobuf/3.2.0/js/gulpfile.js | 70 +- third_party/protobuf/3.2.0/js/jasmine.json | 4 +- third_party/protobuf/3.2.0/js/map.js | 10 +- third_party/protobuf/3.2.0/js/message.js | 31 +- third_party/protobuf/3.2.0/js/message_test.js | 1 + third_party/protobuf/3.2.0/js/package.json | 2 +- .../protobuf/3.2.0/libprotobuf_java.jar | Bin 0 -> 1203755 bytes .../protobuf/3.2.0/libprotobuf_java_util.jar | Bin 0 -> 58322 bytes .../objectivec/DevTools/full_mac_build.sh | 8 + .../protobuf/3.2.0/objectivec/GPBMessage.m | 23 +- .../objectivec/GPBMessage_PackagePrivate.h | 18 +- .../google/protobuf/Duration.pbobjc.h | 15 +- .../google/protobuf/Timestamp.pbobjc.h | 25 + .../3.2.0/php/ext/google/protobuf/array.c | 313 +-- .../3.2.0/php/ext/google/protobuf/def.c | 450 +++-- .../php/ext/google/protobuf/encode_decode.c | 523 +++-- .../3.2.0/php/ext/google/protobuf/map.c | 195 +- .../3.2.0/php/ext/google/protobuf/message.c | 224 +-- .../3.2.0/php/ext/google/protobuf/package.xml | 26 +- .../3.2.0/php/ext/google/protobuf/protobuf.c | 57 +- .../3.2.0/php/ext/google/protobuf/protobuf.h | 478 ++++- .../3.2.0/php/ext/google/protobuf/storage.c | 578 +++--- .../php/ext/google/protobuf/type_check.c | 85 +- .../Protobuf/Internal/DescriptorPool.php | 3 + .../Protobuf/Internal/GPBDecodeException.php | 47 + .../Google/Protobuf/Internal/InputStream.php | 17 +- .../src/Google/Protobuf/Internal/MapField.php | 4 +- .../src/Google/Protobuf/Internal/Message.php | 73 +- .../Protobuf/Internal/RepeatedField.php | 4 + .../php/src/Google/Protobuf/descriptor.php | 42 +- .../protobuf/3.2.0/php/tests/array_test.php | 39 +- .../3.2.0/php/tests/encode_decode_test.php | 198 ++ .../protobuf/3.2.0/php/tests/gdb_test.sh | 8 +- .../3.2.0/php/tests/generated_class_test.php | 33 +- .../3.2.0/php/tests/map_field_test.php | 17 +- .../3.2.0/php/tests/memory_leak_test.php | 17 +- .../protobuf/3.2.0/php/tests/proto/test.proto | 23 + .../proto/test_import_descriptor_proto.proto | 14 + .../php/tests/proto/test_no_namespace.proto | 10 +- .../3.2.0/php/tests/proto/test_prefix.proto | 5 + .../protobuf/3.2.0/php/tests/test_util.php | 3 +- .../3.2.0/php/tests/well_known_test.php | 10 +- .../protobuf/3.2.0/protobuf-java-3.2.0.jar | Bin 1347123 -> 0 bytes .../3.2.0/protobuf-java-util-3.2.0.jar | Bin 67556 -> 0 bytes third_party/protobuf/3.2.0/protobuf.bzl | 1 + .../protobuf/3.2.0/protoc-artifacts/pom.xml | 2 +- .../3.2.0/python/google/protobuf/__init__.py | 2 +- .../google/protobuf/descriptor_database.py | 11 +- .../python/google/protobuf/descriptor_pool.py | 129 +- .../google/protobuf/internal/containers.py | 2 +- .../protobuf/internal/descriptor_pool_test.py | 45 + .../google/protobuf/internal/encoder.py | 7 +- .../google/protobuf/internal/message_test.py | 27 +- .../protobuf/internal/python_message.py | 5 +- .../protobuf/internal/python_protobuf.cc | 63 + .../protobuf/internal/reflection_test.py | 9 +- .../protobuf/internal/symbol_database_test.py | 9 +- .../protobuf/internal/text_format_test.py | 51 + .../google/protobuf/pyext/descriptor.cc | 19 + .../python/google/protobuf/pyext/descriptor.h | 2 + .../google/protobuf/pyext/descriptor_pool.cc | 20 +- .../google/protobuf/pyext/descriptor_pool.h | 1 + .../python/google/protobuf/pyext/message.cc | 2 +- .../pyext/repeated_composite_container.cc | 29 + .../protobuf/pyext/scoped_pyobject_ptr.h | 59 +- .../protobuf/{pyext => }/python_protobuf.h | 0 .../python/google/protobuf/reflection.py | 6 +- .../python/google/protobuf/symbol_database.py | 11 + .../python/google/protobuf/text_format.py | 35 +- .../3.2.0/ruby/google-protobuf.gemspec | 2 +- third_party/protobuf/3.2.0/src/Makefile.am | 54 +- .../protobuf/3.2.0/src/google/protobuf/any.h | 6 +- .../3.2.0/src/google/protobuf/any.pb.cc | 31 +- .../3.2.0/src/google/protobuf/any.pb.h | 19 +- .../3.2.0/src/google/protobuf/api.pb.cc | 106 +- .../3.2.0/src/google/protobuf/api.pb.h | 42 +- .../3.2.0/src/google/protobuf/arena.h | 55 +- .../src/google/protobuf/arena_unittest.cc | 52 + .../3.2.0/src/google/protobuf/arenastring.cc | 10 - .../3.2.0/src/google/protobuf/arenastring.h | 16 + .../google/protobuf/compiler/code_generator.h | 2 +- .../compiler/command_line_interface.cc | 86 +- .../compiler/command_line_interface.h | 7 +- .../command_line_interface_unittest.cc | 68 +- .../compiler/cpp/cpp_bootstrap_unittest.cc | 14 +- .../protobuf/compiler/cpp/cpp_enum_field.cc | 16 +- .../google/protobuf/compiler/cpp/cpp_file.cc | 163 +- .../google/protobuf/compiler/cpp/cpp_file.h | 3 + .../protobuf/compiler/cpp/cpp_generator.cc | 2 + .../protobuf/compiler/cpp/cpp_helpers.cc | 103 + .../protobuf/compiler/cpp/cpp_helpers.h | 67 + .../protobuf/compiler/cpp/cpp_map_field.cc | 79 +- .../protobuf/compiler/cpp/cpp_map_field.h | 2 +- .../protobuf/compiler/cpp/cpp_message.cc | 911 ++++++--- .../protobuf/compiler/cpp/cpp_message.h | 33 +- .../compiler/cpp/cpp_message_field.cc | 20 +- .../protobuf/compiler/cpp/cpp_message_field.h | 2 +- .../protobuf/compiler/cpp/cpp_options.h | 8 +- .../compiler/cpp/cpp_primitive_field.cc | 19 +- .../protobuf/compiler/cpp/cpp_string_field.cc | 14 +- .../protobuf/compiler/cpp/cpp_unittest.cc | 56 +- .../compiler/csharp/csharp_field_base.cc | 8 +- .../src/google/protobuf/compiler/importer.cc | 17 +- .../src/google/protobuf/compiler/importer.h | 1 + .../protobuf/compiler/importer_unittest.cc | 2 +- .../compiler/java/java_enum_field_lite.cc | 3 + .../protobuf/compiler/java/java_enum_lite.cc | 51 +- .../protobuf/compiler/java/java_field.h | 1 + .../protobuf/compiler/java/java_file.cc | 6 - .../protobuf/compiler/java/java_generator.cc | 1 + .../protobuf/compiler/java/java_helpers.cc | 2 + .../java/java_lazy_message_field_lite.cc | 3 + .../java/java_lazy_message_field_lite.h | 3 + .../protobuf/compiler/java/java_map_field.cc | 3 - .../compiler/java/java_map_field_lite.cc | 4 +- .../compiler/java/java_map_field_lite.h | 1 + .../protobuf/compiler/java/java_message.cc | 11 + .../java/java_message_builder_lite.cc | 7 - .../compiler/java/java_message_field_lite.cc | 2 + .../compiler/java/java_message_field_lite.h | 2 + .../compiler/java/java_message_lite.cc | 29 +- .../java/java_primitive_field_lite.cc | 2 + .../compiler/java/java_primitive_field_lite.h | 3 + .../compiler/java/java_string_field_lite.cc | 3 + .../compiler/java/java_string_field_lite.h | 3 + .../compiler/javanano/javanano_file.cc | 6 +- .../compiler/javanano/javanano_helpers.cc | 8 +- .../compiler/javanano/javanano_message.cc | 2 +- .../src/google/protobuf/compiler/js/embed.cc | 2 +- .../protobuf/compiler/js/js_generator.cc | 177 +- .../compiler/js/well_known_types/timestamp.js | 1 - .../protobuf/compiler/mock_code_generator.cc | 12 +- .../objectivec/objectivec_extension.cc | 6 +- .../compiler/objectivec/objectivec_field.cc | 4 +- .../compiler/objectivec/objectivec_helpers.cc | 74 +- .../compiler/objectivec/objectivec_message.cc | 6 +- .../protobuf/compiler/parser_unittest.cc | 7 +- .../protobuf/compiler/php/php_generator.cc | 131 +- .../src/google/protobuf/compiler/plugin.cc | 17 +- .../src/google/protobuf/compiler/plugin.pb.cc | 197 +- .../src/google/protobuf/compiler/plugin.pb.h | 46 +- .../src/google/protobuf/compiler/plugin.proto | 3 + .../google/protobuf/compiler/profile.pb.cc | 1442 ++++++++++++++ .../src/google/protobuf/compiler/profile.pb.h | 728 +++++++ .../google/protobuf/compiler/profile.proto | 68 + .../compiler/python/python_generator.cc | 6 +- .../google/protobuf/compiler/test_plugin.cc | 1 - .../google/protobuf/compiler/zip_writer.cc | 30 + .../src/google/protobuf/compiler/zip_writer.h | 30 + .../3.2.0/src/google/protobuf/descriptor.cc | 679 +++++-- .../3.2.0/src/google/protobuf/descriptor.h | 153 +- .../src/google/protobuf/descriptor.pb.cc | 1743 ++++++++++------- .../3.2.0/src/google/protobuf/descriptor.pb.h | 393 ++-- .../src/google/protobuf/descriptor.proto | 3 +- .../google/protobuf/descriptor_database.cc | 4 +- .../src/google/protobuf/descriptor_database.h | 12 + .../protobuf/descriptor_database_unittest.cc | 1 - .../google/protobuf/descriptor_unittest.cc | 359 +++- .../3.2.0/src/google/protobuf/duration.pb.cc | 29 +- .../3.2.0/src/google/protobuf/duration.pb.h | 17 +- .../3.2.0/src/google/protobuf/duration.proto | 15 +- .../src/google/protobuf/dynamic_message.cc | 24 +- .../3.2.0/src/google/protobuf/empty.pb.cc | 29 +- .../3.2.0/src/google/protobuf/empty.pb.h | 17 +- .../3.2.0/src/google/protobuf/extension_set.h | 13 +- .../google/protobuf/extension_set_heavy.cc | 43 +- .../google/protobuf/extension_set_unittest.cc | 2 +- .../src/google/protobuf/field_mask.pb.cc | 35 +- .../3.2.0/src/google/protobuf/field_mask.pb.h | 21 +- .../protobuf/generated_message_reflection.cc | 67 +- .../protobuf/generated_message_reflection.h | 81 +- .../generated_message_table_driven.cc | 676 +++++++ .../protobuf/generated_message_table_driven.h | 173 ++ .../google/protobuf/generated_message_util.cc | 2 +- .../google/protobuf/generated_message_util.h | 57 +- .../src/google/protobuf/io/coded_stream.cc | 46 +- .../src/google/protobuf/io/coded_stream.h | 39 +- .../protobuf/io/coded_stream_unittest.cc | 33 +- .../src/google/protobuf/io/gzip_stream.h | 2 +- .../protobuf/io/zero_copy_stream_impl.cc | 12 +- .../protobuf/io/zero_copy_stream_impl_lite.h | 2 +- .../protobuf/io/zero_copy_stream_unittest.cc | 10 +- .../src/google/protobuf/lite_unittest.cc | 239 ++- .../protobuf/3.2.0/src/google/protobuf/map.h | 710 +------ .../3.2.0/src/google/protobuf/map_entry.h | 231 +-- .../src/google/protobuf/map_entry_lite.h | 191 +- .../3.2.0/src/google/protobuf/map_field.cc | 59 +- .../3.2.0/src/google/protobuf/map_field.h | 531 ++++- .../3.2.0/src/google/protobuf/map_field_inl.h | 290 +-- .../src/google/protobuf/map_field_lite.h | 226 +-- .../src/google/protobuf/map_field_test.cc | 51 +- .../google/protobuf/map_proto2_unittest.proto | 5 + .../3.2.0/src/google/protobuf/map_test.cc | 331 +++- .../src/google/protobuf/map_test_util.cc | 16 + .../3.2.0/src/google/protobuf/map_test_util.h | 5 + .../src/google/protobuf/map_test_util_impl.h | 41 +- .../src/google/protobuf/map_type_handler.h | 70 +- .../3.2.0/src/google/protobuf/message.cc | 4 +- .../3.2.0/src/google/protobuf/message.h | 21 +- .../3.2.0/src/google/protobuf/message_lite.cc | 5 + .../3.2.0/src/google/protobuf/message_lite.h | 33 +- .../src/google/protobuf/message_unittest.cc | 22 +- .../3.2.0/src/google/protobuf/metadata.h | 153 +- .../3.2.0/src/google/protobuf/metadata_lite.h | 193 ++ .../3.2.0/src/google/protobuf/reflection.h | 4 +- .../src/google/protobuf/reflection_ops.cc | 22 + .../protobuf/reflection_ops_unittest.cc | 1 + .../src/google/protobuf/repeated_field.h | 170 +- .../repeated_field_reflection_unittest.cc | 39 +- .../protobuf/repeated_field_unittest.cc | 2 +- .../src/google/protobuf/source_context.pb.cc | 30 +- .../src/google/protobuf/source_context.pb.h | 18 +- .../3.2.0/src/google/protobuf/struct.pb.cc | 136 +- .../3.2.0/src/google/protobuf/struct.pb.h | 62 +- .../3.2.0/src/google/protobuf/stubs/common.h | 24 +- .../google/protobuf/stubs/int128_unittest.cc | 14 +- .../src/google/protobuf/stubs/io_win32.cc | 181 +- .../src/google/protobuf/stubs/io_win32.h | 46 +- .../protobuf/stubs/io_win32_unittest.cc | 202 +- .../src/google/protobuf/stubs/strutil.cc | 12 +- .../src/google/protobuf/test_util_lite.cc | 7 +- .../3.2.0/src/google/protobuf/testing/file.cc | 19 +- .../src/google/protobuf/testing/googletest.cc | 36 +- .../3.2.0/src/google/protobuf/text_format.cc | 15 +- .../3.2.0/src/google/protobuf/text_format.h | 4 +- .../google/protobuf/text_format_unittest.cc | 2 +- .../3.2.0/src/google/protobuf/timestamp.pb.cc | 29 +- .../3.2.0/src/google/protobuf/timestamp.pb.h | 17 +- .../3.2.0/src/google/protobuf/timestamp.proto | 25 + .../3.2.0/src/google/protobuf/type.pb.cc | 169 +- .../3.2.0/src/google/protobuf/type.pb.h | 65 +- .../3.2.0/src/google/protobuf/unittest.proto | 16 + .../protobuf/unittest_lazy_dependencies.proto | 75 + ...test_lazy_dependencies_custom_option.proto | 67 + .../unittest_lazy_dependencies_enum.proto | 61 + .../protobuf/unittest_proto3_arena.proto | 2 + .../src/google/protobuf/unknown_field_set.cc | 48 +- .../src/google/protobuf/unknown_field_set.h | 43 +- .../util/delimited_message_util_test.cc | 2 +- .../internal/default_value_objectwriter.cc | 82 +- .../internal/default_value_objectwriter.h | 44 +- .../util/internal/field_mask_utility.cc | 7 +- .../protobuf/util/internal/json_escaping.cc | 48 - .../util/internal/json_stream_parser.cc | 58 +- .../protobuf/util/internal/proto_writer.h | 28 +- .../util/internal/protostream_objectsource.cc | 44 +- .../util/internal/protostream_objectsource.h | 4 +- .../internal/protostream_objectsource_test.cc | 6 +- .../util/internal/protostream_objectwriter.cc | 35 +- .../util/internal/protostream_objectwriter.h | 11 +- .../internal/protostream_objectwriter_test.cc | 10 +- .../protobuf/util/internal/type_info.cc | 18 +- .../google/protobuf/util/internal/utility.cc | 10 - .../src/google/protobuf/util/json_util.cc | 6 +- .../src/google/protobuf/util/json_util.h | 10 +- .../google/protobuf/util/json_util_test.cc | 20 +- .../protobuf/util/message_differencer.cc | 11 +- .../util/message_differencer_unittest.cc | 41 +- .../src/google/protobuf/util/time_util.cc | 28 - .../3.2.0/src/google/protobuf/wire_format.cc | 309 ++- .../src/google/protobuf/wire_format_lite.cc | 12 +- .../src/google/protobuf/wire_format_lite.h | 445 +++-- .../google/protobuf/wire_format_lite_inl.h | 184 +- .../google/protobuf/wire_format_unittest.cc | 23 + .../3.2.0/src/google/protobuf/wrappers.pb.cc | 175 +- .../3.2.0/src/google/protobuf/wrappers.pb.h | 91 +- third_party/protobuf/3.2.0/tests.sh | 126 +- .../protobuf/3.2.0/update_file_lists.sh | 2 +- third_party/protobuf/3.2.0/util/python/BUILD | 1 - third_party/protobuf/README.md | 57 +- 380 files changed, 22232 insertions(+), 7098 deletions(-) create mode 100644 third_party/protobuf/3.2.0/.travis.yml delete mode 100644 third_party/protobuf/3.2.0/README.bazel.md create mode 100644 third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/PrimitiveNonBoxingCollection.java create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/arith_test.js create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/decoder_test.js create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/proto_test.js create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/reader_test.js create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/utils_test.js create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/writer_test.js create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/export_asserts.js create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/export_testdeps.js create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/import_test.js create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/jasmine.json create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/rewrite_tests_for_commonjs.js create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/test6/test6.proto create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/test7/test7.proto create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/data.proto create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/debug_test.js create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/jasmine1.json create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/jasmine2.json create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/jasmine3.json create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/message_test.js create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/proto3_test.js create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/proto3_test.proto create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test.proto create mode 100755 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test.sh create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test2.proto create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test3.proto create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test4.proto create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test5.proto create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/testbinary.proto create mode 100644 third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/testempty.proto create mode 100755 third_party/protobuf/3.2.0/libprotobuf_java.jar create mode 100755 third_party/protobuf/3.2.0/libprotobuf_java_util.jar create mode 100644 third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/GPBDecodeException.php create mode 100644 third_party/protobuf/3.2.0/php/tests/proto/test_import_descriptor_proto.proto delete mode 100644 third_party/protobuf/3.2.0/protobuf-java-3.2.0.jar delete mode 100644 third_party/protobuf/3.2.0/protobuf-java-util-3.2.0.jar create mode 100644 third_party/protobuf/3.2.0/python/google/protobuf/internal/python_protobuf.cc rename third_party/protobuf/3.2.0/python/google/protobuf/{pyext => }/python_protobuf.h (100%) create mode 100644 third_party/protobuf/3.2.0/src/google/protobuf/compiler/profile.pb.cc create mode 100644 third_party/protobuf/3.2.0/src/google/protobuf/compiler/profile.pb.h create mode 100644 third_party/protobuf/3.2.0/src/google/protobuf/compiler/profile.proto create mode 100644 third_party/protobuf/3.2.0/src/google/protobuf/generated_message_table_driven.cc create mode 100644 third_party/protobuf/3.2.0/src/google/protobuf/generated_message_table_driven.h create mode 100644 third_party/protobuf/3.2.0/src/google/protobuf/metadata_lite.h create mode 100644 third_party/protobuf/3.2.0/src/google/protobuf/unittest_lazy_dependencies.proto create mode 100644 third_party/protobuf/3.2.0/src/google/protobuf/unittest_lazy_dependencies_custom_option.proto create mode 100644 third_party/protobuf/3.2.0/src/google/protobuf/unittest_lazy_dependencies_enum.proto diff --git a/third_party/protobuf/3.2.0/.travis.yml b/third_party/protobuf/3.2.0/.travis.yml new file mode 100644 index 00000000000000..8f6f90de6271ff --- /dev/null +++ b/third_party/protobuf/3.2.0/.travis.yml @@ -0,0 +1,88 @@ +sudo: required +dist: trusty +# Note: travis currently does not support listing more than one language so +# this cheats and claims to only be cpp. If they add multiple language +# support, this should probably get updated to install steps and/or +# rvm/gemfile/jdk/etc. entries rather than manually doing the work. +language: cpp +os: + - osx +# The Objective C build needs Xcode 7.0 or later. +osx_image: xcode8.1 +script: + - ./tests.sh $CONFIG +env: + - CONFIG=cpp + - CONFIG=cpp_distcheck + - CONFIG=golang + - CONFIG=java_jdk7 + - CONFIG=java_oracle7 + - CONFIG=javanano_jdk7 + - CONFIG=javanano_oracle7 + - CONFIG=javascript + # iOS build log was starting to choke travis UI, so split to cover the + # Xcode Debug and Release Configurations independently. + - CONFIG=objectivec_ios_debug + - CONFIG=objectivec_ios_release + - CONFIG=objectivec_osx + - CONFIG=objectivec_cocoapods_integration + - CONFIG=python + - CONFIG=python_cpp + - CONFIG=ruby21 + - CONFIG=ruby22 + - CONFIG=jruby + - CONFIG=php5.6_mac + - CONFIG=php7.0_mac +matrix: + exclude: + # It's nontrivial to programmatically install a new JDK from the command + # line on OS X, so we rely on testing on Linux for Java code. + - os: osx + env: CONFIG=java_jdk7 + - os: osx + env: CONFIG=java_oracle7 + - os: osx + env: CONFIG=javanano_jdk7 + - os: osx + env: CONFIG=javanano_oracle7 + # Requires installing golang, currently travis.sh is doing that with apt-get + # which doesn't work on OS X. + - os: osx + env: CONFIG=golang + include: + # The dotnet environment requires Ubuntu 14.04 or 16.04. This + # configuration is effectively an "extra" one, outside the + # autogenerated matrix. + - os: linux + env: CONFIG=csharp + dist: trusty + # This test is kept on travis because it doesn't play nicely with other + # tests on jenkins running in parallel. + - os: linux + env: CONFIG=cpp_distcheck + # The Java compatibility test currently only runs on Linux because it will + # fetch pre-built Linux protoc binaries in the test. + - os: linux + env: CONFIG=java_compatibility + # The Python compatibility test currently only runs on Linux because it will + # fetch pre-built Linux protoc binaries in the test. + - os: linux + env: CONFIG=python_compatibility + allow_failures: + # These currently do not work on OS X but are being worked on by @haberman. + - os: osx + env: CONFIG=ruby22 + - os: osx + env: CONFIG=jruby + # https://github.com/google/protobuf/issues/1253 - Started failing when + # we moved to an OS X image that is 10.11. + - os: osx + env: CONFIG=python_cpp + # Mark the iOS test as flakey as xcodebuild some times fails to start the + # iOS Simulator. + - os: osx + env: CONFIG=objectivec_ios_debug + - os: osx + env: CONFIG=objectivec_ios_release +notifications: + email: false diff --git a/third_party/protobuf/3.2.0/BUILD b/third_party/protobuf/3.2.0/BUILD index 2ad3faf17871f8..a6a52810f1eb8b 100644 --- a/third_party/protobuf/3.2.0/BUILD +++ b/third_party/protobuf/3.2.0/BUILD @@ -26,7 +26,7 @@ filegroup( java_import( name = "protobuf_java_util", - jars = ["protobuf-java-util-3.2.0.jar"], + jars = ["libprotobuf_java_util.jar"], exports = [ "//third_party:gson", ], @@ -35,21 +35,21 @@ java_import( java_import( name = "protobuf_java", - jars = ["protobuf-java-3.2.0.jar"], + jars = ["libprotobuf_java.jar"], visibility = ["//visibility:public"], ) # For bootstrapping JavaBuilder filegroup( name = "protobuf-jars", - srcs = ["protobuf-java-3.2.0.jar"], + srcs = ["libprotobuf_java.jar"], visibility = ["//visibility:public"], ) ################################################################################ # The below build rules are a copy of the upstream protobuf BUILD file with -# Java support removed. -################################################################################ +# # Java support removed. +# ################################################################################ ################################################################################ # Protobuf Runtime Library @@ -255,6 +255,7 @@ RELATIVE_WELL_KNOWN_PROTOS = [ "google/protobuf/any.proto", "google/protobuf/api.proto", "google/protobuf/compiler/plugin.proto", + "google/protobuf/compiler/profile.proto", "google/protobuf/descriptor.proto", "google/protobuf/duration.proto", "google/protobuf/empty.proto", @@ -399,6 +400,7 @@ cc_library( "src/google/protobuf/compiler/php/php_generator.cc", "src/google/protobuf/compiler/plugin.cc", "src/google/protobuf/compiler/plugin.pb.cc", + "src/google/protobuf/compiler/profile.pb.cc", "src/google/protobuf/compiler/python/python_generator.cc", "src/google/protobuf/compiler/ruby/ruby_generator.cc", "src/google/protobuf/compiler/subprocess.cc", @@ -450,6 +452,9 @@ RELATIVE_TEST_PROTOS = [ "google/protobuf/unittest_enormous_descriptor.proto", "google/protobuf/unittest_import.proto", "google/protobuf/unittest_import_public.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_mset.proto", "google/protobuf/unittest_mset_wire_format.proto", @@ -494,6 +499,7 @@ COMMON_TEST_SRCS = [ # AUTOGEN(common_test_srcs) "src/google/protobuf/arena_test_util.cc", "src/google/protobuf/map_test_util.cc", + "src/google/protobuf/stubs/io_win32.cc", "src/google/protobuf/test_util.cc", "src/google/protobuf/testing/file.cc", "src/google/protobuf/testing/googletest.cc", @@ -536,6 +542,7 @@ cc_test( "src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc", "src/google/protobuf/compiler/cpp/cpp_unittest.cc", "src/google/protobuf/compiler/cpp/metadata_test.cc", + "src/google/protobuf/compiler/csharp/csharp_bootstrap_unittest.cc", "src/google/protobuf/compiler/csharp/csharp_generator_unittest.cc", "src/google/protobuf/compiler/importer_unittest.cc", "src/google/protobuf/compiler/java/java_doc_comment_unittest.cc", @@ -603,6 +610,10 @@ cc_test( ":test_plugin", ] + glob([ "src/google/protobuf/**/*", + # Files for csharp_bootstrap_unittest.cc. + "conformance/**/*", + "csharp/src/**/*", + "examples/**/*", ]), includes = [ "src/", @@ -833,3 +844,84 @@ proto_lang_toolchain( runtime = ":protobuf_java", visibility = ["//visibility:public"], ) + +OBJC_HDRS = [ + "objectivec/GPBArray.h", + "objectivec/GPBBootstrap.h", + "objectivec/GPBCodedInputStream.h", + "objectivec/GPBCodedOutputStream.h", + "objectivec/GPBDescriptor.h", + "objectivec/GPBDictionary.h", + "objectivec/GPBExtensionInternals.h", + "objectivec/GPBExtensionRegistry.h", + "objectivec/GPBMessage.h", + "objectivec/GPBProtocolBuffers.h", + "objectivec/GPBProtocolBuffers_RuntimeSupport.h", + "objectivec/GPBRootObject.h", + "objectivec/GPBRuntimeTypes.h", + "objectivec/GPBUnknownField.h", + "objectivec/GPBUnknownFieldSet.h", + "objectivec/GPBUtilities.h", + "objectivec/GPBWellKnownTypes.h", + "objectivec/GPBWireFormat.h", + "objectivec/google/protobuf/Any.pbobjc.h", + "objectivec/google/protobuf/Api.pbobjc.h", + "objectivec/google/protobuf/Duration.pbobjc.h", + "objectivec/google/protobuf/Empty.pbobjc.h", + "objectivec/google/protobuf/FieldMask.pbobjc.h", + "objectivec/google/protobuf/SourceContext.pbobjc.h", + "objectivec/google/protobuf/Struct.pbobjc.h", + "objectivec/google/protobuf/Timestamp.pbobjc.h", + "objectivec/google/protobuf/Type.pbobjc.h", + "objectivec/google/protobuf/Wrappers.pbobjc.h", +] + +OBJC_PRIVATE_HDRS = [ + "objectivec/GPBArray_PackagePrivate.h", + "objectivec/GPBCodedInputStream_PackagePrivate.h", + "objectivec/GPBCodedOutputStream_PackagePrivate.h", + "objectivec/GPBDescriptor_PackagePrivate.h", + "objectivec/GPBDictionary_PackagePrivate.h", + "objectivec/GPBMessage_PackagePrivate.h", + "objectivec/GPBRootObject_PackagePrivate.h", + "objectivec/GPBUnknownFieldSet_PackagePrivate.h", + "objectivec/GPBUnknownField_PackagePrivate.h", + "objectivec/GPBUtilities_PackagePrivate.h", +] + +OBJC_SRCS = [ + "objectivec/GPBArray.m", + "objectivec/GPBCodedInputStream.m", + "objectivec/GPBCodedOutputStream.m", + "objectivec/GPBDescriptor.m", + "objectivec/GPBDictionary.m", + "objectivec/GPBExtensionInternals.m", + "objectivec/GPBExtensionRegistry.m", + "objectivec/GPBMessage.m", + "objectivec/GPBRootObject.m", + "objectivec/GPBUnknownField.m", + "objectivec/GPBUnknownFieldSet.m", + "objectivec/GPBUtilities.m", + "objectivec/GPBWellKnownTypes.m", + "objectivec/GPBWireFormat.m", + "objectivec/google/protobuf/Any.pbobjc.m", + "objectivec/google/protobuf/Api.pbobjc.m", + "objectivec/google/protobuf/Duration.pbobjc.m", + "objectivec/google/protobuf/Empty.pbobjc.m", + "objectivec/google/protobuf/FieldMask.pbobjc.m", + "objectivec/google/protobuf/SourceContext.pbobjc.m", + "objectivec/google/protobuf/Struct.pbobjc.m", + "objectivec/google/protobuf/Timestamp.pbobjc.m", + "objectivec/google/protobuf/Type.pbobjc.m", + "objectivec/google/protobuf/Wrappers.pbobjc.m", +] + +objc_library( + name = "objectivec", + hdrs = OBJC_HDRS + OBJC_PRIVATE_HDRS, + includes = [ + "objectivec", + ], + non_arc_srcs = OBJC_SRCS, + visibility = ["//visibility:public"], +) diff --git a/third_party/protobuf/3.2.0/CHANGES.txt b/third_party/protobuf/3.2.0/CHANGES.txt index 1164583645ee7b..ccc8ff9439a998 100644 --- a/third_party/protobuf/3.2.0/CHANGES.txt +++ b/third_party/protobuf/3.2.0/CHANGES.txt @@ -1,3 +1,111 @@ +2017-04-05 version 3.3.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript) + Planned Future Changes + * There are some changes that are not included in this release but are + planned for the near future: + - Preserve unknown fields in proto3: please read this doc: + + https://docs.google.com/document/d/1KMRX-G91Aa-Y2FkEaHeeviLRRNblgIahbsk4wA14gRk/view + + for the timeline and follow up this github issue: + + https://github.com/google/protobuf/issues/272 + + for discussion. + - Make C++ implementation C++11 only: we plan to require C++11 to build + protobuf code starting from 3.4.0 or 3.5.0 release. Please join this + github issue: + + https://github.com/google/protobuf/issues/2780 + + to provide your feedback. + + C++ + * Fixed map fields serialization of DynamicMessage to correctly serialize + both key and value regardless of their presence. + * Parser now rejects field number 0 correctly. + * New API Message::SpaceUsedLong() that’s equivalent to + Message::SpaceUsed() but returns the value in size_t. + * JSON support + - New flag always_print_enums_as_ints in JsonPrintOptions. + - New flag preserve_proto_field_names in JsonPrintOptions. It will instruct + the JSON printer to use the original field name declared in the .proto + file instead of converting them to lowerCamelCase when printing JSON. + - JsonPrintOptions.always_print_primtive_fields now works for oneof message + fields. + - Fixed a bug that doesn’t allow different fields to set the same json_name + value. + - Fixed a performance bug that causes excessive memory copy when printing + large messages. + * Various performance optimizations. + + Java + * Map field setters eagerly validate inputs and throw NullPointerExceptions + as appropriate. + * Added ByteBuffer overloads to the generated parsing methods and the Parser + interface. + * proto3 enum's getNumber() method now throws on UNRECOGNIZED values. + * Output of JsonFormat is now locale independent. + + Python + * Added FindServiceByName() in the pure-Python DescriptorPool. This works only + for descriptors added with DescriptorPool.Add(). Generated descriptor_pool + does not support this yet. + * Added a descriptor_pool parameter for parsing Any in text_format.Parse(). + * descriptor_pool.FindFileContainingSymbol() now is able to find nested + extensions. + * Extending empty [] to repeated field now sets parent message presence. + + PHP + * Added file option php_class_prefix. The prefix will be prepended to all + generated classes defined in the file. + * When encoding, negative int32 values are sign-extended to int64. + * Repeated/Map field setter accepts a regular PHP array. Type checking is + done on the array elements. + * encode/decode are renamed to serializeToString/mergeFromString. + * Added mergeFrom, clear method on Message. + * Fixed a bug that oneof accessor didn’t return the field name that is + actually set. + * C extension now works with php7. + * This is the first GA release of PHP. We guarantee that old generated code + can always work with new runtime and new generated code. + + Objective-C + * Fixed help for GPBTimestamp for dates before the epoch that contain + fractional seconds. + * Added GPBMessageDropUnknownFieldsRecursively() to remove unknowns from a + message and any sub messages. + * Addressed a threading race in extension registration/lookup. + * Increased the max message parsing depth to 100 to match the other languages. + * Removed some use of dispatch_once in favor of atomic compare/set since it + needs to be heap based. + * Fixes for new Xcode 8.3 warnings. + + C# + * Fixed MapField.Values.CopyTo, which would throw an exception unnecessarily + if provided exactly the right size of array to copy to. + * Fixed enum JSON formatting when multiple names mapped to the same numeric + value. + * Added JSON formatting option to format enums as integers. + * Modified RepeatedField to implement IReadOnlyList. + * Introduced the start of custom option handling; it's not as pleasant as it + might be, but the information is at least present. We expect to extend code + generation to improve this in the future. + * Introduced ByteString.FromStream and ByteString.FromStreamAsync to + efficiently create a ByteString from a stream. + * Added whole-message deprecation, which decorates the class with [Obsolete]. + + Ruby + * Fixed Message#to_h for messages with map fields. + * Fixed memcpy() in binary gems to work for old glibc, without breaking the + build for non-glibc libc’s like musl. + + Javascript + * Added compatibility tests for version 3.0.0. + * Added conformance tests. + * Fixed serialization of extensions: we need to emit a value even if it is + falsy (like the number 0). + * Use closurebuilder.py in favor of calcdeps.py for compiling JavaScript. + 2017-01-23 version 3.2.0 (C++/Java/Python/PHP/Ruby/Objective-C/C#/JavaScript/Lite) General * Added protoc version number to protoc plugin protocol. It can be used by diff --git a/third_party/protobuf/3.2.0/Makefile.am b/third_party/protobuf/3.2.0/Makefile.am index 0b2511f9ac55fd..f1111898ca5035 100644 --- a/third_party/protobuf/3.2.0/Makefile.am +++ b/third_party/protobuf/3.2.0/Makefile.am @@ -247,6 +247,7 @@ java_EXTRA_DIST= java/core/src/main/java/com/google/protobuf/MutabilityOracle.java \ java/core/src/main/java/com/google/protobuf/NioByteString.java \ java/core/src/main/java/com/google/protobuf/Parser.java \ + java/core/src/main/java/com/google/protobuf/PrimitiveNonBoxingCollection.java \ java/core/src/main/java/com/google/protobuf/ProtobufArrayList.java \ java/core/src/main/java/com/google/protobuf/ProtocolMessageEnum.java \ java/core/src/main/java/com/google/protobuf/ProtocolStringList.java \ @@ -645,6 +646,7 @@ php_EXTRA_DIST= \ php/src/Google/Protobuf/Internal/EnumBuilderContext.php \ php/src/Google/Protobuf/Internal/GPBUtil.php \ php/src/Google/Protobuf/Internal/FieldOptions_CType.php \ + php/src/Google/Protobuf/Internal/GPBDecodeException.php \ php/src/Google/Protobuf/descriptor.php \ php/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php \ php/tests/array_test.php \ @@ -655,6 +657,7 @@ php_EXTRA_DIST= \ php/tests/map_field_test.php \ php/tests/memory_leak_test.php \ php/tests/php_implementation_test.php \ + php/tests/proto/test_import_descriptor_proto.proto \ php/tests/proto/test_include.proto \ php/tests/proto/test.proto \ php/tests/proto/test_prefix.proto \ @@ -710,6 +713,7 @@ python_EXTRA_DIST= \ python/google/protobuf/internal/packed_field_test.proto \ python/google/protobuf/internal/proto_builder_test.py \ python/google/protobuf/internal/python_message.py \ + python/google/protobuf/internal/python_protobuf.cc \ python/google/protobuf/internal/reflection_test.py \ python/google/protobuf/internal/service_reflection_test.py \ python/google/protobuf/internal/symbol_database_test.py \ @@ -752,13 +756,13 @@ python_EXTRA_DIST= \ python/google/protobuf/pyext/message_module.cc \ python/google/protobuf/pyext/proto2_api_test.proto \ python/google/protobuf/pyext/python.proto \ - python/google/protobuf/pyext/python_protobuf.h \ python/google/protobuf/pyext/repeated_composite_container.cc \ python/google/protobuf/pyext/repeated_composite_container.h \ python/google/protobuf/pyext/repeated_scalar_container.cc \ python/google/protobuf/pyext/repeated_scalar_container.h \ python/google/protobuf/pyext/safe_numerics.h \ python/google/protobuf/pyext/scoped_pyobject_ptr.h \ + python/google/protobuf/python_protobuf.h \ python/google/protobuf/reflection.py \ python/google/protobuf/service.py \ python/google/protobuf/service_reflection.py \ @@ -831,51 +835,80 @@ ruby_EXTRA_DIST= \ ruby/tests/well_known_types_test.rb \ ruby/travis-test.sh -js_EXTRA_DIST= \ - js/README.md \ - js/binary/arith.js \ - js/binary/arith_test.js \ - js/binary/constants.js \ - js/binary/decoder.js \ - js/binary/decoder_test.js \ - js/binary/encoder.js \ - js/binary/message_test.js \ - js/binary/proto_test.js \ - js/binary/reader.js \ - js/binary/reader_test.js \ - js/binary/utils.js \ - js/binary/utils_test.js \ - js/binary/writer.js \ - js/binary/writer_test.js \ - js/commonjs/export.js \ - js/commonjs/export_asserts.js \ - js/commonjs/export_testdeps.js \ - js/commonjs/import_test.js \ - js/commonjs/jasmine.json \ - js/commonjs/rewrite_tests_for_commonjs.js \ - js/commonjs/test6/test6.proto \ - js/commonjs/test7/test7.proto \ - js/data.proto \ - js/debug.js \ - js/debug_test.js \ - js/gulpfile.js \ - js/jasmine.json \ - js/map.js \ - js/maps_test.js \ - js/message.js \ - js/message_test.js \ - js/node_loader.js \ - js/package.json \ - js/proto3_test.js \ - js/proto3_test.proto \ - js/test.proto \ - js/test2.proto \ - js/test3.proto \ - js/test4.proto \ - js/test5.proto \ - js/test8.proto \ - js/test_bootstrap.js \ - js/testbinary.proto \ +js_EXTRA_DIST= \ + js/README.md \ + js/binary/arith.js \ + js/binary/arith_test.js \ + js/binary/constants.js \ + js/binary/decoder.js \ + js/binary/decoder_test.js \ + js/binary/encoder.js \ + js/binary/message_test.js \ + js/binary/proto_test.js \ + js/binary/reader.js \ + js/binary/reader_test.js \ + js/binary/utils.js \ + js/binary/utils_test.js \ + js/binary/writer.js \ + js/binary/writer_test.js \ + js/commonjs/export.js \ + js/commonjs/export_asserts.js \ + js/commonjs/export_testdeps.js \ + js/commonjs/import_test.js \ + js/commonjs/jasmine.json \ + js/commonjs/rewrite_tests_for_commonjs.js \ + js/commonjs/test6/test6.proto \ + js/commonjs/test7/test7.proto \ + js/compatibility_tests/v3.0.0/binary/arith_test.js \ + js/compatibility_tests/v3.0.0/binary/decoder_test.js \ + js/compatibility_tests/v3.0.0/binary/proto_test.js \ + js/compatibility_tests/v3.0.0/binary/reader_test.js \ + js/compatibility_tests/v3.0.0/binary/utils_test.js \ + js/compatibility_tests/v3.0.0/binary/writer_test.js \ + js/compatibility_tests/v3.0.0/commonjs/export_asserts.js \ + js/compatibility_tests/v3.0.0/commonjs/export_testdeps.js \ + js/compatibility_tests/v3.0.0/commonjs/import_test.js \ + js/compatibility_tests/v3.0.0/commonjs/jasmine.json \ + js/compatibility_tests/v3.0.0/commonjs/rewrite_tests_for_commonjs.js \ + js/compatibility_tests/v3.0.0/commonjs/test6/test6.proto \ + js/compatibility_tests/v3.0.0/commonjs/test7/test7.proto \ + js/compatibility_tests/v3.0.0/data.proto \ + js/compatibility_tests/v3.0.0/debug_test.js \ + js/compatibility_tests/v3.0.0/jasmine1.json \ + js/compatibility_tests/v3.0.0/jasmine2.json \ + js/compatibility_tests/v3.0.0/jasmine3.json \ + js/compatibility_tests/v3.0.0/message_test.js \ + js/compatibility_tests/v3.0.0/proto3_test.js \ + js/compatibility_tests/v3.0.0/proto3_test.proto \ + js/compatibility_tests/v3.0.0/test2.proto \ + js/compatibility_tests/v3.0.0/test3.proto \ + js/compatibility_tests/v3.0.0/test4.proto \ + js/compatibility_tests/v3.0.0/test5.proto \ + js/compatibility_tests/v3.0.0/testbinary.proto \ + js/compatibility_tests/v3.0.0/testempty.proto \ + js/compatibility_tests/v3.0.0/test.proto \ + js/compatibility_tests/v3.0.0/test.sh \ + js/data.proto \ + js/debug.js \ + js/debug_test.js \ + js/gulpfile.js \ + js/jasmine.json \ + js/map.js \ + js/maps_test.js \ + js/message.js \ + js/message_test.js \ + js/node_loader.js \ + js/package.json \ + js/proto3_test.js \ + js/proto3_test.proto \ + js/test.proto \ + js/test2.proto \ + js/test3.proto \ + js/test4.proto \ + js/test5.proto \ + js/test8.proto \ + js/test_bootstrap.js \ + js/testbinary.proto \ js/testempty.proto all_EXTRA_DIST=$(csharp_EXTRA_DIST) $(java_EXTRA_DIST) $(javanano_EXTRA_DIST) $(objectivec_EXTRA_DIST) $(php_EXTRA_DIST) $(python_EXTRA_DIST) $(ruby_EXTRA_DIST) $(js_EXTRA_DIST) diff --git a/third_party/protobuf/3.2.0/Protobuf.podspec b/third_party/protobuf/3.2.0/Protobuf.podspec index 0db70650efcbd4..649f3ae3e1dedd 100644 --- a/third_party/protobuf/3.2.0/Protobuf.podspec +++ b/third_party/protobuf/3.2.0/Protobuf.podspec @@ -5,7 +5,7 @@ # dependent projects use the :git notation to refer to the library. Pod::Spec.new do |s| s.name = 'Protobuf' - s.version = '3.2.0' + s.version = '3.3.0' s.summary = 'Protocol Buffers v.3 runtime library for Objective-C.' s.homepage = 'https://github.com/google/protobuf' s.license = '3-Clause BSD License' diff --git a/third_party/protobuf/3.2.0/README.bazel.md b/third_party/protobuf/3.2.0/README.bazel.md deleted file mode 100644 index 75e448d927f777..00000000000000 --- a/third_party/protobuf/3.2.0/README.bazel.md +++ /dev/null @@ -1,34 +0,0 @@ -# Updating protobuf - -1) Fetch the desired version from https://github.com/google/protobuf, - extract everything into a new directory and change into it. -2) Bazel uses upstream protobuf from source, except for java, as we - currently don't build protobuf java when bootstrapping bazel. So - instead we use already build jars. Go to `search.maven.org` and - search for `com.google.protobuf` and download the jars for protobuf-java - and protobuf-java-util and place them in the new directory. -3) Modify protobuf's `BUILD` file to not build java from source, but to use - the jars instead. To do that, in the BUILD file delete the rules listed - under `Java support`. Then, from the `third_party/protobuf/BUILD file` - copy the rules under "Modifications made by bazel" to the new BUILD file. - Those rules should have the same names as the ones you just deleted. You - will need to update the names of the jars in the rules sources to the - ones you just downloaded. -4) Copy `third_party/protobuf/com_google_protobuf_java.BUILD` to the new - directory. -5) Copy this file to the new directory and update it if you found the - instructions to be wrong or incomplete. -6) Replace the contents in `third_party/protobuf` with the contents in this - directory. -7) Protobuf compiles only with warnings, which we turn into errors. To fix - that, open time_util.cc and remove the constants kMicrosPerMillisecond - and kTimestampFormat. -8) Delete this directory. - -# Current protobuf version - -The current version of protobuf was obtained from @laszlocsomor's protobuf fork -`https://github.com/laszlocsomor/protobuf` at commit `421d90960d`. Once -`https://github.com/google/protobuf/pull/2969` is merged into upstream -protobuf, we no longer need to use @laszlocsomor's fork but can directly clone -upstream. diff --git a/third_party/protobuf/3.2.0/README.md b/third_party/protobuf/3.2.0/README.md index b26e5424af8f7a..e456863e8fb588 100644 --- a/third_party/protobuf/3.2.0/README.md +++ b/third_party/protobuf/3.2.0/README.md @@ -54,18 +54,19 @@ Protobuf supports several different programming languages. For each programming language, you can find instructions in the corresponding source directory about how to install protobuf runtime for that specific language: -| Language | Source | -|--------------------------------------|-------------------------------------------------------| -| C++ (include C++ runtime and protoc) | [src](src) | -| Java | [java](java) | -| Python | [python](python) | -| Objective-C | [objectivec](objectivec) | -| C# | [csharp](csharp) | -| JavaNano | [javanano](javanano) | -| JavaScript | [js](js) | -| Ruby | [ruby](ruby) | -| Go | [golang/protobuf](https://github.com/golang/protobuf) | -| PHP | [php](php) | +| Language | Source | +|--------------------------------------|-------------------------------------------------------------| +| C++ (include C++ runtime and protoc) | [src](src) | +| Java | [java](java) | +| Python | [python](python) | +| Objective-C | [objectivec](objectivec) | +| C# | [csharp](csharp) | +| JavaNano | [javanano](javanano) | +| JavaScript | [js](js) | +| Ruby | [ruby](ruby) | +| Go | [golang/protobuf](https://github.com/golang/protobuf) | +| PHP | [php](php) | +| Dart | [dart-lang/protobuf](https://github.com/dart-lang/protobuf) | Usage diff --git a/third_party/protobuf/3.2.0/cmake/extract_includes.bat.in b/third_party/protobuf/3.2.0/cmake/extract_includes.bat.in index a4fd7622588aad..27ef126b83bd51 100644 --- a/third_party/protobuf/3.2.0/cmake/extract_includes.bat.in +++ b/third_party/protobuf/3.2.0/cmake/extract_includes.bat.in @@ -36,6 +36,7 @@ copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\parser.h" in copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\php\php_generator.h" include\google\protobuf\compiler\php\php_generator.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\plugin.h" include\google\protobuf\compiler\plugin.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\plugin.pb.h" include\google\protobuf\compiler\plugin.pb.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\profile.pb.h" include\google\protobuf\compiler\profile.pb.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\python\python_generator.h" include\google\protobuf\compiler\python\python_generator.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\ruby\ruby_generator.h" include\google\protobuf\compiler\ruby\ruby_generator.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\descriptor.h" include\google\protobuf\descriptor.h @@ -96,6 +97,7 @@ copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\casts.h" includ copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\common.h" include\google\protobuf\stubs\common.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\fastmem.h" include\google\protobuf\stubs\fastmem.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\hash.h" include\google\protobuf\stubs\hash.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\io_win32.h" include\google\protobuf\stubs\io_win32.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\logging.h" include\google\protobuf\stubs\logging.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\macros.h" include\google\protobuf\stubs\macros.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\mutex.h" include\google\protobuf\stubs\mutex.h @@ -114,6 +116,7 @@ copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\text_format.h" includ copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\timestamp.pb.h" include\google\protobuf\timestamp.pb.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\type.pb.h" include\google\protobuf\type.pb.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\unknown_field_set.h" include\google\protobuf\unknown_field_set.h +copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\delimited_message_util.h" include\google\protobuf\util\delimited_message_util.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\field_comparator.h" include\google\protobuf\util\field_comparator.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\field_mask_util.h" include\google\protobuf\util\field_mask_util.h copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\json_util.h" include\google\protobuf\util\json_util.h diff --git a/third_party/protobuf/3.2.0/cmake/libprotobuf-lite.cmake b/third_party/protobuf/3.2.0/cmake/libprotobuf-lite.cmake index 036b051707db29..f419784c70d1a3 100644 --- a/third_party/protobuf/3.2.0/cmake/libprotobuf-lite.cmake +++ b/third_party/protobuf/3.2.0/cmake/libprotobuf-lite.cmake @@ -13,6 +13,7 @@ set(libprotobuf_lite_files ${protobuf_source_dir}/src/google/protobuf/stubs/bytestream.cc ${protobuf_source_dir}/src/google/protobuf/stubs/common.cc ${protobuf_source_dir}/src/google/protobuf/stubs/int128.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/io_win32.cc ${protobuf_source_dir}/src/google/protobuf/stubs/once.cc ${protobuf_source_dir}/src/google/protobuf/stubs/status.cc ${protobuf_source_dir}/src/google/protobuf/stubs/statusor.cc diff --git a/third_party/protobuf/3.2.0/cmake/libprotoc.cmake b/third_party/protobuf/3.2.0/cmake/libprotoc.cmake index 29b325387385b9..248688495a8d5b 100644 --- a/third_party/protobuf/3.2.0/cmake/libprotoc.cmake +++ b/third_party/protobuf/3.2.0/cmake/libprotoc.cmake @@ -88,10 +88,12 @@ set(libprotoc_files ${protobuf_source_dir}/src/google/protobuf/compiler/php/php_generator.cc ${protobuf_source_dir}/src/google/protobuf/compiler/plugin.cc ${protobuf_source_dir}/src/google/protobuf/compiler/plugin.pb.cc + ${protobuf_source_dir}/src/google/protobuf/compiler/profile.pb.cc ${protobuf_source_dir}/src/google/protobuf/compiler/python/python_generator.cc ${protobuf_source_dir}/src/google/protobuf/compiler/ruby/ruby_generator.cc ${protobuf_source_dir}/src/google/protobuf/compiler/subprocess.cc ${protobuf_source_dir}/src/google/protobuf/compiler/zip_writer.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/io_win32.cc ) set(js_well_known_types_sources diff --git a/third_party/protobuf/3.2.0/cmake/tests.cmake b/third_party/protobuf/3.2.0/cmake/tests.cmake index 1470e4b036b22e..31f225753eea0f 100644 --- a/third_party/protobuf/3.2.0/cmake/tests.cmake +++ b/third_party/protobuf/3.2.0/cmake/tests.cmake @@ -43,6 +43,9 @@ set(tests_protos google/protobuf/unittest_empty.proto google/protobuf/unittest_import.proto google/protobuf/unittest_import_public.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_mset.proto google/protobuf/unittest_mset_wire_format.proto @@ -157,6 +160,8 @@ set(tests_files ${protobuf_source_dir}/src/google/protobuf/stubs/bytestream_unittest.cc ${protobuf_source_dir}/src/google/protobuf/stubs/common_unittest.cc ${protobuf_source_dir}/src/google/protobuf/stubs/int128_unittest.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/io_win32.cc + ${protobuf_source_dir}/src/google/protobuf/stubs/io_win32_unittest.cc ${protobuf_source_dir}/src/google/protobuf/stubs/once_unittest.cc ${protobuf_source_dir}/src/google/protobuf/stubs/status_test.cc ${protobuf_source_dir}/src/google/protobuf/stubs/statusor_test.cc @@ -195,6 +200,7 @@ 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/stubs/io_win32.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 @@ -207,7 +213,7 @@ set(lite_test_files ${protobuf_source_dir}/src/google/protobuf/lite_unittest.cc ) add_executable(lite-test ${lite_test_files} ${common_lite_test_files} ${lite_test_proto_files}) -target_link_libraries(lite-test libprotobuf-lite) +target_link_libraries(lite-test libprotobuf-lite gmock_main) set(lite_arena_test_files ${protobuf_source_dir}/src/google/protobuf/lite_arena_unittest.cc diff --git a/third_party/protobuf/3.2.0/com_google_protobuf_java.BUILD b/third_party/protobuf/3.2.0/com_google_protobuf_java.BUILD index c507b8a4c6363e..4f2c4a5c5e8a32 100644 --- a/third_party/protobuf/3.2.0/com_google_protobuf_java.BUILD +++ b/third_party/protobuf/3.2.0/com_google_protobuf_java.BUILD @@ -1,6 +1,6 @@ java_import( name = "protobuf", - jars = ["protobuf-java-3.2.0.jar"], + jars = ["libprotobuf_java.jar"], ) proto_lang_toolchain( diff --git a/third_party/protobuf/3.2.0/configure.ac b/third_party/protobuf/3.2.0/configure.ac index 531e25fbc8d8bc..82b221e84ce549 100644 --- a/third_party/protobuf/3.2.0/configure.ac +++ b/third_party/protobuf/3.2.0/configure.ac @@ -17,7 +17,7 @@ AC_PREREQ(2.59) # In the SVN trunk, the version should always be the next anticipated release # version with the "-pre" suffix. (We used to use "-SNAPSHOT" but this pushed # the size of one file name in the dist tarfile over the 99-char limit.) -AC_INIT([Protocol Buffers],[3.2.0],[protobuf@googlegroups.com],[protobuf]) +AC_INIT([Protocol Buffers],[3.3.0],[protobuf@googlegroups.com],[protobuf]) AM_MAINTAINER_MODE([enable]) diff --git a/third_party/protobuf/3.2.0/conformance/conformance_test.cc b/third_party/protobuf/3.2.0/conformance/conformance_test.cc index 1e5387a54c30f0..0dd7787c0c480f 100644 --- a/third_party/protobuf/3.2.0/conformance/conformance_test.cc +++ b/third_party/protobuf/3.2.0/conformance/conformance_test.cc @@ -708,6 +708,21 @@ bool ConformanceTestSuite::CheckSetEmpty(const set& set_to_check, } } +void ConformanceTestSuite::TestIllegalTags() { + // field num 0 is illegal + string nullfield[] = { + "\1DEADBEEF", + "\2\1\1", + "\3\4", + "\5DEAD" + }; + for (int i = 0; i < 4; i++) { + string name = "IllegalZeroFieldNum_Case_0"; + name.back() += i; + ExpectParseFailureForProto(nullfield[i], name, REQUIRED); + } +} + bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner, std::string* output) { runner_ = runner; @@ -728,6 +743,8 @@ bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner, TestPrematureEOFForType(static_cast(i)); } + TestIllegalTags(); + int64 kInt64Min = -9223372036854775808ULL; int64 kInt64Max = 9223372036854775807ULL; uint64 kUint64Max = 18446744073709551615ULL; diff --git a/third_party/protobuf/3.2.0/conformance/conformance_test.h b/third_party/protobuf/3.2.0/conformance/conformance_test.h index 5f05a25bcbdc4c..4e40a6acf3aa14 100644 --- a/third_party/protobuf/3.2.0/conformance/conformance_test.h +++ b/third_party/protobuf/3.2.0/conformance/conformance_test.h @@ -201,6 +201,7 @@ class ConformanceTestSuite { const std::string& test_name, ConformanceLevel level); void TestPrematureEOFForType(google::protobuf::FieldDescriptor::Type type); + void TestIllegalTags(); void TestValidDataForType( google::protobuf::FieldDescriptor::Type, std::vector> values); diff --git a/third_party/protobuf/3.2.0/conformance/failure_list_cpp.txt b/third_party/protobuf/3.2.0/conformance/failure_list_cpp.txt index 8cfd74da6e0ea9..8a4fa7eb11bdac 100644 --- a/third_party/protobuf/3.2.0/conformance/failure_list_cpp.txt +++ b/third_party/protobuf/3.2.0/conformance/failure_list_cpp.txt @@ -32,7 +32,6 @@ Recommended.JsonInput.TrailingCommaInAnObject Recommended.JsonInput.TrailingCommaInAnObjectWithNewlines Recommended.JsonInput.TrailingCommaInAnObjectWithSpace Recommended.JsonInput.TrailingCommaInAnObjectWithSpaceCommaSpace -Required.ProtobufInput.PrematureEofBeforeKnownRepeatedValue.MESSAGE Required.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE Required.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE Required.ProtobufInput.PrematureEofInPackedField.BOOL @@ -43,4 +42,3 @@ Required.ProtobufInput.PrematureEofInPackedField.SINT32 Required.ProtobufInput.PrematureEofInPackedField.SINT64 Required.ProtobufInput.PrematureEofInPackedField.UINT32 Required.ProtobufInput.PrematureEofInPackedField.UINT64 -Required.ProtobufInput.PrematureEofInsideKnownRepeatedValue.MESSAGE diff --git a/third_party/protobuf/3.2.0/conformance/failure_list_csharp.txt b/third_party/protobuf/3.2.0/conformance/failure_list_csharp.txt index e69de29bb2d1d6..922db94c090090 100644 --- a/third_party/protobuf/3.2.0/conformance/failure_list_csharp.txt +++ b/third_party/protobuf/3.2.0/conformance/failure_list_csharp.txt @@ -0,0 +1,4 @@ +Required.ProtobufInput.IllegalZeroFieldNum_Case_0 +Required.ProtobufInput.IllegalZeroFieldNum_Case_1 +Required.ProtobufInput.IllegalZeroFieldNum_Case_2 +Required.ProtobufInput.IllegalZeroFieldNum_Case_3 diff --git a/third_party/protobuf/3.2.0/conformance/failure_list_objc.txt b/third_party/protobuf/3.2.0/conformance/failure_list_objc.txt index dd538c1036cd27..6e0da6cf3e4bc8 100644 --- a/third_party/protobuf/3.2.0/conformance/failure_list_objc.txt +++ b/third_party/protobuf/3.2.0/conformance/failure_list_objc.txt @@ -1,4 +1,6 @@ -# All tests currently passing. -# # JSON input or output tests are skipped (in conformance_objc.m) as mobile # platforms don't support JSON wire format to avoid code bloat. +Required.ProtobufInput.IllegalZeroFieldNum_Case_0 +Required.ProtobufInput.IllegalZeroFieldNum_Case_1 +Required.ProtobufInput.IllegalZeroFieldNum_Case_2 +Required.ProtobufInput.IllegalZeroFieldNum_Case_3 diff --git a/third_party/protobuf/3.2.0/conformance/failure_list_php_c.txt b/third_party/protobuf/3.2.0/conformance/failure_list_php_c.txt index 05cb218a619a15..f53449f7d51e7b 100644 --- a/third_party/protobuf/3.2.0/conformance/failure_list_php_c.txt +++ b/third_party/protobuf/3.2.0/conformance/failure_list_php_c.txt @@ -8,6 +8,7 @@ Recommended.JsonInput.DurationHas6FractionalDigits.Validator Recommended.JsonInput.DurationHas9FractionalDigits.Validator Recommended.JsonInput.DurationHasZeroFractionalDigit.Validator Recommended.JsonInput.Int64FieldBeString.Validator +Recommended.JsonInput.MapFieldValueIsNull Recommended.JsonInput.OneofZeroBool.JsonOutput Recommended.JsonInput.OneofZeroBool.ProtobufOutput Recommended.JsonInput.OneofZeroBytes.JsonOutput @@ -24,6 +25,8 @@ Recommended.JsonInput.OneofZeroUint32.JsonOutput Recommended.JsonInput.OneofZeroUint32.ProtobufOutput Recommended.JsonInput.OneofZeroUint64.JsonOutput Recommended.JsonInput.OneofZeroUint64.ProtobufOutput +Recommended.JsonInput.RepeatedFieldMessageElementIsNull +Recommended.JsonInput.RepeatedFieldPrimitiveElementIsNull Recommended.JsonInput.StringEndsWithEscapeChar Recommended.JsonInput.StringFieldSurrogateInWrongOrder Recommended.JsonInput.StringFieldUnpairedHighSurrogate @@ -127,24 +130,12 @@ Required.JsonInput.Int32FieldStringValue.JsonOutput Required.JsonInput.Int32FieldStringValue.ProtobufOutput Required.JsonInput.Int32FieldStringValueEscaped.JsonOutput Required.JsonInput.Int32FieldStringValueEscaped.ProtobufOutput -Required.JsonInput.Int32MapEscapedKey.JsonOutput -Required.JsonInput.Int32MapEscapedKey.ProtobufOutput -Required.JsonInput.Int32MapField.JsonOutput -Required.JsonInput.Int32MapField.ProtobufOutput Required.JsonInput.Int64FieldMaxValue.JsonOutput Required.JsonInput.Int64FieldMaxValue.ProtobufOutput Required.JsonInput.Int64FieldMinValue.JsonOutput Required.JsonInput.Int64FieldMinValue.ProtobufOutput -Required.JsonInput.Int64MapEscapedKey.JsonOutput -Required.JsonInput.Int64MapEscapedKey.ProtobufOutput -Required.JsonInput.Int64MapField.JsonOutput -Required.JsonInput.Int64MapField.ProtobufOutput Required.JsonInput.MessageField.JsonOutput Required.JsonInput.MessageField.ProtobufOutput -Required.JsonInput.MessageMapField.JsonOutput -Required.JsonInput.MessageMapField.ProtobufOutput -Required.JsonInput.MessageRepeatedField.JsonOutput -Required.JsonInput.MessageRepeatedField.ProtobufOutput Required.JsonInput.OptionalBoolWrapper.JsonOutput Required.JsonInput.OptionalBoolWrapper.ProtobufOutput Required.JsonInput.OptionalBytesWrapper.JsonOutput @@ -165,14 +156,13 @@ Required.JsonInput.OptionalUint64Wrapper.JsonOutput Required.JsonInput.OptionalUint64Wrapper.ProtobufOutput Required.JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput Required.JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput -Required.JsonInput.PrimitiveRepeatedField.JsonOutput -Required.JsonInput.PrimitiveRepeatedField.ProtobufOutput Required.JsonInput.RepeatedBoolWrapper.JsonOutput Required.JsonInput.RepeatedBoolWrapper.ProtobufOutput Required.JsonInput.RepeatedBytesWrapper.JsonOutput Required.JsonInput.RepeatedBytesWrapper.ProtobufOutput Required.JsonInput.RepeatedDoubleWrapper.JsonOutput Required.JsonInput.RepeatedDoubleWrapper.ProtobufOutput +Required.JsonInput.RepeatedFieldWrongElementTypeExpectingMessagesGotInt Required.JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotInt Required.JsonInput.RepeatedFloatWrapper.JsonOutput Required.JsonInput.RepeatedFloatWrapper.ProtobufOutput @@ -186,9 +176,15 @@ Required.JsonInput.RepeatedUint32Wrapper.JsonOutput Required.JsonInput.RepeatedUint32Wrapper.ProtobufOutput Required.JsonInput.RepeatedUint64Wrapper.JsonOutput Required.JsonInput.RepeatedUint64Wrapper.ProtobufOutput +Required.JsonInput.StringFieldEscape.JsonOutput +Required.JsonInput.StringFieldEscape.ProtobufOutput Required.JsonInput.StringFieldNotAString Required.JsonInput.StringFieldSurrogatePair.JsonOutput Required.JsonInput.StringFieldSurrogatePair.ProtobufOutput +Required.JsonInput.StringFieldUnicodeEscape.JsonOutput +Required.JsonInput.StringFieldUnicodeEscape.ProtobufOutput +Required.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.JsonOutput +Required.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.ProtobufOutput Required.JsonInput.Struct.JsonOutput Required.JsonInput.Struct.ProtobufOutput Required.JsonInput.TimestampMaxValue.JsonOutput @@ -203,12 +199,8 @@ Required.JsonInput.TimestampWithPositiveOffset.JsonOutput Required.JsonInput.TimestampWithPositiveOffset.ProtobufOutput Required.JsonInput.Uint32FieldMaxFloatValue.JsonOutput Required.JsonInput.Uint32FieldMaxFloatValue.ProtobufOutput -Required.JsonInput.Uint32MapField.JsonOutput -Required.JsonInput.Uint32MapField.ProtobufOutput Required.JsonInput.Uint64FieldMaxValue.JsonOutput Required.JsonInput.Uint64FieldMaxValue.ProtobufOutput -Required.JsonInput.Uint64MapField.JsonOutput -Required.JsonInput.Uint64MapField.ProtobufOutput Required.JsonInput.ValueAcceptBool.JsonOutput Required.JsonInput.ValueAcceptBool.ProtobufOutput Required.JsonInput.ValueAcceptFloat.JsonOutput diff --git a/third_party/protobuf/3.2.0/conformance/failure_list_python.txt b/third_party/protobuf/3.2.0/conformance/failure_list_python.txt index 9d556a036b3911..965b8212a506f8 100644 --- a/third_party/protobuf/3.2.0/conformance/failure_list_python.txt +++ b/third_party/protobuf/3.2.0/conformance/failure_list_python.txt @@ -11,3 +11,7 @@ Required.JsonInput.FloatFieldTooLarge Required.JsonInput.FloatFieldTooSmall Required.JsonInput.RepeatedFieldWrongElementTypeExpectingIntegersGotBool Required.JsonInput.TimestampJsonInputLowercaseT +Required.ProtobufInput.IllegalZeroFieldNum_Case_0 +Required.ProtobufInput.IllegalZeroFieldNum_Case_1 +Required.ProtobufInput.IllegalZeroFieldNum_Case_2 +Required.ProtobufInput.IllegalZeroFieldNum_Case_3 diff --git a/third_party/protobuf/3.2.0/csharp/Google.Protobuf.Tools.nuspec b/third_party/protobuf/3.2.0/csharp/Google.Protobuf.Tools.nuspec index 0b9cbcf423bc65..182309bf13eab2 100644 --- a/third_party/protobuf/3.2.0/csharp/Google.Protobuf.Tools.nuspec +++ b/third_party/protobuf/3.2.0/csharp/Google.Protobuf.Tools.nuspec @@ -5,7 +5,7 @@ Google Protocol Buffers tools Tools for Protocol Buffers - Google's data interchange format. See project site for more info. - 3.2.0 + 3.3.0 Google Inc. protobuf-packages https://github.com/google/protobuf/blob/master/LICENSE diff --git a/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/Reflection/Descriptor.cs b/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/Reflection/Descriptor.cs index d4b78daec91855..2960d1cdcba64e 100644 --- a/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/Reflection/Descriptor.cs +++ b/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/Reflection/Descriptor.cs @@ -95,57 +95,58 @@ static DescriptorReflection() { "X3ByZWZpeBgoIAEoCRJDChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsy", "JC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiI6CgxPcHRp", "bWl6ZU1vZGUSCQoFU1BFRUQQARINCglDT0RFX1NJWkUQAhIQCgxMSVRFX1JV", - "TlRJTUUQAyoJCOgHEICAgIACSgQIJhAnIuwBCg5NZXNzYWdlT3B0aW9ucxIm", + "TlRJTUUQAyoJCOgHEICAgIACSgQIJhAnIvIBCg5NZXNzYWdlT3B0aW9ucxIm", "ChdtZXNzYWdlX3NldF93aXJlX2Zvcm1hdBgBIAEoCDoFZmFsc2USLgofbm9f", "c3RhbmRhcmRfZGVzY3JpcHRvcl9hY2Nlc3NvchgCIAEoCDoFZmFsc2USGQoK", "ZGVwcmVjYXRlZBgDIAEoCDoFZmFsc2USEQoJbWFwX2VudHJ5GAcgASgIEkMK", "FHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1", - "Zi5VbmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgIEAkingMKDEZp", - "ZWxkT3B0aW9ucxI6CgVjdHlwZRgBIAEoDjIjLmdvb2dsZS5wcm90b2J1Zi5G", - "aWVsZE9wdGlvbnMuQ1R5cGU6BlNUUklORxIOCgZwYWNrZWQYAiABKAgSPwoG", - "anN0eXBlGAYgASgOMiQuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5K", - "U1R5cGU6CUpTX05PUk1BTBITCgRsYXp5GAUgASgIOgVmYWxzZRIZCgpkZXBy", - "ZWNhdGVkGAMgASgIOgVmYWxzZRITCgR3ZWFrGAogASgIOgVmYWxzZRJDChR1", - "bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYu", - "VW5pbnRlcnByZXRlZE9wdGlvbiIvCgVDVHlwZRIKCgZTVFJJTkcQABIICgRD", - "T1JEEAESEAoMU1RSSU5HX1BJRUNFEAIiNQoGSlNUeXBlEg0KCUpTX05PUk1B", - "TBAAEg0KCUpTX1NUUklORxABEg0KCUpTX05VTUJFUhACKgkI6AcQgICAgAJK", - "BAgEEAUiXgoMT25lb2ZPcHRpb25zEkMKFHVuaW50ZXJwcmV0ZWRfb3B0aW9u", + "Zi5VbmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgIEAlKBAgJEAoi", + "ngMKDEZpZWxkT3B0aW9ucxI6CgVjdHlwZRgBIAEoDjIjLmdvb2dsZS5wcm90", + "b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGU6BlNUUklORxIOCgZwYWNrZWQYAiAB", + "KAgSPwoGanN0eXBlGAYgASgOMiQuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0", + "aW9ucy5KU1R5cGU6CUpTX05PUk1BTBITCgRsYXp5GAUgASgIOgVmYWxzZRIZ", + "CgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZRITCgR3ZWFrGAogASgIOgVmYWxz", + "ZRJDChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJv", + "dG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbiIvCgVDVHlwZRIKCgZTVFJJTkcQ", + "ABIICgRDT1JEEAESEAoMU1RSSU5HX1BJRUNFEAIiNQoGSlNUeXBlEg0KCUpT", + "X05PUk1BTBAAEg0KCUpTX1NUUklORxABEg0KCUpTX05VTUJFUhACKgkI6AcQ", + "gICAgAJKBAgEEAUiXgoMT25lb2ZPcHRpb25zEkMKFHVuaW50ZXJwcmV0ZWRf", + "b3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVk", + "T3B0aW9uKgkI6AcQgICAgAIikwEKC0VudW1PcHRpb25zEhMKC2FsbG93X2Fs", + "aWFzGAIgASgIEhkKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlEkMKFHVuaW50", + "ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5Vbmlu", + "dGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgFEAYifQoQRW51bVZhbHVl", + "T3B0aW9ucxIZCgpkZXByZWNhdGVkGAEgASgIOgVmYWxzZRJDChR1bmludGVy", + "cHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRl", + "cnByZXRlZE9wdGlvbioJCOgHEICAgIACInsKDlNlcnZpY2VPcHRpb25zEhkK", + "CmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlEkMKFHVuaW50ZXJwcmV0ZWRfb3B0", + "aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0", + "aW9uKgkI6AcQgICAgAIirQIKDU1ldGhvZE9wdGlvbnMSGQoKZGVwcmVjYXRl", + "ZBghIAEoCDoFZmFsc2USXwoRaWRlbXBvdGVuY3lfbGV2ZWwYIiABKA4yLy5n", + "b29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVs", + "OhNJREVNUE9URU5DWV9VTktOT1dOEkMKFHVuaW50ZXJwcmV0ZWRfb3B0aW9u", "GOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9u", - "KgkI6AcQgICAgAIijQEKC0VudW1PcHRpb25zEhMKC2FsbG93X2FsaWFzGAIg", - "ASgIEhkKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlEkMKFHVuaW50ZXJwcmV0", - "ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJl", - "dGVkT3B0aW9uKgkI6AcQgICAgAIifQoQRW51bVZhbHVlT3B0aW9ucxIZCgpk", - "ZXByZWNhdGVkGAEgASgIOgVmYWxzZRJDChR1bmludGVycHJldGVkX29wdGlv", - "bhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlv", - "bioJCOgHEICAgIACInsKDlNlcnZpY2VPcHRpb25zEhkKCmRlcHJlY2F0ZWQY", - "ISABKAg6BWZhbHNlEkMKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIk", - "Lmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uKgkI6AcQgICA", - "gAIirQIKDU1ldGhvZE9wdGlvbnMSGQoKZGVwcmVjYXRlZBghIAEoCDoFZmFs", - "c2USXwoRaWRlbXBvdGVuY3lfbGV2ZWwYIiABKA4yLy5nb29nbGUucHJvdG9i", - "dWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsOhNJREVNUE9URU5D", - "WV9VTktOT1dOEkMKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdv", - "b2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uIlAKEElkZW1wb3Rl", - "bmN5TGV2ZWwSFwoTSURFTVBPVEVOQ1lfVU5LTk9XThAAEhMKD05PX1NJREVf", - "RUZGRUNUUxABEg4KCklERU1QT1RFTlQQAioJCOgHEICAgIACIp4CChNVbmlu", - "dGVycHJldGVkT3B0aW9uEjsKBG5hbWUYAiADKAsyLS5nb29nbGUucHJvdG9i", - "dWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydBIYChBpZGVudGlmaWVy", - "X3ZhbHVlGAMgASgJEhoKEnBvc2l0aXZlX2ludF92YWx1ZRgEIAEoBBIaChJu", - "ZWdhdGl2ZV9pbnRfdmFsdWUYBSABKAMSFAoMZG91YmxlX3ZhbHVlGAYgASgB", - "EhQKDHN0cmluZ192YWx1ZRgHIAEoDBIXCg9hZ2dyZWdhdGVfdmFsdWUYCCAB", - "KAkaMwoITmFtZVBhcnQSEQoJbmFtZV9wYXJ0GAEgAigJEhQKDGlzX2V4dGVu", - "c2lvbhgCIAIoCCLVAQoOU291cmNlQ29kZUluZm8SOgoIbG9jYXRpb24YASAD", - "KAsyKC5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUluZm8uTG9jYXRpb24a", - "hgEKCExvY2F0aW9uEhAKBHBhdGgYASADKAVCAhABEhAKBHNwYW4YAiADKAVC", - "AhABEhgKEGxlYWRpbmdfY29tbWVudHMYAyABKAkSGQoRdHJhaWxpbmdfY29t", - "bWVudHMYBCABKAkSIQoZbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cxgGIAMo", - "CSKnAQoRR2VuZXJhdGVkQ29kZUluZm8SQQoKYW5ub3RhdGlvbhgBIAMoCzIt", - "Lmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9u", - "Gk8KCkFubm90YXRpb24SEAoEcGF0aBgBIAMoBUICEAESEwoLc291cmNlX2Zp", - "bGUYAiABKAkSDQoFYmVnaW4YAyABKAUSCwoDZW5kGAQgASgFQowBChNjb20u", - "Z29vZ2xlLnByb3RvYnVmQhBEZXNjcmlwdG9yUHJvdG9zSAFaPmdpdGh1Yi5j", - "b20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvYy1nZW4tZ28vZGVzY3JpcHRvcjtk", - "ZXNjcmlwdG9yogIDR1BCqgIaR29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb24=")); + "IlAKEElkZW1wb3RlbmN5TGV2ZWwSFwoTSURFTVBPVEVOQ1lfVU5LTk9XThAA", + "EhMKD05PX1NJREVfRUZGRUNUUxABEg4KCklERU1QT1RFTlQQAioJCOgHEICA", + "gIACIp4CChNVbmludGVycHJldGVkT3B0aW9uEjsKBG5hbWUYAiADKAsyLS5n", + "b29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydBIY", + "ChBpZGVudGlmaWVyX3ZhbHVlGAMgASgJEhoKEnBvc2l0aXZlX2ludF92YWx1", + "ZRgEIAEoBBIaChJuZWdhdGl2ZV9pbnRfdmFsdWUYBSABKAMSFAoMZG91Ymxl", + "X3ZhbHVlGAYgASgBEhQKDHN0cmluZ192YWx1ZRgHIAEoDBIXCg9hZ2dyZWdh", + "dGVfdmFsdWUYCCABKAkaMwoITmFtZVBhcnQSEQoJbmFtZV9wYXJ0GAEgAigJ", + "EhQKDGlzX2V4dGVuc2lvbhgCIAIoCCLVAQoOU291cmNlQ29kZUluZm8SOgoI", + "bG9jYXRpb24YASADKAsyKC5nb29nbGUucHJvdG9idWYuU291cmNlQ29kZUlu", + "Zm8uTG9jYXRpb24ahgEKCExvY2F0aW9uEhAKBHBhdGgYASADKAVCAhABEhAK", + "BHNwYW4YAiADKAVCAhABEhgKEGxlYWRpbmdfY29tbWVudHMYAyABKAkSGQoR", + "dHJhaWxpbmdfY29tbWVudHMYBCABKAkSIQoZbGVhZGluZ19kZXRhY2hlZF9j", + "b21tZW50cxgGIAMoCSKnAQoRR2VuZXJhdGVkQ29kZUluZm8SQQoKYW5ub3Rh", + "dGlvbhgBIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5m", + "by5Bbm5vdGF0aW9uGk8KCkFubm90YXRpb24SEAoEcGF0aBgBIAMoBUICEAES", + "EwoLc291cmNlX2ZpbGUYAiABKAkSDQoFYmVnaW4YAyABKAUSCwoDZW5kGAQg", + "ASgFQowBChNjb20uZ29vZ2xlLnByb3RvYnVmQhBEZXNjcmlwdG9yUHJvdG9z", + "SAFaPmdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvYy1nZW4tZ28v", + "ZGVzY3JpcHRvcjtkZXNjcmlwdG9yogIDR1BCqgIaR29vZ2xlLlByb3RvYnVm", + "LlJlZmxlY3Rpb24=")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { diff --git a/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs b/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs index 03b19c774c3538..94159cb84cad5b 100644 --- a/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs +++ b/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs @@ -46,6 +46,8 @@ static DurationReflection() { /// two Timestamp values is a Duration and it can be added or subtracted /// from a Timestamp. Range is approximately +-10,000 years. /// + /// # Examples + /// /// Example 1: Compute Duration from two Timestamps in pseudo code. /// /// Timestamp start = ...; @@ -85,6 +87,16 @@ static DurationReflection() { /// td = datetime.timedelta(days=3, minutes=10) /// duration = Duration() /// duration.FromTimedelta(td) + /// + /// # JSON Mapping + /// + /// In JSON format, the Duration type is encoded as a string rather than an + /// object, where the string ends in the suffix "s" (indicating seconds) and + /// is preceded by the number of seconds, with nanoseconds expressed as + /// fractional seconds. For example, 3 seconds with 0 nanoseconds should be + /// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should + /// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 + /// microsecond should be expressed in JSON format as "3.000001s". /// public sealed partial class Duration : pb::IMessage { private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Duration()); @@ -124,7 +136,8 @@ public Duration Clone() { private long seconds_; /// /// Signed seconds of the span of time. Must be from -315,576,000,000 - /// to +315,576,000,000 inclusive. + /// to +315,576,000,000 inclusive. Note: these bounds are computed from: + /// 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public long Seconds { diff --git a/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs b/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs index b789f6da7b9622..911f797e01e9e9 100644 --- a/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs +++ b/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs @@ -51,6 +51,8 @@ static TimestampReflection() { /// and from RFC 3339 date strings. /// See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). /// + /// # Examples + /// /// Example 1: Compute Timestamp from POSIX `time()`. /// /// Timestamp timestamp; @@ -89,6 +91,29 @@ static TimestampReflection() { /// /// timestamp = Timestamp() /// timestamp.GetCurrentTime() + /// + /// # JSON Mapping + /// + /// In JSON format, the Timestamp type is encoded as a string in the + /// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the + /// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" + /// where {year} is always expressed using four digits while {month}, {day}, + /// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional + /// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), + /// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone + /// is required, though only UTC (as indicated by "Z") is presently supported. + /// + /// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past + /// 01:30 UTC on January 15, 2017. + /// + /// In JavaScript, one can convert a Date object to this format using the + /// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString] + /// method. In Python, a standard `datetime.datetime` object can be converted + /// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) + /// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one + /// can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( + /// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()) + /// to obtain a formatter capable of generating timestamps in this format. /// public sealed partial class Timestamp : pb::IMessage { private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Timestamp()); diff --git a/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/project.json b/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/project.json index 961e037e1889fd..f437623895ed27 100644 --- a/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/project.json +++ b/third_party/protobuf/3.2.0/csharp/src/Google.Protobuf/project.json @@ -1,5 +1,5 @@ { - "version": "3.2.0", + "version": "3.3.0", "title": "Google Protocol Buffers", "description": "See project site for more info.", "authors": [ "Google Inc." ], diff --git a/third_party/protobuf/3.2.0/docs/third_party.md b/third_party/protobuf/3.2.0/docs/third_party.md index a1f918a74929e5..3def00359f2b5b 100644 --- a/third_party/protobuf/3.2.0/docs/third_party.md +++ b/third_party/protobuf/3.2.0/docs/third_party.md @@ -39,8 +39,8 @@ These are projects we know about implementing Protocol Buffers for other program * Erlang: https://github.com/basho/erlang_protobuffs * Erlang: https://github.com/tomas-abrahamsson/gpb * Go: https://github.com/golang/protobuf (Google-official implementation) -* Go: http://code.google.com/p/goprotobuf/ * Go: https://github.com/akunspy/gopbuf +* Go: https://github.com/gogo/protobuf * Haskell: http://hackage.haskell.org/package/hprotoc * Haxe: https://github.com/Atry/protoc-gen-haxe * Java: https://github.com/google/protobuf (Google-official implementation) @@ -154,3 +154,4 @@ There are miscellaneous other things you may find useful as a Protocol Buffers d * [Notepad++ Syntax Highlighting for .proto files](https://github.com/chai2010/notepadplus-protobuf) * [Linter for .proto files](https://github.com/ckaznocha/protoc-gen-lint) * [Protocol Buffers Dynamic Schema - create protobuf schemas programmatically (Java)] (https://github.com/os72/protobuf-dynamic) +* [Make protoc plugins in NodeJS](https://github.com/konsumer/node-protoc-plugin) diff --git a/third_party/protobuf/3.2.0/generate_descriptor_proto.sh b/third_party/protobuf/3.2.0/generate_descriptor_proto.sh index 809214cea50d82..229bec43555d8d 100755 --- a/third_party/protobuf/3.2.0/generate_descriptor_proto.sh +++ b/third_party/protobuf/3.2.0/generate_descriptor_proto.sh @@ -41,6 +41,11 @@ declare -a RUNTIME_PROTO_FILES=(\ google/protobuf/type.proto \ google/protobuf/wrappers.proto) +declare -a COMPILER_PROTO_FILES=(\ + google/protobuf/compiler/plugin.proto \ + google/protobuf/compiler/profile.proto \ +) + CORE_PROTO_IS_CORRECT=0 PROCESS_ROUND=1 TMP=$(mktemp -d) @@ -57,9 +62,9 @@ do fi ./protoc --cpp_out=dllexport_decl=LIBPROTOBUF_EXPORT:$TMP ${RUNTIME_PROTO_FILES[@]} && \ - ./protoc --cpp_out=dllexport_decl=LIBPROTOC_EXPORT:$TMP google/protobuf/compiler/plugin.proto + ./protoc --cpp_out=dllexport_decl=LIBPROTOC_EXPORT:$TMP ${COMPILER_PROTO_FILES[@]} - for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]}; do + for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]} ${COMPILER_PROTO_FILES[@]}; do BASE_NAME=${PROTO_FILE%.*} diff ${BASE_NAME}.pb.h $TMP/${BASE_NAME}.pb.h > /dev/null if test $? -ne 0; then @@ -71,24 +76,14 @@ do fi done - diff google/protobuf/compiler/plugin.pb.h $TMP/google/protobuf/compiler/plugin.pb.h > /dev/null - if test $? -ne 0; then - CORE_PROTO_IS_CORRECT=0 - fi - diff google/protobuf/compiler/plugin.pb.cc $TMP/google/protobuf/compiler/plugin.pb.cc > /dev/null - if test $? -ne 0; then - CORE_PROTO_IS_CORRECT=0 - fi - # Only override the output if the files are different to avoid re-compilation # of the protoc. if [ $CORE_PROTO_IS_CORRECT -ne 1 ]; then - for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]}; do + for PROTO_FILE in ${RUNTIME_PROTO_FILES[@]} ${COMPILER_PROTO_FILES[@]}; do BASE_NAME=${PROTO_FILE%.*} mv $TMP/${BASE_NAME}.pb.h ${BASE_NAME}.pb.h mv $TMP/${BASE_NAME}.pb.cc ${BASE_NAME}.pb.cc done - mv $TMP/google/protobuf/compiler/plugin.pb.* google/protobuf/compiler/ fi PROCESS_ROUND=$((PROCESS_ROUND + 1)) diff --git a/third_party/protobuf/3.2.0/java/core/pom.xml b/third_party/protobuf/3.2.0/java/core/pom.xml index be0da5eade3549..9c4e1b930b94eb 100644 --- a/third_party/protobuf/3.2.0/java/core/pom.xml +++ b/third_party/protobuf/3.2.0/java/core/pom.xml @@ -6,7 +6,7 @@ com.google.protobuf protobuf-parent - 3.2.0 + 3.3.0 protobuf-java @@ -34,6 +34,11 @@ easymockclassextension test + + com.google.truth + truth + test + diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/AbstractMessage.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/AbstractMessage.java index 37180da8576bae..b5043eb5438956 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/AbstractMessage.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/AbstractMessage.java @@ -34,7 +34,6 @@ import com.google.protobuf.Descriptors.FieldDescriptor; import com.google.protobuf.Descriptors.OneofDescriptor; import com.google.protobuf.Internal.EnumLite; - import java.io.IOException; import java.io.InputStream; import java.util.Arrays; @@ -328,7 +327,8 @@ public static abstract class Builder> extends AbstractMessageLite.Builder implements Message.Builder { // The compiler produces an error if this is not declared explicitly. - // Method isn't abstract to bypass Java 1.6 compiler issue http://bugs.java.com/view_bug.do?bug_id=6908259 + // Method isn't abstract to bypass Java 1.6 compiler issue: + // http://bugs.java.com/view_bug.do?bug_id=6908259 @Override public BuilderType clone() { throw new UnsupportedOperationException("clone() should be implemented in subclasses."); diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java index 4f691dfdfbd477..99787fcc7ebe72 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java @@ -30,6 +30,8 @@ package com.google.protobuf; +import static com.google.protobuf.Internal.checkNotNull; + import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; @@ -351,22 +353,23 @@ private String getReadingExceptionMessage(String target) { */ protected static void addAll(final Iterable values, final Collection list) { - if (values == null) { - throw new NullPointerException(); - } + checkNotNull(values); if (values instanceof LazyStringList) { // For StringOrByteStringLists, check the underlying elements to avoid // forcing conversions of ByteStrings to Strings. + // TODO(dweis): Could we just prohibit nulls in all protobuf lists and get rid of this? Is + // if even possible to hit this condition as all protobuf methods check for null first, + // right? checkForNullValues(((LazyStringList) values).getUnderlyingElements()); list.addAll((Collection) values); } else if (values instanceof Collection) { - checkForNullValues(values); + if (!(values instanceof PrimitiveNonBoxingCollection)) { + checkForNullValues(values); + } list.addAll((Collection) values); } else { for (final T value : values) { - if (value == null) { - throw new NullPointerException(); - } + checkNotNull(value); list.add(value); } } @@ -374,9 +377,7 @@ protected static void addAll(final Iterable values, private static void checkForNullValues(final Iterable values) { for (final Object value : values) { - if (value == null) { - throw new NullPointerException(); - } + checkNotNull(value); } } } diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/AbstractParser.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/AbstractParser.java index 7ff73ba4d1b462..ba570e3df16841 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/AbstractParser.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/AbstractParser.java @@ -31,9 +31,9 @@ package com.google.protobuf; import com.google.protobuf.AbstractMessageLite.Builder.LimitedInputStream; - import java.io.IOException; import java.io.InputStream; +import java.nio.ByteBuffer; /** * A partial implementation of the {@link Parser} interface which implements @@ -130,6 +130,30 @@ public MessageType parseFrom(ByteString data) throws InvalidProtocolBufferExcept return parseFrom(data, EMPTY_REGISTRY); } + @Override + public MessageType parseFrom(ByteBuffer data, ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException { + MessageType message; + try { + CodedInputStream input = CodedInputStream.newInstance(data); + message = parsePartialFrom(input, extensionRegistry); + try { + input.checkLastTagWas(0); + } catch (InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(message); + } + } catch (InvalidProtocolBufferException e) { + throw e; + } + + return checkMessageInitialized(message); + } + + @Override + public MessageType parseFrom(ByteBuffer data) throws InvalidProtocolBufferException { + return parseFrom(data, EMPTY_REGISTRY); + } + @Override public MessageType parsePartialFrom( byte[] data, int off, int len, ExtensionRegistryLite extensionRegistry) diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/BooleanArrayList.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/BooleanArrayList.java index 0d9f87ba01f401..fd4c142b33fed8 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/BooleanArrayList.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/BooleanArrayList.java @@ -30,8 +30,9 @@ package com.google.protobuf; -import com.google.protobuf.Internal.BooleanList; +import static com.google.protobuf.Internal.checkNotNull; +import com.google.protobuf.Internal.BooleanList; import java.util.Arrays; import java.util.Collection; import java.util.RandomAccess; @@ -41,9 +42,8 @@ * * @author dweis@google.com (Daniel Weis) */ -final class BooleanArrayList - extends AbstractProtobufList - implements BooleanList, RandomAccess { +final class BooleanArrayList extends AbstractProtobufList + implements BooleanList, RandomAccess, PrimitiveNonBoxingCollection { private static final BooleanArrayList EMPTY_LIST = new BooleanArrayList(); static { @@ -198,9 +198,7 @@ private void addBoolean(int index, boolean element) { public boolean addAll(Collection collection) { ensureIsMutable(); - if (collection == null) { - throw new NullPointerException(); - } + checkNotNull(collection); // We specialize when adding another BooleanArrayList to avoid boxing elements. if (!(collection instanceof BooleanArrayList)) { diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/CodedInputStream.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/CodedInputStream.java index 239798e4403f58..3dfbcb0ae4f130 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/CodedInputStream.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/CodedInputStream.java @@ -355,8 +355,8 @@ public final int setRecursionLimit(final int limit) { *

Set the maximum message size. In order to prevent malicious messages from exhausting memory * or causing integer overflows, {@code CodedInputStream} limits how large a message may be. The * default limit is {@code Integer.MAX_INT}. You should set this limit as small as you can without - * harming your app's functionality. Note that size limits only apply when reading from an - * {@code InputStream}, not when constructed around a raw byte array. + * harming your app's functionality. Note that size limits only apply when reading from an {@code + * InputStream}, not when constructed around a raw byte array. * *

If you want to read several messages from a single CodedInputStream, you could call {@link * #resetSizeCounter()} after each one to avoid hitting the size limit. diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/CodedOutputStream.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/CodedOutputStream.java index 3e32c2c536a872..da0e9b12c31231 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/CodedOutputStream.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/CodedOutputStream.java @@ -184,7 +184,7 @@ static CodedOutputStream newSafeInstance(ByteBuffer buffer) { * maps are sorted on the lexicographical order of the UTF8 encoded keys. * */ - void useDeterministicSerialization() { + public void useDeterministicSerialization() { serializationDeterministic = true; } @@ -1854,7 +1854,7 @@ private static final class UnsafeDirectNioEncoder extends CodedOutputStream { } static boolean isSupported() { - return UnsafeUtil.hasUnsafeByteBufferOperations(); + return UnsafeUtil.hasUnsafeByteBufferOperations() && UnsafeUtil.hasUnsafeCopyMemory(); } @Override diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Descriptors.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Descriptors.java index 38346f1559fb21..75b16fe30e9640 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Descriptors.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Descriptors.java @@ -30,9 +30,10 @@ package com.google.protobuf; +import static com.google.protobuf.Internal.checkNotNull; + import com.google.protobuf.DescriptorProtos.*; import com.google.protobuf.Descriptors.FileDescriptor.Syntax; - import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; @@ -682,9 +683,7 @@ public boolean isReservedNumber(final int number) { /** Determines if the given field name is reserved. */ public boolean isReservedName(final String name) { - if (name == null) { - throw new NullPointerException(); - } + checkNotNull(name); for (final String reservedName : proto.getReservedNameList()) { if (reservedName.equals(name)) { return true; diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/DoubleArrayList.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/DoubleArrayList.java index 6177f3cab90d19..867b85ce8617a3 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/DoubleArrayList.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/DoubleArrayList.java @@ -30,8 +30,9 @@ package com.google.protobuf; -import com.google.protobuf.Internal.DoubleList; +import static com.google.protobuf.Internal.checkNotNull; +import com.google.protobuf.Internal.DoubleList; import java.util.Arrays; import java.util.Collection; import java.util.RandomAccess; @@ -41,9 +42,8 @@ * * @author dweis@google.com (Daniel Weis) */ -final class DoubleArrayList - extends AbstractProtobufList - implements DoubleList, RandomAccess { +final class DoubleArrayList extends AbstractProtobufList + implements DoubleList, RandomAccess, PrimitiveNonBoxingCollection { private static final DoubleArrayList EMPTY_LIST = new DoubleArrayList(); static { @@ -199,9 +199,7 @@ private void addDouble(int index, double element) { public boolean addAll(Collection collection) { ensureIsMutable(); - if (collection == null) { - throw new NullPointerException(); - } + checkNotNull(collection); // We specialize when adding another DoubleArrayList to avoid boxing elements. if (!(collection instanceof DoubleArrayList)) { diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/DynamicMessage.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/DynamicMessage.java index e6358c3bae341d..2631db74756314 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/DynamicMessage.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/DynamicMessage.java @@ -30,11 +30,12 @@ package com.google.protobuf; +import static com.google.protobuf.Internal.checkNotNull; + import com.google.protobuf.Descriptors.Descriptor; import com.google.protobuf.Descriptors.EnumValueDescriptor; import com.google.protobuf.Descriptors.FieldDescriptor; import com.google.protobuf.Descriptors.OneofDescriptor; - import java.io.IOException; import java.io.InputStream; import java.util.Collections; @@ -631,9 +632,7 @@ private void verifyOneofContainingType(OneofDescriptor oneof) { /** Verifies that the value is EnumValueDescriptor and matches Enum Type. */ private void ensureSingularEnumValueDescriptor( FieldDescriptor field, Object value) { - if (value == null) { - throw new NullPointerException(); - } + checkNotNull(value); if (!(value instanceof EnumValueDescriptor)) { throw new IllegalArgumentException( "DynamicMessage should use EnumValueDescriptor to set Enum Value."); diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/FieldSet.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/FieldSet.java index a828f30edb3f7b..8a9239edefa8f1 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/FieldSet.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/FieldSet.java @@ -30,8 +30,9 @@ package com.google.protobuf; -import com.google.protobuf.LazyField.LazyIterator; +import static com.google.protobuf.Internal.checkNotNull; +import com.google.protobuf.LazyField.LazyIterator; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -385,9 +386,7 @@ public void addRepeatedField(final FieldDescriptorType descriptor, */ private static void verifyType(final WireFormat.FieldType type, final Object value) { - if (value == null) { - throw new NullPointerException(); - } + checkNotNull(value); boolean isValid = false; switch (type.getJavaType()) { diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/FloatArrayList.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/FloatArrayList.java index 90d6154b154f6a..76645583ebb1fb 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/FloatArrayList.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/FloatArrayList.java @@ -30,8 +30,9 @@ package com.google.protobuf; -import com.google.protobuf.Internal.FloatList; +import static com.google.protobuf.Internal.checkNotNull; +import com.google.protobuf.Internal.FloatList; import java.util.Arrays; import java.util.Collection; import java.util.RandomAccess; @@ -41,9 +42,8 @@ * * @author dweis@google.com (Daniel Weis) */ -final class FloatArrayList - extends AbstractProtobufList - implements FloatList, RandomAccess { +final class FloatArrayList extends AbstractProtobufList + implements FloatList, RandomAccess, PrimitiveNonBoxingCollection { private static final FloatArrayList EMPTY_LIST = new FloatArrayList(); static { @@ -198,9 +198,7 @@ private void addFloat(int index, float element) { public boolean addAll(Collection collection) { ensureIsMutable(); - if (collection == null) { - throw new NullPointerException(); - } + checkNotNull(collection); // We specialize when adding another FloatArrayList to avoid boxing elements. if (!(collection instanceof FloatArrayList)) { diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java index 2d7fd334135200..cf3486e1d9b3e3 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java @@ -34,6 +34,7 @@ import com.google.protobuf.GeneratedMessageLite.EqualsVisitor.NotEqualsException; import com.google.protobuf.Internal.BooleanList; import com.google.protobuf.Internal.DoubleList; +import com.google.protobuf.Internal.EnumLiteMap; import com.google.protobuf.Internal.FloatList; import com.google.protobuf.Internal.IntList; import com.google.protobuf.Internal.LongList; @@ -45,6 +46,7 @@ import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; @@ -136,6 +138,7 @@ public boolean equals(Object other) { return false; } + try { visit(EqualsVisitor.INSTANCE, (MessageType) other); } catch (NotEqualsException e) { @@ -1154,6 +1157,7 @@ static Object invokeOrDie(Method method, Object object, Object... params) { } } + /** * Lite equivalent to {@link GeneratedMessage.GeneratedExtension}. * @@ -1527,6 +1531,20 @@ public T parsePartialFrom(CodedInputStream input, ExtensionRegistryLite extensio return message; } + // Validates last tag. + protected static > T parseFrom( + T defaultInstance, ByteBuffer data, ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException { + return checkMessageInitialized( + parseFrom(defaultInstance, CodedInputStream.newInstance(data), extensionRegistry)); + } + + // Validates last tag. + protected static > T parseFrom( + T defaultInstance, ByteBuffer data) throws InvalidProtocolBufferException { + return parseFrom(defaultInstance, data, ExtensionRegistryLite.getEmptyRegistry()); + } + // Validates last tag. protected static > T parseFrom( T defaultInstance, ByteString data) @@ -1979,13 +1997,13 @@ public MapFieldLite visitMap(MapFieldLite mine, MapFieldLite< /** * Implements hashCode by accumulating state. */ - private static class HashCodeVisitor implements Visitor { + static class HashCodeVisitor implements Visitor { // The caller must ensure that the visitor is invoked parameterized with this and this such that // other is this. This is required due to how oneof cases are handled. See the class comment // on Visitor for more information. - private int hashCode = 0; + int hashCode = 0; @Override public boolean visitBoolean( diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java index fd051e751d322d..b949cd17722ddf 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java @@ -41,7 +41,7 @@ // class without breaking binary compatibility with old generated code that still subclasses // the old GeneratedMessageV3 class. To allow these different GeneratedMessageV3V? classes to // interoperate (e.g., a GeneratedMessageV3V3 object has a message extension field whose class -// type is GeneratedMessageV3V4), these classes still share a common parent class AbstarctMessage +// type is GeneratedMessageV3V4), these classes still share a common parent class AbstractMessage // and are using the same GeneratedMessage.GeneratedExtension class for extension definitions. // Since this class becomes GeneratedMessageV3V? in opensource, we have to add an import here // to be able to use GeneratedMessage.GeneratedExtension. The GeneratedExtension definition in diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/IntArrayList.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/IntArrayList.java index 2f526e3fd8e1be..aff5c21b2603f2 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/IntArrayList.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/IntArrayList.java @@ -30,8 +30,9 @@ package com.google.protobuf; -import com.google.protobuf.Internal.IntList; +import static com.google.protobuf.Internal.checkNotNull; +import com.google.protobuf.Internal.IntList; import java.util.Arrays; import java.util.Collection; import java.util.RandomAccess; @@ -41,9 +42,8 @@ * * @author dweis@google.com (Daniel Weis) */ -final class IntArrayList - extends AbstractProtobufList - implements IntList, RandomAccess { +final class IntArrayList extends AbstractProtobufList + implements IntList, RandomAccess, PrimitiveNonBoxingCollection { private static final IntArrayList EMPTY_LIST = new IntArrayList(); static { @@ -198,9 +198,7 @@ private void addInt(int index, int element) { public boolean addAll(Collection collection) { ensureIsMutable(); - if (collection == null) { - throw new NullPointerException(); - } + checkNotNull(collection); // We specialize when adding another IntArrayList to avoid boxing elements. if (!(collection instanceof IntArrayList)) { diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Internal.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Internal.java index c234559ce3834f..36bdece306f57c 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Internal.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Internal.java @@ -59,6 +59,16 @@ private Internal() {} static final Charset UTF_8 = Charset.forName("UTF-8"); static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); + /** + * Throws an appropriate {@link NullPointerException} if the given objects is {@code null}. + */ + static T checkNotNull(T obj) { + if (obj == null) { + throw new NullPointerException(); + } + return obj; + } + /** * Throws an appropriate {@link NullPointerException} if the given objects is {@code null}. */ @@ -420,6 +430,11 @@ public static T getDefaultInstance(Class clazz) { CodedInputStream.newInstance(EMPTY_BYTE_ARRAY); + /** Helper method to merge two MessageLite instances. */ + static Object mergeMessage(Object destination, Object source) { + return ((MessageLite) destination).toBuilder().mergeFrom((MessageLite) source).buildPartial(); + } + /** * Provides an immutable view of {@code List} around a {@code List}. * diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/LazyFieldLite.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/LazyFieldLite.java index 4b0ba0fd6b7c56..49ecfc0be69b27 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/LazyFieldLite.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/LazyFieldLite.java @@ -394,6 +394,7 @@ public ByteString toByteString() { } } + /** * Might lazily parse the bytes that were previously passed in. Is thread-safe. */ diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/LongArrayList.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/LongArrayList.java index 5a772e3aa8407c..fc146e232b6e0e 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/LongArrayList.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/LongArrayList.java @@ -30,8 +30,9 @@ package com.google.protobuf; -import com.google.protobuf.Internal.LongList; +import static com.google.protobuf.Internal.checkNotNull; +import com.google.protobuf.Internal.LongList; import java.util.Arrays; import java.util.Collection; import java.util.RandomAccess; @@ -41,9 +42,8 @@ * * @author dweis@google.com (Daniel Weis) */ -final class LongArrayList - extends AbstractProtobufList - implements LongList, RandomAccess { +final class LongArrayList extends AbstractProtobufList + implements LongList, RandomAccess, PrimitiveNonBoxingCollection { private static final LongArrayList EMPTY_LIST = new LongArrayList(); static { @@ -198,9 +198,7 @@ private void addLong(int index, long element) { public boolean addAll(Collection collection) { ensureIsMutable(); - if (collection == null) { - throw new NullPointerException(); - } + checkNotNull(collection); // We specialize when adding another LongArrayList to avoid boxing elements. if (!(collection instanceof LongArrayList)) { diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapEntry.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapEntry.java index 7e8e9aad543eab..0849b821cfd863 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapEntry.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapEntry.java @@ -33,7 +33,6 @@ import com.google.protobuf.Descriptors.Descriptor; import com.google.protobuf.Descriptors.EnumValueDescriptor; import com.google.protobuf.Descriptors.FieldDescriptor; - import java.io.IOException; import java.util.Collections; import java.util.Map; @@ -171,7 +170,7 @@ public Builder newBuilderForType() { @Override public Builder toBuilder() { - return new Builder(metadata, key, value); + return new Builder(metadata, key, value, true, true); } @Override @@ -247,15 +246,19 @@ public static class Builder private final Metadata metadata; private K key; private V value; + private boolean hasKey; + private boolean hasValue; private Builder(Metadata metadata) { - this(metadata, metadata.defaultKey, metadata.defaultValue); + this(metadata, metadata.defaultKey, metadata.defaultValue, false, false); } - private Builder(Metadata metadata, K key, V value) { + private Builder(Metadata metadata, K key, V value, boolean hasKey, boolean hasValue) { this.metadata = metadata; this.key = key; this.value = value; + this.hasKey = hasKey; + this.hasValue = hasValue; } public K getKey() { @@ -268,21 +271,25 @@ public V getValue() { public Builder setKey(K key) { this.key = key; + this.hasKey = true; return this; } public Builder clearKey() { this.key = metadata.defaultKey; + this.hasKey = false; return this; } public Builder setValue(V value) { this.value = value; + this.hasValue = true; return this; } public Builder clearValue() { this.value = metadata.defaultValue; + this.hasValue = false; return this; } @@ -404,7 +411,7 @@ public Map getAllFields() { @Override public boolean hasField(FieldDescriptor field) { checkFieldDescriptor(field); - return true; + return field.getNumber() == 1 ? hasKey : hasValue; } @Override @@ -438,7 +445,7 @@ public UnknownFieldSet getUnknownFields() { @Override @SuppressWarnings("unchecked") public Builder clone() { - return new Builder(metadata, key, value); + return new Builder(metadata, key, value, hasKey, hasValue); } } @@ -448,4 +455,9 @@ private static boolean isInitialized(Metadata metadata, V value) { } return true; } + + /** Returns the metadata only for experimental runtime. */ + final Metadata getMetadata() { + return metadata; + } } diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapEntryLite.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapEntryLite.java index 22aef8f93decec..dcb5dfad3df91b 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapEntryLite.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapEntryLite.java @@ -223,4 +223,9 @@ public void parseInto( input.popLimit(oldLimit); map.put(key, value); } + + /** For experimental runtime internal use only. */ + Metadata getMetadata() { + return metadata; + } } diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapField.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapField.java index 805defe29fc313..ad8ceb02a9161a 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapField.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapField.java @@ -30,6 +30,8 @@ package com.google.protobuf; +import static com.google.protobuf.Internal.checkNotNull; + import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -329,6 +331,8 @@ public V get(Object key) { @Override public V put(K key, V value) { mutabilityOracle.ensureMutable(); + checkNotNull(key); + checkNotNull(value); return delegate.put(key, value); } @@ -341,6 +345,10 @@ public V remove(Object key) { @Override public void putAll(Map m) { mutabilityOracle.ensureMutable(); + for (K key : m.keySet()) { + checkNotNull(key); + checkNotNull(m.get(key)); + } delegate.putAll(m); } diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapFieldLite.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapFieldLite.java index 4264027911d53a..a8b3dd88497788 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapFieldLite.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/MapFieldLite.java @@ -30,8 +30,9 @@ package com.google.protobuf; -import com.google.protobuf.Internal.EnumLite; +import static com.google.protobuf.Internal.checkNotNull; +import com.google.protobuf.Internal.EnumLite; import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; @@ -88,6 +89,9 @@ public void mergeFrom(MapFieldLite other) { @Override public V put(K key, V value) { ensureMutable(); + checkNotNull(key); + + checkNotNull(value); return super.put(key, value); } @@ -97,6 +101,7 @@ public V put(Map.Entry entry) { @Override public void putAll(Map m) { ensureMutable(); + checkForNullKeysAndValues(m); super.putAll(m); } @@ -105,6 +110,13 @@ public V put(Map.Entry entry) { return super.remove(key); } + private static void checkForNullKeysAndValues(Map m) { + for (Object key : m.keySet()) { + checkNotNull(key); + checkNotNull(m.get(key)); + } + } + private static boolean equals(Object a, Object b) { if (a instanceof byte[] && b instanceof byte[]) { return Arrays.equals((byte[]) a, (byte[]) b); diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Parser.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Parser.java index cfbcb442573778..e07c68959a9af8 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Parser.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Parser.java @@ -31,6 +31,7 @@ package com.google.protobuf; import java.io.InputStream; +import java.nio.ByteBuffer; /** * Abstract interface for parsing Protocol Messages. @@ -92,6 +93,18 @@ public MessageType parsePartialFrom(CodedInputStream input, // --------------------------------------------------------------- // Convenience methods. + /** + * Parses {@code data} as a message of {@code MessageType}. This is just a small wrapper around + * {@link #parseFrom(CodedInputStream)}. + */ + public MessageType parseFrom(ByteBuffer data) throws InvalidProtocolBufferException; + + /** + * Parses {@code data} as a message of {@code MessageType}. This is just a small wrapper around + * {@link #parseFrom(CodedInputStream, ExtensionRegistryLite)}. + */ + public MessageType parseFrom(ByteBuffer data, ExtensionRegistryLite extensionRegistry) + throws InvalidProtocolBufferException; /** * Parses {@code data} as a message of {@code MessageType}. * This is just a small wrapper around {@link #parseFrom(CodedInputStream)}. diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/PrimitiveNonBoxingCollection.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/PrimitiveNonBoxingCollection.java new file mode 100644 index 00000000000000..79b5769d198777 --- /dev/null +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/PrimitiveNonBoxingCollection.java @@ -0,0 +1,34 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf; + +/** A marker interface indicating that the collection supports primitives and is non-boxing. */ +interface PrimitiveNonBoxingCollection {} diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilderV3.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilderV3.java index 77b61b5f3c6ced..30c991d40ba58e 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilderV3.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilderV3.java @@ -30,6 +30,8 @@ package com.google.protobuf; +import static com.google.protobuf.Internal.checkNotNull; + import java.util.AbstractList; import java.util.ArrayList; import java.util.Collection; @@ -290,9 +292,7 @@ public IType getMessageOrBuilder(int index) { */ public RepeatedFieldBuilderV3 setMessage( int index, MType message) { - if (message == null) { - throw new NullPointerException(); - } + checkNotNull(message); ensureMutableMessageList(); messages.set(index, message); if (builders != null) { @@ -315,9 +315,7 @@ public RepeatedFieldBuilderV3 setMessage( */ public RepeatedFieldBuilderV3 addMessage( MType message) { - if (message == null) { - throw new NullPointerException(); - } + checkNotNull(message); ensureMutableMessageList(); messages.add(message); if (builders != null) { @@ -339,9 +337,7 @@ public RepeatedFieldBuilderV3 addMessage( */ public RepeatedFieldBuilderV3 addMessage( int index, MType message) { - if (message == null) { - throw new NullPointerException(); - } + checkNotNull(message); ensureMutableMessageList(); messages.add(index, message); if (builders != null) { @@ -363,9 +359,7 @@ public RepeatedFieldBuilderV3 addMessage( public RepeatedFieldBuilderV3 addAllMessages( Iterable values) { for (final MType value : values) { - if (value == null) { - throw new NullPointerException(); - } + checkNotNull(value); } // If we can inspect the size, we can more efficiently add messages. diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/SingleFieldBuilderV3.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/SingleFieldBuilderV3.java index fb1f76a7311e89..8ab0f26d9058cc 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/SingleFieldBuilderV3.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/SingleFieldBuilderV3.java @@ -30,6 +30,8 @@ package com.google.protobuf; +import static com.google.protobuf.Internal.checkNotNull; + /** * {@code SingleFieldBuilderV3} implements a structure that a protocol * message uses to hold a single field of another protocol message. It supports @@ -84,10 +86,7 @@ public SingleFieldBuilderV3( MType message, AbstractMessage.BuilderParent parent, boolean isClean) { - if (message == null) { - throw new NullPointerException(); - } - this.message = message; + this.message = checkNotNull(message); this.parent = parent; this.isClean = isClean; } @@ -169,10 +168,7 @@ public IType getMessageOrBuilder() { */ public SingleFieldBuilderV3 setMessage( MType message) { - if (message == null) { - throw new NullPointerException(); - } - this.message = message; + this.message = checkNotNull(message); if (builder != null) { builder.dispose(); builder = null; diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/TextFormat.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/TextFormat.java index 49708242156ca5..53dead801a9260 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/TextFormat.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/TextFormat.java @@ -1442,7 +1442,7 @@ private void mergeField(final Tokenizer tokenizer, /** * Parse a single field from {@code tokenizer} and merge it into - * {@code builder}. + * {@code target}. */ private void mergeField(final Tokenizer tokenizer, final ExtensionRegistry extensionRegistry, @@ -1712,6 +1712,8 @@ private void consumeFieldValue( } if (field.isRepeated()) { + // TODO(b/29122459): If field.isMapField() and FORBID_SINGULAR_OVERWRITES mode, + // check for duplicate map keys here. target.addRepeatedField(field, value); } else if ((singularOverwritePolicy == SingularOverwritePolicy.FORBID_SINGULAR_OVERWRITES) diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/UnknownFieldSet.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/UnknownFieldSet.java index 2bef27e923a6d2..d938113554c72f 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/UnknownFieldSet.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/UnknownFieldSet.java @@ -91,7 +91,7 @@ public UnknownFieldSet getDefaultInstanceForType() { * Construct an {@code UnknownFieldSet} around the given map. The map is * expected to be immutable. */ - private UnknownFieldSet(final Map fields, + UnknownFieldSet(final Map fields, final Map fieldsDescending) { this.fields = fields; } @@ -715,7 +715,7 @@ public boolean isInitialized() { * @see UnknownFieldSet */ public static final class Field { - private Field() {} + Field() {} /** Construct a new {@link Builder}. */ public static Builder newBuilder() { diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/UnsafeUtil.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/UnsafeUtil.java index 5f7bafd602bea2..ca80d9464a9d96 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/UnsafeUtil.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/UnsafeUtil.java @@ -33,19 +33,23 @@ import java.lang.reflect.Field; import java.nio.Buffer; import java.nio.ByteBuffer; +import java.nio.ByteOrder; import java.security.AccessController; import java.security.PrivilegedExceptionAction; -import sun.misc.Unsafe; +import java.util.logging.Level; +import java.util.logging.Logger; /** Utility class for working with unsafe operations. */ -// TODO(nathanmittler): Add support for Android Memory/MemoryBlock final class UnsafeUtil { + private static final Logger logger = Logger.getLogger(UnsafeUtil.class.getName()); private static final sun.misc.Unsafe UNSAFE = getUnsafe(); + private static final MemoryAccessor MEMORY_ACCESSOR = getMemoryAccessor(); private static final boolean HAS_UNSAFE_BYTEBUFFER_OPERATIONS = supportsUnsafeByteBufferOperations(); private static final boolean HAS_UNSAFE_ARRAY_OPERATIONS = supportsUnsafeArrayOperations(); + private static final boolean HAS_UNSAFE_COPY_MEMORY = supportsUnsafeCopyMemory(); private static final long ARRAY_BASE_OFFSET = byteArrayBaseOffset(); - private static final long BUFFER_ADDRESS_OFFSET = fieldOffset(field(Buffer.class, "address")); + private static final long BUFFER_ADDRESS_OFFSET = fieldOffset(bufferAddressField()); private UnsafeUtil() {} @@ -53,20 +57,16 @@ static boolean hasUnsafeArrayOperations() { return HAS_UNSAFE_ARRAY_OPERATIONS; } - static boolean hasUnsafeByteBufferOperations() { - return HAS_UNSAFE_BYTEBUFFER_OPERATIONS; + static boolean hasUnsafeCopyMemory() { + return HAS_UNSAFE_COPY_MEMORY; } - static Object allocateInstance(Class clazz) { - try { - return UNSAFE.allocateInstance(clazz); - } catch (InstantiationException e) { - throw new RuntimeException(e); - } + static boolean hasUnsafeByteBufferOperations() { + return HAS_UNSAFE_BYTEBUFFER_OPERATIONS; } static long objectFieldOffset(Field field) { - return UNSAFE.objectFieldOffset(field); + return MEMORY_ACCESSOR.objectFieldOffset(field); } static long getArrayBaseOffset() { @@ -74,103 +74,103 @@ static long getArrayBaseOffset() { } static byte getByte(Object target, long offset) { - return UNSAFE.getByte(target, offset); + return MEMORY_ACCESSOR.getByte(target, offset); } static void putByte(Object target, long offset, byte value) { - UNSAFE.putByte(target, offset, value); + MEMORY_ACCESSOR.putByte(target, offset, value); } static int getInt(Object target, long offset) { - return UNSAFE.getInt(target, offset); + return MEMORY_ACCESSOR.getInt(target, offset); } static void putInt(Object target, long offset, int value) { - UNSAFE.putInt(target, offset, value); + MEMORY_ACCESSOR.putInt(target, offset, value); } static long getLong(Object target, long offset) { - return UNSAFE.getLong(target, offset); + return MEMORY_ACCESSOR.getLong(target, offset); } static void putLong(Object target, long offset, long value) { - UNSAFE.putLong(target, offset, value); + MEMORY_ACCESSOR.putLong(target, offset, value); } static boolean getBoolean(Object target, long offset) { - return UNSAFE.getBoolean(target, offset); + return MEMORY_ACCESSOR.getBoolean(target, offset); } static void putBoolean(Object target, long offset, boolean value) { - UNSAFE.putBoolean(target, offset, value); + MEMORY_ACCESSOR.putBoolean(target, offset, value); } static float getFloat(Object target, long offset) { - return UNSAFE.getFloat(target, offset); + return MEMORY_ACCESSOR.getFloat(target, offset); } static void putFloat(Object target, long offset, float value) { - UNSAFE.putFloat(target, offset, value); + MEMORY_ACCESSOR.putFloat(target, offset, value); } static double getDouble(Object target, long offset) { - return UNSAFE.getDouble(target, offset); + return MEMORY_ACCESSOR.getDouble(target, offset); } static void putDouble(Object target, long offset, double value) { - UNSAFE.putDouble(target, offset, value); + MEMORY_ACCESSOR.putDouble(target, offset, value); } static Object getObject(Object target, long offset) { - return UNSAFE.getObject(target, offset); + return MEMORY_ACCESSOR.getObject(target, offset); } static void putObject(Object target, long offset, Object value) { - UNSAFE.putObject(target, offset, value); + MEMORY_ACCESSOR.putObject(target, offset, value); } static void copyMemory( Object src, long srcOffset, Object target, long targetOffset, long length) { - UNSAFE.copyMemory(src, srcOffset, target, targetOffset, length); + MEMORY_ACCESSOR.copyMemory(src, srcOffset, target, targetOffset, length); } static byte getByte(long address) { - return UNSAFE.getByte(address); + return MEMORY_ACCESSOR.getByte(address); } static void putByte(long address, byte value) { - UNSAFE.putByte(address, value); + MEMORY_ACCESSOR.putByte(address, value); } static int getInt(long address) { - return UNSAFE.getInt(address); + return MEMORY_ACCESSOR.getInt(address); } static void putInt(long address, int value) { - UNSAFE.putInt(address, value); + MEMORY_ACCESSOR.putInt(address, value); } static long getLong(long address) { - return UNSAFE.getLong(address); + return MEMORY_ACCESSOR.getLong(address); } static void putLong(long address, long value) { - UNSAFE.putLong(address, value); + MEMORY_ACCESSOR.putLong(address, value); } static void copyMemory(long srcAddress, long targetAddress, long length) { - UNSAFE.copyMemory(srcAddress, targetAddress, length); - } - - static void setMemory(long address, long numBytes, byte value) { - UNSAFE.setMemory(address, numBytes, value); + MEMORY_ACCESSOR.copyMemory(srcAddress, targetAddress, length); } /** * Gets the offset of the {@code address} field of the given direct {@link ByteBuffer}. */ static long addressOffset(ByteBuffer buffer) { - return UNSAFE.getLong(buffer, BUFFER_ADDRESS_OFFSET); + return MEMORY_ACCESSOR.getLong(buffer, BUFFER_ADDRESS_OFFSET); + } + + static Object getStaticObject(Field field) { + return MEMORY_ACCESSOR.getStaticObject(field); } /** @@ -181,7 +181,7 @@ private static sun.misc.Unsafe getUnsafe() { try { unsafe = AccessController.doPrivileged( - new PrivilegedExceptionAction() { + new PrivilegedExceptionAction() { @Override public sun.misc.Unsafe run() throws Exception { Class k = sun.misc.Unsafe.class; @@ -204,69 +204,114 @@ public sun.misc.Unsafe run() throws Exception { return unsafe; } + /** Get a {@link MemoryAccessor} appropriate for the platform, or null if not supported. */ + private static MemoryAccessor getMemoryAccessor() { + if (UNSAFE == null) { + return null; + } + return new JvmMemoryAccessor(UNSAFE); + } + /** Indicates whether or not unsafe array operations are supported on this platform. */ private static boolean supportsUnsafeArrayOperations() { - boolean supported = false; - if (UNSAFE != null) { - try { - Class clazz = UNSAFE.getClass(); - clazz.getMethod("objectFieldOffset", Field.class); - clazz.getMethod("allocateInstance", Class.class); - clazz.getMethod("arrayBaseOffset", Class.class); - clazz.getMethod("getByte", Object.class, long.class); - clazz.getMethod("putByte", Object.class, long.class, byte.class); - clazz.getMethod("getBoolean", Object.class, long.class); - clazz.getMethod("putBoolean", Object.class, long.class, boolean.class); - clazz.getMethod("getInt", Object.class, long.class); - clazz.getMethod("putInt", Object.class, long.class, int.class); - clazz.getMethod("getLong", Object.class, long.class); - clazz.getMethod("putLong", Object.class, long.class, long.class); - clazz.getMethod("getFloat", Object.class, long.class); - clazz.getMethod("putFloat", Object.class, long.class, float.class); - clazz.getMethod("getDouble", Object.class, long.class); - clazz.getMethod("putDouble", Object.class, long.class, double.class); - clazz.getMethod("getObject", Object.class, long.class); - clazz.getMethod("putObject", Object.class, long.class, Object.class); - clazz.getMethod( - "copyMemory", Object.class, long.class, Object.class, long.class, long.class); - supported = true; - } catch (Throwable e) { - // Do nothing. - } - } - return supported; + if (UNSAFE == null) { + return false; + } + try { + Class clazz = UNSAFE.getClass(); + clazz.getMethod("objectFieldOffset", Field.class); + clazz.getMethod("arrayBaseOffset", Class.class); + clazz.getMethod("getInt", Object.class, long.class); + clazz.getMethod("putInt", Object.class, long.class, int.class); + clazz.getMethod("getLong", Object.class, long.class); + clazz.getMethod("putLong", Object.class, long.class, long.class); + clazz.getMethod("getObject", Object.class, long.class); + clazz.getMethod("putObject", Object.class, long.class, Object.class); + clazz.getMethod("getByte", Object.class, long.class); + clazz.getMethod("putByte", Object.class, long.class, byte.class); + clazz.getMethod("getBoolean", Object.class, long.class); + clazz.getMethod("putBoolean", Object.class, long.class, boolean.class); + clazz.getMethod("getFloat", Object.class, long.class); + clazz.getMethod("putFloat", Object.class, long.class, float.class); + clazz.getMethod("getDouble", Object.class, long.class); + clazz.getMethod("putDouble", Object.class, long.class, double.class); + + return true; + } catch (Throwable e) { + logger.log( + Level.WARNING, + "platform method missing - proto runtime falling back to safer methods: " + e); + } + return false; + } + + /** + * Indicates whether or not unsafe copyMemory(object, long, object, long, long) operations are + * supported on this platform. + */ + private static boolean supportsUnsafeCopyMemory() { + if (UNSAFE == null) { + return false; + } + try { + Class clazz = UNSAFE.getClass(); + clazz.getMethod("copyMemory", Object.class, long.class, Object.class, long.class, long.class); + + return true; + } catch (Throwable e) { + logger.log( + Level.WARNING, + "copyMemory is missing from platform - proto runtime falling back to safer methods."); + } + return false; } private static boolean supportsUnsafeByteBufferOperations() { - boolean supported = false; - if (UNSAFE != null) { - try { - Class clazz = UNSAFE.getClass(); - // Methods for getting direct buffer address. - clazz.getMethod("objectFieldOffset", Field.class); - clazz.getMethod("getLong", Object.class, long.class); - - clazz.getMethod("getByte", long.class); - clazz.getMethod("putByte", long.class, byte.class); - clazz.getMethod("getInt", long.class); - clazz.getMethod("putInt", long.class, int.class); - clazz.getMethod("getLong", long.class); - clazz.getMethod("putLong", long.class, long.class); - clazz.getMethod("setMemory", long.class, long.class, byte.class); - clazz.getMethod("copyMemory", long.class, long.class, long.class); - supported = true; - } catch (Throwable e) { - // Do nothing. - } - } - return supported; + if (UNSAFE == null) { + return false; + } + try { + Class clazz = UNSAFE.getClass(); + // Methods for getting direct buffer address. + clazz.getMethod("objectFieldOffset", Field.class); + clazz.getMethod("getLong", Object.class, long.class); + + clazz.getMethod("getByte", long.class); + clazz.getMethod("putByte", long.class, byte.class); + clazz.getMethod("getInt", long.class); + clazz.getMethod("putInt", long.class, int.class); + clazz.getMethod("getLong", long.class); + clazz.getMethod("putLong", long.class, long.class); + clazz.getMethod("copyMemory", long.class, long.class, long.class); + return true; + } catch (Throwable e) { + logger.log( + Level.WARNING, + "platform method missing - proto runtime falling back to safer methods: " + e); + } + return false; + } + + + @SuppressWarnings("unchecked") + private static Class getClassForName(String name) { + try { + return (Class) Class.forName(name); + } catch (Throwable e) { + return null; + } + } + + /** Finds the address field within a direct {@link Buffer}. */ + private static Field bufferAddressField() { + return field(Buffer.class, "address"); } /** * Get the base offset for byte arrays, or {@code -1} if {@code sun.misc.Unsafe} is not available. */ private static int byteArrayBaseOffset() { - return HAS_UNSAFE_ARRAY_OPERATIONS ? UNSAFE.arrayBaseOffset(byte[].class) : -1; + return HAS_UNSAFE_ARRAY_OPERATIONS ? MEMORY_ACCESSOR.arrayBaseOffset(byte[].class) : -1; } /** @@ -274,7 +319,7 @@ private static int byteArrayBaseOffset() { * available. */ private static long fieldOffset(Field field) { - return field == null || UNSAFE == null ? -1 : UNSAFE.objectFieldOffset(field); + return field == null || MEMORY_ACCESSOR == null ? -1 : MEMORY_ACCESSOR.objectFieldOffset(field); } /** @@ -292,4 +337,174 @@ private static Field field(Class clazz, String fieldName) { } return field; } + + private abstract static class MemoryAccessor { + + sun.misc.Unsafe unsafe; + + MemoryAccessor(sun.misc.Unsafe unsafe) { + this.unsafe = unsafe; + } + + public final long objectFieldOffset(Field field) { + return unsafe.objectFieldOffset(field); + } + + public abstract byte getByte(Object target, long offset); + + public abstract void putByte(Object target, long offset, byte value); + + public final int getInt(Object target, long offset) { + return unsafe.getInt(target, offset); + } + + public final void putInt(Object target, long offset, int value) { + unsafe.putInt(target, offset, value); + } + + public final long getLong(Object target, long offset) { + return unsafe.getLong(target, offset); + } + + public final void putLong(Object target, long offset, long value) { + unsafe.putLong(target, offset, value); + } + + public abstract boolean getBoolean(Object target, long offset); + + public abstract void putBoolean(Object target, long offset, boolean value); + + public abstract float getFloat(Object target, long offset); + + public abstract void putFloat(Object target, long offset, float value); + + public abstract double getDouble(Object target, long offset); + + public abstract void putDouble(Object target, long offset, double value); + + public final Object getObject(Object target, long offset) { + return unsafe.getObject(target, offset); + } + + public final void putObject(Object target, long offset, Object value) { + unsafe.putObject(target, offset, value); + } + + public final int arrayBaseOffset(Class clazz) { + return unsafe.arrayBaseOffset(clazz); + } + + public abstract byte getByte(long address); + + public abstract void putByte(long address, byte value); + + public abstract int getInt(long address); + + public abstract void putInt(long address, int value); + + public abstract long getLong(long address); + + public abstract void putLong(long address, long value); + + public abstract void copyMemory(long srcAddress, long targetAddress, long length); + + public abstract void copyMemory( + Object src, long srcOffset, Object target, long targetOffset, long length); + + public abstract Object getStaticObject(Field field); + } + + private static final class JvmMemoryAccessor extends MemoryAccessor { + + JvmMemoryAccessor(sun.misc.Unsafe unsafe) { + super(unsafe); + } + + @Override + public byte getByte(long address) { + return unsafe.getByte(address); + } + + @Override + public void putByte(long address, byte value) { + unsafe.putByte(address, value); + } + + @Override + public int getInt(long address) { + return unsafe.getInt(address); + } + + @Override + public void putInt(long address, int value) { + unsafe.putInt(address, value); + } + + @Override + public long getLong(long address) { + return unsafe.getLong(address); + } + + @Override + public void putLong(long address, long value) { + unsafe.putLong(address, value); + } + + @Override + public byte getByte(Object target, long offset) { + return unsafe.getByte(target, offset); + } + + @Override + public void putByte(Object target, long offset, byte value) { + unsafe.putByte(target, offset, value); + } + + @Override + public boolean getBoolean(Object target, long offset) { + return unsafe.getBoolean(target, offset); + } + + @Override + public void putBoolean(Object target, long offset, boolean value) { + unsafe.putBoolean(target, offset, value); + } + + @Override + public float getFloat(Object target, long offset) { + return unsafe.getFloat(target, offset); + } + + @Override + public void putFloat(Object target, long offset, float value) { + unsafe.putFloat(target, offset, value); + } + + @Override + public double getDouble(Object target, long offset) { + return unsafe.getDouble(target, offset); + } + + @Override + public void putDouble(Object target, long offset, double value) { + unsafe.putDouble(target, offset, value); + } + + @Override + public void copyMemory( + Object src, long srcOffset, Object target, long targetOffset, long length) { + unsafe.copyMemory(src, srcOffset, target, targetOffset, length); + } + + @Override + public void copyMemory(long srcAddress, long targetAddress, long length) { + unsafe.copyMemory(srcAddress, targetAddress, length); + } + + @Override + public Object getStaticObject(Field field) { + return getObject(unsafe.staticFieldBase(field), unsafe.staticFieldOffset(field)); + } + } + } diff --git a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Utf8.java b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Utf8.java index 5b80d405ebda7c..be7b746e5a285b 100644 --- a/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Utf8.java +++ b/third_party/protobuf/3.2.0/java/core/src/main/java/com/google/protobuf/Utf8.java @@ -1332,7 +1332,7 @@ private static int unsafeEstimateConsecutiveAscii( // the index (relative to the start of the array) is also 8-byte aligned. We do this by // ANDing the index with 7 to determine the number of bytes that need to be read before // we're 8-byte aligned. - final int unaligned = (int) offset & 7; + final int unaligned = 8 - ((int) offset & 7); for (int j = unaligned; j > 0; j--) { if (UnsafeUtil.getByte(bytes, offset++) < 0) { return unaligned - j; diff --git a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/LazyFieldTest.java b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/LazyFieldTest.java index 5f013f3ce314c1..f27e8e51b23786 100644 --- a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/LazyFieldTest.java +++ b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/LazyFieldTest.java @@ -32,7 +32,6 @@ import protobuf_unittest.UnittestProto.TestAllExtensions; import protobuf_unittest.UnittestProto.TestAllTypes; -import java.io.IOException; import junit.framework.TestCase; /** @@ -89,6 +88,7 @@ public void testEqualsObject() { assertFalse(message.equals(lazyField.getValue())); } + @SuppressWarnings("EqualsIncompatibleType") // LazyField.equals() is not symmetric public void testEqualsObjectEx() throws Exception { TestAllExtensions message = TestUtil.getAllExtensionsSet(); LazyField lazyField = createLazyFieldFromMessage(message); diff --git a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/LiteTest.java b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/LiteTest.java index 538432f7c1b1e8..98c637a95a0079 100644 --- a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/LiteTest.java +++ b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/LiteTest.java @@ -52,6 +52,7 @@ import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.Foo; import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.TestOneofEquals; import protobuf_unittest.lite_equals_and_hash.LiteEqualsAndHash.TestRecursiveOneof; +import java.nio.ByteBuffer; import junit.framework.TestCase; /** @@ -2174,6 +2175,24 @@ public void testEquals() throws Exception { assertFalse(bar.equals(barPrime)); } + public void testEqualsAndHashCodeForTrickySchemaTypes() { + Foo foo1 = Foo.newBuilder() + .build(); + Foo foo2 = Foo.newBuilder() + .setSint64(1) + .build(); + Foo foo3 = Foo.newBuilder() + .putMyMap("key", "value2") + .build(); + Foo foo4 = Foo.newBuilder() + .setMyGroup(Foo.MyGroup.newBuilder().setValue(4).build()) + .build(); + + assertEqualsAndHashCodeAreFalse(foo1, foo2); + assertEqualsAndHashCodeAreFalse(foo1, foo3); + assertEqualsAndHashCodeAreFalse(foo1, foo4); + } + public void testOneofEquals() throws Exception { TestOneofEquals.Builder builder = TestOneofEquals.newBuilder(); TestOneofEquals message1 = builder.build(); @@ -2270,4 +2289,93 @@ public void testRecursiveHashcode() { // This tests that we don't infinite loop. TestRecursiveOneof.getDefaultInstance().hashCode(); } + + public void testParseFromByteBuffer() throws Exception { + TestAllTypesLite message = + TestAllTypesLite.newBuilder() + .setOptionalInt32(123) + .addRepeatedString("hello") + .setOptionalNestedMessage(TestAllTypesLite.NestedMessage.newBuilder().setBb(7)) + .build(); + + TestAllTypesLite copy = + TestAllTypesLite.parseFrom(message.toByteString().asReadOnlyByteBuffer()); + + assertEquals(message, copy); + } + + public void testParseFromByteBufferThrows() { + try { + TestAllTypesLite.parseFrom(ByteBuffer.wrap(new byte[] { 0x5 })); + fail(); + } catch (InvalidProtocolBufferException expected) { + } + + TestAllTypesLite message = + TestAllTypesLite.newBuilder() + .setOptionalInt32(123) + .addRepeatedString("hello") + .build(); + + ByteBuffer buffer = ByteBuffer.wrap(message.toByteArray(), 0, message.getSerializedSize() - 1); + try { + TestAllTypesLite.parseFrom(buffer); + fail(); + } catch (InvalidProtocolBufferException expected) { + assertEquals( + TestAllTypesLite.newBuilder() + .setOptionalInt32(123) + .build(), + expected.getUnfinishedMessage()); + } + } + + public void testParseFromByteBuffer_extensions() throws Exception { + TestAllExtensionsLite message = + TestAllExtensionsLite.newBuilder() + .setExtension(UnittestLite.optionalInt32ExtensionLite, 123) + .addExtension(UnittestLite.repeatedStringExtensionLite, "hello") + .setExtension( + UnittestLite.optionalNestedEnumExtensionLite, TestAllTypesLite.NestedEnum.BAZ) + .setExtension( + UnittestLite.optionalNestedMessageExtensionLite, + TestAllTypesLite.NestedMessage.newBuilder().setBb(7).build()) + .build(); + + ExtensionRegistryLite registry = ExtensionRegistryLite.newInstance(); + UnittestLite.registerAllExtensions(registry); + + TestAllExtensionsLite copy = + TestAllExtensionsLite.parseFrom(message.toByteString().asReadOnlyByteBuffer(), registry); + + assertEquals(message, copy); + } + + public void testParseFromByteBufferThrows_extensions() { + ExtensionRegistryLite registry = ExtensionRegistryLite.newInstance(); + UnittestLite.registerAllExtensions(registry); + try { + TestAllExtensionsLite.parseFrom(ByteBuffer.wrap(new byte[] { 0x5 }), registry); + fail(); + } catch (InvalidProtocolBufferException expected) { + } + + TestAllExtensionsLite message = + TestAllExtensionsLite.newBuilder() + .setExtension(UnittestLite.optionalInt32ExtensionLite, 123) + .addExtension(UnittestLite.repeatedStringExtensionLite, "hello") + .build(); + + ByteBuffer buffer = ByteBuffer.wrap(message.toByteArray(), 0, message.getSerializedSize() - 1); + try { + TestAllExtensionsLite.parseFrom(buffer, registry); + fail(); + } catch (InvalidProtocolBufferException expected) { + assertEquals( + TestAllExtensionsLite.newBuilder() + .setExtension(UnittestLite.optionalInt32ExtensionLite, 123) + .build(), + expected.getUnfinishedMessage()); + } + } } diff --git a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/MapForProto2Test.java b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/MapForProto2Test.java index cfe4c4536ea952..453d39286d5c47 100644 --- a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/MapForProto2Test.java +++ b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/MapForProto2Test.java @@ -759,6 +759,7 @@ public void testReflectionApi() throws Exception { assertEquals(55, message.getInt32ToInt32Field().get(55).intValue()); } + // See additional coverage in TextFormatTest.java. public void testTextFormat() throws Exception { TestMap.Builder builder = TestMap.newBuilder(); setMapValuesUsingAccessors(builder); diff --git a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/MapTest.java b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/MapTest.java index 81e951ccf7e1b6..45019537ecd47f 100644 --- a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/MapTest.java +++ b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/MapTest.java @@ -30,7 +30,7 @@ package com.google.protobuf; - +import static org.junit.Assert.assertArrayEquals; import com.google.protobuf.Descriptors.Descriptor; import com.google.protobuf.Descriptors.EnumDescriptor; import com.google.protobuf.Descriptors.EnumValueDescriptor; @@ -490,19 +490,13 @@ public void testPutAllForUnknownEnumValues() throws Exception { public void testPutForUnknownEnumValues() throws Exception { TestMap.Builder builder = TestMap.newBuilder() .putInt32ToEnumFieldValue(0, 0) - .putInt32ToEnumFieldValue(1, 1); - - try { - builder.putInt32ToEnumFieldValue(2, 1000); // unknown value. - fail(); - } catch (IllegalArgumentException e) { - // expected - } - + .putInt32ToEnumFieldValue(1, 1) + .putInt32ToEnumFieldValue(2, 1000); // unknown value. TestMap message = builder.build(); assertEquals(0, message.getInt32ToEnumFieldValueOrThrow(0)); assertEquals(1, message.getInt32ToEnumFieldValueOrThrow(1)); - assertEquals(2, message.getInt32ToEnumFieldCount()); + assertEquals(1000, message.getInt32ToEnumFieldValueOrThrow(2)); + assertEquals(3, message.getInt32ToEnumFieldCount()); } public void testPutChecksNullKeysAndValues() throws Exception { @@ -870,6 +864,7 @@ public void testReflectionApi() throws Exception { assertEquals(55, message.getInt32ToInt32Field().get(55).intValue()); } + // See additional coverage in TextFormatTest.java. public void testTextFormat() throws Exception { TestMap.Builder builder = TestMap.newBuilder(); setMapValuesUsingAccessors(builder); @@ -1250,12 +1245,9 @@ public void testPut() { builder.putInt32ToEnumFieldValue(1, TestMap.EnumValue.BAR.getNumber()); assertEquals( TestMap.EnumValue.BAR.getNumber(), builder.getInt32ToEnumFieldValueOrThrow(1)); - try { - builder.putInt32ToEnumFieldValue(1, -1); - fail(); - } catch (IllegalArgumentException e) { - // expected - } + builder.putInt32ToEnumFieldValue(1, -1); + assertEquals(-1, builder.getInt32ToEnumFieldValueOrThrow(1)); + assertEquals(TestMap.EnumValue.UNRECOGNIZED, builder.getInt32ToEnumFieldOrThrow(1)); builder.putStringToInt32Field("a", 1); assertEquals(1, builder.getStringToInt32FieldOrThrow("a")); @@ -1492,4 +1484,41 @@ private static Map newMap(K key1, V value1, K key2, V value2, K key map.put(key3, value3); return map; } + + public void testMap_withNulls() { + TestMap.Builder builder = TestMap.newBuilder(); + + try { + builder.putStringToInt32Field(null, 3); + fail(); + } catch (NullPointerException expected) { + } + + try { + builder.putAllStringToInt32Field(newMap(null, 3, "hi", 4)); + fail(); + } catch (NullPointerException expected) { + } + + try { + builder.putInt32ToMessageField(3, null); + fail(); + } catch (NullPointerException expected) { + } + + try { + builder.putAllInt32ToMessageField( + MapTest.newMap(4, null, 5, null)); + fail(); + } catch (NullPointerException expected) { + } + + try { + builder.putAllInt32ToMessageField(null); + fail(); + } catch (NullPointerException expected) { + } + + assertArrayEquals(new byte[0], builder.build().toByteArray()); + } } diff --git a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/ParserTest.java b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/ParserTest.java index 8c2e4c261c0e13..4bd34112d65247 100644 --- a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/ParserTest.java +++ b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/ParserTest.java @@ -79,6 +79,8 @@ private void assertRoundTripEquals(MessageLite message, new ByteArrayInputStream(data), registry)); assertMessageEquals(message, parser.parseFrom( CodedInputStream.newInstance(data), registry)); + assertMessageEquals( + message, parser.parseFrom(message.toByteString().asReadOnlyByteBuffer(), registry)); } @SuppressWarnings("unchecked") @@ -99,6 +101,7 @@ private void assertRoundTripEquals(MessageLite message) throws Exception { new ByteArrayInputStream(data))); assertMessageEquals(message, parser.parseFrom( CodedInputStream.newInstance(data))); + assertMessageEquals(message, parser.parseFrom(message.toByteString().asReadOnlyByteBuffer())); } private void assertMessageEquals( @@ -178,6 +181,9 @@ private void assertParsePartial( public void testParseExtensions() throws Exception { assertRoundTripEquals(TestUtil.getAllExtensionsSet(), TestUtil.getExtensionRegistry()); + } + + public void testParseExtensionsLite() throws Exception { assertRoundTripEquals( TestUtilLite.getAllLiteExtensionsSet(), TestUtilLite.getExtensionRegistryLite()); } @@ -186,6 +192,9 @@ public void testParsePacked() throws Exception { assertRoundTripEquals(TestUtil.getPackedSet()); assertRoundTripEquals(TestUtil.getPackedExtensionsSet(), TestUtil.getExtensionRegistry()); + } + + public void testParsePackedLite() throws Exception { assertRoundTripEquals( TestUtilLite.getLitePackedExtensionsSet(), TestUtilLite.getExtensionRegistryLite()); } @@ -195,15 +204,26 @@ public void testParseDelimitedTo() throws Exception { TestAllTypes normalMessage = TestUtil.getAllSet(); ByteArrayOutputStream output = new ByteArrayOutputStream(); normalMessage.writeDelimitedTo(output); + normalMessage.writeDelimitedTo(output); + InputStream input = new ByteArrayInputStream(output.toByteArray()); + assertMessageEquals(normalMessage, normalMessage.getParserForType().parseDelimitedFrom(input)); + assertMessageEquals(normalMessage, normalMessage.getParserForType().parseDelimitedFrom(input)); + } + + public void testParseDelimitedToLite() throws Exception { // Write MessageLite with packed extension fields. TestPackedExtensionsLite packedMessage = TestUtilLite.getLitePackedExtensionsSet(); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + packedMessage.writeDelimitedTo(output); packedMessage.writeDelimitedTo(output); InputStream input = new ByteArrayInputStream(output.toByteArray()); assertMessageEquals( - normalMessage, - normalMessage.getParserForType().parseDelimitedFrom(input)); + packedMessage, + packedMessage + .getParserForType() + .parseDelimitedFrom(input, TestUtilLite.getExtensionRegistryLite())); assertMessageEquals( packedMessage, packedMessage @@ -314,8 +334,7 @@ public void testParsingMerge() throws Exception { public void testParsingMergeLite() throws Exception { // Build messages. - TestAllTypesLite.Builder builder = - TestAllTypesLite.newBuilder(); + TestAllTypesLite.Builder builder = TestAllTypesLite.newBuilder(); TestAllTypesLite msg1 = builder.setOptionalInt32(1).build(); builder.clear(); TestAllTypesLite msg2 = builder.setOptionalInt64(2).build(); diff --git a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/TestUtil.java b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/TestUtil.java index c1bd21db5c5d9a..e96adf076395b6 100644 --- a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/TestUtil.java +++ b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/TestUtil.java @@ -2622,6 +2622,8 @@ public static void assertAtMostOneFieldSetOneof(TestOneof2 message) { break; case FOO_NOT_SET: break; + default: + // TODO(b/18683919): go/enum-switch-lsc } } diff --git a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/TextFormatTest.java b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/TextFormatTest.java index 6a91b02f039f14..249d7c5ed2c553 100644 --- a/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/TextFormatTest.java +++ b/third_party/protobuf/3.2.0/java/core/src/test/java/com/google/protobuf/TextFormatTest.java @@ -30,9 +30,12 @@ package com.google.protobuf; +import static com.google.common.truth.Truth.assertThat; + import com.google.protobuf.Descriptors.Descriptor; import com.google.protobuf.Descriptors.FieldDescriptor; import com.google.protobuf.TextFormat.Parser.SingularOverwritePolicy; +import map_test.MapTestProto.TestMap; import protobuf_unittest.UnittestMset.TestMessageSetExtension1; import protobuf_unittest.UnittestMset.TestMessageSetExtension2; import protobuf_unittest.UnittestProto.OneString; @@ -940,6 +943,7 @@ public void testPrintToUnicodeString_unknown() { } + // See additional coverage in testOneofOverwriteForbidden and testMapOverwriteForbidden. public void testParseNonRepeatedFields() throws Exception { assertParseSuccessWithOverwriteForbidden( "repeated_int32: 1\n" + @@ -950,6 +954,7 @@ public void testParseNonRepeatedFields() throws Exception { assertParseSuccessWithOverwriteForbidden( "repeated_nested_message { bb: 1 }\n" + "repeated_nested_message { bb: 2 }\n"); + assertParseErrorWithOverwriteForbidden( "3:17: Non-repeated field " + "\"protobuf_unittest.TestAllTypes.optional_int32\" " + @@ -988,6 +993,7 @@ public void testParseShortRepeatedFormOfRepeatedFields() throws Exception { assertParseSuccessWithOverwriteForbidden("repeated_int32: [ 1, 2 ]\n"); assertParseSuccessWithOverwriteForbidden("RepeatedGroup [{ a: 1 },{ a: 2 }]\n"); assertParseSuccessWithOverwriteForbidden("repeated_nested_message [{ bb: 1 }, { bb: 2 }]\n"); + // See also testMapShortForm. } public void testParseShortRepeatedFormOfEmptyRepeatedFields() throws Exception { @@ -995,6 +1001,7 @@ public void testParseShortRepeatedFormOfEmptyRepeatedFields() throws Exception { assertParseSuccessWithOverwriteForbidden("repeated_int32: []\n"); assertParseSuccessWithOverwriteForbidden("RepeatedGroup []\n"); assertParseSuccessWithOverwriteForbidden("repeated_nested_message []\n"); + // See also testMapShortFormEmpty. } public void testParseShortRepeatedFormWithTrailingComma() throws Exception { @@ -1010,6 +1017,7 @@ public void testParseShortRepeatedFormWithTrailingComma() throws Exception { assertParseErrorWithOverwriteForbidden( "1:37: Expected \"{\".", "repeated_nested_message [{ bb: 1 }, ]\n"); + // See also testMapShortFormTrailingComma. } public void testParseShortRepeatedFormOfNonRepeatedFields() throws Exception { @@ -1057,6 +1065,90 @@ public void testOneofOverwriteAllowed() throws Exception { assertTrue(oneof.hasFooInt()); } + // ======================================================================= + // test map + + public void testMapTextFormat() throws Exception { + TestMap message = + TestMap.newBuilder() + .putInt32ToStringField(10, "apple") + .putInt32ToStringField(20, "banana") + .putInt32ToStringField(30, "cherry") + .build(); + String text = TextFormat.printToUnicodeString(message); + { + TestMap.Builder dest = TestMap.newBuilder(); + TextFormat.merge(text, dest); + assertThat(dest.build()).isEqualTo(message); + } + { + TestMap.Builder dest = TestMap.newBuilder(); + parserWithOverwriteForbidden.merge(text, dest); + assertThat(dest.build()).isEqualTo(message); + } + } + + public void testMapShortForm() throws Exception { + String text = + "string_to_int32_field [{ key: 'x' value: 10 }, { key: 'y' value: 20 }]\n" + + "int32_to_message_field " + + "[{ key: 1 value { value: 100 } }, { key: 2 value: { value: 200 } }]\n"; + TestMap.Builder dest = TestMap.newBuilder(); + parserWithOverwriteForbidden.merge(text, dest); + TestMap message = dest.build(); + assertThat(message.getStringToInt32Field().size()).isEqualTo(2); + assertThat(message.getInt32ToMessageField().size()).isEqualTo(2); + assertThat(message.getStringToInt32Field().get("x")).isEqualTo(10); + assertThat(message.getInt32ToMessageField().get(2).getValue()).isEqualTo(200); + } + + public void testMapShortFormEmpty() throws Exception { + String text = "string_to_int32_field []\n" + + "int32_to_message_field: []\n"; + TestMap.Builder dest = TestMap.newBuilder(); + parserWithOverwriteForbidden.merge(text, dest); + TestMap message = dest.build(); + assertThat(message.getStringToInt32Field().size()).isEqualTo(0); + assertThat(message.getInt32ToMessageField().size()).isEqualTo(0); + } + + public void testMapShortFormTrailingComma() throws Exception { + String text = "string_to_int32_field [{ key: 'x' value: 10 }, ]\n"; + TestMap.Builder dest = TestMap.newBuilder(); + try { + parserWithOverwriteForbidden.merge(text, dest); + fail("Expected parse exception."); + } catch (TextFormat.ParseException e) { + assertThat(e).hasMessageThat().isEqualTo("1:48: Expected \"{\"."); + } + } + + public void testMapOverwrite() throws Exception { + String text = + "int32_to_int32_field { key: 1 value: 10 }\n" + + "int32_to_int32_field { key: 2 value: 20 }\n" + + "int32_to_int32_field { key: 1 value: 30 }\n"; + + { + // With default parser, last value set for the key holds. + TestMap.Builder builder = TestMap.newBuilder(); + defaultParser.merge(text, builder); + TestMap map = builder.build(); + assertThat(map.getInt32ToInt32Field().size()).isEqualTo(2); + assertThat(map.getInt32ToInt32Field().get(1).intValue()).isEqualTo(30); + } + + { + // With overwrite forbidden, same behavior. + // TODO(b/29122459): Expect parse exception here. + TestMap.Builder builder = TestMap.newBuilder(); + defaultParser.merge(text, builder); + TestMap map = builder.build(); + assertThat(map.getInt32ToInt32Field().size()).isEqualTo(2); + assertThat(map.getInt32ToInt32Field().get(1).intValue()).isEqualTo(30); + } + } + // ======================================================================= // test location information diff --git a/third_party/protobuf/3.2.0/java/core/src/test/proto/com/google/protobuf/lite_equals_and_hash.proto b/third_party/protobuf/3.2.0/java/core/src/test/proto/com/google/protobuf/lite_equals_and_hash.proto index 6eef42c578c96f..b18b0d79f223e0 100644 --- a/third_party/protobuf/3.2.0/java/core/src/test/proto/com/google/protobuf/lite_equals_and_hash.proto +++ b/third_party/protobuf/3.2.0/java/core/src/test/proto/com/google/protobuf/lite_equals_and_hash.proto @@ -46,6 +46,14 @@ message TestOneofEquals { message Foo { optional int32 value = 1; repeated Bar bar = 2; + map my_map = 3; + oneof Single { + sint64 sint64 = 4; + // LINT: ALLOW_GROUPS + group MyGroup = 5 { + optional int32 value = 1; + } + } extensions 100 to max; } diff --git a/third_party/protobuf/3.2.0/java/lite/pom.xml b/third_party/protobuf/3.2.0/java/lite/pom.xml index d7b150972d95b6..c902f8192a1913 100644 --- a/third_party/protobuf/3.2.0/java/lite/pom.xml +++ b/third_party/protobuf/3.2.0/java/lite/pom.xml @@ -137,6 +137,7 @@ **/MutabilityOracle.java **/NioByteString.java **/Parser.java + **/PrimitiveNonBoxingCollection.java **/ProtobufArrayList.java **/ProtocolStringList.java **/RopeByteString.java diff --git a/third_party/protobuf/3.2.0/java/pom.xml b/third_party/protobuf/3.2.0/java/pom.xml index f89e442246a488..81ffc48a310df1 100644 --- a/third_party/protobuf/3.2.0/java/pom.xml +++ b/third_party/protobuf/3.2.0/java/pom.xml @@ -11,7 +11,7 @@ com.google.protobuf protobuf-parent - 3.2.0 + 3.3.0 pom Protocol Buffers [Parent] @@ -84,7 +84,13 @@ com.google.guava guava - 18.0 + 20.0 + + + com.google.truth + truth + test + 0.32 diff --git a/third_party/protobuf/3.2.0/java/util/pom.xml b/third_party/protobuf/3.2.0/java/util/pom.xml index ac771f6ecc69c0..c72fa6509059f3 100644 --- a/third_party/protobuf/3.2.0/java/util/pom.xml +++ b/third_party/protobuf/3.2.0/java/util/pom.xml @@ -6,7 +6,7 @@ com.google.protobuf protobuf-parent - 3.2.0 + 3.3.0 protobuf-java-util diff --git a/third_party/protobuf/3.2.0/java/util/src/main/java/com/google/protobuf/util/JsonFormat.java b/third_party/protobuf/3.2.0/java/util/src/main/java/com/google/protobuf/util/JsonFormat.java index 838700f7f6de82..e1c2d73dd53884 100644 --- a/third_party/protobuf/3.2.0/java/util/src/main/java/com/google/protobuf/util/JsonFormat.java +++ b/third_party/protobuf/3.2.0/java/util/src/main/java/com/google/protobuf/util/JsonFormat.java @@ -30,6 +30,7 @@ package com.google.protobuf.util; +import com.google.common.base.Preconditions; import com.google.common.io.BaseEncoding; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -102,7 +103,9 @@ private JsonFormat() {} * Creates a {@link Printer} with default configurations. */ public static Printer printer() { - return new Printer(TypeRegistry.getEmptyTypeRegistry(), false, false, false); + return new Printer( + TypeRegistry.getEmptyTypeRegistry(), false, Collections.emptySet(), + false, false); } /** @@ -110,16 +113,27 @@ public static Printer printer() { */ public static class Printer { private final TypeRegistry registry; - private final boolean includingDefaultValueFields; + // NOTE: There are 3 states for these *defaultValueFields variables: + // 1) Default - alwaysOutput is false & including is empty set. Fields only output if they are + // set to non-default values. + // 2) No-args includingDefaultValueFields() called - alwaysOutput is true & including is + // irrelevant (but set to empty set). All fields are output regardless of their values. + // 3) includingDefaultValueFields(Set) called - alwaysOutput is false & + // including is set to the specified set. Fields in that set are always output & fields not + // in that set are only output if set to non-default values. + private boolean alwaysOutputDefaultValueFields; + private Set includingDefaultValueFields; private final boolean preservingProtoFieldNames; private final boolean omittingInsignificantWhitespace; private Printer( TypeRegistry registry, - boolean includingDefaultValueFields, + boolean alwaysOutputDefaultValueFields, + Set includingDefaultValueFields, boolean preservingProtoFieldNames, boolean omittingInsignificantWhitespace) { this.registry = registry; + this.alwaysOutputDefaultValueFields = alwaysOutputDefaultValueFields; this.includingDefaultValueFields = includingDefaultValueFields; this.preservingProtoFieldNames = preservingProtoFieldNames; this.omittingInsignificantWhitespace = omittingInsignificantWhitespace; @@ -137,6 +151,7 @@ public Printer usingTypeRegistry(TypeRegistry registry) { } return new Printer( registry, + alwaysOutputDefaultValueFields, includingDefaultValueFields, preservingProtoFieldNames, omittingInsignificantWhitespace); @@ -149,8 +164,41 @@ public Printer usingTypeRegistry(TypeRegistry registry) { * {@link Printer}. */ public Printer includingDefaultValueFields() { + checkUnsetIncludingDefaultValueFields(); return new Printer( - registry, true, preservingProtoFieldNames, omittingInsignificantWhitespace); + registry, + true, + Collections.emptySet(), + preservingProtoFieldNames, + omittingInsignificantWhitespace); + } + + /** + * Creates a new {@link Printer} that will also print default-valued fields if their + * FieldDescriptors are found in the supplied set. Empty repeated fields and map fields will be + * printed as well, if they match. The new Printer clones all other configurations from the + * current {@link Printer}. Call includingDefaultValueFields() with no args to unconditionally + * output all fields. + */ + public Printer includingDefaultValueFields(Set fieldsToAlwaysOutput) { + Preconditions.checkArgument( + null != fieldsToAlwaysOutput && !fieldsToAlwaysOutput.isEmpty(), + "Non-empty Set must be supplied for includingDefaultValueFields."); + + checkUnsetIncludingDefaultValueFields(); + return new Printer( + registry, + false, + fieldsToAlwaysOutput, + preservingProtoFieldNames, + omittingInsignificantWhitespace); + } + + private void checkUnsetIncludingDefaultValueFields() { + if (alwaysOutputDefaultValueFields || !includingDefaultValueFields.isEmpty()) { + throw new IllegalStateException( + "JsonFormat includingDefaultValueFields has already been set."); + } } /** @@ -161,15 +209,20 @@ public Printer includingDefaultValueFields() { */ public Printer preservingProtoFieldNames() { return new Printer( - registry, includingDefaultValueFields, true, omittingInsignificantWhitespace); + registry, + alwaysOutputDefaultValueFields, + includingDefaultValueFields, + true, + omittingInsignificantWhitespace); } /** - * Create a new {@link Printer} that will omit all insignificant whitespace - * in the JSON output. This new Printer clones all other configurations from the - * current Printer. Insignificant whitespace is defined by the JSON spec as whitespace - * that appear between JSON structural elements: + * Create a new {@link Printer} that will omit all insignificant whitespace in the JSON output. + * This new Printer clones all other configurations from the current Printer. Insignificant + * whitespace is defined by the JSON spec as whitespace that appear between JSON structural + * elements: + * *

      * ws = *(
      * %x20 /              ; Space
@@ -177,18 +230,24 @@ public Printer preservingProtoFieldNames() {
      * %x0A /              ; Line feed or New line
      * %x0D )              ; Carriage return
      * 
+ * * See https://tools.ietf.org/html/rfc7159 * current {@link Printer}. */ public Printer omittingInsignificantWhitespace() { - return new Printer(registry, includingDefaultValueFields, preservingProtoFieldNames, true); + return new Printer( + registry, + alwaysOutputDefaultValueFields, + includingDefaultValueFields, + preservingProtoFieldNames, + true); } /** * Converts a protobuf message to JSON format. * - * @throws InvalidProtocolBufferException if the message contains Any types - * that can't be resolved. + * @throws InvalidProtocolBufferException if the message contains Any types that can't be + * resolved. * @throws IOException if writing to the output fails. */ public void appendTo(MessageOrBuilder message, Appendable output) throws IOException { @@ -196,6 +255,7 @@ public void appendTo(MessageOrBuilder message, Appendable output) throws IOExcep // mobile. new PrinterImpl( registry, + alwaysOutputDefaultValueFields, includingDefaultValueFields, preservingProtoFieldNames, output, @@ -428,19 +488,16 @@ private CompactTextGenerator(final Appendable output) { this.output = output; } - /** - * ignored by compact printer - */ + /** ignored by compact printer */ + @Override public void indent() {} - /** - * ignored by compact printer - */ + /** ignored by compact printer */ + @Override public void outdent() {} - /** - * Print text to the output stream. - */ + /** Print text to the output stream. */ + @Override public void print(final CharSequence text) throws IOException { output.append(text); } @@ -458,18 +515,17 @@ private PrettyTextGenerator(final Appendable output) { } /** - * Indent text by two spaces. After calling Indent(), two spaces will be - * inserted at the beginning of each line of text. Indent() may be called - * multiple times to produce deeper indents. + * Indent text by two spaces. After calling Indent(), two spaces will be inserted at the + * beginning of each line of text. Indent() may be called multiple times to produce deeper + * indents. */ + @Override public void indent() { indent.append(" "); } - /** - * Reduces the current indent level by two spaces, or crashes if the indent - * level is zero. - */ + /** Reduces the current indent level by two spaces, or crashes if the indent level is zero. */ + @Override public void outdent() { final int length = indent.length(); if (length < 2) { @@ -478,9 +534,8 @@ public void outdent() { indent.delete(length - 2, length); } - /** - * Print text to the output stream. - */ + /** Print text to the output stream. */ + @Override public void print(final CharSequence text) throws IOException { final int size = text.length(); int pos = 0; @@ -512,7 +567,8 @@ private void write(final CharSequence data) throws IOException { */ private static final class PrinterImpl { private final TypeRegistry registry; - private final boolean includingDefaultValueFields; + private final boolean alwaysOutputDefaultValueFields; + private final Set includingDefaultValueFields; private final boolean preservingProtoFieldNames; private final TextGenerator generator; // We use Gson to help handle string escapes. @@ -526,11 +582,13 @@ private static class GsonHolder { PrinterImpl( TypeRegistry registry, - boolean includingDefaultValueFields, + boolean alwaysOutputDefaultValueFields, + Set includingDefaultValueFields, boolean preservingProtoFieldNames, Appendable jsonOutput, boolean omittingInsignificantWhitespace) { this.registry = registry; + this.alwaysOutputDefaultValueFields = alwaysOutputDefaultValueFields; this.includingDefaultValueFields = includingDefaultValueFields; this.preservingProtoFieldNames = preservingProtoFieldNames; this.gson = GsonHolder.DEFAULT_GSON; @@ -781,23 +839,26 @@ private void print(MessageOrBuilder message, String typeUrl) throws IOException printedField = true; } Map fieldsToPrint = null; - if (includingDefaultValueFields) { - fieldsToPrint = new TreeMap(); + if (alwaysOutputDefaultValueFields || !includingDefaultValueFields.isEmpty()) { + fieldsToPrint = new TreeMap(message.getAllFields()); for (FieldDescriptor field : message.getDescriptorForType().getFields()) { if (field.isOptional()) { if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE - && !message.hasField(field)){ + && !message.hasField(field)) { // Always skip empty optional message fields. If not we will recurse indefinitely if // a message has itself as a sub-field. continue; } OneofDescriptor oneof = field.getContainingOneof(); if (oneof != null && !message.hasField(field)) { - // Skip all oneof fields except the one that is actually set + // Skip all oneof fields except the one that is actually set continue; } } - fieldsToPrint.put(field, message.getField(field)); + if (!fieldsToPrint.containsKey(field) + && (alwaysOutputDefaultValueFields || includingDefaultValueFields.contains(field))) { + fieldsToPrint.put(field, message.getField(field)); + } } } else { fieldsToPrint = message.getAllFields(); @@ -1451,45 +1512,6 @@ private void mergeMapField(FieldDescriptor field, JsonElement json, Message.Buil } } - /** - * Gets the default value for a field type. Note that we use proto3 - * language defaults and ignore any default values set through the - * proto "default" option. - */ - private Object getDefaultValue(FieldDescriptor field, Message.Builder builder) { - switch (field.getType()) { - case INT32: - case SINT32: - case SFIXED32: - case UINT32: - case FIXED32: - return 0; - case INT64: - case SINT64: - case SFIXED64: - case UINT64: - case FIXED64: - return 0L; - case FLOAT: - return 0.0f; - case DOUBLE: - return 0.0; - case BOOL: - return false; - case STRING: - return ""; - case BYTES: - return ByteString.EMPTY; - case ENUM: - return field.getEnumType().getValues().get(0); - case MESSAGE: - case GROUP: - return builder.newBuilderForField(field).getDefaultInstanceForType(); - default: - throw new IllegalStateException("Invalid field type: " + field.getType()); - } - } - private void mergeRepeatedField( FieldDescriptor field, JsonElement json, Message.Builder builder) throws InvalidProtocolBufferException { @@ -1536,7 +1558,7 @@ private long parseInt64(JsonElement json) throws InvalidProtocolBufferException BigDecimal value = new BigDecimal(json.getAsString()); return value.longValueExact(); } catch (Exception e) { - throw new InvalidProtocolBufferException("Not an int32 value: " + json); + throw new InvalidProtocolBufferException("Not an int64 value: " + json); } } diff --git a/third_party/protobuf/3.2.0/java/util/src/main/java/com/google/protobuf/util/Timestamps.java b/third_party/protobuf/3.2.0/java/util/src/main/java/com/google/protobuf/util/Timestamps.java index 1d631a2c5812fd..d0bac417d5f3ca 100644 --- a/third_party/protobuf/3.2.0/java/util/src/main/java/com/google/protobuf/util/Timestamps.java +++ b/third_party/protobuf/3.2.0/java/util/src/main/java/com/google/protobuf/util/Timestamps.java @@ -297,7 +297,7 @@ public static Timestamp fromMicros(long microseconds) { * Convert a Timestamp to the number of microseconds elapsed from the epoch. * *

The result will be rounded down to the nearest microsecond. E.g., if the timestamp - * represents "1969-12-31T23:59:59.999999999Z", it will be rounded to -1 millisecond. + * represents "1969-12-31T23:59:59.999999999Z", it will be rounded to -1 microsecond. */ public static long toMicros(Timestamp timestamp) { checkValid(timestamp); diff --git a/third_party/protobuf/3.2.0/java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java b/third_party/protobuf/3.2.0/java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java index de02c117e3644a..460b81f62a017d 100644 --- a/third_party/protobuf/3.2.0/java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java +++ b/third_party/protobuf/3.2.0/java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java @@ -34,6 +34,7 @@ import com.google.protobuf.BoolValue; import com.google.protobuf.ByteString; import com.google.protobuf.BytesValue; +import com.google.protobuf.Descriptors.FieldDescriptor; import com.google.protobuf.DoubleValue; import com.google.protobuf.FloatValue; import com.google.protobuf.Int32Value; @@ -68,9 +69,12 @@ import java.io.StringReader; import java.math.BigDecimal; import java.math.BigInteger; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Locale; import java.util.Map; +import java.util.Set; import junit.framework.TestCase; public class JsonFormatTest extends TestCase { @@ -229,9 +233,7 @@ public void testUnknownEnumValues() throws Exception { TestMap.Builder mapBuilder = TestMap.newBuilder(); mapBuilder.putInt32ToEnumMapValue(1, 0); - Map mapWithInvalidValues = new HashMap(); - mapWithInvalidValues.put(2, 12345); - mapBuilder.putAllInt32ToEnumMapValue(mapWithInvalidValues); + mapBuilder.putInt32ToEnumMapValue(2, 12345); TestMap mapMessage = mapBuilder.build(); assertEquals( "{\n" @@ -264,7 +266,7 @@ public void testSpecialFloatValues() throws Exception { assertRoundTripEquals(message); } - public void testParserAcceptStringForNumbericField() throws Exception { + public void testParserAcceptStringForNumericField() throws Exception { TestAllTypes.Builder builder = TestAllTypes.newBuilder(); mergeFromJson( "{\n" @@ -284,8 +286,8 @@ public void testParserAcceptStringForNumbericField() throws Exception { assertEquals(9012, message.getOptionalSint32()); assertEquals(3456, message.getOptionalFixed32()); assertEquals(7890, message.getOptionalSfixed32()); - assertEquals(1.5f, message.getOptionalFloat()); - assertEquals(1.25, message.getOptionalDouble()); + assertEquals(1.5f, message.getOptionalFloat(), 0.0f); + assertEquals(1.25, message.getOptionalDouble(), 0.0); assertEquals(true, message.getOptionalBool()); } @@ -479,8 +481,8 @@ public void testParserRejectDuplicatedFields() throws Exception { TestAllTypes.Builder builder = TestAllTypes.newBuilder(); mergeFromJson( "{\n" - + " \"repeatedNestedMessage\": [null, null],\n" - + " \"repeated_nested_message\": [null, null]\n" + + " \"repeatedInt32\": [1, 2],\n" + + " \"repeated_int32\": [5, 6]\n" + "}", builder); fail(); @@ -488,7 +490,7 @@ public void testParserRejectDuplicatedFields() throws Exception { // Exception expected. } - // Duplicated oneof fields. + // Duplicated oneof fields, same name. try { TestOneof.Builder builder = TestOneof.newBuilder(); mergeFromJson("{\n" + " \"oneofInt32\": 1,\n" + " \"oneof_int32\": 2\n" + "}", builder); @@ -496,6 +498,16 @@ public void testParserRejectDuplicatedFields() throws Exception { } catch (InvalidProtocolBufferException e) { // Exception expected. } + + // Duplicated oneof fields, different name. + try { + TestOneof.Builder builder = TestOneof.newBuilder(); + mergeFromJson( + "{\n" + " \"oneofInt32\": 1,\n" + " \"oneofNullValue\": null\n" + "}", builder); + fail(); + } catch (InvalidProtocolBufferException e) { + // Exception expected. + } } public void testMapFields() throws Exception { @@ -1089,7 +1101,7 @@ public void testParserMissingTypeUrl() throws Exception { public void testParserUnexpectedTypeUrl() throws Exception { try { - TestAllTypes.Builder builder = TestAllTypes.newBuilder(); + Any.Builder builder = Any.newBuilder(); mergeFromJson( "{\n" + " \"@type\": \"type.googleapis.com/json_test.TestAllTypes\",\n" @@ -1215,6 +1227,115 @@ public void testIncludingDefaultValueFields() throws Exception { + "}", JsonFormat.printer().includingDefaultValueFields().print(message)); + Set fixedFields = new HashSet(); + for (FieldDescriptor fieldDesc : TestAllTypes.getDescriptor().getFields()) { + if (fieldDesc.getName().contains("_fixed")) { + fixedFields.add(fieldDesc); + } + } + + assertEquals( + "{\n" + + " \"optionalFixed32\": 0,\n" + + " \"optionalFixed64\": \"0\",\n" + + " \"repeatedFixed32\": [],\n" + + " \"repeatedFixed64\": []\n" + + "}", + JsonFormat.printer().includingDefaultValueFields(fixedFields).print(message)); + + TestAllTypes messageNonDefaults = + message.toBuilder().setOptionalInt64(1234).setOptionalFixed32(3232).build(); + assertEquals( + "{\n" + + " \"optionalInt64\": \"1234\",\n" + + " \"optionalFixed32\": 3232,\n" + + " \"optionalFixed64\": \"0\",\n" + + " \"repeatedFixed32\": [],\n" + + " \"repeatedFixed64\": []\n" + + "}", + JsonFormat.printer().includingDefaultValueFields(fixedFields).print(messageNonDefaults)); + + try { + JsonFormat.printer().includingDefaultValueFields().includingDefaultValueFields(); + fail("IllegalStateException is expected."); + } catch (IllegalStateException e) { + // Expected. + assertTrue( + "Exception message should mention includingDefaultValueFields.", + e.getMessage().contains("includingDefaultValueFields")); + } + + try { + JsonFormat.printer().includingDefaultValueFields().includingDefaultValueFields(fixedFields); + fail("IllegalStateException is expected."); + } catch (IllegalStateException e) { + // Expected. + assertTrue( + "Exception message should mention includingDefaultValueFields.", + e.getMessage().contains("includingDefaultValueFields")); + } + + try { + JsonFormat.printer().includingDefaultValueFields(fixedFields).includingDefaultValueFields(); + fail("IllegalStateException is expected."); + } catch (IllegalStateException e) { + // Expected. + assertTrue( + "Exception message should mention includingDefaultValueFields.", + e.getMessage().contains("includingDefaultValueFields")); + } + + try { + JsonFormat.printer() + .includingDefaultValueFields(fixedFields) + .includingDefaultValueFields(fixedFields); + fail("IllegalStateException is expected."); + } catch (IllegalStateException e) { + // Expected. + assertTrue( + "Exception message should mention includingDefaultValueFields.", + e.getMessage().contains("includingDefaultValueFields")); + } + + Set intFields = new HashSet(); + for (FieldDescriptor fieldDesc : TestAllTypes.getDescriptor().getFields()) { + if (fieldDesc.getName().contains("_int")) { + intFields.add(fieldDesc); + } + } + + try { + JsonFormat.printer() + .includingDefaultValueFields(intFields) + .includingDefaultValueFields(fixedFields); + fail("IllegalStateException is expected."); + } catch (IllegalStateException e) { + // Expected. + assertTrue( + "Exception message should mention includingDefaultValueFields.", + e.getMessage().contains("includingDefaultValueFields")); + } + + try { + JsonFormat.printer().includingDefaultValueFields(null); + fail("IllegalArgumentException is expected."); + } catch (IllegalArgumentException e) { + // Expected. + assertTrue( + "Exception message should mention includingDefaultValueFields.", + e.getMessage().contains("includingDefaultValueFields")); + } + + try { + JsonFormat.printer().includingDefaultValueFields(Collections.emptySet()); + fail("IllegalArgumentException is expected."); + } catch (IllegalArgumentException e) { + // Expected. + assertTrue( + "Exception message should mention includingDefaultValueFields.", + e.getMessage().contains("includingDefaultValueFields")); + } + TestMap mapMessage = TestMap.getDefaultInstance(); assertEquals("{\n}", JsonFormat.printer().print(mapMessage)); assertEquals( @@ -1283,16 +1404,17 @@ public void testIncludingDefaultValueFields() throws Exception { assertEquals("{\n}", JsonFormat.printer().includingDefaultValueFields().print(oneofMessage)); oneofMessage = TestOneof.newBuilder().setOneofInt32(42).build(); - assertEquals("{\n \"oneofInt32\": 42\n}", - JsonFormat.printer().print(oneofMessage)); - assertEquals("{\n \"oneofInt32\": 42\n}", + assertEquals("{\n \"oneofInt32\": 42\n}", JsonFormat.printer().print(oneofMessage)); + assertEquals( + "{\n \"oneofInt32\": 42\n}", JsonFormat.printer().includingDefaultValueFields().print(oneofMessage)); TestOneof.Builder oneofBuilder = TestOneof.newBuilder(); mergeFromJson("{\n" + " \"oneofNullValue\": null \n" + "}", oneofBuilder); oneofMessage = oneofBuilder.build(); assertEquals("{\n \"oneofNullValue\": null\n}", JsonFormat.printer().print(oneofMessage)); - assertEquals("{\n \"oneofNullValue\": null\n}", + assertEquals( + "{\n \"oneofNullValue\": null\n}", JsonFormat.printer().includingDefaultValueFields().print(oneofMessage)); } @@ -1424,11 +1546,12 @@ public void testRecursionLimit() throws Exception { // Test that we are not leaking out JSON exceptions. public void testJsonException() throws Exception { - InputStream throwingInputStream = new InputStream() { - public int read() throws IOException { - throw new IOException("12345"); - } - }; + InputStream throwingInputStream = + new InputStream() { + public int read() throws IOException { + throw new IOException("12345"); + } + }; InputStreamReader throwingReader = new InputStreamReader(throwingInputStream); // When the underlying reader throws IOException, JsonFormat should forward // through this IOException. diff --git a/third_party/protobuf/3.2.0/jenkins/buildcmds/pull_request_32.sh b/third_party/protobuf/3.2.0/jenkins/buildcmds/pull_request_32.sh index bf0fb7ffe3c8cf..99df297190c459 100755 --- a/third_party/protobuf/3.2.0/jenkins/buildcmds/pull_request_32.sh +++ b/third_party/protobuf/3.2.0/jenkins/buildcmds/pull_request_32.sh @@ -12,5 +12,5 @@ export DOCKERFILE_DIR=jenkins/docker32 export DOCKER_RUN_SCRIPT=jenkins/pull_request_in_docker.sh export OUTPUT_DIR=testoutput -export TEST_SET="php_all_32" +export TEST_SET="php_all" ./jenkins/build_and_run_docker.sh diff --git a/third_party/protobuf/3.2.0/jenkins/docker/Dockerfile b/third_party/protobuf/3.2.0/jenkins/docker/Dockerfile index 659336d8252d36..9c9ee56b8c5c1b 100644 --- a/third_party/protobuf/3.2.0/jenkins/docker/Dockerfile +++ b/third_party/protobuf/3.2.0/jenkins/docker/Dockerfile @@ -129,7 +129,7 @@ ENV MVN mvn --batch-mode RUN cd /tmp && \ git clone https://github.com/google/protobuf.git && \ cd protobuf && \ - git reset 6b27c1f981a9a93918e4039f236ead27165a8e91 && \ + git reset --hard c2b3b3e04e7a023efe06f2107705b45428847800 && \ ./autogen.sh && \ ./configure && \ make -j4 && \ @@ -147,6 +147,23 @@ RUN cd php-5.5.38 && ./configure --enable-maintainer-zts --prefix=/usr/local/php make && make install && cd .. RUN cd php-5.5.38 && make clean && ./configure --prefix=/usr/local/php-5.5 && \ make && make install && cd .. + +RUN wget http://am1.php.net/get/php-5.6.30.tar.bz2/from/this/mirror +RUN mv mirror php-5.6.30.tar.bz2 +RUN tar -xvf php-5.6.30.tar.bz2 +RUN cd php-5.6.30 && ./configure --enable-maintainer-zts --prefix=/usr/local/php-5.6-zts && \ + make && make install && cd .. +RUN cd php-5.6.30 && make clean && ./configure --prefix=/usr/local/php-5.6 && \ + make && make install && cd .. + +RUN wget http://am1.php.net/get/php-7.0.18.tar.bz2/from/this/mirror +RUN mv mirror php-7.0.18.tar.bz2 +RUN tar -xvf php-7.0.18.tar.bz2 +RUN cd php-7.0.18 && ./configure --enable-maintainer-zts --prefix=/usr/local/php-7.0-zts && \ + make && make install && cd .. +RUN cd php-7.0.18 && make clean && ./configure --prefix=/usr/local/php-7.0 && \ + make && make install && cd .. + RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" RUN php composer-setup.php RUN mv composer.phar /usr/bin/composer @@ -157,21 +174,21 @@ RUN cd /tmp && \ rm -rf protobuf && \ git clone https://github.com/google/protobuf.git && \ cd protobuf && \ - git reset 46ae90dc5e145b12fffa7e053a908a9f3e066286 && \ + git reset --hard 6b27c1f981a9a93918e4039f236ead27165a8e91 && \ cd php && \ ln -sfn /usr/local/php-5.5/bin/php /usr/bin/php && \ ln -sfn /usr/local/php-5.5/bin/php-config /usr/bin/php-config && \ ln -sfn /usr/local/php-5.5/bin/phpize /usr/bin/phpize && \ composer install && \ mv vendor /usr/local/vendor-5.5 && \ - ln -sfn /usr/bin/php5.6 /usr/bin/php && \ - ln -sfn /usr/bin/php-config5.6 /usr/bin/php-config && \ - ln -sfn /usr/bin/phpize5.6 /usr/bin/phpize && \ + ln -sfn /usr/local/php-5.6/bin/php /usr/bin/php && \ + ln -sfn /usr/local/php-5.6/bin/php-config /usr/bin/php-config && \ + ln -sfn /usr/local/php-5.6/bin/phpize /usr/bin/phpize && \ composer install && \ mv vendor /usr/local/vendor-5.6 && \ - ln -sfn /usr/bin/php7.0 /usr/bin/php && \ - ln -sfn /usr/bin/php-config7.0 /usr/bin/php-config && \ - ln -sfn /usr/bin/phpize7.0 /usr/bin/phpize && \ + ln -sfn /usr/local/php-7.0/bin/php /usr/bin/php && \ + ln -sfn /usr/local/php-7.0/bin/php-config /usr/bin/php-config && \ + ln -sfn /usr/local/php-7.0/bin/phpize /usr/bin/phpize && \ composer install && \ mv vendor /usr/local/vendor-7.0 diff --git a/third_party/protobuf/3.2.0/jenkins/docker32/Dockerfile b/third_party/protobuf/3.2.0/jenkins/docker32/Dockerfile index 02e9df176cb713..ab3fd9578be890 100644 --- a/third_party/protobuf/3.2.0/jenkins/docker32/Dockerfile +++ b/third_party/protobuf/3.2.0/jenkins/docker32/Dockerfile @@ -64,7 +64,7 @@ RUN php -r "unlink('composer-setup.php');" RUN cd /tmp && \ git clone https://github.com/google/protobuf.git && \ cd protobuf/php && \ - git reset 6b27c1f981a9a93918e4039f236ead27165a8e91 && \ + git reset --hard 6b27c1f981a9a93918e4039f236ead27165a8e91 && \ ln -sfn /usr/bin/php5.5 /usr/bin/php && \ ln -sfn /usr/bin/php-config5.5 /usr/bin/php-config && \ ln -sfn /usr/bin/phpize5.5 /usr/bin/phpize && \ @@ -80,14 +80,31 @@ RUN cd /tmp && \ ln -sfn /usr/bin/phpize7.0 /usr/bin/phpize && \ composer install && \ mv vendor /usr/local/vendor-7.0 + RUN wget http://am1.php.net/get/php-5.5.38.tar.bz2/from/this/mirror RUN mv mirror php-5.5.38.tar.bz2 RUN tar -xvf php-5.5.38.tar.bz2 RUN cd php-5.5.38 && ./configure --enable-maintainer-zts --prefix=/usr/local/php-5.5-zts && \ make && make install && make clean && cd .. -RUN cd php-5.5.38 && ./configure --enable-bcmath --prefix=/usr/local/php-5.5-bc && \ +RUN cd php-5.5.38 && make clean && ./configure --enable-bcmath --prefix=/usr/local/php-5.5 && \ make && make install && make clean && cd .. +RUN wget http://am1.php.net/get/php-5.6.30.tar.bz2/from/this/mirror +RUN mv mirror php-5.6.30.tar.bz2 +RUN tar -xvf php-5.6.30.tar.bz2 +RUN cd php-5.6.30 && ./configure --enable-maintainer-zts --prefix=/usr/local/php-5.6-zts && \ + make && make install && cd .. +RUN cd php-5.6.30 && make clean && ./configure --enable-bcmath --prefix=/usr/local/php-5.6 && \ + make && make install && cd .. + +RUN wget http://am1.php.net/get/php-7.0.18.tar.bz2/from/this/mirror +RUN mv mirror php-7.0.18.tar.bz2 +RUN tar -xvf php-7.0.18.tar.bz2 +RUN cd php-7.0.18 && ./configure --enable-maintainer-zts --prefix=/usr/local/php-7.0-zts && \ + make && make install && cd .. +RUN cd php-7.0.18 && make clean && ./configure --enable-bcmath --prefix=/usr/local/php-7.0 && \ + make && make install && cd .. + ################## # Python dependencies diff --git a/third_party/protobuf/3.2.0/js/binary/decoder.js b/third_party/protobuf/3.2.0/js/binary/decoder.js index 26bf359459060f..ad9cb01bd5bc7a 100644 --- a/third_party/protobuf/3.2.0/js/binary/decoder.js +++ b/third_party/protobuf/3.2.0/js/binary/decoder.js @@ -71,7 +71,7 @@ jspb.BinaryIterator = function(opt_decoder, opt_next, opt_elements) { */ this.nextMethod_ = null; - /** @private {Array.} */ + /** @private {?Array} */ this.elements_ = null; /** @private {number} */ @@ -100,7 +100,7 @@ jspb.BinaryIterator.prototype.init_ = this.decoder_ = opt_decoder; this.nextMethod_ = opt_next; } - this.elements_ = opt_elements ? opt_elements : null; + this.elements_ = opt_elements || null; this.cursor_ = 0; this.nextValue_ = null; this.atEnd_ = !this.decoder_ && !this.elements_; @@ -953,6 +953,7 @@ jspb.BinaryDecoder.prototype.readString = function(length) { var end = cursor + length; var codeUnits = []; + var result = ''; while (cursor < end) { var c = bytes[cursor++]; if (c < 128) { // Regular 7-bit ASCII. @@ -973,7 +974,7 @@ jspb.BinaryDecoder.prototype.readString = function(length) { var c2 = bytes[cursor++]; var c3 = bytes[cursor++]; var c4 = bytes[cursor++]; - // Characters written on 4 bytes have 21 bits for a codepoint. + // Characters written on 4 bytes have 21 bits for a codepoint. // We can't fit that on 16bit characters, so we use surrogates. var codepoint = ((c & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63); // Surrogates formula from wikipedia. @@ -986,10 +987,14 @@ jspb.BinaryDecoder.prototype.readString = function(length) { var high = ((codepoint >> 10) & 1023) + 0xD800; codeUnits.push(high, low); } + + // Avoid exceeding the maximum stack size when calling {@code apply}. + if (codeUnits.length >= 8192) { + result += String.fromCharCode.apply(null, codeUnits); + codeUnits.length = 0; + } } - // String.fromCharCode.apply is faster than manually appending characters on - // Chrome 25+, and generates no additional cons string garbage. - var result = String.fromCharCode.apply(null, codeUnits); + result += String.fromCharCode.apply(null, codeUnits); this.cursor_ = cursor; return result; }; diff --git a/third_party/protobuf/3.2.0/js/binary/decoder_test.js b/third_party/protobuf/3.2.0/js/binary/decoder_test.js index cb8aff969ddffc..d0139e293a61d2 100644 --- a/third_party/protobuf/3.2.0/js/binary/decoder_test.js +++ b/third_party/protobuf/3.2.0/js/binary/decoder_test.js @@ -210,6 +210,25 @@ describe('binaryDecoderTest', function() { assertEquals(hashD, decoder.readFixedHash64()); }); + /** + * Tests reading and writing large strings + */ + it('testLargeStrings', function() { + var encoder = new jspb.BinaryEncoder(); + + var len = 150000; + var long_string = ''; + for (var i = 0; i < len; i++) { + long_string += 'a'; + } + + encoder.writeString(long_string); + + var decoder = jspb.BinaryDecoder.alloc(encoder.end()); + + assertEquals(long_string, decoder.readString(len)); + }); + /** * Test encoding and decoding utf-8. */ diff --git a/third_party/protobuf/3.2.0/js/binary/encoder.js b/third_party/protobuf/3.2.0/js/binary/encoder.js index aee33e7e6810a1..f25935f1fa80ea 100644 --- a/third_party/protobuf/3.2.0/js/binary/encoder.js +++ b/third_party/protobuf/3.2.0/js/binary/encoder.js @@ -355,8 +355,8 @@ jspb.BinaryEncoder.prototype.writeInt64 = function(value) { */ jspb.BinaryEncoder.prototype.writeInt64String = function(value) { goog.asserts.assert(value == Math.floor(value)); - goog.asserts.assert((value >= -jspb.BinaryConstants.TWO_TO_63) && - (value < jspb.BinaryConstants.TWO_TO_63)); + goog.asserts.assert((+value >= -jspb.BinaryConstants.TWO_TO_63) && + (+value < jspb.BinaryConstants.TWO_TO_63)); jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(value)); this.writeSplitFixed64(jspb.utils.split64Low, jspb.utils.split64High); }; diff --git a/third_party/protobuf/3.2.0/js/binary/reader.js b/third_party/protobuf/3.2.0/js/binary/reader.js index 8c5a4e88dbb9f8..d5d698f79d8b8f 100644 --- a/third_party/protobuf/3.2.0/js/binary/reader.js +++ b/third_party/protobuf/3.2.0/js/binary/reader.js @@ -971,7 +971,7 @@ jspb.BinaryReader.prototype.readFixedHash64 = function() { /** * Reads a packed scalar field using the supplied raw reader function. - * @param {function()} decodeMethod + * @param {function(this:jspb.BinaryDecoder)} decodeMethod * @return {!Array} * @private */ diff --git a/third_party/protobuf/3.2.0/js/binary/utils.js b/third_party/protobuf/3.2.0/js/binary/utils.js index 3ecd08e9f3a63c..7702020b562684 100644 --- a/third_party/protobuf/3.2.0/js/binary/utils.js +++ b/third_party/protobuf/3.2.0/js/binary/utils.js @@ -430,7 +430,7 @@ jspb.utils.joinHash64 = function(bitsLow, bitsHigh) { /** * Individual digits for number->string conversion. - * @const {!Array.} + * @const {!Array.} */ jspb.utils.DIGITS = [ '0', '1', '2', '3', '4', '5', '6', '7', diff --git a/third_party/protobuf/3.2.0/js/binary/writer.js b/third_party/protobuf/3.2.0/js/binary/writer.js index c3009dbb546f06..672e94bd290d21 100644 --- a/third_party/protobuf/3.2.0/js/binary/writer.js +++ b/third_party/protobuf/3.2.0/js/binary/writer.js @@ -596,8 +596,8 @@ jspb.BinaryWriter.prototype.writeSint64 = function(field, value) { */ jspb.BinaryWriter.prototype.writeSint64String = function(field, value) { if (value == null) return; - goog.asserts.assert((value >= -jspb.BinaryConstants.TWO_TO_63) && - (value < jspb.BinaryConstants.TWO_TO_63)); + goog.asserts.assert((+value >= -jspb.BinaryConstants.TWO_TO_63) && + (+value < jspb.BinaryConstants.TWO_TO_63)); this.writeZigzagVarint64String_(field, value); }; diff --git a/third_party/protobuf/3.2.0/js/binary/writer_test.js b/third_party/protobuf/3.2.0/js/binary/writer_test.js index 83fcdf917f364a..118eecfc6cd13f 100644 --- a/third_party/protobuf/3.2.0/js/binary/writer_test.js +++ b/third_party/protobuf/3.2.0/js/binary/writer_test.js @@ -47,7 +47,7 @@ goog.require('jspb.BinaryWriter'); * @param {function()} func This function should throw an error when run. */ function assertFails(func) { - var e = assertThrows(func); + assertThrows(func); } diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/arith_test.js b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/arith_test.js new file mode 100644 index 00000000000000..89796bf7950791 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/arith_test.js @@ -0,0 +1,355 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/** + * @fileoverview Test cases for Int64-manipulation functions. + * + * Test suite is written using Jasmine -- see http://jasmine.github.io/ + * + * @author cfallin@google.com (Chris Fallin) + */ + +goog.require('goog.testing.asserts'); +goog.require('jspb.arith.Int64'); +goog.require('jspb.arith.UInt64'); + + +describe('binaryArithTest', function() { + /** + * Tests comparison operations. + */ + it('testCompare', function() { + var a = new jspb.arith.UInt64(1234, 5678); + var b = new jspb.arith.UInt64(1234, 5678); + assertEquals(a.cmp(b), 0); + assertEquals(b.cmp(a), 0); + b.lo -= 1; + assertEquals(a.cmp(b), 1); + assertEquals(b.cmp(a), -1); + b.lo += 2; + assertEquals(a.cmp(b), -1); + assertEquals(b.cmp(a), 1); + b.lo = a.lo; + b.hi = a.hi - 1; + assertEquals(a.cmp(b), 1); + assertEquals(b.cmp(a), -1); + + assertEquals(a.zero(), false); + assertEquals(a.msb(), false); + assertEquals(a.lsb(), false); + a.hi = 0; + a.lo = 0; + assertEquals(a.zero(), true); + a.hi = 0x80000000; + assertEquals(a.zero(), false); + assertEquals(a.msb(), true); + a.lo = 0x00000001; + assertEquals(a.lsb(), true); + }); + + + /** + * Tests shifts. + */ + it('testShifts', function() { + var a = new jspb.arith.UInt64(1, 0); + assertEquals(a.lo, 1); + assertEquals(a.hi, 0); + var orig = a; + a = a.leftShift(); + assertEquals(orig.lo, 1); // original unmodified. + assertEquals(orig.hi, 0); + assertEquals(a.lo, 2); + assertEquals(a.hi, 0); + a = a.leftShift(); + assertEquals(a.lo, 4); + assertEquals(a.hi, 0); + for (var i = 0; i < 29; i++) { + a = a.leftShift(); + } + assertEquals(a.lo, 0x80000000); + assertEquals(a.hi, 0); + a = a.leftShift(); + assertEquals(a.lo, 0); + assertEquals(a.hi, 1); + a = a.leftShift(); + assertEquals(a.lo, 0); + assertEquals(a.hi, 2); + a = a.rightShift(); + a = a.rightShift(); + assertEquals(a.lo, 0x80000000); + assertEquals(a.hi, 0); + a = a.rightShift(); + assertEquals(a.lo, 0x40000000); + assertEquals(a.hi, 0); + }); + + + /** + * Tests additions. + */ + it('testAdd', function() { + var a = new jspb.arith.UInt64(/* lo = */ 0x89abcdef, + /* hi = */ 0x01234567); + var b = new jspb.arith.UInt64(/* lo = */ 0xff52ab91, + /* hi = */ 0x92fa2123); + // Addition with carry. + var c = a.add(b); + assertEquals(a.lo, 0x89abcdef); // originals unmodified. + assertEquals(a.hi, 0x01234567); + assertEquals(b.lo, 0xff52ab91); + assertEquals(b.hi, 0x92fa2123); + assertEquals(c.lo, 0x88fe7980); + assertEquals(c.hi, 0x941d668b); + + // Simple addition without carry. + a.lo = 2; + a.hi = 0; + b.lo = 3; + b.hi = 0; + c = a.add(b); + assertEquals(c.lo, 5); + assertEquals(c.hi, 0); + }); + + + /** + * Test subtractions. + */ + it('testSub', function() { + var kLength = 10; + var hiValues = [0x1682ef32, + 0x583902f7, + 0xb62f5955, + 0x6ea99bbf, + 0x25a39c20, + 0x0700a08b, + 0x00f7304d, + 0x91a5b5af, + 0x89077fd2, + 0xe09e347c]; + var loValues = [0xe1538b18, + 0xbeacd556, + 0x74100758, + 0x96e3cb26, + 0x56c37c3f, + 0xe00b3f7d, + 0x859f25d7, + 0xc2ee614a, + 0xe1d21cd7, + 0x30aae6a4]; + for (var i = 0; i < kLength; i++) { + for (var j = 0; j < kLength; j++) { + var a = new jspb.arith.UInt64(loValues[i], hiValues[j]); + var b = new jspb.arith.UInt64(loValues[j], hiValues[i]); + var c = a.add(b).sub(b); + assertEquals(c.hi, a.hi); + assertEquals(c.lo, a.lo); + } + } + }); + + + /** + * Tests 32-by-32 multiplication. + */ + it('testMul32x32', function() { + var testData = [ + // a b low(a*b) high(a*b) + [0xc0abe2f8, 0x1607898a, 0x5de711b0, 0x109471b8], + [0x915eb3cb, 0x4fb66d0e, 0xbd0d441a, 0x2d43d0bc], + [0xfe4efe70, 0x80b48c37, 0xbcddea10, 0x7fdada0c], + [0xe222fd4a, 0xe43d524a, 0xd5e0eb64, 0xc99d549c], + [0xd171f469, 0xb94ebd01, 0x4be17969, 0x979bc4fa], + [0x829cc1df, 0xe2598b38, 0xf4157dc8, 0x737c12ad], + [0xf10c3767, 0x8382881e, 0x942b3612, 0x7bd428b8], + [0xb0f6dd24, 0x232597e1, 0x079c98a4, 0x184bbce7], + [0xfcdb05a7, 0x902f55bc, 0x636199a4, 0x8e69f412], + [0x0dd0bfa9, 0x916e27b1, 0x6e2542d9, 0x07d92e65] + ]; + + for (var i = 0; i < testData.length; i++) { + var a = testData[i][0] >>> 0; + var b = testData[i][1] >>> 0; + var cLow = testData[i][2] >>> 0; + var cHigh = testData[i][3] >>> 0; + var c = jspb.arith.UInt64.mul32x32(a, b); + assertEquals(c.lo, cLow); + assertEquals(c.hi, cHigh); + } + }); + + + /** + * Tests 64-by-32 multiplication. + */ + it('testMul', function() { + // 64x32 bits produces 96 bits of product. The multiplication function under + // test truncates the top 32 bits, so we compare against a 64-bit expected + // product. + var testData = [ + // low(a) high(a) low(a*b) high(a*b) + [0xec10955b, 0x360eb168, 0x4b7f3f5b, 0xbfcb7c59, 0x9517da5f], + [0x42b000fc, 0x9d101642, 0x6fa1ab72, 0x2584c438, 0x6a9e6d2b], + [0xf42d4fb4, 0xae366403, 0xa65a1000, 0x92434000, 0x1ff978df], + [0x17e2f56b, 0x25487693, 0xf13f98c7, 0x73794e2d, 0xa96b0c6a], + [0x492f241f, 0x76c0eb67, 0x7377ac44, 0xd4336c3c, 0xfc4b1ebe], + [0xd6b92321, 0xe184fa48, 0xd6e76904, 0x93141584, 0xcbf44da1], + [0x4bf007ea, 0x968c0a9e, 0xf5e4026a, 0x4fdb1ae4, 0x61b9fb7d], + [0x10a83be7, 0x2d685ba6, 0xc9e5fb7f, 0x2ad43499, 0x3742473d], + [0x2f261829, 0x1aca681a, 0x3d3494e3, 0x8213205b, 0x283719f8], + [0xe4f2ce21, 0x2e74b7bd, 0xd801b38b, 0xbc17feeb, 0xc6c44e0f] + ]; + + for (var i = 0; i < testData.length; i++) { + var a = new jspb.arith.UInt64(testData[i][0], testData[i][1]); + var prod = a.mul(testData[i][2]); + assertEquals(prod.lo, testData[i][3]); + assertEquals(prod.hi, testData[i][4]); + } + }); + + + /** + * Tests 64-div-by-32 division. + */ + it('testDiv', function() { + // Compute a/b, yielding quot = a/b and rem = a%b. + var testData = [ + // --- divisors in (0, 2^32-1) to test full divisor range + // low(a) high(a) b low(quot) high(quot) rem + [0x712443f1, 0xe85cefcc, 0xc1a7050b, 0x332c79ad, 0x00000001, 0x92ffa882], + [0x11912915, 0xb2699eb5, 0x30467cbe, 0xb21b4be4, 0x00000003, 0x283465dd], + [0x0d917982, 0x201f2a6e, 0x3f35bf03, 0x8217c8e4, 0x00000000, 0x153402d6], + [0xa072c108, 0x74020c96, 0xc60568fd, 0x95f9613e, 0x00000000, 0x3f4676c2], + [0xd845d5d8, 0xcdd235c4, 0x20426475, 0x6154e78b, 0x00000006, 0x202fb751], + [0xa4dbf71f, 0x9e90465e, 0xf08e022f, 0xa8be947f, 0x00000000, 0xbe43b5ce], + [0x3dbe627f, 0xa791f4b9, 0x28a5bd89, 0x1f5dfe93, 0x00000004, 0x02bf9ed4], + [0x5c1c53ee, 0xccf5102e, 0x198576e7, 0x07e3ae31, 0x00000008, 0x02ea8fb7], + [0xfef1e581, 0x04714067, 0xca6540c1, 0x059e73ec, 0x00000000, 0x31658095], + [0x1e2dd90c, 0x13dd6667, 0x8b2184c3, 0x248d1a42, 0x00000000, 0x4ca6d0c6], + // --- divisors in (0, 2^16-1) to test larger quotient high-words + // low(a) high(a) b low(quot) high(quot) rem + [0x86722b47, 0x2cd57c9a, 0x00003123, 0x2ae41b7a, 0x0000e995, 0x00000f99], + [0x1dd7884c, 0xf5e839bc, 0x00009eeb, 0x5c886242, 0x00018c21, 0x000099b6], + [0x5c53d625, 0x899fc7e5, 0x000087d7, 0xd625007a, 0x0001035c, 0x000019af], + [0x6932d932, 0x9d0a5488, 0x000051fb, 0x9d976143, 0x0001ea63, 0x00004981], + [0x4d18bb85, 0x0c92fb31, 0x00001d9f, 0x03265ab4, 0x00006cac, 0x000001b9], + [0xbe756768, 0xdea67ccb, 0x00008a03, 0x58add442, 0x00019cff, 0x000056a2], + [0xe2466f9a, 0x2521f114, 0x0000c350, 0xa0c0860d, 0x000030ab, 0x0000a48a], + [0xf00ddad1, 0xe2f5446a, 0x00002cfc, 0x762697a6, 0x00050b96, 0x00000b69], + [0xa879152a, 0x0a70e0a5, 0x00007cdf, 0xb44151b3, 0x00001567, 0x0000363d], + [0x7179a74c, 0x46083fff, 0x0000253c, 0x4d39ba6e, 0x0001e17f, 0x00000f84] + ]; + + for (var i = 0; i < testData.length; i++) { + var a = new jspb.arith.UInt64(testData[i][0], testData[i][1]); + var result = a.div(testData[i][2]); + var quotient = result[0]; + var remainder = result[1]; + assertEquals(quotient.lo, testData[i][3]); + assertEquals(quotient.hi, testData[i][4]); + assertEquals(remainder.lo, testData[i][5]); + } + }); + + + /** + * Tests .toString() and .fromString(). + */ + it('testStrings', function() { + var testData = [ + [0x5e84c935, 0xcae33d0e, '14619595947299359029'], + [0x62b3b8b8, 0x93480544, '10612738313170434232'], + [0x319bfb13, 0xc01c4172, '13843011313344445203'], + [0x5b8a65fb, 0xa5885b31, '11927883880638080507'], + [0x6bdb80f1, 0xb0d1b16b, '12741159895737008369'], + [0x4b82b442, 0x2e0d8c97, '3318463081876730946'], + [0x780d5208, 0x7d76752c, '9040542135845999112'], + [0x2e46800f, 0x0993778d, '690026616168284175'], + [0xf00a7e32, 0xcd8e3931, '14811839111111540274'], + [0x1baeccd6, 0x923048c4, '10533999535534820566'], + [0x03669d29, 0xbff3ab72, '13831587386756603177'], + [0x2526073e, 0x01affc81, '121593346566522686'], + [0xc24244e0, 0xd7f40d0e, '15561076969511732448'], + [0xc56a341e, 0xa68b66a7, '12000798502816461854'], + [0x8738d64d, 0xbfe78604, '13828168534871037517'], + [0x5baff03b, 0xd7572aea, '15516918227177304123'], + [0x4a843d8a, 0x864e132b, '9677693725920476554'], + [0x25b4e94d, 0x22b54dc6, '2500990681505655117'], + [0x6bbe664b, 0x55a5cc0e, '6171563226690381387'], + [0xee916c81, 0xb00aabb3, '12685140089732426881'] + ]; + + for (var i = 0; i < testData.length; i++) { + var a = new jspb.arith.UInt64(testData[i][0], testData[i][1]); + var roundtrip = jspb.arith.UInt64.fromString(a.toString()); + assertEquals(roundtrip.lo, a.lo); + assertEquals(roundtrip.hi, a.hi); + assertEquals(a.toString(), testData[i][2]); + } + }); + + + /** + * Tests signed Int64s. These are built on UInt64s, so we only need to test + * the explicit overrides: .toString() and .fromString(). + */ + it('testSignedInt64', function() { + var testStrings = [ + '-7847499644178593666', + '3771946501229139523', + '2872856549054995060', + '-5780049594274350904', + '3383785956695105201', + '2973055184857072610', + '-3879428459215627206', + '4589812431064156631', + '8484075557333689940', + '1075325817098092407', + '-4346697501012292314', + '2488620459718316637', + '6112655187423520672', + '-3655278273928612104', + '3439154019435803196', + '1004112478843763757', + '-6587790776614368413', + '664320065099714586', + '4760412909973292912', + '-7911903989602274672' + ]; + + for (var i = 0; i < testStrings.length; i++) { + var roundtrip = + jspb.arith.Int64.fromString(testStrings[i]).toString(); + assertEquals(roundtrip, testStrings[i]); + } + }); +}); diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/decoder_test.js b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/decoder_test.js new file mode 100644 index 00000000000000..ac3126484798a4 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/decoder_test.js @@ -0,0 +1,334 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/** + * @fileoverview Test cases for jspb's binary protocol buffer decoder. + * + * There are two particular magic numbers that need to be pointed out - + * 2^64-1025 is the largest number representable as both a double and an + * unsigned 64-bit integer, and 2^63-513 is the largest number representable as + * both a double and a signed 64-bit integer. + * + * Test suite is written using Jasmine -- see http://jasmine.github.io/ + * + * @author aappleby@google.com (Austin Appleby) + */ + +goog.require('goog.testing.asserts'); +goog.require('jspb.BinaryConstants'); +goog.require('jspb.BinaryDecoder'); +goog.require('jspb.BinaryEncoder'); + + +/** + * Tests encoding and decoding of unsigned types. + * @param {Function} readValue + * @param {Function} writeValue + * @param {number} epsilon + * @param {number} upperLimit + * @param {Function} filter + * @suppress {missingProperties|visibility} + */ +function doTestUnsignedValue(readValue, + writeValue, epsilon, upperLimit, filter) { + var encoder = new jspb.BinaryEncoder(); + + // Encode zero and limits. + writeValue.call(encoder, filter(0)); + writeValue.call(encoder, filter(epsilon)); + writeValue.call(encoder, filter(upperLimit)); + + // Encode positive values. + for (var cursor = epsilon; cursor < upperLimit; cursor *= 1.1) { + writeValue.call(encoder, filter(cursor)); + } + + var decoder = jspb.BinaryDecoder.alloc(encoder.end()); + + // Check zero and limits. + assertEquals(filter(0), readValue.call(decoder)); + assertEquals(filter(epsilon), readValue.call(decoder)); + assertEquals(filter(upperLimit), readValue.call(decoder)); + + // Check positive values. + for (var cursor = epsilon; cursor < upperLimit; cursor *= 1.1) { + if (filter(cursor) != readValue.call(decoder)) throw 'fail!'; + } + + // Encoding values outside the valid range should assert. + assertThrows(function() {writeValue.call(encoder, -1);}); + assertThrows(function() {writeValue.call(encoder, upperLimit * 1.1);}); +} + + +/** + * Tests encoding and decoding of signed types. + * @param {Function} readValue + * @param {Function} writeValue + * @param {number} epsilon + * @param {number} lowerLimit + * @param {number} upperLimit + * @param {Function} filter + * @suppress {missingProperties} + */ +function doTestSignedValue(readValue, + writeValue, epsilon, lowerLimit, upperLimit, filter) { + var encoder = new jspb.BinaryEncoder(); + + // Encode zero and limits. + writeValue.call(encoder, filter(lowerLimit)); + writeValue.call(encoder, filter(-epsilon)); + writeValue.call(encoder, filter(0)); + writeValue.call(encoder, filter(epsilon)); + writeValue.call(encoder, filter(upperLimit)); + + var inputValues = []; + + // Encode negative values. + for (var cursor = lowerLimit; cursor < -epsilon; cursor /= 1.1) { + var val = filter(cursor); + writeValue.call(encoder, val); + inputValues.push(val); + } + + // Encode positive values. + for (var cursor = epsilon; cursor < upperLimit; cursor *= 1.1) { + var val = filter(cursor); + writeValue.call(encoder, val); + inputValues.push(val); + } + + var decoder = jspb.BinaryDecoder.alloc(encoder.end()); + + // Check zero and limits. + assertEquals(filter(lowerLimit), readValue.call(decoder)); + assertEquals(filter(-epsilon), readValue.call(decoder)); + assertEquals(filter(0), readValue.call(decoder)); + assertEquals(filter(epsilon), readValue.call(decoder)); + assertEquals(filter(upperLimit), readValue.call(decoder)); + + // Verify decoded values. + for (var i = 0; i < inputValues.length; i++) { + assertEquals(inputValues[i], readValue.call(decoder)); + } + + // Encoding values outside the valid range should assert. + assertThrows(function() {writeValue.call(encoder, lowerLimit * 1.1);}); + assertThrows(function() {writeValue.call(encoder, upperLimit * 1.1);}); +} + +describe('binaryDecoderTest', function() { + /** + * Tests the decoder instance cache. + */ + it('testInstanceCache', /** @suppress {visibility} */ function() { + // Empty the instance caches. + jspb.BinaryDecoder.instanceCache_ = []; + + // Allocating and then freeing a decoder should put it in the instance + // cache. + jspb.BinaryDecoder.alloc().free(); + + assertEquals(1, jspb.BinaryDecoder.instanceCache_.length); + + // Allocating and then freeing three decoders should leave us with three in + // the cache. + + var decoder1 = jspb.BinaryDecoder.alloc(); + var decoder2 = jspb.BinaryDecoder.alloc(); + var decoder3 = jspb.BinaryDecoder.alloc(); + decoder1.free(); + decoder2.free(); + decoder3.free(); + + assertEquals(3, jspb.BinaryDecoder.instanceCache_.length); + }); + + + /** + * Tests reading 64-bit integers as hash strings. + */ + it('testHashStrings', function() { + var encoder = new jspb.BinaryEncoder(); + + var hashA = String.fromCharCode(0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00); + var hashB = String.fromCharCode(0x12, 0x34, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00); + var hashC = String.fromCharCode(0x12, 0x34, 0x56, 0x78, + 0x87, 0x65, 0x43, 0x21); + var hashD = String.fromCharCode(0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF); + + encoder.writeVarintHash64(hashA); + encoder.writeVarintHash64(hashB); + encoder.writeVarintHash64(hashC); + encoder.writeVarintHash64(hashD); + + encoder.writeFixedHash64(hashA); + encoder.writeFixedHash64(hashB); + encoder.writeFixedHash64(hashC); + encoder.writeFixedHash64(hashD); + + var decoder = jspb.BinaryDecoder.alloc(encoder.end()); + + assertEquals(hashA, decoder.readVarintHash64()); + assertEquals(hashB, decoder.readVarintHash64()); + assertEquals(hashC, decoder.readVarintHash64()); + assertEquals(hashD, decoder.readVarintHash64()); + + assertEquals(hashA, decoder.readFixedHash64()); + assertEquals(hashB, decoder.readFixedHash64()); + assertEquals(hashC, decoder.readFixedHash64()); + assertEquals(hashD, decoder.readFixedHash64()); + }); + + + /** + * Verifies that misuse of the decoder class triggers assertions. + * @suppress {checkTypes|visibility} + */ + it('testDecodeErrors', function() { + // Reading a value past the end of the stream should trigger an assertion. + var decoder = jspb.BinaryDecoder.alloc([0, 1, 2]); + assertThrows(function() {decoder.readUint64()}); + + // Overlong varints should trigger assertions. + decoder.setBlock([255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 0]); + assertThrows(function() {decoder.readUnsignedVarint64()}); + decoder.reset(); + assertThrows(function() {decoder.readSignedVarint64()}); + decoder.reset(); + assertThrows(function() {decoder.readZigzagVarint64()}); + + // Positive 32-bit varints encoded with 1 bits in positions 33 through 35 + // should trigger assertions. + decoder.setBlock([255, 255, 255, 255, 0x1F]); + assertThrows(function() {decoder.readUnsignedVarint32()}); + + decoder.setBlock([255, 255, 255, 255, 0x2F]); + assertThrows(function() {decoder.readUnsignedVarint32()}); + + decoder.setBlock([255, 255, 255, 255, 0x4F]); + assertThrows(function() {decoder.readUnsignedVarint32()}); + + // Negative 32-bit varints encoded with non-1 bits in the high dword should + // trigger assertions. + decoder.setBlock([255, 255, 255, 255, 255, 255, 0, 255, 255, 1]); + assertThrows(function() {decoder.readUnsignedVarint32()}); + + decoder.setBlock([255, 255, 255, 255, 255, 255, 255, 255, 255, 0]); + assertThrows(function() {decoder.readUnsignedVarint32()}); + }); + + + /** + * Tests encoding and decoding of unsigned integers. + */ + it('testUnsignedIntegers', function() { + doTestUnsignedValue( + jspb.BinaryDecoder.prototype.readUint8, + jspb.BinaryEncoder.prototype.writeUint8, + 1, 0xFF, Math.round); + + doTestUnsignedValue( + jspb.BinaryDecoder.prototype.readUint16, + jspb.BinaryEncoder.prototype.writeUint16, + 1, 0xFFFF, Math.round); + + doTestUnsignedValue( + jspb.BinaryDecoder.prototype.readUint32, + jspb.BinaryEncoder.prototype.writeUint32, + 1, 0xFFFFFFFF, Math.round); + + doTestUnsignedValue( + jspb.BinaryDecoder.prototype.readUint64, + jspb.BinaryEncoder.prototype.writeUint64, + 1, Math.pow(2, 64) - 1025, Math.round); + }); + + + /** + * Tests encoding and decoding of signed integers. + */ + it('testSignedIntegers', function() { + doTestSignedValue( + jspb.BinaryDecoder.prototype.readInt8, + jspb.BinaryEncoder.prototype.writeInt8, + 1, -0x80, 0x7F, Math.round); + + doTestSignedValue( + jspb.BinaryDecoder.prototype.readInt16, + jspb.BinaryEncoder.prototype.writeInt16, + 1, -0x8000, 0x7FFF, Math.round); + + doTestSignedValue( + jspb.BinaryDecoder.prototype.readInt32, + jspb.BinaryEncoder.prototype.writeInt32, + 1, -0x80000000, 0x7FFFFFFF, Math.round); + + doTestSignedValue( + jspb.BinaryDecoder.prototype.readInt64, + jspb.BinaryEncoder.prototype.writeInt64, + 1, -Math.pow(2, 63), Math.pow(2, 63) - 513, Math.round); + }); + + + /** + * Tests encoding and decoding of floats. + */ + it('testFloats', function() { + /** + * @param {number} x + * @return {number} + */ + function truncate(x) { + var temp = new Float32Array(1); + temp[0] = x; + return temp[0]; + } + doTestSignedValue( + jspb.BinaryDecoder.prototype.readFloat, + jspb.BinaryEncoder.prototype.writeFloat, + jspb.BinaryConstants.FLOAT32_EPS, + -jspb.BinaryConstants.FLOAT32_MAX, + jspb.BinaryConstants.FLOAT32_MAX, + truncate); + + doTestSignedValue( + jspb.BinaryDecoder.prototype.readDouble, + jspb.BinaryEncoder.prototype.writeDouble, + jspb.BinaryConstants.FLOAT64_EPS * 10, + -jspb.BinaryConstants.FLOAT64_MAX, + jspb.BinaryConstants.FLOAT64_MAX, + function(x) { return x; }); + }); +}); diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/proto_test.js b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/proto_test.js new file mode 100644 index 00000000000000..14d0f42e9549b6 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/proto_test.js @@ -0,0 +1,628 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Test suite is written using Jasmine -- see http://jasmine.github.io/ + +goog.require('goog.crypt.base64'); +goog.require('goog.testing.asserts'); +goog.require('jspb.Message'); + +// CommonJS-LoadFromFile: ../testbinary_pb proto.jspb.test +goog.require('proto.jspb.test.ExtendsWithMessage'); +goog.require('proto.jspb.test.ForeignEnum'); +goog.require('proto.jspb.test.ForeignMessage'); +goog.require('proto.jspb.test.TestAllTypes'); +goog.require('proto.jspb.test.TestExtendable'); +goog.require('proto.jspb.test.extendOptionalBool'); +goog.require('proto.jspb.test.extendOptionalBytes'); +goog.require('proto.jspb.test.extendOptionalDouble'); +goog.require('proto.jspb.test.extendOptionalFixed32'); +goog.require('proto.jspb.test.extendOptionalFixed64'); +goog.require('proto.jspb.test.extendOptionalFloat'); +goog.require('proto.jspb.test.extendOptionalForeignEnum'); +goog.require('proto.jspb.test.extendOptionalInt32'); +goog.require('proto.jspb.test.extendOptionalInt64'); +goog.require('proto.jspb.test.extendOptionalSfixed32'); +goog.require('proto.jspb.test.extendOptionalSfixed64'); +goog.require('proto.jspb.test.extendOptionalSint32'); +goog.require('proto.jspb.test.extendOptionalSint64'); +goog.require('proto.jspb.test.extendOptionalString'); +goog.require('proto.jspb.test.extendOptionalUint32'); +goog.require('proto.jspb.test.extendOptionalUint64'); +goog.require('proto.jspb.test.extendPackedRepeatedBoolList'); +goog.require('proto.jspb.test.extendPackedRepeatedDoubleList'); +goog.require('proto.jspb.test.extendPackedRepeatedFixed32List'); +goog.require('proto.jspb.test.extendPackedRepeatedFixed64List'); +goog.require('proto.jspb.test.extendPackedRepeatedFloatList'); +goog.require('proto.jspb.test.extendPackedRepeatedForeignEnumList'); +goog.require('proto.jspb.test.extendPackedRepeatedInt32List'); +goog.require('proto.jspb.test.extendPackedRepeatedInt64List'); +goog.require('proto.jspb.test.extendPackedRepeatedSfixed32List'); +goog.require('proto.jspb.test.extendPackedRepeatedSfixed64List'); +goog.require('proto.jspb.test.extendPackedRepeatedSint32List'); +goog.require('proto.jspb.test.extendPackedRepeatedSint64List'); +goog.require('proto.jspb.test.extendPackedRepeatedUint32List'); +goog.require('proto.jspb.test.extendPackedRepeatedUint64List'); +goog.require('proto.jspb.test.extendRepeatedBoolList'); +goog.require('proto.jspb.test.extendRepeatedBytesList'); +goog.require('proto.jspb.test.extendRepeatedDoubleList'); +goog.require('proto.jspb.test.extendRepeatedFixed32List'); +goog.require('proto.jspb.test.extendRepeatedFixed64List'); +goog.require('proto.jspb.test.extendRepeatedFloatList'); +goog.require('proto.jspb.test.extendRepeatedForeignEnumList'); +goog.require('proto.jspb.test.extendRepeatedInt32List'); +goog.require('proto.jspb.test.extendRepeatedInt64List'); +goog.require('proto.jspb.test.extendRepeatedSfixed32List'); +goog.require('proto.jspb.test.extendRepeatedSfixed64List'); +goog.require('proto.jspb.test.extendRepeatedSint32List'); +goog.require('proto.jspb.test.extendRepeatedSint64List'); +goog.require('proto.jspb.test.extendRepeatedStringList'); +goog.require('proto.jspb.test.extendRepeatedUint32List'); +goog.require('proto.jspb.test.extendRepeatedUint64List'); + + +var suite = {}; + +var BYTES = new Uint8Array([1, 2, 8, 9]); + +var BYTES_B64 = goog.crypt.base64.encodeByteArray(BYTES); + + +/** + * Helper: fill all fields on a TestAllTypes message. + * @param {proto.jspb.test.TestAllTypes} msg + */ +function fillAllFields(msg) { + msg.setOptionalInt32(-42); + // can be exactly represented by JS number (64-bit double, i.e., 52-bit + // mantissa). + msg.setOptionalInt64(-0x7fffffff00000000); + msg.setOptionalUint32(0x80000000); + msg.setOptionalUint64(0xf000000000000000); + msg.setOptionalSint32(-100); + msg.setOptionalSint64(-0x8000000000000000); + msg.setOptionalFixed32(1234); + msg.setOptionalFixed64(0x1234567800000000); + msg.setOptionalSfixed32(-1234); + msg.setOptionalSfixed64(-0x1234567800000000); + msg.setOptionalFloat(1.5); + msg.setOptionalDouble(-1.5); + msg.setOptionalBool(true); + msg.setOptionalString('hello world'); + msg.setOptionalBytes(BYTES); + msg.setOptionalGroup(new proto.jspb.test.TestAllTypes.OptionalGroup()); + msg.getOptionalGroup().setA(100); + var submsg = new proto.jspb.test.ForeignMessage(); + submsg.setC(16); + msg.setOptionalForeignMessage(submsg); + msg.setOptionalForeignEnum(proto.jspb.test.ForeignEnum.FOREIGN_FOO); + msg.setOneofString('oneof'); + + + msg.setRepeatedInt32List([-42]); + msg.setRepeatedInt64List([-0x7fffffff00000000]); + msg.setRepeatedUint32List([0x80000000]); + msg.setRepeatedUint64List([0xf000000000000000]); + msg.setRepeatedSint32List([-100]); + msg.setRepeatedSint64List([-0x8000000000000000]); + msg.setRepeatedFixed32List([1234]); + msg.setRepeatedFixed64List([0x1234567800000000]); + msg.setRepeatedSfixed32List([-1234]); + msg.setRepeatedSfixed64List([-0x1234567800000000]); + msg.setRepeatedFloatList([1.5]); + msg.setRepeatedDoubleList([-1.5]); + msg.setRepeatedBoolList([true]); + msg.setRepeatedStringList(['hello world']); + msg.setRepeatedBytesList([BYTES, BYTES]); + msg.setRepeatedGroupList([new proto.jspb.test.TestAllTypes.RepeatedGroup()]); + msg.getRepeatedGroupList()[0].setA(100); + submsg = new proto.jspb.test.ForeignMessage(); + submsg.setC(1000); + msg.setRepeatedForeignMessageList([submsg]); + msg.setRepeatedForeignEnumList([proto.jspb.test.ForeignEnum.FOREIGN_FOO]); + + msg.setPackedRepeatedInt32List([-42]); + msg.setPackedRepeatedInt64List([-0x7fffffff00000000]); + msg.setPackedRepeatedUint32List([0x80000000]); + msg.setPackedRepeatedUint64List([0xf000000000000000]); + msg.setPackedRepeatedSint32List([-100]); + msg.setPackedRepeatedSint64List([-0x8000000000000000]); + msg.setPackedRepeatedFixed32List([1234]); + msg.setPackedRepeatedFixed64List([0x1234567800000000]); + msg.setPackedRepeatedSfixed32List([-1234]); + msg.setPackedRepeatedSfixed64List([-0x1234567800000000]); + msg.setPackedRepeatedFloatList([1.5]); + msg.setPackedRepeatedDoubleList([-1.5]); + msg.setPackedRepeatedBoolList([true]); + +} + + +/** + * Helper: compare a bytes field to an expected value + * @param {Uint8Array|string} arr + * @param {Uint8Array} expected + * @return {boolean} + */ +function bytesCompare(arr, expected) { + if (goog.isString(arr)) { + arr = goog.crypt.base64.decodeStringToUint8Array(arr); + } + if (arr.length != expected.length) { + return false; + } + for (var i = 0; i < arr.length; i++) { + if (arr[i] != expected[i]) { + return false; + } + } + return true; +} + + +/** + * Helper: verify contents of given TestAllTypes message as set by + * fillAllFields(). + * @param {proto.jspb.test.TestAllTypes} original + * @param {proto.jspb.test.TestAllTypes} copy + */ +function checkAllFields(original, copy) { + assertTrue(jspb.Message.equals(original, copy)); + + assertEquals(copy.getOptionalInt32(), -42); + assertEquals(copy.getOptionalInt64(), -0x7fffffff00000000); + assertEquals(copy.getOptionalUint32(), 0x80000000); + assertEquals(copy.getOptionalUint64(), 0xf000000000000000); + assertEquals(copy.getOptionalSint32(), -100); + assertEquals(copy.getOptionalSint64(), -0x8000000000000000); + assertEquals(copy.getOptionalFixed32(), 1234); + assertEquals(copy.getOptionalFixed64(), 0x1234567800000000); + assertEquals(copy.getOptionalSfixed32(), -1234); + assertEquals(copy.getOptionalSfixed64(), -0x1234567800000000); + assertEquals(copy.getOptionalFloat(), 1.5); + assertEquals(copy.getOptionalDouble(), -1.5); + assertEquals(copy.getOptionalBool(), true); + assertEquals(copy.getOptionalString(), 'hello world'); + assertEquals(true, bytesCompare(copy.getOptionalBytes(), BYTES)); + assertEquals(true, bytesCompare(copy.getOptionalBytes_asU8(), BYTES)); + assertEquals( + copy.getOptionalBytes_asB64(), goog.crypt.base64.encodeByteArray(BYTES)); + + assertEquals(copy.getOptionalGroup().getA(), 100); + assertEquals(copy.getOptionalForeignMessage().getC(), 16); + assertEquals(copy.getOptionalForeignEnum(), + proto.jspb.test.ForeignEnum.FOREIGN_FOO); + + + assertEquals(copy.getOneofString(), 'oneof'); + assertEquals(copy.getOneofFieldCase(), + proto.jspb.test.TestAllTypes.OneofFieldCase.ONEOF_STRING); + + assertElementsEquals(copy.getRepeatedInt32List(), [-42]); + assertElementsEquals(copy.getRepeatedInt64List(), [-0x7fffffff00000000]); + assertElementsEquals(copy.getRepeatedUint32List(), [0x80000000]); + assertElementsEquals(copy.getRepeatedUint64List(), [0xf000000000000000]); + assertElementsEquals(copy.getRepeatedSint32List(), [-100]); + assertElementsEquals(copy.getRepeatedSint64List(), [-0x8000000000000000]); + assertElementsEquals(copy.getRepeatedFixed32List(), [1234]); + assertElementsEquals(copy.getRepeatedFixed64List(), [0x1234567800000000]); + assertElementsEquals(copy.getRepeatedSfixed32List(), [-1234]); + assertElementsEquals(copy.getRepeatedSfixed64List(), [-0x1234567800000000]); + assertElementsEquals(copy.getRepeatedFloatList(), [1.5]); + assertElementsEquals(copy.getRepeatedDoubleList(), [-1.5]); + assertElementsEquals(copy.getRepeatedBoolList(), [true]); + assertElementsEquals(copy.getRepeatedStringList(), ['hello world']); + assertEquals(copy.getRepeatedBytesList().length, 2); + assertEquals(true, bytesCompare(copy.getRepeatedBytesList_asU8()[0], BYTES)); + assertEquals(true, bytesCompare(copy.getRepeatedBytesList()[0], BYTES)); + assertEquals(true, bytesCompare(copy.getRepeatedBytesList_asU8()[1], BYTES)); + assertEquals(copy.getRepeatedBytesList_asB64()[0], BYTES_B64); + assertEquals(copy.getRepeatedBytesList_asB64()[1], BYTES_B64); + assertEquals(copy.getRepeatedGroupList().length, 1); + assertEquals(copy.getRepeatedGroupList()[0].getA(), 100); + assertEquals(copy.getRepeatedForeignMessageList().length, 1); + assertEquals(copy.getRepeatedForeignMessageList()[0].getC(), 1000); + assertElementsEquals(copy.getRepeatedForeignEnumList(), + [proto.jspb.test.ForeignEnum.FOREIGN_FOO]); + + assertElementsEquals(copy.getPackedRepeatedInt32List(), [-42]); + assertElementsEquals(copy.getPackedRepeatedInt64List(), + [-0x7fffffff00000000]); + assertElementsEquals(copy.getPackedRepeatedUint32List(), [0x80000000]); + assertElementsEquals(copy.getPackedRepeatedUint64List(), + [0xf000000000000000]); + assertElementsEquals(copy.getPackedRepeatedSint32List(), [-100]); + assertElementsEquals(copy.getPackedRepeatedSint64List(), + [-0x8000000000000000]); + assertElementsEquals(copy.getPackedRepeatedFixed32List(), [1234]); + assertElementsEquals(copy.getPackedRepeatedFixed64List(), + [0x1234567800000000]); + assertElementsEquals(copy.getPackedRepeatedSfixed32List(), [-1234]); + assertElementsEquals(copy.getPackedRepeatedSfixed64List(), + [-0x1234567800000000]); + assertElementsEquals(copy.getPackedRepeatedFloatList(), [1.5]); + assertElementsEquals(copy.getPackedRepeatedDoubleList(), [-1.5]); + +} + + +/** + * Helper: verify that all expected extensions are present. + * @param {!proto.jspb.test.TestExtendable} msg + */ +function checkExtensions(msg) { + assertEquals(-42, + msg.getExtension(proto.jspb.test.extendOptionalInt32)); + assertEquals(-0x7fffffff00000000, + msg.getExtension(proto.jspb.test.extendOptionalInt64)); + assertEquals(0x80000000, + msg.getExtension(proto.jspb.test.extendOptionalUint32)); + assertEquals(0xf000000000000000, + msg.getExtension(proto.jspb.test.extendOptionalUint64)); + assertEquals(-100, + msg.getExtension(proto.jspb.test.extendOptionalSint32)); + assertEquals(-0x8000000000000000, + msg.getExtension(proto.jspb.test.extendOptionalSint64)); + assertEquals(1234, + msg.getExtension(proto.jspb.test.extendOptionalFixed32)); + assertEquals(0x1234567800000000, + msg.getExtension(proto.jspb.test.extendOptionalFixed64)); + assertEquals(-1234, + msg.getExtension(proto.jspb.test.extendOptionalSfixed32)); + assertEquals(-0x1234567800000000, + msg.getExtension(proto.jspb.test.extendOptionalSfixed64)); + assertEquals(1.5, + msg.getExtension(proto.jspb.test.extendOptionalFloat)); + assertEquals(-1.5, + msg.getExtension(proto.jspb.test.extendOptionalDouble)); + assertEquals(true, + msg.getExtension(proto.jspb.test.extendOptionalBool)); + assertEquals('hello world', + msg.getExtension(proto.jspb.test.extendOptionalString)); + assertEquals( + true, bytesCompare( + msg.getExtension(proto.jspb.test.extendOptionalBytes), BYTES)); + assertEquals(16, + msg.getExtension( + proto.jspb.test.ExtendsWithMessage.optionalExtension).getFoo()); + + + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedInt32List), + [-42]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedInt64List), + [-0x7fffffff00000000]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedUint32List), + [0x80000000]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedUint64List), + [0xf000000000000000]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedSint32List), + [-100]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedSint64List), + [-0x8000000000000000]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedFixed32List), + [1234]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedFixed64List), + [0x1234567800000000]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedSfixed32List), + [-1234]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedSfixed64List), + [-0x1234567800000000]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedFloatList), + [1.5]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedDoubleList), + [-1.5]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedBoolList), + [true]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedStringList), + ['hello world']); + assertEquals( + true, + bytesCompare( + msg.getExtension(proto.jspb.test.extendRepeatedBytesList)[0], BYTES)); + assertEquals(1000, + msg.getExtension( + proto.jspb.test.ExtendsWithMessage.repeatedExtensionList)[0] + .getFoo()); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendRepeatedForeignEnumList), + [proto.jspb.test.ForeignEnum.FOREIGN_FOO]); + + + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedInt32List), + [-42]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedInt64List), + [-0x7fffffff00000000]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedUint32List), + [0x80000000]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedUint64List), + [0xf000000000000000]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedSint32List), + [-100]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedSint64List), + [-0x8000000000000000]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedFixed32List), + [1234]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedFixed64List), + [0x1234567800000000]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedSfixed32List), + [-1234]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedSfixed64List), + [-0x1234567800000000]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedFloatList), + [1.5]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedDoubleList), + [-1.5]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedBoolList), + [true]); + assertElementsEquals( + msg.getExtension(proto.jspb.test.extendPackedRepeatedForeignEnumList), + [proto.jspb.test.ForeignEnum.FOREIGN_FOO]); + +} + + +describe('protoBinaryTest', function() { + /** + * Tests a basic serialization-deserializaton round-trip with all supported + * field types (on the TestAllTypes message type). + */ + it('testRoundTrip', function() { + var msg = new proto.jspb.test.TestAllTypes(); + fillAllFields(msg); + var encoded = msg.serializeBinary(); + var decoded = proto.jspb.test.TestAllTypes.deserializeBinary(encoded); + checkAllFields(msg, decoded); + }); + + /** + * Test that base64 string and Uint8Array are interchangeable in bytes fields. + */ + it('testBytesFieldsGettersInterop', function() { + var msg = new proto.jspb.test.TestAllTypes(); + // Set from a base64 string and check all the getters work. + msg.setOptionalBytes(BYTES_B64); + assertTrue(bytesCompare(msg.getOptionalBytes_asU8(), BYTES)); + assertTrue(bytesCompare(msg.getOptionalBytes_asB64(), BYTES)); + assertTrue(bytesCompare(msg.getOptionalBytes(), BYTES)); + + // Test binary serialize round trip doesn't break it. + msg = proto.jspb.test.TestAllTypes.deserializeBinary(msg.serializeBinary()); + assertTrue(bytesCompare(msg.getOptionalBytes_asU8(), BYTES)); + assertTrue(bytesCompare(msg.getOptionalBytes_asB64(), BYTES)); + assertTrue(bytesCompare(msg.getOptionalBytes(), BYTES)); + + msg = new proto.jspb.test.TestAllTypes(); + // Set from a Uint8Array and check all the getters work. + msg.setOptionalBytes(BYTES); + assertTrue(bytesCompare(msg.getOptionalBytes_asU8(), BYTES)); + assertTrue(bytesCompare(msg.getOptionalBytes_asB64(), BYTES)); + assertTrue(bytesCompare(msg.getOptionalBytes(), BYTES)); + + }); + + /** + * Test that bytes setters will receive result of any of the getters. + */ + it('testBytesFieldsSettersInterop', function() { + var msg = new proto.jspb.test.TestAllTypes(); + msg.setOptionalBytes(BYTES); + assertTrue(bytesCompare(msg.getOptionalBytes(), BYTES)); + + msg.setOptionalBytes(msg.getOptionalBytes()); + assertTrue(bytesCompare(msg.getOptionalBytes(), BYTES)); + msg.setOptionalBytes(msg.getOptionalBytes_asB64()); + assertTrue(bytesCompare(msg.getOptionalBytes(), BYTES)); + msg.setOptionalBytes(msg.getOptionalBytes_asU8()); + assertTrue(bytesCompare(msg.getOptionalBytes(), BYTES)); + }); + + /** + * Test that bytes setters will receive result of any of the getters. + */ + it('testRepeatedBytesGetters', function() { + var msg = new proto.jspb.test.TestAllTypes(); + + function assertGetters() { + assertTrue(goog.isString(msg.getRepeatedBytesList_asB64()[0])); + assertTrue(goog.isString(msg.getRepeatedBytesList_asB64()[1])); + assertTrue(msg.getRepeatedBytesList_asU8()[0] instanceof Uint8Array); + assertTrue(msg.getRepeatedBytesList_asU8()[1] instanceof Uint8Array); + + assertTrue(bytesCompare(msg.getRepeatedBytesList()[0], BYTES)); + assertTrue(bytesCompare(msg.getRepeatedBytesList()[1], BYTES)); + assertTrue(bytesCompare(msg.getRepeatedBytesList_asB64()[0], BYTES)); + assertTrue(bytesCompare(msg.getRepeatedBytesList_asB64()[1], BYTES)); + assertTrue(bytesCompare(msg.getRepeatedBytesList_asU8()[0], BYTES)); + assertTrue(bytesCompare(msg.getRepeatedBytesList_asU8()[1], BYTES)); + } + + msg.setRepeatedBytesList([BYTES, BYTES]); + assertGetters(); + + msg.setRepeatedBytesList([BYTES_B64, BYTES_B64]); + assertGetters(); + + msg.setRepeatedBytesList(null); + assertEquals(0, msg.getRepeatedBytesList().length); + assertEquals(0, msg.getRepeatedBytesList_asB64().length); + assertEquals(0, msg.getRepeatedBytesList_asU8().length); + }); + + /** + * Helper: fill all extension values. + * @param {proto.jspb.test.TestExtendable} msg + */ + function fillExtensions(msg) { + msg.setExtension( + proto.jspb.test.extendOptionalInt32, -42); + msg.setExtension( + proto.jspb.test.extendOptionalInt64, -0x7fffffff00000000); + msg.setExtension( + proto.jspb.test.extendOptionalUint32, 0x80000000); + msg.setExtension( + proto.jspb.test.extendOptionalUint64, 0xf000000000000000); + msg.setExtension( + proto.jspb.test.extendOptionalSint32, -100); + msg.setExtension( + proto.jspb.test.extendOptionalSint64, -0x8000000000000000); + msg.setExtension( + proto.jspb.test.extendOptionalFixed32, 1234); + msg.setExtension( + proto.jspb.test.extendOptionalFixed64, 0x1234567800000000); + msg.setExtension( + proto.jspb.test.extendOptionalSfixed32, -1234); + msg.setExtension( + proto.jspb.test.extendOptionalSfixed64, -0x1234567800000000); + msg.setExtension( + proto.jspb.test.extendOptionalFloat, 1.5); + msg.setExtension( + proto.jspb.test.extendOptionalDouble, -1.5); + msg.setExtension( + proto.jspb.test.extendOptionalBool, true); + msg.setExtension( + proto.jspb.test.extendOptionalString, 'hello world'); + msg.setExtension(proto.jspb.test.extendOptionalBytes, BYTES); + var submsg = new proto.jspb.test.ExtendsWithMessage(); + submsg.setFoo(16); + msg.setExtension( + proto.jspb.test.ExtendsWithMessage.optionalExtension, submsg); + msg.setExtension( + proto.jspb.test.extendOptionalForeignEnum, + proto.jspb.test.ForeignEnum.FOREIGN_FOO); + + + msg.setExtension( + proto.jspb.test.extendRepeatedInt32List, [-42]); + msg.setExtension( + proto.jspb.test.extendRepeatedInt64List, [-0x7fffffff00000000]); + msg.setExtension( + proto.jspb.test.extendRepeatedUint32List, [0x80000000]); + msg.setExtension( + proto.jspb.test.extendRepeatedUint64List, [0xf000000000000000]); + msg.setExtension( + proto.jspb.test.extendRepeatedSint32List, [-100]); + msg.setExtension( + proto.jspb.test.extendRepeatedSint64List, [-0x8000000000000000]); + msg.setExtension( + proto.jspb.test.extendRepeatedFixed32List, [1234]); + msg.setExtension( + proto.jspb.test.extendRepeatedFixed64List, [0x1234567800000000]); + msg.setExtension( + proto.jspb.test.extendRepeatedSfixed32List, [-1234]); + msg.setExtension( + proto.jspb.test.extendRepeatedSfixed64List, [-0x1234567800000000]); + msg.setExtension( + proto.jspb.test.extendRepeatedFloatList, [1.5]); + msg.setExtension( + proto.jspb.test.extendRepeatedDoubleList, [-1.5]); + msg.setExtension( + proto.jspb.test.extendRepeatedBoolList, [true]); + msg.setExtension( + proto.jspb.test.extendRepeatedStringList, ['hello world']); + msg.setExtension(proto.jspb.test.extendRepeatedBytesList, [BYTES]); + submsg = new proto.jspb.test.ExtendsWithMessage(); + submsg.setFoo(1000); + msg.setExtension( + proto.jspb.test.ExtendsWithMessage.repeatedExtensionList, [submsg]); + msg.setExtension(proto.jspb.test.extendRepeatedForeignEnumList, + [proto.jspb.test.ForeignEnum.FOREIGN_FOO]); + + + msg.setExtension( + proto.jspb.test.extendPackedRepeatedInt32List, [-42]); + msg.setExtension( + proto.jspb.test.extendPackedRepeatedInt64List, [-0x7fffffff00000000]); + msg.setExtension( + proto.jspb.test.extendPackedRepeatedUint32List, [0x80000000]); + msg.setExtension( + proto.jspb.test.extendPackedRepeatedUint64List, [0xf000000000000000]); + msg.setExtension( + proto.jspb.test.extendPackedRepeatedSint32List, [-100]); + msg.setExtension( + proto.jspb.test.extendPackedRepeatedSint64List, [-0x8000000000000000]); + msg.setExtension( + proto.jspb.test.extendPackedRepeatedFixed32List, [1234]); + msg.setExtension( + proto.jspb.test.extendPackedRepeatedFixed64List, [0x1234567800000000]); + msg.setExtension( + proto.jspb.test.extendPackedRepeatedSfixed32List, [-1234]); + msg.setExtension( + proto.jspb.test.extendPackedRepeatedSfixed64List, + [-0x1234567800000000]); + msg.setExtension( + proto.jspb.test.extendPackedRepeatedFloatList, [1.5]); + msg.setExtension( + proto.jspb.test.extendPackedRepeatedDoubleList, [-1.5]); + msg.setExtension( + proto.jspb.test.extendPackedRepeatedBoolList, [true]); + msg.setExtension(proto.jspb.test.extendPackedRepeatedForeignEnumList, + [proto.jspb.test.ForeignEnum.FOREIGN_FOO]); + + } + + + /** + * Tests extension serialization and deserialization. + */ + it('testExtensions', function() { + var msg = new proto.jspb.test.TestExtendable(); + fillExtensions(msg); + var encoded = msg.serializeBinary(); + var decoded = proto.jspb.test.TestExtendable.deserializeBinary(encoded); + checkExtensions(decoded); + }); +}); diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/reader_test.js b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/reader_test.js new file mode 100644 index 00000000000000..957113859e5d2e --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/reader_test.js @@ -0,0 +1,922 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/** + * @fileoverview Test cases for jspb's binary protocol buffer reader. + * + * There are two particular magic numbers that need to be pointed out - + * 2^64-1025 is the largest number representable as both a double and an + * unsigned 64-bit integer, and 2^63-513 is the largest number representable as + * both a double and a signed 64-bit integer. + * + * Test suite is written using Jasmine -- see http://jasmine.github.io/ + * + * @author aappleby@google.com (Austin Appleby) + */ + +goog.require('goog.testing.asserts'); +goog.require('jspb.BinaryConstants'); +goog.require('jspb.BinaryDecoder'); +goog.require('jspb.BinaryReader'); +goog.require('jspb.BinaryWriter'); + + + +describe('binaryReaderTest', function() { + /** + * Tests the reader instance cache. + */ + it('testInstanceCaches', /** @suppress {visibility} */ function() { + var writer = new jspb.BinaryWriter(); + var dummyMessage = /** @type {!jspb.BinaryMessage} */({}); + writer.writeMessage(1, dummyMessage, goog.nullFunction); + writer.writeMessage(2, dummyMessage, goog.nullFunction); + + var buffer = writer.getResultBuffer(); + + // Empty the instance caches. + jspb.BinaryReader.instanceCache_ = []; + + // Allocating and then freeing three decoders should leave us with three in + // the cache. + + var decoder1 = jspb.BinaryDecoder.alloc(); + var decoder2 = jspb.BinaryDecoder.alloc(); + var decoder3 = jspb.BinaryDecoder.alloc(); + decoder1.free(); + decoder2.free(); + decoder3.free(); + + assertEquals(3, jspb.BinaryDecoder.instanceCache_.length); + assertEquals(0, jspb.BinaryReader.instanceCache_.length); + + // Allocating and then freeing a reader should remove one decoder from its + // cache, but it should stay stuck to the reader afterwards since we can't + // have a reader without a decoder. + jspb.BinaryReader.alloc().free(); + + assertEquals(2, jspb.BinaryDecoder.instanceCache_.length); + assertEquals(1, jspb.BinaryReader.instanceCache_.length); + + // Allocating a reader should remove a reader from the cache. + var reader = jspb.BinaryReader.alloc(buffer); + + assertEquals(2, jspb.BinaryDecoder.instanceCache_.length); + assertEquals(0, jspb.BinaryReader.instanceCache_.length); + + // Processing the message reuses the current reader. + reader.nextField(); + assertEquals(1, reader.getFieldNumber()); + reader.readMessage(dummyMessage, function() { + assertEquals(0, jspb.BinaryReader.instanceCache_.length); + }); + + reader.nextField(); + assertEquals(2, reader.getFieldNumber()); + reader.readMessage(dummyMessage, function() { + assertEquals(0, jspb.BinaryReader.instanceCache_.length); + }); + + assertEquals(false, reader.nextField()); + + assertEquals(2, jspb.BinaryDecoder.instanceCache_.length); + assertEquals(0, jspb.BinaryReader.instanceCache_.length); + + // Freeing the reader should put it back into the cache. + reader.free(); + + assertEquals(2, jspb.BinaryDecoder.instanceCache_.length); + assertEquals(1, jspb.BinaryReader.instanceCache_.length); + }); + + + /** + * @param {number} x + * @return {number} + */ + function truncate(x) { + var temp = new Float32Array(1); + temp[0] = x; + return temp[0]; + } + + + /** + * Verifies that misuse of the reader class triggers assertions. + */ + it('testReadErrors', /** @suppress {checkTypes|visibility} */ function() { + // Calling readMessage on a non-delimited field should trigger an + // assertion. + var reader = jspb.BinaryReader.alloc([8, 1]); + var dummyMessage = /** @type {!jspb.BinaryMessage} */({}); + reader.nextField(); + assertThrows(function() { + reader.readMessage(dummyMessage, goog.nullFunction); + }); + + // Reading past the end of the stream should trigger an assertion. + reader = jspb.BinaryReader.alloc([9, 1]); + reader.nextField(); + assertThrows(function() {reader.readFixed64()}); + + // Reading past the end of a submessage should trigger an assertion. + reader = jspb.BinaryReader.alloc([10, 4, 13, 1, 1, 1]); + reader.nextField(); + reader.readMessage(dummyMessage, function() { + reader.nextField(); + assertThrows(function() {reader.readFixed32()}); + }); + + // Skipping an invalid field should trigger an assertion. + reader = jspb.BinaryReader.alloc([12, 1]); + reader.nextWireType_ = 1000; + assertThrows(function() {reader.skipField()}); + + // Reading fields with the wrong wire type should assert. + reader = jspb.BinaryReader.alloc([9, 0, 0, 0, 0, 0, 0, 0, 0]); + reader.nextField(); + assertThrows(function() {reader.readInt32()}); + assertThrows(function() {reader.readInt32String()}); + assertThrows(function() {reader.readInt64()}); + assertThrows(function() {reader.readInt64String()}); + assertThrows(function() {reader.readUint32()}); + assertThrows(function() {reader.readUint32String()}); + assertThrows(function() {reader.readUint64()}); + assertThrows(function() {reader.readUint64String()}); + assertThrows(function() {reader.readSint32()}); + assertThrows(function() {reader.readBool()}); + assertThrows(function() {reader.readEnum()}); + + reader = jspb.BinaryReader.alloc([8, 1]); + reader.nextField(); + assertThrows(function() {reader.readFixed32()}); + assertThrows(function() {reader.readFixed64()}); + assertThrows(function() {reader.readSfixed32()}); + assertThrows(function() {reader.readSfixed64()}); + assertThrows(function() {reader.readFloat()}); + assertThrows(function() {reader.readDouble()}); + + assertThrows(function() {reader.readString()}); + assertThrows(function() {reader.readBytes()}); + }); + + + /** + * Tests encoding and decoding of unsigned field types. + * @param {Function} readField + * @param {Function} writeField + * @param {number} epsilon + * @param {number} upperLimit + * @param {Function} filter + * @private + * @suppress {missingProperties} + */ + var doTestUnsignedField_ = function(readField, + writeField, epsilon, upperLimit, filter) { + assertNotNull(readField); + assertNotNull(writeField); + + var writer = new jspb.BinaryWriter(); + + // Encode zero and limits. + writeField.call(writer, 1, filter(0)); + writeField.call(writer, 2, filter(epsilon)); + writeField.call(writer, 3, filter(upperLimit)); + + // Encode positive values. + for (var cursor = epsilon; cursor < upperLimit; cursor *= 1.1) { + writeField.call(writer, 4, filter(cursor)); + } + + var reader = jspb.BinaryReader.alloc(writer.getResultBuffer()); + + // Check zero and limits. + reader.nextField(); + assertEquals(1, reader.getFieldNumber()); + assertEquals(filter(0), readField.call(reader)); + + reader.nextField(); + assertEquals(2, reader.getFieldNumber()); + assertEquals(filter(epsilon), readField.call(reader)); + + reader.nextField(); + assertEquals(3, reader.getFieldNumber()); + assertEquals(filter(upperLimit), readField.call(reader)); + + // Check positive values. + for (var cursor = epsilon; cursor < upperLimit; cursor *= 1.1) { + reader.nextField(); + if (4 != reader.getFieldNumber()) throw 'fail!'; + if (filter(cursor) != readField.call(reader)) throw 'fail!'; + } + }; + + + /** + * Tests encoding and decoding of signed field types. + * @param {Function} readField + * @param {Function} writeField + * @param {number} epsilon + * @param {number} lowerLimit + * @param {number} upperLimit + * @param {Function} filter + * @private + * @suppress {missingProperties} + */ + var doTestSignedField_ = function(readField, + writeField, epsilon, lowerLimit, upperLimit, filter) { + var writer = new jspb.BinaryWriter(); + + // Encode zero and limits. + writeField.call(writer, 1, filter(lowerLimit)); + writeField.call(writer, 2, filter(-epsilon)); + writeField.call(writer, 3, filter(0)); + writeField.call(writer, 4, filter(epsilon)); + writeField.call(writer, 5, filter(upperLimit)); + + var inputValues = []; + + // Encode negative values. + for (var cursor = lowerLimit; cursor < -epsilon; cursor /= 1.1) { + var val = filter(cursor); + writeField.call(writer, 6, val); + inputValues.push({ + fieldNumber: 6, + value: val + }); + } + + // Encode positive values. + for (var cursor = epsilon; cursor < upperLimit; cursor *= 1.1) { + var val = filter(cursor); + writeField.call(writer, 7, val); + inputValues.push({ + fieldNumber: 7, + value: val + }); + } + + var reader = jspb.BinaryReader.alloc(writer.getResultBuffer()); + + // Check zero and limits. + reader.nextField(); + assertEquals(1, reader.getFieldNumber()); + assertEquals(filter(lowerLimit), readField.call(reader)); + + reader.nextField(); + assertEquals(2, reader.getFieldNumber()); + assertEquals(filter(-epsilon), readField.call(reader)); + + reader.nextField(); + assertEquals(3, reader.getFieldNumber()); + assertEquals(filter(0), readField.call(reader)); + + reader.nextField(); + assertEquals(4, reader.getFieldNumber()); + assertEquals(filter(epsilon), readField.call(reader)); + + reader.nextField(); + assertEquals(5, reader.getFieldNumber()); + assertEquals(filter(upperLimit), readField.call(reader)); + + for (var i = 0; i < inputValues.length; i++) { + var expected = inputValues[i]; + reader.nextField(); + assertEquals(expected.fieldNumber, reader.getFieldNumber()); + assertEquals(expected.value, readField.call(reader)); + } + }; + + + /** + * Tests fields that use varint encoding. + */ + it('testVarintFields', function() { + assertNotUndefined(jspb.BinaryReader.prototype.readUint32); + assertNotUndefined(jspb.BinaryWriter.prototype.writeUint32); + assertNotUndefined(jspb.BinaryReader.prototype.readUint64); + assertNotUndefined(jspb.BinaryWriter.prototype.writeUint64); + assertNotUndefined(jspb.BinaryReader.prototype.readBool); + assertNotUndefined(jspb.BinaryWriter.prototype.writeBool); + doTestUnsignedField_( + jspb.BinaryReader.prototype.readUint32, + jspb.BinaryWriter.prototype.writeUint32, + 1, Math.pow(2, 32) - 1, Math.round); + + doTestUnsignedField_( + jspb.BinaryReader.prototype.readUint64, + jspb.BinaryWriter.prototype.writeUint64, + 1, Math.pow(2, 64) - 1025, Math.round); + + doTestSignedField_( + jspb.BinaryReader.prototype.readInt32, + jspb.BinaryWriter.prototype.writeInt32, + 1, -Math.pow(2, 31), Math.pow(2, 31) - 1, Math.round); + + doTestSignedField_( + jspb.BinaryReader.prototype.readInt64, + jspb.BinaryWriter.prototype.writeInt64, + 1, -Math.pow(2, 63), Math.pow(2, 63) - 513, Math.round); + + doTestSignedField_( + jspb.BinaryReader.prototype.readEnum, + jspb.BinaryWriter.prototype.writeEnum, + 1, -Math.pow(2, 31), Math.pow(2, 31) - 1, Math.round); + + doTestUnsignedField_( + jspb.BinaryReader.prototype.readBool, + jspb.BinaryWriter.prototype.writeBool, + 1, 1, function(x) { return !!x; }); + }); + + + /** + * Tests reading a field from hexadecimal string (format: '08 BE EF'). + * @param {Function} readField + * @param {number} expected + * @param {string} hexString + */ + function doTestHexStringVarint_(readField, expected, hexString) { + var bytesCount = (hexString.length + 1) / 3; + var bytes = new Uint8Array(bytesCount); + for (var i = 0; i < bytesCount; i++) { + bytes[i] = parseInt(hexString.substring(i * 3, i * 3 + 2), 16); + } + var reader = jspb.BinaryReader.alloc(bytes); + reader.nextField(); + assertEquals(expected, readField.call(reader)); + } + + + /** + * Tests non-canonical redundant varint decoding. + */ + it('testRedundantVarintFields', function() { + assertNotNull(jspb.BinaryReader.prototype.readUint32); + assertNotNull(jspb.BinaryReader.prototype.readUint64); + assertNotNull(jspb.BinaryReader.prototype.readSint32); + assertNotNull(jspb.BinaryReader.prototype.readSint64); + + // uint32 and sint32 take no more than 5 bytes + // 08 - field prefix (type = 0 means varint) + doTestHexStringVarint_( + jspb.BinaryReader.prototype.readUint32, + 12, '08 8C 80 80 80 00'); + + // 11 stands for -6 in zigzag encoding + doTestHexStringVarint_( + jspb.BinaryReader.prototype.readSint32, + -6, '08 8B 80 80 80 00'); + + // uint64 and sint64 take no more than 10 bytes + // 08 - field prefix (type = 0 means varint) + doTestHexStringVarint_( + jspb.BinaryReader.prototype.readUint64, + 12, '08 8C 80 80 80 80 80 80 80 80 00'); + + // 11 stands for -6 in zigzag encoding + doTestHexStringVarint_( + jspb.BinaryReader.prototype.readSint64, + -6, '08 8B 80 80 80 80 80 80 80 80 00'); + }); + + + /** + * Tests 64-bit fields that are handled as strings. + */ + it('testStringInt64Fields', function() { + var writer = new jspb.BinaryWriter(); + + var testSignedData = [ + '2730538252207801776', + '-2688470994844604560', + '3398529779486536359', + '3568577411627971000', + '272477188847484900', + '-6649058714086158188', + '-7695254765712060806', + '-4525541438037104029', + '-4993706538836508568', + '4990160321893729138' + ]; + var testUnsignedData = [ + '7822732630241694882', + '6753602971916687352', + '2399935075244442116', + '8724292567325338867', + '16948784802625696584', + '4136275908516066934', + '3575388346793700364', + '5167142028379259461', + '1557573948689737699', + '17100725280812548567' + ]; + + for (var i = 0; i < testSignedData.length; i++) { + writer.writeInt64String(2 * i + 1, testSignedData[i]); + writer.writeUint64String(2 * i + 2, testUnsignedData[i]); + } + + var reader = jspb.BinaryReader.alloc(writer.getResultBuffer()); + + for (var i = 0; i < testSignedData.length; i++) { + reader.nextField(); + assertEquals(2 * i + 1, reader.getFieldNumber()); + assertEquals(testSignedData[i], reader.readInt64String()); + reader.nextField(); + assertEquals(2 * i + 2, reader.getFieldNumber()); + assertEquals(testUnsignedData[i], reader.readUint64String()); + } + }); + + + /** + * Tests fields that use zigzag encoding. + */ + it('testZigzagFields', function() { + doTestSignedField_( + jspb.BinaryReader.prototype.readSint32, + jspb.BinaryWriter.prototype.writeSint32, + 1, -Math.pow(2, 31), Math.pow(2, 31) - 1, Math.round); + + doTestSignedField_( + jspb.BinaryReader.prototype.readSint64, + jspb.BinaryWriter.prototype.writeSint64, + 1, -Math.pow(2, 63), Math.pow(2, 63) - 513, Math.round); + }); + + + /** + * Tests fields that use fixed-length encoding. + */ + it('testFixedFields', function() { + doTestUnsignedField_( + jspb.BinaryReader.prototype.readFixed32, + jspb.BinaryWriter.prototype.writeFixed32, + 1, Math.pow(2, 32) - 1, Math.round); + + doTestUnsignedField_( + jspb.BinaryReader.prototype.readFixed64, + jspb.BinaryWriter.prototype.writeFixed64, + 1, Math.pow(2, 64) - 1025, Math.round); + + doTestSignedField_( + jspb.BinaryReader.prototype.readSfixed32, + jspb.BinaryWriter.prototype.writeSfixed32, + 1, -Math.pow(2, 31), Math.pow(2, 31) - 1, Math.round); + + doTestSignedField_( + jspb.BinaryReader.prototype.readSfixed64, + jspb.BinaryWriter.prototype.writeSfixed64, + 1, -Math.pow(2, 63), Math.pow(2, 63) - 513, Math.round); + }); + + + /** + * Tests floating point fields. + */ + it('testFloatFields', function() { + doTestSignedField_( + jspb.BinaryReader.prototype.readFloat, + jspb.BinaryWriter.prototype.writeFloat, + jspb.BinaryConstants.FLOAT32_MIN, + -jspb.BinaryConstants.FLOAT32_MAX, + jspb.BinaryConstants.FLOAT32_MAX, + truncate); + + doTestSignedField_( + jspb.BinaryReader.prototype.readDouble, + jspb.BinaryWriter.prototype.writeDouble, + jspb.BinaryConstants.FLOAT64_EPS * 10, + -jspb.BinaryConstants.FLOAT64_MIN, + jspb.BinaryConstants.FLOAT64_MIN, + function(x) { return x; }); + }); + + + /** + * Tests length-delimited string fields. + */ + it('testStringFields', function() { + var s1 = 'The quick brown fox jumps over the lazy dog.'; + var s2 = '人人生而自由,在尊嚴和權利上一律平等。'; + + var writer = new jspb.BinaryWriter(); + + writer.writeString(1, s1); + writer.writeString(2, s2); + + var reader = jspb.BinaryReader.alloc(writer.getResultBuffer()); + + reader.nextField(); + assertEquals(1, reader.getFieldNumber()); + assertEquals(s1, reader.readString()); + + reader.nextField(); + assertEquals(2, reader.getFieldNumber()); + assertEquals(s2, reader.readString()); + }); + + + /** + * Tests length-delimited byte fields. + */ + it('testByteFields', function() { + var message = []; + var lowerLimit = 1; + var upperLimit = 256; + var scale = 1.1; + + var writer = new jspb.BinaryWriter(); + + for (var cursor = lowerLimit; cursor < upperLimit; cursor *= 1.1) { + var len = Math.round(cursor); + var bytes = []; + for (var i = 0; i < len; i++) bytes.push(i % 256); + + writer.writeBytes(len, bytes); + } + + var reader = jspb.BinaryReader.alloc(writer.getResultBuffer()); + + for (var cursor = lowerLimit; reader.nextField(); cursor *= 1.1) { + var len = Math.round(cursor); + if (len != reader.getFieldNumber()) throw 'fail!'; + + var bytes = reader.readBytes(); + if (len != bytes.length) throw 'fail!'; + for (var i = 0; i < bytes.length; i++) { + if (i % 256 != bytes[i]) throw 'fail!'; + } + } + }); + + + /** + * Tests nested messages. + */ + it('testNesting', function() { + var writer = new jspb.BinaryWriter(); + var dummyMessage = /** @type {!jspb.BinaryMessage} */({}); + + writer.writeInt32(1, 100); + + // Add one message with 3 int fields. + writer.writeMessage(2, dummyMessage, function() { + writer.writeInt32(3, 300); + writer.writeInt32(4, 400); + writer.writeInt32(5, 500); + }); + + // Add one empty message. + writer.writeMessage(6, dummyMessage, goog.nullFunction); + + writer.writeInt32(7, 700); + + var reader = jspb.BinaryReader.alloc(writer.getResultBuffer()); + + // Validate outermost message. + + reader.nextField(); + assertEquals(1, reader.getFieldNumber()); + assertEquals(100, reader.readInt32()); + + reader.nextField(); + assertEquals(2, reader.getFieldNumber()); + reader.readMessage(dummyMessage, function() { + // Validate embedded message 1. + reader.nextField(); + assertEquals(3, reader.getFieldNumber()); + assertEquals(300, reader.readInt32()); + + reader.nextField(); + assertEquals(4, reader.getFieldNumber()); + assertEquals(400, reader.readInt32()); + + reader.nextField(); + assertEquals(5, reader.getFieldNumber()); + assertEquals(500, reader.readInt32()); + + assertEquals(false, reader.nextField()); + }); + + reader.nextField(); + assertEquals(6, reader.getFieldNumber()); + reader.readMessage(dummyMessage, function() { + // Validate embedded message 2. + + assertEquals(false, reader.nextField()); + }); + + reader.nextField(); + assertEquals(7, reader.getFieldNumber()); + assertEquals(700, reader.readInt32()); + + assertEquals(false, reader.nextField()); + }); + + /** + * Tests skipping fields of each type by interleaving them with sentinel + * values and skipping everything that's not a sentinel. + */ + it('testSkipField', function() { + var writer = new jspb.BinaryWriter(); + + var sentinel = 123456789; + + // Write varint fields of different sizes. + writer.writeInt32(1, sentinel); + writer.writeInt32(1, 1); + writer.writeInt32(1, 1000); + writer.writeInt32(1, 1000000); + writer.writeInt32(1, 1000000000); + + // Write fixed 64-bit encoded fields. + writer.writeInt32(2, sentinel); + writer.writeDouble(2, 1); + writer.writeFixed64(2, 1); + writer.writeSfixed64(2, 1); + + // Write fixed 32-bit encoded fields. + writer.writeInt32(3, sentinel); + writer.writeFloat(3, 1); + writer.writeFixed32(3, 1); + writer.writeSfixed32(3, 1); + + // Write delimited fields. + writer.writeInt32(4, sentinel); + writer.writeBytes(4, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + writer.writeString(4, 'The quick brown fox jumps over the lazy dog'); + + // Write a group with a nested group inside. + writer.writeInt32(5, sentinel); + var dummyMessage = /** @type {!jspb.BinaryMessage} */({}); + writer.writeGroup(5, dummyMessage, function() { + writer.writeInt64(42, 42); + writer.writeGroup(6, dummyMessage, function() { + writer.writeInt64(84, 42); + }); + }); + + // Write final sentinel. + writer.writeInt32(6, sentinel); + + var reader = jspb.BinaryReader.alloc(writer.getResultBuffer()); + + function skip(field, count) { + for (var i = 0; i < count; i++) { + reader.nextField(); + if (field != reader.getFieldNumber()) throw 'fail!'; + reader.skipField(); + } + } + + reader.nextField(); + assertEquals(1, reader.getFieldNumber()); + assertEquals(sentinel, reader.readInt32()); + skip(1, 4); + + reader.nextField(); + assertEquals(2, reader.getFieldNumber()); + assertEquals(sentinel, reader.readInt32()); + skip(2, 3); + + reader.nextField(); + assertEquals(3, reader.getFieldNumber()); + assertEquals(sentinel, reader.readInt32()); + skip(3, 3); + + reader.nextField(); + assertEquals(4, reader.getFieldNumber()); + assertEquals(sentinel, reader.readInt32()); + skip(4, 2); + + reader.nextField(); + assertEquals(5, reader.getFieldNumber()); + assertEquals(sentinel, reader.readInt32()); + skip(5, 1); + + reader.nextField(); + assertEquals(6, reader.getFieldNumber()); + assertEquals(sentinel, reader.readInt32()); + }); + + + /** + * Tests packed fields. + */ + it('testPackedFields', function() { + var writer = new jspb.BinaryWriter(); + + var sentinel = 123456789; + + var unsignedData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + var signedData = [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]; + var floatData = [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.10]; + var doubleData = [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.10]; + var boolData = [true, false, true, true, false, false, true, false]; + + for (var i = 0; i < floatData.length; i++) { + floatData[i] = truncate(floatData[i]); + } + + writer.writeInt32(1, sentinel); + + writer.writePackedInt32(2, signedData); + writer.writePackedInt64(2, signedData); + writer.writePackedUint32(2, unsignedData); + writer.writePackedUint64(2, unsignedData); + writer.writePackedSint32(2, signedData); + writer.writePackedSint64(2, signedData); + writer.writePackedFixed32(2, unsignedData); + writer.writePackedFixed64(2, unsignedData); + writer.writePackedSfixed32(2, signedData); + writer.writePackedSfixed64(2, signedData); + writer.writePackedFloat(2, floatData); + writer.writePackedDouble(2, doubleData); + writer.writePackedBool(2, boolData); + writer.writePackedEnum(2, unsignedData); + + writer.writeInt32(3, sentinel); + + var reader = jspb.BinaryReader.alloc(writer.getResultBuffer()); + + reader.nextField(); + assertEquals(sentinel, reader.readInt32()); + + reader.nextField(); + assertElementsEquals(reader.readPackedInt32(), signedData); + + reader.nextField(); + assertElementsEquals(reader.readPackedInt64(), signedData); + + reader.nextField(); + assertElementsEquals(reader.readPackedUint32(), unsignedData); + + reader.nextField(); + assertElementsEquals(reader.readPackedUint64(), unsignedData); + + reader.nextField(); + assertElementsEquals(reader.readPackedSint32(), signedData); + + reader.nextField(); + assertElementsEquals(reader.readPackedSint64(), signedData); + + reader.nextField(); + assertElementsEquals(reader.readPackedFixed32(), unsignedData); + + reader.nextField(); + assertElementsEquals(reader.readPackedFixed64(), unsignedData); + + reader.nextField(); + assertElementsEquals(reader.readPackedSfixed32(), signedData); + + reader.nextField(); + assertElementsEquals(reader.readPackedSfixed64(), signedData); + + reader.nextField(); + assertElementsEquals(reader.readPackedFloat(), floatData); + + reader.nextField(); + assertElementsEquals(reader.readPackedDouble(), doubleData); + + reader.nextField(); + assertElementsEquals(reader.readPackedBool(), boolData); + + reader.nextField(); + assertElementsEquals(reader.readPackedEnum(), unsignedData); + + reader.nextField(); + assertEquals(sentinel, reader.readInt32()); + }); + + + /** + * Byte blobs inside nested messages should always have their byte offset set + * relative to the start of the outermost blob, not the start of their parent + * blob. + */ + it('testNestedBlobs', function() { + // Create a proto consisting of two nested messages, with the inner one + // containing a blob of bytes. + + var fieldTag = (1 << 3) | jspb.BinaryConstants.WireType.DELIMITED; + var blob = [1, 2, 3, 4, 5]; + var writer = new jspb.BinaryWriter(); + var dummyMessage = /** @type {!jspb.BinaryMessage} */({}); + + writer.writeMessage(1, dummyMessage, function() { + writer.writeMessage(1, dummyMessage, function() { + writer.writeBytes(1, blob); + }); + }); + + // Peel off the outer two message layers. Each layer should have two bytes + // of overhead, one for the field tag and one for the length of the inner + // blob. + + var decoder1 = new jspb.BinaryDecoder(writer.getResultBuffer()); + assertEquals(fieldTag, decoder1.readUnsignedVarint32()); + assertEquals(blob.length + 4, decoder1.readUnsignedVarint32()); + + var decoder2 = new jspb.BinaryDecoder(decoder1.readBytes(blob.length + 4)); + assertEquals(fieldTag, decoder2.readUnsignedVarint32()); + assertEquals(blob.length + 2, decoder2.readUnsignedVarint32()); + + assertEquals(fieldTag, decoder2.readUnsignedVarint32()); + assertEquals(blob.length, decoder2.readUnsignedVarint32()); + var bytes = decoder2.readBytes(blob.length); + + assertElementsEquals(bytes, blob); + }); + + + /** + * Tests read callbacks. + */ + it('testReadCallbacks', function() { + var writer = new jspb.BinaryWriter(); + var dummyMessage = /** @type {!jspb.BinaryMessage} */({}); + + // Add an int, a submessage, and another int. + writer.writeInt32(1, 100); + + writer.writeMessage(2, dummyMessage, function() { + writer.writeInt32(3, 300); + writer.writeInt32(4, 400); + writer.writeInt32(5, 500); + }); + + writer.writeInt32(7, 700); + + // Create the reader and register a custom read callback. + var reader = jspb.BinaryReader.alloc(writer.getResultBuffer()); + + /** + * @param {!jspb.BinaryReader} reader + * @return {*} + */ + function readCallback(reader) { + reader.nextField(); + assertEquals(3, reader.getFieldNumber()); + assertEquals(300, reader.readInt32()); + + reader.nextField(); + assertEquals(4, reader.getFieldNumber()); + assertEquals(400, reader.readInt32()); + + reader.nextField(); + assertEquals(5, reader.getFieldNumber()); + assertEquals(500, reader.readInt32()); + + assertEquals(false, reader.nextField()); + }; + + reader.registerReadCallback('readCallback', readCallback); + + // Read the container message. + reader.nextField(); + assertEquals(1, reader.getFieldNumber()); + assertEquals(100, reader.readInt32()); + + reader.nextField(); + assertEquals(2, reader.getFieldNumber()); + reader.readMessage(dummyMessage, function() { + // Decode the embedded message using the registered callback. + reader.runReadCallback('readCallback'); + }); + + reader.nextField(); + assertEquals(7, reader.getFieldNumber()); + assertEquals(700, reader.readInt32()); + + assertEquals(false, reader.nextField()); + }); +}); diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/utils_test.js b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/utils_test.js new file mode 100644 index 00000000000000..d27e5ea2c63053 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/utils_test.js @@ -0,0 +1,668 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/** + * @fileoverview Test cases for jspb's helper functions. + * + * Test suite is written using Jasmine -- see http://jasmine.github.io/ + * + * @author aappleby@google.com (Austin Appleby) + */ + +goog.require('goog.crypt.base64'); +goog.require('goog.testing.asserts'); +goog.require('jspb.BinaryConstants'); +goog.require('jspb.BinaryWriter'); +goog.require('jspb.utils'); + + +/** + * @param {number} x + * @return {number} + */ +function truncate(x) { + var temp = new Float32Array(1); + temp[0] = x; + return temp[0]; +} + + +/** + * Converts an 64-bit integer in split representation to a 64-bit hash string + * (8 bits encoded per character). + * @param {number} bitsLow The low 32 bits of the split 64-bit integer. + * @param {number} bitsHigh The high 32 bits of the split 64-bit integer. + * @return {string} The encoded hash string, 8 bits per character. + */ +function toHashString(bitsLow, bitsHigh) { + return String.fromCharCode((bitsLow >>> 0) & 0xFF, + (bitsLow >>> 8) & 0xFF, + (bitsLow >>> 16) & 0xFF, + (bitsLow >>> 24) & 0xFF, + (bitsHigh >>> 0) & 0xFF, + (bitsHigh >>> 8) & 0xFF, + (bitsHigh >>> 16) & 0xFF, + (bitsHigh >>> 24) & 0xFF); +} + + +describe('binaryUtilsTest', function() { + /** + * Tests lossless binary-to-decimal conversion. + */ + it('testDecimalConversion', function() { + // Check some magic numbers. + var result = + jspb.utils.joinUnsignedDecimalString(0x89e80001, 0x8ac72304); + assertEquals('10000000000000000001', result); + + result = jspb.utils.joinUnsignedDecimalString(0xacd05f15, 0x1b69b4b); + assertEquals('123456789123456789', result); + + result = jspb.utils.joinUnsignedDecimalString(0xeb1f0ad2, 0xab54a98c); + assertEquals('12345678901234567890', result); + + result = jspb.utils.joinUnsignedDecimalString(0xe3b70cb1, 0x891087b8); + assertEquals('9876543210987654321', result); + + // Check limits. + result = jspb.utils.joinUnsignedDecimalString(0x00000000, 0x00000000); + assertEquals('0', result); + + result = jspb.utils.joinUnsignedDecimalString(0xFFFFFFFF, 0xFFFFFFFF); + assertEquals('18446744073709551615', result); + + // Check each bit of the low dword. + for (var i = 0; i < 32; i++) { + var low = (1 << i) >>> 0; + result = jspb.utils.joinUnsignedDecimalString(low, 0); + assertEquals('' + Math.pow(2, i), result); + } + + // Check the first 20 bits of the high dword. + for (var i = 0; i < 20; i++) { + var high = (1 << i) >>> 0; + result = jspb.utils.joinUnsignedDecimalString(0, high); + assertEquals('' + Math.pow(2, 32 + i), result); + } + + // V8's internal double-to-string conversion is inaccurate for values above + // 2^52, even if they're representable integers - check the rest of the bits + // manually against the correct string representations of 2^N. + + result = jspb.utils.joinUnsignedDecimalString(0x00000000, 0x00100000); + assertEquals('4503599627370496', result); + + result = jspb.utils.joinUnsignedDecimalString(0x00000000, 0x00200000); + assertEquals('9007199254740992', result); + + result = jspb.utils.joinUnsignedDecimalString(0x00000000, 0x00400000); + assertEquals('18014398509481984', result); + + result = jspb.utils.joinUnsignedDecimalString(0x00000000, 0x00800000); + assertEquals('36028797018963968', result); + + result = jspb.utils.joinUnsignedDecimalString(0x00000000, 0x01000000); + assertEquals('72057594037927936', result); + + result = jspb.utils.joinUnsignedDecimalString(0x00000000, 0x02000000); + assertEquals('144115188075855872', result); + + result = jspb.utils.joinUnsignedDecimalString(0x00000000, 0x04000000); + assertEquals('288230376151711744', result); + + result = jspb.utils.joinUnsignedDecimalString(0x00000000, 0x08000000); + assertEquals('576460752303423488', result); + + result = jspb.utils.joinUnsignedDecimalString(0x00000000, 0x10000000); + assertEquals('1152921504606846976', result); + + result = jspb.utils.joinUnsignedDecimalString(0x00000000, 0x20000000); + assertEquals('2305843009213693952', result); + + result = jspb.utils.joinUnsignedDecimalString(0x00000000, 0x40000000); + assertEquals('4611686018427387904', result); + + result = jspb.utils.joinUnsignedDecimalString(0x00000000, 0x80000000); + assertEquals('9223372036854775808', result); + }); + + + /** + * Going from hash strings to decimal strings should also be lossless. + */ + it('testHashToDecimalConversion', function() { + var result; + var convert = jspb.utils.hash64ToDecimalString; + + result = convert(toHashString(0x00000000, 0x00000000), false); + assertEquals('0', result); + + result = convert(toHashString(0x00000000, 0x00000000), true); + assertEquals('0', result); + + result = convert(toHashString(0xFFFFFFFF, 0xFFFFFFFF), false); + assertEquals('18446744073709551615', result); + + result = convert(toHashString(0xFFFFFFFF, 0xFFFFFFFF), true); + assertEquals('-1', result); + + result = convert(toHashString(0x00000000, 0x80000000), false); + assertEquals('9223372036854775808', result); + + result = convert(toHashString(0x00000000, 0x80000000), true); + assertEquals('-9223372036854775808', result); + + result = convert(toHashString(0xacd05f15, 0x01b69b4b), false); + assertEquals('123456789123456789', result); + + result = convert(toHashString(~0xacd05f15 + 1, ~0x01b69b4b), true); + assertEquals('-123456789123456789', result); + + // And converting arrays of hashes should work the same way. + result = jspb.utils.hash64ArrayToDecimalStrings([ + toHashString(0xFFFFFFFF, 0xFFFFFFFF), + toHashString(0x00000000, 0x80000000), + toHashString(0xacd05f15, 0x01b69b4b)], false); + assertEquals(3, result.length); + assertEquals('18446744073709551615', result[0]); + assertEquals('9223372036854775808', result[1]); + assertEquals('123456789123456789', result[2]); + }); + + /* + * Going from decimal strings to hash strings should be lossless. + */ + it('testDecimalToHashConversion', function() { + var result; + var convert = jspb.utils.decimalStringToHash64; + + result = convert('0'); + assertEquals(String.fromCharCode.apply(null, + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]), result); + + result = convert('-1'); + assertEquals(String.fromCharCode.apply(null, + [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]), result); + + result = convert('18446744073709551615'); + assertEquals(String.fromCharCode.apply(null, + [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]), result); + + result = convert('9223372036854775808'); + assertEquals(String.fromCharCode.apply(null, + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80]), result); + + result = convert('-9223372036854775808'); + assertEquals(String.fromCharCode.apply(null, + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80]), result); + + result = convert('123456789123456789'); + assertEquals(String.fromCharCode.apply(null, + [0x15, 0x5F, 0xD0, 0xAC, 0x4B, 0x9B, 0xB6, 0x01]), result); + + result = convert('-123456789123456789'); + assertEquals(String.fromCharCode.apply(null, + [0xEB, 0xA0, 0x2F, 0x53, 0xB4, 0x64, 0x49, 0xFE]), result); + }); + + /** + * Going from hash strings to hex strings should be lossless. + */ + it('testHashToHexConversion', function() { + var result; + var convert = jspb.utils.hash64ToHexString; + + result = convert(toHashString(0x00000000, 0x00000000)); + assertEquals('0x0000000000000000', result); + + result = convert(toHashString(0xFFFFFFFF, 0xFFFFFFFF)); + assertEquals('0xffffffffffffffff', result); + + result = convert(toHashString(0x12345678, 0x9ABCDEF0)); + assertEquals('0x9abcdef012345678', result); + }); + + + /** + * Going from hex strings to hash strings should be lossless. + */ + it('testHexToHashConversion', function() { + var result; + var convert = jspb.utils.hexStringToHash64; + + result = convert('0x0000000000000000'); + assertEquals(String.fromCharCode.apply(null, + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]), result); + + result = convert('0xffffffffffffffff'); + assertEquals(String.fromCharCode.apply(null, + [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]), result); + + // Hex string is big-endian, hash string is little-endian. + result = convert('0x123456789ABCDEF0'); + assertEquals(String.fromCharCode.apply(null, + [0xF0, 0xDE, 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12]), result); + + // Capitalization should not matter. + result = convert('0x0000abcdefABCDEF'); + assertEquals(String.fromCharCode.apply(null, + [0xEF, 0xCD, 0xAB, 0xEF, 0xCD, 0xAB, 0x00, 0x00]), result); + }); + + + /** + * Going from numbers to hash strings should be lossless for up to 53 bits of + * precision. + */ + it('testNumberToHashConversion', function() { + var result; + var convert = jspb.utils.numberToHash64; + + result = convert(0x0000000000000); + assertEquals('0x0000000000000000', jspb.utils.hash64ToHexString(result)); + + result = convert(0xFFFFFFFFFFFFF); + assertEquals('0x000fffffffffffff', jspb.utils.hash64ToHexString(result)); + + result = convert(0x123456789ABCD); + assertEquals('0x000123456789abcd', jspb.utils.hash64ToHexString(result)); + + result = convert(0xDCBA987654321); + assertEquals('0x000dcba987654321', jspb.utils.hash64ToHexString(result)); + + // 53 bits of precision should not be truncated. + result = convert(0x10000000000001); + assertEquals('0x0010000000000001', jspb.utils.hash64ToHexString(result)); + + // 54 bits of precision should be truncated. + result = convert(0x20000000000001); + assertNotEquals( + '0x0020000000000001', jspb.utils.hash64ToHexString(result)); + }); + + + /** + * Sanity check the behavior of Javascript's strings when doing funny things + * with unicode characters. + */ + it('sanityCheckUnicodeStrings', function() { + var strings = new Array(65536); + + // All possible unsigned 16-bit values should be storable in a string, they + // shouldn't do weird things with the length of the string, and they should + // come back out of the string unchanged. + for (var i = 0; i < 65536; i++) { + strings[i] = 'a' + String.fromCharCode(i) + 'a'; + if (3 != strings[i].length) throw 'fail!'; + if (i != strings[i].charCodeAt(1)) throw 'fail!'; + } + + // Each unicode character should compare equal to itself and not equal to a + // different unicode character. + for (var i = 0; i < 65536; i++) { + if (strings[i] != strings[i]) throw 'fail!'; + if (strings[i] == strings[(i + 1) % 65536]) throw 'fail!'; + } + }); + + + /** + * Tests conversion from 32-bit floating point numbers to split64 numbers. + */ + it('testFloat32ToSplit64', function() { + var f32_eps = jspb.BinaryConstants.FLOAT32_EPS; + var f32_min = jspb.BinaryConstants.FLOAT32_MIN; + var f32_max = jspb.BinaryConstants.FLOAT32_MAX; + + // NaN. + jspb.utils.splitFloat32(NaN); + if (!isNaN(jspb.utils.joinFloat32(jspb.utils.split64Low, + jspb.utils.split64High))) { + throw 'fail!'; + } + + /** + * @param {number} x + * @param {number=} opt_bits + */ + function test(x, opt_bits) { + jspb.utils.splitFloat32(x); + if (goog.isDef(opt_bits)) { + if (opt_bits != jspb.utils.split64Low) throw 'fail!'; + } + if (truncate(x) != jspb.utils.joinFloat32(jspb.utils.split64Low, + jspb.utils.split64High)) { + throw 'fail!'; + } + } + + // Positive and negative infinity. + test(Infinity, 0x7f800000); + test(-Infinity, 0xff800000); + + // Positive and negative zero. + test(0, 0x00000000); + test(-0, 0x80000000); + + // Positive and negative epsilon. + test(f32_eps, 0x00000001); + test(-f32_eps, 0x80000001); + + // Positive and negative min. + test(f32_min, 0x00800000); + test(-f32_min, 0x80800000); + + // Positive and negative max. + test(f32_max, 0x7F7FFFFF); + test(-f32_max, 0xFF7FFFFF); + + // Various positive values. + var cursor = f32_eps * 10; + while (cursor != Infinity) { + test(cursor); + cursor *= 1.1; + } + + // Various negative values. + cursor = -f32_eps * 10; + while (cursor != -Infinity) { + test(cursor); + cursor *= 1.1; + } + }); + + + /** + * Tests conversion from 64-bit floating point numbers to split64 numbers. + */ + it('testFloat64ToSplit64', function() { + var f64_eps = jspb.BinaryConstants.FLOAT64_EPS; + var f64_min = jspb.BinaryConstants.FLOAT64_MIN; + var f64_max = jspb.BinaryConstants.FLOAT64_MAX; + + // NaN. + jspb.utils.splitFloat64(NaN); + if (!isNaN(jspb.utils.joinFloat64(jspb.utils.split64Low, + jspb.utils.split64High))) { + throw 'fail!'; + } + + /** + * @param {number} x + * @param {number=} opt_highBits + * @param {number=} opt_lowBits + */ + function test(x, opt_highBits, opt_lowBits) { + jspb.utils.splitFloat64(x); + if (goog.isDef(opt_highBits)) { + if (opt_highBits != jspb.utils.split64High) throw 'fail!'; + } + if (goog.isDef(opt_lowBits)) { + if (opt_lowBits != jspb.utils.split64Low) throw 'fail!'; + } + if (x != jspb.utils.joinFloat64(jspb.utils.split64Low, + jspb.utils.split64High)) { + throw 'fail!'; + } + } + + // Positive and negative infinity. + test(Infinity, 0x7ff00000, 0x00000000); + test(-Infinity, 0xfff00000, 0x00000000); + + // Positive and negative zero. + test(0, 0x00000000, 0x00000000); + test(-0, 0x80000000, 0x00000000); + + // Positive and negative epsilon. + test(f64_eps, 0x00000000, 0x00000001); + test(-f64_eps, 0x80000000, 0x00000001); + + // Positive and negative min. + test(f64_min, 0x00100000, 0x00000000); + test(-f64_min, 0x80100000, 0x00000000); + + // Positive and negative max. + test(f64_max, 0x7FEFFFFF, 0xFFFFFFFF); + test(-f64_max, 0xFFEFFFFF, 0xFFFFFFFF); + + // Various positive values. + var cursor = f64_eps * 10; + while (cursor != Infinity) { + test(cursor); + cursor *= 1.1; + } + + // Various negative values. + cursor = -f64_eps * 10; + while (cursor != -Infinity) { + test(cursor); + cursor *= 1.1; + } + }); + + + /** + * Tests counting packed varints. + */ + it('testCountVarints', function() { + var values = []; + for (var i = 1; i < 1000000000; i *= 1.1) { + values.push(Math.floor(i)); + } + + var writer = new jspb.BinaryWriter(); + writer.writePackedUint64(1, values); + + var buffer = new Uint8Array(writer.getResultBuffer()); + + // We should have two more varints than we started with - one for the field + // tag, one for the packed length. + assertEquals(values.length + 2, + jspb.utils.countVarints(buffer, 0, buffer.length)); + }); + + + /** + * Tests counting matching varint fields. + */ + it('testCountVarintFields', function() { + var writer = new jspb.BinaryWriter(); + + var count = 0; + for (var i = 1; i < 1000000000; i *= 1.1) { + writer.writeUint64(1, Math.floor(i)); + count++; + } + writer.writeString(2, 'terminator'); + + var buffer = new Uint8Array(writer.getResultBuffer()); + assertEquals(count, + jspb.utils.countVarintFields(buffer, 0, buffer.length, 1)); + + writer = new jspb.BinaryWriter(); + + count = 0; + for (var i = 1; i < 1000000000; i *= 1.1) { + writer.writeUint64(123456789, Math.floor(i)); + count++; + } + writer.writeString(2, 'terminator'); + + buffer = new Uint8Array(writer.getResultBuffer()); + assertEquals(count, + jspb.utils.countVarintFields(buffer, 0, buffer.length, 123456789)); + }); + + + /** + * Tests counting matching fixed32 fields. + */ + it('testCountFixed32Fields', function() { + var writer = new jspb.BinaryWriter(); + + var count = 0; + for (var i = 1; i < 1000000000; i *= 1.1) { + writer.writeFixed32(1, Math.floor(i)); + count++; + } + writer.writeString(2, 'terminator'); + + var buffer = new Uint8Array(writer.getResultBuffer()); + assertEquals(count, + jspb.utils.countFixed32Fields(buffer, 0, buffer.length, 1)); + + writer = new jspb.BinaryWriter(); + + count = 0; + for (var i = 1; i < 1000000000; i *= 1.1) { + writer.writeFixed32(123456789, Math.floor(i)); + count++; + } + writer.writeString(2, 'terminator'); + + buffer = new Uint8Array(writer.getResultBuffer()); + assertEquals(count, + jspb.utils.countFixed32Fields(buffer, 0, buffer.length, 123456789)); + }); + + + /** + * Tests counting matching fixed64 fields. + */ + it('testCountFixed64Fields', function() { + var writer = new jspb.BinaryWriter(); + + var count = 0; + for (var i = 1; i < 1000000000; i *= 1.1) { + writer.writeDouble(1, i); + count++; + } + writer.writeString(2, 'terminator'); + + var buffer = new Uint8Array(writer.getResultBuffer()); + assertEquals(count, + jspb.utils.countFixed64Fields(buffer, 0, buffer.length, 1)); + + writer = new jspb.BinaryWriter(); + + count = 0; + for (var i = 1; i < 1000000000; i *= 1.1) { + writer.writeDouble(123456789, i); + count++; + } + writer.writeString(2, 'terminator'); + + buffer = new Uint8Array(writer.getResultBuffer()); + assertEquals(count, + jspb.utils.countFixed64Fields(buffer, 0, buffer.length, 123456789)); + }); + + + /** + * Tests counting matching delimited fields. + */ + it('testCountDelimitedFields', function() { + var writer = new jspb.BinaryWriter(); + + var count = 0; + for (var i = 1; i < 1000; i *= 1.1) { + writer.writeBytes(1, [Math.floor(i)]); + count++; + } + writer.writeString(2, 'terminator'); + + var buffer = new Uint8Array(writer.getResultBuffer()); + assertEquals(count, + jspb.utils.countDelimitedFields(buffer, 0, buffer.length, 1)); + + writer = new jspb.BinaryWriter(); + + count = 0; + for (var i = 1; i < 1000; i *= 1.1) { + writer.writeBytes(123456789, [Math.floor(i)]); + count++; + } + writer.writeString(2, 'terminator'); + + buffer = new Uint8Array(writer.getResultBuffer()); + assertEquals(count, + jspb.utils.countDelimitedFields(buffer, 0, buffer.length, 123456789)); + }); + + + /** + * Tests byte format for debug strings. + */ + it('testDebugBytesToTextFormat', function() { + assertEquals('""', jspb.utils.debugBytesToTextFormat(null)); + assertEquals('"\\x00\\x10\\xff"', + jspb.utils.debugBytesToTextFormat([0, 16, 255])); + }); + + + /** + * Tests converting byte blob sources into byte blobs. + */ + it('testByteSourceToUint8Array', function() { + var convert = jspb.utils.byteSourceToUint8Array; + + var sourceData = []; + for (var i = 0; i < 256; i++) { + sourceData.push(i); + } + + var sourceBytes = new Uint8Array(sourceData); + var sourceBuffer = sourceBytes.buffer; + var sourceBase64 = goog.crypt.base64.encodeByteArray(sourceData); + var sourceString = String.fromCharCode.apply(null, sourceData); + + function check(result) { + assertEquals(Uint8Array, result.constructor); + assertEquals(sourceData.length, result.length); + for (var i = 0; i < result.length; i++) { + assertEquals(sourceData[i], result[i]); + } + } + + // Converting Uint8Arrays into Uint8Arrays should be a no-op. + assertEquals(sourceBytes, convert(sourceBytes)); + + // Converting Array. into Uint8Arrays should work. + check(convert(sourceData)); + + // Converting ArrayBuffers into Uint8Arrays should work. + check(convert(sourceBuffer)); + + // Converting base64-encoded strings into Uint8Arrays should work. + check(convert(sourceBase64)); + }); +}); diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/writer_test.js b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/writer_test.js new file mode 100644 index 00000000000000..d5dadb413549b1 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/binary/writer_test.js @@ -0,0 +1,122 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/** + * @fileoverview Test cases for jspb's binary protocol buffer writer. In + * practice BinaryWriter is used to drive the Decoder and Reader test cases, + * so only writer-specific tests are here. + * + * Test suite is written using Jasmine -- see http://jasmine.github.io/ + * + * @author aappleby@google.com (Austin Appleby) + */ + +goog.require('goog.crypt'); +goog.require('goog.testing.asserts'); +goog.require('jspb.BinaryWriter'); + + +/** + * @param {function()} func This function should throw an error when run. + */ +function assertFails(func) { + var e = assertThrows(func); + //assertNotNull(e.toString().match(/Error/)); +} + + +describe('binaryWriterTest', function() { + /** + * Verifies that misuse of the writer class triggers assertions. + */ + it('testWriteErrors', function() { + // Submessages with invalid field indices should assert. + var writer = new jspb.BinaryWriter(); + var dummyMessage = /** @type {!jspb.BinaryMessage} */({}); + + assertFails(function() { + writer.writeMessage(-1, dummyMessage, goog.nullFunction); + }); + + // Writing invalid field indices should assert. + writer = new jspb.BinaryWriter(); + assertFails(function() {writer.writeUint64(-1, 1);}); + + // Writing out-of-range field values should assert. + writer = new jspb.BinaryWriter(); + + assertFails(function() {writer.writeInt32(1, -Infinity);}); + assertFails(function() {writer.writeInt32(1, Infinity);}); + + assertFails(function() {writer.writeInt64(1, -Infinity);}); + assertFails(function() {writer.writeInt64(1, Infinity);}); + + assertFails(function() {writer.writeUint32(1, -1);}); + assertFails(function() {writer.writeUint32(1, Infinity);}); + + assertFails(function() {writer.writeUint64(1, -1);}); + assertFails(function() {writer.writeUint64(1, Infinity);}); + + assertFails(function() {writer.writeSint32(1, -Infinity);}); + assertFails(function() {writer.writeSint32(1, Infinity);}); + + assertFails(function() {writer.writeSint64(1, -Infinity);}); + assertFails(function() {writer.writeSint64(1, Infinity);}); + + assertFails(function() {writer.writeFixed32(1, -1);}); + assertFails(function() {writer.writeFixed32(1, Infinity);}); + + assertFails(function() {writer.writeFixed64(1, -1);}); + assertFails(function() {writer.writeFixed64(1, Infinity);}); + + assertFails(function() {writer.writeSfixed32(1, -Infinity);}); + assertFails(function() {writer.writeSfixed32(1, Infinity);}); + + assertFails(function() {writer.writeSfixed64(1, -Infinity);}); + assertFails(function() {writer.writeSfixed64(1, Infinity);}); + }); + + + /** + * Basic test of retrieving the result as a Uint8Array buffer + */ + it('testGetResultBuffer', function() { + var expected = '0864120b48656c6c6f20776f726c641a0301020320c801'; + + var writer = new jspb.BinaryWriter(); + writer.writeUint32(1, 100); + writer.writeString(2, 'Hello world'); + writer.writeBytes(3, new Uint8Array([1, 2, 3])); + writer.writeUint32(4, 200); + + var buffer = writer.getResultBuffer(); + assertEquals(expected, goog.crypt.byteArrayToHex(buffer)); + }); +}); diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/export_asserts.js b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/export_asserts.js new file mode 100644 index 00000000000000..5219d120c1d9dc --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/export_asserts.js @@ -0,0 +1,37 @@ +/** + * @fileoverview Exports symbols needed only by tests. + * + * This file exports several Closure Library symbols that are only + * used by tests. It is used to generate a file + * closure_asserts_commonjs.js that is only used at testing time. + */ + +goog.require('goog.testing.asserts'); + +var global = Function('return this')(); + +// All of the closure "assert" functions are exported at the global level. +// +// The Google Closure assert functions start with assert, eg. +// assertThrows +// assertNotThrows +// assertTrue +// ... +// +// The one exception is the "fail" function. +function shouldExport(str) { + return str.lastIndexOf('assert') === 0 || str == 'fail'; +} + +for (var key in global) { + if ((typeof key == "string") && global.hasOwnProperty(key) && + shouldExport(key)) { + exports[key] = global[key]; + } +} + +// The COMPILED variable is set by Closure compiler to "true" when it compiles +// JavaScript, so in practice this is equivalent to "exports.COMPILED = true". +// This will disable some debugging functionality in debug.js. We could +// investigate whether this can/should be enabled in CommonJS builds. +exports.COMPILED = COMPILED diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/export_testdeps.js b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/export_testdeps.js new file mode 100644 index 00000000000000..59c77ca2cd4f36 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/export_testdeps.js @@ -0,0 +1,18 @@ +/** + * @fileoverview Export symbols needed by tests in CommonJS style. + * + * This file is like export.js, but for symbols that are only used by tests. + * However we exclude assert functions here, because they are exported into + * the global namespace, so those are handled as a special case in + * export_asserts.js. + */ + +goog.require('goog.crypt.base64'); +goog.require('jspb.arith.Int64'); +goog.require('jspb.arith.UInt64'); +goog.require('jspb.BinaryEncoder'); +goog.require('jspb.BinaryDecoder'); +goog.require('jspb.utils'); + +exports.goog = goog; +exports.jspb = jspb; diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/import_test.js b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/import_test.js new file mode 100644 index 00000000000000..ffa34fea61e33c --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/import_test.js @@ -0,0 +1,52 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2016 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Test suite is written using Jasmine -- see http://jasmine.github.io/ + + + +var googleProtobuf = require('google-protobuf'); +var asserts = require('closure_asserts_commonjs'); +var global = Function('return this')(); + +// Bring asserts into the global namespace. +googleProtobuf.object.extend(global, asserts); +googleProtobuf.exportSymbol('jspb.Message', googleProtobuf.Message, global); + +var test7_pb = require('./test7/test7_pb'); +googleProtobuf.exportSymbol('proto.jspb.test.framing.FramingMessage', test7_pb.FramingMessage, global); + +describe('Import test suite', function() { + it('testImportedMessage', function() { + var framing1 = new proto.jspb.test.framing.FramingMessage([]); + var framing2 = new proto.jspb.test.framing.FramingMessage([]); + assertObjectEquals(framing1.toObject(), framing2.toObject()); + }); +}); diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/jasmine.json b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/jasmine.json new file mode 100644 index 00000000000000..666b8edbf87aa0 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/jasmine.json @@ -0,0 +1,9 @@ +{ + "spec_dir": "", + "spec_files": [ + "*_test.js", + "binary/proto_test.js" + ], + "helpers": [ + ] +} diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/rewrite_tests_for_commonjs.js b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/rewrite_tests_for_commonjs.js new file mode 100644 index 00000000000000..b6d90d287da710 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/rewrite_tests_for_commonjs.js @@ -0,0 +1,97 @@ +/** + * @fileoverview Utility to translate test files to CommonJS imports. + * + * This is a somewhat hacky tool designed to do one very specific thing. + * All of the test files in *_test.js are written with Closure-style + * imports (goog.require()). This works great for running the tests + * against Closure-style generated code, but we also want to run the + * tests against CommonJS-style generated code without having to fork + * the tests. + * + * Closure-style imports import each individual type by name. This is + * very different than CommonJS imports which are by file. So we put + * special comments in these tests like: + * + * // CommonJS-LoadFromFile: test_pb + * goog.require('proto.jspb.test.CloneExtension'); + * goog.require('proto.jspb.test.Complex'); + * goog.require('proto.jspb.test.DefaultValues'); + * + * This script parses that special comment and uses it to generate proper + * CommonJS require() statements so that the tests can run and pass using + * CommonJS imports. The script will change the above statements into: + * + * var test_pb = require('test_pb'); + * googleProtobuf.exportSymbol('proto.jspb.test.CloneExtension', test_pb.CloneExtension, global); + * googleProtobuf.exportSymbol('proto.jspb.test.Complex', test_pb.Complex, global); + * googleProtobuf.exportSymbol('proto.jspb.test.DefaultValues', test_pb.DefaultValues, global); + * + * (The "exportSymbol" function will define the given names in the global + * namespace, taking care not to overwrite any previous value for + * "proto.jspb.test"). + */ + +var lineReader = require('readline').createInterface({ + input: process.stdin, + output: process.stdout +}); + +function tryStripPrefix(str, prefix) { + if (str.lastIndexOf(prefix) !== 0) { + throw "String: " + str + " didn't start with: " + prefix; + } + return str.substr(prefix.length); +} + +function camelCase(str) { + var ret = ''; + var ucaseNext = false; + for (var i = 0; i < str.length; i++) { + if (str[i] == '-') { + ucaseNext = true; + } else if (ucaseNext) { + ret += str[i].toUpperCase(); + ucaseNext = false; + } else { + ret += str[i]; + } + } + return ret; +} + +var module = null; +var pkg = null; + +// Header: goes in every file at the top. +console.log("var global = Function('return this')();"); +console.log("var googleProtobuf = require('google-protobuf');"); +console.log("var testdeps = require('testdeps_commonjs');"); +console.log("global.goog = testdeps.goog;"); +console.log("global.jspb = testdeps.jspb;"); +console.log("var asserts = require('closure_asserts_commonjs');"); +console.log(""); +console.log("// Bring asserts into the global namespace."); +console.log("googleProtobuf.object.extend(global, asserts);"); + +lineReader.on('line', function(line) { + var isRequire = line.match(/goog\.require\('([^']*)'\)/); + var isLoadFromFile = line.match(/CommonJS-LoadFromFile: (\S*) (.*)/); + var isSetTestOnly = line.match(/goog.setTestOnly()/); + if (isRequire) { + if (module) { // Skip goog.require() lines before the first directive. + var fullSym = isRequire[1]; + var sym = tryStripPrefix(fullSym, pkg); + console.log("googleProtobuf.exportSymbol('" + fullSym + "', " + module + sym + ', global);'); + } + } else if (isLoadFromFile) { + var module_path = isLoadFromFile[1].split('/'); + module = camelCase(module_path[module_path.length - 1]); + pkg = isLoadFromFile[2]; + + if (module != "googleProtobuf") { // We unconditionally require this in the header. + console.log("var " + module + " = require('./" + isLoadFromFile[1] + "');"); + } + } else if (!isSetTestOnly) { // Remove goog.setTestOnly() lines. + console.log(line); + } +}); diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/test6/test6.proto b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/test6/test6.proto new file mode 100644 index 00000000000000..a060925f2d505d --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/test6/test6.proto @@ -0,0 +1,40 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2016 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +option java_package = "com.google.apps.jspb.proto"; +option java_multiple_files = true; + +package jspb.test.importing; + +message ImportedMessage { + string string_value = 1; +} diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/test7/test7.proto b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/test7/test7.proto new file mode 100644 index 00000000000000..f5574a3dd3f8bb --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/commonjs/test7/test7.proto @@ -0,0 +1,42 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2016 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +option java_package = "com.google.apps.jspb.proto"; +option java_multiple_files = true; + +package jspb.test.framing; + +import "test6/test6.proto"; + +message FramingMessage { + jspb.test.importing.ImportedMessage imported_message = 1; +} diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/data.proto b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/data.proto new file mode 100644 index 00000000000000..74a8a994c75f01 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/data.proto @@ -0,0 +1,51 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: mwr@google.com (Mark Rawling) + +syntax = "proto2"; + +option java_package = "com.google.apps.jspb.proto"; +option java_multiple_files = true; + +package jspb.test; + +// legacy data, must be nested +message data { + message NestedData { + required string str = 1; + } +} + +// new data, does not require nesting +message UnnestedData { + required string str = 1; +} + diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/debug_test.js b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/debug_test.js new file mode 100644 index 00000000000000..01cbf891ab5097 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/debug_test.js @@ -0,0 +1,105 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +goog.setTestOnly(); + +goog.require('goog.testing.asserts'); + +// CommonJS-LoadFromFile: google-protobuf +goog.require('jspb.debug'); + +// CommonJS-LoadFromFile: test_pb +goog.require('proto.jspb.test.HasExtensions'); +goog.require('proto.jspb.test.IsExtension'); +goog.require('proto.jspb.test.Simple1'); + + + +describe('debugTest', function() { + it('testSimple1', function() { + if (COMPILED) { + return; + } + var message = new proto.jspb.test.Simple1(); + message.setAString('foo'); + assertObjectEquals({ + $name: 'proto.jspb.test.Simple1', + 'aString': 'foo', + 'aRepeatedStringList': [] + }, jspb.debug.dump(message)); + + message.setABoolean(true); + message.setARepeatedStringList(['1', '2']); + + assertObjectEquals({ + $name: 'proto.jspb.test.Simple1', + 'aString': 'foo', + 'aRepeatedStringList': ['1', '2'], + 'aBoolean': true + }, jspb.debug.dump(message)); + + message.setAString(undefined); + + assertObjectEquals({ + $name: 'proto.jspb.test.Simple1', + 'aRepeatedStringList': ['1', '2'], + 'aBoolean': true + }, jspb.debug.dump(message)); + }); + + + it('testExtensions', function() { + if (COMPILED) { + return; + } + var extension = new proto.jspb.test.IsExtension(); + extension.setExt1('ext1field'); + var extendable = new proto.jspb.test.HasExtensions(); + extendable.setStr1('v1'); + extendable.setStr2('v2'); + extendable.setStr3('v3'); + extendable.setExtension(proto.jspb.test.IsExtension.extField, extension); + + assertObjectEquals({ + '$name': 'proto.jspb.test.HasExtensions', + 'str1': 'v1', + 'str2': 'v2', + 'str3': 'v3', + '$extensions': { + 'extField': { + '$name': 'proto.jspb.test.IsExtension', + 'ext1': 'ext1field' + }, + 'repeatedSimpleList': [] + } + }, jspb.debug.dump(extendable)); + }); + +}); diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/jasmine1.json b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/jasmine1.json new file mode 100644 index 00000000000000..6653c01cc7e2e7 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/jasmine1.json @@ -0,0 +1,17 @@ +{ + "spec_dir": "", + "spec_files": [ + "*_test.js", + "binary/*_test.js" + ], + "helpers": [ + "../../../js/node_modules/google-closure-library/closure/goog/bootstrap/nodejs.js", + "../../../js/node_loader.js", + "../../../js/deps.js", + "../../../js/google/protobuf/any.js", + "../../../js/google/protobuf/struct.js", + "../../../js/google/protobuf/timestamp.js", + "testproto_libs1.js", + "testproto_libs2.js" + ] +} diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/jasmine2.json b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/jasmine2.json new file mode 100644 index 00000000000000..3208078f7ec71e --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/jasmine2.json @@ -0,0 +1,17 @@ +{ + "spec_dir": "", + "spec_files": [ + "*_test.js", + "binary/*_test.js" + ], + "helpers": [ + "../../../js/node_modules/google-closure-library/closure/goog/bootstrap/nodejs.js", + "../../../js/node_loader.js", + "../../../js/deps.js", + "../../../js/google/protobuf/any.js", + "../../../js/google/protobuf/struct.js", + "../../../js/google/protobuf/timestamp.js", + "testproto_libs1_new.js", + "testproto_libs2.js" + ] +} diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/jasmine3.json b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/jasmine3.json new file mode 100644 index 00000000000000..3fb9a1b01d7cb3 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/jasmine3.json @@ -0,0 +1,17 @@ +{ + "spec_dir": "", + "spec_files": [ + "*_test.js", + "binary/*_test.js" + ], + "helpers": [ + "../../../js/node_modules/google-closure-library/closure/goog/bootstrap/nodejs.js", + "../../../js/node_loader.js", + "../../../js/deps.js", + "../../../js/google/protobuf/any.js", + "../../../js/google/protobuf/struct.js", + "../../../js/google/protobuf/timestamp.js", + "testproto_libs1.js", + "testproto_libs2_new.js" + ] +} diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/message_test.js b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/message_test.js new file mode 100644 index 00000000000000..b7791431158a89 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/message_test.js @@ -0,0 +1,1080 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Test suite is written using Jasmine -- see http://jasmine.github.io/ + +goog.setTestOnly(); + +goog.require('goog.json'); +goog.require('goog.testing.asserts'); +goog.require('goog.userAgent'); + +// CommonJS-LoadFromFile: google-protobuf jspb +goog.require('jspb.Message'); + +// CommonJS-LoadFromFile: test5_pb proto.jspb.exttest.beta +goog.require('proto.jspb.exttest.beta.floatingStrField'); + +// CommonJS-LoadFromFile: test3_pb proto.jspb.exttest +goog.require('proto.jspb.exttest.floatingMsgField'); + +// CommonJS-LoadFromFile: test4_pb proto.jspb.exttest +goog.require('proto.jspb.exttest.floatingMsgFieldTwo'); + +// CommonJS-LoadFromFile: test_pb proto.jspb.test +goog.require('proto.jspb.test.CloneExtension'); +goog.require('proto.jspb.test.Complex'); +goog.require('proto.jspb.test.DefaultValues'); +goog.require('proto.jspb.test.Empty'); +goog.require('proto.jspb.test.EnumContainer'); +goog.require('proto.jspb.test.floatingMsgField'); +goog.require('proto.jspb.test.FloatingPointFields'); +goog.require('proto.jspb.test.floatingStrField'); +goog.require('proto.jspb.test.HasExtensions'); +goog.require('proto.jspb.test.IndirectExtension'); +goog.require('proto.jspb.test.IsExtension'); +goog.require('proto.jspb.test.OptionalFields'); +goog.require('proto.jspb.test.OuterEnum'); +goog.require('proto.jspb.test.OuterMessage.Complex'); +goog.require('proto.jspb.test.Simple1'); +goog.require('proto.jspb.test.Simple2'); +goog.require('proto.jspb.test.SpecialCases'); +goog.require('proto.jspb.test.TestClone'); +goog.require('proto.jspb.test.TestEndsWithBytes'); +goog.require('proto.jspb.test.TestGroup'); +goog.require('proto.jspb.test.TestGroup1'); +goog.require('proto.jspb.test.TestMessageWithOneof'); +goog.require('proto.jspb.test.TestReservedNames'); +goog.require('proto.jspb.test.TestReservedNamesExtension'); + +// CommonJS-LoadFromFile: test2_pb proto.jspb.test +goog.require('proto.jspb.test.ExtensionMessage'); +goog.require('proto.jspb.test.TestExtensionsMessage'); + + + + +describe('Message test suite', function() { + it('testEmptyProto', function() { + var empty1 = new proto.jspb.test.Empty([]); + var empty2 = new proto.jspb.test.Empty([]); + assertObjectEquals({}, empty1.toObject()); + assertObjectEquals('Message should not be corrupted:', empty2, empty1); + }); + + it('testTopLevelEnum', function() { + var response = new proto.jspb.test.EnumContainer([]); + response.setOuterEnum(proto.jspb.test.OuterEnum.FOO); + assertEquals(proto.jspb.test.OuterEnum.FOO, response.getOuterEnum()); + }); + + it('testByteStrings', function() { + var data = new proto.jspb.test.DefaultValues([]); + data.setBytesField('some_bytes'); + assertEquals('some_bytes', data.getBytesField()); + }); + + it('testComplexConversion', function() { + var data1 = ['a',,, [, 11], [[, 22], [, 33]],, ['s1', 's2'],, 1]; + var data2 = ['a',,, [, 11], [[, 22], [, 33]],, ['s1', 's2'],, 1]; + var foo = new proto.jspb.test.Complex(data1); + var bar = new proto.jspb.test.Complex(data2); + var result = foo.toObject(); + assertObjectEquals({ + aString: 'a', + anOutOfOrderBool: 1, + aNestedMessage: { + anInt: 11 + }, + aRepeatedMessageList: [{anInt: 22}, {anInt: 33}], + aRepeatedStringList: ['s1', 's2'] + }, result); + + // Now test with the jspb instances included. + result = foo.toObject(true /* opt_includeInstance */); + assertObjectEquals({ + aString: 'a', + anOutOfOrderBool: 1, + aNestedMessage: { + anInt: 11, + $jspbMessageInstance: foo.getANestedMessage() + }, + aRepeatedMessageList: [ + {anInt: 22, $jspbMessageInstance: foo.getARepeatedMessageList()[0]}, + {anInt: 33, $jspbMessageInstance: foo.getARepeatedMessageList()[1]} + ], + aRepeatedStringList: ['s1', 's2'], + $jspbMessageInstance: foo + }, result); + + }); + + it('testMissingFields', function() { + var foo = new proto.jspb.test.Complex([ + undefined, undefined, undefined, [], + undefined, undefined, undefined, undefined]); + var bar = new proto.jspb.test.Complex([ + undefined, undefined, undefined, [], + undefined, undefined, undefined, undefined]); + var result = foo.toObject(); + assertObjectEquals({ + aString: undefined, + anOutOfOrderBool: undefined, + aNestedMessage: { + anInt: undefined + }, + // Note: JsPb converts undefined repeated fields to empty arrays. + aRepeatedMessageList: [], + aRepeatedStringList: [] + }, result); + + }); + + it('testNestedComplexMessage', function() { + // Instantiate the message and set a unique field, just to ensure that we + // are not getting jspb.test.Complex instead. + var msg = new proto.jspb.test.OuterMessage.Complex(); + msg.setInnerComplexField(5); + }); + + it('testSpecialCases', function() { + // Note: Some property names are reserved in JavaScript. + // These names are converted to the Js property named pb_. + var special = + new proto.jspb.test.SpecialCases(['normal', 'default', 'function', + 'var']); + var result = special.toObject(); + assertObjectEquals({ + normal: 'normal', + pb_default: 'default', + pb_function: 'function', + pb_var: 'var' + }, result); + }); + + it('testDefaultValues', function() { + var defaultString = "default<>\'\"abc"; + var response = new proto.jspb.test.DefaultValues(); + + // Test toObject + var expectedObject = { + stringField: defaultString, + boolField: true, + intField: 11, + enumField: 13, + emptyField: '', + bytesField: 'bW9v' + }; + assertObjectEquals(expectedObject, response.toObject()); + + + // Test getters + response = new proto.jspb.test.DefaultValues(); + assertEquals(defaultString, response.getStringField()); + assertEquals(true, response.getBoolField()); + assertEquals(11, response.getIntField()); + assertEquals(13, response.getEnumField()); + assertEquals('', response.getEmptyField()); + assertEquals('bW9v', response.getBytesField()); + + function makeDefault(values) { + return new proto.jspb.test.DefaultValues(values); + } + + // Test with undefined values, + // Use push to workaround IE treating undefined array elements as holes. + response = makeDefault([undefined, undefined, undefined, undefined]); + assertEquals(defaultString, response.getStringField()); + assertEquals(true, response.getBoolField()); + assertEquals(11, response.getIntField()); + assertEquals(13, response.getEnumField()); + assertFalse(response.hasStringField()); + assertFalse(response.hasBoolField()); + assertFalse(response.hasIntField()); + assertFalse(response.hasEnumField()); + + // Test with null values, as would be returned by a JSON serializer. + response = makeDefault([null, null, null, null]); + assertEquals(defaultString, response.getStringField()); + assertEquals(true, response.getBoolField()); + assertEquals(11, response.getIntField()); + assertEquals(13, response.getEnumField()); + assertFalse(response.hasStringField()); + assertFalse(response.hasBoolField()); + assertFalse(response.hasIntField()); + assertFalse(response.hasEnumField()); + + // Test with false-like values. + response = makeDefault(['', false, 0, 0]); + assertEquals('', response.getStringField()); + assertEquals(false, response.getBoolField()); + assertEquals(true, response.getIntField() == 0); + assertEquals(true, response.getEnumField() == 0); + assertTrue(response.hasStringField()); + assertTrue(response.hasBoolField()); + assertTrue(response.hasIntField()); + assertTrue(response.hasEnumField()); + + // Test that clearing the values reverts them to the default state. + response = makeDefault(['blah', false, 111, 77]); + response.clearStringField(); response.clearBoolField(); + response.clearIntField(); response.clearEnumField(); + assertEquals(defaultString, response.getStringField()); + assertEquals(true, response.getBoolField()); + assertEquals(11, response.getIntField()); + assertEquals(13, response.getEnumField()); + assertFalse(response.hasStringField()); + assertFalse(response.hasBoolField()); + assertFalse(response.hasIntField()); + assertFalse(response.hasEnumField()); + + // Test that setFoo(null) clears the values. + response = makeDefault(['blah', false, 111, 77]); + response.setStringField(null); response.setBoolField(null); + response.setIntField(undefined); response.setEnumField(undefined); + assertEquals(defaultString, response.getStringField()); + assertEquals(true, response.getBoolField()); + assertEquals(11, response.getIntField()); + assertEquals(13, response.getEnumField()); + assertFalse(response.hasStringField()); + assertFalse(response.hasBoolField()); + assertFalse(response.hasIntField()); + assertFalse(response.hasEnumField()); + }); + + it('testMessageRegistration', function() { + // goog.require(SomeResponse) will include its library, which will in + // turn add SomeResponse to the message registry. + assertEquals(jspb.Message.registry_['res'], proto.jspb.test.SomeResponse); + }); + + it('testClearFields', function() { + var data = ['str', true, [11], [[22], [33]], ['s1', 's2']]; + var foo = new proto.jspb.test.OptionalFields(data); + foo.clearAString(); + foo.clearABool(); + foo.clearANestedMessage(); + foo.clearARepeatedMessageList(); + foo.clearARepeatedStringList(); + assertEquals('', foo.getAString()); + assertEquals(false, foo.getABool()); + assertUndefined(foo.getANestedMessage()); + assertFalse(foo.hasAString()); + assertFalse(foo.hasABool()); + assertObjectEquals([], foo.getARepeatedMessageList()); + assertObjectEquals([], foo.getARepeatedStringList()); + // NOTE: We want the missing fields in 'expected' to be undefined, + // but we actually get a sparse array instead. We could use something + // like [1,undefined,2] to avoid this, except that this is still + // sparse on IE. No comment... + var expected = [,,, [], []]; + expected[0] = expected[1] = expected[2] = undefined; + assertObjectEquals(expected, foo.toArray()); + + // Test set(null). We could deprecated this in favor of clear(), but + // it's also convenient to have. + data = ['str', true, [11], [[22], [33]], ['s1', 's2']]; + foo = new proto.jspb.test.OptionalFields(data); + foo.setAString(null); + foo.setABool(null); + foo.setANestedMessage(null); + foo.setARepeatedMessageList(null); + foo.setARepeatedStringList(null); + assertEquals('', foo.getAString()); + assertEquals(false, foo.getABool()); + assertNull(foo.getANestedMessage()); + assertFalse(foo.hasAString()); + assertFalse(foo.hasABool()); + assertObjectEquals([], foo.getARepeatedMessageList()); + assertObjectEquals([], foo.getARepeatedStringList()); + assertObjectEquals([null, null, null, [], []], foo.toArray()); + + // Test set(undefined). Again, not something we really need, and not + // supported directly by our typing, but it should 'do the right thing'. + data = ['str', true, [11], [[22], [33]], ['s1', 's2']]; + foo = new proto.jspb.test.OptionalFields(data); + foo.setAString(undefined); + foo.setABool(undefined); + foo.setANestedMessage(undefined); + foo.setARepeatedMessageList(undefined); + foo.setARepeatedStringList(undefined); + assertEquals('', foo.getAString()); + assertEquals(false, foo.getABool()); + assertUndefined(foo.getANestedMessage()); + assertFalse(foo.hasAString()); + assertFalse(foo.hasABool()); + assertObjectEquals([], foo.getARepeatedMessageList()); + assertObjectEquals([], foo.getARepeatedStringList()); + expected = [,,, [], []]; + expected[0] = expected[1] = expected[2] = undefined; + assertObjectEquals(expected, foo.toArray()); + }); + + it('testDifferenceRawObject', function() { + var p1 = new proto.jspb.test.HasExtensions(['hi', 'diff', {}]); + var p2 = new proto.jspb.test.HasExtensions(['hi', 'what', + {1000: 'unique'}]); + var diff = /** @type {proto.jspb.test.HasExtensions} */ + (jspb.Message.difference(p1, p2)); + assertEquals('', diff.getStr1()); + assertEquals('what', diff.getStr2()); + assertEquals('', diff.getStr3()); + assertEquals('unique', diff.extensionObject_[1000]); + }); + + it('testEqualsSimple', function() { + var s1 = new proto.jspb.test.Simple1(['hi']); + assertTrue(jspb.Message.equals(s1, new proto.jspb.test.Simple1(['hi']))); + assertFalse(jspb.Message.equals(s1, new proto.jspb.test.Simple1(['bye']))); + var s1b = new proto.jspb.test.Simple1(['hi', ['hello']]); + assertTrue(jspb.Message.equals(s1b, + new proto.jspb.test.Simple1(['hi', ['hello']]))); + assertTrue(jspb.Message.equals(s1b, + new proto.jspb.test.Simple1(['hi', ['hello', undefined, + undefined, undefined]]))); + assertFalse(jspb.Message.equals(s1b, + new proto.jspb.test.Simple1(['no', ['hello']]))); + // Test with messages of different types + var s2 = new proto.jspb.test.Simple2(['hi']); + assertFalse(jspb.Message.equals(s1, s2)); + }); + + it('testEquals_softComparison', function() { + var s1 = new proto.jspb.test.Simple1(['hi', [], null]); + assertTrue(jspb.Message.equals(s1, + new proto.jspb.test.Simple1(['hi', []]))); + + var s1b = new proto.jspb.test.Simple1(['hi', [], true]); + assertTrue(jspb.Message.equals(s1b, + new proto.jspb.test.Simple1(['hi', [], 1]))); + }); + + it('testEqualsComplex', function() { + var data1 = ['a',,, [, 11], [[, 22], [, 33]],, ['s1', 's2'],, 1]; + var data2 = ['a',,, [, 11], [[, 22], [, 34]],, ['s1', 's2'],, 1]; + var data3 = ['a',,, [, 11], [[, 22]],, ['s1', 's2'],, 1]; + var data4 = ['hi']; + var c1a = new proto.jspb.test.Complex(data1); + var c1b = new proto.jspb.test.Complex(data1); + var c2 = new proto.jspb.test.Complex(data2); + var c3 = new proto.jspb.test.Complex(data3); + var s1 = new proto.jspb.test.Simple1(data4); + + assertTrue(jspb.Message.equals(c1a, c1b)); + assertFalse(jspb.Message.equals(c1a, c2)); + assertFalse(jspb.Message.equals(c2, c3)); + assertFalse(jspb.Message.equals(c1a, s1)); + }); + + it('testEqualsExtensionsConstructed', function() { + assertTrue(jspb.Message.equals( + new proto.jspb.test.HasExtensions([]), + new proto.jspb.test.HasExtensions([{}]) + )); + assertTrue(jspb.Message.equals( + new proto.jspb.test.HasExtensions(['hi', {100: [{200: 'a'}]}]), + new proto.jspb.test.HasExtensions(['hi', {100: [{200: 'a'}]}]) + )); + assertFalse(jspb.Message.equals( + new proto.jspb.test.HasExtensions(['hi', {100: [{200: 'a'}]}]), + new proto.jspb.test.HasExtensions(['hi', {100: [{200: 'b'}]}]) + )); + assertTrue(jspb.Message.equals( + new proto.jspb.test.HasExtensions([{100: [{200: 'a'}]}]), + new proto.jspb.test.HasExtensions([{100: [{200: 'a'}]}]) + )); + assertTrue(jspb.Message.equals( + new proto.jspb.test.HasExtensions([{100: [{200: 'a'}]}]), + new proto.jspb.test.HasExtensions([,,, {100: [{200: 'a'}]}]) + )); + assertTrue(jspb.Message.equals( + new proto.jspb.test.HasExtensions([,,, {100: [{200: 'a'}]}]), + new proto.jspb.test.HasExtensions([{100: [{200: 'a'}]}]) + )); + assertTrue(jspb.Message.equals( + new proto.jspb.test.HasExtensions(['hi', {100: [{200: 'a'}]}]), + new proto.jspb.test.HasExtensions(['hi',,, {100: [{200: 'a'}]}]) + )); + assertTrue(jspb.Message.equals( + new proto.jspb.test.HasExtensions(['hi',,, {100: [{200: 'a'}]}]), + new proto.jspb.test.HasExtensions(['hi', {100: [{200: 'a'}]}]) + )); + }); + + it('testEqualsExtensionsUnconstructed', function() { + assertTrue(jspb.Message.compareFields([], [{}])); + assertTrue(jspb.Message.compareFields([,,, {}], [])); + assertTrue(jspb.Message.compareFields([,,, {}], [,, {}])); + assertTrue(jspb.Message.compareFields( + ['hi', {100: [{200: 'a'}]}], ['hi', {100: [{200: 'a'}]}])); + assertFalse(jspb.Message.compareFields( + ['hi', {100: [{200: 'a'}]}], ['hi', {100: [{200: 'b'}]}])); + assertTrue(jspb.Message.compareFields( + [{100: [{200: 'a'}]}], [{100: [{200: 'a'}]}])); + assertTrue(jspb.Message.compareFields( + [{100: [{200: 'a'}]}], [,,, {100: [{200: 'a'}]}])); + assertTrue(jspb.Message.compareFields( + [,,, {100: [{200: 'a'}]}], [{100: [{200: 'a'}]}])); + assertTrue(jspb.Message.compareFields( + ['hi', {100: [{200: 'a'}]}], ['hi',,, {100: [{200: 'a'}]}])); + assertTrue(jspb.Message.compareFields( + ['hi',,, {100: [{200: 'a'}]}], ['hi', {100: [{200: 'a'}]}])); + }); + + it('testToMap', function() { + var p1 = new proto.jspb.test.Simple1(['k', ['v']]); + var p2 = new proto.jspb.test.Simple1(['k1', ['v1', 'v2']]); + var soymap = jspb.Message.toMap([p1, p2], + proto.jspb.test.Simple1.prototype.getAString, + proto.jspb.test.Simple1.prototype.toObject); + assertEquals('k', soymap['k'].aString); + assertArrayEquals(['v'], soymap['k'].aRepeatedStringList); + var protomap = jspb.Message.toMap([p1, p2], + proto.jspb.test.Simple1.prototype.getAString); + assertEquals('k', protomap['k'].getAString()); + assertArrayEquals(['v'], protomap['k'].getARepeatedStringList()); + }); + + it('testClone', function() { + var supportsUint8Array = + !goog.userAgent.IE || goog.userAgent.isVersionOrHigher('10'); + var original = new proto.jspb.test.TestClone(); + original.setStr('v1'); + var simple1 = new proto.jspb.test.Simple1(['x1', ['y1', 'z1']]); + var simple2 = new proto.jspb.test.Simple1(['x2', ['y2', 'z2']]); + var simple3 = new proto.jspb.test.Simple1(['x3', ['y3', 'z3']]); + original.setSimple1(simple1); + original.setSimple2List([simple2, simple3]); + var bytes1 = supportsUint8Array ? new Uint8Array([1, 2, 3]) : '123'; + original.setBytesField(bytes1); + var extension = new proto.jspb.test.CloneExtension(); + extension.setExt('e1'); + original.setExtension(proto.jspb.test.IsExtension.extField, extension); + var clone = original.cloneMessage(); + assertArrayEquals(['v1',, ['x1', ['y1', 'z1']],, + [['x2', ['y2', 'z2']], ['x3', ['y3', 'z3']]], bytes1,, { 100: [, 'e1'] }], + clone.toArray()); + clone.setStr('v2'); + var simple4 = new proto.jspb.test.Simple1(['a1', ['b1', 'c1']]); + var simple5 = new proto.jspb.test.Simple1(['a2', ['b2', 'c2']]); + var simple6 = new proto.jspb.test.Simple1(['a3', ['b3', 'c3']]); + clone.setSimple1(simple4); + clone.setSimple2List([simple5, simple6]); + if (supportsUint8Array) { + clone.getBytesField()[0] = 4; + assertObjectEquals(bytes1, original.getBytesField()); + } + var bytes2 = supportsUint8Array ? new Uint8Array([4, 5, 6]) : '456'; + clone.setBytesField(bytes2); + var newExtension = new proto.jspb.test.CloneExtension(); + newExtension.setExt('e2'); + clone.setExtension(proto.jspb.test.CloneExtension.extField, newExtension); + assertArrayEquals(['v2',, ['a1', ['b1', 'c1']],, + [['a2', ['b2', 'c2']], ['a3', ['b3', 'c3']]], bytes2,, { 100: [, 'e2'] }], + clone.toArray()); + assertArrayEquals(['v1',, ['x1', ['y1', 'z1']],, + [['x2', ['y2', 'z2']], ['x3', ['y3', 'z3']]], bytes1,, { 100: [, 'e1'] }], + original.toArray()); + }); + + it('testCopyInto', function() { + var supportsUint8Array = + !goog.userAgent.IE || goog.userAgent.isVersionOrHigher('10'); + var original = new proto.jspb.test.TestClone(); + original.setStr('v1'); + var dest = new proto.jspb.test.TestClone(); + dest.setStr('override'); + var simple1 = new proto.jspb.test.Simple1(['x1', ['y1', 'z1']]); + var simple2 = new proto.jspb.test.Simple1(['x2', ['y2', 'z2']]); + var simple3 = new proto.jspb.test.Simple1(['x3', ['y3', 'z3']]); + var destSimple1 = new proto.jspb.test.Simple1(['ox1', ['oy1', 'oz1']]); + var destSimple2 = new proto.jspb.test.Simple1(['ox2', ['oy2', 'oz2']]); + var destSimple3 = new proto.jspb.test.Simple1(['ox3', ['oy3', 'oz3']]); + original.setSimple1(simple1); + original.setSimple2List([simple2, simple3]); + dest.setSimple1(destSimple1); + dest.setSimple2List([destSimple2, destSimple3]); + var bytes1 = supportsUint8Array ? new Uint8Array([1, 2, 3]) : '123'; + var bytes2 = supportsUint8Array ? new Uint8Array([4, 5, 6]) : '456'; + original.setBytesField(bytes1); + dest.setBytesField(bytes2); + var extension = new proto.jspb.test.CloneExtension(); + extension.setExt('e1'); + original.setExtension(proto.jspb.test.CloneExtension.extField, extension); + + jspb.Message.copyInto(original, dest); + assertArrayEquals(original.toArray(), dest.toArray()); + assertEquals('x1', dest.getSimple1().getAString()); + assertEquals('e1', + dest.getExtension(proto.jspb.test.CloneExtension.extField).getExt()); + dest.getSimple1().setAString('new value'); + assertNotEquals(dest.getSimple1().getAString(), + original.getSimple1().getAString()); + if (supportsUint8Array) { + dest.getBytesField()[0] = 7; + assertObjectEquals(bytes1, original.getBytesField()); + assertObjectEquals(new Uint8Array([7, 2, 3]), dest.getBytesField()); + } else { + dest.setBytesField('789'); + assertObjectEquals(bytes1, original.getBytesField()); + assertObjectEquals('789', dest.getBytesField()); + } + dest.getExtension(proto.jspb.test.CloneExtension.extField). + setExt('new value'); + assertNotEquals( + dest.getExtension(proto.jspb.test.CloneExtension.extField).getExt(), + original.getExtension( + proto.jspb.test.CloneExtension.extField).getExt()); + }); + + it('testCopyInto_notSameType', function() { + var a = new proto.jspb.test.TestClone(); + var b = new proto.jspb.test.Simple1(['str', ['s1', 's2']]); + + var e = assertThrows(function() { + jspb.Message.copyInto(a, b); + }); + assertContains('should have the same type', e.message); + }); + + it('testExtensions', function() { + var extension1 = new proto.jspb.test.IsExtension(['ext1field']); + var extension2 = new proto.jspb.test.Simple1(['str', ['s1', 's2']]); + var extendable = new proto.jspb.test.HasExtensions(['v1', 'v2', 'v3']); + extendable.setExtension(proto.jspb.test.IsExtension.extField, extension1); + extendable.setExtension(proto.jspb.test.IndirectExtension.simple, + extension2); + extendable.setExtension(proto.jspb.test.IndirectExtension.str, 'xyzzy'); + extendable.setExtension(proto.jspb.test.IndirectExtension.repeatedStrList, + ['a', 'b']); + var s1 = new proto.jspb.test.Simple1(['foo', ['s1', 's2']]); + var s2 = new proto.jspb.test.Simple1(['bar', ['t1', 't2']]); + extendable.setExtension( + proto.jspb.test.IndirectExtension.repeatedSimpleList, + [s1, s2]); + assertObjectEquals(extension1, + extendable.getExtension(proto.jspb.test.IsExtension.extField)); + assertObjectEquals(extension2, + extendable.getExtension(proto.jspb.test.IndirectExtension.simple)); + assertObjectEquals('xyzzy', + extendable.getExtension(proto.jspb.test.IndirectExtension.str)); + assertObjectEquals(['a', 'b'], extendable.getExtension( + proto.jspb.test.IndirectExtension.repeatedStrList)); + assertObjectEquals([s1, s2], extendable.getExtension( + proto.jspb.test.IndirectExtension.repeatedSimpleList)); + // Not supported yet, but it should work... + extendable.setExtension(proto.jspb.test.IndirectExtension.simple, null); + assertNull( + extendable.getExtension(proto.jspb.test.IndirectExtension.simple)); + extendable.setExtension(proto.jspb.test.IndirectExtension.str, null); + assertNull(extendable.getExtension(proto.jspb.test.IndirectExtension.str)); + + + // Extension fields with jspb.ignore = true are ignored. + assertUndefined(proto.jspb.test.IndirectExtension['ignored']); + assertUndefined(proto.jspb.test.HasExtensions['ignoredFloating']); + }); + + it('testFloatingExtensions', function() { + // From an autogenerated container. + var extendable = new proto.jspb.test.HasExtensions(['v1', 'v2', 'v3']); + var extension = new proto.jspb.test.Simple1(['foo', ['s1', 's2']]); + extendable.setExtension(proto.jspb.test.simple1, extension); + assertObjectEquals(extension, + extendable.getExtension(proto.jspb.test.simple1)); + + // From _lib mode. + extension = new proto.jspb.test.ExtensionMessage(['s1']); + extendable = new proto.jspb.test.TestExtensionsMessage([16]); + extendable.setExtension(proto.jspb.test.floatingMsgField, extension); + extendable.setExtension(proto.jspb.test.floatingStrField, 's2'); + assertObjectEquals(extension, + extendable.getExtension(proto.jspb.test.floatingMsgField)); + assertObjectEquals('s2', + extendable.getExtension(proto.jspb.test.floatingStrField)); + assertNotUndefined(proto.jspb.exttest.floatingMsgField); + assertNotUndefined(proto.jspb.exttest.floatingMsgFieldTwo); + assertNotUndefined(proto.jspb.exttest.beta.floatingStrField); + }); + + it('testToObject_extendedObject', function() { + var extension1 = new proto.jspb.test.IsExtension(['ext1field']); + var extension2 = new proto.jspb.test.Simple1(['str', ['s1', 's2'], true]); + var extendable = new proto.jspb.test.HasExtensions(['v1', 'v2', 'v3']); + extendable.setExtension(proto.jspb.test.IsExtension.extField, extension1); + extendable.setExtension(proto.jspb.test.IndirectExtension.simple, + extension2); + extendable.setExtension(proto.jspb.test.IndirectExtension.str, 'xyzzy'); + extendable.setExtension(proto.jspb.test.IndirectExtension.repeatedStrList, + ['a', 'b']); + var s1 = new proto.jspb.test.Simple1(['foo', ['s1', 's2'], true]); + var s2 = new proto.jspb.test.Simple1(['bar', ['t1', 't2'], false]); + extendable.setExtension( + proto.jspb.test.IndirectExtension.repeatedSimpleList, + [s1, s2]); + assertObjectEquals({ + str1: 'v1', str2: 'v2', str3: 'v3', + extField: { ext1: 'ext1field' }, + simple: { + aString: 'str', aRepeatedStringList: ['s1', 's2'], aBoolean: true + }, + str: 'xyzzy', + repeatedStrList: ['a', 'b'], + repeatedSimpleList: [ + { aString: 'foo', aRepeatedStringList: ['s1', 's2'], aBoolean: true}, + { aString: 'bar', aRepeatedStringList: ['t1', 't2'], aBoolean: false} + ] + }, extendable.toObject()); + + // Now, with instances included. + assertObjectEquals({ + str1: 'v1', str2: 'v2', str3: 'v3', + extField: { + ext1: 'ext1field', + $jspbMessageInstance: + extendable.getExtension(proto.jspb.test.IsExtension.extField) + }, + simple: { + aString: 'str', + aRepeatedStringList: ['s1', 's2'], + aBoolean: true, + $jspbMessageInstance: + extendable.getExtension(proto.jspb.test.IndirectExtension.simple) + }, + str: 'xyzzy', + repeatedStrList: ['a', 'b'], + repeatedSimpleList: [{ + aString: 'foo', + aRepeatedStringList: ['s1', 's2'], + aBoolean: true, + $jspbMessageInstance: s1 + }, { + aString: 'bar', + aRepeatedStringList: ['t1', 't2'], + aBoolean: false, + $jspbMessageInstance: s2 + }], + $jspbMessageInstance: extendable + }, extendable.toObject(true /* opt_includeInstance */)); + }); + + it('testInitialization_emptyArray', function() { + var msg = new proto.jspb.test.HasExtensions([]); + if (jspb.Message.MINIMIZE_MEMORY_ALLOCATIONS) { + assertArrayEquals([], msg.toArray()); + } else { + // Extension object is created past all regular fields. + assertArrayEquals([,,, {}], msg.toArray()); + } + }); + + it('testInitialization_justExtensionObject', function() { + var msg = new proto.jspb.test.Empty([{1: 'hi'}]); + // The extensionObject is not moved from its original location. + assertArrayEquals([{1: 'hi'}], msg.toArray()); + }); + + it('testInitialization_incompleteList', function() { + var msg = new proto.jspb.test.Empty([1, {4: 'hi'}]); + // The extensionObject is not moved from its original location. + assertArrayEquals([1, {4: 'hi'}], msg.toArray()); + }); + + it('testInitialization_forwardCompatible', function() { + var msg = new proto.jspb.test.Empty([1, 2, 3, {1: 'hi'}]); + assertArrayEquals([1, 2, 3, {1: 'hi'}], msg.toArray()); + }); + + it('testExtendedMessageEnsureObject', function() { + var data = new proto.jspb.test.HasExtensions(['str1', + {'a_key': 'an_object'}]); + assertEquals('an_object', data.extensionObject_['a_key']); + }); + + it('testToObject_hasExtensionField', function() { + var data = new proto.jspb.test.HasExtensions(['str1', {100: ['ext1']}]); + var obj = data.toObject(); + assertEquals('str1', obj.str1); + assertEquals('ext1', obj.extField.ext1); + }); + + it('testGetExtension', function() { + var data = new proto.jspb.test.HasExtensions(['str1', {100: ['ext1']}]); + assertEquals('str1', data.getStr1()); + var extension = data.getExtension(proto.jspb.test.IsExtension.extField); + assertNotNull(extension); + assertEquals('ext1', extension.getExt1()); + }); + + it('testSetExtension', function() { + var data = new proto.jspb.test.HasExtensions(); + var extensionMessage = new proto.jspb.test.IsExtension(['is_extension']); + data.setExtension(proto.jspb.test.IsExtension.extField, extensionMessage); + var obj = data.toObject(); + assertNotNull( + data.getExtension(proto.jspb.test.IsExtension.extField)); + assertEquals('is_extension', obj.extField.ext1); + }); + + /** + * Note that group is long deprecated, we only support it because JsPb has + * a goal of being able to generate JS classes for all proto descriptors. + */ + it('testGroups', function() { + var group = new proto.jspb.test.TestGroup(); + var someGroup = new proto.jspb.test.TestGroup.RepeatedGroup(); + someGroup.setId('g1'); + someGroup.setSomeBoolList([true, false]); + group.setRepeatedGroupList([someGroup]); + var groups = group.getRepeatedGroupList(); + assertEquals('g1', groups[0].getId()); + assertObjectEquals([true, false], groups[0].getSomeBoolList()); + assertObjectEquals({id: 'g1', someBoolList: [true, false]}, + groups[0].toObject()); + assertObjectEquals({ + repeatedGroupList: [{id: 'g1', someBoolList: [true, false]}], + requiredGroup: {id: undefined}, + optionalGroup: undefined, + requiredSimple: {aRepeatedStringList: [], aString: undefined}, + optionalSimple: undefined, + id: undefined + }, group.toObject()); + var group1 = new proto.jspb.test.TestGroup1(); + group1.setGroup(someGroup); + assertEquals(someGroup, group1.getGroup()); + }); + + it('testNonExtensionFieldsAfterExtensionRange', function() { + var data = [{'1': 'a_string'}]; + var message = new proto.jspb.test.Complex(data); + assertArrayEquals([], message.getARepeatedStringList()); + }); + + it('testReservedGetterNames', function() { + var message = new proto.jspb.test.TestReservedNames(); + message.setExtension$(11); + message.setExtension(proto.jspb.test.TestReservedNamesExtension.foo, 12); + assertEquals(11, message.getExtension$()); + assertEquals(12, message.getExtension( + proto.jspb.test.TestReservedNamesExtension.foo)); + assertObjectEquals({extension: 11, foo: 12}, message.toObject()); + }); + + it('testInitializeMessageWithUnsetOneof', function() { + var message = new proto.jspb.test.TestMessageWithOneof([]); + assertEquals( + proto.jspb.test.TestMessageWithOneof.PartialOneofCase. + PARTIAL_ONEOF_NOT_SET, + message.getPartialOneofCase()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.RecursiveOneofCase. + RECURSIVE_ONEOF_NOT_SET, + message.getRecursiveOneofCase()); + }); + + it('testInitializeMessageWithSingleValueSetInOneof', function() { + var message = new proto.jspb.test.TestMessageWithOneof([,, 'x']); + + assertEquals('x', message.getPone()); + assertEquals('', message.getPthree()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.PartialOneofCase.PONE, + message.getPartialOneofCase()); + }); + + it('testKeepsLastWireValueSetInUnion_multipleValues', function() { + var message = new proto.jspb.test.TestMessageWithOneof([,, 'x',, 'y']); + + assertEquals('', message.getPone()); + assertEquals('y', message.getPthree()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.PartialOneofCase.PTHREE, + message.getPartialOneofCase()); + }); + + it('testSettingOneofFieldClearsOthers', function() { + var message = new proto.jspb.test.TestMessageWithOneof; + assertEquals('', message.getPone()); + assertEquals('', message.getPthree()); + assertFalse(message.hasPone()); + assertFalse(message.hasPthree()); + + message.setPone('hi'); + assertEquals('hi', message.getPone()); + assertEquals('', message.getPthree()); + assertTrue(message.hasPone()); + assertFalse(message.hasPthree()); + + message.setPthree('bye'); + assertEquals('', message.getPone()); + assertEquals('bye', message.getPthree()); + assertFalse(message.hasPone()); + assertTrue(message.hasPthree()); + }); + + it('testSettingOneofFieldDoesNotClearFieldsFromOtherUnions', function() { + var other = new proto.jspb.test.TestMessageWithOneof; + var message = new proto.jspb.test.TestMessageWithOneof; + assertEquals('', message.getPone()); + assertEquals('', message.getPthree()); + assertUndefined(message.getRone()); + assertFalse(message.hasPone()); + assertFalse(message.hasPthree()); + + message.setPone('hi'); + message.setRone(other); + assertEquals('hi', message.getPone()); + assertEquals('', message.getPthree()); + assertEquals(other, message.getRone()); + assertTrue(message.hasPone()); + assertFalse(message.hasPthree()); + + message.setPthree('bye'); + assertEquals('', message.getPone()); + assertEquals('bye', message.getPthree()); + assertEquals(other, message.getRone()); + assertFalse(message.hasPone()); + assertTrue(message.hasPthree()); + }); + + it('testUnsetsOneofCaseWhenFieldIsCleared', function() { + var message = new proto.jspb.test.TestMessageWithOneof; + assertEquals( + proto.jspb.test.TestMessageWithOneof.PartialOneofCase. + PARTIAL_ONEOF_NOT_SET, + message.getPartialOneofCase()); + + message.setPone('hi'); + assertEquals( + proto.jspb.test.TestMessageWithOneof.PartialOneofCase.PONE, + message.getPartialOneofCase()); + + message.clearPone(); + assertEquals( + proto.jspb.test.TestMessageWithOneof.PartialOneofCase. + PARTIAL_ONEOF_NOT_SET, + message.getPartialOneofCase()); + }); + + it('testMessageWithDefaultOneofValues', function() { + var message = new proto.jspb.test.TestMessageWithOneof; + assertEquals(1234, message.getAone()); + assertEquals(0, message.getAtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofACase + .DEFAULT_ONEOF_A_NOT_SET, + message.getDefaultOneofACase()); + + message.setAone(567); + assertEquals(567, message.getAone()); + assertEquals(0, message.getAtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofACase.AONE, + message.getDefaultOneofACase()); + + message.setAtwo(890); + assertEquals(1234, message.getAone()); + assertEquals(890, message.getAtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofACase.ATWO, + message.getDefaultOneofACase()); + + message.clearAtwo(); + assertEquals(1234, message.getAone()); + assertEquals(0, message.getAtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofACase + .DEFAULT_ONEOF_A_NOT_SET, + message.getDefaultOneofACase()); + }); + + it('testMessageWithDefaultOneofValues_defaultNotOnFirstField', function() { + var message = new proto.jspb.test.TestMessageWithOneof; + assertEquals(0, message.getBone()); + assertEquals(1234, message.getBtwo()); + assertFalse(message.hasBone()); + assertFalse(message.hasBtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase + .DEFAULT_ONEOF_B_NOT_SET, + message.getDefaultOneofBCase()); + + message.setBone(2); + assertEquals(2, message.getBone()); + assertEquals(1234, message.getBtwo()); + assertTrue(message.hasBone()); + assertFalse(message.hasBtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase.BONE, + message.getDefaultOneofBCase()); + + message.setBtwo(3); + assertEquals(0, message.getBone()); + assertFalse(message.hasBone()); + assertTrue(message.hasBtwo()); + assertEquals(3, message.getBtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase.BTWO, + message.getDefaultOneofBCase()); + + message.clearBtwo(); + assertEquals(0, message.getBone()); + assertFalse(message.hasBone()); + assertFalse(message.hasBtwo()); + assertEquals(1234, message.getBtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase + .DEFAULT_ONEOF_B_NOT_SET, + message.getDefaultOneofBCase()); + }); + + it('testInitializeMessageWithOneofDefaults', function() { + var message = + new proto.jspb.test.TestMessageWithOneof(new Array(9).concat(567)); + assertEquals(567, message.getAone()); + assertEquals(0, message.getAtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofACase.AONE, + message.getDefaultOneofACase()); + + message = + new proto.jspb.test.TestMessageWithOneof(new Array(10).concat(890)); + assertEquals(1234, message.getAone()); + assertEquals(890, message.getAtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofACase.ATWO, + message.getDefaultOneofACase()); + + message = + new proto.jspb.test.TestMessageWithOneof(new Array(9).concat(567, 890)); + assertEquals(1234, message.getAone()); + assertEquals(890, message.getAtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofACase.ATWO, + message.getDefaultOneofACase()); + }); + + it('testInitializeMessageWithOneofDefaults_defaultNotSetOnFirstField', + function() { + var message; + + message = + new proto.jspb.test.TestMessageWithOneof(new Array(11).concat(567)); + assertEquals(567, message.getBone()); + assertEquals(1234, message.getBtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase.BONE, + message.getDefaultOneofBCase()); + + message = + new proto.jspb.test.TestMessageWithOneof(new Array(12).concat(890)); + assertEquals(0, message.getBone()); + assertEquals(890, message.getBtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase.BTWO, + message.getDefaultOneofBCase()); + + message = new proto.jspb.test.TestMessageWithOneof( + new Array(11).concat(567, 890)); + assertEquals(0, message.getBone()); + assertEquals(890, message.getBtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.DefaultOneofBCase.BTWO, + message.getDefaultOneofBCase()); + }); + + it('testOneofContainingAnotherMessage', function() { + var message = new proto.jspb.test.TestMessageWithOneof; + assertEquals( + proto.jspb.test.TestMessageWithOneof.RecursiveOneofCase. + RECURSIVE_ONEOF_NOT_SET, + message.getRecursiveOneofCase()); + + var other = new proto.jspb.test.TestMessageWithOneof; + message.setRone(other); + assertEquals(other, message.getRone()); + assertEquals('', message.getRtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.RecursiveOneofCase.RONE, + message.getRecursiveOneofCase()); + + message.setRtwo('hi'); + assertUndefined(message.getRone()); + assertEquals('hi', message.getRtwo()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.RecursiveOneofCase.RTWO, + message.getRecursiveOneofCase()); + }); + + it('testQueryingOneofCaseEnsuresOnlyOneFieldIsSetInUnderlyingArray', + function() { + var message = new proto.jspb.test.TestMessageWithOneof; + message.setPone('x'); + assertEquals('x', message.getPone()); + assertEquals('', message.getPthree()); + assertEquals( + proto.jspb.test.TestMessageWithOneof.PartialOneofCase.PONE, + message.getPartialOneofCase()); + + var array = message.toArray(); + assertEquals('x', array[2]); + assertUndefined(array[4]); + array[4] = 'y'; + + assertEquals( + proto.jspb.test.TestMessageWithOneof.PartialOneofCase.PTHREE, + message.getPartialOneofCase()); + assertUndefined(array[2]); + assertEquals('y', array[4]); + }); + + it('testFloatingPointFieldsSupportNan', function() { + var assertNan = function(x) { + assertTrue('Expected ' + x + ' (' + goog.typeOf(x) + ') to be NaN.', + goog.isNumber(x) && isNaN(x)); + }; + + var message = new proto.jspb.test.FloatingPointFields([ + 'NaN', 'NaN', ['NaN', 'NaN'], 'NaN', + 'NaN', 'NaN', ['NaN', 'NaN'], 'NaN' + ]); + assertNan(message.getOptionalFloatField()); + assertNan(message.getRequiredFloatField()); + assertNan(message.getRepeatedFloatFieldList()[0]); + assertNan(message.getRepeatedFloatFieldList()[1]); + assertNan(message.getDefaultFloatField()); + assertNan(message.getOptionalDoubleField()); + assertNan(message.getRequiredDoubleField()); + assertNan(message.getRepeatedDoubleFieldList()[0]); + assertNan(message.getRepeatedDoubleFieldList()[1]); + assertNan(message.getDefaultDoubleField()); + }); + +}); diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/proto3_test.js b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/proto3_test.js new file mode 100644 index 00000000000000..fab0fd44ffe705 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/proto3_test.js @@ -0,0 +1,329 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +goog.require('goog.crypt.base64'); +goog.require('goog.testing.asserts'); + +// CommonJS-LoadFromFile: testbinary_pb proto.jspb.test +goog.require('proto.jspb.test.ForeignMessage'); + +// CommonJS-LoadFromFile: proto3_test_pb proto.jspb.test +goog.require('proto.jspb.test.Proto3Enum'); +goog.require('proto.jspb.test.TestProto3'); + + +var BYTES = new Uint8Array([1, 2, 8, 9]); +var BYTES_B64 = goog.crypt.base64.encodeByteArray(BYTES); + + +/** + * Helper: compare a bytes field to an expected value + * @param {Uint8Array|string} arr + * @param {Uint8Array} expected + * @return {boolean} + */ +function bytesCompare(arr, expected) { + if (goog.isString(arr)) { + arr = goog.crypt.base64.decodeStringToUint8Array(arr); + } + if (arr.length != expected.length) { + return false; + } + for (var i = 0; i < arr.length; i++) { + if (arr[i] != expected[i]) { + return false; + } + } + return true; +} + + +describe('proto3Test', function() { + /** + * Test defaults for proto3 message fields. + */ + it('testProto3FieldDefaults', function() { + var msg = new proto.jspb.test.TestProto3(); + + assertEquals(msg.getOptionalInt32(), 0); + assertEquals(msg.getOptionalInt64(), 0); + assertEquals(msg.getOptionalUint32(), 0); + assertEquals(msg.getOptionalUint64(), 0); + assertEquals(msg.getOptionalSint32(), 0); + assertEquals(msg.getOptionalSint64(), 0); + assertEquals(msg.getOptionalFixed32(), 0); + assertEquals(msg.getOptionalFixed64(), 0); + assertEquals(msg.getOptionalSfixed32(), 0); + assertEquals(msg.getOptionalSfixed64(), 0); + assertEquals(msg.getOptionalFloat(), 0); + assertEquals(msg.getOptionalDouble(), 0); + assertEquals(msg.getOptionalString(), ''); + + // TODO(b/26173701): when we change bytes fields default getter to return + // Uint8Array, we'll want to switch this assertion to match the u8 case. + assertEquals(typeof msg.getOptionalBytes(), 'string'); + assertEquals(msg.getOptionalBytes_asU8() instanceof Uint8Array, true); + assertEquals(typeof msg.getOptionalBytes_asB64(), 'string'); + assertEquals(msg.getOptionalBytes().length, 0); + assertEquals(msg.getOptionalBytes_asU8().length, 0); + assertEquals(msg.getOptionalBytes_asB64(), ''); + + assertEquals(msg.getOptionalForeignEnum(), + proto.jspb.test.Proto3Enum.PROTO3_FOO); + assertEquals(msg.getOptionalForeignMessage(), undefined); + assertEquals(msg.getOptionalForeignMessage(), undefined); + + assertEquals(msg.getRepeatedInt32List().length, 0); + assertEquals(msg.getRepeatedInt64List().length, 0); + assertEquals(msg.getRepeatedUint32List().length, 0); + assertEquals(msg.getRepeatedUint64List().length, 0); + assertEquals(msg.getRepeatedSint32List().length, 0); + assertEquals(msg.getRepeatedSint64List().length, 0); + assertEquals(msg.getRepeatedFixed32List().length, 0); + assertEquals(msg.getRepeatedFixed64List().length, 0); + assertEquals(msg.getRepeatedSfixed32List().length, 0); + assertEquals(msg.getRepeatedSfixed64List().length, 0); + assertEquals(msg.getRepeatedFloatList().length, 0); + assertEquals(msg.getRepeatedDoubleList().length, 0); + assertEquals(msg.getRepeatedStringList().length, 0); + assertEquals(msg.getRepeatedBytesList().length, 0); + assertEquals(msg.getRepeatedForeignEnumList().length, 0); + assertEquals(msg.getRepeatedForeignMessageList().length, 0); + + }); + + + /** + * Test that all fields can be set and read via a serialization roundtrip. + */ + it('testProto3FieldSetGet', function() { + var msg = new proto.jspb.test.TestProto3(); + + msg.setOptionalInt32(-42); + msg.setOptionalInt64(-0x7fffffff00000000); + msg.setOptionalUint32(0x80000000); + msg.setOptionalUint64(0xf000000000000000); + msg.setOptionalSint32(-100); + msg.setOptionalSint64(-0x8000000000000000); + msg.setOptionalFixed32(1234); + msg.setOptionalFixed64(0x1234567800000000); + msg.setOptionalSfixed32(-1234); + msg.setOptionalSfixed64(-0x1234567800000000); + msg.setOptionalFloat(1.5); + msg.setOptionalDouble(-1.5); + msg.setOptionalBool(true); + msg.setOptionalString('hello world'); + msg.setOptionalBytes(BYTES); + var submsg = new proto.jspb.test.ForeignMessage(); + submsg.setC(16); + msg.setOptionalForeignMessage(submsg); + msg.setOptionalForeignEnum(proto.jspb.test.Proto3Enum.PROTO3_BAR); + + msg.setRepeatedInt32List([-42]); + msg.setRepeatedInt64List([-0x7fffffff00000000]); + msg.setRepeatedUint32List([0x80000000]); + msg.setRepeatedUint64List([0xf000000000000000]); + msg.setRepeatedSint32List([-100]); + msg.setRepeatedSint64List([-0x8000000000000000]); + msg.setRepeatedFixed32List([1234]); + msg.setRepeatedFixed64List([0x1234567800000000]); + msg.setRepeatedSfixed32List([-1234]); + msg.setRepeatedSfixed64List([-0x1234567800000000]); + msg.setRepeatedFloatList([1.5]); + msg.setRepeatedDoubleList([-1.5]); + msg.setRepeatedBoolList([true]); + msg.setRepeatedStringList(['hello world']); + msg.setRepeatedBytesList([BYTES]); + submsg = new proto.jspb.test.ForeignMessage(); + submsg.setC(1000); + msg.setRepeatedForeignMessageList([submsg]); + msg.setRepeatedForeignEnumList([proto.jspb.test.Proto3Enum.PROTO3_BAR]); + + msg.setOneofString('asdf'); + + var serialized = msg.serializeBinary(); + msg = proto.jspb.test.TestProto3.deserializeBinary(serialized); + + assertEquals(msg.getOptionalInt32(), -42); + assertEquals(msg.getOptionalInt64(), -0x7fffffff00000000); + assertEquals(msg.getOptionalUint32(), 0x80000000); + assertEquals(msg.getOptionalUint64(), 0xf000000000000000); + assertEquals(msg.getOptionalSint32(), -100); + assertEquals(msg.getOptionalSint64(), -0x8000000000000000); + assertEquals(msg.getOptionalFixed32(), 1234); + assertEquals(msg.getOptionalFixed64(), 0x1234567800000000); + assertEquals(msg.getOptionalSfixed32(), -1234); + assertEquals(msg.getOptionalSfixed64(), -0x1234567800000000); + assertEquals(msg.getOptionalFloat(), 1.5); + assertEquals(msg.getOptionalDouble(), -1.5); + assertEquals(msg.getOptionalBool(), true); + assertEquals(msg.getOptionalString(), 'hello world'); + assertEquals(true, bytesCompare(msg.getOptionalBytes(), BYTES)); + assertEquals(msg.getOptionalForeignMessage().getC(), 16); + assertEquals(msg.getOptionalForeignEnum(), + proto.jspb.test.Proto3Enum.PROTO3_BAR); + + assertElementsEquals(msg.getRepeatedInt32List(), [-42]); + assertElementsEquals(msg.getRepeatedInt64List(), [-0x7fffffff00000000]); + assertElementsEquals(msg.getRepeatedUint32List(), [0x80000000]); + assertElementsEquals(msg.getRepeatedUint64List(), [0xf000000000000000]); + assertElementsEquals(msg.getRepeatedSint32List(), [-100]); + assertElementsEquals(msg.getRepeatedSint64List(), [-0x8000000000000000]); + assertElementsEquals(msg.getRepeatedFixed32List(), [1234]); + assertElementsEquals(msg.getRepeatedFixed64List(), [0x1234567800000000]); + assertElementsEquals(msg.getRepeatedSfixed32List(), [-1234]); + assertElementsEquals(msg.getRepeatedSfixed64List(), [-0x1234567800000000]); + assertElementsEquals(msg.getRepeatedFloatList(), [1.5]); + assertElementsEquals(msg.getRepeatedDoubleList(), [-1.5]); + assertElementsEquals(msg.getRepeatedBoolList(), [true]); + assertElementsEquals(msg.getRepeatedStringList(), ['hello world']); + assertEquals(msg.getRepeatedBytesList().length, 1); + assertEquals(true, bytesCompare(msg.getRepeatedBytesList()[0], BYTES)); + assertEquals(msg.getRepeatedForeignMessageList().length, 1); + assertEquals(msg.getRepeatedForeignMessageList()[0].getC(), 1000); + assertElementsEquals(msg.getRepeatedForeignEnumList(), + [proto.jspb.test.Proto3Enum.PROTO3_BAR]); + + assertEquals(msg.getOneofString(), 'asdf'); + }); + + + /** + * Test that oneofs continue to have a notion of field presence. + */ + it('testOneofs', function() { + var msg = new proto.jspb.test.TestProto3(); + + assertEquals(msg.getOneofUint32(), 0); + assertEquals(msg.getOneofForeignMessage(), undefined); + assertEquals(msg.getOneofString(), ''); + assertEquals(msg.getOneofBytes(), ''); + assertFalse(msg.hasOneofUint32()); + assertFalse(msg.hasOneofString()); + assertFalse(msg.hasOneofBytes()); + + msg.setOneofUint32(42); + assertEquals(msg.getOneofUint32(), 42); + assertEquals(msg.getOneofForeignMessage(), undefined); + assertEquals(msg.getOneofString(), ''); + assertEquals(msg.getOneofBytes(), ''); + assertTrue(msg.hasOneofUint32()); + assertFalse(msg.hasOneofString()); + assertFalse(msg.hasOneofBytes()); + + + var submsg = new proto.jspb.test.ForeignMessage(); + msg.setOneofForeignMessage(submsg); + assertEquals(msg.getOneofUint32(), 0); + assertEquals(msg.getOneofForeignMessage(), submsg); + assertEquals(msg.getOneofString(), ''); + assertEquals(msg.getOneofBytes(), ''); + assertFalse(msg.hasOneofUint32()); + assertFalse(msg.hasOneofString()); + assertFalse(msg.hasOneofBytes()); + + msg.setOneofString('hello'); + assertEquals(msg.getOneofUint32(), 0); + assertEquals(msg.getOneofForeignMessage(), undefined); + assertEquals(msg.getOneofString(), 'hello'); + assertEquals(msg.getOneofBytes(), ''); + assertFalse(msg.hasOneofUint32()); + assertTrue(msg.hasOneofString()); + assertFalse(msg.hasOneofBytes()); + + msg.setOneofBytes(goog.crypt.base64.encodeString('\u00FF\u00FF')); + assertEquals(msg.getOneofUint32(), 0); + assertEquals(msg.getOneofForeignMessage(), undefined); + assertEquals(msg.getOneofString(), ''); + assertEquals(msg.getOneofBytes_asB64(), + goog.crypt.base64.encodeString('\u00FF\u00FF')); + assertFalse(msg.hasOneofUint32()); + assertFalse(msg.hasOneofString()); + assertTrue(msg.hasOneofBytes()); + }); + + + /** + * Test that "default"-valued primitive fields are not emitted on the wire. + */ + it('testNoSerializeDefaults', function() { + var msg = new proto.jspb.test.TestProto3(); + + // Set each primitive to a non-default value, then back to its default, to + // ensure that the serialization is actually checking the value and not just + // whether it has ever been set. + msg.setOptionalInt32(42); + msg.setOptionalInt32(0); + msg.setOptionalDouble(3.14); + msg.setOptionalDouble(0.0); + msg.setOptionalBool(true); + msg.setOptionalBool(false); + msg.setOptionalString('hello world'); + msg.setOptionalString(''); + msg.setOptionalBytes(goog.crypt.base64.encodeString('\u00FF\u00FF')); + msg.setOptionalBytes(''); + msg.setOptionalForeignMessage(new proto.jspb.test.ForeignMessage()); + msg.setOptionalForeignMessage(null); + msg.setOptionalForeignEnum(proto.jspb.test.Proto3Enum.PROTO3_BAR); + msg.setOptionalForeignEnum(proto.jspb.test.Proto3Enum.PROTO3_FOO); + msg.setOneofUint32(32); + msg.setOneofUint32(null); + + + var serialized = msg.serializeBinary(); + assertEquals(0, serialized.length); + }); + + /** + * Test that base64 string and Uint8Array are interchangeable in bytes fields. + */ + it('testBytesFieldsInterop', function() { + var msg = new proto.jspb.test.TestProto3(); + // Set as a base64 string and check all the getters work. + msg.setOptionalBytes(BYTES_B64); + assertTrue(bytesCompare(msg.getOptionalBytes_asU8(), BYTES)); + assertTrue(bytesCompare(msg.getOptionalBytes_asB64(), BYTES)); + assertTrue(bytesCompare(msg.getOptionalBytes(), BYTES)); + + // Test binary serialize round trip doesn't break it. + msg = proto.jspb.test.TestProto3.deserializeBinary(msg.serializeBinary()); + assertTrue(bytesCompare(msg.getOptionalBytes_asU8(), BYTES)); + assertTrue(bytesCompare(msg.getOptionalBytes_asB64(), BYTES)); + assertTrue(bytesCompare(msg.getOptionalBytes(), BYTES)); + + msg = new proto.jspb.test.TestProto3(); + // Set as a Uint8Array and check all the getters work. + msg.setOptionalBytes(BYTES); + assertTrue(bytesCompare(msg.getOptionalBytes_asU8(), BYTES)); + assertTrue(bytesCompare(msg.getOptionalBytes_asB64(), BYTES)); + assertTrue(bytesCompare(msg.getOptionalBytes(), BYTES)); + + }); +}); diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/proto3_test.proto b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/proto3_test.proto new file mode 100644 index 00000000000000..acb67164924df9 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/proto3_test.proto @@ -0,0 +1,89 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +import "testbinary.proto"; + +package jspb.test; + +message TestProto3 { + int32 optional_int32 = 1; + int64 optional_int64 = 2; + uint32 optional_uint32 = 3; + uint64 optional_uint64 = 4; + sint32 optional_sint32 = 5; + sint64 optional_sint64 = 6; + fixed32 optional_fixed32 = 7; + fixed64 optional_fixed64 = 8; + sfixed32 optional_sfixed32 = 9; + sfixed64 optional_sfixed64 = 10; + float optional_float = 11; + double optional_double = 12; + bool optional_bool = 13; + string optional_string = 14; + bytes optional_bytes = 15; + + ForeignMessage optional_foreign_message = 19; + Proto3Enum optional_foreign_enum = 22; + + repeated int32 repeated_int32 = 31; + repeated int64 repeated_int64 = 32; + repeated uint32 repeated_uint32 = 33; + repeated uint64 repeated_uint64 = 34; + repeated sint32 repeated_sint32 = 35; + repeated sint64 repeated_sint64 = 36; + repeated fixed32 repeated_fixed32 = 37; + repeated fixed64 repeated_fixed64 = 38; + repeated sfixed32 repeated_sfixed32 = 39; + repeated sfixed64 repeated_sfixed64 = 40; + repeated float repeated_float = 41; + repeated double repeated_double = 42; + repeated bool repeated_bool = 43; + repeated string repeated_string = 44; + repeated bytes repeated_bytes = 45; + + repeated ForeignMessage repeated_foreign_message = 49; + repeated Proto3Enum repeated_foreign_enum = 52; + + + oneof oneof_field { + uint32 oneof_uint32 = 111; + ForeignMessage oneof_foreign_message = 112; + string oneof_string = 113; + bytes oneof_bytes = 114; + } +} + +enum Proto3Enum { + PROTO3_FOO = 0; + PROTO3_BAR = 1; + PROTO3_BAZ = 2; +} diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test.proto b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test.proto new file mode 100644 index 00000000000000..937ffb89ce53f7 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test.proto @@ -0,0 +1,236 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: mwr@google.com (Mark Rawling) + +syntax = "proto2"; + +option java_package = "com.google.apps.jspb.proto"; +option java_multiple_files = true; + +import "google/protobuf/descriptor.proto"; + +package jspb.test; + +message Empty { +} + +enum OuterEnum { + FOO = 1; + BAR = 2; +} + +message EnumContainer { + optional OuterEnum outer_enum = 1; +} + +message Simple1 { + required string a_string = 1; + repeated string a_repeated_string = 2; + optional bool a_boolean = 3; +} + +// A message that differs from Simple1 only by name +message Simple2 { + required string a_string = 1; + repeated string a_repeated_string = 2; +} + +message SpecialCases { + required string normal = 1; + // Examples of Js reserved names that are converted to pb_. + required string default = 2; + required string function = 3; + required string var = 4; +} + +message OptionalFields { + message Nested { + optional int32 an_int = 1; + } + optional string a_string = 1; + required bool a_bool = 2; + optional Nested a_nested_message = 3; + repeated Nested a_repeated_message = 4; + repeated string a_repeated_string = 5; +} + +message HasExtensions { + optional string str1 = 1; + optional string str2 = 2; + optional string str3 = 3; + extensions 10 to max; +} + +message Complex { + message Nested { + required int32 an_int = 2; + } + required string a_string = 1; + required bool an_out_of_order_bool = 9; + optional Nested a_nested_message = 4; + repeated Nested a_repeated_message = 5; + repeated string a_repeated_string = 7; +} + +message OuterMessage { + // Make sure this doesn't conflict with the other Complex message. + message Complex { + optional int32 inner_complex_field = 1; + } +} + +message IsExtension { + extend HasExtensions { + optional IsExtension ext_field = 100; + } + optional string ext1 = 1; + + // Extensions of proto2 Descriptor messages will be ignored. + extend google.protobuf.EnumOptions { + optional string simple_option = 42113038; + } +} + +message IndirectExtension { + extend HasExtensions { + optional Simple1 simple = 101; + optional string str = 102; + repeated string repeated_str = 103; + repeated Simple1 repeated_simple = 104; + } +} + +extend HasExtensions { + optional Simple1 simple1 = 105; +} + +message DefaultValues { + enum Enum { + E1 = 13; + E2 = 77; + } + optional string string_field = 1 [default="default<>\'\"abc"]; + optional bool bool_field = 2 [default=true]; + optional int64 int_field = 3 [default=11]; + optional Enum enum_field = 4 [default=E1]; + optional string empty_field = 6 [default=""]; + optional bytes bytes_field = 8 [default="moo"]; // Base64 encoding is "bW9v" +} + +message FloatingPointFields { + optional float optional_float_field = 1; + required float required_float_field = 2; + repeated float repeated_float_field = 3; + optional float default_float_field = 4 [default = 2.0]; + optional double optional_double_field = 5; + required double required_double_field = 6; + repeated double repeated_double_field = 7; + optional double default_double_field = 8 [default = 2.0]; +} + +message TestClone { + optional string str = 1; + optional Simple1 simple1 = 3; + repeated Simple1 simple2 = 5; + optional bytes bytes_field = 6; + optional string unused = 7; + extensions 10 to max; +} + +message CloneExtension { + extend TestClone { + optional CloneExtension ext_field = 100; + } + optional string ext = 2; +} + +message TestGroup { + repeated group RepeatedGroup = 1 { + required string id = 1; + repeated bool some_bool = 2; + } + required group RequiredGroup = 2 { + required string id = 1; + } + optional group OptionalGroup = 3 { + required string id = 1; + } + optional string id = 4; + required Simple2 required_simple = 5; + optional Simple2 optional_simple = 6; +} + +message TestGroup1 { + optional TestGroup.RepeatedGroup group = 1; +} + +message TestReservedNames { + optional int32 extension = 1; + extensions 10 to max; +} + +message TestReservedNamesExtension { + extend TestReservedNames { + optional int32 foo = 10; + } +} + +message TestMessageWithOneof { + + oneof partial_oneof { + string pone = 3; + string pthree = 5; + } + + oneof recursive_oneof { + TestMessageWithOneof rone = 6; + string rtwo = 7; + } + + optional bool normal_field = 8; + repeated string repeated_field = 9; + + oneof default_oneof_a { + int32 aone = 10 [default = 1234]; + int32 atwo = 11; + } + + oneof default_oneof_b { + int32 bone = 12; + int32 btwo = 13 [default = 1234]; + } +} + +message TestEndsWithBytes { + optional int32 value = 1; + optional bytes data = 2; +} + diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test.sh b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test.sh new file mode 100755 index 00000000000000..9d58f30ac3628e --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test.sh @@ -0,0 +1,92 @@ +#!/bin/bash + +set -e + +# Download protoc 3.0.0 from Maven if it is not already present. +OLD_PROTOC_URL=https://repo1.maven.org/maven2/com/google/protobuf/protoc/3.0.0/protoc-3.0.0-linux-x86_64.exe +if [ ! -f protoc ]; then + wget $OLD_PROTOC_URL -O protoc + chmod +x protoc +fi + +pushd ../.. +npm install && npm test +popd + +old_protoc=./protoc +new_protoc=../../../src/protoc + +# The protos in group 2 have some dependencies on protos in group 1. The tests +# will verify that the generated code for one group can be regenerated +# independently of the other group in a compatible way. +# +# Note: these lists of protos duplicate the lists in gulpfile.js. Ideally we +# should find a good way of having a single source of truth for this. +group1_protos="data.proto test3.proto test5.proto commonjs/test6/test6.proto testbinary.proto testempty.proto test.proto" +group2_protos="proto3_test.proto test2.proto test4.proto commonjs/test7/test7.proto" + +# We test the following cases: +# +# Case 1: build groups 1 and 2 with the old protoc +# Case 2: build group 1 with new protoc but group 2 with old protoc +# Case 3: build group 1 with old protoc but group 2 with new protoc +# +# In each case, we use the current runtime. + +# +# CommonJS tests +# +mkdir -p commonjs_out{1,2,3} +# Case 1 +$old_protoc --js_out=import_style=commonjs,binary:commonjs_out1 -I ../../../src -I commonjs -I . $group1_protos +$old_protoc --js_out=import_style=commonjs,binary:commonjs_out1 -I ../../../src -I commonjs -I . $group2_protos +# Case 2 +$new_protoc --js_out=import_style=commonjs,binary:commonjs_out2 -I ../../../src -I commonjs -I . $group1_protos +$old_protoc --js_out=import_style=commonjs,binary:commonjs_out2 -I ../../../src -I commonjs -I . $group2_protos +# Case 3 +$old_protoc --js_out=import_style=commonjs,binary:commonjs_out3 -I ../../../src -I commonjs -I . $group1_protos +$new_protoc --js_out=import_style=commonjs,binary:commonjs_out3 -I ../../../src -I commonjs -I . $group2_protos + +mkdir -p commonjs_out/binary +for file in *_test.js binary/*_test.js; do + node commonjs/rewrite_tests_for_commonjs.js < "$file" > "commonjs_out/$file" +done +cp commonjs/{jasmine.json,import_test.js} commonjs_out/ +mkdir -p commonjs_out/test_node_modules +../../node_modules/google-closure-library/closure/bin/calcdeps.py -i commonjs/export_asserts.js -p . -p ../../node_modules/google-closure-library/closure -o compiled --compiler_jar ../../node_modules/google-closure-compiler/compiler.jar > commonjs_out/test_node_modules/closure_asserts_commonjs.js +../../node_modules/google-closure-library/closure/bin/calcdeps.py -i commonjs/export_testdeps.js -p ../.. -p ../../node_modules/google-closure-library/closure -o compiled --compiler_jar ../../node_modules/google-closure-compiler/compiler.jar > commonjs_out/test_node_modules/testdeps_commonjs.js +cp ../../google-protobuf.js commonjs_out/test_node_modules +cp -r ../../commonjs_out/node_modules commonjs_out + +echo +echo "Running tests with CommonJS imports" +echo "-----------------------------------" +for i in 1 2 3; do + cp -r commonjs_out/* "commonjs_out$i" + pushd "commonjs_out$i" + JASMINE_CONFIG_PATH=jasmine.json NODE_PATH=test_node_modules ../../../node_modules/.bin/jasmine + popd +done + +# +# Closure tests +# +$old_protoc --js_out=library=testproto_libs1,binary:. -I ../../../src -I commonjs -I . $group1_protos +$old_protoc --js_out=library=testproto_libs2,binary:. -I ../../../src -I commonjs -I . $group2_protos +$new_protoc --js_out=library=testproto_libs1_new,binary:. -I ../../../src -I commonjs -I . $group1_protos +$new_protoc --js_out=library=testproto_libs2_new,binary:. -I ../../../src -I commonjs -I . $group2_protos + +echo +echo "Running tests with Closure-style imports" +echo "----------------------------------------" + +# Case 1 +JASMINE_CONFIG_PATH=jasmine1.json ../../node_modules/.bin/jasmine +# Case 2 +JASMINE_CONFIG_PATH=jasmine2.json ../../node_modules/.bin/jasmine +# Case 3 +JASMINE_CONFIG_PATH=jasmine3.json ../../node_modules/.bin/jasmine + +# Remove these files so that calcdeps.py does not get confused by them the next +# time this script runs. +rm testproto_libs[12]* diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test2.proto b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test2.proto new file mode 100644 index 00000000000000..44e55effcb47e9 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test2.proto @@ -0,0 +1,54 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +option java_package = "com.google.apps.jspb.proto"; +option java_multiple_files = true; + +package jspb.test; + +message TestExtensionsMessage { + optional int32 intfield = 1; + extensions 100 to max; +} + +message ExtensionMessage { + extend TestExtensionsMessage { + optional ExtensionMessage ext_field = 100; + } + optional string ext1 = 1; +} + +// Floating extensions are only supported when generating a _lib.js library. +extend TestExtensionsMessage { + optional ExtensionMessage floating_msg_field = 101; + optional string floating_str_field = 102; +} diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test3.proto b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test3.proto new file mode 100644 index 00000000000000..940a552ed56f05 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test3.proto @@ -0,0 +1,53 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +option java_package = "com.google.apps.jspb.proto"; +option java_multiple_files = true; + +package jspb.exttest; + +message TestExtensionsMessage { + optional int32 intfield = 1; + extensions 100 to max; +} + +message ExtensionMessage { + extend TestExtensionsMessage { + optional ExtensionMessage ext_field = 100; + } + optional string ext1 = 1; +} + +extend TestExtensionsMessage { + optional ExtensionMessage floating_msg_field = 101; + optional string floating_str_field = 102; +} diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test4.proto b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test4.proto new file mode 100644 index 00000000000000..cf2451e9cbe483 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test4.proto @@ -0,0 +1,42 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +option java_package = "com.google.apps.jspb.proto"; +option java_multiple_files = true; + +package jspb.exttest; + +import "test3.proto"; + +extend TestExtensionsMessage { + optional ExtensionMessage floating_msg_field_two = 103; +} diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test5.proto b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test5.proto new file mode 100644 index 00000000000000..34979517e551cd --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/test5.proto @@ -0,0 +1,44 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +option java_package = "com.google.apps.jspb.proto"; +option java_multiple_files = true; + +package jspb.exttest.beta; + +message TestBetaExtensionsMessage { + extensions 100 to max; +} + +extend TestBetaExtensionsMessage { + optional string floating_str_field = 101; +} diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/testbinary.proto b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/testbinary.proto new file mode 100644 index 00000000000000..116f17fb508629 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/testbinary.proto @@ -0,0 +1,212 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// LINT: ALLOW_GROUPS + +syntax = "proto2"; + + +package jspb.test; + +// These types are borrowed from `unittest.proto` in the protobuf tree. We want +// to ensure that the binary-format support will handle all field types +// properly. +message TestAllTypes { + optional int32 optional_int32 = 1; + optional int64 optional_int64 = 2; + optional uint32 optional_uint32 = 3; + optional uint64 optional_uint64 = 4; + optional sint32 optional_sint32 = 5; + optional sint64 optional_sint64 = 6; + optional fixed32 optional_fixed32 = 7; + optional fixed64 optional_fixed64 = 8; + optional sfixed32 optional_sfixed32 = 9; + optional sfixed64 optional_sfixed64 = 10; + optional float optional_float = 11; + optional double optional_double = 12; + optional bool optional_bool = 13; + optional string optional_string = 14; + optional bytes optional_bytes = 15; + optional group OptionalGroup = 16 { + optional int32 a = 17; + } + + optional ForeignMessage optional_foreign_message = 19; + optional ForeignEnum optional_foreign_enum = 22; + + // Repeated + repeated int32 repeated_int32 = 31; + repeated int64 repeated_int64 = 32; + repeated uint32 repeated_uint32 = 33; + repeated uint64 repeated_uint64 = 34; + repeated sint32 repeated_sint32 = 35; + repeated sint64 repeated_sint64 = 36; + repeated fixed32 repeated_fixed32 = 37; + repeated fixed64 repeated_fixed64 = 38; + repeated sfixed32 repeated_sfixed32 = 39; + repeated sfixed64 repeated_sfixed64 = 40; + repeated float repeated_float = 41; + repeated double repeated_double = 42; + repeated bool repeated_bool = 43; + repeated string repeated_string = 44; + repeated bytes repeated_bytes = 45; + + repeated group RepeatedGroup = 46 { + optional int32 a = 47; + } + + repeated ForeignMessage repeated_foreign_message = 49; + repeated ForeignEnum repeated_foreign_enum = 52; + + // Packed repeated + repeated int32 packed_repeated_int32 = 61 [packed=true]; + repeated int64 packed_repeated_int64 = 62 [packed=true]; + repeated uint32 packed_repeated_uint32 = 63 [packed=true]; + repeated uint64 packed_repeated_uint64 = 64 [packed=true]; + repeated sint32 packed_repeated_sint32 = 65 [packed=true]; + repeated sint64 packed_repeated_sint64 = 66 [packed=true]; + repeated fixed32 packed_repeated_fixed32 = 67 [packed=true]; + repeated fixed64 packed_repeated_fixed64 = 68 [packed=true]; + repeated sfixed32 packed_repeated_sfixed32 = 69 [packed=true]; + repeated sfixed64 packed_repeated_sfixed64 = 70 [packed=true]; + repeated float packed_repeated_float = 71 [packed=true]; + repeated double packed_repeated_double = 72 [packed=true]; + repeated bool packed_repeated_bool = 73 [packed=true]; + + oneof oneof_field { + uint32 oneof_uint32 = 111; + ForeignMessage oneof_foreign_message = 112; + string oneof_string = 113; + bytes oneof_bytes = 114; + } + +} + +message ForeignMessage { + optional int32 c = 1; +} + +enum ForeignEnum { + FOREIGN_FOO = 4; + FOREIGN_BAR = 5; + FOREIGN_BAZ = 6; +} + +message TestExtendable { + extensions 1 to max; +} + +message ExtendsWithMessage { + extend TestExtendable { + optional ExtendsWithMessage optional_extension = 19; + repeated ExtendsWithMessage repeated_extension = 49; + } + optional int32 foo = 1; +} + +extend TestExtendable { + optional int32 extend_optional_int32 = 1; + optional int64 extend_optional_int64 = 2; + optional uint32 extend_optional_uint32 = 3; + optional uint64 extend_optional_uint64 = 4; + optional sint32 extend_optional_sint32 = 5; + optional sint64 extend_optional_sint64 = 6; + optional fixed32 extend_optional_fixed32 = 7; + optional fixed64 extend_optional_fixed64 = 8; + optional sfixed32 extend_optional_sfixed32 = 9; + optional sfixed64 extend_optional_sfixed64 = 10; + optional float extend_optional_float = 11; + optional double extend_optional_double = 12; + optional bool extend_optional_bool = 13; + optional string extend_optional_string = 14; + optional bytes extend_optional_bytes = 15; + optional ForeignEnum extend_optional_foreign_enum = 22; + + repeated int32 extend_repeated_int32 = 31; + repeated int64 extend_repeated_int64 = 32; + repeated uint32 extend_repeated_uint32 = 33; + repeated uint64 extend_repeated_uint64 = 34; + repeated sint32 extend_repeated_sint32 = 35; + repeated sint64 extend_repeated_sint64 = 36; + repeated fixed32 extend_repeated_fixed32 = 37; + repeated fixed64 extend_repeated_fixed64 = 38; + repeated sfixed32 extend_repeated_sfixed32 = 39; + repeated sfixed64 extend_repeated_sfixed64 = 40; + repeated float extend_repeated_float = 41; + repeated double extend_repeated_double = 42; + repeated bool extend_repeated_bool = 43; + repeated string extend_repeated_string = 44; + repeated bytes extend_repeated_bytes = 45; + repeated ForeignEnum extend_repeated_foreign_enum = 52; + + repeated int32 extend_packed_repeated_int32 = 61 [packed=true]; + repeated int64 extend_packed_repeated_int64 = 62 [packed=true]; + repeated uint32 extend_packed_repeated_uint32 = 63 [packed=true]; + repeated uint64 extend_packed_repeated_uint64 = 64 [packed=true]; + repeated sint32 extend_packed_repeated_sint32 = 65 [packed=true]; + repeated sint64 extend_packed_repeated_sint64 = 66 [packed=true]; + repeated fixed32 extend_packed_repeated_fixed32 = 67 [packed=true]; + repeated fixed64 extend_packed_repeated_fixed64 = 68 [packed=true]; + repeated sfixed32 extend_packed_repeated_sfixed32 = 69 [packed=true]; + repeated sfixed64 extend_packed_repeated_sfixed64 = 70 [packed=true]; + repeated float extend_packed_repeated_float = 71 [packed=true]; + repeated double extend_packed_repeated_double = 72 [packed=true]; + repeated bool extend_packed_repeated_bool = 73 [packed=true]; + repeated ForeignEnum extend_packed_repeated_foreign_enum = 82 + [packed=true]; + +} + +message TestMapFields { + map map_string_string = 1; + map map_string_int32 = 2; + map map_string_int64 = 3; + map map_string_bool = 4; + map map_string_double = 5; + map map_string_enum = 6; + map map_string_msg = 7; + + map map_int32_string = 8; + map map_int64_string = 9; + map map_bool_string = 10; + + optional TestMapFields test_map_fields = 11; + map map_string_testmapfields = 12; +} + +enum MapValueEnum { + MAP_VALUE_FOO = 0; + MAP_VALUE_BAR = 1; + MAP_VALUE_BAZ = 2; +} + +message MapValueMessage { + optional int32 foo = 1; +} diff --git a/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/testempty.proto b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/testempty.proto new file mode 100644 index 00000000000000..960bce4e5c69c8 --- /dev/null +++ b/third_party/protobuf/3.2.0/js/compatibility_tests/v3.0.0/testempty.proto @@ -0,0 +1,34 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +package javatests.com.google.apps.jspb; + diff --git a/third_party/protobuf/3.2.0/js/gulpfile.js b/third_party/protobuf/3.2.0/js/gulpfile.js index 16c302ed67117f..fc9559f934eb56 100644 --- a/third_party/protobuf/3.2.0/js/gulpfile.js +++ b/third_party/protobuf/3.2.0/js/gulpfile.js @@ -23,8 +23,62 @@ var wellKnownTypes = [ '../src/google/protobuf/wrappers.proto', ]; -gulp.task('genproto_closure', function (cb) { - exec(protoc + ' --js_out=library=testproto_libs,binary:. -I ../src -I . *.proto && ' + protoc + ' --js_out=one_output_file_per_input_file,binary:. -I ../src -I . ' + wellKnownTypes.join(' '), +var group1Protos = [ + 'data.proto', + 'test3.proto', + 'test5.proto', + 'commonjs/test6/test6.proto', + 'test8.proto', + 'testbinary.proto', + 'testempty.proto', + 'test.proto', +]; + +var group2Protos = [ + 'proto3_test.proto', + 'test2.proto', + 'test4.proto', + 'commonjs/test7/test7.proto', +]; + +gulp.task('genproto_well_known_types_closure', function (cb) { + exec(protoc + ' --js_out=one_output_file_per_input_file,binary:. -I ../src -I . ' + wellKnownTypes.join(' '), + function (err, stdout, stderr) { + console.log(stdout); + console.log(stderr); + cb(err); + }); +}); + +gulp.task('genproto_group1_closure', function (cb) { + exec(protoc + ' --js_out=library=testproto_libs1,binary:. -I ../src -I . ' + group1Protos.join(' '), + function (err, stdout, stderr) { + console.log(stdout); + console.log(stderr); + cb(err); + }); +}); + +gulp.task('genproto_group2_closure', function (cb) { + exec(protoc + ' --js_out=library=testproto_libs2,binary:. -I ../src -I . -I commonjs ' + group2Protos.join(' '), + function (err, stdout, stderr) { + console.log(stdout); + console.log(stderr); + cb(err); + }); +}); + +gulp.task('genproto_well_known_types_commonjs', function (cb) { + exec('mkdir -p commonjs_out && ' + protoc + ' --js_out=import_style=commonjs,binary:commonjs_out -I ../src ' + wellKnownTypes.join(' '), + function (err, stdout, stderr) { + console.log(stdout); + console.log(stderr); + cb(err); + }); +}); + +gulp.task('genproto_group1_commonjs', function (cb) { + exec('mkdir -p commonjs_out && ' + protoc + ' --js_out=import_style=commonjs,binary:commonjs_out -I ../src -I commonjs -I . ' + group1Protos.join(' '), function (err, stdout, stderr) { console.log(stdout); console.log(stderr); @@ -32,8 +86,8 @@ gulp.task('genproto_closure', function (cb) { }); }); -gulp.task('genproto_commonjs', function (cb) { - exec('mkdir -p commonjs_out && ' + protoc + ' --js_out=import_style=commonjs,binary:commonjs_out -I ../src -I commonjs -I . *.proto commonjs/test*/*.proto ' + wellKnownTypes.join(' '), +gulp.task('genproto_group2_commonjs', function (cb) { + exec('mkdir -p commonjs_out && ' + protoc + ' --js_out=import_style=commonjs,binary:commonjs_out -I ../src -I commonjs -I . ' + group2Protos.join(' '), function (err, stdout, stderr) { console.log(stdout); console.log(stderr); @@ -105,7 +159,7 @@ gulp.task('commonjs_testdeps', function (cb) { }); }); -gulp.task('make_commonjs_out', ['dist', 'genproto_commonjs', 'genproto_commonjs_wellknowntypes', 'commonjs_asserts', 'commonjs_testdeps'], function (cb) { +gulp.task('make_commonjs_out', ['dist', 'genproto_well_known_types_commonjs', 'genproto_group1_commonjs', 'genproto_group2_commonjs', 'genproto_commonjs_wellknowntypes', 'commonjs_asserts', 'commonjs_testdeps'], function (cb) { // TODO(haberman): minify this more aggressively. // Will require proper externs/exports. var cmd = "mkdir -p commonjs_out/binary && mkdir -p commonjs_out/test_node_modules && "; @@ -128,8 +182,8 @@ gulp.task('make_commonjs_out', ['dist', 'genproto_commonjs', 'genproto_commonjs_ }); }); -gulp.task('deps', ['genproto_closure'], function (cb) { - exec('./node_modules/google-closure-library/closure/bin/build/depswriter.py *.js binary/*.js > deps.js', +gulp.task('deps', ['genproto_well_known_types_closure', 'genproto_group1_closure', 'genproto_group2_closure'], function (cb) { + exec('./node_modules/google-closure-library/closure/bin/build/depswriter.py binary/arith.js binary/constants.js binary/decoder.js binary/encoder.js binary/reader.js binary/utils.js binary/writer.js debug.js map.js message.js node_loader.js test_bootstrap.js > deps.js', function (err, stdout, stderr) { console.log(stdout); console.log(stderr); @@ -137,7 +191,7 @@ gulp.task('deps', ['genproto_closure'], function (cb) { }); }); -gulp.task('test_closure', ['genproto_closure', 'deps'], function (cb) { +gulp.task('test_closure', ['genproto_well_known_types_closure', 'genproto_group1_closure', 'genproto_group2_closure', 'deps'], function (cb) { exec('JASMINE_CONFIG_PATH=jasmine.json ./node_modules/.bin/jasmine', function (err, stdout, stderr) { console.log(stdout); diff --git a/third_party/protobuf/3.2.0/js/jasmine.json b/third_party/protobuf/3.2.0/js/jasmine.json index 093f15794f71b7..aeea72f8574e06 100644 --- a/third_party/protobuf/3.2.0/js/jasmine.json +++ b/third_party/protobuf/3.2.0/js/jasmine.json @@ -10,6 +10,8 @@ "deps.js", "google/protobuf/any.js", "google/protobuf/struct.js", - "google/protobuf/timestamp.js" + "google/protobuf/timestamp.js", + "testproto_libs1.js", + "testproto_libs2.js" ] } diff --git a/third_party/protobuf/3.2.0/js/map.js b/third_party/protobuf/3.2.0/js/map.js index 4f562dbc1e8a1f..d423499f05e3d5 100644 --- a/third_party/protobuf/3.2.0/js/map.js +++ b/third_party/protobuf/3.2.0/js/map.js @@ -136,7 +136,7 @@ jspb.Map.prototype.toArray = function() { * * @param {boolean=} includeInstance Whether to include the JSPB instance for * transitional soy proto support: http://goto/soy-param-migration - * @param {!function((boolean|undefined),!V):!Object=} valueToObject + * @param {!function((boolean|undefined),V):!Object=} valueToObject * The static toObject() method, if V is a message type. * @return {!Array>} */ @@ -146,7 +146,7 @@ jspb.Map.prototype.toObject = function(includeInstance, valueToObject) { for (var i = 0; i < rawArray.length; i++) { var entry = this.map_[rawArray[i][0].toString()]; this.wrapEntry_(entry); - var valueWrapper = /** @type {!V|undefined} */ (entry.valueWrapper); + var valueWrapper = /** @type {V|undefined} */ (entry.valueWrapper); if (valueWrapper) { goog.asserts.assert(valueToObject); entries.push([entry.key, valueToObject(includeInstance, valueWrapper)]); @@ -412,8 +412,8 @@ jspb.Map.prototype.has = function(key) { * @param {!jspb.BinaryWriter} writer * @param {!function(this:jspb.BinaryWriter,number,K)} keyWriterFn * The method on BinaryWriter that writes type K to the stream. - * @param {!function(this:jspb.BinaryWriter,number,V)| - * function(this:jspb.BinaryReader,V,?)} valueWriterFn + * @param {!function(this:jspb.BinaryWriter,number,V,?=)| + * function(this:jspb.BinaryWriter,number,V,?)} valueWriterFn * The method on BinaryWriter that writes type V to the stream. May be * writeMessage, in which case the second callback arg form is used. * @param {function(V,!jspb.BinaryWriter)=} opt_valueWriterCallback @@ -509,7 +509,7 @@ jspb.Map.prototype.stringKeys_ = function() { /** - * @param {!K} key The entry's key. + * @param {K} key The entry's key. * @param {V=} opt_value The entry's value wrapper. * @constructor * @struct diff --git a/third_party/protobuf/3.2.0/js/message.js b/third_party/protobuf/3.2.0/js/message.js index 220a5bdb7e55f9..1f6bf16b6e768d 100644 --- a/third_party/protobuf/3.2.0/js/message.js +++ b/third_party/protobuf/3.2.0/js/message.js @@ -106,8 +106,9 @@ jspb.ExtensionFieldInfo = function(fieldNumber, fieldName, ctor, toObjectFn, /** * Stores binary-related information for a single extension field. * @param {!jspb.ExtensionFieldInfo} fieldInfo - * @param {!function(number,?)} binaryReaderFn - * @param {!function(number,?)|function(number,?,?,?,?,?)} binaryWriterFn + * @param {function(this:jspb.BinaryReader,number,?)} binaryReaderFn + * @param {function(this:jspb.BinaryWriter,number,?) + * |function(this:jspb.BinaryWriter,number,?,?,?,?,?)} binaryWriterFn * @param {function(?,?)=} opt_binaryMessageSerializeFn * @param {function(?,?)=} opt_binaryMessageDeserializeFn * @param {boolean=} opt_isPacked @@ -141,6 +142,21 @@ jspb.ExtensionFieldInfo.prototype.isMessageType = function() { /** * Base class for all JsPb messages. + * + * Several common methods (toObject, serializeBinary, in particular) are not + * defined on the prototype to encourage code patterns that minimize code bloat + * due to otherwise unused code on all protos contained in the project. + * + * If you want to call these methods on a generic message, either + * pass in your instance of method as a parameter: + * someFunction(instanceOfKnownProto, + * KnownProtoClass.prototype.serializeBinary); + * or use a lambda that knows the type: + * someFunction(()=>instanceOfKnownProto.serializeBinary()); + * or, if you don't care about code size, just suppress the + * WARNING - Property serializeBinary never defined on jspb.Message + * and call it the intuitive way. + * * @constructor * @struct */ @@ -524,7 +540,7 @@ jspb.Message.toObjectExtension = function(proto, obj, extensions, * @param {!jspb.Message} proto The proto whose extensions to convert. * @param {*} writer The binary-format writer to write to. * @param {!Object} extensions The proto class' registered extensions. - * @param {function(jspb.ExtensionFieldInfo) : *} getExtensionFn The proto + * @param {function(this:jspb.Message,!jspb.ExtensionFieldInfo) : *} getExtensionFn The proto * class' getExtension function. Passed for effective dead code removal. */ jspb.Message.serializeBinaryExtensions = function(proto, writer, extensions, @@ -570,10 +586,13 @@ jspb.Message.serializeBinaryExtensions = function(proto, writer, extensions, * Reads an extension field from the given reader and, if a valid extension, * sets the extension value. * @param {!jspb.Message} msg A jspb proto. - * @param {{skipField:function(),getFieldNumber:function():number}} reader + * @param {{ + * skipField:function(this:jspb.BinaryReader), + * getFieldNumber:function(this:jspb.BinaryReader):number + * }} reader * @param {!Object} extensions The extensions object. - * @param {function(jspb.ExtensionFieldInfo)} getExtensionFn - * @param {function(jspb.ExtensionFieldInfo, ?)} setExtensionFn + * @param {function(this:jspb.Message,!jspb.ExtensionFieldInfo)} getExtensionFn + * @param {function(this:jspb.Message,!jspb.ExtensionFieldInfo, ?)} setExtensionFn */ jspb.Message.readBinaryExtension = function(msg, reader, extensions, getExtensionFn, setExtensionFn) { diff --git a/third_party/protobuf/3.2.0/js/message_test.js b/third_party/protobuf/3.2.0/js/message_test.js index 2298742d77f0b7..dc0ae211ba4919 100644 --- a/third_party/protobuf/3.2.0/js/message_test.js +++ b/third_party/protobuf/3.2.0/js/message_test.js @@ -40,6 +40,7 @@ goog.require('goog.userAgent'); goog.require('jspb.Message'); // CommonJS-LoadFromFile: test8_pb proto.jspb.exttest.nested +goog.require('proto.jspb.exttest.nested.TestNestedExtensionsMessage'); goog.require('proto.jspb.exttest.nested.TestOuterMessage'); // CommonJS-LoadFromFile: test5_pb proto.jspb.exttest.beta diff --git a/third_party/protobuf/3.2.0/js/package.json b/third_party/protobuf/3.2.0/js/package.json index dd6373de0d2d53..14f54b8bfd897c 100644 --- a/third_party/protobuf/3.2.0/js/package.json +++ b/third_party/protobuf/3.2.0/js/package.json @@ -1,6 +1,6 @@ { "name": "google-protobuf", - "version": "3.2.0", + "version": "3.3.0", "description": "Protocol Buffers for JavaScript", "main": "google-protobuf.js", "files": [ diff --git a/third_party/protobuf/3.2.0/libprotobuf_java.jar b/third_party/protobuf/3.2.0/libprotobuf_java.jar new file mode 100755 index 0000000000000000000000000000000000000000..3004c2982ef6e6967f7bce00fc04dd55b0018a29 GIT binary patch literal 1203755 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%0AIQGzs}pNt36wd4J`vQ5rk7&Pz{6V#= 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%0A+kx&5S$%h@XPzh#Gnjy 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⋒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 z -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

cf9RXhBjQ zptbk!!r?F>5u?7METhY%%22Cu$V{-$^h3TXhS((xO&X=exM49{Q|x_qJk&5XlaK5Z z{X#U2(1~;mSIBPo4>;1(z~3{!jEy)d@=8jbDj|WELH2{w^;Pt3@d|$o@N*9r(ye|d z2MF_1o_fU|44H>_$GmQs^9Kl|1&{scH+%rzX5rEWo`1->qK<2s^|C11Zkzf$z z&BRk)AOz#Fztk?An4#9ucsd7xNkVAqxG!I4R8hTyn}>k!FdWN=&F{%t-CUlampI>* zLi#UwlZiD?>1NQygq{ZS<;RDeKg*`?#M+@HD2!f`06N9V zboSf<$vKLtVtxP#&$90Auw^X>n5g zom1iqcldT*z7P<^#LJ#IEWZ?BChZH{z;A)9Ra*Z;c-xYDfU#iEcz&p;M`XumJfR$c zi@orF^POtC1T|hZu4}gON9U5U7_-qdeA(XZu~B7^Wj;`a3ufkOHJW*>prOPQu<-s= zOYHSRXYKt>?YmHRngwcL2*-;j7P36(GdU=nxhZHRYWskYr_Z;(z95@@_cABu{!DO4 zDH=J6=MPimo#qr9$}Hvj4edj+9u}w;Z#X3l)eAq7s)@|iC^jW|YovtNHwPzH!35hM zv%8DR6f?>feQX<^X@*l;n+kPz$>-dP)>I}6JV|R2bE_BwRdxM`v00cWoo`xIzZb!- z@OVX4hVCz4RSt9fe2C?e0!=40t*ZhSgw()Fo-w4YNq5P!b zw!Y!mSiKs}CuTcL<`pq2jz!ohI?G`CjY+nBcJ7`+(@7p<6x|J^yv}OiJVI#W#xMAy z_6f(hb0g;c4KHyK+f%cg{)wr>P~FL?9WetFxa=+@wXm?rA?|e+7N7KkOyW-4=(;6z zqbf3Ctq?mNba5AYXcv9V{>~oJP9w&9LKcL=p4l*>A@Ud|_VDvAB5D^Ou-Y}=;1(_l zZQgK=j&eOe#OR!fnygmtwm`_MpA)hJ8Gcfopxee!Ee)Wpb)c>FpskId9(ADWO#c8Z#6o#g|7==7e2rr6(q^wMmJk@vA-G1|P3r0~ievnYiV>zbxWX{B8{KLmcP$y3 zime~G86qvbBDC<$)8bjiDKdTv=IwBuG{?Am;__Gi`K47KI7XXA)-|1PzD>dKQ02|a zOq>i)oS3nnS6-;rHgbHkPLv1K;5`eNg$cMMZCUf2#=@RsdN|jwwCCv4mO3!bZx{Ez zfY>~f+dQ+2V+J@kCA)sQeDs;S$5n4aMr&1=%mizmRT*^W;-(GOd*^HU^}cs`-f}kLxT_AufQAZ}VG0Z2mm``Apj%^c22fT{?Azg{K!5 zb7T^Sm>zgB?6Rt>ANk0EVXjeeo|q%UX#2B`)$HVE`n4*CuP+2P+#Ak=bdgcFEX#Xqvj}9962PX_%O9*}^l;XwBRsPGM z#c%g@z5yhoW+i{mjIL zliNCj9}NSDLwTF>4eRI+yy-<`F+=%h(Gvf>_B*^HE`1NnIpLWC$b>r~{q7S#stHi) zzHv$s5R4;OE6vO6SPrkQoIyX^hc8I%fCk_byVYP?DRJ_;XK-5AD)VLAypyMGbM(>! z;P<;b6e2O4edyao9sg_a5^cj@e!Zl`wjD*|;6Mpz)2@ZjDx6Cn_h*s&CH?P3^M9Yo!+5GLHh+1TlZVU7 z3nRlKhLHjT^@GAWpbC=`0ZD-T;}t~24m%*l%9!AqkoBabr0ynote)9=vqY<`0G7sA z&iAv_@u^+rud2SZTeNO|JnL#*)0aN1aXT{2qcF{IJbZ6>UiGPMe(G7$_ql9-zS(EU z^TY4eb&AImd+`HD3)tDiqu)C0e!kF*e+Ilte0gujA>2^d`;Qbad_V@Y?2CVdW)s{m z2S~pR#Nl@42U5MH_qW#E1HI?;bo?ZQA& zTmWQ#V}|Y!%ORsnX-2B703=&Yq7q(gP%*IFjW9Bk656I3a-_IdZ!<>7J&jol(YSaM z#>MdG<97pDB#9EIC+l@%_KkTJ(x!{w1cgd72=BCh2WO*P7Ac~xiq&%_pGE;3kWnz| z#rP*tlLt}hr2!dZgRJyZdqoTMr7#p2X1WtQd$#mbyG1!-lLwLJx68IXQG>YjN6t*~ z??*26zoT8qobvF_Z@Nj*rHvE+7i;enV_O)mYp$wQwaT__+qSXF<}BN`ZQHhO+jgz8 z&91%s^hx$f_s&V@B;#TvBlBkFzZm2Fp6_}2oeTDNj?I+MnsUV+K|zdCW=dXC+_(IE z1!c|1555#nnBADEk~vMkb8nU`0YsUMeDRhX%-b>_D>3*cK& zgh94@^(|T3v=|U1$mWBZ{blZ%KZB*TqSnjmEj&)DPLgSYAr3NLtTDG=s)% zQ0^G#QfeBgNVM=~DYZVcrmIl^uJVpSRr;)GrII%wv``?CN!=-OEX$rqWL51wx(DI0 zrehQDG4Dr{|5&WkxCIOCTvHa>LR;7SD7Z~uH&&iungTPcXM9@=UeO_W>--l`Wk&DGxBQU3=)$yr}HoZI0v z0ohWlDUKLHB5-csO`IJ2zIbJ-{D(*c)i1`Bs%~V1$jZ+lc$QcYi9F0RK``hI^}elZ zB1yim%-o9PzQX(Wn4(|jptm#ZeV8;VLtNJJ)R`k#{xfLRRJ*_yQ0X%kE=E7&?T?~9g*cy53PVM$I(kMw+NMkrL4b`a3)67Q%oRm@ z;B`V`l1QFA(hej!$|yLr_z*LDRgcc6zaiL7hydrwamL9$wI&3drP*m3uA@kcny zchP1^Sw)QaeSuI0EZ|@jGQg?`jUljPDsF%gWKyd0?eedII!Z; zQdB)~PE!%)0~$&RqWAWMhyL}EhS?eAa}f1j>^m}I-b?!(mHjCIiR_T|f#*vy#!;R- zTdEmkc-9{<0~sEogiku;bvm;)c__jpQq+%_F20O1Z^;o14Y{^|y^Z{LGd{W+b#B~R zCov4LjGK#wz1koW3L4h+AhC<1KC9J5r5co!Se#&|R2kbh;3kjwGe;glx=BV)T0gDq z-Qz(<*Bp7dN)Q1Mpm@bp*YYPbs#B><7%FO&MLn-m)oV@*r`=(d+}LnTttw|r#0#Mt ztzX6OW@INI<9&=HxIm?eUnPfPyNVqm-6WzX10{l_#_ZE4iBOp%g$jaMq~!#emU%QM zmS@@5Oo{{p2gmInV8re7sy{jGCt{T{h@kHDpKspR->;$e6if;tZ60?;1~b|tb3p(? zNEB&VC5^b`?rUjt%}hpro(E~oiSW8$;Tn{c&?1ePSR1h(z=>ZaDFB0$G-#o&hF2Xo zh-sBXRGoNYmlY&qz-fcr7ll|-uE)JFn!jt(^d-z%!`stZ*bGYatM8W3-AB&7{hl8k|9`JGCL zX>m3uxJpt%{6j3CwOQ zEBqVZnql8ed`B!<8ZR9SQcU84IBy3Zwj!lmqiV(itQ$OE1nLsJ-BI6es4HJW`s!_7 zu7sV&?`D5pr{Gp3Y`wmGSR9&OVRAi}D8ws3oT3WNa!Nr=K>G;o=;lG~j-LyX)FEsE;JJXpn zuU3U^z8OP>hAp~bVZ?QE2{dyyp>H+r5r~|kPwv(*CpF2*u-i1RAA{*PrV_#O{pSit zss`}KuZfosdF8aPWS{y%1TuUqWn$`(RBuAoriQDM+UE~Y$=hho$z?^=dtE`R7o3_6 zG1!SVF~`z?>we~gU7PT{AG61x1PEuPd<<+9EuY(PD1(bBJ%w*|DoL1+-?3O^Edtnp zx%K4rAF54EzQ7U3*<~DIZ-JK}PO@z*5YqJPqFEb0IOTFPft%gy}Jsz85zLZQKcz`tb;1)njWzZzEe7Kx@{j=V_ z=^^a2gD1*l$W2D6>R|dL>KJDPMin7(HM~(; zS`p{a>Oo2k)EV~}t8l^U7#xejgJZn!#fKaffF%d5w}>LRxuHLX;O>(BA*N2B?`*)y|ppK|xuGF?d_~Rl!BeYhnhs@w@NASB?(yoD8^j zdB-K^oUcff@pk5|n6;l?2}7h^xv4Fo#a4F*NLg2Ryl+EApt_S=k-3vdFjZl6OC$OOVPE42A%bX~ zXqymg%T#q|mq}ykW^#xpbj473v@C`0;}-~_v~veK{7dN@r@)RXtTtXXlFX+E#s&R~ zNx=md^K@j;_4+mOV&I&H(+a=`c^`fk?qLTABshG`5m4kKtND&}zaH}XbAUat z;gETOud0R@C|s@I^bkl>EmsmX-_%Gz;{nm}@Tm_pM{9i<23mIXw+-$+stQBKJZwQM z!_soNM&bN?tS-~4)-yl@Zdc&iO5R92oEUNv+;TWW{$l;Xoc!3GcG`nP%Iu@_tQIkbe3r?$6Z>I}2*te8TmS>Q z;>Z2UPmrAaXrt4$3{u!k*OXu>A}?7g<>gVtDKS(T7lxpwKcgB%cZ~q)MU?|;D;R)j z$}YC~%o6Pop%qWEDVBUylU`f1g6=$aAzlcz$L&dP-Jko-%BZ2S-t>`^k2H99o%8gO!&#Z0G{l2iOb)YTq8!)}6}7#|BfT-R z2xmFLy~so@aFIl6(*N3oyZ`>{Eo_$Ef&W*uy9M-xizSMZ^P8eCPb*?H&YW=9e+ne=dJak*>k>n z2i)cQXRF{wh(+UPtL}TcbqvI4{GrcXI9eEq0q{_^oz&nei9siBkb6JW7nGsUAMo3K zFGuUYO9@O}geH*%4R}di>^aMnM!}h7(bJg{SXB1M9Gq*|pKAFrGM|62xkV@NaETL? zAa48<>OV`XM=1)uxA3KeB6?O4YM9ehJVH^wGY%(r2#xXjj4l<}n|_n8;0{=pqnXAO zD0=ue>%npKCYa8VBhA4YR5**Px+7EH*|CctSVdm%N*GefvJg5g>o2l{$xn2vBjee> z<;x-hyvOyjMK=WC)F!o9eT`9>uKw+}!llb~Z91N%9Hhd*Fg$`5|LwsX@mlpXPdQzz z8Dik$8C*n5m;DsQer8fgEA%dAbm5~7*I$}Zx=cy@?1JE0ien!nj7BE}p#L($;paP( zHu^|r9lMT|aB7U)&eN-;N4SOUb4}6fL?SaFN2ii8@)W1%B}B&?E}J)jE!Y+wBm+74 z>whbe8Tv(_SIHQ6%hC6O)%U_pS`W9oR+=atsF)vdfOdyI<;*OtZb>XRuh0CD&yfAn zD*K@w;3_H1MOu8hjXY!PKmMENn;1cn>YEoJPRlY)n|72Km%Bs-5UyQa^Vek3+c75t)#;zOEhFp;6T)4U zPTU!Ij#3WIuM8{M)HhP%%Uy;uWFLgb?kHf_2@@a+=66t*MN#NZkL7(bknxQ6;3xZ3 zurFjW8puH}6dAUQoo>mJnjGW}S&<$b_6U>Z)RSyq);jAUrCW+z6sA0he{oOLNsiU= zs>PAa#R>8$*_hA$4sp&nbgblxk4--xWZbIaBB1=lF=#gern@&eW^m{M!-wl4n28TciW_eE>2OHh0uY4N9y#$%P?Tbxl+8y&7=GF%Pt)=W6;8{3xj~=zy z|K{@_S(07L!_*PNuU`SI|6P_O`2P=w{a<+Nq95LRQ68RWU|$Cf2m$0!2tnOW73tj< zjx>T4(tuT6Jt1oFW%)9?sjxZ2!zPTcU-vM8uNTiaGa06OcBzTGvBcqcI_>ndkk8xu z9d;Mu3=#`615z_EO|E+FUpHW;X_F|?{1LAI%`#+7Ic!Hnz(^g6LaDeTlsHDWZytlKm;oc5iZkM}!DVYq)p~s28Z|R*QDGW;P|WCe9&Sc}t4Rb(B<8+dpfyQpMFsUq+Cazcu z{%|4=kS?|`RBG^@>eZuT9<3y;gtz6J5;xXucToRvj4Z#f!d8CR*M|Q?RJDzhy`iy? zjghg0HNb}We^S+3|4CIp5l_uAH{X_+S2Q)l%=2-xQtA}`2UZvq!%CKMkeskp zYa&;+``h(A<0J|c6t6b~(F92W8c1k1C<_DdFC#50$7YAm2lVDwh1;R+)QBf8F6v!s zKMWq57d7Ldb78!53PD5jmp?&A&4#~zGi{P^T8fyAywa%9jLo;s`l}NVnv6B*}7+`vtbxPT0yL(D^qhoDd$7I9{4TP(od`LYuw2v!5_Z3KsP>bhc=x~ly zKTv!3pIo&^Yb2EyZ%D-_Tg(Y)JJjLmfD`#IS$Cd8}GpQq^ zRI1nwfTAcN&T2GOc~t3c$n_LetUonmG(A-;w?Ae+Z&RnaA(3J{ynpg~A8x*1aXnxB zw5jf7srI;@b^HR%6JRmkcKi0M-T-}3?h1kW{JrU6wd~umGL2=!+dHrvehtC*CN#V@ zImmfY!sSaCnK`;d1MY6r2ki@nCiIpPDoi2may&Jrrx;JnCUjN5Bg}w^mEn*6rQ9nI z)CPP9LZa&q%2-7Ywo^igfkoP7a0-K_C;}`Af}JwuT6AX+_#k>bOO9DJi;iV(TItIe zG`vP1FbwqsLhzTiD{P)iCr{!|K5y0t>v)fj(KIDa5=*v(;*MPzx1vy$rVA5mJJ0Nn zT^rW~Jhg0=ItU=;677p*nJVQ_!b(c#F@9 zT*|5@92>ips3~ffHJQQoEEiUo5!Ph&AtT@W$;0P&ZeroS8~qwoR3a-{J1RylQ-GkV z-f%XJIF6ZAG9>|%JWP{UW_Tsv^gN2=MUqAf4(xO<(bQbtUe9$?<-*kBW?Vmgve0Q6 za7qUZ?)49gPW`(_zedpzA&v) zK4yWUF~ynjM{V!M+?r3{TBIKOO*)g!jYi+H!cZ!pd2k?^Rd<x#`Jp)FV*e%X5UWa(jLlTJmuZAl5OV`|s%$=Sr03!+Lr* zm9Zi6&)x);uFV>7eqnXg$W&m1XR#`Z#=!PU$DEyGQd3mH06Acqn<%ao`zrbD2nNk8 z%JK#o2CyJgb5GC+qm^$s;M1mg&rCJgmr&yJKcHwuRLUHl6|xnCX1Gmer;%;V*XZJ6 z^uBsc7MqCX!E-Z`OcR>IHnqRUSA6L(m1vUXmLZ&8dm#BNrxNGbf+h(7cuV!&YY50->6}*xl)^ll5aOSDoB9V>e6-7< zc#2^g*i|y)C?mv+WZ9>~L*j&IB4$#`UYo8V^61Uif}Oa$Vuvb%9)m|ZMrO}54Ljiy z#VnK&hgjYMQ(guWc5TaM+XCglnE!omU?@_KvRp-3&j1Dzc?A=koTG*{ii&gyQO_Rr zps$_EZe%@A44p4^w+M=LyED4`-8*%Mqejly<0(@PWeq;<)3QHY0>zU&c=eqq_Zn;c zpsd9Tb_#JwrcrcNC34gP-}*9h5fdt8^>zoDXt`DPl0t(7(TJ6pIKYOXyyjF>K=#wD zKK?^e-_j71#P>(!KP2^XZ}Bx2Bts3^iTH;H3?ol5W9TKY0G45}&VbrS3)WCQ;WCZ2 zo^pm&r0D1=4HiV_4?L1dbT<>?lp_NG4AfHn+=OBtX%I7mn!WKX^JheZVXSTiSbssG z%@B%Hshg4SB$(>CX!%5+bPO-sTBNE}<{eNuyR$*ki|~-j&yI$DP`a|YK!+rjEk=hs zd?&=cqP!XjnRelTeu>iMBVwE^;> zRz%}iCYi#(vq{9=j2K`w|6c4%bt0KmoqtKG(;q>3nOlLWIFobW8ELTy!@uc@Rr4!^yzIFeH z(ljIGkC+8vSUCA#y>p61kXTQ3c)T^*R^>d6BNbM>b46o__1{xX$Bu`q*zGEVT$>6< zGAF23siH1NwvtCfI}IXgUeXbkq^mp+<#svCRZ@*jxp$CS0=z*l5RbbMwItm95ao5c zxw<4=YN39o5aC_eusSY~i@4dt-mX6@cc&hD zr^dG3a2rB-BZ%ZyUOf`2TqhOc{gZu%R@D_?YV1F>@6~o0cUn~vJ;!MmOJndOXp?)u zO2b;MAH&&$(h3b+4UM4n&NVkA&aSrIub^&0u(o*de163fyXy7$N?BxgLO+`KwTrc6 zgdvL~d&jhqp7O4$sRLs&u~Sb^`*%Cwok2oGr4U@JqXm;}`M*e??5emUm@SN6{q@%} z3!rnlp^v)GlMz_rm!#e7`$rlv6GJ4iT9^p+P0Os`s0Rf(Mauga@WEVK8917r7M>c8 zItJ$UV9Mw|pt9r+78xt8SqND&<_f&(9I2R{y6KfqZNF(&e>UuoS~@g&WTpWn=xeom zFX5|FED@T`ww{yO%1k_aVhsh_E~I_p47}%W@AZeV+*Y-0mABNH-9w0ifzk)8K|dUC zfOz9n!p5RyOo#JtuqNTI`NM}MH&2Zh!r_NMVDtGvT7$$NM{~1J-FReVq>nWIDC%{# zN999Q5Czm^H`}`l=NkxNJNA~15+ff~!FCqaUMMA{tqDtAz?&B3#~$jp?W3NEZ8{PnHKSmj*Dwu;6wT8DKd2fqO;-J z1H?$4X0p@OVMn?NijyS88CZ1{d6AWF1*Y2jx69VMY@1}6^t*7^$7oPIbt~=6A)0w) zN7D?f_c=`PVKVvuPI}h4B>ggTQzP@F(bwdD5$_@@Gm@4H(}YX)Hv(CNn~e(p29FXS zfPYo`WxElHio22fto^Y9>GJYwP$^8&Y5FfthMO^5^EJgA-3+Xi#1fE7QQ#L57cFI* z7N$PN4Z`-1ejbVmlF1`inDp>Y3WQYv!ZJ8&gW#@eDAN^~Z*0)hgRcG}B+d(*_39WK zdImQdI=c(yv`^3oBqA2672D0viZh8yn$qFb47>&OXU0+}#jtkmyv6z*cz zOf@(tZKw*ofHykNLoHM1u$rq>lQe&rWfWR#MDSuznR{5{-wiVFLOL-mGmQSfF}L#z zIl^xeY&67BJgB>#RcCO}_m{Ap$J|+O{7F5K3{<~gjKBh@HNQptWFw&*3kYo!rm1m+ zhQn@at`6`ecXPL(U&V1^)R80HxCYMqQzP0?G*Q<)=qtPH!G>B0D(>im`7|*Qnqq?l zc4<+a=px+NAc3FH2myY)LVo?tq_3F9@tYH?mRyzIm>B1mixKhe3_}vZZskQe-87%H ziQz$(A$D52hRT=)MdwchHS_cv;BH1hVxnV4AyLNezCsrQu(2WZ+&A>&!0!qet{@G+ zWAqhv@smNbd&hed+ABH4-?1CiRmKtUuAtv*CmWMMdQ1PsVp!A+K-=(#gz;o6BOO^j zjZ<`?TlsxM56C*Ey&O!cO(m=082Wv24_IH+3*uS$eE|<-*hPf#`pIO`j;~RP$y|!0 z4F#%VY^U>o*rC4I&~HZZ?A_2Ga#Y{B8C~oRsk~w{y3>F8jmXJePPu9<}+#X@l){Ay@UKhF$eA$9`kcyhu#?q@3pC;y}`x&-6LkP z3wHzd6-wjBw>RFK!vWM8lL3sUXR|BBjrao2;}>(Qw2Rk%I!r+20T4JIQ7gp1m(m}r zs$?zDj*ANbe*I{mY>i!`8sv%pI=yhhHt`^Dy|+GsC)_0^put{VD7+WHx_j4wsPZDZfU9VN{|2 z{VISJ4C+A7nHp9n0E*H_t#rF8jmt%mT5;~dJ>O%5c-ro~qhecdR*u%Tl6j?dEe0}R5nU}vdLBZGgFe6 zYcH~UoJ7-NF6UzC`&!`VpDm7e!;>q$cGUuWSF2EKpcx-{xU`39`jvC`03E+sEH@A` zXnnAmC1aem0Hh*3p=XNXcjoYbnZT1Do;0Lxr*OmiIBM zT03}5Dj{3O zFv$Z!Md~4$>nn9hw~@>A1x=HtIN_WthQj~aQfJ+~L+3)N9k%%TpmU(naL`hN4i00Z z?N|!>SQWNb*T$qfVmH>N*0)C2FZ&CpHT%~k*7*W)6V_gfofDt|Mfw4_efzcF_LGOT z#L-I=lV>Q)*UHe>o-hSmx+88 zFVz%QNp8MlD4(ze-C$Dhrl#-*kgey|q^+tsSoJbZ>Mw_<&2waQ4XGcbjP2Wks4at< zPU2Z7lq@Y^6NZuNSytii*xx)c*J%w;{BtH#Keo{!tbIr?A!xKcNzN56Gi+d!+nsTp z%J{cXSPVZjB#5mx`SyGHW$nPbEB(}U?a0$DlJ-9H*e8XL1bu^u9hZy6V)bfc1_3XqQ+Bi;881Jy~OyfOgHm2sYwb3S8 zrQM3g-gdaE^kyBPTd}qHs*jWEFyq$zrBPq$LS3=$dDoKa!nzYcGVD&ZDf=-C`HW4q ziG>*IS&ee%+-Xf1!zx4xsu5v{k==2- z695sN^`c&%-G2ipCwrdXSr16t5$d`$_31%b%)rZHS48nEYD|={&VN(x8|)5@+ZMtp$;?$x|puK z4<3qwnW*ri|Gw>OR^90rg3tU0-vObu%^{QRA6{RiqST45sLkwY9=H~#kIm#X7`&_@ zu{cG`K0Z5&mW|d=Kr!V;doZDXkKXl7&mKXX~74QnI@c%Er1Da>_S3i(|A1^Gu(LBAH^ zI7x{jaUeo}%G(pm%%P>>=+5nOaZezd4~Pdpar|2#Ph^8kTLcASLf~X>CW{#krl-lb ziItcfAnsmwR19j5)^rizm3r}m_7D^}Hgramvcf7xVm4Md48`|$B6L(N#V|6v8k$Lm zZCEpsoqwc=GS-!cdwz32e=0hv1}AH`ZEpLSd9arDPckcnD?(_HYGInAS%xyO5fxnH zQN(|ak6hF}r_yp@Jtn~Av=n1Cf!XJA6sFUJM5QFmJtK@yWTC@Sh;lR))*T~!h_%+T z&b+0l^uaT-ACou^y|x}k_jW~eS38dXB^E9Ak(we{?LWWp6n8^2#Iq3Zx6jJzSeF%M zfd74u&;Q5C`!A{O z(EmtncZd^Gju1%oVI;tVf9dxl!izvhRAS2fT2qv_2r)twC1bJ!01t!OWu#yP)52>7Qw=XxHt8TO}KfS*#ty6wZyIoItlSvCcOu$WdU2i+ga6D&zcRg=D zAHNdCe4_VK-)?XlMF^6LxEZ9PPa6diic%UV;a0;J-0$vZ8!(WjxJsrb9)~j0jxbWp z3~4Y#Ta47jLLSpiq8x~jtdQD{405Xt5?@vAuNzgbwW>_nm)KfSCYVVVGnI{@F%3#r zf19WXaLeCn%uYzyt~!#W%rtcv@{2shBoU0Eu`9-Bge|5 zWepWa4jq>(;J5-TBJ9hmvhlE5o4Iu>;i*vU0Jx~3%F-%S1~Ry)VNI1rI0>R6o|I=i$TN6#;$E|g@5KfDZ#19aAr;~DeRsy zIwl=E2g-va%(o{Ez8e3WxjG}XopWaPkWy7x)G66G2URhu50V{^WR=??_x~)*>X6BA1Fknu z)Q)diIVPt$=Z_mZGSSvPWn(fLtBU2bcJyr6{u!F(qsJf6A(5+Hp62>p)N#5*h~bxP zFBrl8m9_&e!C?WRY8z9DfW_{|6_QtSF&GC=BP_L}0bU)O__adTxKQTRKNZR^ zr?z&h8|Fn?Qgjboo4kq*<8zWFF)a<-r+CaO6#I}OT4kXXrWDj&wPSPBUA!V%H1v^; z^K+f?(bt^1LLob=uJ>js2c*2`a^NH=7aV6D-HiADsYqq|W5nFuZ}lIq6PX;t6^q(-5f zmZ|z9M2#2-pPgfsoxhx2A$y%|eV`oodQnhrgO~>iS zX82omI3>4mgKSTTw5y8pXNHkXH$s$HGIjV?!H&gW8aTXF z0fkM!g3@|e8Q39a2wY<`U=K=plh9gu(5iej`ZwjeogXA0Exd0ytffj_P-rVo7A36_ z;=cNY{E)0&NVvtVDvGtMk{y|~f*n=@*e#CoCdpMXM1+S@oz!MU`1{~zxvTG(b)6WB z#}KXvcWL-_Xo%9S_H8XCF2c^=p=Sj7x-60H=osbAFgfMTsGibRxSUc~-wkI&x`dtz zgPhfx(BI`RKxG5Gm=w4uV9Ik-O}KTsLrBz@>a4}8*owE9E4T&eu38`RLmQLNM7M@0 zc>BMVu~Fs7_sPm%%3R~)In#8{H#072O&ngn+Di+HhW4U5Fa8ewC6q$pLy}vt;(lAV z&Rem#K9r*6I>1oohGM+sxaFn^E?ki+clGnoMdni-q8t3VSMTgka8IHY2~%Zl_kH%V zP#&^y)j_GbFZ7|<#{Vh}J;I?~k&O9*pf=~rCi3otWwcV~BlY|nnZ-+NZt7I)xDBz8wY>Y=nbKHHWy#^tK2r}5nk>Q@v{ zpN(=G?Mw3+6AA3_=YvOHZ<)VYi<9~fy|QHCdm2R%1K}x^oH3_KS?^&Z+`^5)yj=$% zVWnZ{CUfrWLApj0!OwP+kpWgn1U|9+J#K?)Up0}tFb;`ge}w`y{IFDI&_>axvXqyTG}wp2l)=-d(o}%GP+mhRLoR>0slvk>fJ2iXag~*Oc$)22dPY>(x#Cc{kP2eK3i*I4hl(6!&ev@Jk~ru+;wrRq^V9=7>iGf5UZ!Rvx zJGAhsXsRNM>UhTe?c;W^ZtI3*8n2q}40XNTD}&I3{^)0zNu%T8p_R=@>1h)qr)U2D z3(aa$otG01gi%6no~$Mmg(GpfrlEr~RAFuMC>)h@eLrm=r$Hh)##p92zI!V{e5O#O zx1Ho7@T+Y8`k{=h@Qvq>{qmcpEaIrk+wv{UgsWl(_hlBgz=560x^Cz}_ohrd7@wVs zrpX5?183q6KF%W%{rBM&IfZ?=5hKAR68R~Slz1Kqsj+lim}I=vBtNSbylDYrfX&sf zB*)Vd)*7AXIUk>X2Qb$2M;d?|0cV+GE;^b%m7R{LT#?e9t_mIFvjRnJlqqY=A8Qd* z+7V?^6Bb6N?GGIz6!q}>jyz#7WO*`Rt~`({e%vICkM%+97a8|`KUPgRd&{m-o>12&0Bi?pe(AYgB=*wum) zsEqc%`M-a#EGn)9=6n+`{elw93N6tos7Q^E3M~!v=q&xfBwWcE>nN1&1`~gyH~&t1 zcOq-ZbS@AHu36dQS=NF+ zd=B#+&5Vo=lXD7locNF|_n2(z2@oWS=!TQh!&~h2j)cVSUG0S%^@%ZX|5@UObv#Jq zhnog}Fi_rwpN8NTC9(+*2oncN7!bA@rWwm5LgL6FcDD$0ph&{5&~LVmEU&p5KFJy_ zyArwGJM%(NMMe07;2I3=lML+x8{~)Pm~zbT=_d$^ifFH?R;VVsIT%xd7h>Ec^Pnfq z(_yG{>`7bS47e0z;3BUkhT_j^%eXlOzkVNpqW%+HV0V&ol$ z!eU78yg{U?N?~BWfpptbP6W{*QtFPz@M9zQv@wv_rKtq(jDqoVnL~a-nTGnny!wfJ zNp83-p+0a`LBD*@fv@$&c4JnNUXY%^wnq&8;BJI}GGCMz@n>@&YBBnNPD5j2YLzGOT3Fv_;>l&}z+p9hpvj$Lt+L!{9|*+vPS|!>hxFIMWKhNgluLf# zXO8goa2Ml~1mY82=(gDTq#mBlKH-jvHfIx<^4M?Y?9Ja4lR4CTChb@rgleo87}}pm zYR>#k%6vdlY?kk<-Djejz`0FYEUtfu{XH-OCnb+bsxYiapDTHQU=6UlFeR9 zY4+fML7nrH_sUmX;N{zhaHl=Y9-s9v9WV-tO?(BEh2)qFj1EV}QxReug@&b%8AU~m z91mP^>$BC8tUBl9zp1ygBd3v^^&+>;rXZfPM?I4Ayq^d%kyUJ#&WqpHZmIg^`9j(v z705Eqtd?T(o3R|CLP|}32SS>Pj4lQ12eM+1m=V#dV}-4)n=YCUl`crm<|gTPv7*9O zVOy=UYgH=mGFow0FOcqvS|M7ml-uU8V!)ZPddg+^2dpb`=gAB-tUGp=PW5W8OLvyw z#Kiohcqz_=(WVVSbMRVv694kBr+Gg{*2SBw49Z>k!iAVDAATZ7~14g|(VJej^_ zL7cyE^Iz$A^nv+Vlb{Cgey6I+2xR6!_%Gd+$r*-QQRY?H(GBNhDrbs#u(dcC@9ibf zEaq4|plQM;1fYwlBoB-%5%arvC4VEa zZi=jWBVr2V6zt)F+^T=?(K>RRX?Y3JZ*cVje?1B}!Kc1$8!D~m5Iz|oZ9XKd1ZQH{kBa}>W zbQgt`$cZcT$rpdmbk6iqn1Q<`S}-I_j}KRicZ1C)NSITOtgL28#7yd6R|dS@jtttd z+lx=KAZ5(OXNr>6p-Qf3jh`Ls8?AWOA{Ei+{pR>X`pPMN=ai~OOn<5o*;!3Oex(t9 zt6ehOe@Ld7dPp`)L0S7Pr^m7gO9;PYL zhen3oj(f5LLk#r!EbHqDi1txn_y4=; zr0A8i%*2#F#;(qezJALh&s*ro)0bpRrX#C20LwF?#IgDNtl;7G&^vbx)wfp*BE}CB zEv#?LEcz!x0TnwST#te>z|g5GXq4R_5|obIR9^nO4K^R`)-)aOxpAa)>w`-@rYRuB^^Vlxj=x)ra02@R1L#3+w2E@({7 z#S-pKA)??1Edr{D97KKu2NQ%@-;YT-cr#0n91>hW%*+TOVk0cSX!@s!kb-cV>qEep2j0?6v5QQ8jYNS=(*iva*8nj?0pI!rrisz3g0oI++5;{V3#kCHdmeD{5DkZT8)%pAI7p#Qoido3~o?#p5udriW z-QEvJ9j}0yiZ@{#i?A=$9-$X&3@n?_9FaiQ$zcS~~v^$zo8xeC$&={No1) z@MBZ4@`2*y#|5-Fne0#H3~Bu>YW=NBB*a#5UEbwf7}{Np5Pq9iPJ$-~?3Ta<-uPM% zh5nAQ_9!1e!`evt#Tsk7)U-_Js;*q;^@Q6@(k-uVjLfz@k_+V4X~!)M#=X}I$X*N1 zFjfGzx8W>IN94QphX`O;6yrMUMQM10_@Ij?Xl#n{_~-j8p>0y@0u{1GXt-T_e4Wtn z6aG8Pnc4ZkXA%^_#@YhW;X$+%?!7~Li1d~Cn{7*CJIbdJC-G9Tjsp8`#=H0Lcm{BG z&ht;6dWOdRy#?p$JqPDHE|c8vz}Afo&fa_=-X7Nm^Bq?k9bdOiY3w9kOX;F;O8A9UZ-2{{ zcY0((7>ZTz5Cp$+QY4}^a!Cj`tcxXq8=v+5pUVSiG4#DoKOzcriT`fQ@V~!2@c$n6 z{y#>F{~OKC8JqlJbHOF>`OyUvvmo>pdV_pH5Q$l+1$+G=W#b7jWB>+?Ky}NPQyJ}z zP0Q^HQ08-LL!g1b_Wj?xm(91HRjQWPy{l9NJf<^J(#9q;;4!<8pEDeGI-V_`GaY7l zp1Zjpw|Jg^r%K{=$V&>5~@AU}xDxxjTG6GE;Jrbu~!+{zHOMEau3x+YEemJ71k)cecU;= z&tl4%fT!Iq5|4TdSWg%K0tIaZXaCDz;mZm{fUx~jO5p1RJdIeZ)4SGxCf0w1?eO2@9&UN>ze9jTZcWia5b zrBGu zZ`i62}IY&cRp~b#^m1(U89lpc9v_gsu2AAJbJl37OGjyyg z8y7GEYbmB)er4fiGS7>n8$rteit4hf*z`;^_(r!+sm;~MQ~CV7x+0IOkFl@^oQwd1 zA|AA^nC7ZkmFyl9MMtd~S9t-tm6?O|g}L9bVCL(~l4Va>onEFTiDHtps7&ckC1&N& zF9JnkE93SqO_o8CN$=|GY=4rJlx&_6aOl2WI`ZuPz1E$jEh@nzFD1}sXo#g4QZ)80 zD=(i}LxE{vNT{rrT=B7$Q5~t`AMf3fNRVU%soAMtSQ-{$PAl!2n?BN~lDmr|v>1BM zi{@3?h`IkcuzsR`ZhkdS_c-+ZOJ@*q=Z2NA^VK5G5X->3ZlA=Dff9vdTsm;e^Uu|< zt7m!X$nu7o*Dj&;z$ijnx+a_@;A`>A$6D9jzOuS;XnYT99wA99)i|k_UO%H}16<3Yhwu0FD-q^*yXa#aKOmm(Rc)vNlMt z_W7Hc_lU8{k~Iay4HirX^$;prn_#X4+FL0(meR2~{pDtKVl<~r?s$aki5r=u zBx5|A^m@q)qfE)j^lKsWjwQzy#-#0`qoYN)PI>7ltxIU}6N*t0lEH4EqFqw@B#PR^ zs^k(uxQ-PCmYs#Taa%`8+Qbn!yFA>FS*1K79aUhfG)F*~YzG|?rZ~wOFHEnkmMmkUdEoXw^b4+UiFN{`8E!q_sPK>i)-r1C1x>oX$<$Be4X`%{6854k?K0I8fBcXt z#>n`pO}UBYgF_aou|NRRL)`T}UV4aqUeULFU~S~}I1AQXl;)}({2HN8jW(e z>P3%`>k}x}?viV)ylr9)EQ=7(!*w@w!tW#$YC`(D2;Dtxx~aPFE5k#A?V-M&UJqBl-jWX4LS?0^$7W|*cGx%D&n2-W+GmTub~hQF_g*4>v# zNi#gH^dZ?ZIHRaZuES`hjD(aR0je2TUU;n>SS5F=z9Hfxj-8U?CACcPfQ^;mYc5FhGkv0K)~I+Ly+i2Ceu7;Nom>3m{H)) z;t^5G-^@tWCQ!(EN|V?$$C7w8gr3;6uiS^EtXT$Z{`#W4?HCq`7p><^@zbO{RRtvq z)=th7FxjAxtMx-IODA6S;_<6#?}f|Sl0!o!KFxGeZjzyQWaI6q(;l)27IvcQ%uT$o_!J1u zd%&EMyZ=^TIxILF1#fyDhO$$Xw$ufPmh!_?5F~=_b@u4*W&F!wggn<04SVdP)ssUH%Zo)k!2{J=YGrwVyMn zt*8kBzukR@(iuHHIEWAVB0E_8BL6GjBhnku=y6m@0aD+sIU9xYozPUyyaIN*{)F?c zdq*n8#ikHaSJC>8K-Z%hg-}JWvn3>witZ2IDRX3Huj8!5cr;|z*0vvV)N8dhLwjZ8 ziIq^w+x9{u^k*o{_&?MN=udX3tp;-C`2hVh`2KZKuH@UO-B!YzABrH#bp=v=|e1$JVD96K+o0Yc_{7> zsV;FVh3I>m%;Jhf>wxejL~zG$gv+)C(gTO;Hb|^3w=8k*-MWExtJdWDre3P@ z!p_QC^()@IW6AwC2Q?q4$*GAXo$yz3jNNf5r8cWP1kKkG*JGb&k2~E$?irkl=jz+> zz7XUn%;j*R{$Kn4k{J%I+s#q?EK-OCiiT0@w~)Fv_0O={6F`7!A@$0+$76mt*S?mse|W zoOxY$a@B>ZfSMWzF+(og1LzS1 zP5b%F$4Gf4ZPS&_U7(lZ`>hyhxlKoVK47MO`GrdOIB4?$@`{cSJyvUUI2$pvsQ@F& z_-nL?=*Zw$+GqgqF@z@xU$AK3p&*wy-i4Hyu(^LQDHuTzx4k*%Ea5l#{>H1v>9;Kp zc~{xM@}w7+YVAB8^daXr^8$bN5z~mvSC`jxyaEBIhiGCCWdxD6@Gh+GbPQn#vbiW5 z+>*3#o_$A=6y$^Ih)V+mh01~9VCzrVX2 zVEXxNeys_!^9|tuLyt4QMz&-gt%iDu;c&Od)PsmO*t*@l zU;Fg?I8C!0T>TZ+EP$XvcjdkSFoX*o)rs2&i6|PC8lxqGVJ&C@q8I2P?;f*02CZ}pzKWzHImcLOYQuSbXF+>i0e~-Gx zN$&=6$CZgW?>nTA8wl@(^W0M##f{mXH&cs}b>hB6fGnT#*rU7>D@D7ufoa~5Pq$@K zY-iJEIbV1fb4XWos@kJF@v_Fk)_6Ix#1Wf+d63wfwB(fkZ`~jK@?S>PX0+qlzYkS+ zRNYH@%_8n7ss^%JHFs#-wfYt$70}^Z3w`ordJj?%jc^g!2X)hfw zmbY>wFQw!gn@dIAgW>15is{!NnB?AL#u}neTrOoC{GRBkXL)j&*R)H--Xr|hFczvl zBd6xOh_&81wF*Aty{bOLt7g0MBG;B3{GX^DP2NvvEO{?yyYf4AXXbVDj{BV4=rg3e zVap%**n)ZBo{PPM?oZlnx~Mt1W?1Mnb+D1~4D5q(oAPSrStu)3h5{HZR zCu+>n@uzC3p`V*8VUJhOQmO(^ml!u+cY9m>sa=4=xd#)U?$)v3|ApXc5Ow>(7|KR9LOz2wZ-RP`%)N z?uz1dXnf@-GR~?>FRa(jORDup1Pl_j%f=drt>Zy>K+y~?tiwlid={y$X8I5JqHb-yh zxvb)FO|1-C@x&DCme8hzo+7BV%4ZAQmP2SDEPjmNYOb2@CslGYESbnLkl`+_3_`nJODm_k69gzsDC@DJq%=+Z3AEk$1j0A z(O~$~e#b;A)qQ_IK~c{Z0Uo&oOehTqR_J5$S&b~ov5?f0h2J&ptv{OWWj$ z(aby38hIiomBx?Cj3YfQs+cXRh8~XGw&paQsO(oOCkF!qyhvfJ4DB0hTh~@K&DCDi zD308KXw?@eu*7VuC7@p83_I@e>?FlI&M_E2xc{--4yW8^5xwAC4~uumNF~`~_4Dqa z#Tylf#aqrz)DWcZP_k^7(>v2LK|!bfrMAC6vsr0wVeN^n9n?RTpT>J`m*YO`HX_m* z7Jh@fdz8Yg(6+`DL5eQXWQp~_4?6-i+harI?dX5kUloHj`d#ipbSG}7m6@W{$51$# z!VXBvuo8@Qpz23nawdy{SufdtXH6ZvU<>z%7jlXSWQ+}*PZLr>mX*k;OLNNQLO(GJ zB}D4il5>(H+Zt|BJ>!5A?Orqz)V+L6J1 zpJq8p#d(y4(|nq>?^-a<$8I&xx3NmXd_>%@FH{tMlzz8`=4!<$QLz?@kNEpl>SHMs zC8gROf^y^b*LIHt{G0zpS1?--{%-x4eg+htF$RzC>|1=w&@|&iv2Df|tn^Iw;Lnmy zz*6=w!>5qb={TFvH^|hCwr+D*7|hEn*_-*r+Oloq7dXp_^&ZD3^+ry&fBNIIP4XAd z(+U2b+$WLK{jiJJH|X_g_MU`Q_Z)A3^V@Mkp*J7ML-#D=r$qlJQ7m=11uxFttt}34 zs_;7;G{lvNFcYjOPiNW`@3iD#c7lsllH+7)jRQzF!fT9bXCR}_De!wmo_Xtp@v$@= zPDjts@vKST_3u>fUK^D;QJ!eg-`XpUyc2Oz=DSC=z+RdI`r#b4Y^g_rSG@GGM+0n= z$aorYf<&K68`_JZg`4lI;V7^&O9SuC#MFb;E6Lgdv)#JdUgKDvyv7gLyHUUL2?I=# zu#JQmYRL6OJO_Lk38e!Fp&LZet3q39DB>bD2q~R}?P^%(@TW!WZjVK?cEjZ`OG@4g zO8|wdOa?4)DN;fmC`TgceydC)D;V2hl>_;clI_9F+NA0DtQvO1$%pVZtXF+^(isL7 z5%^Yux>qL7`JWAS8>TW z36YqD0<4^2hwjx8lltkTHQ4-KC^UplMPo0qg$ zqR(s=uUepxKkFBqy~viicta+2sBg~vfe!Gi5QZs7lGM8u`^_xfyi=RBs5)#`aoJSv z9o9{Z!z={11wAe5bg&Aztj9E>&kL3}#7^Uw&4}=b^8Ik-e>9nrj$uawjf0xfe_6(S zHoO0$aiJTQ9$OEAqB0{5$~n`0UK<`tt?Pziw>3kTp;7NN!OPbxm_>H&O?qr=bXfwO zjcl|~r^By_k*rE*N3ZdUoYk{^i$ILqtCmSTN!#jA|Bdj?)EVQ`N{My<@4n@Y*6Y0t z8>}$bh0b^H+-mJ-b`o#0a%a^`Uk{%38N65%J}cE@(^blfef?uS0Y#*Y7j8j@T27;~ z_3D~ig-TJPN_(FZW`V_g;o3d?4fv}5Z>6{p7z+vsCJT|-O6JH$nqRsY%UB3?;z^$( z7YUVffo3)4$P?4ZC@UU#oqtBs2t1Vm30&PKG<$pK^}mRoFici| z3JC}f^Qloq33BBTg+v{cTt&wcS{@Rb}d0J6vs1$Y;? z6Y0-Kt{q>W$IHw<(Jsfj%l%!!AVGzqEB00pn=7h8>gAiAd%P{#YizgmYe)jE7$R}& ziZDU`r9m?LT)PZ+Af`gZ53}^Ol+rEv@?vB6l}@Vtt~%Uu`Q)!$$qTT8`n9@b^R#b8f)d-(Q3?mL-64Z26==4__GjMq7G#3U3N?e{ za=IXqy`hc|0nV7sg;( z&JXr7S4}?ZXvd19+TAl+P0z{2B(7YqSL4)QHiAMc-bka3 z*^Kn`#$s9!K=E2!OjJb%FxUAvATqI>@;nZ#o-2$@SE;QR*1 z`^${JE2!JJsCpf7@Luu}0l7=pANQMlH@oGl2#$6~L$iZ?cOCg_HOT#zcH#vYV>|Xn z3u-(5#uMAi2fuE}+wd3f-c@w#JBsiVL--e~kxOcK=LGTh)b>|@(Dwk<#v4U+S6_bh z&58Zs3++clc((oRw&sUl`1kH!GT=c)^CK;M+vb)M<9mG29B}=uI)-M|Y1J>@(L0!~ z2sy(_&_ZXcn-nk@q~#)vtSp8KneY^>x64<^%~asx-%kLviVaJ-`{YB5EJp||uQ7p- zDc=VixS7kRy?_r5ogl;d-Z!f2?yT*8?$ccTbKPmKZ{N4M{>o~a@&xXqlAXhY7S8L^ zdGMh{RG4UJ;m;w@fnf*8E_oJTTWM!V9Yzaajg?qP_ zJU=ap5`%!B-uixwaSPlr7gd6fh+1#-HLz6S`Vf6>0On&f1;hu^_pHxP=_V*It#bq> zi46VE4ouWSVGNyDbauruAe7%1yByB(T5%*hr9&iC(1U2~=Yd19X&L(;9bH6ViMCI^ zLRJg!rOojzpP^>6GnB7PWh${aGeXK0jKvszJgQUy!)88h&*jdN-+*GlMM2-;J!w z=}z)MvDdVtI;P1>f;Htd1^GV!X>3H3%BQKu2zyBdozz)kFeh4N2Q&VI$gfoTxFfp| z=^%aGyK^882F?15q%KvaMlBbF1e6^w>aMyPFG}(-a_jI{;DhIAe&`b$k=M#y zjofo-l*~PU@n$5$1jyqlMxExChfn3A?4vSTW!<+h!3UKhnn;MDh5Vj&qOk}cltqO* z#T84CQ(WRqc&6~^8#qd*CBejiE9W0q3i7P|yHIZU>Thsc2~*EzoRIb%m#A`x7&{UA zJS|>xBbXv{9S~6f!d`b=5-pZTc>JWEbLx1;gmNsd$w)y`tJuTMNpD@nG<$wjL|V33 zuMoRu2;4l$`8{nNde+#%_hedXsMMb{g#FttE5*Lj+UU$QCcKEMjZf#8pVd8S$GzGs zCL#o5o8wm&$(PL)JiVvj?uq8GyOKO(pg8h@QC0!QBO zh@w5XEh*Q%m>_dHR8eAs(eO9`OGxBA^lQPT1e~s*qC}oBI?V>r4+@_DehR!Kmt%@F zD~H~==cZ<%x4r;nM>?%1Z|6Hz9ydGhl%+o`k@pWBZci8s#U&fSqMr@;J&2BVU7WfD z(%|L-;ohVCyN7;*C^X$5lV=C#E{Z-X<6wNV#Ht_&l75}n<%8^LHXboCl0uV$&nQs6D~N4Bn$pT{e0}3+K&bV#!Ciqr6WdP z8M*y5V|@Rkz@KH>pE3B`K;$2Eb*aq?9yI8QaJtJLh5XP^J{j^f5=m_;g3|fDM-fAY zB6#XwEwAZ+reeN=Sxihj*tr(!<3n>4_WvmEIfv~iGKX`I4>5f8f=a3*dNPM%9u#e7 zo1;=kWltyKwR$eF3F{LE{q%DQzH73znCWYpIHEoJ-4dk!#_CNtC&vl?bj3#w=0R0! zqwf|^=yG%r<%^rmvCHQ;)C|q1ekvX&*Eg)2pGhv(LH7SiIDIx1TR2K*3l(>4wsmHn zq(@gay0}S|kqn;4_iNx4W-|0t-54(*$>Ziu6>$k)d2I!pABM8%{kv9Y;=QB>v@)ER zciPj!9XHH-2Z(a{D48j+sElVKoDr z89-{&?_D4nbvQj7wOe7C0Lxi5u;A*)?>vTo^i$Cdtsg~1=9|)cwpR1izpj<$mzjK< zr?n3j!?He9LQ<_2)KH!#c_WTr0}}h_Y|$Jvh2l{oDRz-Q+1E3Vl^AWa$8{^%@o|sx z`)~4Ml2)MDj8pN>b_c8=FZh6PTEN~*HW7LPfZk>|`tAm-p3|AJU+FE=_bs~P`Y@$cd#lxy_@|hPcg&3Ni1Y`vun9x%HzyZ`!)*Q)7 z5q3YwQ$os8BP8WzW4V`9Vr-D0HlcZzEFY>aAS!6n3!yn>1FI}Q%l5&JL9^zpp%QoG zK@I2&upcmc@%P*SFT|(CgL#cbZ5Chs_+`z)8Vo5xws7ausFrE#^c@|gX0n{!4WT%c zN8w@SWWdmY7qWyInVb{UA?b$O(WHXp8>F}v7h51Sp(8sWUeygKuu2TT>7R6|9GsXo zp1o$(3H#0${76_O_E5;4f;*>hJfb+r7BydE{$n=fvlVPrXxUH7q#dg`o!rKz zdGT3lHRrIzG>MrJRGd_vU9z|4eV)uYsefY)g9@AR zTCd(uy^P0ZY`@Vq*S)jd%>DsxIWi9sN<>&aaJSSm2ZsR3HR3ao9;DgPW6wJXj&E>p zQ2;}?W0DG%T~p2E(sLln?Qq_-NMk9|>H3EAD-q4((?wUD0sTj|QTocH`lzUj?K13yar;t>@g*^Zhj((`np{y^0*heyM#yM0jvh64FDAp^+k7G{;~S&P9OT zJyB%uP{1v2-N3W#?{6N;ecr!HAHgNXPfIV+Grzy-+xB>8bCP-{mRf-sdpG~y@c1B{ z{lO=RMa7sscH-_`a`Hwp_#}+#Uo_s7>0i}1t>OwqL&Y*92VK3*^&4SEBKd?ecpc?+d@M-IJM&!BiK^{WeGt9s#KEw0Nx9GHAup3ZVI>B)? z?K!0p*c3lAGdV|bs+_DlKM%Nv8$s!bgW_N$lT_u@6`l+LW0gY9vFGo*3hgtkj<4>K z3I*Z`fN-eRsKyr}k;&_Igkrs`<6vaz6*N`v&^_W^N@a~1Hqi)4-At}owHW9G_`mlL zm0`mvaWbTQ69=DB2bHN9+whuHxRvLgIbuzCrwKet1(lgIw8#{aAgCW0UQt-2_m&B5 zg`VrCu7F}MmR61tN}m&&IsU2x*MVM#Gq4D9%tIPfEFOOmrNNW}Cu~BBxCGVL2nx}p z;{s<;|JnM|YciTLCK9Q8L5DaiMCXJYQ3Z>HKMs_?`d1jC_k;wKo6&Duz=iE{2Q}3H z{%9hwBd~!xu0XRAzjiL(BvsIy)V5prqeQxchWW>Kj@(Qd?QuQR7dzd2tL<15!jZ{& zU{J>U`J`Up5=H6r{F0{goRFq_h{|%6*Y{!E$djXev_DJ9&A2p9%yOXbs6vAJQ&{EXbazahd*Y zn@@T0@G8i#))cKzV%MzW03P+pT#)nWLRX+@6)V5 z(cDVl=h5xek^}qgH6z0#qPWjs4+zSkz=9L0&=yumiCxBdz3g+nfPBae<$_oG zVBFMra&op?Z>3*#d3SUHu?eX4Hu-6Rxd$*SyjYr^bdh8>9li#5G%n$t(6*t!BvnQ( zoq;x*r$${tRLR!Jj5rwX{LZ6z&pYH2>k}Wh4Onk*oJPs=1K~HD5O+z@vuJ>Otw@zm zYnloAsan#y%vA*#w=B&hUwxX4mVZ>qV=*pGtI2T?X4uGCE~4)f8xTcEVX=r}ozM4-*8p80~#_bv$ zNcSS;(u?$l98K~v{(y8%S1Ibntcc*>QDYVA&VBa|3WCyEQv{|wM2XqhE}yiK-~Ic< zGI4)HZbR<xnghaY+pygvB@u>3ay5ad(S})t zSoaaz^WD!W{V5!e6e}`bvxCIBEQabBExmlVzN2k*G;n)M7y#So{YlGF=8 z+w30@uf!aaDhyZ+cTEdR*zGr?TJYqZ;|L4P# zlx-#BlF0a^V8bBi?=IG%@-yYl&Oy%o*FC(>W5SJ*`2u9Wwa5ygxrm2_H;NT9h7xK~ z^v%6@Xt6TnPlSwfXgRi<2bF_=mKJpi2fXk=Msfu0f1MiJBxWSKb0k1<2DG+UJ|g<) zD()bJ?-*9uCv=>0j%^HUl8Ib>kARU5ZQu+i6nKpHmr~!L{&UV~qb@$*e$LtWe|ye^ z|6k78|0Z>8{x7K``H&=Dgh5R74>17&C=^so4F#fsHf&uYH82fs906=Vss|$qVj}DQ zQk!|XQf*#|qv@uNF0x>6C5`M)`*xc~yJ~sUQYDSj%YUGbFH*^oljnEOj}h1BE$6G% z>DKWMkYKzu2%Qe5Z9hr+sjXy(=@X_MqNT^p-)24UWWKQ&=w(zMvZVJ9Vo@oAN{r zC!>}q4NERd?q(cV7P^&@oXlQQaA|Owto2^Ncd&1|Z?JDNADRDTL|vdp@qI)k`%5&N z|M1kolG?`F(8iQb4#N$7R(9_y?3Atz&3@)^ zF(2S$cTB3bVbM#WhljA$N7P-Ta7%TyHM-f3xj`N7ZeUBx z>P+7fJ=mJ9fk5XH(`%&$s=7b}zR6W5f{rk%R~_iLqYEBQw=zt5Wqd=9{YnoWeV;&v z$u+vO44b8Q!{l#_$u++7%ikZ?tAB?be0qGZxz2^Jr*3IC^ZX}JW62=>lLpF=(In+$ zrh#EmW7)Lm?1p>!2!n%Xo&WcVK_q?t=+a>w3|fT^SGsz0bGOO;vND{r13p>duc;l! z<(1kcOZ4y+(ulfXL(cwdtScI9f_I#n zc)`oHt6K*T;7EfWzn$0CE$H{f%ggO8+qnZ+(u25uoaa?^oH8aQ{UhaS&(t6h*n100 zORFN>y!q!q?@NK!6;CJABb77obj;u4Abk%}syGHqeV`>|=%Ww|X%EtEObx|u{ zyGb``jd!m0ECEJ!^$Wac32)l)c)f+VSs10JeQc^W=ITUP>3e=JngCFyTXZg?y>PQL2)_!FT*LdXt zaNRs%Zob+wv!r_xKRajD9BXKdKU>E=phdR^`X<621FF{5=--lH(tmD|dAUVeJZx^? zv?6d_^x(^AJE1y0LGjT*Cc;}T*r&WdyRJ~|uUmD#*Frcf%GOZyd4o{8$Jz8-vQgTOa!*?CI@PNxcZDwv6 z8B60Hzqx6YeePt5T$3tcR$yl)C>w1Mi8n`10{md_!oN7QRi@Ok2+Yff5q@rG9$%k7 zFEQ@B*);00m~P*;eD#2sUiiea=F-wkW8#vA>2;1 zC%R7jPa>TQhO^Txb0QadNTB08x6s#2c>}$i-HOf-o5cSWph8xSXrQ`wF*=mfvyoQB zlR`WYD(dD(Oj}|q4m6k$u!vTQNFqo}LO7am*_IjA;^AR!)W!uCSFj|GUN;x<WCNL9Q^Q8W)hB}Hd5<|LNZZu((v}8%ESw!{7a0L>+FV2Xu8RVKF4!)*e9>^N zH&_z2P(GuB?Ybl75g~4~lr(tGujrq=mz}!h51u$$=&E^T`N) znp!huhVgvMK#QU{xG-EKTPiC;jg!*sGnM=HUf@D7`et$$J=nu!2}tbF;)s$4G&N4- z@Oj18i(Vh5^q;JxCqEKK6be>H1qtKqW9Df{qs^q$g)ZPyp(nai(f7ETYL2ZapZBISQe_$H*ud^Q=NlA|MB&(1s(i=u@sk zMQ9dY24X|{nM7|&?E~%e=Nku0(b#_5rHD8YFEO}>u{eUQVKE5%9Cbm)y!bQa9nZjPjga~>V(@_WlF)J0?lT=y=SW;v?*PAqwEfs# zZso0ogo!#@BB5`60|l4n+7B*;t`-Cs+!hCzkskNB9D=49Mgx|;vDd5)@!mxTV`Y2+bG-cn^A$_@Ma`ppgTwP*oCT1 zu_6&MxV+aL_9E<29wGn>FCj}zAQqM&Ok3bUArQ-u`av{dmyMaXV=Gs=BSx>-%a|wL z3xvlRats-Q6h9>5mWSq4 z3`L4nqW+@+@?f@!lvuE_WuQh6uV+HBLE?+R{{4@Ja>nlO$jK~3`~$jk^kGbzWdthX z25;)6(y_wg`7O+88q5~oZbD`;Wtb6i1+{Z*zC{UIj8GFYo80k)k;$awbG0~$*)=@F zVklTK*rfYtzH0}x`#-A%((*)y?J>8gr1BLkFG!Honvd6i3#CO>qnUz>tV)_D`Bj%t zfisX}B;r^nZsg@~`V5n!-2h0yvWgyhP!h;jI4mhmJbkgzwwm<{)j1xyxZsvu*FtEGvwZxB1%*E#S5 z-#^u`6W#|crVip40_@q%G1y?3)XmoN)=1hC;D9i$R!SI%{G~kr&hAzHycK~ zO)X2($D}Id`kDTbmFsn7q)+)^@zt38whUJC{i?q4?>9rz2SoBkIAg>TuZFD*^KloVfHX4PFy5wNv-9z|2I zJI+jvji#uQ%Tb@5Md638!rI^zwbJiBv^6-JTdC(6hCeYv`@PdGC1T-!yoGfMb4eus z=8(=dqtjy}q$MBemi3!UR*Ox(xDdVoWNs>z0O|k0A2Sp^BzxQB#%c#86*Vfotx@L; zQeFQ%%Ejs_)W@}pq#k+g-Ha^og5=fwnXX#s#9gCfAwInv+3xM1MYfG*CPd0rT@e1X z4_MLVwp*e73kpLXwr$LPZNp+T+uLdHFD_F>6a!Lr1ULn~Tv3w{g%w zxqb5}fkeGmI%Hk1@+xuwe0C8BIc&MGx}B=yoD}+ijf?6vNcft9x+>AfgMZjJhOF`-|-Nzq-1h3dB%>GS{Qfk!-pDsH(U&%;ryD=Arerwr9VWtKr=3B z8A6a^>R%aUp;mmbb+J?$RF>`HRTcx#MChWlARK0pcGC!pBmo8B69!Qaqm)~Qw2ki8 zCq7i}NMAnJQVk34f-B+M%Y}SrAXvJDnSY++)n-tRIa}Y>HQIU4-7{~k?ewD8-UW|v zpN+B2jYylQYdv0;Ix3=}ujGG73>d`FQJJv=%fJK_!I;fxgv(u13e@S9CPm`aeT2*i zluJKt%hW-G)g#~?e@!Vu>{&E|CYSg#ffNY*?%Q3!MYHSUI#_`AbH9=0GBO1m$@;kq zq}ZQ~UeQ*-&9GF{_}rbxC@n|!zMuD%p~cY22FIH*7py@Zlsl${s3C6u$yOvKM1T+r zvxiE*xqbR)P*H}aRifGh&dFn0cGci^Rakz?>A0`aCWm#|$KmN9dVe`mKA)*JxLF6w ztWS1u=kTqFr`$&0&?>2Hh&Mhn4DOWwR={AMWHz}cr-n~`Iz;!ou}t|~+8|M*{$ZDI zlPxHSO3A#C#bPnozMa0Kb%H~yQF=Lu>T$QjYJq7v(OF-RakY%4kIPtxF0~jBy%EUu z43lA66;^RLR~$E5?hI5?F}mNv5jm+O(nPsfCz1oL@{GwsvADl*YT)z?aQ9)6Q9U(i zc*dofpXGDD_}Zexjr3dsbK}zniBKMXYwidIUm|fE*9Kc%Hhx>w#&0hGREMBT*vc1@ zfg_Zr1*Qb$5iE+oI#&R53SeJWum7lk1OASIC>%SqE8g%Ljj5>iVXIH zKp1HB2$*3E)RVfG?6v{x%>?Da5j4BE9{f#~D82B~|#KIq|bkx8MzlWHHc0j<%2VQO{*j zqDHAR0r`x9vM_mH{E@6htP|O}e0hiOQT;-pd7t8uL%iVpHm?n&x|DSf*O6>X#d>J? zjQT~rQwj2sMOW?`@%4;WDD{m>u5ydQY@vM+^AV4puT$mz&E~);dV2Z;n9l@oa@ETqk2C8&1!uR?W@VlFTd=MqQj6i4%U zkoYp(pl3T*&=X2vG1*^i9A+2)HcYqiR5%tV=h!T&mf>=4zKk6w;mzofni9lXq0yU6 zlzMtarAu7#U;lZ~3?p0_3CE(B+fp{MO|rD}q87cwHc{Jm4%&hLpG}XnZ}2UqlSx)! zlMrdz?9-q5NV8C!4&nI3zEcCM;hE2X6EAUs2iF)YBsmWlYitM3$THUo>F1PK1K&UsQ^<;f-ms|eH;P-;6Io*-TE(!*o;cPsV2-Lf3^$H))-IMhRa617+QP*k3h^z zD(K4+)V(M8FN>Q8%p;uYdmLrsJf}^(3b@68Lggty4FeRHR3u%71I-x;ReuVp>sMQn%B76`Go!JB09X2F~7JQ4ml>-Dk31yFrB4m zSA(V~YbDo1PTdaPa0)iT=c;h~J*Q%vI$~WBzUfjj^-Nebjg^rZPVgE6Ka%xPgCA`x zItI$(AM$Y{tzpJIHRvatjbfBqB_+3pA;8Pc{1f}$A@h!0P_gx%RJ!aTy+XW6&%kO-Rcfq;W!vLQv;w)d7i%Bii1O~NJuE~y z*Vyci>%2B?z<0vtWXYO9PP?!}cHk|oW>_BInq)XBF_O&UIVDNA!(g{9M}F=RWCV_c z&nJOEA2Jnk*DM2{312+@$3qpDF^y`&r$e|>FnJmphyo%2_Dm;tQ&eEQw|l4Dc;{ff zW;~bLSR3BchhIM?K$+)eg0y>y!{s9El21dw!&vShhk{0TeT>kz;YYAD&zgzwK?ynC zz^C89J43@Kma%FwW4kKvgy~)&2A|fdafBYpp|o+iM_{$Uq5PaQNQUwl@LH{P7kpuZ z?si?w*pKN7X>qt7DA!<)+ZaB?I-E3;Jo3^VyyuSf+Qlp1(anGRMVUCdEVj?eT=g0Q zpDX^;&S()^`${!QyS<|!;HMCZgHb&e1G+BPlhI~7)VCHp;6lu}g>1x?;sLt-KJWsf z_d!t6^*>m9$KYPVXx($iPIheDwrwXn=0CP=+qSV|d&jnI+t$rFbEl@}&aG3oYEIYN zsILCd)$iLM)_T@@e!d0W*TiGzzJ&|Vk}m{0QZnJ=gg9(&RV=_35)1Vxb^PpX$M%@s z7^gmCirqnmzF1P9r)4*xHmYSz3DJSU78#0VQpDGiCo4!j>G2DqZp?=*M8mnUM7}^$ zAHgCrkma$!@6-}IQb?^4pm51o4dI5C-@ycqX|W#CmW-tiP<2NsI0}u)vnA0lAy{h& zUP{Xp>xwGXkd-gTEs!JQlEy#j1=(&*oK%u>(TbENpR9z-b%U;*yK)|_*+wk!rCNA* zJ_TMy&u$5q{ju(_F6dI7_u<$^$dK$xF5(L;;!7;zi#$Ognfofd;Vs0>b_|N~19x-;d{h7Yu${w~c(nklwrKZ<+=a}geJc_(+NZ&WaijQ5WcwK+j0YP09Zf~Zq zo2oT>gJ;mux%2+)C6ST*ez3mir(4lp-@+=RPX!y_41Yh~6)t^QcK3*+WYAN28U{(H zo$PP*V zGY|G!h;+0wMh4&e>G-IBUMTWgitY=$?L}v9_gbWqCOwZQVBni5od0K#h4T}J^OJ`2 z!$@aM<2UskcsOW%T;_jE3)L`)tI5uEH%;wao4`Hvf_sqZMbUaX~A0W8N_rK=+>Oe@d}N)~JARti!%bUb>LTMLAB`;iE5_v>s>dUP%+& zxtojtG162!f!Y1TJR>eC<7aBH3&zN)WVcgTz~H_#v-iab#rfAbR}#$tu=j6EXd0z@ zEh>{X@Y-iuq*si#-IuUh?ITdxwh_u4Wff!sVgo+U#XeHqd z3>|bsUSMKg=qf2g&lu;;N1rt(t2B4QLm9@+<|HGtjgcJ9?1x=kzyVSQl2P3NNIeoc zsxbSe72u&ni<`Dmj$&OQ+IRNmn=TM|GcH1JP?w0$q&7IzICH8dULXiHA#&aLGV%H^3tEzK-lP_T$FSE9=y#@7y1_kC9+tzJA@3 z1FIEi3x2&zKcL#9qxAG_Z<}tf_ZQ3_VVa}({>spE_aZyuSQ;CTw0pZq!WP2h#!T4L z;=@$f^!6*Lkn$82LvB2mVE3sGAomDD_INW#04YLq6rM-xB*UkWq;W7*bZtQkvSvA| zaDI6b!=s;gd>95<^DBcOQ>T{2tA{$K884&=Da+cK%|=aYL01VhV7*T4#=zM~1+Wc` zsu*l)_(Mh5YAixsJdCfC|DhsaYFe*Np(cy7Xnw7#B@=G1Jd5r{^K2OW{w|!=`8P}r zq!u_P=c@Knebp9&Ltz6DCQczvTx?JBe{a4#vSpjvY0Ug#7UN>;SxLIKFn8}?x5{#>+?N zDsxs{S?w)wbQ8-(&XABgDrW$$hUAU9oM20tfNqvLLZ{GopGK+&q+Ha%p<4`i#QhJY zb^YMoAMS^XAn;#u5#;|{*5Ln3avjuwQde0<{i2_^!EmG6K|=hE&ce`7_WPOiDuD<~ zG2Da^gvZV)jgUETtaD(+#5RLXdeJO}%(`LyPc(42`3#+8BHd|9u~tgSX@ZmF9GjNq zoZ}XciFY7K4CVH4+w-RDmByFn73cG&`_uk#E~o-AnkfOCw@i%b4(PxBgASyBf zW&_HY>M{GLZfim~{QAwNZbj1prnkaZpJ93*X`}K?`a_Nrcgk0vQJ(zATl8rk38VKi zx;yCfcN?i`9}%N9=^r7Zw&@=+8oEbY)I9sDWHq-d*KN;SiTpSF*l1^;@t(ehcT|bX z?ibVPFECq4H-Es#Zq>+q6K`ChzDER5w@mKf6J1F^m_g=OoteJ|-@YafcvJ5A5)sn8 zMh=L{z76j5$jH;ZCJvB^fMq}vQ6!6``b3Cj;kTJW_pHh{NC+&zXy`mU>esGrXC37> z(calSgXga-D%2MnMa`ck5#w;Tin+Za#?S3K+@{3*4Xh(k z+O;E0>*lW>sdWAC_7d7nTs=iI*Ef$;sJM7+ay!Z!nuu5iwNTCyrREJ?BZ(LargoLi zxYsjLrZqhi6UCr$=yLb$SF^{H{m@}DGf``naoy;l!o9+N2uJ9{0f*45=FgP0)Zyz} zC6zUF5!rI!#gophIR9RO%Lhr%N#o^y)0{bRXrUkwmbQ8UH$)(-{${k78};z-bMaJ5 zte?0v|MQUAR5WSe%Jt!bpD(wD<@Iz_MSY3e&VOW5YDm6A3rxJ+#-hN*16{7Mh?o|q zTT}DbuV@@a-F?hieNuRf2qa$g6Zrj-Tt!SY2xzstxgs!Xd@)4pGFwisYW%#RBO`gI zqj;3TUnMhh1v-MI>QFF1x_|JJi1k#LmyaY~(7wpIALPMge-RpCq>R(iutm(FcVZ?* zWuB_m@#ZNT%JNSeifaW46O>RDHoO5anb@RceYi&BkYy5luxl#(I&ENR)ssw(WlC2u z>6nak$DX-ziu=YTuvV1p(!6MbHK*|kdHrjG->@&Kg&#H5QY#j}YL z6)bOb!2x;%n?vue1+j((3W9`(Zg zEc1kTP{U+v-au~tKkHzlnz4l8a#pd!5nH$BmqqG}ro&LL>QjCGoZ)~`1s8x-Pb^~V zhcb8&XP4@-%Sw6rezK&Z-0RDVoIpbp#Fn3vvc*xNH&K5 z=YfSwTau+FJ0zyvcOWErFiM0ES5MIc?jKxg9WG!!mlr?irbzJ%GgmM>O4jNMR6|Cj z3zqvTK{4{)sIo|$5egntD_z?^yFQI3VuY7b6is<>wVncvw7wQPlSaxuAC`RDdYBJ0 zbyp5kcjG51^)!C6$H-4->QED9sjiYvktzx%-;s`I50j{6pGiYC$b#uvCyu6Cpozp< z&mk^T3P_KCZ>qL_7~Lp%-MVn0JF~J@<>|Fm)R^cY)R;hNIFTlK%T&<+=+QH)Pm4Y` zVhoM`@h(U7l@ReRoo`#KBE+2wu?)xWu;FTDVZ!_0^g_ z^Xx4Uk%|+L>|>SCH=_7hvUzH4f!KkG;@UuMstAb3K)m$FA_@mn;Rm-TNf~HUaYW{j zk}xF9wneJkPf$mJm;@Rl%ExptWz@4??(l}o#>KTksIo{~Rz|MSw*Nz(p(xO7nXjp$ z%34^@^kGlNk2Xi7xEmREI-=DXmPv8xn#aiqQu-Vjl|NjU2sX5my?&{)<-FzB#Z`X* zkh_>h0Y=sybJ^k&)N_(FP_MxpqjVBTKbQ&*rHOV(Kkz&OPKCz z?4d3d9R5k3P5m3KFSeAPE_UMIoU}I}!4716RIm&?_{hs`n&z2q z>=66eQ%l*^mw2AyA~F0G-^zqcua1qc8~(%-Tzcm+{xYGiytxU$@(v9hg^}6NJWC{A zT6p${x^58>7^N;E#_s-|KnW5!v<9d|a=VOWq-h~6G@(7vMMS{}t-qR_z7{pP&XqcV z+th=>_cW#DUl;Cj%hAgr%2CzDS)#>1ZF_ab{x_#ed zB;Q&id2GS_2oK?l4+F^J>Yi~nlXW= zNkY~si%TG!|ALn1JDgcU& zRr{BiB>Hp4Eyj=h5x2xB68=D6MVcTnvQ#+m*<-6a0WjFsM&LzN16q!Yr>5C2SvEn+ zdm1hOMTanXFqSZGcg{}$j(XJp&`()3qCOZ}5o;u2n~0!#=L$}WhH$|XFYquC;R6};(Bwe5hg+!#pJR_h^z;XMhb?&6ENYNn zVw`GRyBqgl*wXLQF3_=`pl8|9lSum49$=4HYg%~;I`M8szZ%oO5e)^g`Y$|s>10P8 zSW+i~#+g&}I^qj1p*Xx#8~qiGb}`Njy5{2Dpc${oF0&D#Z3zwquSBPl@?_Cyi+z)# zAXS-Va5HT!x&gbYnV8~A3~E?ZG0lhCTDFYZK=EAin<`3K4Upi$cbNm8RBp+rqa%Mi zBXMizZ<2~xp7Mb>azyX8S#Rt?5=At-^vO_)mlq>@o(2z!8l7LRKu;u2PiCAcv06N$ zn8}h)R-``1YFk5Mld>wlHP<`@tmunT+&nj|kOJLT`|pA>Npl=>YzTtEy_s@(AsQO* zSk8Fcin*%=bn7_deMBCd76y!BdCdVy!%wOT?s?lE#hE&N!C&#rm_i|&LS%PqMcoPi+uq?(}xtTzA6Dp>ZW?1W}} z+T+5;`%BpZvP6JICm)c_^r1cUq^VsBbAyO2ZUaT`#}!d+{vI#htJ+lGh`snIV(~Pa zLQ_aV!7Z^rFGS57js(9@K>?>DYkqn!(KgBi0Op}D5nb2XEYcZZ()v*QR*F}^<%m(ZC_WlY{BRWcGIxsQ z6$R@P0PB+gdqw=?;?qms2lsE4BLw(#n;|48JStx+02un=)8Z(=o`5QrSN!46MoGie z+$Uz$tNxPL$i9>n==i;gwr<|u9g)~y`q@l+2*#W$01sJbK?*a?&}Oe-~5VE|INexZa!!zax6(Zla_stAM0?Kb0p!p z5}>1-G3Oq8Tr&#;2Q;Sr4ux z3I}=285Xz++}QOLuy^Bg$f*1**(1TBLX?+@Hw{gJ5(wfV2x7nVH6BDRVNOp=)01Rn z{!%QWI_(4pew*1qL#y9fWLX!7tQfLfUV6^tf@MBiv%y`DL_fGVJFkDaS0F2)O?>8@}r8teRz)M8{|JiN()XMxh1$?zdD%ytF(sre@969 zKO5^cpxl&~lfPfr}XXd{&^F52ToG@X}e7 zGw9M;gr!sZj3m}bX2>Q`kZQAMgw~5LlVsLNHcPY9ot}yt8YhkBV9h&d0kwcZvMC>^tCGyto51x_6GaH?)u1QmxH~$9X=azdT5Bw-0-t z-7ZnFbq6ik%G|O;w~uS^?e2xK;djM(o&iw&b@{*elW){Ez9&L*_iNf-v7vmacj2(% z_tBBQazxR)z*{>b$xox%z#r!B>dS#*6 z%Qw_p>l_lrl7dB4M7Vs7R}^ThHjEsI@3qm`S2qqMh?YZW-9(Yx6Gl=8X#4{%bz|Af zUc^776i%;kpgg>EfmRP6slJW~T?z6)LFc$P`p5pX@KX@5Mtg+3q4JM54I^*tD2BYH zK0!mK3Mh&LJT0%6hO9Tcu(hkKX}fUO*E2O+pp01GJN@(4u`lcqqN&OcYzgCbS9H+CT^z5qqHWwGyJ+xdc#ZxO90MMc(aY8~Kz*P`|5$pm)4UpVm z(4ol&x#G%iIzXw*$PcZdZUUCFz->T-^2odqxrogjnr0pis6+TwEsZv28(T}8=VvEp zHWy|#sAe|j_i)RwFJ2(RQj=lZ=nt2en_BY)pl=^J@p;qT$)&(BvNEl9bB09{Sm{NP zmkh&6ID+v;pr)3JVIsNQBS@xB?%g_069i z6GJ$y@oMH6xjMyfT|2_NddAWdDqPu4P?X18Cvg=5*1O(2|AFZ8ib+P28XuOB6!x~G zxTv>q+M+dWAL3%dxqy8}c)C?ls&J6BP=e$L%+xfy2Sm_m{85|PY^mAgEvTRfCz9MC z2wzR8O}y4Zc%mc@>1vR834{#K?5hV&uG-AvXOb&IqPw&?ZR^i5wfkgh^UQs`0LSG$oUQcsQVz zi@-VIl7|pOQ{hznt@chMNWe1)gp|qZd6W|aoqFWy&Yqw+YW7~HX7vZ|FQ#}3){9F~ z$mT_(tBFYaSPuIOuLzM^YppyC0oX-}QGxj*(-^zfoxRuCXe;J^p1gcIr6sdnp6n4eW`HZ{8v%(JNQ7^G9DYeen&}E02Dx>(q=QAoF}=%Wo=BuTTso+e zyvUodj!;uFSBJxK$hRnelA}2dLs&?u+c|d^w-RG%NXAj2qjRtU-RBd9nPRmq?}PFs zBe#f1KJU;t*P|gq3_7#-YUsGiv1FLw--C7vYo+J5m6Cg6{s^RtlHg8BuluSQb#Vz4 zsAa8O47S@8b1>C#vI_Ur@S;)ZkQW*Dy*X+9DW{9^7fY7C!Q+;x^g47ql0$NAlqC~% zF^Ee|6CMC2_3MLrTA@}t^B^5<1~F{Q@}8^J*3N5J%mA+NgxO9Yt)OC%a*E-CtsAP>oYq6i2AgAz6OtxY`=-jJfC zRotLho#fCjaMIm`+pv|1Ni>_aR`cVMz)U#}E7TUd23a(nkHtYfEm3xMkw;1%O5t8z z%+eF-haHml!#_4QiMOCRM>^W!i9%FVd=JDP3No`#=GbE3Pr7BPu8jPb7V*Pans^ap|8H6r zH5HSgREu#OkTl8=0q4Js3EYy-$}g-AG47qgc(KCQZGkcp_VYl7l=Gt~!`*wc2EVT* z=ZiQl<@#WXp;p^L@o;2kJQCl1%=+>reBoI%%(70;bD*L%Jg~YJk#VA=fPl3oo0zIE znBBHBJEfp;GB`)iecB@I=+obH*<}r$7mGV$OuNEhpUM5jkz^AXD_&88 zr}r?q%|Ur(ylE$ARFl^b z=F0-!P|ldMQTHVrOR_?p{(P4<v`c#VcEt)RPjrOrT zNtN!V8<#q#WZ|N|NEz#EWHiDT&*oE=MR8b?n8H1dGi*ENQOa@&XW8SOE|6bM}7 zi{@|TlHJDaO+WI9viJGa!!OYH7vu8G)WH?+dgHPAqbHE~hU)Ye zy-vp)v11`MuWWmO?@{aK?{=@?Bh!^)cVzz=f_?WJF^-~dRN>k4P23w5o~m9y)T6VP z;wPWn{2ND=o{Dck;D9G4({`b{M52Cbp43cGknlkwbs5sq$Lck~HExlU6vYZje%xEf z-3>&L31K&?g23G2n%xb~W>+JVKeplLJ9EG{#T6?7^@t^GCa3@E>(j>`BL@*=eytZs z!W#_qIJ?=?{!5U*x@8ccIx*X|<jaVahIwGN6DMZ8nT2jUewNo(MU{lpdqsUV*;gFp6qcJe@j zQYvYm8y$&2!wg@O(9&F7g=AW>aZmN?&WusEIoALxM;N93YhznmrK{F{nlyEWMKwep zXu)%34CHGKKou)$0$X1NKNztkhVL-eAf6@cC3Kr@?Fwm_v&rJDbzVhL>8?-1I^U~-H|BW8zL z>`r-PibheEL;V06M#~!*rVl)x+G%sBHf|ot`d!qtzaAyAV8+5={!AgSN+i4)I=`S&28(}AB{}2FuDn_ zamP6>%{0cC`Kmo$ByJsWN`GF2{E72 zs)%TVL?^_pf`mjo;38xnbt>_KE<)_x-sr|)mq%96%(jIkNx`ii#9VD6H!2rAhXWj< z3U$sDtSbJHDpr;bo1>UT4=Y;P1GXW$iAuA=g9kc4?y+jYxjN=|gxThRhR(W_<~Fe8 zIZ;)IIr@Ww-G*3)K17NIcb(LF@Z;L$$-~7A6Sps zs!nc4ALGe_Y@N0q6>Cc6Zt-8Jg}J;S@b(gC!s{gw_ZA?|qS8>O&csgcAROzohx-DR z`+RNeUa84gXU$);y%-1l(fuA(l;``5E93=#=|9r|7f=iGf{U@7m!Qcqv5Enlh{zphCITCJh;L{IT-AjGaS-}3Wq|UDyn?8 zbVDAkB#1%C^iFdG2z39N`x*6kCKtb-O4IWc=je zMIz;{=}7(KPFT82?Cn8GAGAogDrjG!fr4#OV%i2HGNl2K)>bu9BZdGNi<m68;A^!7ohIO3J!8YD0o+DP|i)y^`5@+F%y)bRmwR?NAs((QENi$ zTxNn}EOV}C%O}}7=i|B!vHI6G^TP=z-?KdVw1D=B@)%ONMc9R;GmWTBKN~iPYzbHt zrv?wgG0k#9%bySJf@Q@;w?n=Af^f+;s!^9XHg_5{f2*pU1%5%Wv!ba8@lT{}9+qPe z_T~I#h~;uB9jbS&%WMF1zA1>LnuJ?UnVw3%bieq9)HR(BR>y(9=U<>r)^z?WaPy4X zx}!QGVZn8lux+2q3ADGja_pMzF4~PK4@~w8XY-u*h@9Sf8EuIk`e!r2!?7^;rX=$X zB3JTt{%b$W7sjJr(U-J2Qx59=Omd34 z^Y`}rx{z2^peAdbp)cT=b7ansWFYci!dwl90+dcNl$#hfGbYL^&Sjjy**sl>=w zjm$dz=8iG*edcB8a>tMzg=A530zUkwWF$vyZq1}mJE*SHHL1^22-U65T~%jU{|CI$ z$zuhTgtU9vB$Alj-BOtx^Du(~l9s)<2ViruJnp70F24z0Nj&Nc~tDj8>&? zI+?2M7$)~WCQH~DD2D#0zgzmJ@<2fv1Qg{LBqZc7APK^s>G^*)zMo5gtu?)=t*xn* zF}xvkAS3u_M62+|J3?LE%4cIgPn9dgO`(o=IXkvnZoa$sn8+;h5>^Fm? zpO!$e-zablI)i9jDVIH+Z1S?XQia2uQ%1Znvm;})iR8Ui@7@vei3s_dc}(Y&s#y+l zVHp+ruyPYiZj$)@sZlxYZv|rgd_U2?+NE&Maybfg>c)X^CN5FJ*d*!f#;7we8nrUP zd@*t#G3ubza^OEy3q=YILbT9LTpGoyz;ej7nk!X^cI}Bx9K!j`*-mIxsMJf6lhpcM zKgg_0!vJ}jHG&%4fEGmyAD~Q7E3_F(H=Q}`-$#Oq{bkND9P8obN0t%-v3|9Fx zR?c&rMUt04JgxA0a8VIIx(kqkAvX8V1my1GOCmsr-PTpn{V8z%3Z2_JSPfU~KN)oB zR*9ZLU^>JbRG`#|5OrFP$ECP%mX8Z8GhDq)oQmjNx?XcENtv66>yDUh+N3 z&^m_$oGQgLa>3PPQC3hdAO?D6+y^l4YuFwAU;2J|9>73)W{RaPrNhg@3TRJn-0R+i zLUMsE<1KyI(8yvU718PoBsxmXL2-vv8UL-nJ9 zf$$pG5^S7ZUOXB*D471n0XiBI0ej5s)aq3B?Eji7fBee1;SsV)>?YoUdk*mmN=dpp zdu!HTUWn1JEu3d>;zogmSbnxi(>y;nhk5Pj@121*Kcj46tmpar)%i+OxS*`HJab_n zs#a}XRc!0^J*W2TpN!OaV5v}}%vyyd2* zys#sdi^fIfm3}P$#rEF4diC#ITI0Krc2d?*0#^q2p56$-1=6N38d76VNMwbze7B^ zxr7V_WzzTP^weg2t7|sr_n~S5o!NJNQglYk&o4q7GiNZ5H!DqU7Pz%vtu@Uy_OjC6 z%pDcwZ6yYZxCU3~@Gwh!o}!auWKaur&DtC$>X<{0OK)lQ(X{%c^4ySD=m<*0Y|?+8 z92T5kH9vWM@H#RC2r!EOD#G}fd8W4`DAH4gbptZnKUfg0}-W>GgV_W){ zxe7NjM()X)km}LE*4>BTYMvpy;JS3qz4J}zBgrTDv|SdjUcrYap#8yc|Jh0FI})_A z>K8#b@3lrqHq#)_W_U3*Wn3CZ{=Li*aJ5YX%p6~4m`19)%B`Tsy=a`C?`$B>oqZbQ z=C9V4)V5gPJJ_}u6bSJvoM;ADE1!h&OgJAmzP8i)A^;BeK}u)f#4tp*p_J#;k%mtx zW0y&9F#vcsE_Ao)=?x`S(VytB8W|s9juSmDeUj#&t5JOdKeVpl5DD-kk};yRb-&II z3xWOkv1ZYfo0TyGi(OobT89%PfDr8LUs4anIPzq~gia~SKg0(1!N&?992mrt6!J{* zGj1Yo!;`xP>nE4DBsG#Dl9sKJhX^NB5nL-H=zrS(oQUE|?&=_-3wG2JF$i7|-D&b9Yj zMNxQwtxfW&N|0fc==*@h!Gunc*NqN?jvHGNa`ARwF~jx-VN=KD{>7y*vui znL$r42 z7d#iu&*aG0qVH^cGZMDD+O@Hf?ISMK%CGC#*txuf^^78Rz>XDq{4FL34=fhea6DYR zi_AS;$w|@o8-cMNp9yoYufiy==})c@JMvF9lGwn2oP&EapBPm+A0L?tA%^Cj-v5y? zbST9#AP`WuqXk)t|Fmjtx36M+A*@nkPeYN*2bgL+HDBHogmXB1?L87eOk{J+kkDc` zGMD5g>BvlL9iWQm@P$N59jj)YvTeVK?4H7)de>a-8G4;W@rlppIDxUwOJIAnw>BZg z=JqTb@;I1D#_*hnd=%EifXA|&=rTCjm=|55+08X63#re-pW>M+w>f9I@^ovmhJFg+ zNPIg?$>TuvjYuolV|ys)z(+4@MblHWXRTJe<<&0VgZ7dhGzNB&7#?gDiL+I+$MvCT z>OgH*E#7oX`ju=0;Ch4Fte(N8;w#}+ZHJLBb7J4@7jJusTL==;l^qftq}!;R!#h(p ztC9M2lP>mt>5_WhL!i1uzftZinDch(mO{{vl|tCF>2uN`9LZ!M}^C`vzafMfK1q zH9cdi;*sK0F?SsXIN$`DMjjr4c_@hB->0YQ8X%ORM-H8+c*v0QEm~If5bnu6nWp*- z{`$LDL-Z;e!@?6FuF5k>waZ?Klasi1kK^bjXhAP^Nm||&rH106T-OgjedI&Oo%f&^y+RSLPkgIrW4=TuXx{<50eb!*> z(jo5|yglIZ3(hCpGf`DzkN_Sl=5ddu?}YB!L~kMnPhL&Ub|p(ll=lwN0^~Z~gY9k4 zM$`DZMCASg*Y0K$vcgHFPgKo|-q32xidpk4N^-?sj@>2ec6s%VE64f*?loaf^iK70 zZNSoafBvfz2u}FDBxw<#ZDi^)Qbd(fgX@BQY&Ww(+!(~3HDYjfZH_vfZfl`ctCgt5 zaqnz0*fWh9$k8f;vmnYN%}jR<2;{Hpb3B(R5;`Fqq2B3_6wVD4CZE5GR72Ec5d5!>^Of!)juahp9D zVs#n+>0?N2kaVjvP*Qkg*X_D;L&21Cq55?*6eJ^~Zhu4SaFfed@a!6N51)G&uNiSz z3O0(*4vulb`@!2w(Ct6qykZY(gd>=G;PNVjyW~1QCa4RQ&Q4>V(P)AAvZYu!Z}V)QvG66#7`rg&iV4`aY7+cf_p^<+Cqq{+36CHOpF!l-c&^^kVCf*|(3-JA(REQ^*Ev zo7tWNY_;jX*)QyuZ22MZO}dRJnU9s1%T)70+E!JcjiHr}HlARuA4gQ!>zx)UI_B01 zN3|>CxH^cl?4j5p&?9DIGiaRnVg4G>% zFL(#7j?V&!ahFG8q3?7k7lJ9XshH>oA&FpzM3G>J7IG+N?ij`8cIN#Ig5$#?)*NJ( zU}@FSJ&+rLyeT(IafBPY{~(C3!s?Kf^P`y_E|}paCjvp*qU^xVHPSe{@rjR3jHg^s zxLuUojqxK)OwmmvGqDbrU6qJYwRVmaCaaz8&*Ztq$69baEz_+ef- z<5<`0U}8I{rR&MiO`r4K$gh|)o>EM#$J^0@uRbxFJm|$5GNl@tr%f*%sjvGK6WzjM22Ec8OXS}4|HZ<*RjHN4YmA&57; zIXuwOCY+NvT0JH}9C6^w12woC4HHRIi#D_2xv$NRERQiLaf6d;a;`N2X7h1FW!Ffo7OCU6}o9*=4Xyro-a)2ClQ?jMCu;-f#FSQK?X z=Aq$9Z8{qxqU~^`A#r!7Zu`>9hnaEdzKaBbZMeZz+TTb63`WFiAhz4;_RqT!; z^(Kkj$_5H1VrsI!Pp@q(Tujjf(JN^;Zwxuj;}{K6Y21Zyarz6=DHR4^cqz>Xpo%1o z{-xSGEvuK0lTURCC8WEr20@IOG}#2Lzw|arloJ5^eSwJ@CC5V}y#sJ-twhUY z*y|tl0cJR2ds8_`Fkz;lEoTVM`IwAgaHcv^?)6*wTA#t1^Emb|IQV?qqBoBzOh0&{ zW4ck31jzB7SXn$O2BJo|V!TN!5iLbz<6i5CdB_6d2!|gcw9mU93UykEKGpaau8*y` z9a=*oK83u*Or8SE$#B%+)hLZ)eZI8z4M&Wyh!>3;2+Wm$pb>EdQKkaY>O@}$Y(8fm zh+UmR%3W4h2hKXq=|&Uls?PL2Lfs)DF&fvHHKlMNvsbTfO1-Qk`T3ra2L0ODm|SvG z;I1^IMgz@)P)mGH3+h2p;!}26Be3w=xZ9vu#{LtExf-(?mYtEjKB{}v@a{ExY)Q@o|H=5luCCR z=_(g{IXk0Em&+hxN7o}sfV+Q|JFoUtop;(|=qfj7vGE-mwc~RzX5;xi`-a9x0_t;R zU2MdM|DxN^Kn#vgWn{a9UjL*b6W8rW@yW$>2XQ3wWm4HI-uP>JkdUF7PP>|q?`VjuR;6MD|72ieY&q{gOaeaRh7di!$Ir@+~g~pQJ%(xocIncM0{&# zRvQof75gvIwV}-cep&Pf@;LFef$G7wI=VZ4c058Y=^Y|nm{$~Tyu7{f!LRCAuMjPw zTrJ%(PCwW;(8J*1;K9Mcy2FO7+-@;7T#J^EN6V$70}HjGCc9P_(?8^%H4DiXT|PAG zYSu5;#cAJnIw{{4ORB>>Y1d3VE3v^Qg}eP;sk{9?G)&mE^zg3fx)8_}c&X}&W zmO|fDuq1`Xk5&NRBU)z8uBhJe#uieG^$4=uh_r5 zm3U>7hdV*Vp-jv>N&Y!17Rd{S^TE+|MG%{CnVd4$s^o?%KWeBKPKW66Bd$Miwo2rV z&oUyYos;jvd-FY=k?#w71Bnj`bym~&X?f6oRWI*)dqeTfp(hGI&tP~{;#ScUx9G|{ zK7d=yV3&*P37VdkDy43Tpr1~PiA;*N6?~!ZyYb7wm>mF99X6HP0ktJW6iybf=%Qdt z|DXuVeL&=$RzE&NKWoL72Wg<(#0U8I-w45O8JR&aKgqg zweM?lqAX#0R}^^LHAp&_bdpyc*ML6$z@%q8Eb*fws8NaQz zDk1E?dmz~C+?jNtx14KnAT{q9==3AMwYmM_N2odF+FESc<^7Z%I)N9C@$j3!NMi&H zwP|~;`9kfGF05Gf@4^4sm;19H zgMxOtaMHM2m%4aj%KB82cK5FfONWi-3cz}0%6cVja4U$#3e3iXXTpkSz=|igmhTl7 z`2m3|ge^Rm(-0k((Q;O*B?3MhN8SO=S}9jxK10ZA_}D zfE8g6g%U$zO%csz4A%4#hXUi6a2g((=^je*9|#2Wtv+_J!RvbFW&v!L+9-(Vr&( z+B)9xB2HXM5q8zUEWdR)x6QPtD#-swso{Lo>=nQhErcMzA08=h0S3QQR57e@Jj>q_ zz)KwJk>NH%kH+=8Fg%FbWE&}FvFW*i>)c>g7@h~kR?))8w~n+ZtO6BHXXO=Lrzc<6w>G!%SMh^P^{!f2tLe)T`fgko4q3D057ySPzDg9qG zohp@exgYLVHW(Ii9t$CmM?Shzi!AhDmqIy`Dk*^wlaypp*q^iYA0JaulOOUI@#FH_ z48n=HDlT^>jQtwKNFZ+xGqdT`#bEdM#|PN2j+-riHF!7pPO@4I21g-!^=M0B{bKF% z?0M-k(U4Hxs7u5VHg|%ua1_TKIRC!#oj!&|)rnfUF3VOF&=fDiG%nckB^mCUlpZgc z^*m_v?h-TprM0_0m?BuABj;q6dem%p)spoH*Jzb!jJd0zKQ_58*T@!*m0rN&#@$R{ zN?AXYtTBnar&WhRa)m~H9b6Hf3kFn#-5ze>SD#Y?5x(>P!&+!c?vqX`n( zJK(=&5|eP&HgF`qC;FgfK-;^#Yh!rb`#Hep7d^n&_(JTKwL-qM-RLv=Cf_T2!F5*Wo1)MJvd$2@iGE{=cnQ5GL>8&pVnCkw`JV_ew&9ULhW}`# z1^=%WDb@d>sP%sdSWQ|GUdqFm-Ph*XImTK(0t_bHupqsDKmY=NH%P!9s!;-mc?IPA zYS>5u^{AwTbmmojG}lm?>svW@ct)W@cvQnC)X`X6Bd~jxlCt$oT8qqZy6Vx78zUmG+;K>c`r(Ypqr9 z^FppDIM71Y7VI{ocf|#rQMTm;;Ze3F2CXPxL&0uK^k-9gFhklG^cC(_qj$vyWmC3g z25Gyv(QE>ZPg}q?XF!OE_Q%(Vh*t*=6ycp5UD1P`oL%9A-ke?WgKwNZ0fSrL+QiLK z+E~G!PO9)ODZ-GHP6MeukO^S>2ETcv42HWbL&rNlGla)Gc;pOiH)b1q_^Y^YT5%WRUq~Wtp&p9(*pgTZMA1E5oGX$Ch^bCM10X-w2GeA#2C>zi- z4B7zn41ziVJ)@vEfL|Xd9N;$u8U^?bfXV=VBcNk|Uq2`v;5Q6f0r(AqS^<8epr;(e z$jx&8A{To6RiBJyC3=U`>Oa9oEt7uLeH zFO3ow0EDVL}fRgYZoiw%jzP00H<#tadB}7^5#HA z(Uho8w4@!e#LGZcMW>G*oNXr&6u@S1g;+dwuko!DdllR~4x;OO{~M}V!|HMgjN1`M z-(+2duNfO2A^mzcAp3O2nX*ct@`)@-^j@lI{Xesfn%%J6GuIMjjF{4A;LYYa0e_hT zX_YZK7u7*9;{@~z`Up1d9aDmJP#V4k|0XGy!L>PcD}sxEnB(_P+^>MDl+ig=2c-3mYL@jNKDvHWUcPnd_J~WrckO>p^dU zcqpvS-)w2@z)aU5Sq;piF|wm5jMsE{(y=3B%NF(}nb{=o!^=jDOegB+g1*aKIl-7e z#1&Jpt$okF{hl2aaSk-{Vy~-NQ|A@q-R5HoIwQ`-i6WHC>WlG>n%a_5hUG5M(ZI6N zRjr9hyU5HnHKNqnYOtsK4jj42iu|jh<}#(GX(~8tBT1}&G^K*+UJ!h<*mlD7_kH0& zX|2`2B?o%?*QMr>MZ0HknRrQq-PIIYfe(@+&Jr(080T8yI=s1gbdsRyWDJc=eZ{O@ zXa$T)nv0rHF;||>Q4YH~W~%H3bA5%pZn`LQ&4wk1%3}^UTKasnLniY+ld5ugm1VVw zb81||WLQ+oLsud2D3_Ui;H0jdI^R)7+C}x@s@#HJVM%X|&qd3X8y~c`bTOZ^5Wx+2 zT#Ic}R#d&aj9O_1zD_))Eo8Y~;?13#=|>~YFVeEZ1Mbh(Y(R4U)8 zrOkLgR75^*emFDaIeJe+lnt}Aa_)8fnRSY5b5(tq{cDxxa9=9EXG-E~P(w-`ZPvA# z!W-RYlX>H$RKr)ssVujUCspEnn9IDM!%3Dr!L}u-zu%Jxw!yP+I#V6ELeBr_N!$vZ zQD(UX+1F(PvmNM-M%CzVwO5x}>mfJ-kTacV)ojtytiIcLfE%BCP*+kP_d^GNctf^-~QXmCO zTTN#fF6~6(&Q(%Pcc6yV;2JG$tCp^S=v%k zTPn1dUahGS+`4;@({^)9+nDahO-&sYT3agIn<};&?5$wjReIxP8qv-gUGL|K#hV2# zZG6eQI!6~^zB zd?h|9PpZR$6fvsb=!59qxXR~LQXlC`{|Xj+sUGO1K9ZIG{a)0kdZ3u!0y7UaK-)D4 zt>9-P+poBhozo#t#D#9t(^p)78s0C~JiuvYE98u~IA5O3r;Nqi;ttDvs2f;NS!w{b zi&SXds4RQjRukwxC|HHK*u#F1k_MOlR;+|3-zP~2k!#gP!V8ZI+t16yW>q8_KM+(g zTKt+nBQHawxDjzhKhZc~#yo9S&$yY)fmAL0t%@YO+Ufku-DbY(33fw0Wlhg&8eY& zn$l>tAfsHp_TdsGTvT?F73=It8W~(+*LwOfv#OKxJ1_aA02~j z)}r}LbV=j4I+n*!-$DaCTTaPJN>h#2Q-ONUcw{Ds8R&vkqh5dHi-31;MM2YtP&UM# z_naWF{`ps#>BC{9G(@+4IoyrQO7#ubJ& zhKpAs%kAko)X*?DT9Vo7sFnA8RMGhtU+UB_UD*m0W1OIIo}TG!~+LD>nhvHq37n}WvVWSg83 z?}u>p#z0=s3=#LB_8&n{Yw6YS3%E4^FP3NrGRXb-CwTw_0G$&b0;1bcZ#M=J|NP_% z5gIOM3mO^`A?yKMSf3Qv_9`x<5;h_ZR3O0uaLNo-Rlx#A+!LO{tr+yGZm1r_meY<4 zNe_w&+oW-+LlMV}$ZeU={t&J`vAv48AAy1j_kw!e@UDM@^@JulCOqZDJ{h2MIY1Cw z4`-NN;3%f?zx$QhALqCN)oId+8hAZ3-QNe&oBS-y|h20HhkyV3Z_xvcId zrhM#3+)$(V=`mV|a3!>HvtL+%S?B^D9;Z>94rca5Z1WPm8$;oKD1}}GmkqHa#&YIN zM0b-I;}t%F4M75|?_Y?ETTy6|L^|Ap8<&D{)fchYnAM}gWa_Ox8{gHna@E%$qoSO0 zE(+L8^7vF^cnY&bheYNh7+%3e`d>K0EJHGL5F)?w`bAp&+O=Ehe4qbD@cv>X#gW$0 z?3H3EByepM-^-MAtTU+(HT$qq4BF4>CT2{V++R7mNfsyHl94SeR?g=?^dX2{V{ZOD z$PFwshjd7;+`&Ks#&+H(IK#yJwnO@|<8EtpM|7F1@p1g#s=O>+8U~Dv|Y(kvb`pQJBn-?Qzi`_vzPL zm8|VYrJ|du^8FKf%ycAvqkcJNIRbMO0ub7bB%oa9D1+nF(=?Y&Ii5;udQcEP*s%L% zXqsT_VHk~5gv3bxTRrxSi`uvABc|Sh_GF(hUB9=4QiSZ~K+8AN&DF}ccr(a+{p$+5 zD8vQ`#ePg4dbQk6uJ3FVV z-_WiF>F`z16vma`gz30@NPuAT($CH}b$V=B~F(*Uj_^&K!8VmiXwS19A>LHdg zmbJ6IVr}}O+w|E<)I9=|KO-9H>H(_pW*CNATG8eqa#OQ*ZVAI#ln z^O5B3QIspZ@X@yfjF4JiuI%x1DV0T1H#%|`{nD{ZFn1{cB8n^6RP77TsX-uR0WTs6Z&%ZhNvhs6tw#V~yuzUB--PwE7 z3?fMSH#ax%iie4u9Wug?N{^Gv#p;f5A|*R(ZSs8Wf9+Zg8$jbepf$6Dq$)LO0CO!nIrVwtBC`d>net~Hz>oDG5{ceCy{TXzX= zZEon**9redI1BH9i=4Y!m#@Q|G7OuAH=`^Kw1&Z-$IIc-#us-}1CZbi%*7P29eE4M zTr9OJ<{iu+2a%o|CqW#h&H!Wz?|fJaH${kHU)kp~AW_w!-(|ACPF8CvK}?7wmei*c zZ?1tkF}awP;8xQDr&)BL0X2mtNz}UYS&!8?EDXh_vo4*u16eLG#(+x> zyexpG3c(*MRc;BBPkX!A|89F;kXY)dKRuLF-sZ{W1Vr35tzbZe zl7w(6IG@^~2wYM$%kL7Or!-=xE9`n76CY}>=Vk36q>t@8Qq24~lc3l_Ljtj)&`j(w zJkH6_^k2FZ%y-Nr+Px8zkJ8a_PB@)G#it(5EhdUH$LSwSi0DkL59h+;@dUIo%%urB zIv2{Jq}P7FZ^6+<&zI2X>oI$n%$G3e%Qcs0b|TmQdK-#`Tuu6PQPES3swCwQPgwW(3-H6uX5M$}AC%ZU6Y)NL1i2i-wB{t~|JNi2Z93<%Z z{!o0|NWMug-)*F(n$B^4o5ahc1hkwbv|}oAC?{&5IMWacHHNytAG*LQq9mZbR}J>1 zbD3BGv&BvdmteFm`0hI1SfsJHx>jGwWiblX0!*6z^I#2#W4Xac0Rs20~a)CDxpsxB$|N{a&MMzK~e*J!4DvUS-bqdGM|uvGh6 z)Qk1J!oge2<-Fpe*wtke%9TB(@}-6qx6-0qa@oxcI?bw?&tP+}a8lLE-{Bgi%HrQn zfb%EJ)A|*vTv2fpb5i1p59xNPZV9)!0FC3#RD5!kmXW32pI~QP2)5xU$5VC>shRax zP50*A(lmauK$mpBCH+rTu5^{&SXb)8Fh=vrtLHP)UZp)( z8(CFb7T8%f1P1aoq22Hozspnolb-mOcI#jKu202Jc35Vc*>j1;D506$AU>f-^;UeI z?j$gwGa*QIrc{&UBr&n1RFmjboieCYliWab=&6)Pe+a3>Cp-aHqCnFs2FcIp{dYLm{WM#<1~1;-jyB5u_jYn3rNjAJVd zroug)5}`|F$Gi$5w@Qw$`5)9XsnjO%QO=>To&v+|I-xxB!|gJm=c>8AJ!7c(M^4j5w%bx6j#Z?ig61=O6r8;g-`7M zaqVmR2^j{6JJK!a)4O;7BYty*xWY4{70x>n_qT4vA{y~6CU?%Tx1NRzz~Ckx-tOq; z!g0<%)6ZaV-k*Ty%?OWsY*dbSfvtvvj~x~x2VWUm^Vc)JVeC5CM*qrd*0{=hP}t_5 zaMkfQx4t_DZh7PQ#_hM&WpT|Nh7LBp&fCww!8W^m%SQWMqMMj_tz>|Pz+jWZ7n4K5 z1|}&r#KhF_kW?%f8hUg!J<=)wrkdWbFA{Q%X`^m*t;QsIXPT_xmf~b%d0KRNnz=G9 zmICc8O7oBi?OOP%vugI8zBapKDmwDL>|hNESvN1v94t^y)$QI>1$lPsp#D$ zHjn0=Z+SmyibtrmNzUuuWwZ}v{3}38C5k`}87<4oDi>fefSRT_YOwCGW#YC@nL?H; zd69o`k$<-2b9@zjl2o)#qJFVd1GlD;szD@?B#NrAEr+t^XB3Sn79pChPwL;j<48Kc zo(!MS;REkL4Ptt9=>scx>liFU4eKuK!MYpNjR>-Nm@iR|(MH7ZW(%mqWN>mUZ2xN< zhpO28nOYe&5p8oQ3JR$HfSvavv+Rv((wAKyt$IQrEQADoOqxPG?y@N zMQQ7UqD$!ZqgD0Dp-!Q`E0K~_G|j7KlAmeaFD9M~6IsEWb7kw03q+K5X^W_7o@@4l zeq}{;wknp=RV-OotC)Gp%;2ac%Uw~-*A@45<9%2|D4exxiWDjb>AkA5$)~d1KZx8x z;Z;p)#S(K_6a_Z~?^r-^9<^ygu+jZ28_bS)m^Rte9^;6P@vf{sOHZAmp?zwOQ@-B0g@gDFBe3U&4&HMeJG>dv>nzy1=`?zVQyZ;j7ntSZM{ILD9 zjMr^l&F(o{zkP(?WOpm4)#|Npv<2#3>zMS8f1tZcUViJ|Y31AXUGLa2*C4#VXeD^e zHRs*yT=iOHH|4$bE_qPgnO+|CZPk>2zHH$Gy`?=AU$riqe-NBS`}IDM{R2On{M21u z$%INboMe?~;I6}qYluB(bA#*5r8Tl2ea8R%=}j@>Ug(20awYV#h20B%_+<3Xm$DOo z1Fg`5x9_dcgJrDKaPAkwA8`wT{WS<<^T*thVDm@ahBNrVA0ipQqofdyJ{M8u_dSzN z5Dq@?Q}PGiP$+zoj^qoyEMWUX9a1oU{+h@ie7>Xf|F%zG_)Zqn8*{79@JT(PKlpq` z=?}4QU-(WN(;Iv1&hSY$u`~GmM)?nHpRn+qB*s7HR-WOLYJz|8`Izz__`ZJOJ57v# z?5#b+C+$S<;PVsZzi<2eg#g1x|858RH|C?Kev)&0Z1=(Lx;WZ-EzQ=JLBe;!|0s$4 z%1d4GalpXBRR6oC3&sDo>Eir<6LL#Z&+O2|vBP#GyYx2JNTGzBf6{)_NkYbTmVh|$ zX^0I*BCT8%nj#0+(>#%EjBL6=pP)MsObZqGu_@W5c zK;x!lP;M@K@AkOEzFZ!L!d^)dXi8hF-6rK^d8@h1SvyP*h2u3&(If*LYln4dgHY=Y zPxc;rOYBN^8hATE4h_YQ>YZznBPT?fDhnHPVGh6Mc55ctXjK-CSe+A7erofJnBlgk z=yEgHoPzG+aQoCcX|H1H#TmTF8^5n|S^Tx z#aKqlb<>>Q<*@saCHr zPSx301pe~p}O`$4IszeVR>r&L6>td(Q&ABYAf4IlC|9pUX3;zo~_gg`#ht|0= zuy_1m=-hjSKCiBEZ)k1b9^St6V)y>@K=24rLukmaao71bAipO!;g4viPtq;?2%{)x ztSBj!vPPMErbulAagDN8Tc|x{@38xG-YxWdL_Veei0!+OCv@)~nC=IN^UosHf0_-T)(jN?WLWuRwtEv4?(`(DrkLa#U32mr^fz$lqVzDT#OmdYdBS z$JrU{sFkgg>KnAZASynBW;P}Hvj2{Pl|Tm%Vf)4_x2K~D5?(C)MEzUZYr9^bY4@tG zJ2WBlMDw2y-3}{3E(HP%>;(G1`_R9{pZ^=lpflCCyv^S*39=DT?ft<8a~ z3m|yxi(dfmA>NhY3$BIr7!T&NJU1o5Wx4bVK{8O<{8~k%TSbsMi_fzw_*Wy_n33zh`-u3nOeXb7ke==a- zo*KLo`SLD#{?aaxWqoc0@9gW=AN%ugg#S}rSS6e1qTl^z@)#8G#1bSnq?Rxl+$zb) z+zxr*QJ3XZQu1RAErGsoUyv3vFfkiBC9UnO28*f++vzWV6ShLEOKIE z(=Sblt%6)AZV~55V<&!a_B(_-MhHxAUPg-Tp~RMc*<<0U∈LKu)i$!DTm5js3u%ab184vKULepm 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

-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

gK?xbYkgYC2rA^>d)ck}U%u;! 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

YFHg?6%D)(U=rtw#Dzq5az&fGmsKmaZ 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�iyU>`{O9`r}FH)4hcn1-p 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π~j;Wm2C7}($J!VTe3LK7=;Ji{kz&GiY9SeXB$5q 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 DL=A&0R5yO<-Dt~ph{ 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 A7XSbN literal 0 HcmV?d00001 diff --git a/third_party/protobuf/3.2.0/libprotobuf_java_util.jar b/third_party/protobuf/3.2.0/libprotobuf_java_util.jar new file mode 100755 index 0000000000000000000000000000000000000000..befce6b881d0ca1fed698eb5cef29b70a5db73ca GIT binary patch literal 58322 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 literal 0 HcmV?d00001 diff --git a/third_party/protobuf/3.2.0/objectivec/DevTools/full_mac_build.sh b/third_party/protobuf/3.2.0/objectivec/DevTools/full_mac_build.sh index ea9fd2736b3421..c3cc8e682671d6 100755 --- a/third_party/protobuf/3.2.0/objectivec/DevTools/full_mac_build.sh +++ b/third_party/protobuf/3.2.0/objectivec/DevTools/full_mac_build.sh @@ -273,6 +273,14 @@ if [[ "${DO_XCODE_IOS_TESTS}" == "yes" ]] ; then -destination "platform=iOS Simulator,name=iPad Pro (9.7 inch),OS=10.2" # 64bit ) ;; + 8.3* ) + XCODEBUILD_TEST_BASE_IOS+=( + -destination "platform=iOS Simulator,name=iPhone 4s,OS=8.1" # 32bit + -destination "platform=iOS Simulator,name=iPhone 7,OS=10.3" # 64bit + -destination "platform=iOS Simulator,name=iPad 2,OS=8.1" # 32bit + -destination "platform=iOS Simulator,name=iPad Pro (9.7 inch),OS=10.3" # 64bit + ) + ;; * ) echo "Time to update the simulator targets for Xcode ${XCODE_VERSION}" exit 2 diff --git a/third_party/protobuf/3.2.0/objectivec/GPBMessage.m b/third_party/protobuf/3.2.0/objectivec/GPBMessage.m index 58a10fdb9b9bcc..627a396e54272a 100644 --- a/third_party/protobuf/3.2.0/objectivec/GPBMessage.m +++ b/third_party/protobuf/3.2.0/objectivec/GPBMessage.m @@ -130,7 +130,7 @@ static id GetOrCreateMapIvarWithField(GPBMessage *self, static void CheckExtension(GPBMessage *self, GPBExtensionDescriptor *extension) { - if ([self class] != extension.containingMessageClass) { + if (![self isKindOfClass:extension.containingMessageClass]) { [NSException raise:NSInvalidArgumentException format:@"Extension %@ used on wrong class (%@ instead of %@)", @@ -738,6 +738,25 @@ void GPBClearMessageAutocreator(GPBMessage *self) { self->autocreatorExtension_ = nil; } +// Call this before using the readOnlySemaphore_. This ensures it is created only once. +void GPBPrepareReadOnlySemaphore(GPBMessage *self) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdirect-ivar-access" +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + + // Create the semaphore on demand (rather than init) as developers might not cause them + // to be needed, and the heap usage can add up. The atomic swap is used to avoid needing + // another lock around creating it. + if (self->readOnlySemaphore_ == nil) { + dispatch_semaphore_t worker = dispatch_semaphore_create(1); + if (!OSAtomicCompareAndSwapPtrBarrier(NULL, worker, (void * volatile *)&(self->readOnlySemaphore_))) { + dispatch_release(worker); + } + } + +#pragma clang diagnostic pop +} + static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) { if (!self->unknownFields_) { self->unknownFields_ = [[GPBUnknownFieldSet alloc] init]; @@ -3170,7 +3189,7 @@ + (BOOL)resolveInstanceMethod:(SEL)sel { + (BOOL)resolveClassMethod:(SEL)sel { // Extensions scoped to a Message and looked up via class methods. - if (GPBResolveExtensionClassMethod(self, sel)) { + if (GPBResolveExtensionClassMethod([self descriptor].messageClass, sel)) { return YES; } return [super resolveClassMethod:sel]; diff --git a/third_party/protobuf/3.2.0/objectivec/GPBMessage_PackagePrivate.h b/third_party/protobuf/3.2.0/objectivec/GPBMessage_PackagePrivate.h index 9324cf8d5e1879..90834d4073d0be 100644 --- a/third_party/protobuf/3.2.0/objectivec/GPBMessage_PackagePrivate.h +++ b/third_party/protobuf/3.2.0/objectivec/GPBMessage_PackagePrivate.h @@ -70,7 +70,6 @@ typedef struct GPBMessage_Storage *GPBMessage_StoragePtr; // Use of readOnlySemaphore_ must be prefaced by a call to // GPBPrepareReadOnlySemaphore to ensure it has been created. This allows // readOnlySemaphore_ to be only created when actually needed. - dispatch_once_t readOnlySemaphoreCreationOnce_; dispatch_semaphore_t readOnlySemaphore_; } @@ -105,22 +104,7 @@ CF_EXTERN_C_BEGIN // Call this before using the readOnlySemaphore_. This ensures it is created only once. -NS_INLINE void GPBPrepareReadOnlySemaphore(GPBMessage *self) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdirect-ivar-access" - -// Starting on Xcode 8.3, the static analyzer complains that the dispatch_once_t -// variable passed to dispatch_once should not be allocated on the heap or -// stack. Given that the semaphore is also an instance variable of the message, -// both variables are cleared at the same time, so this is safe. -#if !defined(__clang_analyzer__) - dispatch_once(&self->readOnlySemaphoreCreationOnce_, ^{ - self->readOnlySemaphore_ = dispatch_semaphore_create(1); - }); -#endif // !defined(__clang_analyzer__) - -#pragma clang diagnostic pop -} +void GPBPrepareReadOnlySemaphore(GPBMessage *self); // Returns a new instance that was automatically created by |autocreator| for // its field |field|. diff --git a/third_party/protobuf/3.2.0/objectivec/google/protobuf/Duration.pbobjc.h b/third_party/protobuf/3.2.0/objectivec/google/protobuf/Duration.pbobjc.h index e70138a01ec9a8..d9a388ac1b2873 100644 --- a/third_party/protobuf/3.2.0/objectivec/google/protobuf/Duration.pbobjc.h +++ b/third_party/protobuf/3.2.0/objectivec/google/protobuf/Duration.pbobjc.h @@ -59,6 +59,8 @@ typedef GPB_ENUM(GPBDuration_FieldNumber) { * two Timestamp values is a Duration and it can be added or subtracted * from a Timestamp. Range is approximately +-10,000 years. * + * # Examples + * * Example 1: Compute Duration from two Timestamps in pseudo code. * * Timestamp start = ...; @@ -98,12 +100,23 @@ typedef GPB_ENUM(GPBDuration_FieldNumber) { * td = datetime.timedelta(days=3, minutes=10) * duration = Duration() * duration.FromTimedelta(td) + * + * # JSON Mapping + * + * In JSON format, the Duration type is encoded as a string rather than an + * object, where the string ends in the suffix "s" (indicating seconds) and + * is preceded by the number of seconds, with nanoseconds expressed as + * fractional seconds. For example, 3 seconds with 0 nanoseconds should be + * encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should + * be expressed in JSON format as "3.000000001s", and 3 seconds and 1 + * microsecond should be expressed in JSON format as "3.000001s". **/ @interface GPBDuration : GPBMessage /** * Signed seconds of the span of time. Must be from -315,576,000,000 - * to +315,576,000,000 inclusive. + * to +315,576,000,000 inclusive. Note: these bounds are computed from: + * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years **/ @property(nonatomic, readwrite) int64_t seconds; diff --git a/third_party/protobuf/3.2.0/objectivec/google/protobuf/Timestamp.pbobjc.h b/third_party/protobuf/3.2.0/objectivec/google/protobuf/Timestamp.pbobjc.h index 9c83d0945e4966..5d74bd3274a2a3 100644 --- a/third_party/protobuf/3.2.0/objectivec/google/protobuf/Timestamp.pbobjc.h +++ b/third_party/protobuf/3.2.0/objectivec/google/protobuf/Timestamp.pbobjc.h @@ -64,6 +64,8 @@ typedef GPB_ENUM(GPBTimestamp_FieldNumber) { * and from RFC 3339 date strings. * See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). * + * # Examples + * * Example 1: Compute Timestamp from POSIX `time()`. * * Timestamp timestamp; @@ -103,6 +105,29 @@ typedef GPB_ENUM(GPBTimestamp_FieldNumber) { * * timestamp = Timestamp() * timestamp.GetCurrentTime() + * + * # JSON Mapping + * + * In JSON format, the Timestamp type is encoded as a string in the + * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the + * format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" + * where {year} is always expressed using four digits while {month}, {day}, + * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional + * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), + * are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone + * is required, though only UTC (as indicated by "Z") is presently supported. + * + * For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past + * 01:30 UTC on January 15, 2017. + * + * In JavaScript, one can convert a Date object to this format using the + * standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString] + * method. In Python, a standard `datetime.datetime` object can be converted + * to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) + * with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one + * can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( + * http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()) + * to obtain a formatter capable of generating timestamps in this format. **/ @interface GPBTimestamp : GPBMessage diff --git a/third_party/protobuf/3.2.0/php/ext/google/protobuf/array.c b/third_party/protobuf/3.2.0/php/ext/google/protobuf/array.c index 2186ab1f5d3f8f..e9f5f156ffc998 100644 --- a/third_party/protobuf/3.2.0/php/ext/google/protobuf/array.c +++ b/third_party/protobuf/3.2.0/php/ext/google/protobuf/array.c @@ -69,19 +69,20 @@ static zend_function_entry repeated_field_iter_methods[] = { // Forward declare static functions. -static zend_object_value repeated_field_create(zend_class_entry *ce TSRMLS_DC); -static void repeated_field_free(void *object TSRMLS_DC); static int repeated_field_array_init(zval *array, upb_fieldtype_t type, uint size ZEND_FILE_LINE_DC); -static void repeated_field_free_element(void *object); static void repeated_field_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC); static int repeated_field_has_dimension(zval *object, zval *offset TSRMLS_DC); -static HashTable *repeated_field_get_gc(zval *object, zval ***table, +static HashTable *repeated_field_get_gc(zval *object, CACHED_VALUE **table, int *n TSRMLS_DC); - +#if PHP_MAJOR_VERSION < 7 +static zend_object_value repeated_field_create(zend_class_entry *ce TSRMLS_DC); static zend_object_value repeated_field_iter_create(zend_class_entry *ce TSRMLS_DC); -static void repeated_field_iter_free(void *object TSRMLS_DC); +#else +static zend_object *repeated_field_create(zend_class_entry *ce TSRMLS_DC); +static zend_object *repeated_field_iter_create(zend_class_entry *ce TSRMLS_DC); +#endif // ----------------------------------------------------------------------------- // RepeatedField creation/desctruction @@ -90,76 +91,91 @@ static void repeated_field_iter_free(void *object TSRMLS_DC); zend_class_entry* repeated_field_type; zend_class_entry* repeated_field_iter_type; zend_object_handlers* repeated_field_handlers; - -void repeated_field_init(TSRMLS_D) { - zend_class_entry class_type; - const char* class_name = "Google\\Protobuf\\Internal\\RepeatedField"; - INIT_CLASS_ENTRY_EX(class_type, class_name, strlen(class_name), - repeated_field_methods); - - repeated_field_type = zend_register_internal_class(&class_type TSRMLS_CC); - repeated_field_type->create_object = repeated_field_create; - - zend_class_implements(repeated_field_type TSRMLS_CC, 3, spl_ce_ArrayAccess, - zend_ce_aggregate, spl_ce_Countable); - - repeated_field_handlers = PEMALLOC(zend_object_handlers); - memcpy(repeated_field_handlers, zend_get_std_object_handlers(), - sizeof(zend_object_handlers)); - repeated_field_handlers->write_dimension = repeated_field_write_dimension; - repeated_field_handlers->get_gc = repeated_field_get_gc; +zend_object_handlers* repeated_field_iter_handlers; + +// Define object free method. +PHP_PROTO_OBJECT_FREE_START(RepeatedField, repeated_field) +#if PHP_MAJOR_VERSION < 7 +php_proto_zval_ptr_dtor(intern->array); +#else +php_proto_zval_ptr_dtor(&intern->array); +#endif +PHP_PROTO_OBJECT_FREE_END + +PHP_PROTO_OBJECT_DTOR_START(RepeatedField, repeated_field) +PHP_PROTO_OBJECT_DTOR_END + +// Define object create method. +PHP_PROTO_OBJECT_CREATE_START(RepeatedField, repeated_field) +#if PHP_MAJOR_VERSION < 7 +intern->array = NULL; +#endif +intern->type = 0; +intern->msg_ce = NULL; +PHP_PROTO_OBJECT_CREATE_END(RepeatedField, repeated_field) + +// Init class entry. +PHP_PROTO_INIT_CLASS_START("Google\\Protobuf\\Internal\\RepeatedField", + RepeatedField, repeated_field) +zend_class_implements(repeated_field_type TSRMLS_CC, 3, spl_ce_ArrayAccess, + zend_ce_aggregate, spl_ce_Countable); +repeated_field_handlers->write_dimension = repeated_field_write_dimension; +repeated_field_handlers->get_gc = repeated_field_get_gc; +PHP_PROTO_INIT_CLASS_END + +// Define array element free function. +#if PHP_MAJOR_VERSION < 7 +static inline void php_proto_array_string_release(void *value) { + zval_ptr_dtor(value); } -static zend_object_value repeated_field_create(zend_class_entry *ce TSRMLS_DC) { - zend_object_value retval = {0}; - RepeatedField *intern; - - intern = emalloc(sizeof(RepeatedField)); - memset(intern, 0, sizeof(RepeatedField)); - - zend_object_std_init(&intern->std, ce TSRMLS_CC); - object_properties_init(&intern->std, ce); - - intern->array = NULL; - intern->type = 0; - intern->msg_ce = NULL; - - retval.handle = zend_objects_store_put( - intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, - (zend_objects_free_object_storage_t)repeated_field_free, NULL TSRMLS_CC); - retval.handlers = repeated_field_handlers; - - return retval; +static inline void php_proto_array_object_release(void *value) { + zval_ptr_dtor(value); } - -static void repeated_field_free(void *object TSRMLS_DC) { - RepeatedField *intern = object; - zend_object_std_dtor(&intern->std TSRMLS_CC); - zval_ptr_dtor(&intern->array); - efree(object); +static inline void php_proto_array_default_release(void *value) { +} +#else +static inline void php_proto_array_string_release(zval *value) { + void* ptr = Z_PTR_P(value); + zend_string* object = *(zend_string**)ptr; + zend_string_release(object); + efree(ptr); +} +static inline void php_proto_array_object_release(zval *value) { + void* ptr = Z_PTR_P(value); + zend_object* object = *(zend_object**)ptr; + if(--GC_REFCOUNT(object) == 0) { + zend_objects_store_del(object); + } + efree(ptr); } +static void php_proto_array_default_release(zval* value) { + void* ptr = Z_PTR_P(value); + efree(ptr); +} +#endif static int repeated_field_array_init(zval *array, upb_fieldtype_t type, uint size ZEND_FILE_LINE_DC) { - ALLOC_HASHTABLE(Z_ARRVAL_P(array)); + PHP_PROTO_ALLOC_ARRAY(array); switch (type) { case UPB_TYPE_STRING: case UPB_TYPE_BYTES: + zend_hash_init(Z_ARRVAL_P(array), size, NULL, + php_proto_array_string_release, 0); + break; case UPB_TYPE_MESSAGE: - zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0); + zend_hash_init(Z_ARRVAL_P(array), size, NULL, + php_proto_array_object_release, 0); break; default: - zend_hash_init(Z_ARRVAL_P(array), size, NULL, repeated_field_free_element, - 0); + zend_hash_init(Z_ARRVAL_P(array), size, NULL, + php_proto_array_default_release, 0); } - Z_TYPE_P(array) = IS_ARRAY; return SUCCESS; } -static void repeated_field_free_element(void *object) { -} - // ----------------------------------------------------------------------------- // RepeatedField Handlers // ----------------------------------------------------------------------------- @@ -168,23 +184,25 @@ static void repeated_field_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC) { uint64_t index; - RepeatedField *intern = zend_object_store_get_object(object TSRMLS_CC); - HashTable *ht = HASH_OF(intern->array); + RepeatedField *intern = UNBOX(RepeatedField, object); + HashTable *ht = PHP_PROTO_HASH_OF(intern->array); int size = native_slot_size(intern->type); unsigned char memory[NATIVE_SLOT_MAX_SIZE]; memset(memory, 0, NATIVE_SLOT_MAX_SIZE); - if (!native_slot_set(intern->type, intern->msg_ce, memory, value TSRMLS_CC)) { + if (!native_slot_set_by_array(intern->type, intern->msg_ce, memory, + value TSRMLS_CC)) { return; } if (!offset || Z_TYPE_P(offset) == IS_NULL) { - index = zend_hash_num_elements(HASH_OF(intern->array)); + index = zend_hash_num_elements(PHP_PROTO_HASH_OF(intern->array)); } else { if (protobuf_convert_to_uint64(offset, &index)) { if (!zend_hash_index_exists(ht, index)) { - zend_error(E_USER_ERROR, "Element at %llu doesn't exist.\n", index); + zend_error(E_USER_ERROR, "Element at %llu doesn't exist.\n", + (long long unsigned int)index); return; } } else { @@ -192,15 +210,19 @@ static void repeated_field_write_dimension(zval *object, zval *offset, } } - zend_hash_index_update(ht, index, memory, size, NULL); + php_proto_zend_hash_index_update(ht, index, memory, size, NULL); } +#if PHP_MAJOR_VERSION < 7 static HashTable *repeated_field_get_gc(zval *object, zval ***table, int *n TSRMLS_DC) { +#else +static HashTable *repeated_field_get_gc(zval *object, zval **table, int *n) { +#endif *table = NULL; *n = 0; - RepeatedField *intern = zend_object_store_get_object(object TSRMLS_CC); - return HASH_OF(intern->array); + RepeatedField *intern = UNBOX(RepeatedField, object); + return PHP_PROTO_HASH_OF(intern->array); } // ----------------------------------------------------------------------------- @@ -208,10 +230,10 @@ static HashTable *repeated_field_get_gc(zval *object, zval ***table, // ----------------------------------------------------------------------------- void *repeated_field_index_native(RepeatedField *intern, int index TSRMLS_DC) { - HashTable *ht = HASH_OF(intern->array); + HashTable *ht = PHP_PROTO_HASH_OF(intern->array); void *value; - if (zend_hash_index_find(ht, index, (void **)&value) == FAILURE) { + if (php_proto_zend_hash_index_find(ht, index, (void **)&value) == FAILURE) { zend_error(E_USER_ERROR, "Element at %d doesn't exist.\n", index); return NULL; } @@ -219,35 +241,37 @@ void *repeated_field_index_native(RepeatedField *intern, int index TSRMLS_DC) { return value; } -void repeated_field_push_native(RepeatedField *intern, void *value TSRMLS_DC) { - HashTable *ht = HASH_OF(intern->array); +void repeated_field_push_native(RepeatedField *intern, void *value) { + HashTable *ht = PHP_PROTO_HASH_OF(intern->array); int size = native_slot_size(intern->type); - zend_hash_next_index_insert(ht, (void **)value, size, NULL); + php_proto_zend_hash_next_index_insert(ht, (void **)value, size, NULL); } -void repeated_field_create_with_field(zend_class_entry *ce, - const upb_fielddef *field, - zval **repeated_field TSRMLS_DC) { +void repeated_field_create_with_field( + zend_class_entry *ce, const upb_fielddef *field, + CACHED_VALUE *repeated_field PHP_PROTO_TSRMLS_DC) { upb_fieldtype_t type = upb_fielddef_type(field); - const zend_class_entry *msg_ce = field_type_class(field TSRMLS_CC); - repeated_field_create_with_type(ce, type, msg_ce, repeated_field TSRMLS_CC); + const zend_class_entry *msg_ce = field_type_class(field PHP_PROTO_TSRMLS_CC); + repeated_field_create_with_type(ce, type, msg_ce, + repeated_field PHP_PROTO_TSRMLS_CC); } -void repeated_field_create_with_type(zend_class_entry *ce, - upb_fieldtype_t type, - const zend_class_entry* msg_ce, - zval **repeated_field TSRMLS_DC) { - MAKE_STD_ZVAL(*repeated_field); - Z_TYPE_PP(repeated_field) = IS_OBJECT; - Z_OBJVAL_PP(repeated_field) = - repeated_field_type->create_object(repeated_field_type TSRMLS_CC); +void repeated_field_create_with_type( + zend_class_entry *ce, upb_fieldtype_t type, const zend_class_entry *msg_ce, + CACHED_VALUE *repeated_field PHP_PROTO_TSRMLS_DC) { + CREATE_OBJ_ON_ALLOCATED_ZVAL_PTR(CACHED_PTR_TO_ZVAL_PTR(repeated_field), + repeated_field_type); RepeatedField *intern = - zend_object_store_get_object(*repeated_field TSRMLS_CC); + UNBOX(RepeatedField, CACHED_TO_ZVAL_PTR(*repeated_field)); intern->type = type; intern->msg_ce = msg_ce; +#if PHP_MAJOR_VERSION < 7 MAKE_STD_ZVAL(intern->array); repeated_field_array_init(intern->array, intern->type, 0 ZEND_FILE_LINE_CC); +#else + repeated_field_array_init(&intern->array, intern->type, 0 ZEND_FILE_LINE_CC); +#endif // TODO(teboring): Link class entry for message and enum } @@ -271,12 +295,16 @@ PHP_METHOD(RepeatedField, __construct) { return; } - RepeatedField *intern = zend_object_store_get_object(getThis() TSRMLS_CC); + RepeatedField *intern = UNBOX(RepeatedField, getThis()); intern->type = to_fieldtype(type); intern->msg_ce = klass; +#if PHP_MAJOR_VERSION < 7 MAKE_STD_ZVAL(intern->array); repeated_field_array_init(intern->array, intern->type, 0 ZEND_FILE_LINE_CC); +#else + repeated_field_array_init(&intern->array, intern->type, 0 ZEND_FILE_LINE_CC); +#endif if (intern->type == UPB_TYPE_MESSAGE && klass == NULL) { zend_error(E_USER_ERROR, "Message type must have concrete class."); @@ -313,10 +341,10 @@ PHP_METHOD(RepeatedField, offsetExists) { return; } - RepeatedField *intern = zend_object_store_get_object(getThis() TSRMLS_CC); + RepeatedField *intern = UNBOX(RepeatedField, getThis()); RETURN_BOOL(index >= 0 && - index < zend_hash_num_elements(HASH_OF(intern->array))); + index < zend_hash_num_elements(PHP_PROTO_HASH_OF(intern->array))); } /** @@ -336,15 +364,16 @@ PHP_METHOD(RepeatedField, offsetGet) { return; } - RepeatedField *intern = zend_object_store_get_object(getThis() TSRMLS_CC); - HashTable *table = HASH_OF(intern->array); + RepeatedField *intern = UNBOX(RepeatedField, getThis()); + HashTable *table = PHP_PROTO_HASH_OF(intern->array); - if (zend_hash_index_find(table, index, (void **)&memory) == FAILURE) { + if (php_proto_zend_hash_index_find(table, index, (void **)&memory) == FAILURE) { zend_error(E_USER_ERROR, "Element at %ld doesn't exist.\n", index); return; } - native_slot_get(intern->type, memory, return_value_ptr TSRMLS_CC); + native_slot_get_by_array(intern->type, memory, + ZVAL_PTR_TO_CACHED_PTR(return_value) TSRMLS_CC); } /** @@ -379,16 +408,16 @@ PHP_METHOD(RepeatedField, offsetUnset) { return; } - RepeatedField *intern = zend_object_store_get_object(getThis() TSRMLS_CC); + RepeatedField *intern = UNBOX(RepeatedField, getThis()); // Only the element at the end of the array can be removed. if (index == -1 || - index != (zend_hash_num_elements(HASH_OF(intern->array)) - 1)) { + index != (zend_hash_num_elements(PHP_PROTO_HASH_OF(intern->array)) - 1)) { zend_error(E_USER_ERROR, "Cannot remove element at %ld.\n", index); return; } - zend_hash_index_del(HASH_OF(intern->array), index); + zend_hash_index_del(PHP_PROTO_HASH_OF(intern->array), index); } /** @@ -397,13 +426,13 @@ PHP_METHOD(RepeatedField, offsetUnset) { * @return long The number of stored elements. */ PHP_METHOD(RepeatedField, count) { - RepeatedField *intern = zend_object_store_get_object(getThis() TSRMLS_CC); + RepeatedField *intern = UNBOX(RepeatedField, getThis()); if (zend_parse_parameters_none() == FAILURE) { return; } - RETURN_LONG(zend_hash_num_elements(HASH_OF(intern->array))); + RETURN_LONG(zend_hash_num_elements(PHP_PROTO_HASH_OF(intern->array))); } /** @@ -412,105 +441,77 @@ PHP_METHOD(RepeatedField, count) { * @return object Beginning iterator. */ PHP_METHOD(RepeatedField, getIterator) { - zval *iter_php = NULL; - MAKE_STD_ZVAL(iter_php); - Z_TYPE_P(iter_php) = IS_OBJECT; - Z_OBJVAL_P(iter_php) = repeated_field_iter_type->create_object( - repeated_field_iter_type TSRMLS_CC); - - RepeatedField *intern = zend_object_store_get_object(getThis() TSRMLS_CC); - RepeatedFieldIter *iter = zend_object_store_get_object(iter_php TSRMLS_CC); + CREATE_OBJ_ON_ALLOCATED_ZVAL_PTR(return_value, + repeated_field_iter_type); + + RepeatedField *intern = UNBOX(RepeatedField, getThis()); + RepeatedFieldIter *iter = UNBOX(RepeatedFieldIter, return_value); iter->repeated_field = intern; iter->position = 0; - - RETURN_ZVAL(iter_php, 1, 1); } // ----------------------------------------------------------------------------- // RepeatedFieldIter creation/desctruction // ----------------------------------------------------------------------------- -void repeated_field_iter_init(TSRMLS_D) { - zend_class_entry class_type; - const char* class_name = "Google\\Protobuf\\Internal\\RepeatedFieldIter"; - INIT_CLASS_ENTRY_EX(class_type, class_name, strlen(class_name), - repeated_field_iter_methods); - - repeated_field_iter_type = - zend_register_internal_class(&class_type TSRMLS_CC); - repeated_field_iter_type->create_object = repeated_field_iter_create; - - zend_class_implements(repeated_field_iter_type TSRMLS_CC, 1, - zend_ce_iterator); -} - -static zend_object_value repeated_field_iter_create( - zend_class_entry *ce TSRMLS_DC) { - zend_object_value retval = {0}; - RepeatedFieldIter *intern; - - intern = emalloc(sizeof(RepeatedFieldIter)); - memset(intern, 0, sizeof(RepeatedFieldIter)); - - zend_object_std_init(&intern->std, ce TSRMLS_CC); - object_properties_init(&intern->std, ce); +// Define object free method. +PHP_PROTO_OBJECT_FREE_START(RepeatedFieldIter, repeated_field_iter) +PHP_PROTO_OBJECT_FREE_END - intern->repeated_field = NULL; - intern->position = 0; - - retval.handle = zend_objects_store_put( - intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, - (zend_objects_free_object_storage_t)repeated_field_iter_free, - NULL TSRMLS_CC); - retval.handlers = zend_get_std_object_handlers(); +PHP_PROTO_OBJECT_DTOR_START(RepeatedFieldIter, repeated_field_iter) +PHP_PROTO_OBJECT_DTOR_END - return retval; -} +// Define object create method. +PHP_PROTO_OBJECT_CREATE_START(RepeatedFieldIter, repeated_field_iter) +intern->repeated_field = NULL; +intern->position = 0; +PHP_PROTO_OBJECT_CREATE_END(RepeatedFieldIter, repeated_field_iter) -static void repeated_field_iter_free(void *object TSRMLS_DC) { - RepeatedFieldIter *intern = object; - zend_object_std_dtor(&intern->std TSRMLS_CC); - efree(object); -} +// Init class entry. +PHP_PROTO_INIT_CLASS_START("Google\\Protobuf\\Internal\\RepeatedFieldIter", + RepeatedFieldIter, repeated_field_iter) +zend_class_implements(repeated_field_iter_type TSRMLS_CC, 1, zend_ce_iterator); +PHP_PROTO_INIT_CLASS_END // ----------------------------------------------------------------------------- // PHP RepeatedFieldIter Methods // ----------------------------------------------------------------------------- PHP_METHOD(RepeatedFieldIter, rewind) { - RepeatedFieldIter *intern = zend_object_store_get_object(getThis() TSRMLS_CC); + RepeatedFieldIter *intern = UNBOX(RepeatedFieldIter, getThis()); intern->position = 0; } PHP_METHOD(RepeatedFieldIter, current) { - RepeatedFieldIter *intern = zend_object_store_get_object(getThis() TSRMLS_CC); + RepeatedFieldIter *intern = UNBOX(RepeatedFieldIter, getThis()); RepeatedField *repeated_field = intern->repeated_field; long index; void *memory; - HashTable *table = HASH_OF(repeated_field->array); + HashTable *table = PHP_PROTO_HASH_OF(repeated_field->array); - if (zend_hash_index_find(table, intern->position, (void **)&memory) == + if (php_proto_zend_hash_index_find(table, intern->position, (void **)&memory) == FAILURE) { zend_error(E_USER_ERROR, "Element at %ld doesn't exist.\n", index); return; } - native_slot_get(repeated_field->type, memory, return_value_ptr TSRMLS_CC); + native_slot_get_by_array(repeated_field->type, memory, + ZVAL_PTR_TO_CACHED_PTR(return_value) TSRMLS_CC); } PHP_METHOD(RepeatedFieldIter, key) { - RepeatedFieldIter *intern = zend_object_store_get_object(getThis() TSRMLS_CC); + RepeatedFieldIter *intern = UNBOX(RepeatedFieldIter, getThis()); RETURN_LONG(intern->position); } PHP_METHOD(RepeatedFieldIter, next) { - RepeatedFieldIter *intern = zend_object_store_get_object(getThis() TSRMLS_CC); + RepeatedFieldIter *intern = UNBOX(RepeatedFieldIter, getThis()); ++intern->position; } PHP_METHOD(RepeatedFieldIter, valid) { - RepeatedFieldIter *intern = zend_object_store_get_object(getThis() TSRMLS_CC); - RETURN_BOOL(zend_hash_num_elements(HASH_OF(intern->repeated_field->array)) > - intern->position); + RepeatedFieldIter *intern = UNBOX(RepeatedFieldIter, getThis()); + RETURN_BOOL(zend_hash_num_elements(PHP_PROTO_HASH_OF( + intern->repeated_field->array)) > intern->position); } diff --git a/third_party/protobuf/3.2.0/php/ext/google/protobuf/def.c b/third_party/protobuf/3.2.0/php/ext/google/protobuf/def.c index 52b9e8856842cf..8e563a618a2b18 100644 --- a/third_party/protobuf/3.2.0/php/ext/google/protobuf/def.c +++ b/third_party/protobuf/3.2.0/php/ext/google/protobuf/def.c @@ -30,20 +30,17 @@ #include "protobuf.h" +const char* const kReservedNames[] = {"Empty"}; +const int kReservedNamesSize = 1; + // Forward declare. -static zend_object_value descriptor_create(zend_class_entry *ce TSRMLS_DC); static void descriptor_init_c_instance(Descriptor* intern TSRMLS_DC); static void descriptor_free_c(Descriptor* object TSRMLS_DC); -static void descriptor_free(void* object TSRMLS_DC); -static zend_object_value enum_descriptor_create(zend_class_entry *ce TSRMLS_DC); static void enum_descriptor_init_c_instance(EnumDescriptor* intern TSRMLS_DC); static void enum_descriptor_free_c(EnumDescriptor* object TSRMLS_DC); -static void enum_descriptor_free(void* object TSRMLS_DC); -static zend_object_value descriptor_pool_create(zend_class_entry *ce TSRMLS_DC); static void descriptor_pool_free_c(DescriptorPool* object TSRMLS_DC); -static void descriptor_pool_free(void* object TSRMLS_DC); static void descriptor_pool_init_c_instance(DescriptorPool* pool TSRMLS_DC); // ----------------------------------------------------------------------------- @@ -104,40 +101,31 @@ static void append_map_entry_name(char *result, const char *field_name, } while (0) // Define PHP class -#define DEFINE_PROTOBUF_INIT_CLASS(name_lower, string_name) \ - void name_lower##_init(TSRMLS_D) { \ - zend_class_entry class_type; \ - INIT_CLASS_ENTRY(class_type, string_name, name_lower##_methods); \ - name_lower##_type = zend_register_internal_class(&class_type TSRMLS_CC); \ - name_lower##_type->create_object = name_lower##_create; \ - } - -#define DEFINE_PROTOBUF_CREATE(name, name_lower) \ - static zend_object_value name_lower##_create( \ - zend_class_entry* ce TSRMLS_DC) { \ - zend_object_value return_value; \ - name* intern = (name*)emalloc(sizeof(name)); \ - memset(intern, 0, sizeof(name)); \ - name_lower##_init_c_instance(intern TSRMLS_CC); \ - return_value.handle = zend_objects_store_put( \ - intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, \ - name_lower##_free, NULL TSRMLS_CC); \ - return_value.handlers = zend_get_std_object_handlers(); \ - return return_value; \ - } - -#define DEFINE_PROTOBUF_FREE(name, name_lower) \ - static void name_lower##_free(void* object TSRMLS_DC) { \ - name* intern = (name*)object; \ - name_lower##_free_c(intern TSRMLS_CC); \ - efree(object); \ - } - -#define DEFINE_CLASS(name, name_lower, string_name) \ - zend_class_entry* name_lower##_type; \ - DEFINE_PROTOBUF_FREE(name, name_lower) \ - DEFINE_PROTOBUF_CREATE(name, name_lower) \ - DEFINE_PROTOBUF_INIT_CLASS(name_lower, string_name) +#define DEFINE_PROTOBUF_INIT_CLASS(CLASSNAME, CAMELNAME, LOWERNAME) \ + PHP_PROTO_INIT_CLASS_START(CLASSNAME, CAMELNAME, LOWERNAME) \ + PHP_PROTO_INIT_CLASS_END + +#define DEFINE_PROTOBUF_CREATE(NAME, LOWERNAME) \ + PHP_PROTO_OBJECT_CREATE_START(NAME, LOWERNAME) \ + LOWERNAME##_init_c_instance(intern TSRMLS_CC); \ + PHP_PROTO_OBJECT_CREATE_END(NAME, LOWERNAME) + +#define DEFINE_PROTOBUF_FREE(CAMELNAME, LOWERNAME) \ + PHP_PROTO_OBJECT_FREE_START(CAMELNAME, LOWERNAME) \ + LOWERNAME##_free_c(intern TSRMLS_CC); \ + PHP_PROTO_OBJECT_FREE_END + +#define DEFINE_PROTOBUF_DTOR(CAMELNAME, LOWERNAME) \ + PHP_PROTO_OBJECT_DTOR_START(CAMELNAME, LOWERNAME) \ + PHP_PROTO_OBJECT_DTOR_END + +#define DEFINE_CLASS(NAME, LOWERNAME, string_name) \ + zend_class_entry *LOWERNAME##_type; \ + zend_object_handlers *LOWERNAME##_handlers; \ + DEFINE_PROTOBUF_FREE(NAME, LOWERNAME) \ + DEFINE_PROTOBUF_DTOR(NAME, LOWERNAME) \ + DEFINE_PROTOBUF_CREATE(NAME, LOWERNAME) \ + DEFINE_PROTOBUF_INIT_CLASS(string_name, NAME, LOWERNAME) // ----------------------------------------------------------------------------- // GPBType @@ -176,6 +164,114 @@ void gpb_type_init(TSRMLS_D) { zend_declare_class_constant_long(gpb_type_type, STR("SINT64"), 18 TSRMLS_CC); } +// ----------------------------------------------------------------------------- +// Descriptor +// ----------------------------------------------------------------------------- + +static zend_function_entry descriptor_methods[] = { + ZEND_FE_END +}; + +DEFINE_CLASS(Descriptor, descriptor, "Google\\Protobuf\\Internal\\Descriptor"); + +static void descriptor_free_c(Descriptor *self TSRMLS_DC) { + if (self->layout) { + free_layout(self->layout); + } + if (self->fill_handlers) { + upb_handlers_unref(self->fill_handlers, &self->fill_handlers); + } + if (self->fill_method) { + upb_pbdecodermethod_unref(self->fill_method, &self->fill_method); + } + if (self->json_fill_method) { + upb_json_parsermethod_unref(self->json_fill_method, + &self->json_fill_method); + } + if (self->pb_serialize_handlers) { + upb_handlers_unref(self->pb_serialize_handlers, + &self->pb_serialize_handlers); + } + if (self->json_serialize_handlers) { + upb_handlers_unref(self->json_serialize_handlers, + &self->json_serialize_handlers); + } + if (self->json_serialize_handlers_preserve) { + upb_handlers_unref(self->json_serialize_handlers_preserve, + &self->json_serialize_handlers_preserve); + } +} + +static void descriptor_init_c_instance(Descriptor *desc TSRMLS_DC) { + // zend_object_std_init(&desc->std, descriptor_type TSRMLS_CC); + desc->msgdef = NULL; + desc->layout = NULL; + desc->klass = NULL; + desc->fill_handlers = NULL; + desc->fill_method = NULL; + desc->json_fill_method = NULL; + desc->pb_serialize_handlers = NULL; + desc->json_serialize_handlers = NULL; + desc->json_serialize_handlers_preserve = NULL; +} + +// ----------------------------------------------------------------------------- +// EnumDescriptor +// ----------------------------------------------------------------------------- + +static zend_function_entry enum_descriptor_methods[] = { + ZEND_FE_END +}; + +DEFINE_CLASS(EnumDescriptor, enum_descriptor, + "Google\\Protobuf\\Internal\\EnumDescriptor"); + +static void enum_descriptor_free_c(EnumDescriptor *self TSRMLS_DC) { +} + +static void enum_descriptor_init_c_instance(EnumDescriptor *self TSRMLS_DC) { + // zend_object_std_init(&self->std, enum_descriptor_type TSRMLS_CC); + self->enumdef = NULL; + self->klass = NULL; +} + +// ----------------------------------------------------------------------------- +// FieldDescriptor +// ----------------------------------------------------------------------------- + +upb_fieldtype_t to_fieldtype(upb_descriptortype_t type) { + switch (type) { +#define CASE(descriptor_type, type) \ + case UPB_DESCRIPTOR_TYPE_##descriptor_type: \ + return UPB_TYPE_##type; + + CASE(FLOAT, FLOAT); + CASE(DOUBLE, DOUBLE); + CASE(BOOL, BOOL); + CASE(STRING, STRING); + CASE(BYTES, BYTES); + CASE(MESSAGE, MESSAGE); + CASE(GROUP, MESSAGE); + CASE(ENUM, ENUM); + CASE(INT32, INT32); + CASE(INT64, INT64); + CASE(UINT32, UINT32); + CASE(UINT64, UINT64); + CASE(SINT32, INT32); + CASE(SINT64, INT64); + CASE(FIXED32, UINT32); + CASE(FIXED64, UINT64); + CASE(SFIXED32, INT32); + CASE(SFIXED64, INT64); + +#undef CONVERT + + } + + zend_error(E_ERROR, "Unknown field type."); + return 0; +} + // ----------------------------------------------------------------------------- // DescriptorPool // ----------------------------------------------------------------------------- @@ -190,25 +286,32 @@ static zend_function_entry descriptor_pool_methods[] = { DEFINE_CLASS(DescriptorPool, descriptor_pool, "Google\\Protobuf\\Internal\\DescriptorPool"); -zval* generated_pool_php; // wrapper of generated pool +// wrapper of generated pool +#if PHP_MAJOR_VERSION < 7 +zval* generated_pool_php; +#else +zend_object *generated_pool_php; +#endif DescriptorPool *generated_pool; // The actual generated pool static void init_generated_pool_once(TSRMLS_D) { if (generated_pool_php == NULL) { +#if PHP_MAJOR_VERSION < 7 MAKE_STD_ZVAL(generated_pool_php); - Z_TYPE_P(generated_pool_php) = IS_OBJECT; - generated_pool = ALLOC(DescriptorPool); - descriptor_pool_init_c_instance(generated_pool TSRMLS_CC); - Z_OBJ_HANDLE_P(generated_pool_php) = zend_objects_store_put( - generated_pool, NULL, - (zend_objects_free_object_storage_t)descriptor_pool_free, - NULL TSRMLS_CC); - Z_OBJ_HT_P(generated_pool_php) = zend_get_std_object_handlers(); + ZVAL_OBJ(generated_pool_php, descriptor_pool_type->create_object( + descriptor_pool_type TSRMLS_CC)); + generated_pool = UNBOX(DescriptorPool, generated_pool_php); +#else + generated_pool_php = + descriptor_pool_type->create_object(descriptor_pool_type TSRMLS_CC); + generated_pool = (DescriptorPool *)((char *)generated_pool_php - + XtOffsetOf(DescriptorPool, std)); +#endif } } static void descriptor_pool_init_c_instance(DescriptorPool *pool TSRMLS_DC) { - zend_object_std_init(&pool->std, descriptor_pool_type TSRMLS_CC); + // zend_object_std_init(&pool->std, descriptor_pool_type TSRMLS_CC); pool->symtab = upb_symtab_new(); ALLOC_HASHTABLE(pool->pending_list); @@ -247,66 +350,103 @@ static void validate_msgdef(const upb_msgdef* msgdef) { PHP_METHOD(DescriptorPool, getGeneratedPool) { init_generated_pool_once(TSRMLS_C); +#if PHP_MAJOR_VERSION < 7 RETURN_ZVAL(generated_pool_php, 1, 0); +#else + ++GC_REFCOUNT(generated_pool_php); + RETURN_OBJ(generated_pool_php); +#endif } -static void convert_to_class_name_inplace(char *class_name, - const char* fullname, - const char* prefix, - const char* package_name) { +static void classname_no_prefix(const char *fullname, const char *package_name, + char *class_name) { size_t i = 0, j; - bool first_char = true; + bool first_char = true, is_reserved = false; size_t pkg_name_len = package_name == NULL ? 0 : strlen(package_name); - size_t prefix_len = prefix == NULL ? 0 : strlen(prefix); size_t message_name_start = package_name == NULL ? 0 : pkg_name_len + 1; size_t message_len = (strlen(fullname) - message_name_start); - // In php, class name cannot be Empty. - if (strcmp("google.protobuf.Empty", fullname) == 0) { - strcpy(class_name, "\\Google\\Protobuf\\GPBEmpty"); - return; + // Submessage is concatenated with its containing messages by '_'. + for (j = message_name_start; j < message_name_start + message_len; j++) { + if (fullname[j] == '.') { + class_name[i++] = '_'; + } else { + class_name[i++] = fullname[j]; + } + } +} + +static const char *classname_prefix(const char *classname, + const char *prefix_given, + const char *package_name) { + size_t i; + bool is_reserved = false; + + if (prefix_given != NULL && strcmp(prefix_given, "") != 0) { + return prefix_given; } - if (pkg_name_len != 0) { - class_name[i++] = '\\'; - for (j = 0; j < pkg_name_len; j++) { + for (i = 0; i < kReservedNamesSize; i++) { + if (strcmp(kReservedNames[i], classname) == 0) { + is_reserved = true; + break; + } + } + + if (is_reserved) { + if (package_name != NULL && strcmp("google.protobuf", package_name) == 0) { + return "GPB"; + } else { + return "PB"; + } + } + + return ""; +} + +static void convert_to_class_name_inplace(const char *package, + const char *prefix, char *classname) { + size_t package_len = package == NULL ? 0 : strlen(package); + size_t prefix_len = prefix == NULL ? 0 : strlen(prefix); + size_t classname_len = strlen(classname); + int i = 0, j; + bool first_char = true; + + int offset = package_len != 0 ? 2 : 0; + + for (j = 0; j < classname_len; j++) { + classname[package_len + prefix_len + classname_len + offset - 1 - j] = + classname[classname_len - j - 1]; + } + + if (package_len != 0) { + classname[i++] = '\\'; + for (j = 0; j < package_len; j++) { // php packages are divided by '\'. - if (package_name[j] == '.') { - class_name[i++] = '\\'; + if (package[j] == '.') { + classname[i++] = '\\'; first_char = true; } else if (first_char) { // PHP package uses camel case. - if (package_name[j] < 'A' || package_name[j] > 'Z') { - class_name[i++] = package_name[j] + 'A' - 'a'; + if (package[j] < 'A' || package[j] > 'Z') { + classname[i++] = package[j] + 'A' - 'a'; } else { - class_name[i++] = package_name[j]; + classname[i++] = package[j]; } first_char = false; } else { - class_name[i++] = package_name[j]; + classname[i++] = package[j]; } } - class_name[i++] = '\\'; + classname[i++] = '\\'; } - if (prefix_len > 0) { - strcpy(class_name + i, prefix); - i += prefix_len; - } - - // Submessage is concatenated with its containing messages by '_'. - for (j = message_name_start; j < message_name_start + message_len; j++) { - if (fullname[j] == '.') { - class_name[i++] = '_'; - } else { - class_name[i++] = fullname[j]; - } - } + memcpy(classname + i, prefix, prefix_len); } PHP_METHOD(DescriptorPool, internalAddGeneratedFile) { char *data = NULL; - int data_len; + PHP_PROTO_SIZE data_len; upb_filedef **files; size_t i; @@ -335,11 +475,7 @@ PHP_METHOD(DescriptorPool, internalAddGeneratedFile) { switch (upb_def_type(def)) { #define CASE_TYPE(def_type, def_type_lower, desc_type, desc_type_lower) \ case UPB_DEF_##def_type: { \ - desc_type *desc; \ - zval *desc_php; \ - CREATE(desc_type, desc, desc_type_lower##_init_c_instance); \ - BOX(desc_type, desc_php, desc, desc_type_lower##_free); \ - Z_DELREF_P(desc_php); \ + CREATE_HASHTABLE_VALUE(desc, desc_php, desc_type, desc_type_lower##_type); \ const upb_##def_type_lower *def_type_lower = \ upb_downcast_##def_type_lower(def); \ desc->def_type_lower = def_type_lower; \ @@ -354,25 +490,27 @@ PHP_METHOD(DescriptorPool, internalAddGeneratedFile) { * bytes allocated, one for '.', one for trailing 0, and 3 for 'GPB' if \ * given message is google.protobuf.Empty.*/ \ const char *fullname = upb_##def_type_lower##_fullname(def_type_lower); \ - const char *prefix = upb_filedef_phpprefix(files[0]); \ - size_t klass_name_len = strlen(fullname) + 5; \ - if (prefix != NULL) { \ - klass_name_len += strlen(prefix); \ + const char *prefix_given = upb_filedef_phpprefix(files[0]); \ + size_t classname_len = strlen(fullname) + 5; \ + if (prefix_given != NULL) { \ + classname_len += strlen(prefix_given); \ } \ - char *klass_name = ecalloc(sizeof(char), klass_name_len); \ - convert_to_class_name_inplace(klass_name, fullname, prefix, \ - upb_filedef_package(files[0])); \ - zend_class_entry **pce; \ - if (zend_lookup_class(klass_name, strlen(klass_name), &pce TSRMLS_CC) == \ + char *classname = ecalloc(sizeof(char), classname_len); \ + const char *package = upb_filedef_package(files[0]); \ + classname_no_prefix(fullname, package, classname); \ + const char *prefix = classname_prefix(classname, prefix_given, package); \ + convert_to_class_name_inplace(package, prefix, classname); \ + PHP_PROTO_CE_DECLARE pce; \ + if (php_proto_zend_lookup_class(classname, strlen(classname), &pce) == \ FAILURE) { \ zend_error(E_ERROR, "Generated message class %s hasn't been defined", \ - klass_name); \ + classname); \ return; \ } else { \ - desc->klass = *pce; \ + desc->klass = PHP_PROTO_CE_UNREF(pce); \ } \ add_ce_obj(desc->klass, desc_php); \ - efree(klass_name); \ + efree(classname); \ break; \ } @@ -389,7 +527,7 @@ PHP_METHOD(DescriptorPool, internalAddGeneratedFile) { const upb_def *def = upb_filedef_def(files[0], i); if (upb_def_type(def) == UPB_DEF_MSG) { const upb_msgdef *msgdef = upb_downcast_msgdef(def); - zval *desc_php = get_def_obj(msgdef); + PHP_PROTO_HASHTABLE_VALUE desc_php = get_def_obj(msgdef); build_class_from_descriptor(desc_php TSRMLS_CC); } } @@ -397,111 +535,3 @@ PHP_METHOD(DescriptorPool, internalAddGeneratedFile) { upb_filedef_unref(files[0], &pool); upb_gfree(files); } - -// ----------------------------------------------------------------------------- -// Descriptor -// ----------------------------------------------------------------------------- - -static zend_function_entry descriptor_methods[] = { - ZEND_FE_END -}; - -DEFINE_CLASS(Descriptor, descriptor, "Google\\Protobuf\\Internal\\Descriptor"); - -static void descriptor_free_c(Descriptor *self TSRMLS_DC) { - if (self->layout) { - free_layout(self->layout); - } - if (self->fill_handlers) { - upb_handlers_unref(self->fill_handlers, &self->fill_handlers); - } - if (self->fill_method) { - upb_pbdecodermethod_unref(self->fill_method, &self->fill_method); - } - if (self->json_fill_method) { - upb_json_parsermethod_unref(self->json_fill_method, - &self->json_fill_method); - } - if (self->pb_serialize_handlers) { - upb_handlers_unref(self->pb_serialize_handlers, - &self->pb_serialize_handlers); - } - if (self->json_serialize_handlers) { - upb_handlers_unref(self->json_serialize_handlers, - &self->json_serialize_handlers); - } - if (self->json_serialize_handlers_preserve) { - upb_handlers_unref(self->json_serialize_handlers_preserve, - &self->json_serialize_handlers_preserve); - } -} - -static void descriptor_init_c_instance(Descriptor *desc TSRMLS_DC) { - zend_object_std_init(&desc->std, descriptor_type TSRMLS_CC); - desc->msgdef = NULL; - desc->layout = NULL; - desc->klass = NULL; - desc->fill_handlers = NULL; - desc->fill_method = NULL; - desc->json_fill_method = NULL; - desc->pb_serialize_handlers = NULL; - desc->json_serialize_handlers = NULL; - desc->json_serialize_handlers_preserve = NULL; -} - -// ----------------------------------------------------------------------------- -// EnumDescriptor -// ----------------------------------------------------------------------------- - -static zend_function_entry enum_descriptor_methods[] = { - ZEND_FE_END -}; - -DEFINE_CLASS(EnumDescriptor, enum_descriptor, - "Google\\Protobuf\\Internal\\EnumDescriptor"); - -static void enum_descriptor_free_c(EnumDescriptor *self TSRMLS_DC) { -} - -static void enum_descriptor_init_c_instance(EnumDescriptor *self TSRMLS_DC) { - zend_object_std_init(&self->std, enum_descriptor_type TSRMLS_CC); - self->enumdef = NULL; - self->klass = NULL; -} - -// ----------------------------------------------------------------------------- -// FieldDescriptor -// ----------------------------------------------------------------------------- - -upb_fieldtype_t to_fieldtype(upb_descriptortype_t type) { - switch (type) { -#define CASE(descriptor_type, type) \ - case UPB_DESCRIPTOR_TYPE_##descriptor_type: \ - return UPB_TYPE_##type; - - CASE(FLOAT, FLOAT); - CASE(DOUBLE, DOUBLE); - CASE(BOOL, BOOL); - CASE(STRING, STRING); - CASE(BYTES, BYTES); - CASE(MESSAGE, MESSAGE); - CASE(GROUP, MESSAGE); - CASE(ENUM, ENUM); - CASE(INT32, INT32); - CASE(INT64, INT64); - CASE(UINT32, UINT32); - CASE(UINT64, UINT64); - CASE(SINT32, INT32); - CASE(SINT64, INT64); - CASE(FIXED32, UINT32); - CASE(FIXED64, UINT64); - CASE(SFIXED32, INT32); - CASE(SFIXED64, INT64); - -#undef CONVERT - - } - - zend_error(E_ERROR, "Unknown field type."); - return 0; -} diff --git a/third_party/protobuf/3.2.0/php/ext/google/protobuf/encode_decode.c b/third_party/protobuf/3.2.0/php/ext/google/protobuf/encode_decode.c index e5a5f307ccf9f7..28bf18f4d5398d 100644 --- a/third_party/protobuf/3.2.0/php/ext/google/protobuf/encode_decode.c +++ b/third_party/protobuf/3.2.0/php/ext/google/protobuf/encode_decode.c @@ -197,19 +197,18 @@ static const void *newoneofhandlerdata(upb_handlers *h, static void *startseq_handler(void* closure, const void* hd) { MessageHeader* msg = closure; const size_t *ofs = hd; - return (void*)(*DEREF(msg, *ofs, zval**)); + return CACHED_PTR_TO_ZVAL_PTR(DEREF(message_data(msg), *ofs, CACHED_VALUE*)); } // Handlers that append primitive values to a repeated field. -#define DEFINE_APPEND_HANDLER(type, ctype) \ - static bool append##type##_handler(void* closure, const void* hd, \ - ctype val) { \ - zval* array = (zval*)closure; \ - TSRMLS_FETCH(); \ - RepeatedField* intern = \ - (RepeatedField*)zend_object_store_get_object(array TSRMLS_CC); \ - repeated_field_push_native(intern, &val TSRMLS_CC); \ - return true; \ +#define DEFINE_APPEND_HANDLER(type, ctype) \ + static bool append##type##_handler(void* closure, const void* hd, \ + ctype val) { \ + zval* array = (zval*)closure; \ + TSRMLS_FETCH(); \ + RepeatedField* intern = UNBOX(RepeatedField, array); \ + repeated_field_push_native(intern, &val); \ + return true; \ } DEFINE_APPEND_HANDLER(bool, bool) @@ -226,15 +225,19 @@ static void* appendstr_handler(void *closure, size_t size_hint) { zval* array = (zval*)closure; TSRMLS_FETCH(); - RepeatedField* intern = - (RepeatedField*)zend_object_store_get_object(array TSRMLS_CC); + RepeatedField* intern = UNBOX(RepeatedField, array); +#if PHP_MAJOR_VERSION < 7 zval* str; MAKE_STD_ZVAL(str); - ZVAL_STRING(str, "", 1); - - repeated_field_push_native(intern, &str TSRMLS_CC); + PHP_PROTO_ZVAL_STRING(str, "", 1); + repeated_field_push_native(intern, &str); return (void*)str; +#else + zend_string* str = zend_string_init("", 0, 1); + repeated_field_push_native(intern, &str); + return intern; +#endif } // Appends a 'bytes' string to a repeated field. @@ -243,24 +246,51 @@ static void* appendbytes_handler(void *closure, size_t size_hint) { zval* array = (zval*)closure; TSRMLS_FETCH(); - RepeatedField* intern = - (RepeatedField*)zend_object_store_get_object(array TSRMLS_CC); + RepeatedField* intern = UNBOX(RepeatedField, array); +#if PHP_MAJOR_VERSION < 7 zval* str; MAKE_STD_ZVAL(str); - ZVAL_STRING(str, "", 1); - - repeated_field_push_native(intern, &str TSRMLS_CC); + PHP_PROTO_ZVAL_STRING(str, "", 1); + repeated_field_push_native(intern, &str); return (void*)str; +#else + zend_string* str = zend_string_init("", 0, 1); + repeated_field_push_native(intern, &str); + return intern; +#endif } +// Handlers that append primitive values to a repeated field. +#define DEFINE_SINGULAR_HANDLER(type, ctype) \ + static bool type##_handler(void* closure, const void* hd, \ + ctype val) { \ + MessageHeader* msg = (MessageHeader*)closure; \ + const size_t *ofs = hd; \ + DEREF(message_data(msg), *ofs, ctype) = val; \ + return true; \ + } + +DEFINE_SINGULAR_HANDLER(bool, bool) +DEFINE_SINGULAR_HANDLER(int32, int32_t) +DEFINE_SINGULAR_HANDLER(uint32, uint32_t) +DEFINE_SINGULAR_HANDLER(float, float) +DEFINE_SINGULAR_HANDLER(int64, int64_t) +DEFINE_SINGULAR_HANDLER(uint64, uint64_t) +DEFINE_SINGULAR_HANDLER(double, double) + +#undef DEFINE_SINGULAR_HANDLER + +#if PHP_MAJOR_VERSION < 7 static void *empty_php_string(zval** value_ptr) { SEPARATE_ZVAL_IF_NOT_REF(value_ptr); - zval* str = *value_ptr; - zval_dtor(str); - ZVAL_STRINGL(str, "", 0, 1); - return (void*)str; + return (void*)(*value_ptr); +} +#else +static void *empty_php_string(zval* value_ptr) { + return value_ptr; } +#endif // Sets a non-repeated string field in a message. static void* str_handler(void *closure, @@ -268,7 +298,7 @@ static void* str_handler(void *closure, size_t size_hint) { MessageHeader* msg = closure; const size_t *ofs = hd; - return empty_php_string(DEREF(msg, *ofs, zval**)); + return empty_php_string(DEREF(message_data(msg), *ofs, CACHED_VALUE*)); } // Sets a non-repeated 'bytes' field in a message. @@ -277,52 +307,73 @@ static void* bytes_handler(void *closure, size_t size_hint) { MessageHeader* msg = closure; const size_t *ofs = hd; - return empty_php_string(DEREF(msg, *ofs, zval**)); + return empty_php_string(DEREF(message_data(msg), *ofs, CACHED_VALUE*)); } static size_t stringdata_handler(void* closure, const void* hd, const char* str, size_t len, const upb_bufhandle* handle) { zval* php_str = (zval*)closure; +#if PHP_MAJOR_VERSION < 7 + // Oneof string/bytes fields may have NULL initial value, which doesn't need + // to be freed. + if (Z_TYPE_P(php_str) == IS_STRING && !IS_INTERNED(Z_STRVAL_P(php_str))) { + FREE(Z_STRVAL_P(php_str)); + } + ZVAL_STRINGL(php_str, str, len, 1); +#else + if (Z_TYPE_P(php_str) == IS_STRING) { + zend_string_release(Z_STR_P(php_str)); + } + ZVAL_NEW_STR(php_str, zend_string_init(str, len, 0)); +#endif + return len; +} - char* old_str = Z_STRVAL_P(php_str); - size_t old_len = Z_STRLEN_P(php_str); - assert(old_str != NULL); - - char* new_str = emalloc(old_len + len + 1); +#if PHP_MAJOR_VERSION >= 7 +static size_t zendstringdata_handler(void* closure, const void* hd, + const char* str, size_t len, + const upb_bufhandle* handle) { + RepeatedField* intern = (RepeatedField*)closure; - memcpy(new_str, old_str, old_len); - memcpy(new_str + old_len, str, len); - new_str[old_len + len] = 0; - FREE(old_str); + unsigned char memory[NATIVE_SLOT_MAX_SIZE]; + memset(memory, 0, NATIVE_SLOT_MAX_SIZE); + *(zend_string**)memory = zend_string_init(str, len, 0); - Z_STRVAL_P(php_str) = new_str; - Z_STRLEN_P(php_str) = old_len + len; + HashTable *ht = PHP_PROTO_HASH_OF(intern->array); + int index = zend_hash_num_elements(ht) - 1; + php_proto_zend_hash_index_update( + ht, index, memory, sizeof(zend_string*), NULL); return len; } +#endif // Appends a submessage to a repeated field. static void *appendsubmsg_handler(void *closure, const void *hd) { zval* array = (zval*)closure; TSRMLS_FETCH(); - RepeatedField* intern = - (RepeatedField*)zend_object_store_get_object(array TSRMLS_CC); + RepeatedField* intern = UNBOX(RepeatedField, array); const submsg_handlerdata_t *submsgdata = hd; - zval* subdesc_php = get_def_obj((void*)submsgdata->md); - Descriptor* subdesc = zend_object_store_get_object(subdesc_php TSRMLS_CC); + Descriptor* subdesc = + UNBOX_HASHTABLE_VALUE(Descriptor, get_def_obj((void*)submsgdata->md)); zend_class_entry* subklass = subdesc->klass; MessageHeader* submsg; +#if PHP_MAJOR_VERSION < 7 zval* val = NULL; MAKE_STD_ZVAL(val); - Z_TYPE_P(val) = IS_OBJECT; - Z_OBJVAL_P(val) = subklass->create_object(subklass TSRMLS_CC); - - repeated_field_push_native(intern, &val TSRMLS_CC); + ZVAL_OBJ(val, subklass->create_object(subklass TSRMLS_CC)); + repeated_field_push_native(intern, &val); + submsg = UNBOX(MessageHeader, val); +#else + zend_object* obj = subklass->create_object(subklass TSRMLS_CC); + repeated_field_push_native(intern, &obj); + submsg = (MessageHeader*)((char*)obj - XtOffsetOf(MessageHeader, std)); +#endif + custom_data_init(subklass, submsg PHP_PROTO_TSRMLS_CC); - submsg = zend_object_store_get_object(val TSRMLS_CC); return submsg; } @@ -330,26 +381,35 @@ static void *appendsubmsg_handler(void *closure, const void *hd) { static void *submsg_handler(void *closure, const void *hd) { MessageHeader* msg = closure; const submsg_handlerdata_t* submsgdata = hd; - zval* subdesc_php = get_def_obj((void*)submsgdata->md); TSRMLS_FETCH(); - Descriptor* subdesc = zend_object_store_get_object(subdesc_php TSRMLS_CC); + Descriptor* subdesc = + UNBOX_HASHTABLE_VALUE(Descriptor, get_def_obj((void*)submsgdata->md)); zend_class_entry* subklass = subdesc->klass; zval* submsg_php; MessageHeader* submsg; - if (Z_TYPE_P(*DEREF(msg, submsgdata->ofs, zval**)) == IS_NULL) { + if (Z_TYPE_P(CACHED_PTR_TO_ZVAL_PTR(DEREF(message_data(msg), submsgdata->ofs, + CACHED_VALUE*))) == IS_NULL) { +#if PHP_MAJOR_VERSION < 7 zval* val = NULL; MAKE_STD_ZVAL(val); - Z_TYPE_P(val) = IS_OBJECT; - Z_OBJVAL_P(val) = subklass->create_object(subklass TSRMLS_CC); - - zval_ptr_dtor(DEREF(msg, submsgdata->ofs, zval**)); - *DEREF(msg, submsgdata->ofs, zval**) = val; + ZVAL_OBJ(val, subklass->create_object(subklass TSRMLS_CC)); + MessageHeader* intern = UNBOX(MessageHeader, val); + custom_data_init(subklass, intern PHP_PROTO_TSRMLS_CC); + php_proto_zval_ptr_dtor(*DEREF(message_data(msg), submsgdata->ofs, zval**)); + *DEREF(message_data(msg), submsgdata->ofs, zval**) = val; +#else + zend_object* obj = subklass->create_object(subklass TSRMLS_CC); + ZVAL_OBJ(DEREF(message_data(msg), submsgdata->ofs, zval*), obj); + MessageHeader* intern = UNBOX_HASHTABLE_VALUE(MessageHeader, obj); + custom_data_init(subklass, intern PHP_PROTO_TSRMLS_CC); +#endif } - submsg_php = *DEREF(msg, submsgdata->ofs, zval**); + submsg_php = CACHED_PTR_TO_ZVAL_PTR( + DEREF(message_data(msg), submsgdata->ofs, CACHED_VALUE*)); - submsg = zend_object_store_get_object(submsg_php TSRMLS_CC); + submsg = UNBOX(MessageHeader, submsg_php); return submsg; } @@ -372,32 +432,52 @@ typedef struct { // submessage. When the submessage ends, another handler is called to insert the // value into the map. typedef struct { - zval* map; char key_storage[NATIVE_SLOT_MAX_SIZE]; char value_storage[NATIVE_SLOT_MAX_SIZE]; -} map_parse_frame_t; +} map_parse_frame_data_t; -static void map_slot_init(void* memory, upb_fieldtype_t type) { +PHP_PROTO_WRAP_OBJECT_START(map_parse_frame_t) + map_parse_frame_data_t* data; // Place needs to be consistent with + // MessageHeader. + zval* map; + // In php7, we cannot allocate zval dynamically. So we need to add zval here + // to help decoding. + zval key_zval; + zval value_zval; +PHP_PROTO_WRAP_OBJECT_END +typedef struct map_parse_frame_t map_parse_frame_t; + +static void map_slot_init(void* memory, upb_fieldtype_t type, zval* cache) { switch (type) { case UPB_TYPE_STRING: case UPB_TYPE_BYTES: { +#if PHP_MAJOR_VERSION < 7 // Store zval** in memory in order to be consistent with the layout of // singular fields. zval** holder = ALLOC(zval*); zval* tmp; MAKE_STD_ZVAL(tmp); - ZVAL_STRINGL(tmp, "", 0, 1); + PHP_PROTO_ZVAL_STRINGL(tmp, "", 0, 1); *holder = tmp; *(zval***)memory = holder; +#else + *(zval**)memory = cache; + PHP_PROTO_ZVAL_STRINGL(*(zval**)memory, "", 0, 1); +#endif break; } case UPB_TYPE_MESSAGE: { +#if PHP_MAJOR_VERSION < 7 zval** holder = ALLOC(zval*); zval* tmp; MAKE_STD_ZVAL(tmp); ZVAL_NULL(tmp); *holder = tmp; *(zval***)memory = holder; +#else + *(zval**)memory = cache; + ZVAL_NULL(*(zval**)memory); +#endif break; } default: @@ -410,9 +490,13 @@ static void map_slot_uninit(void* memory, upb_fieldtype_t type) { case UPB_TYPE_MESSAGE: case UPB_TYPE_STRING: case UPB_TYPE_BYTES: { +#if PHP_MAJOR_VERSION < 7 zval** holder = *(zval***)memory; - zval_ptr_dtor(holder); + php_proto_zval_ptr_dtor(*holder); FREE(holder); +#else + php_proto_zval_ptr_dtor(*(zval**)memory); +#endif break; } default: @@ -424,7 +508,11 @@ static void map_slot_key(upb_fieldtype_t type, const void* from, const char** keyval, size_t* length) { if (type == UPB_TYPE_STRING) { +#if PHP_MAJOR_VERSION < 7 zval* key_php = **(zval***)from; +#else + zval* key_php = *(zval**)from; +#endif *keyval = Z_STRVAL_P(key_php); *length = Z_STRLEN_P(key_php); } else { @@ -444,6 +532,7 @@ static void map_slot_value(upb_fieldtype_t type, const void* from, memset(to, 0, native_slot_size(type)); switch (type) { +#if PHP_MAJOR_VERSION < 7 case UPB_TYPE_STRING: case UPB_TYPE_BYTES: case UPB_TYPE_MESSAGE: { @@ -451,6 +540,17 @@ static void map_slot_value(upb_fieldtype_t type, const void* from, Z_ADDREF_PP((zval**)to); break; } +#else + case UPB_TYPE_STRING: + case UPB_TYPE_BYTES: + *(zend_string**)to = Z_STR_P(*(zval**)from); + zend_string_addref(*(zend_string**)to); + break; + case UPB_TYPE_MESSAGE: + *(zend_object**)to = Z_OBJ_P(*(zval**)from); + ++GC_REFCOUNT(*(zend_object**)to); + break; +#endif default: len = native_slot_size(type); memcpy(to, from, len); @@ -462,13 +562,17 @@ static void map_slot_value(upb_fieldtype_t type, const void* from, static void *startmapentry_handler(void *closure, const void *hd) { MessageHeader* msg = closure; const map_handlerdata_t* mapdata = hd; - zval* map = *DEREF(msg, mapdata->ofs, zval**); + zval* map = CACHED_PTR_TO_ZVAL_PTR( + DEREF(message_data(msg), mapdata->ofs, CACHED_VALUE*)); map_parse_frame_t* frame = ALLOC(map_parse_frame_t); + frame->data = ALLOC(map_parse_frame_data_t); frame->map = map; - map_slot_init(&frame->key_storage, mapdata->key_field_type); - map_slot_init(&frame->value_storage, mapdata->value_field_type); + map_slot_init(&frame->data->key_storage, mapdata->key_field_type, + &frame->key_zval); + map_slot_init(&frame->data->value_storage, mapdata->value_field_type, + &frame->value_zval); return frame; } @@ -480,19 +584,20 @@ static bool endmap_handler(void* closure, const void* hd, upb_status* s) { const map_handlerdata_t* mapdata = hd; TSRMLS_FETCH(); - Map *map = (Map *)zend_object_store_get_object(frame->map TSRMLS_CC); + Map *map = UNBOX(Map, frame->map); const char* keyval = NULL; upb_value v; size_t length; - map_slot_key(map->key_type, &frame->key_storage, &keyval, &length); - map_slot_value(map->value_type, &frame->value_storage, &v); + map_slot_key(map->key_type, &frame->data->key_storage, &keyval, &length); + map_slot_value(map->value_type, &frame->data->value_storage, &v); map_index_set(map, keyval, length, v); - map_slot_uninit(&frame->key_storage, mapdata->key_field_type); - map_slot_uninit(&frame->value_storage, mapdata->value_field_type); + map_slot_uninit(&frame->data->key_storage, mapdata->key_field_type); + map_slot_uninit(&frame->data->value_storage, mapdata->value_field_type); + FREE(frame->data); FREE(frame); return true; @@ -528,14 +633,15 @@ static map_handlerdata_t* new_map_handlerdata( } // Handlers that set primitive values in oneofs. -#define DEFINE_ONEOF_HANDLER(type, ctype) \ - static bool oneof##type##_handler(void *closure, const void *hd, \ - ctype val) { \ - const oneof_handlerdata_t *oneofdata = hd; \ - DEREF(closure, oneofdata->case_ofs, uint32_t) = \ - oneofdata->oneof_case_num; \ - DEREF(closure, oneofdata->ofs, ctype) = val; \ - return true; \ +#define DEFINE_ONEOF_HANDLER(type, ctype) \ + static bool oneof##type##_handler(void* closure, const void* hd, \ + ctype val) { \ + const oneof_handlerdata_t* oneofdata = hd; \ + MessageHeader* msg = (MessageHeader*)closure; \ + DEREF(message_data(closure), oneofdata->case_ofs, uint32_t) = \ + oneofdata->oneof_case_num; \ + DEREF(message_data(closure), oneofdata->ofs, ctype) = val; \ + return true; \ } DEFINE_ONEOF_HANDLER(bool, bool) @@ -548,74 +654,71 @@ DEFINE_ONEOF_HANDLER(double, double) #undef DEFINE_ONEOF_HANDLER -// Handlers for strings in a oneof. -static void *oneofstr_handler(void *closure, - const void *hd, - size_t size_hint) { - MessageHeader* msg = closure; - const oneof_handlerdata_t *oneofdata = hd; - - DEREF(msg, oneofdata->case_ofs, uint32_t) = - oneofdata->oneof_case_num; - DEREF(msg, oneofdata->ofs, zval**) = - &(msg->std.properties_table)[oneofdata->property_ofs]; - - return empty_php_string(DEREF(msg, oneofdata->ofs, zval**)); -} - +// Handlers for string/bytes in a oneof. static void *oneofbytes_handler(void *closure, const void *hd, size_t size_hint) { MessageHeader* msg = closure; const oneof_handlerdata_t *oneofdata = hd; - DEREF(msg, oneofdata->case_ofs, uint32_t) = + DEREF(message_data(msg), oneofdata->case_ofs, uint32_t) = oneofdata->oneof_case_num; - DEREF(msg, oneofdata->ofs, zval**) = + DEREF(message_data(msg), oneofdata->ofs, CACHED_VALUE*) = &(msg->std.properties_table)[oneofdata->property_ofs]; + return empty_php_string(DEREF( + message_data(msg), oneofdata->ofs, CACHED_VALUE*)); +} + +static void *oneofstr_handler(void *closure, + const void *hd, + size_t size_hint) { // TODO(teboring): Add it back. // rb_enc_associate(str, kRubyString8bitEncoding); - - SEPARATE_ZVAL_IF_NOT_REF(DEREF(msg, oneofdata->ofs, zval**)); - zval* str = *DEREF(msg, oneofdata->ofs, zval**); - zval_dtor(str); - ZVAL_STRINGL(str, "", 0, 1); - return (void*)str; + return oneofbytes_handler(closure, hd, size_hint); } // Handler for a submessage field in a oneof. static void* oneofsubmsg_handler(void* closure, const void* hd) { MessageHeader* msg = closure; const oneof_handlerdata_t *oneofdata = hd; - uint32_t oldcase = DEREF(msg, oneofdata->case_ofs, uint32_t); - zval* subdesc_php = get_def_obj((void*)oneofdata->md); + uint32_t oldcase = DEREF(message_data(msg), oneofdata->case_ofs, uint32_t); TSRMLS_FETCH(); - Descriptor* subdesc = zend_object_store_get_object(subdesc_php TSRMLS_CC); + Descriptor* subdesc = + UNBOX_HASHTABLE_VALUE(Descriptor, get_def_obj((void*)oneofdata->md)); zend_class_entry* subklass = subdesc->klass; zval* submsg_php; MessageHeader* submsg; if (oldcase != oneofdata->oneof_case_num) { - DEREF(msg, oneofdata->ofs, zval**) = + // Ideally, we should clean up the old data. However, we don't even know the + // type of the old data. So, we will defer the desctruction of the old data + // to the time that containing message's destroyed or the same oneof field + // is accessed again and find that the old data hasn't been cleaned. + DEREF(message_data(msg), oneofdata->ofs, CACHED_VALUE*) = &(msg->std.properties_table)[oneofdata->property_ofs]; - } - if (Z_TYPE_P(*DEREF(msg, oneofdata->ofs, zval**)) == IS_NULL) { - zval* val = NULL; - MAKE_STD_ZVAL(val); - Z_TYPE_P(val) = IS_OBJECT; - Z_OBJVAL_P(val) = subklass->create_object(subklass TSRMLS_CC); + // Old data was't cleaned when the oneof was accessed from another field. + if (Z_TYPE_P(CACHED_PTR_TO_ZVAL_PTR(DEREF( + message_data(msg), oneofdata->ofs, CACHED_VALUE*))) != IS_NULL) { + php_proto_zval_ptr_dtor( + CACHED_PTR_TO_ZVAL_PTR( + DEREF(message_data(msg), oneofdata->ofs, CACHED_VALUE*))); + } - zval_ptr_dtor(DEREF(msg, oneofdata->ofs, zval**)); - *DEREF(msg, oneofdata->ofs, zval**) = val; + // Create new message. + ZVAL_OBJ(CACHED_PTR_TO_ZVAL_PTR( + DEREF(message_data(msg), oneofdata->ofs, CACHED_VALUE*)), + subklass->create_object(subklass TSRMLS_CC)); } - DEREF(msg, oneofdata->case_ofs, uint32_t) = + DEREF(message_data(msg), oneofdata->case_ofs, uint32_t) = oneofdata->oneof_case_num; - submsg_php = *DEREF(msg, oneofdata->ofs, zval**); - submsg = zend_object_store_get_object(submsg_php TSRMLS_CC); + submsg_php = CACHED_PTR_TO_ZVAL_PTR( + DEREF(message_data(msg), oneofdata->ofs, CACHED_VALUE*)); + submsg = UNBOX(MessageHeader, submsg_php); + custom_data_init(subklass, submsg PHP_PROTO_TSRMLS_CC); return submsg; } @@ -652,7 +755,11 @@ static void add_handlers_for_repeated_field(upb_handlers *h, upb_handlers_setstartstr(h, f, is_bytes ? appendbytes_handler : appendstr_handler, NULL); +#if PHP_MAJOR_VERSION < 7 upb_handlers_setstring(h, f, stringdata_handler, NULL); +#else + upb_handlers_setstring(h, f, zendstringdata_handler, NULL); +#endif break; } case UPB_TYPE_MESSAGE: { @@ -670,16 +777,26 @@ static void add_handlers_for_singular_field(upb_handlers *h, const upb_fielddef *f, size_t offset) { switch (upb_fielddef_type(f)) { - case UPB_TYPE_BOOL: - case UPB_TYPE_INT32: - case UPB_TYPE_UINT32: - case UPB_TYPE_ENUM: - case UPB_TYPE_FLOAT: - case UPB_TYPE_INT64: - case UPB_TYPE_UINT64: - case UPB_TYPE_DOUBLE: - upb_msg_setscalarhandler(h, f, offset, -1); - break; + +#define SET_HANDLER(utype, ltype) \ + case utype: { \ + upb_handlerattr attr = UPB_HANDLERATTR_INITIALIZER; \ + upb_handlerattr_sethandlerdata(&attr, newhandlerdata(h, offset)); \ + upb_handlers_set##ltype(h, f, ltype##_handler, &attr); \ + break; \ + } + + SET_HANDLER(UPB_TYPE_BOOL, bool); + SET_HANDLER(UPB_TYPE_INT32, int32); + SET_HANDLER(UPB_TYPE_UINT32, uint32); + SET_HANDLER(UPB_TYPE_ENUM, int32); + SET_HANDLER(UPB_TYPE_FLOAT, float); + SET_HANDLER(UPB_TYPE_INT64, int64); + SET_HANDLER(UPB_TYPE_UINT64, uint64); + SET_HANDLER(UPB_TYPE_DOUBLE, double); + +#undef SET_HANDLER + case UPB_TYPE_STRING: case UPB_TYPE_BYTES: { bool is_bytes = upb_fielddef_type(f) == UPB_TYPE_BYTES; @@ -730,9 +847,11 @@ static void add_handlers_for_mapentry(const upb_msgdef* msgdef, upb_handlers* h, upb_handlers_setendmsg(h, endmap_handler, &attr); add_handlers_for_singular_field(h, key_field, - offsetof(map_parse_frame_t, key_storage)); + offsetof(map_parse_frame_data_t, + key_storage)); add_handlers_for_singular_field(h, value_field, - offsetof(map_parse_frame_t, value_storage)); + offsetof(map_parse_frame_data_t, + value_storage)); } // Set up handlers for a oneof field. @@ -787,8 +906,8 @@ static void add_handlers_for_message(const void* closure, upb_handlers* h) { const upb_msgdef* msgdef = upb_handlers_msgdef(h); TSRMLS_FETCH(); - Descriptor* desc = (Descriptor*)zend_object_store_get_object( - get_def_obj((void*)msgdef) TSRMLS_CC); + Descriptor* desc = + UNBOX_HASHTABLE_VALUE(Descriptor, get_def_obj((void*)msgdef)); upb_msg_field_iter i; // If this is a mapentry message type, set up a special set of handlers and @@ -810,13 +929,11 @@ static void add_handlers_for_message(const void* closure, !upb_msg_field_done(&i); upb_msg_field_next(&i)) { const upb_fielddef *f = upb_msg_iter_field(&i); - size_t offset = desc->layout->fields[upb_fielddef_index(f)].offset + - sizeof(MessageHeader); + size_t offset = desc->layout->fields[upb_fielddef_index(f)].offset; if (upb_fielddef_containingoneof(f)) { size_t oneof_case_offset = - desc->layout->fields[upb_fielddef_index(f)].case_offset + - sizeof(MessageHeader); + desc->layout->fields[upb_fielddef_index(f)].case_offset; int property_cache_index = desc->layout->fields[upb_fielddef_index(f)].cache_index; add_handlers_for_oneof_field(h, f, offset, oneof_case_offset, @@ -883,6 +1000,8 @@ static const upb_json_parsermethod *msgdef_jsonparsermethod(Descriptor* desc) { static void putmsg(zval* msg, const Descriptor* desc, upb_sink* sink, int depth TSRMLS_DC); +static void putrawmsg(MessageHeader* msg, const Descriptor* desc, + upb_sink* sink, int depth TSRMLS_DC); static void putstr(zval* str, const upb_fielddef* f, upb_sink* sink); @@ -891,6 +1010,8 @@ static void putrawstr(const char* str, int len, const upb_fielddef* f, static void putsubmsg(zval* submsg, const upb_fielddef* f, upb_sink* sink, int depth TSRMLS_DC); +static void putrawsubmsg(MessageHeader* submsg, const upb_fielddef* f, + upb_sink* sink, int depth TSRMLS_DC); static void putarray(zval* array, const upb_fielddef* f, upb_sink* sink, int depth TSRMLS_DC); @@ -933,8 +1054,14 @@ static void put_optional_value(const void* memory, int len, const upb_fielddef* putrawstr(memory, len, f, sink); break; case UPB_TYPE_MESSAGE: { - zval* submsg = *(zval**)memory; - putsubmsg(submsg, f, sink, depth TSRMLS_CC); +#if PHP_MAJOR_VERSION < 7 + MessageHeader *submsg = UNBOX(MessageHeader, *(zval**)memory); +#else + MessageHeader *submsg = + (MessageHeader*)((char*)(*(zend_object**)memory) - + XtOffsetOf(MessageHeader, std)); +#endif + putrawsubmsg(submsg, f, sink, depth TSRMLS_CC); break; } default: @@ -947,7 +1074,11 @@ static const char* raw_value(void* memory, const upb_fielddef* f) { switch (upb_fielddef_type(f)) { case UPB_TYPE_STRING: case UPB_TYPE_BYTES: +#if PHP_MAJOR_VERSION < 7 return Z_STRVAL_PP((zval**)memory); +#else + return ZSTR_VAL(*(zend_string**)memory); +#endif break; default: return memory; @@ -958,8 +1089,11 @@ static int raw_value_len(void* memory, int len, const upb_fielddef* f) { switch (upb_fielddef_type(f)) { case UPB_TYPE_STRING: case UPB_TYPE_BYTES: +#if PHP_MAJOR_VERSION < 7 return Z_STRLEN_PP((zval**)memory); - break; +#else + return ZSTR_LEN(*(zend_string**)memory); +#endif default: return len; } @@ -967,7 +1101,6 @@ static int raw_value_len(void* memory, int len, const upb_fielddef* f) { static void putmap(zval* map, const upb_fielddef* f, upb_sink* sink, int depth TSRMLS_DC) { - Map* self; upb_sink subsink; const upb_fielddef* key_field; const upb_fielddef* value_field; @@ -975,8 +1108,7 @@ static void putmap(zval* map, const upb_fielddef* f, upb_sink* sink, int len, size; assert(map != NULL); - Map* intern = - (Map*)zend_object_store_get_object(map TSRMLS_CC); + Map* intern = UNBOX(Map, map); size = upb_strtable_count(&intern->table); if (size == 0) return; @@ -1013,6 +1145,12 @@ static void putmap(zval* map, const upb_fielddef* f, upb_sink* sink, static void putmsg(zval* msg_php, const Descriptor* desc, upb_sink* sink, int depth TSRMLS_DC) { + MessageHeader* msg = UNBOX(MessageHeader, msg_php); + putrawmsg(msg, desc, sink, depth TSRMLS_CC); +} + +static void putrawmsg(MessageHeader* msg, const Descriptor* desc, + upb_sink* sink, int depth TSRMLS_DC) { upb_msg_field_iter i; upb_status status; @@ -1025,21 +1163,18 @@ static void putmsg(zval* msg_php, const Descriptor* desc, upb_sink* sink, "Maximum recursion depth exceeded during encoding."); } - MessageHeader* msg = zend_object_store_get_object(msg_php TSRMLS_CC); - for (upb_msg_field_begin(&i, desc->msgdef); !upb_msg_field_done(&i); upb_msg_field_next(&i)) { upb_fielddef* f = upb_msg_iter_field(&i); - uint32_t offset = desc->layout->fields[upb_fielddef_index(f)].offset + - sizeof(MessageHeader); + uint32_t offset = desc->layout->fields[upb_fielddef_index(f)].offset; if (upb_fielddef_containingoneof(f)) { uint32_t oneof_case_offset = - desc->layout->fields[upb_fielddef_index(f)].case_offset + - sizeof(MessageHeader); + desc->layout->fields[upb_fielddef_index(f)].case_offset; // For a oneof, check that this field is actually present -- skip all the // below if not. - if (DEREF(msg, oneof_case_offset, uint32_t) != upb_fielddef_number(f)) { + if (DEREF(message_data(msg), oneof_case_offset, uint32_t) != + upb_fielddef_number(f)) { continue; } // Otherwise, fall through to the appropriate singular-field handler @@ -1047,31 +1182,36 @@ static void putmsg(zval* msg_php, const Descriptor* desc, upb_sink* sink, } if (is_map_field(f)) { - zval* map = *DEREF(msg, offset, zval**); + zval* map = CACHED_PTR_TO_ZVAL_PTR( + DEREF(message_data(msg), offset, CACHED_VALUE*)); if (map != NULL) { putmap(map, f, sink, depth TSRMLS_CC); } } else if (upb_fielddef_isseq(f)) { - zval* array = *DEREF(msg, offset, zval**); + zval* array = CACHED_PTR_TO_ZVAL_PTR( + DEREF(message_data(msg), offset, CACHED_VALUE*)); if (array != NULL) { putarray(array, f, sink, depth TSRMLS_CC); } } else if (upb_fielddef_isstring(f)) { - zval* str = *DEREF(msg, offset, zval**); + zval* str = CACHED_PTR_TO_ZVAL_PTR( + DEREF(message_data(msg), offset, CACHED_VALUE*)); if (Z_STRLEN_P(str) > 0) { putstr(str, f, sink); } } else if (upb_fielddef_issubmsg(f)) { - putsubmsg(*DEREF(msg, offset, zval**), f, sink, depth TSRMLS_CC); + putsubmsg(CACHED_PTR_TO_ZVAL_PTR( + DEREF(message_data(msg), offset, CACHED_VALUE*)), + f, sink, depth TSRMLS_CC); } else { upb_selector_t sel = getsel(f, upb_handlers_getprimitivehandlertype(f)); -#define T(upbtypeconst, upbtype, ctype, default_value) \ - case upbtypeconst: { \ - ctype value = DEREF(msg, offset, ctype); \ - if (value != default_value) { \ - upb_sink_put##upbtype(sink, sel, value); \ - } \ +#define T(upbtypeconst, upbtype, ctype, default_value) \ + case upbtypeconst: { \ + ctype value = DEREF(message_data(msg), offset, ctype); \ + if (value != default_value) { \ + upb_sink_put##upbtype(sink, sel, value); \ + } \ } break; switch (upb_fielddef_type(f)) { @@ -1138,18 +1278,23 @@ static void putrawstr(const char* str, int len, const upb_fielddef* f, upb_sink_endstr(sink, getsel(f, UPB_HANDLER_ENDSTR)); } -static void putsubmsg(zval* submsg, const upb_fielddef* f, upb_sink* sink, +static void putsubmsg(zval* submsg_php, const upb_fielddef* f, upb_sink* sink, int depth TSRMLS_DC) { - upb_sink subsink; + if (Z_TYPE_P(submsg_php) == IS_NULL) return; - if (Z_TYPE_P(submsg) == IS_NULL) return; + MessageHeader *submsg = UNBOX(MessageHeader, submsg_php); + putrawsubmsg(submsg, f, sink, depth TSRMLS_CC); +} + +static void putrawsubmsg(MessageHeader* submsg, const upb_fielddef* f, + upb_sink* sink, int depth TSRMLS_DC) { + upb_sink subsink; - zval* php_descriptor = get_def_obj(upb_fielddef_msgsubdef(f)); Descriptor* subdesc = - (Descriptor*)zend_object_store_get_object(php_descriptor TSRMLS_CC); + UNBOX_HASHTABLE_VALUE(Descriptor, get_def_obj(upb_fielddef_msgsubdef(f))); upb_sink_startsubmsg(sink, getsel(f, UPB_HANDLER_STARTSUBMSG), &subsink); - putmsg(submsg, subdesc, &subsink, depth + 1 TSRMLS_CC); + putrawmsg(submsg, subdesc, &subsink, depth + 1 TSRMLS_CC); upb_sink_endsubmsg(sink, getsel(f, UPB_HANDLER_ENDSUBMSG)); } @@ -1161,9 +1306,10 @@ static void putarray(zval* array, const upb_fielddef* f, upb_sink* sink, int size, i; assert(array != NULL); - RepeatedField* intern = - (RepeatedField*)zend_object_store_get_object(array TSRMLS_CC); - size = zend_hash_num_elements(HASH_OF(intern->array)); + RepeatedField* intern = UNBOX(RepeatedField, array); + HashTable *ht = PHP_PROTO_HASH_OF(intern->array); + size = zend_hash_num_elements(ht); + // size = zend_hash_num_elements(PHP_PROTO_HASH_OF(intern->array)); if (size == 0) return; upb_sink_startseq(sink, getsel(f, UPB_HANDLER_STARTSEQ), &subsink); @@ -1190,12 +1336,28 @@ static void putarray(zval* array, const upb_fielddef* f, upb_sink* sink, T(UPB_TYPE_UINT64, uint64, uint64_t) case UPB_TYPE_STRING: - case UPB_TYPE_BYTES: - putstr(*((zval**)memory), f, &subsink); + case UPB_TYPE_BYTES: { +#if PHP_MAJOR_VERSION < 7 + const char* rawstr = Z_STRVAL_P(*(zval**)memory); + int len = Z_STRLEN_P(*(zval**)memory); +#else + const char* rawstr = ZSTR_VAL(*(zend_string**)memory); + int len = ZSTR_LEN(*(zend_string**)memory); +#endif + putrawstr(rawstr, len, f, &subsink); break; - case UPB_TYPE_MESSAGE: - putsubmsg(*((zval**)memory), f, &subsink, depth TSRMLS_CC); + } + case UPB_TYPE_MESSAGE: { +#if PHP_MAJOR_VERSION < 7 + MessageHeader *submsg = UNBOX(MessageHeader, *(zval**)memory); +#else + MessageHeader *submsg = + (MessageHeader*)((char*)(*(zend_object**)memory) - + XtOffsetOf(MessageHeader, std)); +#endif + putrawsubmsg(submsg, f, &subsink, depth TSRMLS_CC); break; + } #undef T } @@ -1235,9 +1397,8 @@ static const upb_handlers* msgdef_json_serialize_handlers( // ----------------------------------------------------------------------------- PHP_METHOD(Message, serializeToString) { - zval* php_descriptor = get_ce_obj(Z_OBJCE_P(getThis())); Descriptor* desc = - (Descriptor*)zend_object_store_get_object(php_descriptor TSRMLS_CC); + UNBOX_HASHTABLE_VALUE(Descriptor, get_ce_obj(Z_OBJCE_P(getThis()))); stringsink sink; stringsink_init(&sink); @@ -1253,7 +1414,7 @@ PHP_METHOD(Message, serializeToString) { putmsg(getThis(), desc, upb_pb_encoder_input(encoder), 0 TSRMLS_CC); - RETVAL_STRINGL(sink.ptr, sink.len, 1); + PHP_PROTO_RETVAL_STRINGL(sink.ptr, sink.len, 1); stackenv_uninit(&se); stringsink_uninit(&sink); @@ -1261,13 +1422,13 @@ PHP_METHOD(Message, serializeToString) { } PHP_METHOD(Message, mergeFromString) { - zval* php_descriptor = get_ce_obj(Z_OBJCE_P(getThis())); Descriptor* desc = - (Descriptor*)zend_object_store_get_object(php_descriptor TSRMLS_CC); - MessageHeader* msg = zend_object_store_get_object(getThis() TSRMLS_CC); + UNBOX_HASHTABLE_VALUE(Descriptor, get_ce_obj(Z_OBJCE_P(getThis()))); + MessageHeader* msg = UNBOX(MessageHeader, getThis()); char *data = NULL; - int data_len; + PHP_PROTO_SIZE data_len; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &data, &data_len) == FAILURE) { return; @@ -1290,9 +1451,8 @@ PHP_METHOD(Message, mergeFromString) { } PHP_METHOD(Message, jsonEncode) { - zval* php_descriptor = get_ce_obj(Z_OBJCE_P(getThis())); Descriptor* desc = - (Descriptor*)zend_object_store_get_object(php_descriptor TSRMLS_CC); + UNBOX_HASHTABLE_VALUE(Descriptor, get_ce_obj(Z_OBJCE_P(getThis()))); zend_bool preserve_proto_fieldnames = false; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", @@ -1314,7 +1474,7 @@ PHP_METHOD(Message, jsonEncode) { putmsg(getThis(), desc, upb_json_printer_input(printer), 0 TSRMLS_CC); - RETVAL_STRINGL(sink.ptr, sink.len, 1); + PHP_PROTO_RETVAL_STRINGL(sink.ptr, sink.len, 1); stackenv_uninit(&se); stringsink_uninit(&sink); @@ -1322,10 +1482,9 @@ PHP_METHOD(Message, jsonEncode) { } PHP_METHOD(Message, jsonDecode) { - zval* php_descriptor = get_ce_obj(Z_OBJCE_P(getThis())); Descriptor* desc = - (Descriptor*)zend_object_store_get_object(php_descriptor TSRMLS_CC); - MessageHeader* msg = zend_object_store_get_object(getThis() TSRMLS_CC); + UNBOX_HASHTABLE_VALUE(Descriptor, get_ce_obj(Z_OBJCE_P(getThis()))); + MessageHeader* msg = UNBOX(MessageHeader, getThis()); char *data = NULL; int data_len; diff --git a/third_party/protobuf/3.2.0/php/ext/google/protobuf/map.c b/third_party/protobuf/3.2.0/php/ext/google/protobuf/map.c index fae152e3fe94e9..a5d48446612da0 100644 --- a/third_party/protobuf/3.2.0/php/ext/google/protobuf/map.c +++ b/third_party/protobuf/3.2.0/php/ext/google/protobuf/map.c @@ -103,16 +103,16 @@ static bool table_key(Map* self, zval* key, *out_length = Z_STRLEN_P(key); break; -#define CASE_TYPE(upb_type, type, c_type, php_type) \ - case UPB_TYPE_##upb_type: { \ - c_type type##_value; \ - if (!protobuf_convert_to_##type(key, &type##_value)) { \ - return false; \ - } \ - native_slot_set(self->key_type, NULL, buf, key TSRMLS_CC); \ - *out_key = buf; \ - *out_length = native_slot_size(self->key_type); \ - break; \ +#define CASE_TYPE(upb_type, type, c_type, php_type) \ + case UPB_TYPE_##upb_type: { \ + c_type type##_value; \ + if (!protobuf_convert_to_##type(key, &type##_value)) { \ + return false; \ + } \ + native_slot_set_by_array(self->key_type, NULL, buf, key TSRMLS_CC); \ + *out_key = buf; \ + *out_length = native_slot_size(self->key_type); \ + break; \ } CASE_TYPE(BOOL, bool, int8_t, BOOL) CASE_TYPE(INT32, int32, int32_t, LONG) @@ -148,7 +148,7 @@ static zend_function_entry map_field_methods[] = { // Forward declare static functions. -static bool map_field_write_dimension(zval *object, zval *key, +static void map_field_write_dimension(zval *object, zval *key, zval *value TSRMLS_DC); // ----------------------------------------------------------------------------- @@ -163,8 +163,7 @@ static void map_begin_internal(Map *map, MapIter *iter) { upb_strtable_begin(&iter->it, &map->table); } -static HashTable *map_field_get_gc(zval *object, zval ***table, - int *n TSRMLS_DC) { +static HashTable *map_field_get_gc(zval *object, CACHED_VALUE **table, int *n) { // TODO(teboring): Unfortunately, zend engine does not support garbage // collection for custom array. We have to use zend engine's native array // instead. @@ -173,111 +172,101 @@ static HashTable *map_field_get_gc(zval *object, zval ***table, return NULL; } -void map_field_init(TSRMLS_D) { - zend_class_entry class_type; - const char* class_name = "Google\\Protobuf\\Internal\\MapField"; - INIT_CLASS_ENTRY_EX(class_type, class_name, strlen(class_name), - map_field_methods); - - map_field_type = zend_register_internal_class(&class_type TSRMLS_CC); - map_field_type->create_object = map_field_create; - - zend_class_implements(map_field_type TSRMLS_CC, 2, spl_ce_ArrayAccess, - spl_ce_Countable); - - map_field_handlers = PEMALLOC(zend_object_handlers); - memcpy(map_field_handlers, zend_get_std_object_handlers(), - sizeof(zend_object_handlers)); - map_field_handlers->write_dimension = map_field_write_dimension; - map_field_handlers->get_gc = map_field_get_gc; +// Define map value element free function. +#if PHP_MAJOR_VERSION < 7 +static inline void php_proto_map_string_release(void *value) { + zval_ptr_dtor(value); } -zend_object_value map_field_create(zend_class_entry *ce TSRMLS_DC) { - zend_object_value retval = {0}; - Map *intern; - - intern = emalloc(sizeof(Map)); - memset(intern, 0, sizeof(Map)); - - zend_object_std_init(&intern->std, ce TSRMLS_CC); - object_properties_init(&intern->std, ce); - - // Table value type is always UINT64: this ensures enough space to store the - // native_slot value. - if (!upb_strtable_init(&intern->table, UPB_CTYPE_UINT64)) { - zend_error(E_USER_ERROR, "Could not allocate table."); +static inline void php_proto_map_object_release(void *value) { + zval_ptr_dtor(value); +} +#else +static inline void php_proto_map_string_release(void *value) { + zend_string* object = *(zend_string**)value; + zend_string_release(object); +} +static inline void php_proto_map_object_release(void *value) { + zend_object* object = *(zend_object**)value; + if(--GC_REFCOUNT(object) == 0) { + zend_objects_store_del(object); } - - retval.handle = zend_objects_store_put( - intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, - (zend_objects_free_object_storage_t)map_field_free, NULL TSRMLS_CC); - retval.handlers = map_field_handlers; - - return retval; } +#endif -void map_field_free(void *object TSRMLS_DC) { - Map *map = (Map *)object; - - switch (map->value_type) { +// Define object free method. +PHP_PROTO_OBJECT_FREE_START(Map, map_field) +MapIter it; +int len; +for (map_begin_internal(intern, &it); !map_done(&it); map_next(&it)) { + upb_value value = map_iter_value(&it, &len); + void *mem = upb_value_memory(&value); + switch (intern->value_type) { case UPB_TYPE_MESSAGE: + php_proto_map_object_release(mem); + break; case UPB_TYPE_STRING: - case UPB_TYPE_BYTES: { - MapIter it; - int len; - for (map_begin_internal(map, &it); !map_done(&it); map_next(&it)) { - upb_value value = map_iter_value(&it, &len); - void *mem = upb_value_memory(&value); - zval_ptr_dtor(mem); - } + case UPB_TYPE_BYTES: + php_proto_map_string_release(mem); break; - } default: break; } - - upb_strtable_uninit(&map->table); - zend_object_std_dtor(&map->std TSRMLS_CC); - efree(object); } - -void map_field_create_with_field(zend_class_entry *ce, const upb_fielddef *field, - zval **map_field TSRMLS_DC) { +upb_strtable_uninit(&intern->table); +PHP_PROTO_OBJECT_FREE_END + +PHP_PROTO_OBJECT_DTOR_START(Map, map_field) +PHP_PROTO_OBJECT_DTOR_END + +// Define object create method. +PHP_PROTO_OBJECT_CREATE_START(Map, map_field) +// Table value type is always UINT64: this ensures enough space to store the +// native_slot value. +if (!upb_strtable_init(&intern->table, UPB_CTYPE_UINT64)) { + zend_error(E_USER_ERROR, "Could not allocate table."); +} +PHP_PROTO_OBJECT_CREATE_END(Map, map_field) + +// Init class entry. +PHP_PROTO_INIT_CLASS_START("Google\\Protobuf\\Internal\\MapField", Map, + map_field) +zend_class_implements(map_field_type TSRMLS_CC, 2, spl_ce_ArrayAccess, + spl_ce_Countable); +map_field_handlers->write_dimension = map_field_write_dimension; +map_field_handlers->get_gc = map_field_get_gc; +PHP_PROTO_INIT_CLASS_END + +void map_field_create_with_field(const zend_class_entry *ce, + const upb_fielddef *field, + CACHED_VALUE *map_field PHP_PROTO_TSRMLS_DC) { const upb_fielddef *key_field = map_field_key(field); const upb_fielddef *value_field = map_field_value(field); map_field_create_with_type( ce, upb_fielddef_type(key_field), upb_fielddef_type(value_field), - field_type_class(value_field TSRMLS_CC), map_field TSRMLS_CC); + field_type_class(value_field TSRMLS_CC), map_field PHP_PROTO_TSRMLS_CC); } -void map_field_create_with_type(zend_class_entry *ce, upb_fieldtype_t key_type, +void map_field_create_with_type(const zend_class_entry *ce, + upb_fieldtype_t key_type, upb_fieldtype_t value_type, const zend_class_entry *msg_ce, - zval **map_field TSRMLS_DC) { - MAKE_STD_ZVAL(*map_field); - Z_TYPE_PP(map_field) = IS_OBJECT; - Z_OBJVAL_PP(map_field) = - map_field_type->create_object(map_field_type TSRMLS_CC); - - Map* intern = - (Map*)zend_object_store_get_object(*map_field TSRMLS_CC); - + CACHED_VALUE *map_field PHP_PROTO_TSRMLS_DC) { + CREATE_OBJ_ON_ALLOCATED_ZVAL_PTR(CACHED_PTR_TO_ZVAL_PTR(map_field), + map_field_type); + Map *intern = UNBOX(Map, CACHED_TO_ZVAL_PTR(*map_field)); intern->key_type = key_type; intern->value_type = value_type; intern->msg_ce = msg_ce; } -static void map_field_free_element(void *object) { -} - // ----------------------------------------------------------------------------- // MapField Handlers // ----------------------------------------------------------------------------- static bool map_field_read_dimension(zval *object, zval *key, int type, - zval **retval TSRMLS_DC) { - Map *intern = - (Map *)zend_object_store_get_object(object TSRMLS_CC); + CACHED_VALUE *retval TSRMLS_DC) { + Map *intern = UNBOX(Map, object); char keybuf[TABLE_KEY_BUF_LENGTH]; const char* keyval = NULL; @@ -292,7 +281,7 @@ static bool map_field_read_dimension(zval *object, zval *key, int type, if (upb_strtable_lookup2(&intern->table, keyval, length, &v)) { void* mem = upb_value_memory(&v); - native_slot_get(intern->value_type, mem, retval TSRMLS_CC); + native_slot_get_by_array(intern->value_type, mem, retval TSRMLS_CC); return true; } else { zend_error(E_USER_ERROR, "Given key doesn't exist."); @@ -310,9 +299,9 @@ bool map_index_set(Map *intern, const char* keyval, int length, upb_value v) { return true; } -static bool map_field_write_dimension(zval *object, zval *key, +static void map_field_write_dimension(zval *object, zval *key, zval *value TSRMLS_DC) { - Map *intern = (Map *)zend_object_store_get_object(object TSRMLS_CC); + Map *intern = UNBOX(Map, object); char keybuf[TABLE_KEY_BUF_LENGTH]; const char* keyval = NULL; @@ -320,14 +309,14 @@ static bool map_field_write_dimension(zval *object, zval *key, upb_value v; void* mem; if (!table_key(intern, key, keybuf, &keyval, &length TSRMLS_CC)) { - return false; + return; } mem = upb_value_memory(&v); memset(mem, 0, native_slot_size(intern->value_type)); - if (!native_slot_set(intern->value_type, intern->msg_ce, mem, - value TSRMLS_CC)) { - return false; + if (!native_slot_set_by_array(intern->value_type, intern->msg_ce, mem, + value TSRMLS_CC)) { + return; } #ifndef NDEBUG v.ctype = UPB_CTYPE_UINT64; @@ -337,14 +326,12 @@ static bool map_field_write_dimension(zval *object, zval *key, upb_strtable_remove2(&intern->table, keyval, length, NULL); if (!upb_strtable_insert2(&intern->table, keyval, length, v)) { zend_error(E_USER_ERROR, "Could not insert into table"); - return false; + return; } - - return true; } static bool map_field_unset_dimension(zval *object, zval *key TSRMLS_DC) { - Map *intern = (Map *)zend_object_store_get_object(object TSRMLS_CC); + Map *intern = UNBOX(Map, object); char keybuf[TABLE_KEY_BUF_LENGTH]; const char* keyval = NULL; @@ -375,8 +362,7 @@ PHP_METHOD(MapField, __construct) { return; } - Map* intern = - (Map*)zend_object_store_get_object(getThis() TSRMLS_CC); + Map *intern = UNBOX(Map, getThis()); intern->key_type = to_fieldtype(key_type); intern->value_type = to_fieldtype(value_type); intern->msg_ce = klass; @@ -404,7 +390,7 @@ PHP_METHOD(MapField, offsetExists) { return; } - Map *intern = (Map *)zend_object_store_get_object(getThis() TSRMLS_CC); + Map *intern = UNBOX(Map, getThis()); char keybuf[TABLE_KEY_BUF_LENGTH]; const char* keyval = NULL; @@ -427,7 +413,7 @@ PHP_METHOD(MapField, offsetGet) { return; } map_field_read_dimension(getThis(), index, BP_VAR_R, - return_value_ptr TSRMLS_CC); + ZVAL_PTR_TO_CACHED_PTR(return_value) TSRMLS_CC); } PHP_METHOD(MapField, offsetSet) { @@ -449,8 +435,7 @@ PHP_METHOD(MapField, offsetUnset) { } PHP_METHOD(MapField, count) { - Map *intern = - (Map *)zend_object_store_get_object(getThis() TSRMLS_CC); + Map *intern = UNBOX(Map, getThis()); if (zend_parse_parameters_none() == FAILURE) { return; diff --git a/third_party/protobuf/3.2.0/php/ext/google/protobuf/message.c b/third_party/protobuf/3.2.0/php/ext/google/protobuf/message.c index 59ce6ae6d944ca..cabc39879e5b30 100644 --- a/third_party/protobuf/3.2.0/php/ext/google/protobuf/message.c +++ b/third_party/protobuf/3.2.0/php/ext/google/protobuf/message.c @@ -53,40 +53,64 @@ static zend_function_entry message_methods[] = { // Forward declare static functions. +#if PHP_MAJOR_VERSION < 7 static void message_set_property(zval* object, zval* member, zval* value, - const zend_literal* key TSRMLS_DC); + php_proto_zend_literal key TSRMLS_DC); static zval* message_get_property(zval* object, zval* member, int type, const zend_literal* key TSRMLS_DC); static zval** message_get_property_ptr_ptr(zval* object, zval* member, int type, - const zend_literal* key TSRMLS_DC); -static HashTable* message_get_properties(zval* object TSRMLS_DC); + php_proto_zend_literal key TSRMLS_DC); static HashTable* message_get_gc(zval* object, zval*** table, int* n TSRMLS_DC); - -static zend_object_value message_create(zend_class_entry* ce TSRMLS_DC); -static void message_free(void* object TSRMLS_DC); +#else +static void message_set_property(zval* object, zval* member, zval* value, + void** cache_slot); +static zval* message_get_property(zval* object, zval* member, int type, + void** cache_slot, zval* rv); +static zval* message_get_property_ptr_ptr(zval* object, zval* member, int type, + void** cache_slot); +static HashTable* message_get_gc(zval* object, zval** table, int* n); +#endif +static HashTable* message_get_properties(zval* object TSRMLS_DC); // ----------------------------------------------------------------------------- // PHP Message Handlers // ----------------------------------------------------------------------------- -void message_init(TSRMLS_D) { - zend_class_entry class_type; - INIT_CLASS_ENTRY(class_type, "Google\\Protobuf\\Internal\\Message", - message_methods); - message_type = zend_register_internal_class(&class_type TSRMLS_CC); - - message_handlers = PEMALLOC(zend_object_handlers); - memcpy(message_handlers, zend_get_std_object_handlers(), - sizeof(zend_object_handlers)); +// Define object free method. +PHP_PROTO_OBJECT_FREE_START(MessageHeader, message) + FREE(intern->data); +PHP_PROTO_OBJECT_FREE_END + +PHP_PROTO_OBJECT_DTOR_START(MessageHeader, message) +PHP_PROTO_OBJECT_DTOR_END + +// Define object create method. +PHP_PROTO_OBJECT_CREATE_START(MessageHeader, message) +// Because php call this create func before calling the sub-message's +// constructor defined in PHP, it's possible that the decriptor of this class +// hasn't been added to descritpor pool (when the class is first +// instantiated). In that case, we will defer the initialization of the custom +// data to the parent Message's constructor, which will be called by +// sub-message's constructors after the descriptor has been added. +PHP_PROTO_OBJECT_CREATE_END(MessageHeader, message) + +// Init class entry. +PHP_PROTO_INIT_CLASS_START("Google\\Protobuf\\Internal\\Message", + MessageHeader, message) message_handlers->write_property = message_set_property; message_handlers->read_property = message_get_property; message_handlers->get_property_ptr_ptr = message_get_property_ptr_ptr; message_handlers->get_properties = message_get_properties; message_handlers->get_gc = message_get_gc; -} +PHP_PROTO_INIT_CLASS_END +#if PHP_MAJOR_VERSION < 7 static void message_set_property(zval* object, zval* member, zval* value, - const zend_literal* key TSRMLS_DC) { + php_proto_zend_literal key TSRMLS_DC) { +#else +static void message_set_property(zval* object, zval* member, zval* value, + void** cache_slot) { +#endif if (Z_TYPE_P(member) != IS_STRING) { zend_error(E_USER_ERROR, "Unexpected type for field name"); return; @@ -100,7 +124,7 @@ static void message_set_property(zval* object, zval* member, zval* value, const upb_fielddef* field; - MessageHeader* self = zend_object_store_get_object(object TSRMLS_CC); + MessageHeader* self = UNBOX(MessageHeader, object); field = upb_msgdef_ntofz(self->descriptor->msgdef, Z_STRVAL_P(member)); if (field == NULL) { @@ -110,46 +134,55 @@ static void message_set_property(zval* object, zval* member, zval* value, layout_set(self->descriptor->layout, self, field, value TSRMLS_CC); } +#if PHP_MAJOR_VERSION < 7 static zval* message_get_property(zval* object, zval* member, int type, const zend_literal* key TSRMLS_DC) { +#else +static zval* message_get_property(zval* object, zval* member, int type, + void** cache_slot, zval* rv) { +#endif if (Z_TYPE_P(member) != IS_STRING) { zend_error(E_USER_ERROR, "Property name has to be a string."); - return EG(uninitialized_zval_ptr); + return PHP_PROTO_GLOBAL_UNINITIALIZED_ZVAL; } if (Z_OBJCE_P(object) != EG(scope)) { // User cannot get property directly (e.g., $a = $m->a) zend_error(E_USER_ERROR, "Cannot access private property."); - return EG(uninitialized_zval_ptr); + return PHP_PROTO_GLOBAL_UNINITIALIZED_ZVAL; } - zend_property_info* property_info = NULL; - - // All properties should have been declared in the generated code and have - // corresponding zvals in properties_table. - ulong h = zend_get_hash_value(Z_STRVAL_P(member), Z_STRLEN_P(member) + 1); - if (zend_hash_quick_find(&Z_OBJCE_P(object)->properties_info, - Z_STRVAL_P(member), Z_STRLEN_P(member) + 1, h, - (void**)&property_info) != SUCCESS) { - zend_error(E_USER_ERROR, "Property does not exist."); - return EG(uninitialized_zval_ptr); - } - - MessageHeader* self = - (MessageHeader*)zend_object_store_get_object(object TSRMLS_CC); - + MessageHeader* self = UNBOX(MessageHeader, object); const upb_fielddef* field; field = upb_msgdef_ntofz(self->descriptor->msgdef, Z_STRVAL_P(member)); if (field == NULL) { - return EG(uninitialized_zval_ptr); + return PHP_PROTO_GLOBAL_UNINITIALIZED_ZVAL; } + + zend_property_info* property_info; +#if PHP_MAJOR_VERSION < 7 + property_info = + zend_get_property_info(Z_OBJCE_P(object), member, true TSRMLS_CC); return layout_get( self->descriptor->layout, message_data(self), field, &Z_OBJ_P(object)->properties_table[property_info->offset] TSRMLS_CC); +#else + property_info = + zend_get_property_info(Z_OBJCE_P(object), Z_STR_P(member), true); + return layout_get( + self->descriptor->layout, message_data(self), field, + OBJ_PROP(Z_OBJ_P(object), property_info->offset) TSRMLS_CC); +#endif } +#if PHP_MAJOR_VERSION < 7 static zval** message_get_property_ptr_ptr(zval* object, zval* member, int type, - const zend_literal* key TSRMLS_DC) { + php_proto_zend_literal key + TSRMLS_DC) { +#else +static zval* message_get_property_ptr_ptr(zval* object, zval* member, int type, + void** cache_slot) { +#endif return NULL; } @@ -157,68 +190,37 @@ static HashTable* message_get_properties(zval* object TSRMLS_DC) { return NULL; } -static HashTable* message_get_gc(zval* object, zval*** table, int* n TSRMLS_DC) { - zend_object* zobj = Z_OBJ_P(object); - *table = zobj->properties_table; - *n = zobj->ce->default_properties_count; - return NULL; +static HashTable* message_get_gc(zval* object, CACHED_VALUE** table, + int* n TSRMLS_DC) { + zend_object* zobj = Z_OBJ_P(object); + *table = zobj->properties_table; + *n = zobj->ce->default_properties_count; + return NULL; } // ----------------------------------------------------------------------------- // C Message Utilities // ----------------------------------------------------------------------------- -void* message_data(void* msg) { - return ((uint8_t*)msg) + sizeof(MessageHeader); +void* message_data(MessageHeader* msg) { + return msg->data; } -static void message_free(void* object TSRMLS_DC) { - MessageHeader* msg = (MessageHeader*)object; - int i; - - for (i = 0; i < msg->std.ce->default_properties_count; i++) { - zval_ptr_dtor(&msg->std.properties_table[i]); - } - efree(msg->std.properties_table); - efree(msg); -} - -static zend_object_value message_create(zend_class_entry* ce TSRMLS_DC) { - zend_object_value return_value; - - zval* php_descriptor = get_ce_obj(ce); - - Descriptor* desc = zend_object_store_get_object(php_descriptor TSRMLS_CC); - MessageHeader* msg = (MessageHeader*)ALLOC_N( - uint8_t, sizeof(MessageHeader) + desc->layout->size); - memset(message_data(msg), 0, desc->layout->size); - +void custom_data_init(const zend_class_entry* ce, + MessageHeader* intern PHP_PROTO_TSRMLS_DC) { + Descriptor* desc = UNBOX_HASHTABLE_VALUE(Descriptor, get_ce_obj(ce)); + intern->data = ALLOC_N(uint8_t, desc->layout->size); + memset(message_data(intern), 0, desc->layout->size); // We wrap first so that everything in the message object is GC-rooted in // case a collection happens during object creation in layout_init(). - msg->descriptor = desc; - - zend_object_std_init(&msg->std, ce TSRMLS_CC); - object_properties_init(&msg->std, ce); - layout_init(desc->layout, message_data(msg), - msg->std.properties_table TSRMLS_CC); - - return_value.handle = zend_objects_store_put( - msg, (zend_objects_store_dtor_t)zend_objects_destroy_object, message_free, - NULL TSRMLS_CC); - - return_value.handlers = message_handlers; - return return_value; + intern->descriptor = desc; + layout_init(desc->layout, message_data(intern), + intern->std.properties_table PHP_PROTO_TSRMLS_CC); } -void message_create_with_type(zend_class_entry* ce, zval** message TSRMLS_DC) { - MAKE_STD_ZVAL(*message); - Z_TYPE_PP(message) = IS_OBJECT; - Z_OBJVAL_PP(message) = ce->create_object(ce TSRMLS_CC); - Z_DELREF_PP(message); -} - -void build_class_from_descriptor(zval* php_descriptor TSRMLS_DC) { - Descriptor* desc = UNBOX(Descriptor, php_descriptor); +void build_class_from_descriptor( + PHP_PROTO_HASHTABLE_VALUE php_descriptor TSRMLS_DC) { + Descriptor* desc = UNBOX_HASHTABLE_VALUE(Descriptor, php_descriptor); // Map entries don't have existing php class. if (upb_msgdef_mapentry(desc->msgdef)) { @@ -243,26 +245,18 @@ void build_class_from_descriptor(zval* php_descriptor TSRMLS_DC) { // modified. As a result, the first created instance will be a normal zend // object. Here, we manually modify it to our message in such a case. PHP_METHOD(Message, __construct) { - if (Z_OBJVAL_P(getThis()).handlers != message_handlers) { - zend_class_entry* ce = Z_OBJCE_P(getThis()); - zval_dtor(getThis()); - Z_OBJVAL_P(getThis()) = message_create(ce TSRMLS_CC); + zend_class_entry* ce = Z_OBJCE_P(getThis()); + if (EXPECTED(class_added(ce))) { + MessageHeader* intern = UNBOX(MessageHeader, getThis()); + custom_data_init(ce, intern PHP_PROTO_TSRMLS_CC); } } PHP_METHOD(Message, clear) { - MessageHeader* msg = - (MessageHeader*)zend_object_store_get_object(getThis() TSRMLS_CC); + MessageHeader* msg = UNBOX(MessageHeader, getThis()); Descriptor* desc = msg->descriptor; zend_class_entry* ce = desc->klass; - int i; - - for (i = 0; i < msg->std.ce->default_properties_count; i++) { - zval_ptr_dtor(&msg->std.properties_table[i]); - } - efree(msg->std.properties_table); - zend_object_std_init(&msg->std, ce TSRMLS_CC); object_properties_init(&msg->std, ce); layout_init(desc->layout, message_data(msg), msg->std.properties_table TSRMLS_CC); @@ -275,10 +269,8 @@ PHP_METHOD(Message, mergeFrom) { return; } - MessageHeader* from = - (MessageHeader*)zend_object_store_get_object(value TSRMLS_CC); - MessageHeader* to = - (MessageHeader*)zend_object_store_get_object(getThis() TSRMLS_CC); + MessageHeader* from = UNBOX(MessageHeader, value); + MessageHeader* to = UNBOX(MessageHeader, getThis()); if(from->descriptor != to->descriptor) { zend_error(E_USER_ERROR, "Cannot merge messages with different class."); @@ -289,36 +281,37 @@ PHP_METHOD(Message, mergeFrom) { } PHP_METHOD(Message, readOneof) { - long index; + PHP_PROTO_LONG index; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) { return; } - MessageHeader* msg = - (MessageHeader*)zend_object_store_get_object(getThis() TSRMLS_CC); + MessageHeader* msg = UNBOX(MessageHeader, getThis()); const upb_fielddef* field = upb_msgdef_itof(msg->descriptor->msgdef, index); int property_cache_index = msg->descriptor->layout->fields[upb_fielddef_index(field)].cache_index; - zval** cache_ptr = &(msg->std.properties_table)[property_cache_index]; + zval* property_ptr = OBJ_PROP(Z_OBJ_P(getThis()), property_cache_index); + // Unlike singular fields, oneof fields share cached property. So we cannot + // let lay_get modify the cached property. Instead, we pass in the return + // value directly. layout_get(msg->descriptor->layout, message_data(msg), field, - &return_value TSRMLS_CC); + ZVAL_PTR_TO_CACHED_PTR(return_value) TSRMLS_CC); } PHP_METHOD(Message, writeOneof) { - long index; + PHP_PROTO_LONG index; zval* value; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lz", &index, &value) == FAILURE) { return; } - MessageHeader* msg = - (MessageHeader*)zend_object_store_get_object(getThis() TSRMLS_CC); + MessageHeader* msg = UNBOX(MessageHeader, getThis()); const upb_fielddef* field = upb_msgdef_itof(msg->descriptor->msgdef, index); @@ -327,19 +320,18 @@ PHP_METHOD(Message, writeOneof) { PHP_METHOD(Message, whichOneof) { char* oneof_name; - int length; + PHP_PROTO_SIZE length; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &oneof_name, &length) == FAILURE) { return; } - MessageHeader* msg = - (MessageHeader*)zend_object_store_get_object(getThis() TSRMLS_CC); + MessageHeader* msg = UNBOX(MessageHeader, getThis()); const upb_oneofdef* oneof = upb_msgdef_ntoo(msg->descriptor->msgdef, oneof_name, length); const char* oneof_case_name = layout_get_oneof_case( msg->descriptor->layout, message_data(msg), oneof TSRMLS_CC); - RETURN_STRING(oneof_case_name, 1); + PHP_PROTO_RETURN_STRING(oneof_case_name, 1); } diff --git a/third_party/protobuf/3.2.0/php/ext/google/protobuf/package.xml b/third_party/protobuf/3.2.0/php/ext/google/protobuf/package.xml index aac73d0511cfba..a2a8e0668c0bec 100644 --- a/third_party/protobuf/3.2.0/php/ext/google/protobuf/package.xml +++ b/third_party/protobuf/3.2.0/php/ext/google/protobuf/package.xml @@ -13,16 +13,16 @@ 2017-01-13 - 3.2.0a1 - 3.2.0a1 + 3.3.0 + 3.3.0 - alpha - alpha + stable + stable 3-Clause BSD License -Second alpha release. +GA release.

@@ -87,5 +87,21 @@ First alpha release Second alpha release. + + + 3.3.0 + 3.3.0 + + + stable + stable + + 2017-04-28 + + 3-Clause BSD License + +GA release. + + diff --git a/third_party/protobuf/3.2.0/php/ext/google/protobuf/protobuf.c b/third_party/protobuf/3.2.0/php/ext/google/protobuf/protobuf.c index ea85b999f88aa4..6a848b278ed6c9 100644 --- a/third_party/protobuf/3.2.0/php/ext/google/protobuf/protobuf.c +++ b/third_party/protobuf/3.2.0/php/ext/google/protobuf/protobuf.c @@ -55,39 +55,60 @@ static void add_to_table(HashTable* t, const void* def, void* value) { uint nIndex = (ulong)def & t->nTableMask; zval* pDest = NULL; - zend_hash_index_update(t, (zend_ulong)def, &value, sizeof(zval*), (void**)&pDest); + php_proto_zend_hash_index_update(t, (zend_ulong)def, &value, sizeof(zval*), + (void**)&pDest); } static void* get_from_table(const HashTable* t, const void* def) { void** value; - if (zend_hash_index_find(t, (zend_ulong)def, (void**)&value) == FAILURE) { + if (php_proto_zend_hash_index_find(t, (zend_ulong)def, (void**)&value) == + FAILURE) { zend_error(E_ERROR, "PHP object not found for given definition.\n"); return NULL; } return *value; } +static bool exist_in_table(const HashTable* t, const void* def) { + void** value; + return (php_proto_zend_hash_index_find(t, (zend_ulong)def, (void**)&value) == + SUCCESS); +} + static void add_to_list(HashTable* t, void* value) { zval* pDest = NULL; - zend_hash_next_index_insert(t, &value, sizeof(void*), (void**)&pDest); + php_proto_zend_hash_next_index_insert(t, &value, sizeof(void*), + (void**)&pDest); } -void add_def_obj(const void* def, zval* value) { +void add_def_obj(const void* def, PHP_PROTO_HASHTABLE_VALUE value) { +#if PHP_MAJOR_VERSION < 7 Z_ADDREF_P(value); +#else + ++GC_REFCOUNT(value); +#endif add_to_table(upb_def_to_php_obj_map, def, value); } -zval* get_def_obj(const void* def) { - return (zval*)get_from_table(upb_def_to_php_obj_map, def); +PHP_PROTO_HASHTABLE_VALUE get_def_obj(const void* def) { + return (PHP_PROTO_HASHTABLE_VALUE)get_from_table(upb_def_to_php_obj_map, def); } -void add_ce_obj(const void* ce, zval* value) { +void add_ce_obj(const void* ce, PHP_PROTO_HASHTABLE_VALUE value) { +#if PHP_MAJOR_VERSION < 7 Z_ADDREF_P(value); +#else + ++GC_REFCOUNT(value); +#endif add_to_table(ce_to_php_obj_map, ce, value); } -zval* get_ce_obj(const void* ce) { - return (zval*)get_from_table(ce_to_php_obj_map, ce); +PHP_PROTO_HASHTABLE_VALUE get_ce_obj(const void* ce) { + return (PHP_PROTO_HASHTABLE_VALUE)get_from_table(ce_to_php_obj_map, ce); +} + +bool class_added(const void* ce) { + return exist_in_table(ce_to_php_obj_map, ce); } // ----------------------------------------------------------------------------- @@ -125,12 +146,23 @@ static PHP_GINIT_FUNCTION(protobuf) { static PHP_GSHUTDOWN_FUNCTION(protobuf) { } +#if PHP_MAJOR_VERSION >= 7 +static void php_proto_hashtable_descriptor_release(zval* value) { + void* ptr = Z_PTR_P(value); + zend_object* object = *(zend_object**)ptr; + if(--GC_REFCOUNT(object) == 0) { + zend_objects_store_del(object); + } + efree(ptr); +} +#endif + static PHP_RINIT_FUNCTION(protobuf) { ALLOC_HASHTABLE(upb_def_to_php_obj_map); - zend_hash_init(upb_def_to_php_obj_map, 16, NULL, ZVAL_PTR_DTOR, 0); + zend_hash_init(upb_def_to_php_obj_map, 16, NULL, HASHTABLE_VALUE_DTOR, 0); ALLOC_HASHTABLE(ce_to_php_obj_map); - zend_hash_init(ce_to_php_obj_map, 16, NULL, ZVAL_PTR_DTOR, 0); + zend_hash_init(ce_to_php_obj_map, 16, NULL, HASHTABLE_VALUE_DTOR, 0); generated_pool = NULL; generated_pool_php = NULL; @@ -145,10 +177,12 @@ static PHP_RSHUTDOWN_FUNCTION(protobuf) { zend_hash_destroy(ce_to_php_obj_map); FREE_HASHTABLE(ce_to_php_obj_map); +#if PHP_MAJOR_VERSION < 7 if (generated_pool_php != NULL) { zval_dtor(generated_pool_php); FREE_ZVAL(generated_pool_php); } +#endif return 0; } @@ -170,6 +204,7 @@ static PHP_MINIT_FUNCTION(protobuf) { static PHP_MSHUTDOWN_FUNCTION(protobuf) { PEFREE(message_handlers); PEFREE(repeated_field_handlers); + PEFREE(repeated_field_iter_handlers); PEFREE(map_field_handlers); return 0; diff --git a/third_party/protobuf/3.2.0/php/ext/google/protobuf/protobuf.h b/third_party/protobuf/3.2.0/php/ext/google/protobuf/protobuf.h index 2287f7e617be7d..e6d42ebacc9a97 100644 --- a/third_party/protobuf/3.2.0/php/ext/google/protobuf/protobuf.h +++ b/third_party/protobuf/3.2.0/php/ext/google/protobuf/protobuf.h @@ -37,11 +37,328 @@ #include "upb.h" #define PHP_PROTOBUF_EXTNAME "protobuf" -#define PHP_PROTOBUF_VERSION "3.2.0a1" +#define PHP_PROTOBUF_VERSION "3.3.0" #define MAX_LENGTH_OF_INT64 20 #define SIZEOF_INT64 8 +// ----------------------------------------------------------------------------- +// PHP7 Wrappers +// ---------------------------------------------------------------------------- + +#if PHP_MAJOR_VERSION < 7 + +#define php_proto_zend_literal const zend_literal* +#define PHP_PROTO_CASE_IS_BOOL IS_BOOL +#define PHP_PROTO_SIZE int +#define PHP_PROTO_LONG long +#define PHP_PROTO_TSRMLS_DC TSRMLS_DC +#define PHP_PROTO_TSRMLS_CC TSRMLS_CC + +// PHP String + +#define PHP_PROTO_ZVAL_STRING(zval_ptr, s, copy) \ + ZVAL_STRING(zval_ptr, s, copy) +#define PHP_PROTO_ZVAL_STRINGL(zval_ptr, s, len, copy) \ + ZVAL_STRINGL(zval_ptr, s, len, copy) +#define PHP_PROTO_RETURN_STRING(s, copy) RETURN_STRING(s, copy) +#define PHP_PROTO_RETURN_STRINGL(s, len, copy) RETURN_STRINGL(s, len, copy) +#define PHP_PROTO_RETVAL_STRINGL(s, len, copy) RETVAL_STRINGL(s, len, copy) +#define php_proto_zend_make_printable_zval(from, to) \ + { \ + int use_copy; \ + zend_make_printable_zval(from, to, &use_copy); \ + } + +// PHP Array + +#define PHP_PROTO_HASH_OF(array) Z_ARRVAL_P(array) + +#define php_proto_zend_hash_index_update(ht, h, pData, nDataSize, pDest) \ + zend_hash_index_update(ht, h, pData, nDataSize, pDest) + +#define php_proto_zend_hash_index_find(ht, h, pDest) \ + zend_hash_index_find(ht, h, pDest) + +#define php_proto_zend_hash_next_index_insert(ht, pData, nDataSize, pDest) \ + zend_hash_next_index_insert(ht, pData, nDataSize, pDest) + +#define php_proto_zend_hash_get_current_data_ex(ht, pDest, pos) \ + zend_hash_get_current_data_ex(ht, pDest, pos) + +// PHP Object + +#define PHP_PROTO_WRAP_OBJECT_START(name) \ + struct name { \ + zend_object std; +#define PHP_PROTO_WRAP_OBJECT_END \ + }; + +#define PHP_PROTO_INIT_CLASS_START(CLASSNAME, CAMELNAME, LOWWERNAME) \ + void LOWWERNAME##_init(TSRMLS_D) { \ + zend_class_entry class_type; \ + const char* class_name = CLASSNAME; \ + INIT_CLASS_ENTRY_EX(class_type, CLASSNAME, strlen(CLASSNAME), \ + LOWWERNAME##_methods); \ + LOWWERNAME##_type = zend_register_internal_class(&class_type TSRMLS_CC); \ + LOWWERNAME##_type->create_object = LOWWERNAME##_create; \ + LOWWERNAME##_handlers = PEMALLOC(zend_object_handlers); \ + memcpy(LOWWERNAME##_handlers, zend_get_std_object_handlers(), \ + sizeof(zend_object_handlers)); +#define PHP_PROTO_INIT_CLASS_END \ + } + +#define PHP_PROTO_OBJECT_CREATE_START(NAME, LOWWERNAME) \ + static zend_object_value LOWWERNAME##_create( \ + zend_class_entry* ce TSRMLS_DC) { \ + PHP_PROTO_ALLOC_CLASS_OBJECT(NAME, ce); \ + zend_object_std_init(&intern->std, ce TSRMLS_CC); \ + object_properties_init(&intern->std, ce); +#define PHP_PROTO_OBJECT_CREATE_END(NAME, LOWWERNAME) \ + PHP_PROTO_FREE_CLASS_OBJECT(NAME, LOWWERNAME##_free, LOWWERNAME##_handlers); \ + } + +#define PHP_PROTO_OBJECT_FREE_START(classname, lowername) \ + void lowername##_free(void* object TSRMLS_DC) { \ + classname* intern = object; +#define PHP_PROTO_OBJECT_FREE_END \ + zend_object_std_dtor(&intern->std TSRMLS_CC); \ + efree(intern); \ + } + +#define PHP_PROTO_OBJECT_DTOR_START(classname, lowername) +#define PHP_PROTO_OBJECT_DTOR_END + +#define CACHED_VALUE zval* +#define CACHED_TO_ZVAL_PTR(VALUE) (VALUE) +#define CACHED_PTR_TO_ZVAL_PTR(VALUE) (*VALUE) +#define ZVAL_PTR_TO_CACHED_PTR(VALUE) (&VALUE) + +#define CREATE_OBJ_ON_ALLOCATED_ZVAL_PTR(zval_ptr, class_type) \ + ZVAL_OBJ(zval_ptr, class_type->create_object(class_type TSRMLS_CC)); + +#define PHP_PROTO_SEPARATE_ZVAL_IF_NOT_REF(value) \ + SEPARATE_ZVAL_IF_NOT_REF(value) + +#define PHP_PROTO_GLOBAL_UNINITIALIZED_ZVAL EG(uninitialized_zval_ptr) + +#define OBJ_PROP(PROPERTIES, OFFSET) (PROPERTIES)->properties_table[OFFSET] + +#define php_proto_zval_ptr_dtor(zval_ptr) \ + zval_ptr_dtor(&(zval_ptr)) + +#define PHP_PROTO_ALLOC_CLASS_OBJECT(class_object, class_type) \ + class_object* intern; \ + intern = (class_object*)emalloc(sizeof(class_object)); \ + memset(intern, 0, sizeof(class_object)); + +#define PHP_PROTO_FREE_CLASS_OBJECT(class_object, class_object_free, handler) \ + zend_object_value retval = {0}; \ + retval.handle = zend_objects_store_put( \ + intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, \ + class_object_free, NULL TSRMLS_CC); \ + retval.handlers = handler; \ + return retval; + +#define PHP_PROTO_ALLOC_ARRAY(zval_ptr) \ + ALLOC_HASHTABLE(Z_ARRVAL_P(zval_ptr)); \ + Z_TYPE_P(zval_ptr) = IS_ARRAY; + +#define ZVAL_OBJ(zval_ptr, call_create) \ + Z_TYPE_P(zval_ptr) = IS_OBJECT; \ + Z_OBJVAL_P(zval_ptr) = call_create; + +#define UNBOX(class_name, val) \ + (class_name*)zend_object_store_get_object(val TSRMLS_CC); + +#define UNBOX_HASHTABLE_VALUE(class_name, val) UNBOX(class_name, val) + +#define HASHTABLE_VALUE_DTOR ZVAL_PTR_DTOR + +#define PHP_PROTO_HASHTABLE_VALUE zval* + +#define CREATE_HASHTABLE_VALUE(OBJ, WRAPPED_OBJ, OBJ_TYPE, OBJ_CLASS_ENTRY) \ + OBJ_TYPE* OBJ; \ + PHP_PROTO_HASHTABLE_VALUE WRAPPED_OBJ; \ + MAKE_STD_ZVAL(WRAPPED_OBJ); \ + ZVAL_OBJ(WRAPPED_OBJ, \ + OBJ_CLASS_ENTRY->create_object(OBJ_CLASS_ENTRY TSRMLS_CC)); \ + OBJ = UNBOX_HASHTABLE_VALUE(OBJ_TYPE, WRAPPED_OBJ); \ + Z_DELREF_P(desc_php); + +#define PHP_PROTO_CE_DECLARE zend_class_entry** +#define PHP_PROTO_CE_UNREF(ce) (*ce) + +#define php_proto_zend_lookup_class(name, name_length, ce) \ + zend_lookup_class(name, name_length, ce TSRMLS_CC) + +#else // PHP_MAJOR_VERSION >= 7 + +#define php_proto_zend_literal void** +#define PHP_PROTO_CASE_IS_BOOL IS_TRUE: case IS_FALSE +#define PHP_PROTO_SIZE size_t +#define PHP_PROTO_LONG zend_long +#define PHP_PROTO_TSRMLS_DC +#define PHP_PROTO_TSRMLS_CC + +// PHP String + +#define PHP_PROTO_ZVAL_STRING(zval_ptr, s, copy) \ + ZVAL_STRING(zval_ptr, s) +#define PHP_PROTO_ZVAL_STRINGL(zval_ptr, s, len, copy) \ + ZVAL_STRINGL(zval_ptr, s, len) +#define PHP_PROTO_RETURN_STRING(s, copy) RETURN_STRING(s) +#define PHP_PROTO_RETURN_STRINGL(s, len, copy) RETURN_STRINGL(s, len) +#define PHP_PROTO_RETVAL_STRINGL(s, len, copy) RETVAL_STRINGL(s, len) +#define php_proto_zend_make_printable_zval(from, to) \ + zend_make_printable_zval(from, to) + +// PHP Array + +#define PHP_PROTO_HASH_OF(array) Z_ARRVAL_P(&array) + +static inline int php_proto_zend_hash_index_update(HashTable* ht, ulong h, + void* pData, uint nDataSize, + void** pDest) { + void* result = NULL; + result = zend_hash_index_update_mem(ht, h, pData, nDataSize); + if (pDest != NULL) *pDest = result; + return result != NULL ? SUCCESS : FAILURE; +} + +static inline int php_proto_zend_hash_index_find(const HashTable* ht, ulong h, + void** pDest) { + void* result = NULL; + result = zend_hash_index_find_ptr(ht, h); + if (pDest != NULL) *pDest = result; + return result != NULL ? SUCCESS : FAILURE; +} + +static inline int php_proto_zend_hash_next_index_insert(HashTable* ht, + void* pData, + uint nDataSize, + void** pDest) { + void* result = NULL; + result = zend_hash_next_index_insert_mem(ht, pData, nDataSize); + if (pDest != NULL) *pDest = result; + return result != NULL ? SUCCESS : FAILURE; +} + +static inline int php_proto_zend_hash_get_current_data_ex(HashTable* ht, + void** pDest, + HashPosition* pos) { + void* result = NULL; + result = zend_hash_get_current_data_ex(ht, pos); + if (pDest != NULL) *pDest = result; + return result != NULL ? SUCCESS : FAILURE; +} + +// PHP Object + +#define PHP_PROTO_WRAP_OBJECT_START(name) struct name { +#define PHP_PROTO_WRAP_OBJECT_END \ + zend_object std; \ + }; + +#define PHP_PROTO_INIT_CLASS_START(CLASSNAME, CAMELNAME, LOWWERNAME) \ + void LOWWERNAME##_init(TSRMLS_D) { \ + zend_class_entry class_type; \ + const char* class_name = CLASSNAME; \ + INIT_CLASS_ENTRY_EX(class_type, CLASSNAME, strlen(CLASSNAME), \ + LOWWERNAME##_methods); \ + LOWWERNAME##_type = zend_register_internal_class(&class_type TSRMLS_CC); \ + LOWWERNAME##_type->create_object = LOWWERNAME##_create; \ + LOWWERNAME##_handlers = PEMALLOC(zend_object_handlers); \ + memcpy(LOWWERNAME##_handlers, zend_get_std_object_handlers(), \ + sizeof(zend_object_handlers)); \ + LOWWERNAME##_handlers->free_obj = LOWWERNAME##_free; \ + LOWWERNAME##_handlers->dtor_obj = LOWWERNAME##_dtor; \ + LOWWERNAME##_handlers->offset = XtOffsetOf(CAMELNAME, std); +#define PHP_PROTO_INIT_CLASS_END \ + } + +#define PHP_PROTO_OBJECT_FREE_START(classname, lowername) \ + void lowername##_free(zend_object* object) { \ + classname* intern = \ + (classname*)((char*)object - XtOffsetOf(classname, std)); +#define PHP_PROTO_OBJECT_FREE_END \ + } + +#define PHP_PROTO_OBJECT_DTOR_START(classname, lowername) \ + void lowername##_dtor(zend_object* object) { \ + classname* intern = \ + (classname*)((char*)object - XtOffsetOf(classname, std)); +#define PHP_PROTO_OBJECT_DTOR_END \ + zend_object_std_dtor(object TSRMLS_CC); \ + } + +#define PHP_PROTO_OBJECT_CREATE_START(NAME, LOWWERNAME) \ + static zend_object* LOWWERNAME##_create(zend_class_entry* ce TSRMLS_DC) { \ + PHP_PROTO_ALLOC_CLASS_OBJECT(NAME, ce); \ + zend_object_std_init(&intern->std, ce TSRMLS_CC); \ + object_properties_init(&intern->std, ce); +#define PHP_PROTO_OBJECT_CREATE_END(NAME, LOWWERNAME) \ + PHP_PROTO_FREE_CLASS_OBJECT(NAME, LOWWERNAME##_free, LOWWERNAME##_handlers); \ + } + +#define CACHED_VALUE zval +#define CACHED_TO_ZVAL_PTR(VALUE) (&VALUE) +#define CACHED_PTR_TO_ZVAL_PTR(VALUE) (VALUE) +#define ZVAL_PTR_TO_CACHED_PTR(VALUE) (VALUE) + +#define CREATE_OBJ_ON_ALLOCATED_ZVAL_PTR(zval_ptr, class_type) \ + ZVAL_OBJ(zval_ptr, class_type->create_object(class_type)); + +#define PHP_PROTO_SEPARATE_ZVAL_IF_NOT_REF(value) ; + +#define PHP_PROTO_GLOBAL_UNINITIALIZED_ZVAL &EG(uninitialized_zval) + +#define php_proto_zval_ptr_dtor(zval_ptr) \ + zval_ptr_dtor(zval_ptr) + +#define PHP_PROTO_ALLOC_CLASS_OBJECT(class_object, class_type) \ + class_object* intern; \ + int size = sizeof(class_object) + zend_object_properties_size(class_type); \ + intern = ecalloc(1, size); \ + memset(intern, 0, size); + +#define PHP_PROTO_FREE_CLASS_OBJECT(class_object, class_object_free, handler) \ + intern->std.handlers = handler; \ + return &intern->std; + +#define PHP_PROTO_ALLOC_ARRAY(zval_ptr) \ + ZVAL_NEW_ARR(zval_ptr) + +#define UNBOX(class_name, val) \ + (class_name*)((char*)Z_OBJ_P(val) - XtOffsetOf(class_name, std)); + +#define UNBOX_HASHTABLE_VALUE(class_name, val) \ + (class_name*)((char*)val - XtOffsetOf(class_name, std)) + +#define HASHTABLE_VALUE_DTOR php_proto_hashtable_descriptor_release + +#define PHP_PROTO_HASHTABLE_VALUE zend_object* + +#define CREATE_HASHTABLE_VALUE(OBJ, WRAPPED_OBJ, OBJ_TYPE, OBJ_CLASS_ENTRY) \ + OBJ_TYPE* OBJ; \ + PHP_PROTO_HASHTABLE_VALUE WRAPPED_OBJ; \ + WRAPPED_OBJ = OBJ_CLASS_ENTRY->create_object(OBJ_CLASS_ENTRY); \ + OBJ = UNBOX_HASHTABLE_VALUE(OBJ_TYPE, WRAPPED_OBJ); \ + --GC_REFCOUNT(WRAPPED_OBJ); + +#define PHP_PROTO_CE_DECLARE zend_class_entry* +#define PHP_PROTO_CE_UNREF(ce) (ce) + +static inline int php_proto_zend_lookup_class( + const char* name, int name_length, zend_class_entry** ce TSRMLS_DC) { + zend_string *zstr_name = zend_string_init(name, name_length, 0); + *ce = zend_lookup_class(zstr_name); + zend_string_release(zstr_name); + return *ce != NULL ? SUCCESS : FAILURE; +} + +#endif // PHP_MAJOR_VERSION >= 7 + // ----------------------------------------------------------------------------- // Forward Declaration // ---------------------------------------------------------------------------- @@ -55,7 +372,8 @@ struct MessageHeader; struct MessageLayout; struct RepeatedField; struct RepeatedFieldIter; -struct MapField; +struct Map; +struct Oneof; typedef struct DescriptorPool DescriptorPool; typedef struct Descriptor Descriptor; @@ -66,7 +384,8 @@ typedef struct MessageHeader MessageHeader; typedef struct MessageLayout MessageLayout; typedef struct RepeatedField RepeatedField; typedef struct RepeatedFieldIter RepeatedFieldIter; -typedef struct MapField MapField; +typedef struct Map Map; +typedef struct Oneof Oneof; // ----------------------------------------------------------------------------- // Globals. @@ -88,13 +407,14 @@ void message_init(TSRMLS_D); // Global map from upb {msg,enum}defs to wrapper Descriptor/EnumDescriptor // instances. -void add_def_obj(const void* def, zval* value); -zval* get_def_obj(const void* def); +void add_def_obj(const void* def, PHP_PROTO_HASHTABLE_VALUE value); +PHP_PROTO_HASHTABLE_VALUE get_def_obj(const void* def); // Global map from PHP class entries to wrapper Descriptor/EnumDescriptor // instances. -void add_ce_obj(const void* ce, zval* value); -zval* get_ce_obj(const void* ce); +void add_ce_obj(const void* ce, PHP_PROTO_HASHTABLE_VALUE value); +PHP_PROTO_HASHTABLE_VALUE get_ce_obj(const void* ce); +bool class_added(const void* ce); extern zend_class_entry* map_field_type; extern zend_class_entry* repeated_field_type; @@ -103,20 +423,25 @@ extern zend_class_entry* repeated_field_type; // Descriptor. // ----------------------------------------------------------------------------- -struct DescriptorPool { - zend_object std; +PHP_PROTO_WRAP_OBJECT_START(DescriptorPool) upb_symtab* symtab; HashTable* pending_list; -}; +PHP_PROTO_WRAP_OBJECT_END PHP_METHOD(DescriptorPool, getGeneratedPool); PHP_METHOD(DescriptorPool, internalAddGeneratedFile); -extern zval* generated_pool_php; // wrapper of generated pool +// wrapper of generated pool +#if PHP_MAJOR_VERSION < 7 +extern zval* generated_pool_php; +void descriptor_pool_free(void* object TSRMLS_DC); +#else +extern zend_object *generated_pool_php; +void descriptor_pool_free(zend_object* object); +#endif extern DescriptorPool* generated_pool; // The actual generated pool -struct Descriptor { - zend_object std; +PHP_PROTO_WRAP_OBJECT_START(Descriptor) const upb_msgdef* msgdef; MessageLayout* layout; zend_class_entry* klass; // begins as NULL @@ -126,23 +451,21 @@ struct Descriptor { const upb_handlers* pb_serialize_handlers; const upb_handlers* json_serialize_handlers; const upb_handlers* json_serialize_handlers_preserve; -}; +PHP_PROTO_WRAP_OBJECT_END extern zend_class_entry* descriptor_type; void descriptor_name_set(Descriptor *desc, const char *name); -struct FieldDescriptor { - zend_object std; +PHP_PROTO_WRAP_OBJECT_START(FieldDescriptor) const upb_fielddef* fielddef; -}; +PHP_PROTO_WRAP_OBJECT_END -struct EnumDescriptor { - zend_object std; +PHP_PROTO_WRAP_OBJECT_START(EnumDescriptor) const upb_enumdef* enumdef; zend_class_entry* klass; // begins as NULL // VALUE module; // begins as nil -}; +PHP_PROTO_WRAP_OBJECT_END extern zend_class_entry* enum_descriptor_type; @@ -150,13 +473,15 @@ extern zend_class_entry* enum_descriptor_type; // Message class creation. // ----------------------------------------------------------------------------- -void* message_data(void* msg); -void message_create_with_type(zend_class_entry* ce, zval** message TSRMLS_DC); +void* message_data(MessageHeader* msg); +void custom_data_init(const zend_class_entry* ce, + MessageHeader* msg PHP_PROTO_TSRMLS_DC); // Build PHP class for given descriptor. Instead of building from scratch, this // function modifies existing class which has been partially defined in PHP // code. -void build_class_from_descriptor(zval* php_descriptor TSRMLS_DC); +void build_class_from_descriptor( + PHP_PROTO_HASHTABLE_VALUE php_descriptor TSRMLS_DC); extern zend_object_handlers* message_handlers; @@ -227,18 +552,17 @@ struct MessageLayout { size_t size; }; -struct MessageHeader { - zend_object std; // Stores properties table and class info of PHP instance. - // This is needed for MessageHeader to be accessed via PHP. +PHP_PROTO_WRAP_OBJECT_START(MessageHeader) + void* data; // Point to the real message data. + // Place needs to be consistent with map_parse_frame_data_t. Descriptor* descriptor; // Kept alive by self.class.descriptor reference. - // The real message data is appended after MessageHeader. -}; +PHP_PROTO_WRAP_OBJECT_END MessageLayout* create_layout(const upb_msgdef* msgdef); void layout_init(MessageLayout* layout, void* storage, - zval** properties_table TSRMLS_DC); + CACHED_VALUE* properties_table PHP_PROTO_TSRMLS_DC); zval* layout_get(MessageLayout* layout, const void* storage, - const upb_fielddef* field, zval** cache TSRMLS_DC); + const upb_fielddef* field, CACHED_VALUE* cache TSRMLS_DC); void layout_set(MessageLayout* layout, MessageHeader* header, const upb_fielddef* field, zval* val TSRMLS_DC); void layout_merge(MessageLayout* layout, MessageHeader* from, @@ -308,7 +632,12 @@ PHP_METHOD(Util, checkRepeatedField); size_t native_slot_size(upb_fieldtype_t type); bool native_slot_set(upb_fieldtype_t type, const zend_class_entry* klass, void* memory, zval* value TSRMLS_DC); -void native_slot_init(upb_fieldtype_t type, void* memory, zval** cache); +// String/Message is stored differently in array/map from normal message fields. +// So we need to make a special method to handle that. +bool native_slot_set_by_array(upb_fieldtype_t type, + const zend_class_entry* klass, void* memory, + zval* value TSRMLS_DC); +void native_slot_init(upb_fieldtype_t type, void* memory, void* cache); // For each property, in order to avoid conversion between the zval object and // the actual data type during parsing/serialization, the containing message // object use the custom memory layout to store the actual data type for each @@ -317,8 +646,13 @@ void native_slot_init(upb_fieldtype_t type, void* memory, zval** cache); // for providing such a zval object. Instead the caller needs to provide one // (cache) and update it with the actual data (memory). void native_slot_get(upb_fieldtype_t type, const void* memory, - zval** cache TSRMLS_DC); -void native_slot_get_default(upb_fieldtype_t type, zval** cache TSRMLS_DC); + CACHED_VALUE* cache TSRMLS_DC); +// String/Message is stored differently in array/map from normal message fields. +// So we need to make a special method to handle that. +void native_slot_get_by_array(upb_fieldtype_t type, const void* memory, + CACHED_VALUE* cache TSRMLS_DC); +void native_slot_get_default(upb_fieldtype_t type, + CACHED_VALUE* cache TSRMLS_DC); // ----------------------------------------------------------------------------- // Map Field. @@ -326,13 +660,12 @@ void native_slot_get_default(upb_fieldtype_t type, zval** cache TSRMLS_DC); extern zend_object_handlers* map_field_handlers; -typedef struct { - zend_object std; +PHP_PROTO_WRAP_OBJECT_START(Map) upb_fieldtype_t key_type; upb_fieldtype_t value_type; const zend_class_entry* msg_ce; // class entry for value message upb_strtable table; -} Map; +PHP_PROTO_WRAP_OBJECT_END typedef struct { Map* self; @@ -349,14 +682,14 @@ upb_value map_iter_value(MapIter* iter, int* len); const upb_fielddef* map_entry_key(const upb_msgdef* msgdef); const upb_fielddef* map_entry_value(const upb_msgdef* msgdef); -zend_object_value map_field_create(zend_class_entry *ce TSRMLS_DC); -void map_field_create_with_field(zend_class_entry *ce, const upb_fielddef *field, - zval **map_field TSRMLS_DC); -void map_field_create_with_type(zend_class_entry *ce, upb_fieldtype_t key_type, +void map_field_create_with_field(const zend_class_entry* ce, + const upb_fielddef* field, + CACHED_VALUE* map_field PHP_PROTO_TSRMLS_DC); +void map_field_create_with_type(const zend_class_entry* ce, + upb_fieldtype_t key_type, upb_fieldtype_t value_type, - const zend_class_entry *msg_ce, - zval **map_field TSRMLS_DC); -void map_field_free(void* object TSRMLS_DC); + const zend_class_entry* msg_ce, + CACHED_VALUE* map_field PHP_PROTO_TSRMLS_DC); void* upb_value_memory(upb_value* v); #define MAP_KEY_FIELD 1 @@ -382,33 +715,36 @@ PHP_METHOD(MapField, count); // ----------------------------------------------------------------------------- extern zend_object_handlers* repeated_field_handlers; +extern zend_object_handlers* repeated_field_iter_handlers; -struct RepeatedField { - zend_object std; +PHP_PROTO_WRAP_OBJECT_START(RepeatedField) +#if PHP_MAJOR_VERSION < 7 zval* array; +#else + zval array; +#endif upb_fieldtype_t type; const zend_class_entry* msg_ce; // class entry for containing message // (for message field only). -}; +PHP_PROTO_WRAP_OBJECT_END -struct RepeatedFieldIter { - zend_object std; +PHP_PROTO_WRAP_OBJECT_START(RepeatedFieldIter) RepeatedField* repeated_field; long position; -}; - -void repeated_field_create_with_field(zend_class_entry* ce, - const upb_fielddef* field, - zval** repeated_field TSRMLS_DC); -void repeated_field_create_with_type(zend_class_entry* ce, upb_fieldtype_t type, - const zend_class_entry* msg_ce, - zval** repeated_field TSRMLS_DC); +PHP_PROTO_WRAP_OBJECT_END + +void repeated_field_create_with_field( + zend_class_entry* ce, const upb_fielddef* field, + CACHED_VALUE* repeated_field PHP_PROTO_TSRMLS_DC); +void repeated_field_create_with_type( + zend_class_entry* ce, upb_fieldtype_t type, const zend_class_entry* msg_ce, + CACHED_VALUE* repeated_field PHP_PROTO_TSRMLS_DC); // Return the element at the index position from the repeated field. There is // not restriction on the type of stored elements. void *repeated_field_index_native(RepeatedField *intern, int index TSRMLS_DC); // Add the element to the end of the repeated field. There is not restriction on // the type of stored elements. -void repeated_field_push_native(RepeatedField *intern, void *value TSRMLS_DC); +void repeated_field_push_native(RepeatedField *intern, void *value); PHP_METHOD(RepeatedField, __construct); PHP_METHOD(RepeatedField, append); @@ -429,12 +765,11 @@ PHP_METHOD(RepeatedFieldIter, valid); // Oneof Field. // ----------------------------------------------------------------------------- -typedef struct { - zend_object std; +PHP_PROTO_WRAP_OBJECT_START(Oneof) upb_oneofdef* oneofdef; int index; // Index of field in oneof. -1 if not set. char value[NATIVE_SLOT_MAX_SIZE]; -} Oneof; +PHP_PROTO_WRAP_OBJECT_END // Oneof case slot value to indicate that no oneof case is set. The value `0` is // safe because field numbers are used as case identifiers, and no field can @@ -446,24 +781,13 @@ typedef struct { // ----------------------------------------------------------------------------- upb_fieldtype_t to_fieldtype(upb_descriptortype_t type); -const zend_class_entry *field_type_class(const upb_fielddef *field TSRMLS_DC); +const zend_class_entry* field_type_class( + const upb_fielddef* field PHP_PROTO_TSRMLS_DC); // ----------------------------------------------------------------------------- // Utilities. // ----------------------------------------------------------------------------- -// PHP <-> C conversion. -#define UNBOX(class_name, val) \ - (class_name*)zend_object_store_get_object(val TSRMLS_CC); - -#define BOX(class_name, wrapper, intern, free_func) \ - MAKE_STD_ZVAL(wrapper); \ - Z_TYPE_P(wrapper) = IS_OBJECT; \ - Z_OBJVAL_P(wrapper) \ - .handle = \ - zend_objects_store_put(intern, NULL, free_func, NULL TSRMLS_CC); \ - Z_OBJVAL_P(wrapper).handlers = zend_get_std_object_handlers(); - // Memory management #define ALLOC(class_name) (class_name*) emalloc(sizeof(class_name)) #define PEMALLOC(class_name) (class_name*) pemalloc(sizeof(class_name), 1) @@ -471,19 +795,15 @@ const zend_class_entry *field_type_class(const upb_fielddef *field TSRMLS_DC); #define FREE(object) efree(object) #define PEFREE(object) pefree(object, 1) -// Create PHP internal instance. -#define CREATE(class_name, intern, init_func) \ - intern = ALLOC(class_name); \ - memset(intern, 0, sizeof(class_name)); \ - init_func(intern TSRMLS_CC); - // String argument. #define STR(str) (str), strlen(str) // Zend Value +#if PHP_MAJOR_VERSION < 7 #define Z_OBJ_P(zval_p) \ ((zend_object*)(EG(objects_store) \ .object_buckets[Z_OBJ_HANDLE_P(zval_p)] \ .bucket.obj.object)) +#endif #endif // __GOOGLE_PROTOBUF_PHP_PROTOBUF_H__ diff --git a/third_party/protobuf/3.2.0/php/ext/google/protobuf/storage.c b/third_party/protobuf/3.2.0/php/ext/google/protobuf/storage.c index af7c292f0fc828..6318f88c6507df 100644 --- a/third_party/protobuf/3.2.0/php/ext/google/protobuf/storage.c +++ b/third_party/protobuf/3.2.0/php/ext/google/protobuf/storage.c @@ -57,7 +57,7 @@ size_t native_slot_size(upb_fieldtype_t type) { } } -static bool native_slot_is_default(upb_fieldtype_t type, void* memory) { +static bool native_slot_is_default(upb_fieldtype_t type, const void* memory) { switch (type) { #define CASE_TYPE(upb_type, c_type) \ case UPB_TYPE_##upb_type: { \ @@ -75,15 +75,17 @@ static bool native_slot_is_default(upb_fieldtype_t type, void* memory) { #undef CASE_TYPE case UPB_TYPE_STRING: case UPB_TYPE_BYTES: - return Z_STRLEN_PP(DEREF(memory, zval**)) == 0; + return Z_STRLEN_P(CACHED_PTR_TO_ZVAL_PTR(DEREF(memory, CACHED_VALUE*))) == + 0; case UPB_TYPE_MESSAGE: - return Z_TYPE_PP(DEREF(memory, zval**)) == IS_NULL; + return Z_TYPE_P(CACHED_PTR_TO_ZVAL_PTR(DEREF(memory, CACHED_VALUE*))) == + IS_NULL; default: return false; } } bool native_slot_set(upb_fieldtype_t type, const zend_class_entry* klass, - void* memory, zval* value TSRMLS_DC) { + void* memory, zval* value PHP_PROTO_TSRMLS_DC) { switch (type) { case UPB_TYPE_STRING: case UPB_TYPE_BYTES: { @@ -95,14 +97,14 @@ bool native_slot_set(upb_fieldtype_t type, const zend_class_entry* klass, zend_error(E_USER_ERROR, "Given string is not UTF8 encoded."); return false; } - if (*(zval**)memory != NULL) { + + zval* cached_zval = CACHED_PTR_TO_ZVAL_PTR((CACHED_VALUE*)memory); + if (EXPECTED(cached_zval != NULL)) { +#if PHP_MAJOR_VERSION < 7 REPLACE_ZVAL_VALUE((zval**)memory, value, 1); - } else { - // Handles repeated/map string field. Memory provided by - // RepeatedField/Map is not initialized. - MAKE_STD_ZVAL(DEREF(memory, zval*)); - ZVAL_STRINGL(DEREF(memory, zval*), Z_STRVAL_P(value), Z_STRLEN_P(value), - 1); +#else + zend_assign_to_variable(cached_zval, value, IS_CV); +#endif } break; } @@ -115,13 +117,18 @@ bool native_slot_set(upb_fieldtype_t type, const zend_class_entry* klass, zend_error(E_USER_ERROR, "Given message does not have correct class."); return false; } - if (EXPECTED(DEREF(memory, zval*) != value)) { - if (DEREF(memory, zval*) != NULL) { - zval_ptr_dtor((zval**)memory); - } - DEREF(memory, zval*) = value; - Z_ADDREF_P(value); + + zval* property_ptr = CACHED_PTR_TO_ZVAL_PTR((CACHED_VALUE*)memory); + if (EXPECTED(property_ptr != value)) { + php_proto_zval_ptr_dtor(property_ptr); } + +#if PHP_MAJOR_VERSION < 7 + DEREF(memory, zval*) = value; + Z_ADDREF_P(value); +#else + ZVAL_ZVAL(property_ptr, value, 1, 0); +#endif break; } @@ -151,7 +158,59 @@ bool native_slot_set(upb_fieldtype_t type, const zend_class_entry* klass, return true; } -void native_slot_init(upb_fieldtype_t type, void* memory, zval** cache) { +bool native_slot_set_by_array(upb_fieldtype_t type, + const zend_class_entry* klass, void* memory, + zval* value TSRMLS_DC) { + switch (type) { + case UPB_TYPE_STRING: + case UPB_TYPE_BYTES: { + if (!protobuf_convert_to_string(value)) { + return false; + } + if (type == UPB_TYPE_STRING && + !is_structurally_valid_utf8(Z_STRVAL_P(value), Z_STRLEN_P(value))) { + zend_error(E_USER_ERROR, "Given string is not UTF8 encoded."); + return false; + } + + // Handles repeated/map string field. Memory provided by + // RepeatedField/Map is not initialized. +#if PHP_MAJOR_VERSION < 7 + MAKE_STD_ZVAL(DEREF(memory, zval*)); + PHP_PROTO_ZVAL_STRINGL(DEREF(memory, zval*), Z_STRVAL_P(value), + Z_STRLEN_P(value), 1); +#else + *(zend_string**)memory = zend_string_dup(Z_STR_P(value), 0); +#endif + break; + } + case UPB_TYPE_MESSAGE: { + if (Z_TYPE_P(value) != IS_OBJECT) { + zend_error(E_USER_ERROR, "Given value is not message."); + return false; + } + if (Z_TYPE_P(value) == IS_OBJECT && klass != Z_OBJCE_P(value)) { + zend_error(E_USER_ERROR, "Given message does not have correct class."); + return false; + } +#if PHP_MAJOR_VERSION < 7 + if (EXPECTED(DEREF(memory, zval*) != value)) { + DEREF(memory, zval*) = value; + Z_ADDREF_P(value); + } +#else + DEREF(memory, zend_object*) = Z_OBJ_P(value); + ++GC_REFCOUNT(Z_OBJ_P(value)); +#endif + break; + } + default: + return native_slot_set(type, klass, memory, value TSRMLS_CC); + } + return true; +} + +void native_slot_init(upb_fieldtype_t type, void* memory, void* cache) { zval* tmp = NULL; switch (type) { case UPB_TYPE_FLOAT: @@ -166,7 +225,7 @@ void native_slot_init(upb_fieldtype_t type, void* memory, zval** cache) { case UPB_TYPE_STRING: case UPB_TYPE_BYTES: case UPB_TYPE_MESSAGE: - DEREF(memory, zval**) = cache; + DEREF(memory, CACHED_VALUE*) = cache; break; case UPB_TYPE_ENUM: case UPB_TYPE_INT32: @@ -187,38 +246,38 @@ void native_slot_init(upb_fieldtype_t type, void* memory, zval** cache) { } void native_slot_get(upb_fieldtype_t type, const void* memory, - zval** cache TSRMLS_DC) { + CACHED_VALUE* cache TSRMLS_DC) { switch (type) { -#define CASE(upb_type, php_type, c_type) \ - case UPB_TYPE_##upb_type: \ - SEPARATE_ZVAL_IF_NOT_REF(cache); \ - ZVAL_##php_type(*cache, DEREF(memory, c_type)); \ - return; +#define CASE(upb_type, php_type, c_type) \ + case UPB_TYPE_##upb_type: \ + PHP_PROTO_SEPARATE_ZVAL_IF_NOT_REF(cache); \ + ZVAL_##php_type(CACHED_PTR_TO_ZVAL_PTR(cache), DEREF(memory, c_type)); \ + return; -CASE(FLOAT, DOUBLE, float) -CASE(DOUBLE, DOUBLE, double) -CASE(BOOL, BOOL, int8_t) -CASE(INT32, LONG, int32_t) -CASE(ENUM, LONG, uint32_t) + CASE(FLOAT, DOUBLE, float) + CASE(DOUBLE, DOUBLE, double) + CASE(BOOL, BOOL, int8_t) + CASE(INT32, LONG, int32_t) + CASE(ENUM, LONG, uint32_t) #undef CASE #if SIZEOF_LONG == 4 -#define CASE(upb_type, c_type) \ - case UPB_TYPE_##upb_type: { \ - SEPARATE_ZVAL_IF_NOT_REF(cache); \ - char buffer[MAX_LENGTH_OF_INT64]; \ - sprintf(buffer, "%lld", DEREF(memory, c_type)); \ - ZVAL_STRING(*cache, buffer, 1); \ - return; \ - } +#define CASE(upb_type, c_type) \ + case UPB_TYPE_##upb_type: { \ + PHP_PROTO_SEPARATE_ZVAL_IF_NOT_REF(cache); \ + char buffer[MAX_LENGTH_OF_INT64]; \ + sprintf(buffer, "%lld", DEREF(memory, c_type)); \ + PHP_PROTO_ZVAL_STRING(CACHED_PTR_TO_ZVAL_PTR(cache), buffer, 1); \ + return; \ + } #else -#define CASE(upb_type, c_type) \ - case UPB_TYPE_##upb_type: { \ - SEPARATE_ZVAL_IF_NOT_REF(cache); \ - ZVAL_LONG(*cache, DEREF(memory, c_type)); \ - return; \ - } +#define CASE(upb_type, c_type) \ + case UPB_TYPE_##upb_type: { \ + PHP_PROTO_SEPARATE_ZVAL_IF_NOT_REF(cache); \ + ZVAL_LONG(CACHED_PTR_TO_ZVAL_PTR(cache), DEREF(memory, c_type)); \ + return; \ + } #endif CASE(UINT64, uint64_t) CASE(INT64, int64_t) @@ -227,32 +286,34 @@ CASE(INT64, int64_t) case UPB_TYPE_UINT32: { // Prepend bit-1 for negative numbers, so that uint32 value will be // consistent on both 32-bit and 64-bit architectures. - SEPARATE_ZVAL_IF_NOT_REF(cache); + PHP_PROTO_SEPARATE_ZVAL_IF_NOT_REF(cache); int value = DEREF(memory, int32_t); if (sizeof(int) == 8) { value |= (-((value >> 31) & 0x1) & 0xFFFFFFFF00000000); } - ZVAL_LONG(*cache, value); + ZVAL_LONG(CACHED_PTR_TO_ZVAL_PTR(cache), value); return; } case UPB_TYPE_STRING: case UPB_TYPE_BYTES: { - // For optional string/bytes fields, the cache is owned by the containing - // message and should have been updated during setting/decoding. However, - // for repeated string/bytes fields, the cache is provided by zend engine - // and has not been updated. - zval* value = DEREF(memory, zval*); - if (*cache != value) { - ZVAL_STRINGL(*cache, Z_STRVAL_P(value), Z_STRLEN_P(value), 1); + // For optional string/bytes/message fields, the cache is owned by the + // containing message and should have been updated during + // setting/decoding. However, oneof accessor call this function by + // providing the return value directly, which is not the same as the cache + // value. + zval* value = CACHED_PTR_TO_ZVAL_PTR((CACHED_VALUE*)memory); + if (CACHED_PTR_TO_ZVAL_PTR(cache) != value) { + PHP_PROTO_ZVAL_STRINGL(CACHED_PTR_TO_ZVAL_PTR(cache), Z_STRVAL_P(value), + Z_STRLEN_P(value), 1); } break; } case UPB_TYPE_MESSAGE: { // Same as above for string/bytes fields. - zval* value = DEREF(memory, zval*); - if (*cache != value) { - ZVAL_ZVAL(*cache, value, 1, 0); + zval* value = CACHED_PTR_TO_ZVAL_PTR((CACHED_VALUE*)memory); + if (CACHED_PTR_TO_ZVAL_PTR(cache) != value) { + ZVAL_ZVAL(CACHED_PTR_TO_ZVAL_PTR(cache), value, 1, 0); } return; } @@ -261,12 +322,46 @@ CASE(INT64, int64_t) } } -void native_slot_get_default(upb_fieldtype_t type, zval** cache TSRMLS_DC) { +void native_slot_get_by_array(upb_fieldtype_t type, const void* memory, + CACHED_VALUE* cache TSRMLS_DC) { switch (type) { -#define CASE(upb_type, php_type) \ - case UPB_TYPE_##upb_type: \ - SEPARATE_ZVAL_IF_NOT_REF(cache); \ - ZVAL_##php_type(*cache, 0); \ + case UPB_TYPE_STRING: + case UPB_TYPE_BYTES: { +#if PHP_MAJOR_VERSION < 7 + zval* value = CACHED_PTR_TO_ZVAL_PTR((CACHED_VALUE*)memory); + if (EXPECTED(CACHED_PTR_TO_ZVAL_PTR(cache) != value)) { + PHP_PROTO_ZVAL_STRINGL(CACHED_PTR_TO_ZVAL_PTR(cache), + Z_STRVAL_P(value), Z_STRLEN_P(value), 1); + } +#else + ZVAL_NEW_STR(cache, zend_string_dup(*(zend_string**)memory, 0)); +#endif + return; + } + case UPB_TYPE_MESSAGE: { +#if PHP_MAJOR_VERSION < 7 + zval* value = CACHED_PTR_TO_ZVAL_PTR((CACHED_VALUE*)memory); + if (EXPECTED(CACHED_PTR_TO_ZVAL_PTR(cache) != value)) { + ZVAL_ZVAL(CACHED_PTR_TO_ZVAL_PTR(cache), value, 1, 0); + } +#else + ++GC_REFCOUNT(*(zend_object**)memory); + ZVAL_OBJ(cache, *(zend_object**)memory); +#endif + return; + } + default: + native_slot_get(type, memory, cache TSRMLS_CC); + } +} + +void native_slot_get_default(upb_fieldtype_t type, + CACHED_VALUE* cache TSRMLS_DC) { + switch (type) { +#define CASE(upb_type, php_type) \ + case UPB_TYPE_##upb_type: \ + PHP_PROTO_SEPARATE_ZVAL_IF_NOT_REF(cache); \ + ZVAL_##php_type(CACHED_PTR_TO_ZVAL_PTR(cache), 0); \ return; CASE(FLOAT, DOUBLE) @@ -279,19 +374,19 @@ void native_slot_get_default(upb_fieldtype_t type, zval** cache TSRMLS_DC) { #undef CASE #if SIZEOF_LONG == 4 -#define CASE(upb_type) \ - case UPB_TYPE_##upb_type: { \ - SEPARATE_ZVAL_IF_NOT_REF(cache); \ - ZVAL_STRING(*cache, "0", 1); \ - return; \ - } +#define CASE(upb_type) \ + case UPB_TYPE_##upb_type: { \ + PHP_PROTO_SEPARATE_ZVAL_IF_NOT_REF(cache); \ + PHP_PROTO_ZVAL_STRING(CACHED_PTR_TO_ZVAL_PTR(cache), "0", 1); \ + return; \ + } #else -#define CASE(upb_type) \ - case UPB_TYPE_##upb_type: { \ - SEPARATE_ZVAL_IF_NOT_REF(cache); \ - ZVAL_LONG(*cache, 0); \ - return; \ - } +#define CASE(upb_type) \ + case UPB_TYPE_##upb_type: { \ + PHP_PROTO_SEPARATE_ZVAL_IF_NOT_REF(cache); \ + ZVAL_LONG(CACHED_PTR_TO_ZVAL_PTR(cache), 0); \ + return; \ + } #endif CASE(UINT64) CASE(INT64) @@ -299,13 +394,13 @@ CASE(INT64) case UPB_TYPE_STRING: case UPB_TYPE_BYTES: { - SEPARATE_ZVAL_IF_NOT_REF(cache); - ZVAL_STRINGL(*cache, "", 0, 1); + PHP_PROTO_SEPARATE_ZVAL_IF_NOT_REF(cache); + PHP_PROTO_ZVAL_STRINGL(CACHED_PTR_TO_ZVAL_PTR(cache), "", 0, 1); break; } case UPB_TYPE_MESSAGE: { - SEPARATE_ZVAL_IF_NOT_REF(cache); - ZVAL_NULL(*cache); + PHP_PROTO_SEPARATE_ZVAL_IF_NOT_REF(cache); + ZVAL_NULL(CACHED_PTR_TO_ZVAL_PTR(cache)); return; } default: @@ -359,14 +454,15 @@ const upb_fielddef* map_entry_value(const upb_msgdef* msgdef) { return value_field; } -const zend_class_entry* field_type_class(const upb_fielddef* field TSRMLS_DC) { +const zend_class_entry* field_type_class( + const upb_fielddef* field PHP_PROTO_TSRMLS_DC) { if (upb_fielddef_type(field) == UPB_TYPE_MESSAGE) { - zval* desc_php = get_def_obj(upb_fielddef_subdef(field)); - Descriptor* desc = zend_object_store_get_object(desc_php TSRMLS_CC); + Descriptor* desc = UNBOX_HASHTABLE_VALUE( + Descriptor, get_def_obj(upb_fielddef_subdef(field))); return desc->klass; } else if (upb_fielddef_type(field) == UPB_TYPE_ENUM) { - zval* desc_php = get_def_obj(upb_fielddef_subdef(field)); - EnumDescriptor* desc = zend_object_store_get_object(desc_php TSRMLS_CC); + EnumDescriptor* desc = UNBOX_HASHTABLE_VALUE( + EnumDescriptor, get_def_obj(upb_fielddef_subdef(field))); return desc->klass; } return NULL; @@ -501,7 +597,7 @@ void free_layout(MessageLayout* layout) { } void layout_init(MessageLayout* layout, void* storage, - zval** properties_table TSRMLS_DC) { + CACHED_VALUE* properties_table PHP_PROTO_TSRMLS_DC) { int i; upb_msg_field_iter it; for (upb_msg_field_begin(&it, layout->msgdef), i = 0; !upb_msg_field_done(&it); @@ -510,20 +606,27 @@ void layout_init(MessageLayout* layout, void* storage, void* memory = slot_memory(layout, storage, field); uint32_t* oneof_case = slot_oneof_case(layout, storage, field); int cache_index = slot_property_cache(layout, storage, field); - zval** property_ptr = &properties_table[cache_index]; + CACHED_VALUE* property_ptr = &properties_table[cache_index]; if (upb_fielddef_containingoneof(field)) { memset(memory, 0, NATIVE_SLOT_MAX_SIZE); *oneof_case = ONEOF_CASE_NONE; } else if (is_map_field(field)) { zval_ptr_dtor(property_ptr); - map_field_create_with_field(map_field_type, field, property_ptr TSRMLS_CC); - DEREF(memory, zval**) = property_ptr; +#if PHP_MAJOR_VERSION < 7 + MAKE_STD_ZVAL(*property_ptr); +#endif + map_field_create_with_field(map_field_type, field, + property_ptr PHP_PROTO_TSRMLS_CC); + DEREF(memory, CACHED_VALUE*) = property_ptr; } else if (upb_fielddef_label(field) == UPB_LABEL_REPEATED) { zval_ptr_dtor(property_ptr); +#if PHP_MAJOR_VERSION < 7 + MAKE_STD_ZVAL(*property_ptr); +#endif repeated_field_create_with_field(repeated_field_type, field, - property_ptr TSRMLS_CC); - DEREF(memory, zval**) = property_ptr; + property_ptr PHP_PROTO_TSRMLS_CC); + DEREF(memory, CACHED_VALUE*) = property_ptr; } else { native_slot_init(upb_fielddef_type(field), memory, property_ptr); } @@ -537,7 +640,7 @@ static void* value_memory(const upb_fielddef* field, void* memory) { case UPB_TYPE_STRING: case UPB_TYPE_BYTES: case UPB_TYPE_MESSAGE: - memory = DEREF(memory, zval**); + memory = DEREF(memory, CACHED_VALUE*); break; default: // No operation @@ -547,7 +650,7 @@ static void* value_memory(const upb_fielddef* field, void* memory) { } zval* layout_get(MessageLayout* layout, const void* storage, - const upb_fielddef* field, zval** cache TSRMLS_DC) { + const upb_fielddef* field, CACHED_VALUE* cache TSRMLS_DC) { void* memory = slot_memory(layout, storage, field); uint32_t* oneof_case = slot_oneof_case(layout, storage, field); @@ -558,13 +661,13 @@ zval* layout_get(MessageLayout* layout, const void* storage, native_slot_get(upb_fielddef_type(field), value_memory(field, memory), cache TSRMLS_CC); } - return *cache; + return CACHED_PTR_TO_ZVAL_PTR(cache); } else if (upb_fielddef_label(field) == UPB_LABEL_REPEATED) { - return *cache; + return CACHED_PTR_TO_ZVAL_PTR(cache); } else { native_slot_get(upb_fielddef_type(field), value_memory(field, memory), cache TSRMLS_CC); - return *cache; + return CACHED_PTR_TO_ZVAL_PTR(cache); } } @@ -583,8 +686,7 @@ void layout_set(MessageLayout* layout, MessageHeader* header, switch (type) { case UPB_TYPE_MESSAGE: { const upb_msgdef* msg = upb_fielddef_msgsubdef(field); - zval* desc_php = get_def_obj(msg); - Descriptor* desc = zend_object_store_get_object(desc_php TSRMLS_CC); + Descriptor* desc = UNBOX_HASHTABLE_VALUE(Descriptor, get_def_obj(msg)); ce = desc->klass; // Intentionally fall through. } @@ -593,9 +695,9 @@ void layout_set(MessageLayout* layout, MessageHeader* header, int property_cache_index = header->descriptor->layout->fields[upb_fielddef_index(field)] .cache_index; - DEREF(memory, zval**) = + DEREF(memory, CACHED_VALUE*) = &(header->std.properties_table)[property_cache_index]; - memory = DEREF(memory, zval**); + memory = DEREF(memory, CACHED_VALUE*); break; } default: @@ -606,27 +708,130 @@ void layout_set(MessageLayout* layout, MessageHeader* header, *oneof_case = upb_fielddef_number(field); } else if (upb_fielddef_label(field) == UPB_LABEL_REPEATED) { // Works for both repeated and map fields - memory = DEREF(memory, zval**); - if (EXPECTED(DEREF(memory, zval*) != val)) { - zval_ptr_dtor(memory); - DEREF(memory, zval*) = val; - Z_ADDREF_P(val); + memory = DEREF(memory, void**); + zval* property_ptr = CACHED_PTR_TO_ZVAL_PTR((CACHED_VALUE*)memory); + + if (EXPECTED(property_ptr != val)) { +#if PHP_MAJOR_VERSION < 7 + REPLACE_ZVAL_VALUE((zval**)memory, val, 1); +#else + php_proto_zval_ptr_dtor(property_ptr); + ZVAL_ZVAL(property_ptr, val, 1, 0); +#endif } } else { upb_fieldtype_t type = upb_fielddef_type(field); zend_class_entry *ce = NULL; if (type == UPB_TYPE_MESSAGE) { const upb_msgdef* msg = upb_fielddef_msgsubdef(field); - zval* desc_php = get_def_obj(msg); - Descriptor* desc = zend_object_store_get_object(desc_php TSRMLS_CC); + Descriptor* desc = UNBOX_HASHTABLE_VALUE(Descriptor, get_def_obj(msg)); ce = desc->klass; } native_slot_set(type, ce, value_memory(field, memory), val TSRMLS_CC); } } +static native_slot_merge(const upb_fielddef* field, const void* from_memory, + void* to_memory PHP_PROTO_TSRMLS_DC) { + upb_fieldtype_t type = upb_fielddef_type(field); + zend_class_entry* ce = NULL; + if (!native_slot_is_default(type, from_memory)) { + switch (type) { +#define CASE_TYPE(upb_type, c_type) \ + case UPB_TYPE_##upb_type: { \ + DEREF(to_memory, c_type) = DEREF(from_memory, c_type); \ + break; \ + } + CASE_TYPE(INT32, int32_t) + CASE_TYPE(UINT32, uint32_t) + CASE_TYPE(ENUM, int32_t) + CASE_TYPE(INT64, int64_t) + CASE_TYPE(UINT64, uint64_t) + CASE_TYPE(FLOAT, float) + CASE_TYPE(DOUBLE, double) + CASE_TYPE(BOOL, int8_t) + +#undef CASE_TYPE + case UPB_TYPE_STRING: + case UPB_TYPE_BYTES: + native_slot_set(type, NULL, value_memory(field, to_memory), + CACHED_PTR_TO_ZVAL_PTR(DEREF( + from_memory, CACHED_VALUE*)) PHP_PROTO_TSRMLS_CC); + break; + case UPB_TYPE_MESSAGE: { + const upb_msgdef* msg = upb_fielddef_msgsubdef(field); + Descriptor* desc = UNBOX_HASHTABLE_VALUE(Descriptor, get_def_obj(msg)); + ce = desc->klass; + if (native_slot_is_default(type, to_memory)) { +#if PHP_MAJOR_VERSION < 7 + SEPARATE_ZVAL_IF_NOT_REF((zval**)value_memory(field, to_memory)); +#endif + CREATE_OBJ_ON_ALLOCATED_ZVAL_PTR( + CACHED_PTR_TO_ZVAL_PTR(DEREF(to_memory, CACHED_VALUE*)), ce); + MessageHeader* submsg = + UNBOX(MessageHeader, + CACHED_PTR_TO_ZVAL_PTR(DEREF(to_memory, CACHED_VALUE*))); + custom_data_init(ce, submsg PHP_PROTO_TSRMLS_CC); + } + + MessageHeader* sub_from = + UNBOX(MessageHeader, + CACHED_PTR_TO_ZVAL_PTR(DEREF(from_memory, CACHED_VALUE*))); + MessageHeader* sub_to = + UNBOX(MessageHeader, + CACHED_PTR_TO_ZVAL_PTR(DEREF(to_memory, CACHED_VALUE*))); + + layout_merge(desc->layout, sub_from, sub_to PHP_PROTO_TSRMLS_CC); + break; + } + } + } +} + +static native_slot_merge_by_array(const upb_fielddef* field, const void* from_memory, + void* to_memory PHP_PROTO_TSRMLS_DC) { + upb_fieldtype_t type = upb_fielddef_type(field); + switch (type) { + case UPB_TYPE_STRING: + case UPB_TYPE_BYTES: { +#if PHP_MAJOR_VERSION < 7 + MAKE_STD_ZVAL(DEREF(to_memory, zval*)); + PHP_PROTO_ZVAL_STRINGL(DEREF(to_memory, zval*), + Z_STRVAL_P(*(zval**)from_memory), + Z_STRLEN_P(*(zval**)from_memory), 1); +#else + DEREF(to_memory, zend_string*) = + zend_string_dup(*(zend_string**)from_memory, 0); +#endif + break; + } + case UPB_TYPE_MESSAGE: { + const upb_msgdef* msg = upb_fielddef_msgsubdef(field); + Descriptor* desc = UNBOX_HASHTABLE_VALUE(Descriptor, get_def_obj(msg)); + zend_class_entry* ce = desc->klass; +#if PHP_MAJOR_VERSION < 7 + MAKE_STD_ZVAL(DEREF(to_memory, zval*)); + CREATE_OBJ_ON_ALLOCATED_ZVAL_PTR(DEREF(to_memory, zval*), ce); +#else + DEREF(to_memory, zend_object*) = ce->create_object(ce TSRMLS_CC); +#endif + MessageHeader* sub_from = UNBOX_HASHTABLE_VALUE( + MessageHeader, DEREF(from_memory, PHP_PROTO_HASHTABLE_VALUE)); + MessageHeader* sub_to = UNBOX_HASHTABLE_VALUE( + MessageHeader, DEREF(to_memory, PHP_PROTO_HASHTABLE_VALUE)); + custom_data_init(ce, sub_to PHP_PROTO_TSRMLS_CC); + + layout_merge(desc->layout, sub_from, sub_to PHP_PROTO_TSRMLS_CC); + break; + } + default: + native_slot_merge(field, from_memory, to_memory PHP_PROTO_TSRMLS_CC); + break; + } +} + void layout_merge(MessageLayout* layout, MessageHeader* from, - MessageHeader* to TSRMLS_DC) { + MessageHeader* to PHP_PROTO_TSRMLS_DC) { int i, j; upb_msg_field_iter it; @@ -639,11 +844,10 @@ void layout_merge(MessageLayout* layout, MessageHeader* from, if (upb_fielddef_containingoneof(field)) { uint32_t oneof_case_offset = - layout->fields[upb_fielddef_index(field)].case_offset + - sizeof(MessageHeader); + layout->fields[upb_fielddef_index(field)].case_offset; // For a oneof, check that this field is actually present -- skip all the // below if not. - if (DEREF(((uint8_t*)from + oneof_case_offset), uint32_t) != + if (DEREF((message_data(from) + oneof_case_offset), uint32_t) != upb_fielddef_number(field)) { continue; } @@ -658,7 +862,7 @@ void layout_merge(MessageLayout* layout, MessageHeader* from, case UPB_TYPE_BYTES: { int property_cache_index = layout->fields[upb_fielddef_index(field)].cache_index; - DEREF(to_memory, zval**) = + DEREF(to_memory, CACHED_VALUE*) = &(to->std.properties_table)[property_cache_index]; break; } @@ -676,141 +880,57 @@ void layout_merge(MessageLayout* layout, MessageHeader* from, int size, key_length, value_length; MapIter map_it; - zval* to_map_php = *DEREF(to_memory, zval**); - zval* from_map_php = *DEREF(from_memory, zval**); - Map* to_map = zend_object_store_get_object(to_map_php TSRMLS_CC); - Map* from_map = zend_object_store_get_object(from_map_php TSRMLS_CC); + zval* to_map_php = + CACHED_PTR_TO_ZVAL_PTR(DEREF(to_memory, CACHED_VALUE*)); + zval* from_map_php = + CACHED_PTR_TO_ZVAL_PTR(DEREF(from_memory, CACHED_VALUE*)); + Map* to_map = UNBOX(Map, to_map_php); + Map* from_map = UNBOX(Map, from_map_php); size = upb_strtable_count(&from_map->table); if (size == 0) continue; + const upb_msgdef *mapentry_def = upb_fielddef_msgsubdef(field); + const upb_fielddef *value_field = upb_msgdef_itof(mapentry_def, 2); + for (map_begin(from_map_php, &map_it TSRMLS_CC); !map_done(&map_it); map_next(&map_it)) { const char* key = map_iter_key(&map_it, &key_length); - upb_value value = map_iter_value(&map_it, &value_length); - void* mem = upb_value_memory(&value); - switch (to_map->value_type) { - case UPB_TYPE_MESSAGE: { - zval* new_message; - message_create_with_type(to_map->msg_ce, &new_message TSRMLS_CC); - Z_ADDREF_P(new_message); - - zval* subdesc_php = get_ce_obj(to_map->msg_ce); - Descriptor* subdesc = - zend_object_store_get_object(subdesc_php TSRMLS_CC); - MessageHeader* sub_from = - (MessageHeader*)zend_object_store_get_object(DEREF(mem, zval*) - TSRMLS_CC); - MessageHeader* sub_to = - (MessageHeader*)zend_object_store_get_object( - new_message TSRMLS_CC); - layout_merge(subdesc->layout, sub_from, sub_to TSRMLS_CC); - DEREF(mem, zval*) = new_message; - break; - } - case UPB_TYPE_BYTES: - case UPB_TYPE_STRING: - Z_ADDREF_PP((zval**)mem); - break; - default: - break; - } - map_index_set(to_map, key, key_length, value); + upb_value from_value = map_iter_value(&map_it, &value_length); + upb_value to_value; + void* from_mem = upb_value_memory(&from_value); + void* to_mem = upb_value_memory(&to_value); + memset(to_mem, 0, native_slot_size(to_map->value_type)); + + native_slot_merge_by_array(value_field, from_mem, + to_mem PHP_PROTO_TSRMLS_CC); + + map_index_set(to_map, key, key_length, to_value); } } else if (upb_fielddef_label(field) == UPB_LABEL_REPEATED) { - zval* to_array_php = *DEREF(to_memory, zval**); - zval* from_array_php = *DEREF(from_memory, zval**); - RepeatedField* to_array = - zend_object_store_get_object(to_array_php TSRMLS_CC); - RepeatedField* from_array = - zend_object_store_get_object(from_array_php TSRMLS_CC); - - int size = zend_hash_num_elements(HASH_OF(from_array->array)); + zval* to_array_php = CACHED_PTR_TO_ZVAL_PTR(DEREF(to_memory, CACHED_VALUE*)); + zval* from_array_php = CACHED_PTR_TO_ZVAL_PTR(DEREF(from_memory, CACHED_VALUE*)); + RepeatedField* to_array = UNBOX(RepeatedField, to_array_php); + RepeatedField* from_array = UNBOX(RepeatedField, from_array_php); + + int size = zend_hash_num_elements(PHP_PROTO_HASH_OF(from_array->array)); if (size > 0) { for (j = 0; j < size; j++) { - void* memory = NULL; - zend_hash_index_find(HASH_OF(from_array->array), j, (void**)&memory); - switch (to_array->type) { - case UPB_TYPE_STRING: - case UPB_TYPE_BYTES: { - zval* str; - MAKE_STD_ZVAL(str); - ZVAL_STRINGL(str, Z_STRVAL_PP((zval**)memory), - Z_STRLEN_PP((zval**)memory), 1); - memory = &str; - break; - } - case UPB_TYPE_MESSAGE: { - zval* new_message; - message_create_with_type(from_array->msg_ce, &new_message TSRMLS_CC); - Z_ADDREF_P(new_message); - - zval* subdesc_php = get_ce_obj(from_array->msg_ce); - Descriptor* subdesc = - zend_object_store_get_object(subdesc_php TSRMLS_CC); - MessageHeader* sub_from = - (MessageHeader*)zend_object_store_get_object( - DEREF(memory, zval*) TSRMLS_CC); - MessageHeader* sub_to = - (MessageHeader*)zend_object_store_get_object( - new_message TSRMLS_CC); - layout_merge(subdesc->layout, sub_from, sub_to TSRMLS_CC); - - memory = &new_message; - } - default: - break; - } - repeated_field_push_native(to_array, memory TSRMLS_CC); + void* from_memory = NULL; + void* to_memory = + ALLOC_N(char, native_slot_size(upb_fielddef_type(field))); + memset(to_memory, 0, native_slot_size(upb_fielddef_type(field))); + php_proto_zend_hash_index_find(PHP_PROTO_HASH_OF(from_array->array), + j, (void**)&from_memory); + native_slot_merge_by_array(field, from_memory, + to_memory PHP_PROTO_TSRMLS_CC); + repeated_field_push_native(to_array, to_memory); + FREE(to_memory); } } } else { - upb_fieldtype_t type = upb_fielddef_type(field); - zend_class_entry *ce = NULL; - if (!native_slot_is_default(type, from_memory)) { - switch (type) { -#define CASE_TYPE(upb_type, c_type) \ - case UPB_TYPE_##upb_type: { \ - DEREF(to_memory, c_type) = DEREF(from_memory, c_type); \ - break; \ - } - CASE_TYPE(INT32, int32_t) - CASE_TYPE(UINT32, uint32_t) - CASE_TYPE(ENUM, int32_t) - CASE_TYPE(INT64, int64_t) - CASE_TYPE(UINT64, uint64_t) - CASE_TYPE(FLOAT, float) - CASE_TYPE(DOUBLE, double) - CASE_TYPE(BOOL, int8_t) - -#undef CASE_TYPE - case UPB_TYPE_STRING: - case UPB_TYPE_BYTES: - native_slot_set(type, NULL, value_memory(field, to_memory), - *DEREF(from_memory, zval**) TSRMLS_CC); - break; - case UPB_TYPE_MESSAGE: { - const upb_msgdef* msg = upb_fielddef_msgsubdef(field); - zval* desc_php = get_def_obj(msg); - Descriptor* desc = zend_object_store_get_object(desc_php TSRMLS_CC); - ce = desc->klass; - if (native_slot_is_default(type, to_memory)) { - zval* new_message = NULL; - message_create_with_type(ce, &new_message TSRMLS_CC); - native_slot_set(type, ce, value_memory(field, to_memory), - new_message TSRMLS_CC); - } - MessageHeader* sub_from = - (MessageHeader*)zend_object_store_get_object( - *DEREF(from_memory, zval**) TSRMLS_CC); - MessageHeader* sub_to = - (MessageHeader*)zend_object_store_get_object( - *DEREF(to_memory, zval**) TSRMLS_CC); - layout_merge(desc->layout, sub_from, sub_to TSRMLS_CC); - } - } - } + native_slot_merge(field, from_memory, to_memory PHP_PROTO_TSRMLS_CC); } } } diff --git a/third_party/protobuf/3.2.0/php/ext/google/protobuf/type_check.c b/third_party/protobuf/3.2.0/php/ext/google/protobuf/type_check.c index fe9b18f0e3aea0..fada8d6a79f6a2 100644 --- a/third_party/protobuf/3.2.0/php/ext/google/protobuf/type_check.c +++ b/third_party/protobuf/3.2.0/php/ext/google/protobuf/type_check.c @@ -325,9 +325,18 @@ CONVERT_TO_FLOAT(double); bool protobuf_convert_to_bool(zval* from, int8_t* to) { switch (Z_TYPE_P(from)) { +#if PHP_MAJOR_VERSION < 7 case IS_BOOL: *to = (int8_t)Z_BVAL_P(from); break; +#else + case IS_TRUE: + *to = 1; + break; + case IS_FALSE: + *to = 0; + break; +#endif case IS_LONG: *to = (int8_t)(Z_LVAL_P(from) != 0); break; @@ -357,12 +366,16 @@ bool protobuf_convert_to_string(zval* from) { case IS_STRING: { return true; } +#if PHP_MAJOR_VERSION < 7 case IS_BOOL: +#else + case IS_TRUE: + case IS_FALSE: +#endif case IS_LONG: case IS_DOUBLE: { - int use_copy; zval tmp; - zend_make_printable_zval(from, &tmp, &use_copy); + php_proto_zend_make_printable_zval(from, &tmp); ZVAL_COPY_VALUE(from, &tmp); return true; } @@ -417,34 +430,45 @@ PHP_METHOD(Util, checkMessage) { PHP_METHOD(Util, checkRepeatedField) { zval* val; - long type; + PHP_PROTO_LONG type; const zend_class_entry* klass = NULL; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zl|C", &val, &type, &klass) == FAILURE) { return; } +#if PHP_MAJOR_VERSION >= 7 + if (Z_ISREF_P(val)) { + ZVAL_DEREF(val); + } +#endif + if (Z_TYPE_P(val) == IS_ARRAY) { - HashTable* table = Z_ARRVAL_P(val); + HashTable* table = HASH_OF(val); HashPosition pointer; void* memory; + +#if PHP_MAJOR_VERSION < 7 zval* repeated_field; + MAKE_STD_ZVAL(repeated_field); +#else + zval repeated_field; +#endif repeated_field_create_with_type(repeated_field_type, to_fieldtype(type), klass, &repeated_field TSRMLS_CC); - RepeatedField* intern = - (RepeatedField*)zend_object_store_get_object(repeated_field TSRMLS_CC); for (zend_hash_internal_pointer_reset_ex(table, &pointer); - zend_hash_get_current_data_ex(table, (void**)&memory, &pointer) == - SUCCESS; + php_proto_zend_hash_get_current_data_ex(table, (void**)&memory, + &pointer) == SUCCESS; zend_hash_move_forward_ex(table, &pointer)) { - repeated_field_handlers->write_dimension(repeated_field, NULL, - *(zval**)memory TSRMLS_CC); + repeated_field_handlers->write_dimension( + CACHED_TO_ZVAL_PTR(repeated_field), NULL, + CACHED_PTR_TO_ZVAL_PTR((CACHED_VALUE*)memory) TSRMLS_CC); } - Z_DELREF_P(repeated_field); - RETURN_ZVAL(repeated_field, 1, 0); + Z_DELREF_P(CACHED_TO_ZVAL_PTR(repeated_field)); + RETURN_ZVAL(CACHED_TO_ZVAL_PTR(repeated_field), 1, 0); } else if (Z_TYPE_P(val) == IS_OBJECT) { if (!instanceof_function(Z_OBJCE_P(val), repeated_field_type TSRMLS_CC)) { @@ -452,8 +476,7 @@ PHP_METHOD(Util, checkRepeatedField) { repeated_field_type->name); return; } - RepeatedField* intern = - (RepeatedField*)zend_object_store_get_object(val TSRMLS_CC); + RepeatedField* intern = UNBOX(RepeatedField, val); if (to_fieldtype(type) != intern->type) { zend_error(E_USER_ERROR, "Incorrect repeated field type."); return; @@ -474,43 +497,55 @@ PHP_METHOD(Util, checkRepeatedField) { PHP_METHOD(Util, checkMapField) { zval* val; - long key_type, value_type; + PHP_PROTO_LONG key_type, value_type; const zend_class_entry* klass = NULL; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zll|C", &val, &key_type, &value_type, &klass) == FAILURE) { return; } +#if PHP_MAJOR_VERSION >= 7 + if (Z_ISREF_P(val)) { + ZVAL_DEREF(val); + } +#endif + if (Z_TYPE_P(val) == IS_ARRAY) { HashTable* table = Z_ARRVAL_P(val); HashPosition pointer; - zval key, *map_field; + zval key; void* value; +#if PHP_MAJOR_VERSION < 7 + zval* map_field; + MAKE_STD_ZVAL(map_field); +#else + zval map_field; +#endif + map_field_create_with_type(map_field_type, to_fieldtype(key_type), to_fieldtype(value_type), klass, &map_field TSRMLS_CC); - Map* intern = - (Map*)zend_object_store_get_object(map_field TSRMLS_CC); for (zend_hash_internal_pointer_reset_ex(table, &pointer); - zend_hash_get_current_data_ex(table, (void**)&value, &pointer) == - SUCCESS; + php_proto_zend_hash_get_current_data_ex(table, (void**)&value, + &pointer) == SUCCESS; zend_hash_move_forward_ex(table, &pointer)) { zend_hash_get_current_key_zval_ex(table, &key, &pointer); - map_field_handlers->write_dimension(map_field, &key, - *(zval**)value TSRMLS_CC); + map_field_handlers->write_dimension( + CACHED_TO_ZVAL_PTR(map_field), &key, + CACHED_PTR_TO_ZVAL_PTR((CACHED_VALUE*)value) TSRMLS_CC); } - Z_DELREF_P(map_field); - RETURN_ZVAL(map_field, 1, 0); + Z_DELREF_P(CACHED_TO_ZVAL_PTR(map_field)); + RETURN_ZVAL(CACHED_TO_ZVAL_PTR(map_field), 1, 0); } else if (Z_TYPE_P(val) == IS_OBJECT) { if (!instanceof_function(Z_OBJCE_P(val), map_field_type TSRMLS_CC)) { zend_error(E_USER_ERROR, "Given value is not an instance of %s.", map_field_type->name); return; } - Map* intern = (Map*)zend_object_store_get_object(val TSRMLS_CC); + Map* intern = UNBOX(Map, val); if (to_fieldtype(key_type) != intern->key_type) { zend_error(E_USER_ERROR, "Incorrect map field key type."); return; diff --git a/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/DescriptorPool.php b/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/DescriptorPool.php index 1ef403cfb7e874..2c00dfb60bd4fd 100644 --- a/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/DescriptorPool.php +++ b/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/DescriptorPool.php @@ -95,6 +95,9 @@ public function addDescriptor($descriptor) foreach ($descriptor->getNestedType() as $nested_type) { $this->addDescriptor($nested_type); } + foreach ($descriptor->getEnumType() as $enum_type) { + $this->addEnumDescriptor($enum_type); + } } public function addEnumDescriptor($descriptor) diff --git a/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/GPBDecodeException.php b/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/GPBDecodeException.php new file mode 100644 index 00000000000000..402d542f391172 --- /dev/null +++ b/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/GPBDecodeException.php @@ -0,0 +1,47 @@ += 0 && $byte_limit <= PHP_INT_MAX - $current_position) { + if ($byte_limit >= 0 && + $byte_limit <= PHP_INT_MAX - $current_position && + $byte_limit <= $this->current_limit - $current_position) { $this->current_limit = $current_position + $byte_limit; + $this->recomputeBufferLimits(); } else { - // Negative or overflow. - $this->current_limit = PHP_INT_MAX; + throw new GPBDecodeException("Fail to push limit."); } - // We need to enforce all limits, not just the new one, so if the previous - // limit was before the new requested limit, we continue to enforce the - // previous limit. - $this->current_limit = min($this->current_limit, $old_limit); - - $this->recomputeBufferLimits(); return $old_limit; } @@ -370,7 +367,7 @@ public function popLimit($byte_limit) } public function incrementRecursionDepthAndPushLimit( - $byte_limit, &$old_limit, &$recursion_budget) + $byte_limit, &$old_limit, &$recursion_budget) { $old_limit = $this->pushLimit($byte_limit); $recursion_limit = --$this->recursion_limit; diff --git a/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/MapField.php b/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/MapField.php index 68c10c08247c23..55cc12ce85f5fe 100644 --- a/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/MapField.php +++ b/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/MapField.php @@ -155,7 +155,6 @@ function checkKey($key_type, &$key) GPBUtil::checkString($key, true); break; default: - var_dump($key_type); trigger_error( "Given type cannot be map key.", E_USER_ERROR); @@ -284,6 +283,9 @@ public function offsetSet($key, $value) GPBUtil::checkString($value, true); break; case GPBType::MESSAGE: + if (is_null($value)) { + trigger_error("Map element cannot be null.", E_USER_ERROR); + } GPBUtil::checkMessage($value, $this->klass); break; default: diff --git a/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/Message.php b/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/Message.php index 887c86ca6ed7f1..cd15e0f042b38f 100644 --- a/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/Message.php +++ b/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/Message.php @@ -224,48 +224,57 @@ private static function parseFieldFromStreamNoTag($input, $field, &$value) switch ($field->getType()) { case GPBType::DOUBLE: if (!GPBWire::readDouble($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside double field."); } break; case GPBType::FLOAT: if (!GPBWire::readFloat($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside float field."); } break; case GPBType::INT64: if (!GPBWire::readInt64($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside int64 field."); } break; case GPBType::UINT64: if (!GPBWire::readUint64($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside uint64 field."); } break; case GPBType::INT32: if (!GPBWire::readInt32($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside int32 field."); } break; case GPBType::FIXED64: if (!GPBWire::readFixed64($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside fixed64 field."); } break; case GPBType::FIXED32: if (!GPBWire::readFixed32($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside fixed32 field."); } break; case GPBType::BOOL: if (!GPBWire::readBool($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside bool field."); } break; case GPBType::STRING: // TODO(teboring): Add utf-8 check. if (!GPBWire::readString($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside string field."); } break; case GPBType::GROUP: @@ -280,43 +289,51 @@ private static function parseFieldFromStreamNoTag($input, $field, &$value) $value = new $klass; } if (!GPBWire::readMessage($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside message."); } break; case GPBType::BYTES: if (!GPBWire::readString($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside bytes field."); } break; case GPBType::UINT32: if (!GPBWire::readUint32($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside uint32 field."); } break; case GPBType::ENUM: // TODO(teboring): Check unknown enum value. if (!GPBWire::readInt32($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside enum field."); } break; case GPBType::SFIXED32: if (!GPBWire::readSfixed32($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside sfixed32 field."); } break; case GPBType::SFIXED64: if (!GPBWire::readSfixed64($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside sfixed64 field."); } break; case GPBType::SINT32: if (!GPBWire::readSint32($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside sint32 field."); } break; case GPBType::SINT64: if (!GPBWire::readSint64($input, $value)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside sint64 field."); } break; default: @@ -345,24 +362,21 @@ private function parseFieldFromStream($tag, $input, $field) } if ($value_format === GPBWire::NORMAL_FORMAT) { - if (!self::parseFieldFromStreamNoTag($input, $field, $value)) { - return false; - } + self::parseFieldFromStreamNoTag($input, $field, $value); } elseif ($value_format === GPBWire::PACKED_FORMAT) { $length = 0; if (!GPBWire::readInt32($input, $length)) { - return false; + throw new GPBDecodeException( + "Unexpected EOF inside packed length."); } $limit = $input->pushLimit($length); $getter = $field->getGetter(); while ($input->bytesUntilLimit() > 0) { - if (!self::parseFieldFromStreamNoTag($input, $field, $value)) { - return false; - } + self::parseFieldFromStreamNoTag($input, $field, $value); $this->$getter()[] = $value; } $input->popLimit($limit); - return true; + return; } else { return false; } @@ -377,8 +391,6 @@ private function parseFieldFromStream($tag, $input, $field) $setter = $field->getSetter(); $this->$setter($value); } - - return true; } /** @@ -567,7 +579,8 @@ public function mergeFrom($msg) * specified message. * * @param string $data Binary protobuf data. - * @return bool Return true on success. + * @return null. + * @throws Exception Invalid data. */ public function mergeFromString($data) { @@ -595,9 +608,7 @@ public function parseFromStream($input) continue; } - if (!$this->parseFieldFromStream($tag, $input, $field)) { - return false; - } + $this->parseFieldFromStream($tag, $input, $field); } } diff --git a/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/RepeatedField.php b/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/RepeatedField.php index 0dc5d9d2069eeb..2ad4709a678f7a 100644 --- a/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/RepeatedField.php +++ b/third_party/protobuf/3.2.0/php/src/Google/Protobuf/Internal/RepeatedField.php @@ -225,6 +225,10 @@ public function offsetSet($offset, $value) GPBUtil::checkString($value, true); break; case GPBType::MESSAGE: + if (is_null($value)) { + trigger_error("RepeatedField element cannot be null.", + E_USER_ERROR); + } GPBUtil::checkMessage($value, $this->klass); break; default: diff --git a/third_party/protobuf/3.2.0/php/src/Google/Protobuf/descriptor.php b/third_party/protobuf/3.2.0/php/src/Google/Protobuf/descriptor.php index 2263af6ed1bb67..fb69eda0dceb58 100644 --- a/third_party/protobuf/3.2.0/php/src/Google/Protobuf/descriptor.php +++ b/third_party/protobuf/3.2.0/php/src/Google/Protobuf/descriptor.php @@ -210,6 +210,12 @@ public static function buildFromProto($proto, $file_proto, $containing) $nested_proto, $file_proto, $message_name_without_package)); } + // Handle nested enum. + foreach ($proto->getEnumType() as $enum_proto) { + $desc->addEnumType(EnumDescriptor::buildFromProto( + $enum_proto, $file_proto, $message_name_without_package)); + } + // Handle oneof fields. foreach ($proto->getOneofDecl() as $oneof_proto) { $desc->addOneofDecl( @@ -220,20 +226,36 @@ public static function buildFromProto($proto, $file_proto, $containing) } } +function getClassNamePrefix( + $classname, + $file_proto) +{ + $option = $file_proto->getOptions(); + $prefix = is_null($option) ? "" : $option->getPhpClassPrefix(); + if ($prefix !== "") { + return $prefix; + } + + $reserved_words = array("Empty"); + foreach ($reserved_words as $reserved_word) { + if ($classname === $reserved_word) { + if ($file_proto->getPackage() === "google.protobuf") { + return "GPB"; + } else { + return "PB"; + } + } + } + + return ""; +} + function getClassNameWithoutPackage( $name, $file_proto) { - if ($name === "Empty" && $file_proto->getPackage() === "google.protobuf") { - return "GPBEmpty"; - } else { - $option = $file_proto->getOptions(); - $prefix = is_null($option) ? "" : $option->getPhpClassPrefix(); - // Nested message class names are seperated by '_', and package names - // are seperated by '\'. - return $prefix . implode('_', array_map('ucwords', - explode('.', $name))); - } + $classname = implode('_', array_map('ucwords', explode('.', $name))); + return getClassNamePrefix($classname, $file_proto) . $classname; } function getFullClassName( diff --git a/third_party/protobuf/3.2.0/php/tests/array_test.php b/third_party/protobuf/3.2.0/php/tests/array_test.php index a4cad7196cf1e4..b55408da52b73c 100644 --- a/third_party/protobuf/3.2.0/php/tests/array_test.php +++ b/third_party/protobuf/3.2.0/php/tests/array_test.php @@ -751,23 +751,13 @@ public function testMessage() $arr []= $sub_m; $this->assertSame(1, $arr[0]->getA()); - $null = null; - $arr []= $null; - $this->assertNull($arr[1]); - - $this->assertEquals(2, count($arr)); - - for ($i = 0; $i < count($arr); $i++) { - $arr[$i] = $null; - $this->assertNull($arr[$i]); - } + $this->assertEquals(1, count($arr)); // Test set. + $sub_m = new TestMessage_Sub(); + $sub_m->setA(2); $arr [0]= $sub_m; - $this->assertSame(1, $arr[0]->getA()); - - $arr [1]= $null; - $this->assertNull($arr[1]); + $this->assertSame(2, $arr[0]->getA()); } /** @@ -817,6 +807,27 @@ public function testMessageAppendOtherMessageFail() $arr []= new TestMessage; } + /** + * @expectedException PHPUnit_Framework_Error + */ + public function testMessageAppendNullFail() + { + $arr = new RepeatedField(GPBType::MESSAGE, TestMessage_Sub::class); + $null = null; + $arr []= $null; + } + + /** + * @expectedException PHPUnit_Framework_Error + */ + public function testMessageSetNullFail() + { + $arr = new RepeatedField(GPBType::MESSAGE, TestMessage_Sub::class); + $arr []= new TestMessage_Sub(); + $null = null; + $arr[0] = $null; + } + ######################################################### # Test offset type ######################################################### diff --git a/third_party/protobuf/3.2.0/php/tests/encode_decode_test.php b/third_party/protobuf/3.2.0/php/tests/encode_decode_test.php index 94adf7931c4b1d..288df5696df15b 100644 --- a/third_party/protobuf/3.2.0/php/tests/encode_decode_test.php +++ b/third_party/protobuf/3.2.0/php/tests/encode_decode_test.php @@ -211,6 +211,204 @@ public function testDecodeNegativeInt32() $this->assertEquals(-1, $m->getOptionalInt32()); } + /** + * @expectedException Exception + */ + public function testDecodeInvalidInt32() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('08')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidSubMessage() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('9A010108')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidInt64() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('10')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidUInt32() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('18')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidUInt64() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('20')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidSInt32() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('28')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidSInt64() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('30')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidFixed32() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('3D')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidFixed64() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('41')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidSFixed32() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('4D')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidSFixed64() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('51')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidFloat() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('5D')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidDouble() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('61')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidBool() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('68')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidStringLengthMiss() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('72')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidStringDataMiss() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('7201')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidBytesLengthMiss() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('7A')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidBytesDataMiss() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('7A01')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidEnum() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('8001')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidMessageLengthMiss() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('8A01')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidMessageDataMiss() + { + $m = new TestMessage(); + $m->mergeFromString(hex2bin('8A0101')); + } + + /** + * @expectedException Exception + */ + public function testDecodeInvalidPackedMessageLength() + { + $m = new TestPackedMessage(); + $m->mergeFromString(hex2bin('D205')); + } + # TODO(teboring): Add test back when php implementation is ready for json # encode/decode. # public function testJsonEncode() diff --git a/third_party/protobuf/3.2.0/php/tests/gdb_test.sh b/third_party/protobuf/3.2.0/php/tests/gdb_test.sh index 45a2841fd61464..0809bef3b99af6 100755 --- a/third_party/protobuf/3.2.0/php/tests/gdb_test.sh +++ b/third_party/protobuf/3.2.0/php/tests/gdb_test.sh @@ -3,10 +3,8 @@ # gdb --args php -dextension=../ext/google/protobuf/modules/protobuf.so `which # phpunit` --bootstrap autoload.php tmp_test.php # -gdb --args php -dextension=../ext/google/protobuf/modules/protobuf.so `which phpunit` --bootstrap autoload.php array_test.php +gdb --args php -dextension=../ext/google/protobuf/modules/protobuf.so `which phpunit` --bootstrap autoload.php well_known_test.php # -# # gdb --args php -dextension=../ext/google/protobuf/modules/protobuf.so -# memory_leak_test.php +# gdb --args php -dextension=../ext/google/protobuf/modules/protobuf.so memory_leak_test.php # -# # USE_ZEND_ALLOC=0 valgrind --leak-check=yes php -# -dextension=../ext/google/protobuf/modules/protobuf.so memory_leak_test.php +# USE_ZEND_ALLOC=0 valgrind --leak-check=yes php -dextension=../ext/google/protobuf/modules/protobuf.so memory_leak_test.php diff --git a/third_party/protobuf/3.2.0/php/tests/generated_class_test.php b/third_party/protobuf/3.2.0/php/tests/generated_class_test.php index 39e6c6c41c5d35..21ee849078ff40 100644 --- a/third_party/protobuf/3.2.0/php/tests/generated_class_test.php +++ b/third_party/protobuf/3.2.0/php/tests/generated_class_test.php @@ -1,7 +1,7 @@ assertEquals(TestEnum::ONE, $m->getOptionalEnum()); } + public function testNestedEnum() + { + $m = new TestMessage(); + $m->setOptionalNestedEnum(\Foo\TestMessage_NestedEnum::ZERO); + } + ######################################################### # Test float field. ######################################################### @@ -832,12 +838,20 @@ public function testMessageMergeFromInvalidTypeFail() public function testMessageWithoutNamespace() { - $m = new NoNameSpaceMessage(); + $m = new TestMessage(); + $sub = new NoNameSpaceMessage(); + $m->setOptionalNoNamespaceMessage($sub); + $m->getRepeatedNoNamespaceMessage()[] = new NoNameSpaceMessage(); + + $n = new NoNamespaceMessage(); + $n->setB(NoNamespaceMessage_NestedEnum::ZERO); } public function testEnumWithoutNamespace() { - $m = new NoNameSpaceEnum(); + $m = new TestMessage(); + $m->setOptionalNoNamespaceEnum(NoNameSpaceEnum::VALUE_A); + $m->getRepeatedNoNamespaceEnum()[] = NoNameSpaceEnum::VALUE_A; } ######################################################### @@ -852,4 +866,15 @@ public function testPrefixMessage() $m->setPrefixMessage($n); $this->assertSame(1, $m->getPrefixMessage()->getA()); } + + ######################################################### + # Test prefix for reserved words. + ######################################################### + + public function testPrefixForReservedWords() + { + $m = new \Foo\TestMessage_Empty(); + $m = new \Foo\PBEmpty(); + $m = new \PrefixEmpty(); + } } diff --git a/third_party/protobuf/3.2.0/php/tests/map_field_test.php b/third_party/protobuf/3.2.0/php/tests/map_field_test.php index d4ec44fc9a084e..2fda91352ae024 100644 --- a/third_party/protobuf/3.2.0/php/tests/map_field_test.php +++ b/third_party/protobuf/3.2.0/php/tests/map_field_test.php @@ -616,11 +616,7 @@ public function testMessage() { $arr[0] = $sub_m; $this->assertSame(1, $arr[0]->getA()); - $null = NULL; - $arr[1] = $null; - $this->assertNull($arr[1]); - - $this->assertEquals(2, count($arr)); + $this->assertEquals(1, count($arr)); } /** @@ -653,6 +649,17 @@ public function testMessageSetOtherMessageValueFail() $arr[0] = new TestMessage_Sub(); } + /** + * @expectedException PHPUnit_Framework_Error + */ + public function testMessageSetNullFail() + { + $arr = + new MapField(GPBType::INT32, GPBType::MESSAGE, TestMessage::class); + $null = NULL; + $arr[0] = $null; + } + ######################################################### # Test memory leak ######################################################### diff --git a/third_party/protobuf/3.2.0/php/tests/memory_leak_test.php b/third_party/protobuf/3.2.0/php/tests/memory_leak_test.php index 5dd79519aea738..361982b5503dbc 100644 --- a/third_party/protobuf/3.2.0/php/tests/memory_leak_test.php +++ b/third_party/protobuf/3.2.0/php/tests/memory_leak_test.php @@ -2,17 +2,25 @@ # phpunit has memory leak by itself. Thus, it cannot be used to test memory leak. +require_once('generated/NoNamespaceEnum.php'); +require_once('generated/NoNamespaceMessage.php'); +require_once('generated/NoNamespaceMessage_NestedEnum.php'); +require_once('generated/PrefixEmpty.php'); require_once('generated/PrefixTestPrefix.php'); require_once('generated/Bar/TestInclude.php'); +require_once('generated/Foo/PBEmpty.php'); require_once('generated/Foo/TestEnum.php'); require_once('generated/Foo/TestIncludePrefixMessage.php'); require_once('generated/Foo/TestMessage.php'); +require_once('generated/Foo/TestMessage_Empty.php'); +require_once('generated/Foo/TestMessage_NestedEnum.php'); require_once('generated/Foo/TestMessage_Sub.php'); require_once('generated/Foo/TestPackedMessage.php'); require_once('generated/Foo/TestPhpDoc.php'); require_once('generated/Foo/TestUnpackedMessage.php'); require_once('generated/GPBMetadata/Proto/Test.php'); require_once('generated/GPBMetadata/Proto/TestInclude.php'); +require_once('generated/GPBMetadata/Proto/TestNoNamespace.php'); require_once('generated/GPBMetadata/Proto/TestPrefix.php'); require_once('test_util.php'); @@ -83,7 +91,8 @@ $n->mergeFromString($data); assert(1 === $n->getOneofMessage()->getA()); -$from = new TestMessage(); -$to = new TestMessage(); -TestUtil::setTestMessage($from); -$to->mergeFrom($from); +# $from = new TestMessage(); +# $to = new TestMessage(); +# TestUtil::setTestMessage($from); +# $to->mergeFrom($from); +# TestUtil::assertTestMessage($to); diff --git a/third_party/protobuf/3.2.0/php/tests/proto/test.proto b/third_party/protobuf/3.2.0/php/tests/proto/test.proto index 1a47a3f2917a59..3922925451de72 100644 --- a/third_party/protobuf/3.2.0/php/tests/proto/test.proto +++ b/third_party/protobuf/3.2.0/php/tests/proto/test.proto @@ -1,6 +1,7 @@ syntax = "proto3"; import 'proto/test_include.proto'; +import 'proto/test_no_namespace.proto'; import 'proto/test_prefix.proto'; package foo; @@ -96,12 +97,34 @@ message TestMessage { // Reserved for non-existing field test. // int32 non_exist = 89; + + NoNamespaceMessage optional_no_namespace_message = 91; + NoNamespaceEnum optional_no_namespace_enum = 92; + repeated NoNamespaceMessage repeated_no_namespace_message = 93; + repeated NoNamespaceEnum repeated_no_namespace_enum = 94; + + enum NestedEnum { + ZERO = 0; + } + + NestedEnum optional_nested_enum = 101; + + // Test prefix for reserved words. + message Empty { + int32 a = 1; + } } enum TestEnum { ZERO = 0; ONE = 1; TWO = 2; + ECHO = 3; // Test reserved name. +} + +// Test prefix for reserved words. +message Empty { + int32 a = 1; } message TestPackedMessage { diff --git a/third_party/protobuf/3.2.0/php/tests/proto/test_import_descriptor_proto.proto b/third_party/protobuf/3.2.0/php/tests/proto/test_import_descriptor_proto.proto new file mode 100644 index 00000000000000..2a19940dece050 --- /dev/null +++ b/third_party/protobuf/3.2.0/php/tests/proto/test_import_descriptor_proto.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; + +import "google/protobuf/descriptor.proto"; + +message TestImportDescriptorProto { + extend google.protobuf.MethodOptions { + int32 a = 72295727; + } +} + +extend google.protobuf.MethodOptions { + int32 a = 72295728; +} + diff --git a/third_party/protobuf/3.2.0/php/tests/proto/test_no_namespace.proto b/third_party/protobuf/3.2.0/php/tests/proto/test_no_namespace.proto index b8c4fdf2fc48bd..58f13d47bc27f0 100644 --- a/third_party/protobuf/3.2.0/php/tests/proto/test_no_namespace.proto +++ b/third_party/protobuf/3.2.0/php/tests/proto/test_no_namespace.proto @@ -1,10 +1,16 @@ syntax = "proto3"; -message NoNameSpaceMessage { +message NoNamespaceMessage { int32 a = 1; + + enum NestedEnum { + ZERO = 0; + } + NestedEnum b = 2; + repeated NestedEnum c = 3; } -enum NoNameSpaceEnum { +enum NoNamespaceEnum { VALUE_A = 0; VALUE_B = 1; } diff --git a/third_party/protobuf/3.2.0/php/tests/proto/test_prefix.proto b/third_party/protobuf/3.2.0/php/tests/proto/test_prefix.proto index 045821217cd828..9bfbad7f82d3e5 100644 --- a/third_party/protobuf/3.2.0/php/tests/proto/test_prefix.proto +++ b/third_party/protobuf/3.2.0/php/tests/proto/test_prefix.proto @@ -5,3 +5,8 @@ option php_class_prefix = "Prefix"; message TestPrefix { int32 a = 1; } + +// Test prefix for reserved words. +message Empty { + int32 a = 1; +} diff --git a/third_party/protobuf/3.2.0/php/tests/test_util.php b/third_party/protobuf/3.2.0/php/tests/test_util.php index 61f94aa1089422..9dbcbb62c9aa17 100644 --- a/third_party/protobuf/3.2.0/php/tests/test_util.php +++ b/third_party/protobuf/3.2.0/php/tests/test_util.php @@ -51,8 +51,6 @@ class TestUtil public static function setTestMessage(TestMessage $m) { - $sub = new TestMessage_Sub(); - $m->setOptionalInt32(-42); $m->setOptionalInt64(-43); $m->setOptionalUint32(42); @@ -69,6 +67,7 @@ public static function setTestMessage(TestMessage $m) $m->setOptionalString('a'); $m->setOptionalBytes('b'); $m->setOptionalEnum(TestEnum::ONE); + $sub = new TestMessage_Sub(); $m->setOptionalMessage($sub); $m->getOptionalMessage()->SetA(33); diff --git a/third_party/protobuf/3.2.0/php/tests/well_known_test.php b/third_party/protobuf/3.2.0/php/tests/well_known_test.php index 40ff1c8f0343da..0c2aec13a92675 100644 --- a/third_party/protobuf/3.2.0/php/tests/well_known_test.php +++ b/third_party/protobuf/3.2.0/php/tests/well_known_test.php @@ -4,8 +4,14 @@ class WellKnownTest extends PHPUnit_Framework_TestCase { - public function testNone() { - $msg = new GPBEmpty(); + public function testNone() + { + $msg = new GPBEmpty(); + } + + public function testImportDescriptorProto() + { + $msg = new TestImportDescriptorProto(); } } diff --git a/third_party/protobuf/3.2.0/protobuf-java-3.2.0.jar b/third_party/protobuf/3.2.0/protobuf-java-3.2.0.jar deleted file mode 100644 index b1f970176d10c3a1c44919171c4cddadb3478113..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1347123 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�Z?q)y3b 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

S4queWd_q@ML1I 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 z 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�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 z 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

agNbS`r->J);Kw$mVY3nmWp*Gb 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

I|?3A;q|FpZO8Z*16y;~wOt*J!yBm7dbjCa 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 z ze;FH+E{@p070nu=yA{t}u-k%iUapEkh};NAdr>B?hwTlslf9W6uRk`-G?!Yh)_DZ_ zFqx;JOoaa04NnPeQl9-*Q_DlM7+lRaz|~s|<4~JO{_zZ%TNV+(u&YZcL>o!-Ph+r2 zi}$48CS)TG&}Ck zQuOyK_)kCz=tk3UF25(_(|kO)G6+hXMj# z_apfvJO3k58*Du7pYC#c*>swj?wWl09|RLWuRpsjm%0poKnKKN?eT7QAhVFS()+wM z!=$kj81x*@5+XDd%UR^fm#xxiO6Qq^aapnUHI6;al`nEsx)28aTSH9g7bE)&R>0jb%n>mCztj zSUY5^gjqD5^YF}6MKw_M2Fx{a*^ud=Ca-<1%Je&V9$r(rbDlhdHM^qbcKfQYG=di*o@!y70bHqM+SG|Gkzhg}NdFm6)X|4#wqJs&=f5SG z{x{>v{~FK#54p7Ut4~8-TH-T{pE70>!aW4=7uE%chl%|Ia46#r9I!_a16+&3HU^5C zV7-~8(JP05a1pt@Y^h~k*A3Y;9{~;^>7x>?YNb^bgIa-F;qzv>wA|u-GC4UteLdZ8 z%=Z5Da!2HL-Q{${@#8h!c9QLNa($5V^$73>os8N|093a(d?a{kwO^tlOc!B8`<6!g zBtUBJpm60v=X3xjvm;ikAQ$T^!Pga7R{T=AE4-=H#U`FdJ&9qO3(~bc!n?rpSXG{5no0_{%>vX{u$zhQ8W&jhl# zreS<1n?#x1<6}mIxJI)h9B&{ipYg#@>|}EGTQ%$+@d>eQr zW*i>>5>7bYc*y*A4}r<(!d}G?^n~qMJ`Oo^TDqD%X#kgrjGH_=0Jl+NE^Us|S-?HI zRqe!5^qyUtt!-~ZI~u=RQ~`B^K9lac;0xcUW$pB3JIK%8&#&B zK(zq7Y1i=7$5r|mq2`s$;D7v4#m%U?pH=Pt{)wq4?w;H@G65(Jn8RZGM`oC>%THdn z+d{10>DvJ2tc0#V&okkCJ*GqtS|Qms!&!rUMzTL)tP#i9pL!p`WDl7vaxYBp^RFj~ znzW>EZ!&wAo@gZ6WycI)Uu(Ztx?{Pj~T#w2?IMy3EWh=QvqysGsz;ro!KONN+5 z$^}TSK?37_&iISBa()}EXcgtmJAFNcv_d;qbzJ&&& z3-#ef_5>P{Dt_<{Puj)z?G`*evkEt)y@$r;;oSuA`%W2T58$$xu$s6$^zX4!vDV>i zF6zjejgN-Dv*_LQOlIn!{L`lp?X+vDB;#<>21*&7zRV>OUZDv>Zk}i+rF{}MA`6y6 zU>UFC(q^j!w!G~e1T~*L$EfI*0Y{Ufo@c%Mi$U}YFOe_AH{1jvkEb5r)h@$M^KNd^EL2#nWXb6HCEH1#H zaa`ymVkxeXT!U}IZ;`>C2=|gOzXJWWUR30}n?=_yGWHdA2}nHn)bYO4`^kG2ig89U z7gN*px1c=U^+An>hD-MoVRNw{ISKYJ0zrrO-0$Vu|0 zlmxh2@{HspyG`t3<#4o$#x(Uf{ONV(eN=cL--Qva14Ba&NoConnnI}uYOjMq+7dh> z$ICXaVP)IJua&Dvd-{O=850)?B^mjmC54Rn6H0$<^~IOyn61`0{c;t!tW&c%Nfl8= zqLRngjhzU6VcXZ!xi7ZkT^YiQn!C0X87IbN>Qs5URAW??j8pTn@j(zEE5nE~trU2s zJhy(mdetqM;+DcniGqGhH=2@N?7LUDp_STnHSMlEs)WNu%hR*3@QidQIp+IJqvw@F7|Lzm~JA2tChuw!fz_6h+I`L+EGP9SUP-BAkbft`Ms=ucK(q>U6-zsuNulcuG$S`E9T* zLy3YME*+Ra9CBMOjrC+KkA7<>FD?W7OlsJFxTq{4!46pooFA7%;W9oGw|Rl;$6m^3 ze&BaV<12dpHt1)_7q9(T+AR6V2VBPmrW=&lmld|1WfBo;jgdyLcF{-Utw+k)zG5gbdbU`KyTL}29xncgq9`Szut^9a&_ zRtFEu5y9CVVxT-HIuYyO?{XkQE#&;~a@o9nW%0Auf^!ZgV@{gOTOQ+(Exeq5opS+3 zQQJ8Zca>tex#g@PuJn-BS+nE;_#dY8!3LT^i978(^u&41KL7Dxi zcA|`3Q(_d=N56>Ve$~U>ov(p)4}&!j;$^_^TUcc9h2-;(ZS1YkE361Ak6AQ5$=jUd zD}pa|A4;vtpd9fh@&fTHteT`fnb3!Hzf!GC{~o(wz!tkez(g5%N}no3b?`+gtZf|d zUpxtWI5M(56bXKT+&Bn}_*hzYVgey}5&|WA$pER*_+8t5d~xlS(D#1dOoBcib&@^> zY^uI5c9{UNTFn3>Z8z)@Cq<$@rc5u`5ea)h-F#p(sasfwKsOE#xNn-ikIauh=FB;L z6cVGTj>6tLh>m5LaSq22J|qM=P9T}ckRtK3a_IO5B>&>=ncGR6^+SRPO(pyJaV5j$ zDIv`y`tc3y0hcnrBa4Wk`y}G&mC;EdO#1C5&;fGrGg0mUBa@z=i+rC-2No@eP4N%K zWOFTn0A@^iLk!!Jr367HW@Y4qC1ph+3J|7cpVdVWhrw0iaf9SD?)_tlCy`Ah1Zg5c(7&t=V9A_F z3~-AHTCeb;B?PnR^$<~OX|51aCDr{C)>ugsLHCdd(=lFfs8~5Sp%07F@O*mWHk~}P*3OoDS;Rj z4@U5q+4DMy{JM86s+ho&XR!(M4C+EB_m>!CJ(O}gho-<{Yc6hI*Us!65?D|2FD*m% zX)vpLW6FI0$SZR|Df>Dtpf^Ny`nWjDl=m@i(GH%Yv#0u!1Zvji z5SzO1dUW~GH_x_4v$xS}WXB3)OvWyKWu+2AE}L-hNATF6iN*h!dpSO_YXZi%(>I6I zxMCy@tB}c+W!t$PQfA?NtLkNV9%(LI&)%Iegf(E6sSM6uBxzQ zH@<1`vWLUple>dlj1eCO%=ZyR40bB$CO+eSvy`2wT2B=-uKJ3eaOzwC%Qg;WLS3cP z?ETBFAxfc2y-j1^1cMU$N+p-*RxSA97wQ~J(<3Nt>}h?D7xRB1Ziwm|Uxq{4`F1=khA7zo6xK~i5&9<9t|wV0p9qdcI_Xmq*$&JQY`MZU;_ zgnN@7aP}~|gvr|CwEC4hWeJ#s0eG4+UiXZMhU0zI>iLNn0wDNNcnC^Etzu6jz7mdx zt%tGs5SjUY17TlunK~;^CQW!Z(OTz7lBiNDhzSE>`ZKMk6|{a^(^_#@&!}ShFEyOp zO}UbF`5MBYdwe{9Ij#h{*8!cW@`4CiSh z9qwTy@sg5e<04eEp}#b3Pe3*&-guN;6enRLK5 z1Z+p7)d&50sR__qo`JBDGec0c zI6a0!M!0OdEZEy0s%|?2>m8V6pBvV9Pi2=shaDYxrFr#O?_1DmNuhZ^fk|-$FGbb( zZu7BU_+vVS2Y)4c-Z(YDEUf50Q^D`?nE?3wxe&shHT17fhA~f`v^Ca_C z)XJ8US+D#vC1t|R9O~*H>7gz2`(Rn4?Fgdb58=z4hz>_H%)K-6db}ADM^j=o=}4Mv z{VhGHq?74FHSSr}$@KuJj;`$eKT*t6YC>f0n`%Y6VVlRel-pXH7|tCX`i9!I9r^uz z4h?`u1MxSd+L%>T*LGi_CB;?4-c&TK$3I|{a7(CC%!Xq_@rhLX^w=oa7vyh!W~*NG z__^oNgF74-3D7MC_DGZZ^{bK?)O75@VJnn%?16pD+cOJpnX=BEw}jZ&grFPn+ZT-S zWdlo<$RfN?Ek(*F0~V`+3vokoDhhG^#b8ECHPn(j>Wv=>&}{`ST@wQ8p$#>L^&55> zR0J{)3>xq_lKE4Ks84U|XeJMC*?H0|t&o@EIG31_mhi}O-+@0VBhC{-a$mPR=`Y;9Hj&U*)u* ze>BRye$8qebPO5U8v%Df5Ylo+pM?x}t;a8-e{aFYv;Lw%!&NYx>Algjy9OLqdxK+d z$+yL%{j+o&X z=-b;Cll5sFZ^0UN7E(dtsd&0ywM8%SS`1$F{X{4gFmxi~l4I#f_@wFy(?R2SOzo{| z)I|c(&*8Lyt7MJSD16&$aO)?gVOxs^vnUEDJ5@#VL!_t| z9tWbY!YZz)ly=ukZ^5nEv_=)WJNNP+`O0ZXpNs1LogB){b>q9~>$#4wDnDWVtHQ~GUQ zoEMOGtM;0~*`Idn_8Q80es;@QCZc5^#{W)Xm|b1I3xlw&41|QRtx4IxkrPjTdPnf| zMrNNHbW8W{H8MNL&9ggg61lXW=v=?h7)Gn?mY0~iysw>5Xi*Z!6PZ%(1{1IHUVpu- zZf5sLn6I3A${xk?#q-*-?NP)#0<~3vF{_#_0K_p2GXq7iFP9jOoGurDePlhVMw)Ti zG7GOu&^BsAnf-%qAQp%#fHpKZwak4^{+J_2sm)JW$>vYT*xO@ABTduWfPCC$hIkBi zTUVzy7qALQBc8b@cL+0wcO9?= z*q~`T(Pv+%7h#A&n(qI>XT@8PxO&SNz5IJW)n1c9EVg0-4MMWo~4r!Ixp6pbFS#&vl^E}X3_m0x(TaydyT^3_ zAjT35)s+8;e7&#yH39y|sQNXDm;>IU5^O9XT!0pbFz+h1zYKG)%wnIzHMmV5h)+QA z5gLa|Zal1WC~Tu9kR~R;3QV-AcbkECGy{AS#3Q+YcN9KuAi%f-dj4m8au}KPY&nei z5@@64W#AfTqceQSt@gM=AgQQpS9LQc%-XFa6oM+QKPgdf++uAZmg*4Ht%l$WcAi%@ z@GBVNE=2k^9e?mWVU&_Ct3}H&zeYg>3``x0Y58vddzS{<1~85`;a9b6Ao^2vxY!Gv z;0tG-SKw@y$muqz^AEA}O|SbAPXaU<`Y9M(lma4F?btt6OPnR)-PYZh%&IXZKD z9Y#On#(FwCdmeYdLdxzTQYK)45^#agmyBaMV|he#Q=he!4}+eY>&mGiW;Fnn zq5eC^kjLCGi%4LCZ2(i$ZX!bFUMwCa1dt#KJ+-n${IosLv^}*xpTT;zy^MmeE)b&& z-dfD=6I*gpab1Iip_0C_dHR^2YU(GMRA?p> z>cO9^FH;>(B9`Z&koAAPDbP^k^EhWI2dOIv4{yXdAo9rNq4TpG^xTc3#5r*x-lFN+ zlzrqV5X1b`a|V<12I8F<1hOZ5z*a`AZv;-C_!!P4S+s@}*(OFRt@xdk?(BG7ltG&2 z>{asU_v<<+pc*x0Bg}CwLJ!@y>zD&)g!{;UGh@AvSzPGvFam^R;`fKwsLKXs=V7W8 z>gPxGK+p232KO0}-Y)Ic#TWY>`NU!>9F^ND4m(i~tAWJK!Hnmb2ve|yXgNY4LooK~ z@p6xxg|sRedu$y37Q?heeTN)?XH9Q4itVx{FsuB_>ow29M8^<|)5MkvY0v)l{@ok4 zbG^$g_E-1%!W}b4lZoHRrFQ0OOXkwoJ_REsPmrc84QW(r+$#7QpEyS)MPfYb2_y3G zDqH59Y+6;r?nd&y<(w{G4 zK`GsQS*V3$&h;SbFxsZa|1*XMy~9EF ze!m0nq*$NzgGOTm)mKL{VX405YK)VwX{;T8XiPI_-dHDf-na?3eQL}TaOMoBU?&Df zVgq*5sBI8=?ZUgod1WwoT!Mn7RPS6Kn=@vTa8t4@eq)(!G$G3NE_f53Warqx8bn1B8VS^RflzSRF&SSw*{Vq5mP5 z;ytBzfqcC?2A>$i9PEfBbNcnI_QyRR< z3zM~bF-H}u66CEaN&>^|zzFrBvIv$fp#ZozqL3^g3jk}KW ze0Dkuu_0C;Ba(IB(YRBhJo}n8XO#O^e@?=R26WX<-w(Zxy`AQ8nbF>GQ`zA?&xE8~&xlFt zdO>rX0Gh6`uN3nq(;aPX#cF`waERE%k~we-A3-`DqfxxyaBo()J;VNk&ZU=*PCQ-L z+=rf&%{XN$*f79am!v@FC+wMg@5?KR6(PSHF43(AS%^aeOu|2X|g#0@=w9g z=4p&HXP78-qI5SR&a4`8T=X05KjAF<*a$G{Z#awi--fgQo4Y0d70&*za|k3SH7!s;ds{DgE0fa2g-^|cbQF#chfWEln+tCQ3X4d4+GH!b@g z{&2La8p)yX$oYxmX$4?YJCVO0-H7a zCzhAJ=a8K8Oxp~=zr761gPKiB=~2cTBEZH*x1?vs+EbeHT~fXq&k zUo&b2yNv5@v|3jc4M1(89ypUeON$aPR&gFgm)WTPynsM*k@thCwO#)c>MSb zGX!BkKEH%=b{QijUvm3SvWNzNhj|)y^-nxD|4^3f%*AB_XI4pLKwlgRqED0w%jh0Rv9LNo z{p;O6!T>~l#}^_nZ&lzcY&&_r%2;dDMVe}DTaobfJT+^V*j`%nDc3{_kL7g-rM7WK zVxY^q1X!;$I9|~eE|rjUP7$NXmSz55+^mjKkfov8vg4G3QSW4`u}-MTTJ?3(Lnk+s z6QlK!??zf&IxxKN^Xwi`=ASZw?oRCgk z`!yx#u{&cQVF0kA6n9u!|3X^bZai?RtBgBZ%iit@XqYN$q0)$l! zlkzuAu}OOd@g$vM{+#*5AA+DkS5)tJH{SaJBM#hYu^ZMMh z4Xs%&h@vTDDhg`gOXJTLtD|O~9U*A9`9af&tEC1|y7RRFRLqZt9U<_V%t0RN!vmO= z3-n=Kn7YFfFg3YaeHECx0~e6nv9<4 z^$G#xU~2V@>pe29ftGHb)e`EQ1Jnw)04VQG8wI;U5P4~=;+$4U6dU=}l||X{4NZ2h zxpDRsN-M`HDXm>iXk3UTUS~L}K-+0LJY}30>1EBSX$C_PS5c|PQ^sM%-wJ8*)JY&Y zmLk-a?>X3rq3YFBP1Ct*vKQ2QX-*4O$=hI%=24y<1`I`O9GriT`E| zvm!kLnATh%qJNskGSudMycxC>Quw#DXOduNv7e7kxC?M6>H^#~-%KM|^X&W^H(8#7ahb;=r0JpjrN~61qyP0 zIDX?vC{CVlmck5@MN1BD|N6+-5nx^3A60+CR(JulDW^J^t?Uri^fx_?SEg4!8u;!+ zGVPGkU$LNFs9n4L0C1wz8^ugWt(i~`e+rflFJ9iwU{+zy z99Gxr#6c-})cedf?{)s_P~Ap@TLIcvI)wR&JO*#*nx6hNwYIQ|0ln`OQ{iyrp*FOB zO-cEZlMbm$aDC6w*m$-z4<2u}wK#B?qa~ozOy2s*n!M8K;EmzU^?l*9;;#AuA!A3f zJfGkZ$RdpD3|GwCPLvS<%}UMqkQ?ii{dds$XRzi;4tD~o0p9iVz9gm97$zrvXRhl) z{AA^xN%YAayzV2%r&;kQk|Y!3XBwlj@u%P!_g?hz+n8Rb4X+(g2z;;4EDxUSZSlf_ zAHco-lVHvbH|7i>eyK=3b*ZDkmb@w{`O*(c9Is^lE541hhj(ohB84yNJP0#Pw%CJ) zvh?n7gSx#br6&wBAA1SI##`#V6|@0mx$FtrBfFpU8cS4As+c{~)I}bCn3+A&Rf4ph zR9Q4LgcOi^@mhyRK&giYm7%CNidkv;<@H)1wd58=vRxi?$VA ztE;Yohab;FhCfiJK5!A{qNr#?ij#@^$`qz!{NZ3z%7i%$MMqEa6jO0C3&x3jCyHsI z$8+9q+W1uqMe3&lTr~IkbTq1`&~U>EY)~Z5#Zg%-{|{;J*yCH+?Q5=8wr$tHY}>ZE zR@t^~+qP}nHdfiT(e>=4JL#Ry?vr!oi<$cajG38xjNiDf@MQTmg7R2M6X*lQpy}J( z*klT23a6xy@-oqI&7fqe#{K|rPPT}+H;^}OifOe{*}NatF`Y<22t{T5a!H~3Wgg2S zU`R7)S)yyp4od2x54%y|WecEh8Se*O_|k}i4s~E+=-3dtL6YN5kzQmPm#<>VHiqJ$ zj4fidNK(3f*f1dUdwnl2qEzX~Dz2M0ty82plOx<8B|cv(Jfdip$53899FM}iX!U1* zmZBNjUkb!Iq>=XVFW6<`-hXtj-8w%Ag(2&p>WAF0PAHwC*`>faswP{p(xyBv90*WY z|1)SXmag^%8w@NTN);ZzX;m4ulZHUcKNZVMxKI{-$(K%=HOmq=%;5bKz?vrKol_up zh-Ax))tWk5I&11$4Q_2U&DF*ZpX*5~O%-X1EXWY=0lQ9L(|A*T?%A>!OXW`Inh|`J zO;G+afo0w4>q!+@SQh6MY}VBkI%-;M5HY=|i1t8`mGln}O^@Ag!|O}Ze@fXZ%^z46 z$$_|d2_ml{!Tj}POva_zh&TsKR;+HH-zMDq{if^NeGzHN4XYpff%N#m;Vr>+Qo+-ES;WNsmiSfk9<< zOrv0_(9h-LOBRMxP*%HYuTI86$8P5N6=Lc2FE$Jc{h%VGX)Lkyx@i-hLh<4s^-DF zHY>|nx|tx_ydJoH8o1_00T^275ay3OI#cOe040bvr#v)W0zNuqAFZruTQPoT#rt2c zq^C;gdEjxYTRi+ndyRF)P3*cFS+;NC(kZ1U+X_TR&K+pF*qs23bu4BcgmYKbF-xt+ z+l6J*`a0}Oj+7v)pYfwdzeRuh(KTgDmJt-Ohi%jHw3hC+E;@t-nMqo^PsQmLMD>=q zPDXIJ$(4b8^T7(IC8H5Nbl zv>L+hZB&Fh$dck>j4ch#d@P8fkvzIBS{)uehOnty0YgW*k90~$*xg2Dv?lguG0_^x zcP(1Y(`(k29}TH?#jI0g!~jMKVx|D#!Oi)P!t0u|XamQPsz@HT^fT*?Oe$BP)zA^f zP#voS!_dQxfX^`$4UvwK6!djSthL=Es4BmGk1M%{AZrIDrgq`=4fd^fn#)A-?_2$@ zeOFa`cKnfscn`HmfP1;<#WG7lNkWxneVbc?ey*^*D)fRB)X<|u7CDBw$!f!Fu2wM0 zZjo&(MIh{$_S&_d@@n`V%PUpwaSi7n;+(e1bTirN3?lJeQLC}@8AF#qMROFr6$mL} zat=gM>Y!zwUtl76uYg0vbag(1@D1F4Ew+0DlVf3J3%4DU?2C{)H1Y$m;BM+ zOZK4dQDh5b@@$t6f!Q-E+1??~3rTDZcaG&vVKiw%2iLWg)V1QuAuL+<2MpuGW!kG- zm->N8s<4S3tn?OBnqB)_=4knQG>M>iu(fi*UAQ@QGOnCxaiqgUGV=9*@#M5CLOOv? zPf|KfJe9Zhp#GPKr>zC{klA0gIkw~CCy;89qy4ueV5fE-#$%u=X8y+7y(2+r!Qamg zZr&2qIiXVU^MlDI5s|YNa);Y=y47YWESe^{5p|8CFb@k9WHDy*ADcadY%(zknYqnN z_OlZleLDkSdS>op{F5^t`r?r7U6sVP&i*)tX#{#onU%Hx_n|t$JZug)jcrf+C6f7K z?@>$;*L>;r4w|=!1!6gIa)LpISPSDwEAQzQ&!Zt3=n4xv%?g_^gVAs~Tp*zb#XP%J zNV9E{Q9A~IBJ=UrF(lEEV%WZ*BI_~ykQ}`$uApw=)|*1CS^hHwtiCFbaI{54_gP4qCN1Hy8Vm|o^J^HD2K(yFL2Va(jdW*MnM|- zs3>NPoWl)f!LyH9n3V~rcwlA(Ym@aAl%}H1@*V3!d!qZYI~zU z#8~gKinc%Qe7invq=-zQiE z9M8u=q*)h~w`$34p&ZHg+ff9RU^N;&iMKh~BH)KyN%&n>RGWxsyyAch;CY@UBucp# z{>nYENr>zbXiDAWrt^e7ghwhz^&+v8P|2A2XAaq@ok^Aduo_Mw-4%y^ysbqgtHCE` zZ+?<|g(k}G$=-$Y4uWSi6kEHG!-!--*HX7Xfyg?ex%&ryLAvsX_|zSt6Qz?8%B=wh zsIJO+xf9eR-J%tgx3ci(QxnBb+97Pk5AD1^r4MAEis3EF?pm5QQs*-6Vo+qS=pPzG zwAy)l2G(;mw`z3}E=4auWDeyHaaf;$W zOBPc}e1Sbjih++fGhLJ5@CE7qVJUA~wrc1uO~cY~_cAVHI*o!iYZWSvK1x1$T}fIS ztD;t;iFKS4QiAZGQ`&V&V3^KVL?b{gxMsp#m?)C%pt?N@S)@QH0~#)~$7#*Eq^rW)4XB;b0KZDhMI-KS9@d(lq6 zMq+>O8^^%v^Ysz-{M?OV!zkuBtZhU4UN(HI2s^2rHFS3~x0z)uZ@K7eFKHb0Z8Gud zW9>C920HHYg7VfX-YMciRSvSyVmAvvH@bwi(fNr1a zTgM@XiG0ZEED>WCcGvriY$L8<-lu3JcVRtO!U~W=z|k@FhK4?6A8{6NWuyTjcmt6V z8T{oFdv?jq)?b6e47n?8KiDA1BWT|#{=-|{%Z;7dDcpD$oDLNxtQz=0uDwhgy``Hv zl1DMW)u{F8eKEIs{p8LS`0g_~q*b4fKBggbKMeSl91tvW1yT)TBqX;7fXu6=EcYtH zIM(g-y{qXep4a{~T%f<+;D9Ge9%dj~q+qai{jbpx5p877wk$u|FHl6r_m2HHx}zNH zDYm`0fsbG&=L+$XaIk%Kswj3v!mw&BDaN0&+kbgkV%srDW*k-

?vnBR_omoGCxJgsdttSscd_1(S|hDpAM8E--pPcE_an$S z%>IRDU_7R@R@vj8zS<`q)}$U-A6@^pXDsRUfY2agsoDPlFR*ug-rxl8`$9SgP!wd0 zsr8N>G(0pgi2ez;d*ev0q+`+ui>0bnAL~=Iix4S}w7_(5!yhjFR0zxmI%%@&rG-{^ z{m>L9#q>GUh37Y#EI3nNkC~Ioj2^1yUcuwmT@PW1_~&*7E=}aS@TN7k#?6;-PFda1 zrVB5v)&JNuJyhM*x~`ReotbcaHL%LFYV3Tv6$MW`&~{G1*cr*3kyMM0Zck-W7hm!~ z>>^?8ebg{I?P836Na2Oi;!T&FPEU(WCZ`v5DRPQ($an~M;2!h$V_0a^;8RAynZ~FN zw+LRpKa*FQJ5mBuz2`ZBGR>WQ*wv^O|CM_wM8Fmf< z#dg#Ir>A+qWdXADQ8@x%%P6{Ql*ziUx>4rHSqEr*0RdY-{ zM5((Wce`FK+T9Jt@}^liyRyse1-yKoVVl>DdFhTU*pA=66>ilYJn_h?UDUEq#^by3 zK+`I9J;>t@0e|xEWPxs&xZSVhkv@C(O~eaZcbRVF{EfD=;(GY{f$CQ5lhU))W<>0b zl)e1Am*G><{+w&9;E(M7gATLGwoJnVm07iSlNs$l>Iv4#AE*@r$+W5o2yO74dP5Iu8ZwC#`9J*SKH7LbFERU6Z#d}{r)nW9ehSshVi~uPqd#*WasfhYQ9PCSo*+>nkU99C!PZ%loS ztquC##(M)f+{Xl=SbG2K=hUCX{*Y@nlgW@K_^6>(HoHmAJs+d=l;MMlvmvo^^C9Fq znC^zwU~~2DEj>dso;4S;x4L{Ex-o0B!}N;2*SzhEP1r`*IJ>AxOSD0SeZY8}CBHhG z744<)&Jc$EYUf%{!~LA5#c43fxc0RjlOO22|LKJ3Qd<&ZiHLPLrn;D}U$ z43nxOgi9cAN153Ng%(OetsI63_8&-1>Z7EQI4I$e)iTJpGl$V-2Bz92{cvUXY(Tzs zf{maPqg|l!q`Sp=y$0bOPSH^4Ek3uuqFMz`G055f*?Uje>fpFTee(PK$mFSnfb&R; z_EIyN-ICkd-(Ar6(j`}$PK}}&HZ>MGmbc_*=^tfrS1`34q7LYaufuhC^~kfM7>~+Q zH`WfOG(cCyP)n`M>1Q8yctti=5BwQNx5^JpUe`(ku&)f{$DCkCrMKBX{)UA; zh8M|TJwUR5o@(p~JT#1JN#dd(XNR7Qu^l+m3SJRqqsP?3VnD|kWmB-y3eOe!ULdN} z=Qia#cM*v-#oB45*$oIE2*sEh>@hdqX@GtKa*;bZ|M%p#j$u~GK%;Y-l%4*(P zSzX%J?fYk6N7a}&W80>cE+FCG=f$JYWPqs;XNTuwj(+L$0%Q850vVg4jJ7E9k3)j# zq7%JoIV`!OBRib}r`7OTCW_Rl)0N(m(p*R0ee|0*ccR^3ATA zV_0*VX(YUoVY!iGrwbR9vG)i&NZ;ulLcg|h)H_oxj%O(FuTc&@!`8aL@X!5f+%qid z*=XyMPwxkFLbR{q8nq&C{DA`9$~)kSD;337yZOR#{l!+d^+K8+*@D2h)yKN8*1G<} zQq8m#<*>e@1%*2y`ms@ZYTQ?b7mz|Gb9nUr0zWaAr5E%*2cJLffk9=2j7Az92)_rk zWa{brE$sP5a`H7Hs5Ug8<|j0pgeTfH0Jn_~7L*FXYbN0=4w>p>GGiJ*Q-DuK|MpHI z`t1QBsiq5WWpUK&OEj0vh8 z)>mQCxEwh%jNFB3?T=P1Y@FV{bojKu&|V;vJGYu`}-s(#JFJ^UX2*1nWWtLtaTvCepsf&kqN#~s*M8}>W=vzizNzrFXKN`wc&o`6eIXgF@)Owc zYNfyRK7Kg34~5K3qqT+QC5i#%o(a#hZfkm-w4J^BJ^zv_x)!^YinJ}g4(IA%-iyC* zf}Cdwo{40%^V8z`y`mmM)N8J~IN>ZtvoV$SDD$I2g*zl7=1Ta_g1Uh+5LB5o)r(E{w#)4;+zNI`gOypn0V2D-rh z8z=8GiUNx!hf=m55%1AqLDqS+(W~i?x-dU*q{Z&L$#93$1np^F+hJ?Kkq6HH-^^!7 zTlUm_ww*~{TF;+jH=A5cK9i%EyJx;lN~1X$QwNi{@e3)Q;r?yGCFZHDN1y);TN&-^ z$%udKr~88cQzKg7f2$Gw-xm0*RIKC{;?}Qv}zHd5YJ4`PuY~=KGfB&k5oZuhp zP4{EeJL-*YX~V5EuyBTKvp-D8#XHw^lt?^#u7wLai#|N~m zEq6m1^gHsvaFl~O<2YFEAm-7JHfvQg<2V_*NxJ>kx)e8ClH}Fez~PG9UZ!+k@!Oln zyi?>;NU8-mb-{niJCM+b1Cw{d@+}8yNI00{Z>Z*f_MZJk(z|-sH9aTM2R@%y7iHeP zlz03)U)!II8k($pfZZgKAS%^mYlq$i$fxHkd)uD z+ajvEE3%@jE7;%l5BfFaX6z?-IE6QIi(<#DLpSyNMl12THhNoxM_E@4)#)}VJaR>9 ze5sknRHt@t<;AgK55SqiM)E+YGBimF0{-sE=0Eip;s`iH{2BJA{*TVn|K<9Vvo^9Z z{{K^+%G9$&J?WnpZJ9^0r0lJKAQ)QYEu#RG^zoyy5br9^%xup6gMBpj;it_SJ`g<3Yi!Ih7Uu z`yEQ?`d+;-~BD!aR8zrx(J>|(z%x;5?8Qha(%{T$W z)zn32d-4sG)_EYyLGD=w&|HMw8MNCuB1<@BB@+}EU3Auo^u*tCcSC=w7qq+9R>2jm zkH?g11VKyR4>RG@O&WX#kk`Sz6>ml=mKURYyKJU6i82917EB0*?GE(d$J}CdptXKa zjJv9H=lLk3U8UuU$biV;xbgk~1C)4wze~$PajZAcs(Xb~+})S_s$Vcnv%tyIw$I9s zwm!pFyr!(U071?P2KWc+pQ5nl+HT=glQk-(jsO{H6Z6T$oik-9?+oYmVjYsYPb4kT ziNhy+SI=O_<{-{_GxgE!sp{M8%iht5yrXJH2xs;4Xp?D^#j%8ml|21dCM6Z5?CL+t z)6@Sklkx*Y`DI{ZMQ37TV`6DUXKVi>+|_q7ru%ON=|J-TS*HIlZorb}f4Bi{-#LbC z36@}Y(Ssmvpd=Xx&VmP@2t=mL+$8+H&tz#N(0XiF)*y>S&FVwp`H!Gpp-4k&RGN?g z-M$T7OOFbxsug#S^9J*(E_a(Ix{dJXcVn`Kgel9^sbLSF6nqY*<8V&A={>zVl4Mu$6Q&1_NoyYXV|UwV_Lvo{7i$XmiI+ZmJXP^M z&+h6(;Q|s>hQ}rD%H1I{V;>s$bJt5CJlca@B0SooT_il(!(B$apFIElY`+i{d^yQF z$sFyD8Jutm$l|o>b`em%ZZGbGjq)jPk6za|)c2ySPp#M4-O;1Dlw&l%aVZrR1Ss)? zwl1Eskk!N^hs=3^0E_m@X^gOPx~zpMq*dlR9#oS{xl%`eo@r@Yht-*ec_AszNqBHS zl`Dm!^^m}c1I$B2J8)K&d1|Sv)h#oaKl92eYjbs)=#EB|-%~E%I<6`x$-WkVp})gFLXhU7o6p zxr7iwImOAwQgxu>V=AkWkrN@Zd^fk}-crRSKZu6LoCIk;M@pZkZLZhJ&kd5DU5ga| zPHbtpsBvSvx;jmj7r_(m-MDmUyKNXB?#AD55%m%x_88SXJWMHtUk6DuN{a=SIF^A8 z0Y>;3x=^lKoj44(&~kql%10em6x3M8nNowVmjl%T!Xw4c@NL!>B696yd%ltuGDu5# zUxDWq`^E*V`k|o&p(jegXCk=hi&n_uDp__(PPXo)Pl;wpffUseZ4&X8{B87s ziuQNVs~o{)M%bP;Bb;KrWEazN;qqXU{+8Tj?v!pOP=-i3I*Kiegk0_pFL#U zx#GskS5us0nKIk#RzhO?e}A;g_yGS16L+I61_dBnVASHWC{ayxhI5t8GkbDRfa5`y zI4czGN`j`8$6vJa!LAZ=Fb4kMks0Ud0h~Pb9hHy)>;cwQdA3HVJ8d7Y4ss;pV+_qtgo_S8P`0qOJRsx@O1U-#MRd^k$wg708IBV~Y8c zJft@0jM+16!Pva-!bm%0#JE1!x3FSphie^Mmk<(iQ%l`VSxtUA2wT5OXq`B;GAP67 z9Gdm>F-?U~Tcfp%>Z4aD*F{ilhr1YU{#@}d`fQ9YhCCRbZZ+ZY4t9kw<(S}G!Z!?W zoxnW&id_-;l5U}N<8RTnl5ep)DIzw8aN}E*&|Jbg%8sPIXi})1_n9;<5Vv!i0bf>; zy=DPDRB=OWw~^G{LzCWGn?mmffMh2Z=V}PEoE7~=+rZ~PV*a6B`X$s?sLyelZtZdp zu_xRYh72Ajey#ZUq=#~LUis8`2=AcA@LgJkllzUJ$wL8qgc{tF!R?aVl>4xq1FY^L z*IS0~ThqziDOO)J&0p3}0UK+t)dnrC(XihT@XrmRqp&q2us};=q==d%(ZN2ur{{ww+SzNafI)YIb zzfAendG4rbva9TL~OF$OmHxBt$U)J|sb; zlWGZ@to*oS(x0~A$pU%KV}d_;;Vzc34U>jqk+#>J2=K0}xiH`pmRzhD3My4;XHstm zEfZJ!qd-Rxjh6!`VX*7uyh_(qSd@uEgv5nzR)9tX!H2y)jRkkS8D?S0%&;q_1D8#sVZ zUs%XpubFe5HQ@n2v~qV{E@zA;ubPHBk+;g}e@aIj3pb6{s=UXZi9+QzA;} zqEq=-E=e{*>uB2Vc()=`gm&NitJH)=IY`PV_DP_k08^^ps8T#}xzcrI+(?b)0g_Ol zn5`HSDv9!-gK8^(a#}Z4m?|6SCHPAuO?s_O%{?gVsm;&|B(z5 z9xyXJIl{h+xA#9oF?!YzZ9G#!Pt^N8QmyO8$wVy5Vv5@^FLGtf9ODOy2n921zKfxq_p4;lSM+=PS+q=^jq97S^ufjnPHghO%l zP*{{-i`e5Ct>lhWidG#4nIe~e;UyE`^SgK_zVq~HRayy# zPQ~#SjLy zTMwcnh2Z6Q zf|U2del{(A+S3JADcB`j+ZwN@2%+x-TVs##s+TcbE3RE@m1}_Cu3N=m?TQrpy2g- z6X%QjYe#JcfVF{}g|*NXyV7|6vcCQuzP;d5FxU~TKi(A8fXb6TNl}fC`Y>C;umt_~ zXX&8I6G_QkVTwUXZ+A+nUZ6}MnK8<>VyJ8!6Qf3Ygv5xf7|=kklNJCvt{tA@hL(+< z!A(b&{a){jeX3!^fkFbms~2#tB8r28xK`E?CxrfoE|JH!gzwCqSyl*ILMS4(WHFCl zLmx6W|BIuWe_?`n5JKrCF`4nCouAqRh$TryPEV6_6ltOuM=U8tI9vSGpx;t0tODKS zhI3n*k8?w2rs3h3^s1l`QPqZ4v_Q2(6?uH_#!RiEIGIRBLpEJANbpB0Lq$a|%7LGd zlvG;Wq^X%vQn}<>L+TZow|NWbE_l5JQZj+Q(cvzZX#NF$(|RO!e*}uza|9G2!xtmf<3rqddf}Q^g5a^*PYZ99kAqWD2ct6;ov`K z+KZMc$~yCh8`=<6mqH=phc>5IZ z`W)x_F5ZcUbo~{$$FuRL6aAt~w}!;B>#Huo?K9$~%&&fFROis0Lve6v^nR2x67-$$ z_P|#+Aya}yLYlHlSp`m!@|?5@w>g%oC3ZsCT`wyzrw+*{It3=Y1w*oOi6Z%F!H9Ha zv#{?oap{!7=rKqp-T&W)C8f$Cz|J-j<^_jz;o2ba4tW0DPEwgqIO>i#!rMaTb2;97 zL%*z(fJ@2X3LVU01LmmQ>FDm&RKxHt(cq>LK&aK;<|AtPiNi52Wq6fB0o*C5vPMU9 zp`3A{yl?c8(Fd0_JEXndqhEf88IaM$$p$Um;1E5|8-443*}CH$d3V<0H26=WOT7~H zJ&pBDTYsh{`}q%X_n#8UJDI&#n#}4>8I=RB)QV0q^8I&HdETF1$}<|ra=LwGQz;8@ zHD)!;@;Tj9?*$`}L%qV|*;LZ-nuI2jPJs`>G;i^*w?LRra;V&%*|kr#hz*&m?Qj%Z zsyoWBf4Sb-0$qbdTp<*Xf4bP;F{Z;vLH{+#$zQ*4h%WaE<_}6k^z{2+gmP8RIp7dG zDV)XZZUO@XLw-W}rNfA`Al+Hi%Pa0n;0V0dqY0XQh^&-?5xJ*6Q#eFELriOph=6~x z%x=#MsXNDdsx2^Bg-v|3fC{%E5Sxd`sX0J}n~Ux?rXxw0Qpn`WD{g`8)AXJ@l6Cp9 zU7qb90!vM&GeDm0x7@Ju%RcqcI( zT@SxI&sJm!Y^U=-uuKbYM{i^9C`HNJCjhg-f?crsxvT-zIDvg&fAE6(oc8%(^{xK7 zaDp3*PHM!;hre8H?Zw32xSg9_Y61UF^53|qC%sgE^%18~x5~o>KOZRrJtwCCJI7ao zTIMT4seH=kf?3Ah5#A1~&sopE3=fpBx( z1hspDBr;NfN+w9m&_WH9Qpcu%vP1en-bc&dK|c7=ktgK{o3S1N1s7tDn^JOCMvbk? zCeH%wcH+HT_*{$0a8vZXTlU^&_A$e;D|LCLqyEM()O6(=?Vq~b%NH4|*$T2gbWMa~ z)Pl4&k-f00XtHbI6LR^6S_ z*@(>`+Mgghp(* zuqvC$9(~y;bKdT>*B+fgrjyw!q0}K!_s?OAdx|@1OPnb*_PJB`AjjWJ?XFBOU2MjJsg86a6N1XjA?iNlF;EW!cW+zg~9D>XgZLiZc?xi>baeUBNk3_})MrR8`wpuebMaG?v?)pFK{& z%2KE4;XSEnP zog)z7r4q(sUPQe>#tx5jZX}y({GBd;`WrKk3FGW+AxXz%bG}hcLQTfK#2tD>c{b>lQ9jkZ=9yLTF$fOhyR@s$Oyu)T<-FNlt);r+ zPgkeJUpp)kB=fLH2bs@x)#SCdWO@rvLVe*+?I=wfaf@e>R5R6z9;Tg$hahG@8REza zT;L|o^hQIgKLmT%bF41|U(ME4ya*7Yp1~IpGUkyE`>0EA66H?utKv|UErzv<#QS?! zQ=04-=Zmb9Y33NKd*QG^PltVQnrkmAU%t)lH6=38RrhlbmYjXgiqSF3!bS!2c&B#_ zVa>4VrRi6hovDPq9UkC)RW#Hbs#PI}stH&1ZWuM2s?%oHC1@J>tC$d1P$ybZs%!gjnnSdXl5a7vm5AUQGv{VVw#p%bx`MkEMF~}WPR9?*1N{>=NyeOtp@e$ z4|9Y6Ax80k`pGsg*#60=14wAcZ(Y$hmrBqzht?!8Zz96P(heHG6Uz|6UT;eMt$NWcHw3h}F;4Xr*o8D(Ycc?a@y6}>C6QSTj)hNmVQoYx7l^Hs z?iysD#l&;FCf!{F=!8N4SkIVGUrrbpG&Q@6^eiDTwE*tx0`xwN(-sr^aQ_Z+M!+-; z!zgU49u0l!hmOvV)=Hh;Js>KH%}XvR@E#2^-mbnweD$RR?|{~62e_&TuI2jD`IR(f zY4esH{oD6efjp|zvax0w2FRuGG3QoNe<%?jpUh$KsW=7FbKPhJEzVBub|#KH8hd9K zET)T@n9zQQCP8A|c(azzaV5`ZE3;3C{t=1SW^Z651ppZ!l#Vhh%(?;f8beREP@*Br z9>W*+C{_ta5}v8)SwQ5Ed563so#ZKT&^bIo>}qnW55(*1q^nGAZM4gDPj*?dz2%49 z$HL{#)h>Bx*vubJYruLt{dD^KViD9~(fs$edS;Z!jlttMQidJv%*$k|u{572PeSa< zpc|fpE+^WwZZwXJB6(I*LOtQ z#4?ky^(N(PnpWe!h28S0g#n(ABoyE%*=O zX=q287}~+YK~ZxXKqHjm-}{k9SPVHGtRUCqInGCVa>WikvXew~y#!NRBNX=jiC?t! z4?j8HbZOlsvuhx+jvK1lvtZQitEg{{TBNo{cNyK2wM&V-jzhWy?j+owaXWy9d39fK{PCvp3CTK4Mf7tEAB>{yV^EcssfAe-JuO}`rz zDZ9v=9STxhyq5t&spu>l;33_z>7op>z zcateBh2$0kl$ruWFy1xOzZfMTm!z0y^A%cJ>eg>H-awG;H)#{NiBc_D+^J*b{_{FF zk1FdkN~<09hV^?zHpH;1OhEYH`AJSqn0t9B*XQCixYSWD#!ljmu3oPt%>5oo%-vd#pgK7(+#>v%QB@X7ah0qo zoF{uTo@Lumazm1p8-^4YD>EISl^mHvAJ=7H#A!{$wnbe+73(l);l(|E+A;U<2KzuG zh)lPjK+pQ%^lCpZn_Q^MMS324%oHx>%^>GH2e}Y??B+J%ySY;qof;~~JHyql_Q&$e zKzi@EgS7`D#tRQQf&nF>Ieqwi4S5gA)R#(Z3PXO=lloI@7oWV+wXe4kWDP5fd_8`a%NgVRs z=wzl4N18FuM}PzucF7GZ*~zxcSnSI?wC3{0OVL-XOKvKDjlKFOXbkTZp+(HwLADe zTAr~e?c(iYDN(veb4Gd{j45XDDBWK={k+5$z!y;I>C1g6ghGYiSM`CTlo-Px^cplh zAcTy9JwEN5!EBqFIPqTJzjH*u^oiyspVu%cG;DSt@$!UT8B2^5tvJAd!-l~G0iSKD zpE(l=PG7aAB!W}ncx9JgWGEodOPJq7mfs^#eMbS6v^@{^f*beQC2P<4NK@!dclM%< zS9rv#FcHWO%cf9p2WioCvelImh&=XtUDr zQd0)lHCZ9FXou1dC|wq~No-Rzyn;d2Xl*l-cT8XMt9dG1h4ds(vN;NQR6b?$c=g=m zz9LysKTgnu#d`*wtYD2ZM`TjcqePU>;A^bJi&4O6Oj~T&!!u8(wfI%5z@(JYbfuFC zH)P0rZ56AiL*_;bqOkJRvgzP*RRcdxbl5ZQN@WY_iJM`PjnM1!-%%3vLqW=4zqdkZ`I#}k_HQL; z?kk$qkIgtCN<_|Cf#biE@hlU6m^E(N&kktU2oG-2T9ksilyiwR45l>+elX zB6FV4MedT`G0|Pc>XO|tQ6Oa#x5YeQYCo7RE*?=v9|qNKXkIYPxNS(yGD_H1NuFj& zV9*A#za&EvGnJZeEfC~RVZJy~C;Ts5)Crqbb;Gu8J=(cxz>qneFyeNVUm$eM^kAVB z0olx>M@Y=gk!zX_$9S57`nEH$9cG=T2vQ)oec-^){w9S)J#|_y_?-&4x^Go@AEWw? zl)6b{_c47mn(2mpgdsqj|I5N6e}Xzp6e;w}5M!=KLa=cw{v;bDpAXaTWE*P~8a96| zlG`_!u-4r-PgiX2^-%~YvV+1taEyUrXB*Qu3QR?#gwyvBEwp8pwS7rgl@)=5Es@%w zCneId0Q3P@_-R^Uv^yoyG68hYOZe$4ajd(*Mi{!DiaHmctUiV$w#y{d@S6~FEeS1D z4q=TPd2}lwuyO}~3+9?(f_?k6x0PV7GMkm55j%q=!e@nPI2m)U(h+9MTRRnDwtVL7 z2ldN26CoAEm5|T|uE zCFpS+1<_$;W*_Sj@8_F)+Zq`e=B_9kyv?61O#<22)J_6i7dY19M-2JF@SLm~eK7qi z3EZ-Q{|cI?ZrA&yyanTz5=T&XVtM>f`^d<1Qko$R<4M76x$-HQ_Zbu&bTo^kA8T$O z6HKv-l+*u^#@G^uxwehm6pi1oiL5KPL*n2;fvS@2%)e%ca>gn+m*~hLy7jhMRjlue zUfp@70dFZ}eGzKEkJ2-)=%bkafb=$DaFrLc9V}>Y!trr4&kpVS-EoS8ZT zhJ>d)^W{(`kGlb4aRP!ZY18-8dJ#NrQ_JtaL`vk_Pf6-y20Wn9m8>uAs5!9i@!Oxv zvq9CIU>QN=(g|@;eEmF^Toc0~)#V7yF#q|o%|GkoG9rU2Z;Kv6Xx7bT2Wg$!PhY}^ z-o8E03>vwnch4xi-#>Vzz2(>&?-EmfZ&K{9^r5&t>;Z>Q$|TgEs`aYDAAAB6{a z74iS#>>YS?i=s8_vTfV8b;`D@PT96`%C>FWwr$(C-F5rse#zHK-*opMc=wyExmU91 zGx7{!5qAm-IvD8HRkM9jWOOrW>BaO~N40Z#DanvY6lCA2ApBi1Oj~M7*tk*}6WQy7 zOlC(@KE9o8z|7r$h9L#hb9%co&D||x{)8LXJc^g$x7^i@+$};MLu}sMc2hc~oxQxK z6tdXuHF>izA&W<&ac7ce@BKK`nB(6@dZI^xN(9K3I37#{qJAL7fFpR2ntrhXh1#8v zKzVfDS{LF!PJZ7>v(fj%dCKq#k}dO8MjF{|>gC*bpX7NQ&zR+B!-a!(b&(4FF~34k z&!&)E&tX;-xB78&rblm}yNYccxxId)Z6{`eRv66_al?BnX z{no^C!CMFRZaoge4_)%pEb5f|fsZbh4vwf;lm^-b1NW!{Kh zmEuvsI?P5ntn4L8xtK0Uz&a%P+n75=l2xAu*^r>vXX+c%tuB8H{;K44haYOnmY0aY zK-pgFIGy=5?b@B?n2O)i;{#qB?S)0jb6cAz3KKIgZm>3B2(J;m7_2;R!!)R-3Xg%b z(N2kBVxbtu-X;4RCv_sq8+8|Zs&-ixsoH3%NTy!>3(3p9 znngLO@CoE7jbuXa4w{!{L31=>E?lPJZR?}+z-Np zIiIAY`v~gh)=%&~qJi^(tOL_(fqoHXxTjU_X{_6f+QKXJ#fKx&yhH$Yy}`Re-(VjG zyyf)MQsX&{&OHyi+|TfxrX=d9q2QA%RJPvHk9TGQhF8pUh#`rr=G;b&IcX5RH$*C$ zsQ-3T(pSp|rL02E6FU{UveH+fQ$afE9)MYYaC%oee!I65)8__DleFa>hYcTb;&f8D zo6XU+$TDjbr$#a{O7>u?mopYdC}TMen!(Q~<5LVzz%7*A7K}Jfsz!N!THHhEqONXe z8tRLc|B9+W^P~?9bux9}At1Vo=SZ>>Yi{<{` zE${zpK>vR@?v@s$7xvJSuUv9xbLSl*epo`Pw(S0B*wyAC897Gg2N5Mg;Sv|(Xnfou zjzAk!QKDTVX<{I?yd+jNSt17{pdf`#BAWP4#@{N{`Ed=Y;F=zK zep440m*cJ+bcnz_RxqS8}%ru&E5W@PbbWkWJhbz6;-A(6>aXMkE&yE z%hX=AR*tBMg*J|Wh$ijKv7i)ad~_&uAG~6Rsw9aj>i#E;-R6c?7q%6DX}(?&Y;-~! zXmrIBm+Gtmk-&&jY!k~@gU`kS2=-l3NcJ{;CY$4ZZO9qN0T!N|F|VXE-QFhXHkY_S z^oJ=@B%di*$2$<4&O|Lb#{r~It{t7}mYv;oRPB#q?2KER{6ezHU&&CTH zYDOU0SZbrg)j*d=UB%haTwa)2XI6+NiRbd7MbjJ?n^l3Hl`)6<`a%~ra0C76!6NJ} zpb4W_*-)W>LL<7!Qi~=wi1!I#==I;p550S}-O9}f_@@z5xzuJV*N32L*0#dMnv6lZ zXLFx6$SWwcHEL)VzD#y5Jj+RbNghLK4jH%@glo;mTEBS#ttb^GfOHQgr_7p?SwvyM zg0-A2)e4^H>cQRr2m>LjJodIq0bSbSn$_;0ZT)TswAevf=@vlU6$ik6Dx6jK1n8jQ zt{@KEV&Rdel_ALr&vfY*``ar9HTdgGS&Gu8-1{oj{@OFJ6^0!`AX`~WA~D}xjH3?o z==im6x%^tUn%&ty7T@+l^Uq__A#HoHVKOh4$ee178EYJ#fowafNmG!NyW%FvYAe#h zNyv#oCfHk$-z?@fì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

FCp`GLI@*;M~lKA+AMplg_r-M9h7SdtUS1h5Fb; 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

K?|icqXwlt>_nCnkH`|g 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 z�PxQN!H%0H=JEXHk0UX*$jwc%8Ew2ud10xH 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 diff --git a/third_party/protobuf/3.2.0/protobuf-java-util-3.2.0.jar b/third_party/protobuf/3.2.0/protobuf-java-util-3.2.0.jar deleted file mode 100644 index 2fb0a207eecf9d92369a461b2276914823204a40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67556 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 H<$wPNsw`?T diff --git a/third_party/protobuf/3.2.0/protobuf.bzl b/third_party/protobuf/3.2.0/protobuf.bzl index 73c396d5564964..9cb17f019c478e 100644 --- a/third_party/protobuf/3.2.0/protobuf.bzl +++ b/third_party/protobuf/3.2.0/protobuf.bzl @@ -108,6 +108,7 @@ def _proto_gen_impl(ctx): arguments=args + import_flags + [s.path for s in srcs], executable=ctx.executable.protoc, mnemonic="ProtoCompile", + use_default_shell_env=True, ) return struct( diff --git a/third_party/protobuf/3.2.0/protoc-artifacts/pom.xml b/third_party/protobuf/3.2.0/protoc-artifacts/pom.xml index 28a25119264273..a06c99982a71e9 100644 --- a/third_party/protobuf/3.2.0/protoc-artifacts/pom.xml +++ b/third_party/protobuf/3.2.0/protoc-artifacts/pom.xml @@ -10,7 +10,7 @@ com.google.protobuf protoc - 3.2.0 + 3.3.0 pom Protobuf Compiler diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/__init__.py b/third_party/protobuf/3.2.0/python/google/protobuf/__init__.py index 7fd9e5a458b1a2..0375d72d0d09c0 100755 --- a/third_party/protobuf/3.2.0/python/google/protobuf/__init__.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/__init__.py @@ -30,7 +30,7 @@ # Copyright 2007 Google Inc. All Rights Reserved. -__version__ = '3.2.0' +__version__ = '3.3.0' if __name__ != '__main__': try: diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/descriptor_database.py b/third_party/protobuf/3.2.0/python/google/protobuf/descriptor_database.py index 1333f9966e4cd5..40bcdd720b1e51 100644 --- a/third_party/protobuf/3.2.0/python/google/protobuf/descriptor_database.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/descriptor_database.py @@ -54,9 +54,9 @@ def Add(self, file_desc_proto): Args: file_desc_proto: The FileDescriptorProto to add. Raises: - DescriptorDatabaseException: if an attempt is made to add a proto - with the same name but different definition than an exisiting - proto in the database. + DescriptorDatabaseConflictingDefinitionError: if an attempt is made to + add a proto with the same name but different definition than an + exisiting proto in the database. """ proto_name = file_desc_proto.name if proto_name not in self._file_desc_protos_by_file: @@ -65,7 +65,7 @@ def Add(self, file_desc_proto): raise DescriptorDatabaseConflictingDefinitionError( '%s already added, but with different descriptor.' % proto_name) - # Add the top-level Message, Enum and Extension descriptors to the index. + # Add all the top-level descriptors to the index. package = file_desc_proto.package for message in file_desc_proto.message_type: self._file_desc_protos_by_symbol.update( @@ -76,6 +76,9 @@ def Add(self, file_desc_proto): for extension in file_desc_proto.extension: self._file_desc_protos_by_symbol[ '.'.join((package, extension.name))] = file_desc_proto + for service in file_desc_proto.service: + self._file_desc_protos_by_symbol[ + '.'.join((package, service.name))] = file_desc_proto def FindFileByName(self, name): """Finds the file descriptor proto by file name. diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/descriptor_pool.py b/third_party/protobuf/3.2.0/python/google/protobuf/descriptor_pool.py index fc3a7f4404442e..29e9f1e3f9ca4e 100644 --- a/third_party/protobuf/3.2.0/python/google/protobuf/descriptor_pool.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/descriptor_pool.py @@ -124,8 +124,12 @@ def __init__(self, descriptor_db=None): self._descriptor_db = descriptor_db self._descriptors = {} self._enum_descriptors = {} + self._service_descriptors = {} self._file_descriptors = {} self._toplevel_extensions = {} + # TODO(jieluo): Remove _file_desc_by_toplevel_extension when + # FieldDescriptor.file is added in code gen. + self._file_desc_by_toplevel_extension = {} # We store extensions in two two-level mappings: The first key is the # descriptor of the message being extended, the second key is the extension # full name or its tag number. @@ -169,12 +173,12 @@ def AddDescriptor(self, desc): raise TypeError('Expected instance of descriptor.Descriptor.') self._descriptors[desc.full_name] = desc - self.AddFileDescriptor(desc.file) + self._AddFileDescriptor(desc.file) def AddEnumDescriptor(self, enum_desc): """Adds an EnumDescriptor to the pool. - This method also registers the FileDescriptor associated with the message. + This method also registers the FileDescriptor associated with the enum. Args: enum_desc: An EnumDescriptor. @@ -184,7 +188,19 @@ def AddEnumDescriptor(self, enum_desc): raise TypeError('Expected instance of descriptor.EnumDescriptor.') self._enum_descriptors[enum_desc.full_name] = enum_desc - self.AddFileDescriptor(enum_desc.file) + self._AddFileDescriptor(enum_desc.file) + + def AddServiceDescriptor(self, service_desc): + """Adds a ServiceDescriptor to the pool. + + Args: + service_desc: A ServiceDescriptor. + """ + + if not isinstance(service_desc, descriptor.ServiceDescriptor): + raise TypeError('Expected instance of descriptor.ServiceDescriptor.') + + self._service_descriptors[service_desc.full_name] = service_desc def AddExtensionDescriptor(self, extension): """Adds a FieldDescriptor describing an extension to the pool. @@ -238,6 +254,23 @@ def AddFileDescriptor(self, file_desc): file_desc: A FileDescriptor. """ + self._AddFileDescriptor(file_desc) + # TODO(jieluo): This is a temporary solution for FieldDescriptor.file. + # Remove it when FieldDescriptor.file is added in code gen. + for extension in file_desc.extensions_by_name.values(): + self._file_desc_by_toplevel_extension[ + extension.full_name] = file_desc + + def _AddFileDescriptor(self, file_desc): + """Adds a FileDescriptor to the pool, non-recursively. + + If the FileDescriptor contains messages or enums, the caller must explicitly + register them. + + Args: + file_desc: A FileDescriptor. + """ + if not isinstance(file_desc, descriptor.FileDescriptor): raise TypeError('Expected instance of descriptor.FileDescriptor.') self._file_descriptors[file_desc.name] = file_desc @@ -252,7 +285,7 @@ def FindFileByName(self, file_name): A FileDescriptor for the named file. Raises: - KeyError: if the file can not be found in the pool. + KeyError: if the file cannot be found in the pool. """ try: @@ -281,7 +314,7 @@ def FindFileContainingSymbol(self, symbol): A FileDescriptor that contains the specified symbol. Raises: - KeyError: if the file can not be found in the pool. + KeyError: if the file cannot be found in the pool. """ symbol = _NormalizeFullyQualifiedName(symbol) @@ -296,15 +329,24 @@ def FindFileContainingSymbol(self, symbol): pass try: - file_proto = self._internal_db.FindFileContainingSymbol(symbol) - except KeyError as error: - if self._descriptor_db: - file_proto = self._descriptor_db.FindFileContainingSymbol(symbol) - else: - raise error - if not file_proto: + return self._FindFileContainingSymbolInDb(symbol) + except KeyError: + pass + + try: + return self._file_desc_by_toplevel_extension[symbol] + except KeyError: + pass + + # Try nested extensions inside a message. + message_name, _, extension_name = symbol.rpartition('.') + try: + message = self.FindMessageTypeByName(message_name) + assert message.extensions_by_name[extension_name] + return message.file + + except KeyError: raise KeyError('Cannot find a file containing %s' % symbol) - return self._ConvertFileProtoToFileDescriptor(file_proto) def FindMessageTypeByName(self, full_name): """Loads the named descriptor from the pool. @@ -314,11 +356,14 @@ def FindMessageTypeByName(self, full_name): Returns: The descriptor for the named type. + + Raises: + KeyError: if the message cannot be found in the pool. """ full_name = _NormalizeFullyQualifiedName(full_name) if full_name not in self._descriptors: - self.FindFileContainingSymbol(full_name) + self._FindFileContainingSymbolInDb(full_name) return self._descriptors[full_name] def FindEnumTypeByName(self, full_name): @@ -329,11 +374,14 @@ def FindEnumTypeByName(self, full_name): Returns: The enum descriptor for the named type. + + Raises: + KeyError: if the enum cannot be found in the pool. """ full_name = _NormalizeFullyQualifiedName(full_name) if full_name not in self._enum_descriptors: - self.FindFileContainingSymbol(full_name) + self._FindFileContainingSymbolInDb(full_name) return self._enum_descriptors[full_name] def FindFieldByName(self, full_name): @@ -344,6 +392,9 @@ def FindFieldByName(self, full_name): Returns: The field descriptor for the named field. + + Raises: + KeyError: if the field cannot be found in the pool. """ full_name = _NormalizeFullyQualifiedName(full_name) message_name, _, field_name = full_name.rpartition('.') @@ -358,6 +409,9 @@ def FindExtensionByName(self, full_name): Returns: A FieldDescriptor, describing the named extension. + + Raises: + KeyError: if the extension cannot be found in the pool. """ full_name = _NormalizeFullyQualifiedName(full_name) try: @@ -374,7 +428,7 @@ def FindExtensionByName(self, full_name): scope = self.FindMessageTypeByName(message_name) except KeyError: # Some extensions are defined at file scope. - scope = self.FindFileContainingSymbol(full_name) + scope = self._FindFileContainingSymbolInDb(full_name) return scope.extensions_by_name[extension_name] def FindExtensionByNumber(self, message_descriptor, number): @@ -390,7 +444,7 @@ def FindExtensionByNumber(self, message_descriptor, number): Returns: A FieldDescriptor describing the extension. - Raise: + Raises: KeyError: when no extension with the given number is known for the specified message. """ @@ -410,6 +464,46 @@ def FindAllExtensions(self, message_descriptor): """ return list(self._extensions_by_number[message_descriptor].values()) + def FindServiceByName(self, full_name): + """Loads the named service descriptor from the pool. + + Args: + full_name: The full name of the service descriptor to load. + + Returns: + The service descriptor for the named service. + + Raises: + KeyError: if the service cannot be found in the pool. + """ + full_name = _NormalizeFullyQualifiedName(full_name) + if full_name not in self._service_descriptors: + self._FindFileContainingSymbolInDb(full_name) + return self._service_descriptors[full_name] + + def _FindFileContainingSymbolInDb(self, symbol): + """Finds the file in descriptor DB containing the specified symbol. + + Args: + symbol: The name of the symbol to search for. + + Returns: + A FileDescriptor that contains the specified symbol. + + Raises: + KeyError: if the file cannot be found in the descriptor database. + """ + try: + file_proto = self._internal_db.FindFileContainingSymbol(symbol) + except KeyError as error: + if self._descriptor_db: + file_proto = self._descriptor_db.FindFileContainingSymbol(symbol) + else: + raise error + if not file_proto: + raise KeyError('Cannot find a file containing %s' % symbol) + return self._ConvertFileProtoToFileDescriptor(file_proto) + def _ConvertFileProtoToFileDescriptor(self, file_proto): """Creates a FileDescriptor from a proto or returns a cached copy. @@ -804,6 +898,7 @@ def _MakeServiceDescriptor(self, service_proto, service_index, scope, methods=methods, options=_OptionsOrNone(service_proto), file=file_desc) + self._service_descriptors[service_name] = desc return desc def _MakeMethodDescriptor(self, method_proto, service_name, package, scope, diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/internal/containers.py b/third_party/protobuf/3.2.0/python/google/protobuf/internal/containers.py index de13018eefaa8d..68be9e54a8d49e 100755 --- a/third_party/protobuf/3.2.0/python/google/protobuf/internal/containers.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/internal/containers.py @@ -275,7 +275,7 @@ def extend(self, elem_seq): new_values = [self._type_checker.CheckValue(elem) for elem in elem_seq_iter] if new_values: self._values.extend(new_values) - self._message_listener.Modified() + self._message_listener.Modified() def MergeFrom(self, other): """Appends the contents of another repeated field of the same type to this diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/internal/descriptor_pool_test.py b/third_party/protobuf/3.2.0/python/google/protobuf/internal/descriptor_pool_test.py index 1e710dcf82b1a8..c1733a48b4daac 100644 --- a/third_party/protobuf/3.2.0/python/google/protobuf/internal/descriptor_pool_test.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/internal/descriptor_pool_test.py @@ -63,6 +63,9 @@ class DescriptorPoolTest(unittest.TestCase): def setUp(self): + # TODO(jieluo): Should make the pool which is created by + # serialized_pb same with generated pool. + # TODO(jieluo): More test coverage for the generated pool. self.pool = descriptor_pool.DescriptorPool() self.factory_test1_fd = descriptor_pb2.FileDescriptorProto.FromString( factory_test1_pb2.DESCRIPTOR.serialized_pb) @@ -71,6 +74,13 @@ def setUp(self): self.pool.Add(self.factory_test1_fd) self.pool.Add(self.factory_test2_fd) + self.pool.Add(descriptor_pb2.FileDescriptorProto.FromString( + unittest_import_public_pb2.DESCRIPTOR.serialized_pb)) + self.pool.Add(descriptor_pb2.FileDescriptorProto.FromString( + unittest_import_pb2.DESCRIPTOR.serialized_pb)) + self.pool.Add(descriptor_pb2.FileDescriptorProto.FromString( + unittest_pb2.DESCRIPTOR.serialized_pb)) + def testFindFileByName(self): name1 = 'google/protobuf/internal/factory_test1.proto' file_desc1 = self.pool.FindFileByName(name1) @@ -107,6 +117,26 @@ def testFindFileContainingSymbol(self): self.assertEqual('google.protobuf.python.internal', file_desc2.package) self.assertIn('Factory2Message', file_desc2.message_types_by_name) + # Tests top level extension. + file_desc3 = self.pool.FindFileContainingSymbol( + 'google.protobuf.python.internal.another_field') + self.assertIsInstance(file_desc3, descriptor.FileDescriptor) + self.assertEqual('google/protobuf/internal/factory_test2.proto', + file_desc3.name) + + # Tests nested extension inside a message. + file_desc4 = self.pool.FindFileContainingSymbol( + 'google.protobuf.python.internal.Factory2Message.one_more_field') + self.assertIsInstance(file_desc4, descriptor.FileDescriptor) + self.assertEqual('google/protobuf/internal/factory_test2.proto', + file_desc4.name) + + # Tests the generated pool. + assert descriptor_pool.Default().FindFileContainingSymbol( + 'google.protobuf.python.internal.Factory2Message.one_more_field') + assert descriptor_pool.Default().FindFileContainingSymbol( + 'google.protobuf.python.internal.another_field') + def testFindFileContainingSymbolFailure(self): with self.assertRaises(KeyError): self.pool.FindFileContainingSymbol('Does not exist') @@ -311,6 +341,10 @@ def testExtensionsAreNotFields(self): self.pool.FindExtensionByName( 'google.protobuf.python.internal.Factory1Message.list_value') + def testFindService(self): + service = self.pool.FindServiceByName('protobuf_unittest.TestService') + self.assertEqual(service.full_name, 'protobuf_unittest.TestService') + def testUserDefinedDB(self): db = descriptor_database.DescriptorDatabase() self.pool = descriptor_pool.DescriptorPool(db) @@ -643,6 +677,17 @@ def testEnum(self): self._TestEnum('') self._TestEnum('.') + @unittest.skipIf(api_implementation.Type() == 'cpp', + 'With the cpp implementation, Add() must be called first') + def testService(self): + pool = descriptor_pool.DescriptorPool() + with self.assertRaises(KeyError): + pool.FindServiceByName('protobuf_unittest.TestService') + pool.AddServiceDescriptor(unittest_pb2._TESTSERVICE) + self.assertEqual( + 'protobuf_unittest.TestService', + pool.FindServiceByName('protobuf_unittest.TestService').full_name) + @unittest.skipIf(api_implementation.Type() == 'cpp', 'With the cpp implementation, Add() must be called first') def testFile(self): diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/internal/encoder.py b/third_party/protobuf/3.2.0/python/google/protobuf/internal/encoder.py index 48ef2df31c21da..80e59cab0adeca 100755 --- a/third_party/protobuf/3.2.0/python/google/protobuf/internal/encoder.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/internal/encoder.py @@ -340,7 +340,7 @@ def FieldSize(value): # Map is special: it needs custom logic to compute its size properly. -def MapSizer(field_descriptor): +def MapSizer(field_descriptor, is_message_map): """Returns a sizer for a map field.""" # Can't look at field_descriptor.message_type._concrete_class because it may @@ -355,9 +355,12 @@ def FieldSize(map_value): # It's wasteful to create the messages and throw them away one second # later since we'll do the same for the actual encode. But there's not an # obvious way to avoid this within the current design without tons of code - # duplication. + # duplication. For message map, value.ByteSize() should be called to + # update the status. entry_msg = message_type._concrete_class(key=key, value=value) total += message_sizer(entry_msg) + if is_message_map: + value.ByteSize() return total return FieldSize diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/internal/message_test.py b/third_party/protobuf/3.2.0/python/google/protobuf/internal/message_test.py index 9986c0d99bfc89..e8b794f0e4e2b2 100755 --- a/third_party/protobuf/3.2.0/python/google/protobuf/internal/message_test.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/internal/message_test.py @@ -564,6 +564,11 @@ def testRepeatedFieldsAreSequences(self, message_module): self.assertIsInstance(m.repeated_nested_message, collections.MutableSequence) + def testRepeatedFieldInsideNestedMessage(self, message_module): + m = message_module.NestedTestAllTypes() + m.payload.repeated_int32.extend([]) + self.assertTrue(m.HasField('payload')) + def ensureNestedMessageExists(self, msg, attribute): """Make sure that a nested message object exists. @@ -1432,6 +1437,18 @@ def testMessageMap(self): self.assertIn(-456, msg2.map_int32_foreign_message) self.assertEqual(2, len(msg2.map_int32_foreign_message)) + def testMapByteSize(self): + msg = map_unittest_pb2.TestMap() + msg.map_int32_int32[1] = 1 + size = msg.ByteSize() + msg.map_int32_int32[1] = 128 + self.assertEqual(msg.ByteSize(), size + 1) + + msg.map_int32_foreign_message[19].c = 1 + size = msg.ByteSize() + msg.map_int32_foreign_message[19].c = 128 + self.assertEqual(msg.ByteSize(), size + 1) + def testMergeFrom(self): msg = map_unittest_pb2.TestMap() msg.map_int32_int32[12] = 34 @@ -1456,7 +1473,15 @@ def testMergeFrom(self): self.assertEqual(5, msg2.map_int32_foreign_message[111].c) self.assertEqual(10, msg2.map_int32_foreign_message[222].c) self.assertFalse(msg2.map_int32_foreign_message[222].HasField('d')) - self.assertEqual(15, old_map_value.c) + if api_implementation.Type() != 'cpp': + # During the call to MergeFrom(), the C++ implementation will have + # deallocated the underlying message, but this is very difficult to detect + # properly. The line below is likely to cause a segmentation fault. + # With the Python implementation, old_map_value is just 'detached' from + # the main message. Using it will not crash of course, but since it still + # have a reference to the parent message I'm sure we can find interesting + # ways to cause inconsistencies. + self.assertEqual(15, old_map_value.c) # Verify that there is only one entry per key, even though the MergeFrom # may have internally created multiple entries for a single key in the diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/internal/python_message.py b/third_party/protobuf/3.2.0/python/google/protobuf/internal/python_message.py index 4b7010390ab0d2..cb97cb2847f626 100755 --- a/third_party/protobuf/3.2.0/python/google/protobuf/internal/python_message.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/internal/python_message.py @@ -288,7 +288,8 @@ def _AttachFieldHelpers(cls, field_descriptor): if is_map_entry: field_encoder = encoder.MapEncoder(field_descriptor) - sizer = encoder.MapSizer(field_descriptor) + sizer = encoder.MapSizer(field_descriptor, + _IsMessageMapField(field_descriptor)) elif _IsMessageSetExtension(field_descriptor): field_encoder = encoder.MessageSetItemEncoder(field_descriptor.number) sizer = encoder.MessageSetItemSizer(field_descriptor.number) @@ -891,7 +892,7 @@ def HasExtension(self, extension_handle): def _InternalUnpackAny(msg): """Unpacks Any message and returns the unpacked message. - This internal method is differnt from public Any Unpack method which takes + This internal method is different from public Any Unpack method which takes the target message as argument. _InternalUnpackAny method does not have target message type and need to find the message type in descriptor pool. diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/internal/python_protobuf.cc b/third_party/protobuf/3.2.0/python/google/protobuf/internal/python_protobuf.cc new file mode 100644 index 00000000000000..f90cc4387efddf --- /dev/null +++ b/third_party/protobuf/3.2.0/python/google/protobuf/internal/python_protobuf.cc @@ -0,0 +1,63 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: qrczak@google.com (Marcin Kowalczyk) + +#include + +namespace google { +namespace protobuf { +namespace python { + +static const Message* GetCProtoInsidePyProtoStub(PyObject* msg) { + return NULL; +} +static Message* MutableCProtoInsidePyProtoStub(PyObject* msg) { + return NULL; +} + +// This is initialized with a default, stub implementation. +// If python-google.protobuf.cc is loaded, the function pointer is overridden +// with a full implementation. +const Message* (*GetCProtoInsidePyProtoPtr)(PyObject* msg) = + GetCProtoInsidePyProtoStub; +Message* (*MutableCProtoInsidePyProtoPtr)(PyObject* msg) = + MutableCProtoInsidePyProtoStub; + +const Message* GetCProtoInsidePyProto(PyObject* msg) { + return GetCProtoInsidePyProtoPtr(msg); +} +Message* MutableCProtoInsidePyProto(PyObject* msg) { + return MutableCProtoInsidePyProtoPtr(msg); +} + +} // namespace python +} // namespace protobuf +} // namespace google diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/internal/reflection_test.py b/third_party/protobuf/3.2.0/python/google/protobuf/internal/reflection_test.py index 0e8810157825a7..55b0d72e1e2d91 100755 --- a/third_party/protobuf/3.2.0/python/google/protobuf/internal/reflection_test.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/internal/reflection_test.py @@ -1551,7 +1551,14 @@ def testDeepCopy(self): container = copy.deepcopy(proto1.repeated_int32) self.assertEqual([2, 3], container) - # TODO(anuraag): Implement deepcopy for repeated composite / extension dict + message1 = proto1.repeated_nested_message.add() + message1.bb = 1 + messages = copy.deepcopy(proto1.repeated_nested_message) + self.assertEqual(proto1.repeated_nested_message, messages) + message1.bb = 2 + self.assertNotEqual(proto1.repeated_nested_message, messages) + + # TODO(anuraag): Implement deepcopy for extension dict def testClear(self): proto = unittest_pb2.TestAllTypes() diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/internal/symbol_database_test.py b/third_party/protobuf/3.2.0/python/google/protobuf/internal/symbol_database_test.py index 4f5173b2a26d8c..af42681ae2bfaf 100644 --- a/third_party/protobuf/3.2.0/python/google/protobuf/internal/symbol_database_test.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/internal/symbol_database_test.py @@ -60,6 +60,7 @@ def _Database(self): db.RegisterMessage(unittest_pb2.TestAllTypes.RepeatedGroup) db.RegisterEnumDescriptor(unittest_pb2.ForeignEnum.DESCRIPTOR) db.RegisterEnumDescriptor(unittest_pb2.TestAllTypes.NestedEnum.DESCRIPTOR) + db.RegisterServiceDescriptor(unittest_pb2._TESTSERVICE) return db def testGetPrototype(self): @@ -109,7 +110,13 @@ def testFindMessageTypeByName(self): self._Database().pool.FindMessageTypeByName( 'protobuf_unittest.TestAllTypes.NestedMessage').full_name) - def testFindFindContainingSymbol(self): + def testFindServiceByName(self): + self.assertEqual( + 'protobuf_unittest.TestService', + self._Database().pool.FindServiceByName( + 'protobuf_unittest.TestService').full_name) + + def testFindFileContainingSymbol(self): # Lookup based on either enum or message. self.assertEqual( 'google/protobuf/unittest.proto', diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/internal/text_format_test.py b/third_party/protobuf/3.2.0/python/google/protobuf/internal/text_format_test.py index 176cbd151a9e28..188310b23685e5 100755 --- a/third_party/protobuf/3.2.0/python/google/protobuf/internal/text_format_test.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/internal/text_format_test.py @@ -1119,6 +1119,11 @@ def testMergeExpandedAny(self): packed_message = unittest_pb2.OneString() message.any_value.Unpack(packed_message) self.assertEqual('string', packed_message.data) + message.Clear() + text_format.Parse(text, message, descriptor_pool=descriptor_pool.Default()) + packed_message = unittest_pb2.OneString() + message.any_value.Unpack(packed_message) + self.assertEqual('string', packed_message.data) def testMergeExpandedAnyRepeated(self): message = any_test_pb2.TestAny() @@ -1373,6 +1378,52 @@ def testConsumeTrailingComment(self): self.assertEqual('# some comment', tokenizer.ConsumeComment()) self.assertTrue(tokenizer.AtEnd()) + def testConsumeLineComment(self): + tokenizer = text_format.Tokenizer('# some comment'.splitlines(), + skip_comments=False) + self.assertFalse(tokenizer.AtEnd()) + self.assertEqual((False, '# some comment'), + tokenizer.ConsumeCommentOrTrailingComment()) + self.assertTrue(tokenizer.AtEnd()) + + def testConsumeTwoLineComments(self): + text = '# some comment\n# another comment' + tokenizer = text_format.Tokenizer(text.splitlines(), skip_comments=False) + self.assertEqual((False, '# some comment'), + tokenizer.ConsumeCommentOrTrailingComment()) + self.assertFalse(tokenizer.AtEnd()) + self.assertEqual((False, '# another comment'), + tokenizer.ConsumeCommentOrTrailingComment()) + self.assertTrue(tokenizer.AtEnd()) + + def testConsumeAndCheckTrailingComment(self): + text = 'some_number: 4 # some comment' # trailing comment on the same line + tokenizer = text_format.Tokenizer(text.splitlines(), skip_comments=False) + self.assertRaises(text_format.ParseError, + tokenizer.ConsumeCommentOrTrailingComment) + + self.assertEqual('some_number', tokenizer.ConsumeIdentifier()) + self.assertEqual(tokenizer.token, ':') + tokenizer.NextToken() + self.assertRaises(text_format.ParseError, + tokenizer.ConsumeCommentOrTrailingComment) + self.assertEqual(4, tokenizer.ConsumeInteger()) + self.assertFalse(tokenizer.AtEnd()) + + self.assertEqual((True, '# some comment'), + tokenizer.ConsumeCommentOrTrailingComment()) + self.assertTrue(tokenizer.AtEnd()) + + def testHashinComment(self): + text = 'some_number: 4 # some comment # not a new comment' + tokenizer = text_format.Tokenizer(text.splitlines(), skip_comments=False) + self.assertEqual('some_number', tokenizer.ConsumeIdentifier()) + self.assertEqual(tokenizer.token, ':') + tokenizer.NextToken() + self.assertEqual(4, tokenizer.ConsumeInteger()) + self.assertEqual((True, '# some comment # not a new comment'), + tokenizer.ConsumeCommentOrTrailingComment()) + self.assertTrue(tokenizer.AtEnd()) if __name__ == '__main__': unittest.main() diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor.cc b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor.cc index 924ae0b9cd8748..f13e1bc14ef00c 100644 --- a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor.cc +++ b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor.cc @@ -32,6 +32,7 @@ #include #include +#include #include #include @@ -1666,6 +1667,15 @@ PyObject* PyServiceDescriptor_FromDescriptor( &PyServiceDescriptor_Type, service_descriptor, NULL); } +const ServiceDescriptor* PyServiceDescriptor_AsDescriptor(PyObject* obj) { + if (!PyObject_TypeCheck(obj, &PyServiceDescriptor_Type)) { + PyErr_SetString(PyExc_TypeError, "Not a ServiceDescriptor"); + return NULL; + } + return reinterpret_cast( + reinterpret_cast(obj)->descriptor); +} + namespace method_descriptor { // Unchecked accessor to the C++ pointer. @@ -1769,6 +1779,15 @@ PyObject* PyMethodDescriptor_FromDescriptor( &PyMethodDescriptor_Type, method_descriptor, NULL); } +const MethodDescriptor* PyMethodDescriptor_AsDescriptor(PyObject* obj) { + if (!PyObject_TypeCheck(obj, &PyMethodDescriptor_Type)) { + PyErr_SetString(PyExc_TypeError, "Not a MethodDescriptor"); + return NULL; + } + return reinterpret_cast( + reinterpret_cast(obj)->descriptor); +} + // Add a enum values to a type dictionary. static bool AddEnumValues(PyTypeObject *type, const EnumDescriptor* enum_descriptor) { diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor.h b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor.h index 1ae0e672ed37a7..f081df842d3a8a 100644 --- a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor.h +++ b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor.h @@ -80,6 +80,8 @@ const Descriptor* PyMessageDescriptor_AsDescriptor(PyObject* obj); const FieldDescriptor* PyFieldDescriptor_AsDescriptor(PyObject* obj); const EnumDescriptor* PyEnumDescriptor_AsDescriptor(PyObject* obj); const FileDescriptor* PyFileDescriptor_AsDescriptor(PyObject* obj); +const ServiceDescriptor* PyServiceDescriptor_AsDescriptor(PyObject* obj); +const MethodDescriptor* PyMethodDescriptor_AsDescriptor(PyObject* obj); // Returns the raw C++ pointer. const void* PyDescriptor_AsVoidPtr(PyObject* obj); diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor_pool.cc b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor_pool.cc index fa66bf9ace7091..16f4d49d25cf4a 100644 --- a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor_pool.cc +++ b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor_pool.cc @@ -39,6 +39,7 @@ #include #include #include +#include #if PY_MAJOR_VERSION >= 3 #define PyString_FromStringAndSize PyUnicode_FromStringAndSize @@ -437,8 +438,23 @@ PyObject* AddExtensionDescriptor(PyDescriptorPool* self, PyObject* descriptor) { Py_RETURN_NONE; } -// The code below loads new Descriptors from a serialized FileDescriptorProto. +PyObject* AddServiceDescriptor(PyDescriptorPool* self, PyObject* descriptor) { + const ServiceDescriptor* service_descriptor = + PyServiceDescriptor_AsDescriptor(descriptor); + if (!service_descriptor) { + return NULL; + } + if (service_descriptor != + self->pool->FindServiceByName(service_descriptor->full_name())) { + PyErr_Format(PyExc_ValueError, + "The service descriptor %s does not belong to this pool", + service_descriptor->full_name().c_str()); + return NULL; + } + Py_RETURN_NONE; +} +// The code below loads new Descriptors from a serialized FileDescriptorProto. // Collects errors that occur during proto file building to allow them to be // propagated in the python exception instead of only living in ERROR logs. @@ -538,6 +554,8 @@ static PyMethodDef Methods[] = { "No-op. Add() must have been called before." }, { "AddExtensionDescriptor", (PyCFunction)AddExtensionDescriptor, METH_O, "No-op. Add() must have been called before." }, + { "AddServiceDescriptor", (PyCFunction)AddServiceDescriptor, METH_O, + "No-op. Add() must have been called before." }, { "FindFileByName", (PyCFunction)FindFileByName, METH_O, "Searches for a file descriptor by its .proto name." }, diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor_pool.h b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor_pool.h index c4d7d403434311..53ee53dc5e8538 100644 --- a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor_pool.h +++ b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/descriptor_pool.h @@ -85,6 +85,7 @@ extern PyTypeObject PyDescriptorPool_Type; namespace cdescriptor_pool { + // Looks up a message by name. // Returns a message Descriptor, or NULL if not found. const Descriptor* FindMessageTypeByName(PyDescriptorPool* self, diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/message.cc b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/message.cc index c810b7885f6d22..85aaa46fe0ef79 100644 --- a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/message.cc +++ b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/message.cc @@ -779,7 +779,7 @@ PyObject* CheckString(PyObject* arg, const FieldDescriptor* descriptor) { encoded_string = arg; // Already encoded. Py_INCREF(encoded_string); } else { - encoded_string = PyUnicode_AsEncodedObject(arg, "utf-8", NULL); + encoded_string = PyUnicode_AsEncodedString(arg, "utf-8", NULL); } } else { // In this case field type is "bytes". diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/repeated_composite_container.cc b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/repeated_composite_container.cc index 43a2bc12d97daf..9cb4e9a1be96ac 100644 --- a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/repeated_composite_container.cc +++ b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/repeated_composite_container.cc @@ -47,6 +47,7 @@ #include #include #include +#include #if PY_MAJOR_VERSION >= 3 #define PyInt_Check PyLong_Check @@ -485,6 +486,32 @@ int Release(RepeatedCompositeContainer* self) { return 0; } +PyObject* DeepCopy(RepeatedCompositeContainer* self, PyObject* arg) { + ScopedPyObjectPtr cloneObj( + PyType_GenericAlloc(&RepeatedCompositeContainer_Type, 0)); + if (cloneObj == NULL) { + return NULL; + } + RepeatedCompositeContainer* clone = + reinterpret_cast(cloneObj.get()); + + Message* new_message = self->message->New(); + clone->parent = NULL; + clone->parent_field_descriptor = self->parent_field_descriptor; + clone->message = new_message; + clone->owner.reset(new_message); + Py_INCREF(self->child_message_class); + clone->child_message_class = self->child_message_class; + clone->child_messages = PyList_New(0); + + new_message->GetReflection() + ->GetMutableRepeatedFieldRef(new_message, + self->parent_field_descriptor) + .MergeFrom(self->message->GetReflection()->GetRepeatedFieldRef( + *self->message, self->parent_field_descriptor)); + return cloneObj.release(); +} + int SetOwner(RepeatedCompositeContainer* self, const shared_ptr& new_owner) { GOOGLE_CHECK_ATTACHED(self); @@ -551,6 +578,8 @@ static PyMappingMethods MpMethods = { }; static PyMethodDef Methods[] = { + { "__deepcopy__", (PyCFunction)DeepCopy, METH_VARARGS, + "Makes a deep copy of the class." }, { "add", (PyCFunction) Add, METH_VARARGS | METH_KEYWORDS, "Adds an object to the repeated container." }, { "extend", (PyCFunction) Extend, METH_O, diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/scoped_pyobject_ptr.h b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/scoped_pyobject_ptr.h index a128cd4c6182c9..a2afa7f19de25f 100644 --- a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/scoped_pyobject_ptr.h +++ b/third_party/protobuf/3.2.0/python/google/protobuf/pyext/scoped_pyobject_ptr.h @@ -36,61 +36,70 @@ #include #include - namespace google { -class ScopedPyObjectPtr { +namespace protobuf { +namespace python { + +// Owns a python object and decrements the reference count on destruction. +// This class is not threadsafe. +template +class ScopedPythonPtr { public: - // Constructor. Defaults to initializing with NULL. - // There is no way to create an uninitialized ScopedPyObjectPtr. - explicit ScopedPyObjectPtr(PyObject* p = NULL) : ptr_(p) { } + // Takes the ownership of the specified object to ScopedPythonPtr. + // The reference count of the specified py_object is not incremented. + explicit ScopedPythonPtr(PyObjectStruct* py_object = NULL) + : ptr_(py_object) {} - // Destructor. If there is a PyObject object, delete it. - ~ScopedPyObjectPtr() { - Py_XDECREF(ptr_); - } + // If a PyObject is owned, decrement its reference count. + ~ScopedPythonPtr() { Py_XDECREF(ptr_); } - // Reset. Deletes the current owned object, if any. - // Then takes ownership of a new object, if given. + // Deletes the current owned object, if any. + // Then takes ownership of a new object without incrementing the reference + // count. // This function must be called with a reference that you own. // this->reset(this->get()) is wrong! // this->reset(this->release()) is OK. - PyObject* reset(PyObject* p = NULL) { + PyObjectStruct* reset(PyObjectStruct* p = NULL) { Py_XDECREF(ptr_); ptr_ = p; return ptr_; } - // Releases ownership of the object. + // Releases ownership of the object without decrementing the reference count. // The caller now owns the returned reference. - PyObject* release() { + PyObjectStruct* release() { PyObject* p = ptr_; ptr_ = NULL; return p; } - PyObject* operator->() const { + PyObjectStruct* operator->() const { assert(ptr_ != NULL); return ptr_; } - PyObject* get() const { return ptr_; } + PyObjectStruct* get() const { return ptr_; } - Py_ssize_t refcnt() const { return Py_REFCNT(ptr_); } + PyObject* as_pyobject() const { return reinterpret_cast(ptr_); } + // Increments the reference count fo the current object. + // Should not be called when no object is held. void inc() const { Py_INCREF(ptr_); } - // Comparison operators. - // These return whether a ScopedPyObjectPtr and a raw pointer - // refer to the same object, not just to two different but equal - // objects. - bool operator==(const PyObject* p) const { return ptr_ == p; } - bool operator!=(const PyObject* p) const { return ptr_ != p; } + // True when a ScopedPyObjectPtr and a raw pointer refer to the same object. + // Comparison operators are non reflexive. + bool operator==(const PyObjectStruct* p) const { return ptr_ == p; } + bool operator!=(const PyObjectStruct* p) const { return ptr_ != p; } private: - PyObject* ptr_; + PyObjectStruct* ptr_; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ScopedPyObjectPtr); + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ScopedPythonPtr); }; +typedef ScopedPythonPtr ScopedPyObjectPtr; + +} // namespace python +} // namespace protobuf } // namespace google #endif // GOOGLE_PROTOBUF_PYTHON_CPP_SCOPED_PYOBJECT_PTR_H__ diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/pyext/python_protobuf.h b/third_party/protobuf/3.2.0/python/google/protobuf/python_protobuf.h similarity index 100% rename from third_party/protobuf/3.2.0/python/google/protobuf/pyext/python_protobuf.h rename to third_party/protobuf/3.2.0/python/google/protobuf/python_protobuf.h diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/reflection.py b/third_party/protobuf/3.2.0/python/google/protobuf/reflection.py index 05bafd692f5ce7..f4ce8caf9be685 100755 --- a/third_party/protobuf/3.2.0/python/google/protobuf/reflection.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/reflection.py @@ -107,7 +107,7 @@ class Child(message.Message): The Message class object described by the descriptor. """ if descriptor in MESSAGE_CLASS_CACHE: - return MESSAGE_CLASS_CACHE[descriptor] + return MESSAGE_CLASS_CACHE[descriptor] attributes = {} for name, nested_type in descriptor.nested_types_by_name.items(): @@ -115,7 +115,7 @@ class Child(message.Message): attributes[GeneratedProtocolMessageType._DESCRIPTOR_KEY] = descriptor - result = GeneratedProtocolMessageType(str(descriptor.name), (message.Message,), - attributes) + result = GeneratedProtocolMessageType( + str(descriptor.name), (message.Message,), attributes) MESSAGE_CLASS_CACHE[descriptor] = result return result diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/symbol_database.py b/third_party/protobuf/3.2.0/python/google/protobuf/symbol_database.py index ecbef2111425fc..07341efaf4ab75 100644 --- a/third_party/protobuf/3.2.0/python/google/protobuf/symbol_database.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/symbol_database.py @@ -94,6 +94,17 @@ def RegisterEnumDescriptor(self, enum_descriptor): self.pool.AddEnumDescriptor(enum_descriptor) return enum_descriptor + def RegisterServiceDescriptor(self, service_descriptor): + """Registers the given service descriptor in the local database. + + Args: + service_descriptor: a descriptor.ServiceDescriptor. + + Returns: + The provided descriptor. + """ + self.pool.AddServiceDescriptor(service_descriptor) + def RegisterFileDescriptor(self, file_descriptor): """Registers the given file descriptor in the local database. diff --git a/third_party/protobuf/3.2.0/python/google/protobuf/text_format.py b/third_party/protobuf/3.2.0/python/google/protobuf/text_format.py index 90f6ce42a483e9..c216e097d97802 100755 --- a/third_party/protobuf/3.2.0/python/google/protobuf/text_format.py +++ b/third_party/protobuf/3.2.0/python/google/protobuf/text_format.py @@ -422,7 +422,8 @@ def PrintFieldValue(self, field, value): def Parse(text, message, allow_unknown_extension=False, - allow_field_number=False): + allow_field_number=False, + descriptor_pool=None): """Parses a text representation of a protocol message into a message. Args: @@ -431,6 +432,7 @@ def Parse(text, allow_unknown_extension: if True, skip over missing extensions and keep parsing allow_field_number: if True, both field number and field name are allowed. + descriptor_pool: A DescriptorPool used to resolve Any types. Returns: The same message passed as argument. @@ -440,8 +442,11 @@ def Parse(text, """ if not isinstance(text, str): text = text.decode('utf-8') - return ParseLines( - text.split('\n'), message, allow_unknown_extension, allow_field_number) + return ParseLines(text.split('\n'), + message, + allow_unknown_extension, + allow_field_number, + descriptor_pool=descriptor_pool) def Merge(text, @@ -479,7 +484,8 @@ def Merge(text, def ParseLines(lines, message, allow_unknown_extension=False, - allow_field_number=False): + allow_field_number=False, + descriptor_pool=None): """Parses a text representation of a protocol message into a message. Args: @@ -496,7 +502,9 @@ def ParseLines(lines, Raises: ParseError: On text parsing problems. """ - parser = _Parser(allow_unknown_extension, allow_field_number) + parser = _Parser(allow_unknown_extension, + allow_field_number, + descriptor_pool=descriptor_pool) return parser.ParseLines(lines, message) @@ -513,6 +521,7 @@ def MergeLines(lines, allow_unknown_extension: if True, skip over missing extensions and keep parsing allow_field_number: if True, both field number and field name are allowed. + descriptor_pool: A DescriptorPool used to resolve Any types. Returns: The same message passed as argument. @@ -1023,6 +1032,22 @@ def ConsumeComment(self): self.NextToken() return result + def ConsumeCommentOrTrailingComment(self): + """Consumes a comment, returns a 2-tuple (trailing bool, comment str).""" + + # Tokenizer initializes _previous_line and _previous_column to 0. As the + # tokenizer starts, it looks like there is a previous token on the line. + just_started = self._line == 0 and self._column == 0 + + before_parsing = self._previous_line + comment = self.ConsumeComment() + + # A trailing comment is a comment on the same line than the previous token. + trailing = (self._previous_line == before_parsing + and not just_started) + + return trailing, comment + def TryConsumeIdentifier(self): try: self.ConsumeIdentifier() diff --git a/third_party/protobuf/3.2.0/ruby/google-protobuf.gemspec b/third_party/protobuf/3.2.0/ruby/google-protobuf.gemspec index 1e30ae4d7dc5c6..836b1dd282c29a 100644 --- a/third_party/protobuf/3.2.0/ruby/google-protobuf.gemspec +++ b/third_party/protobuf/3.2.0/ruby/google-protobuf.gemspec @@ -1,6 +1,6 @@ Gem::Specification.new do |s| s.name = "google-protobuf" - s.version = "3.2.0.1" + s.version = "3.3.0" s.licenses = ["BSD-3-Clause"] s.summary = "Protocol Buffers" s.description = "Protocol Buffers are Google's data interchange format." diff --git a/third_party/protobuf/3.2.0/src/Makefile.am b/third_party/protobuf/3.2.0/src/Makefile.am index bcd81576b2bb5f..22026d2fcf1d24 100644 --- a/third_party/protobuf/3.2.0/src/Makefile.am +++ b/third_party/protobuf/3.2.0/src/Makefile.am @@ -37,18 +37,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/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 \ + google/protobuf/compiler/profile.proto # Not sure why these don't get cleaned automatically. clean-local: @@ -115,6 +116,7 @@ nobase_include_HEADERS = \ google/protobuf/generated_enum_reflection.h \ google/protobuf/generated_enum_util.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/map_entry.h \ @@ -127,6 +129,7 @@ nobase_include_HEADERS = \ google/protobuf/message.h \ google/protobuf/message_lite.h \ google/protobuf/metadata.h \ + google/protobuf/metadata_lite.h \ google/protobuf/reflection.h \ google/protobuf/reflection_ops.h \ google/protobuf/repeated_field.h \ @@ -155,6 +158,7 @@ nobase_include_HEADERS = \ google/protobuf/compiler/parser.h \ google/protobuf/compiler/plugin.h \ google/protobuf/compiler/plugin.pb.h \ + google/protobuf/compiler/profile.pb.h \ google/protobuf/compiler/cpp/cpp_generator.h \ google/protobuf/compiler/csharp/csharp_generator.h \ google/protobuf/compiler/csharp/csharp_names.h \ @@ -180,7 +184,7 @@ nobase_include_HEADERS = \ lib_LTLIBRARIES = libprotobuf-lite.la libprotobuf.la libprotoc.la libprotobuf_lite_la_LIBADD = $(PTHREAD_LIBS) -libprotobuf_lite_la_LDFLAGS = -version-info 12:0:0 -export-dynamic -no-undefined +libprotobuf_lite_la_LDFLAGS = -version-info 13:0:0 -export-dynamic -no-undefined if HAVE_LD_VERSION_SCRIPT libprotobuf_lite_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libprotobuf-lite.map EXTRA_libprotobuf_lite_la_DEPENDENCIES = libprotobuf-lite.map @@ -194,6 +198,8 @@ libprotobuf_lite_la_SOURCES = \ google/protobuf/stubs/hash.h \ google/protobuf/stubs/int128.cc \ google/protobuf/stubs/int128.h \ + google/protobuf/stubs/io_win32.cc \ + google/protobuf/stubs/io_win32.h \ google/protobuf/stubs/map_util.h \ google/protobuf/stubs/mathutil.h \ google/protobuf/stubs/once.cc \ @@ -225,7 +231,7 @@ libprotobuf_lite_la_SOURCES = \ google/protobuf/io/zero_copy_stream_impl_lite.cc libprotobuf_la_LIBADD = $(PTHREAD_LIBS) -libprotobuf_la_LDFLAGS = -version-info 12:0:0 -export-dynamic -no-undefined +libprotobuf_la_LDFLAGS = -version-info 13:0:0 -export-dynamic -no-undefined if HAVE_LD_VERSION_SCRIPT libprotobuf_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libprotobuf.map EXTRA_libprotobuf_la_DEPENDENCIES = libprotobuf.map @@ -314,7 +320,7 @@ libprotobuf_la_SOURCES = \ nodist_libprotobuf_la_SOURCES = $(nodist_libprotobuf_lite_la_SOURCES) libprotoc_la_LIBADD = $(PTHREAD_LIBS) libprotobuf.la -libprotoc_la_LDFLAGS = -version-info 12:0:0 -export-dynamic -no-undefined +libprotoc_la_LDFLAGS = -version-info 13:0:0 -export-dynamic -no-undefined if HAVE_LD_VERSION_SCRIPT libprotoc_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libprotoc.map EXTRA_libprotoc_la_DEPENDENCIES = libprotoc.map @@ -324,6 +330,7 @@ libprotoc_la_SOURCES = \ google/protobuf/compiler/command_line_interface.cc \ google/protobuf/compiler/plugin.cc \ google/protobuf/compiler/plugin.pb.cc \ + google/protobuf/compiler/profile.pb.cc \ google/protobuf/compiler/subprocess.cc \ google/protobuf/compiler/subprocess.h \ google/protobuf/compiler/zip_writer.cc \ @@ -535,6 +542,9 @@ protoc_inputs = \ google/protobuf/unittest_import.proto \ google/protobuf/unittest_import_public_lite.proto \ google/protobuf/unittest_import_public.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_mset.proto \ @@ -639,6 +649,12 @@ protoc_outputs = \ google/protobuf/unittest_import.pb.h \ google/protobuf/unittest_import_public.pb.cc \ google/protobuf/unittest_import_public.pb.h \ + google/protobuf/unittest_lazy_dependencies.pb.cc \ + google/protobuf/unittest_lazy_dependencies.pb.h \ + google/protobuf/unittest_lazy_dependencies_custom_option.pb.cc \ + google/protobuf/unittest_lazy_dependencies_custom_option.pb.h \ + google/protobuf/unittest_lazy_dependencies_enum.pb.cc \ + google/protobuf/unittest_lazy_dependencies_enum.pb.h \ google/protobuf/unittest_lite_imports_nonlite.pb.cc \ google/protobuf/unittest_lite_imports_nonlite.pb.h \ google/protobuf/unittest_mset.pb.cc \ @@ -747,6 +763,7 @@ protobuf_test_SOURCES = \ google/protobuf/stubs/bytestream_unittest.cc \ google/protobuf/stubs/common_unittest.cc \ google/protobuf/stubs/int128_unittest.cc \ + google/protobuf/stubs/io_win32_unittest.cc \ google/protobuf/stubs/once_unittest.cc \ google/protobuf/stubs/statusor_test.cc \ google/protobuf/stubs/status_test.cc \ @@ -847,7 +864,12 @@ COMMON_LITE_TEST_SOURCES = \ # depend on gtest because our internal version of gtest depend on proto # full runtime and we want to make sure this test builds without full # runtime. -protobuf_lite_test_LDADD = $(PTHREAD_LIBS) libprotobuf-lite.la +protobuf_lite_test_LDADD = $(PTHREAD_LIBS) libprotobuf-lite.la \ + ../gmock/gtest/lib/libgtest.la \ + ../gmock/lib/libgmock.la \ + ../gmock/lib/libgmock_main.la +protobuf_lite_test_CPPFLAGS= -I$(srcdir)/../gmock/include \ + -I$(srcdir)/../gmock/gtest/include protobuf_lite_test_CXXFLAGS = $(NO_OPT_CXXFLAGS) protobuf_lite_test_SOURCES = \ google/protobuf/lite_unittest.cc \ diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/any.h b/third_party/protobuf/3.2.0/src/google/protobuf/any.h index 04e541667f458c..c2c27ec33381a2 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/any.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/any.h @@ -63,7 +63,7 @@ class LIBPROTOBUF_EXPORT AnyMetadata { // Unpacks the payload into the given message. Returns false if the message's // type doesn't match the type specified in the type URL (i.e., the full - // name after the last "/" of the type URL doesn't match the message's actaul + // name after the last "/" of the type URL doesn't match the message's actual // full name) or parsing the payload has failed. bool UnpackTo(Message* message) const; @@ -90,8 +90,8 @@ extern const char kTypeGoogleProdComPrefix[]; // "type.googleprod.com/". // Get the proto type name from Any::type_url value. For example, passing // "type.googleapis.com/rpc.QueryOrigin" will return "rpc.QueryOrigin" in -// *full_type_name. Returns false if type_url does not start with -// "type.googleapis.com" or "type.googleprod.com". +// *full_type_name. Returns false if the type_url does not have a "/" +// in the type url separating the full type name. bool ParseAnyTypeUrl(const string& type_url, string* full_type_name); // See if message is of type google.protobuf.Any, if so, return the descriptors diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/any.pb.cc b/third_party/protobuf/3.2.0/src/google/protobuf/any.pb.cc index 94c9539f448e91..6c80aaa24e6249 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/any.pb.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/any.pb.cc @@ -31,11 +31,26 @@ ::google::protobuf::Metadata file_level_metadata[1]; } // namespace +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField + const TableStruct::entries[] = { + {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0}, +}; + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField + const TableStruct::aux[] = { + ::google::protobuf::internal::AuxillaryParseTableField(), +}; +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const + TableStruct::schema[] = { + { NULL, NULL, 0, -1, -1, false }, +}; + const ::google::protobuf::uint32 TableStruct::offsets[] = { ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Any, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Any, type_url_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Any, value_), }; @@ -186,7 +201,7 @@ void Any::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Any::descriptor() { protobuf_google_2fprotobuf_2fany_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fany_2eproto::file_level_metadata[0].descriptor; + return protobuf_google_2fprotobuf_2fany_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Any& Any::default_instance() { @@ -270,6 +285,9 @@ bool Any::MergePartialFromCodedStream( void Any::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Any) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string type_url = 1; if (this->type_url().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -291,8 +309,10 @@ void Any::SerializeWithCachedSizes( ::google::protobuf::uint8* Any::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Any) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string type_url = 1; if (this->type_url().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -359,6 +379,9 @@ void Any::MergeFrom(const Any& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Any) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.type_url().size() > 0) { type_url_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.type_url_); @@ -399,7 +422,7 @@ void Any::InternalSwap(Any* other) { ::google::protobuf::Metadata Any::GetMetadata() const { protobuf_google_2fprotobuf_2fany_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fany_2eproto::file_level_metadata[0]; + return protobuf_google_2fprotobuf_2fany_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -427,6 +450,7 @@ void Any::set_type_url(::std::string&& value) { } #endif void Any::set_type_url(const char* value) { + GOOGLE_DCHECK(value != NULL); type_url_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Any.type_url) @@ -479,6 +503,7 @@ void Any::set_value(::std::string&& value) { } #endif void Any::set_value(const char* value) { + GOOGLE_DCHECK(value != NULL); value_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Any.value) diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/any.pb.h b/third_party/protobuf/3.2.0/src/google/protobuf/any.pb.h index 1a61d5afa2918c..bc05fb35c89512 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/any.pb.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/any.pb.h @@ -8,12 +8,12 @@ #include -#if GOOGLE_PROTOBUF_VERSION < 3002000 +#if GOOGLE_PROTOBUF_VERSION < 3003000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3002000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -44,6 +45,9 @@ namespace protobuf { namespace protobuf_google_2fprotobuf_2fany_2eproto { // Internal implementation detail -- do not call these. struct LIBPROTOBUF_EXPORT TableStruct { + static const ::google::protobuf::internal::ParseTableField entries[]; + static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; + static const ::google::protobuf::internal::ParseTable schema[]; static const ::google::protobuf::uint32 offsets[]; static void InitDefaultsImpl(); static void Shutdown(); @@ -73,6 +77,8 @@ class LIBPROTOBUF_EXPORT Any : public ::google::protobuf::Message /* @@protoc_in return reinterpret_cast( &_Any_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 0; // implements Any ----------------------------------------------- @@ -105,11 +111,6 @@ class LIBPROTOBUF_EXPORT Any : public ::google::protobuf::Message /* @@protoc_in ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -167,7 +168,7 @@ class LIBPROTOBUF_EXPORT Any : public ::google::protobuf::Message /* @@protoc_in ::google::protobuf::internal::ArenaStringPtr value_; mutable int _cached_size_; ::google::protobuf::internal::AnyMetadata _any_metadata_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fany_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fany_2eproto::TableStruct; }; // =================================================================== @@ -199,6 +200,7 @@ inline void Any::set_type_url(::std::string&& value) { } #endif inline void Any::set_type_url(const char* value) { + GOOGLE_DCHECK(value != NULL); type_url_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Any.type_url) @@ -251,6 +253,7 @@ inline void Any::set_value(::std::string&& value) { } #endif inline void Any::set_value(const char* value) { + GOOGLE_DCHECK(value != NULL); value_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Any.value) diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/api.pb.cc b/third_party/protobuf/3.2.0/src/google/protobuf/api.pb.cc index 6518e518177955..94c6685f57a6c1 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/api.pb.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/api.pb.cc @@ -35,11 +35,28 @@ ::google::protobuf::Metadata file_level_metadata[3]; } // namespace +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField + const TableStruct::entries[] = { + {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0}, +}; + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField + const TableStruct::aux[] = { + ::google::protobuf::internal::AuxillaryParseTableField(), +}; +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const + TableStruct::schema[] = { + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, +}; + const ::google::protobuf::uint32 TableStruct::offsets[] = { ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Api, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Api, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Api, methods_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Api, options_), @@ -51,6 +68,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Method, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Method, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Method, request_type_url_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Method, request_streaming_), @@ -62,14 +80,15 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Mixin, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Mixin, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Mixin, root_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] = { { 0, -1, sizeof(Api)}, - { 11, -1, sizeof(Method)}, - { 22, -1, sizeof(Mixin)}, + { 12, -1, sizeof(Method)}, + { 24, -1, sizeof(Mixin)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -246,7 +265,7 @@ void Api::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Api::descriptor() { protobuf_google_2fprotobuf_2fapi_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fapi_2eproto::file_level_metadata[0].descriptor; + return protobuf_google_2fprotobuf_2fapi_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Api& Api::default_instance() { @@ -306,13 +325,11 @@ bool Api::MergePartialFromCodedStream( case 2: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(18u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_methods())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -320,13 +337,11 @@ bool Api::MergePartialFromCodedStream( case 3: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(26u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_options())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -362,13 +377,11 @@ bool Api::MergePartialFromCodedStream( case 6: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(50u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_mixins())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -411,6 +424,9 @@ bool Api::MergePartialFromCodedStream( void Api::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Api) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -466,8 +482,10 @@ void Api::SerializeWithCachedSizes( ::google::protobuf::uint8* Api::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Api) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -483,14 +501,14 @@ ::google::protobuf::uint8* Api::InternalSerializeWithCachedSizesToArray( for (unsigned int i = 0, n = this->methods_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 2, this->methods(i), false, target); + 2, this->methods(i), deterministic, target); } // repeated .google.protobuf.Option options = 3; for (unsigned int i = 0, n = this->options_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 3, this->options(i), false, target); + 3, this->options(i), deterministic, target); } // string version = 4; @@ -508,14 +526,14 @@ ::google::protobuf::uint8* Api::InternalSerializeWithCachedSizesToArray( if (this->has_source_context()) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 5, *this->source_context_, false, target); + 5, *this->source_context_, deterministic, target); } // repeated .google.protobuf.Mixin mixins = 6; for (unsigned int i = 0, n = this->mixins_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 6, this->mixins(i), false, target); + 6, this->mixins(i), deterministic, target); } // .google.protobuf.Syntax syntax = 7; @@ -618,6 +636,9 @@ void Api::MergeFrom(const Api& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Api) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + methods_.MergeFrom(from.methods_); options_.MergeFrom(from.options_); mixins_.MergeFrom(from.mixins_); @@ -660,9 +681,9 @@ void Api::Swap(Api* other) { InternalSwap(other); } void Api::InternalSwap(Api* other) { - methods_.UnsafeArenaSwap(&other->methods_); - options_.UnsafeArenaSwap(&other->options_); - mixins_.UnsafeArenaSwap(&other->mixins_); + methods_.InternalSwap(&other->methods_); + options_.InternalSwap(&other->options_); + mixins_.InternalSwap(&other->mixins_); name_.Swap(&other->name_); version_.Swap(&other->version_); std::swap(source_context_, other->source_context_); @@ -672,7 +693,7 @@ void Api::InternalSwap(Api* other) { ::google::protobuf::Metadata Api::GetMetadata() const { protobuf_google_2fprotobuf_2fapi_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fapi_2eproto::file_level_metadata[0]; + return protobuf_google_2fprotobuf_2fapi_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -700,6 +721,7 @@ void Api::set_name(::std::string&& value) { } #endif void Api::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Api.name) @@ -812,6 +834,7 @@ void Api::set_version(::std::string&& value) { } #endif void Api::set_version(const char* value) { + GOOGLE_DCHECK(value != NULL); version_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Api.version) @@ -998,7 +1021,7 @@ void Method::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Method::descriptor() { protobuf_google_2fprotobuf_2fapi_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fapi_2eproto::file_level_metadata[1].descriptor; + return protobuf_google_2fprotobuf_2fapi_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Method& Method::default_instance() { @@ -1114,13 +1137,11 @@ bool Method::MergePartialFromCodedStream( case 6: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(50u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_options())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -1163,6 +1184,9 @@ bool Method::MergePartialFromCodedStream( void Method::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Method) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -1220,8 +1244,10 @@ void Method::SerializeWithCachedSizes( ::google::protobuf::uint8* Method::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Method) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -1269,7 +1295,7 @@ ::google::protobuf::uint8* Method::InternalSerializeWithCachedSizesToArray( for (unsigned int i = 0, n = this->options_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 6, this->options(i), false, target); + 6, this->options(i), deterministic, target); } // .google.protobuf.Syntax syntax = 7; @@ -1360,6 +1386,9 @@ void Method::MergeFrom(const Method& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Method) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + options_.MergeFrom(from.options_); if (from.name().size() > 0) { @@ -1407,7 +1436,7 @@ void Method::Swap(Method* other) { InternalSwap(other); } void Method::InternalSwap(Method* other) { - options_.UnsafeArenaSwap(&other->options_); + options_.InternalSwap(&other->options_); name_.Swap(&other->name_); request_type_url_.Swap(&other->request_type_url_); response_type_url_.Swap(&other->response_type_url_); @@ -1419,7 +1448,7 @@ void Method::InternalSwap(Method* other) { ::google::protobuf::Metadata Method::GetMetadata() const { protobuf_google_2fprotobuf_2fapi_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fapi_2eproto::file_level_metadata[1]; + return protobuf_google_2fprotobuf_2fapi_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -1447,6 +1476,7 @@ void Method::set_name(::std::string&& value) { } #endif void Method::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Method.name) @@ -1499,6 +1529,7 @@ void Method::set_request_type_url(::std::string&& value) { } #endif void Method::set_request_type_url(const char* value) { + GOOGLE_DCHECK(value != NULL); request_type_url_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Method.request_type_url) @@ -1565,6 +1596,7 @@ void Method::set_response_type_url(::std::string&& value) { } #endif void Method::set_response_type_url(const char* value) { + GOOGLE_DCHECK(value != NULL); response_type_url_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Method.response_type_url) @@ -1709,7 +1741,7 @@ void Mixin::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Mixin::descriptor() { protobuf_google_2fprotobuf_2fapi_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fapi_2eproto::file_level_metadata[2].descriptor; + return protobuf_google_2fprotobuf_2fapi_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Mixin& Mixin::default_instance() { @@ -1797,6 +1829,9 @@ bool Mixin::MergePartialFromCodedStream( void Mixin::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Mixin) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -1822,8 +1857,10 @@ void Mixin::SerializeWithCachedSizes( ::google::protobuf::uint8* Mixin::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Mixin) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -1894,6 +1931,9 @@ void Mixin::MergeFrom(const Mixin& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Mixin) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.name().size() > 0) { name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); @@ -1934,7 +1974,7 @@ void Mixin::InternalSwap(Mixin* other) { ::google::protobuf::Metadata Mixin::GetMetadata() const { protobuf_google_2fprotobuf_2fapi_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fapi_2eproto::file_level_metadata[2]; + return protobuf_google_2fprotobuf_2fapi_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -1962,6 +2002,7 @@ void Mixin::set_name(::std::string&& value) { } #endif void Mixin::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Mixin.name) @@ -2014,6 +2055,7 @@ void Mixin::set_root(::std::string&& value) { } #endif void Mixin::set_root(const char* value) { + GOOGLE_DCHECK(value != NULL); root_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Mixin.root) diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/api.pb.h b/third_party/protobuf/3.2.0/src/google/protobuf/api.pb.h index 2eb571e613b6e7..108c63a424e215 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/api.pb.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/api.pb.h @@ -8,12 +8,12 @@ #include -#if GOOGLE_PROTOBUF_VERSION < 3002000 +#if GOOGLE_PROTOBUF_VERSION < 3003000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3002000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -69,6 +70,9 @@ namespace protobuf { namespace protobuf_google_2fprotobuf_2fapi_2eproto { // Internal implementation detail -- do not call these. struct LIBPROTOBUF_EXPORT TableStruct { + static const ::google::protobuf::internal::ParseTableField entries[]; + static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; + static const ::google::protobuf::internal::ParseTable schema[]; static const ::google::protobuf::uint32 offsets[]; static void InitDefaultsImpl(); static void Shutdown(); @@ -98,6 +102,8 @@ class LIBPROTOBUF_EXPORT Api : public ::google::protobuf::Message /* @@protoc_in return reinterpret_cast( &_Api_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 0; void Swap(Api* other); @@ -120,11 +126,6 @@ class LIBPROTOBUF_EXPORT Api : public ::google::protobuf::Message /* @@protoc_in ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -237,7 +238,7 @@ class LIBPROTOBUF_EXPORT Api : public ::google::protobuf::Message /* @@protoc_in ::google::protobuf::SourceContext* source_context_; int syntax_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fapi_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fapi_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -260,6 +261,8 @@ class LIBPROTOBUF_EXPORT Method : public ::google::protobuf::Message /* @@protoc return reinterpret_cast( &_Method_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 1; void Swap(Method* other); @@ -282,11 +285,6 @@ class LIBPROTOBUF_EXPORT Method : public ::google::protobuf::Message /* @@protoc ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -392,7 +390,7 @@ class LIBPROTOBUF_EXPORT Method : public ::google::protobuf::Message /* @@protoc bool response_streaming_; int syntax_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fapi_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fapi_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -415,6 +413,8 @@ class LIBPROTOBUF_EXPORT Mixin : public ::google::protobuf::Message /* @@protoc_ return reinterpret_cast( &_Mixin_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 2; void Swap(Mixin* other); @@ -437,11 +437,6 @@ class LIBPROTOBUF_EXPORT Mixin : public ::google::protobuf::Message /* @@protoc_ ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -498,7 +493,7 @@ class LIBPROTOBUF_EXPORT Mixin : public ::google::protobuf::Message /* @@protoc_ ::google::protobuf::internal::ArenaStringPtr name_; ::google::protobuf::internal::ArenaStringPtr root_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fapi_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fapi_2eproto::TableStruct; }; // =================================================================== @@ -530,6 +525,7 @@ inline void Api::set_name(::std::string&& value) { } #endif inline void Api::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Api.name) @@ -642,6 +638,7 @@ inline void Api::set_version(::std::string&& value) { } #endif inline void Api::set_version(const char* value) { + GOOGLE_DCHECK(value != NULL); version_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Api.version) @@ -781,6 +778,7 @@ inline void Method::set_name(::std::string&& value) { } #endif inline void Method::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Method.name) @@ -833,6 +831,7 @@ inline void Method::set_request_type_url(::std::string&& value) { } #endif inline void Method::set_request_type_url(const char* value) { + GOOGLE_DCHECK(value != NULL); request_type_url_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Method.request_type_url) @@ -899,6 +898,7 @@ inline void Method::set_response_type_url(::std::string&& value) { } #endif inline void Method::set_response_type_url(const char* value) { + GOOGLE_DCHECK(value != NULL); response_type_url_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Method.response_type_url) @@ -1013,6 +1013,7 @@ inline void Mixin::set_name(::std::string&& value) { } #endif inline void Mixin::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Mixin.name) @@ -1065,6 +1066,7 @@ inline void Mixin::set_root(::std::string&& value) { } #endif inline void Mixin::set_root(const char* value) { + GOOGLE_DCHECK(value != NULL); root_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.Mixin.root) diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/arena.h b/third_party/protobuf/3.2.0/src/google/protobuf/arena.h index 05e05ebc192d6e..b6a375ac560dc0 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/arena.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/arena.h @@ -303,6 +303,17 @@ class LIBPROTOBUF_EXPORT Arena { // (unless the destructor is trivial). Hence, from T's point of view, it is as // if the object were allocated on the heap (except that the underlying memory // is obtained from the arena). +#if LANG_CXX11 + template GOOGLE_ATTRIBUTE_ALWAYS_INLINE + static T* Create(::google::protobuf::Arena* arena, Args&&... args) { + if (arena == NULL) { + return new T(std::forward(args)...); + } else { + return arena->CreateInternal(google::protobuf::internal::has_trivial_destructor::value, + std::forward(args)...); + } + } +#endif template GOOGLE_ATTRIBUTE_ALWAYS_INLINE static T* Create(::google::protobuf::Arena* arena) { if (arena == NULL) { @@ -322,17 +333,6 @@ class LIBPROTOBUF_EXPORT Arena { arg); } } -#if LANG_CXX11 - template GOOGLE_ATTRIBUTE_ALWAYS_INLINE - static T* Create(::google::protobuf::Arena* arena, Arg&& arg) { - if (arena == NULL) { - return new T(std::move(arg)); - } else { - return arena->CreateInternal(google::protobuf::internal::has_trivial_destructor::value, - std::move(arg)); - } - } -#endif // Version of the above with two constructor arguments for the created object. template GOOGLE_ATTRIBUTE_ALWAYS_INLINE @@ -655,35 +655,34 @@ class LIBPROTOBUF_EXPORT Arena { AllocateAligned(RTTI_TYPE_ID(T), sizeof(T) * num_elements)); } - template GOOGLE_ATTRIBUTE_ALWAYS_INLINE - T* CreateInternal(bool skip_explicit_ownership) { - T* t = new (AllocateAligned(RTTI_TYPE_ID(T), sizeof(T))) T(); +#if LANG_CXX11 + template GOOGLE_ATTRIBUTE_ALWAYS_INLINE + T* CreateInternal(bool skip_explicit_ownership, Args&&... args) { + T* t = new (AllocateAligned(RTTI_TYPE_ID(T), sizeof(T))) + T(std::forward(args)...); if (!skip_explicit_ownership) { AddListNode(t, &internal::arena_destruct_object); } return t; } - - template GOOGLE_ATTRIBUTE_ALWAYS_INLINE - T* CreateInternal(bool skip_explicit_ownership, const Arg& arg) { - T* t = new (AllocateAligned(RTTI_TYPE_ID(T), sizeof(T))) T(arg); +#endif + template GOOGLE_ATTRIBUTE_ALWAYS_INLINE + T* CreateInternal(bool skip_explicit_ownership) { + T* t = new (AllocateAligned(RTTI_TYPE_ID(T), sizeof(T))) T(); if (!skip_explicit_ownership) { AddListNode(t, &internal::arena_destruct_object); } return t; } -#if LANG_CXX11 template GOOGLE_ATTRIBUTE_ALWAYS_INLINE - T* CreateInternal(bool skip_explicit_ownership, Arg&& arg) { - T* t = new (AllocateAligned(RTTI_TYPE_ID(T), sizeof(T))) T( - std::move(arg)); + T* CreateInternal(bool skip_explicit_ownership, const Arg& arg) { + T* t = new (AllocateAligned(RTTI_TYPE_ID(T), sizeof(T))) T(arg); if (!skip_explicit_ownership) { AddListNode(t, &internal::arena_destruct_object); } return t; } -#endif template GOOGLE_ATTRIBUTE_ALWAYS_INLINE T* CreateInternal( @@ -796,22 +795,20 @@ class LIBPROTOBUF_EXPORT Arena { template GOOGLE_ATTRIBUTE_ALWAYS_INLINE T* CreateMessageInternal(typename T::InternalArenaConstructable_*) { - return CreateInternal(SkipDeleteList(static_cast(0)), - this); + return CreateInternal(SkipDeleteList(static_cast(0)), this); } template GOOGLE_ATTRIBUTE_ALWAYS_INLINE T* CreateMessageInternal(typename T::InternalArenaConstructable_*, const Arg& arg) { - return CreateInternal(SkipDeleteList(static_cast(0)), - this, arg); + return CreateInternal(SkipDeleteList(static_cast(0)), this, arg); } template GOOGLE_ATTRIBUTE_ALWAYS_INLINE T* CreateMessageInternal(typename T::InternalArenaConstructable_*, const Arg1& arg1, const Arg2& arg2) { - return CreateInternal(SkipDeleteList(static_cast(0)), - this, arg1, arg2); + return CreateInternal(SkipDeleteList(static_cast(0)), this, arg1, + arg2); } // CreateInArenaStorage is used to implement map field. Without it, diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/arena_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/arena_unittest.cc index 4f9571dbffc8ab..6172cade09df37 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/arena_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/arena_unittest.cc @@ -180,6 +180,35 @@ TEST(ArenaTest, BasicCreate) { EXPECT_EQ(2, notifier.GetCount()); } +TEST(ArenaTest, CreateAndConstCopy) { + Arena arena; + const string s("foo"); + const string* s_copy = Arena::Create(&arena, s); + EXPECT_TRUE(s_copy != NULL); + EXPECT_EQ("foo", s); + EXPECT_EQ("foo", *s_copy); +} + +TEST(ArenaTest, CreateAndNonConstCopy) { + Arena arena; + string s("foo"); + const string* s_copy = Arena::Create(&arena, s); + EXPECT_TRUE(s_copy != NULL); + EXPECT_EQ("foo", s); + EXPECT_EQ("foo", *s_copy); +} + +#if LANG_CXX11 +TEST(ArenaTest, CreateAndMove) { + Arena arena; + string s("foo"); + const string* s_move = Arena::Create(&arena, std::move(s)); + EXPECT_TRUE(s_move != NULL); + EXPECT_TRUE(s.empty()); // NOLINT + EXPECT_EQ("foo", *s_move); +} +#endif + TEST(ArenaTest, CreateWithFourConstructorArguments) { Arena arena; const string three("3"); @@ -214,6 +243,29 @@ TEST(ArenaTest, CreateWithEightConstructorArguments) { ASSERT_EQ("8", new_object->eight_); } +#if LANG_CXX11 +class PleaseMoveMe { + public: + explicit PleaseMoveMe(const string& value) : value_(value) {} + PleaseMoveMe(PleaseMoveMe&&) = default; + PleaseMoveMe(const PleaseMoveMe&) = delete; + + const string& value() const { return value_; } + + private: + string value_; +}; + +TEST(ArenaTest, CreateWithMoveArguments) { + Arena arena; + PleaseMoveMe one("1"); + const PleaseMoveMe* new_object = + Arena::Create(&arena, std::move(one)); + EXPECT_TRUE(new_object); + ASSERT_EQ("1", new_object->value()); +} +#endif + TEST(ArenaTest, InitialBlockTooSmall) { // Construct a small (64 byte) initial block of memory to be used by the // arena allocator; then, allocate an object which will not fit in the diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/arenastring.cc b/third_party/protobuf/3.2.0/src/google/protobuf/arenastring.cc index f10732c0c4c2ea..7f33a0c8658dc8 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/arenastring.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/arenastring.cc @@ -38,16 +38,6 @@ namespace protobuf { namespace internal { -void ArenaStringPtr::AssignWithDefault(const ::std::string* default_value, - ArenaStringPtr value) { - const ::std::string* me = *UnsafeRawStringPointer(); - const ::std::string* other = *value.UnsafeRawStringPointer(); - // If the pointers are the same then do nothing. - if (me != other) { - SetNoArena(default_value, value.GetNoArena()); - } -} - } // namespace internal } // namespace protobuf } // namespace google diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/arenastring.h b/third_party/protobuf/3.2.0/src/google/protobuf/arenastring.h index a7efb7529b9337..63fd00e567f2bc 100755 --- a/third_party/protobuf/3.2.0/src/google/protobuf/arenastring.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/arenastring.h @@ -310,5 +310,21 @@ struct LIBPROTOBUF_EXPORT ArenaStringPtr { +namespace protobuf { +namespace internal { + +inline void ArenaStringPtr::AssignWithDefault(const ::std::string* default_value, + ArenaStringPtr value) { + const ::std::string* me = *UnsafeRawStringPointer(); + const ::std::string* other = *value.UnsafeRawStringPointer(); + // If the pointers are the same then do nothing. + if (me != other) { + SetNoArena(default_value, value.GetNoArena()); + } +} + +} // namespace internal +} // namespace protobuf + } // namespace google #endif // GOOGLE_PROTOBUF_ARENASTRING_H__ diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/code_generator.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/code_generator.h index e2b2a66167f363..b917d3733436f6 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/code_generator.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/code_generator.h @@ -162,7 +162,7 @@ typedef GeneratorContext OutputDirectory; // "foo=bar,baz,qux=corge" // parses to the pairs: // ("foo", "bar"), ("baz", ""), ("qux", "corge") -extern void LIBPROTOC_EXPORT ParseGeneratorParameter(const string&, +extern void ParseGeneratorParameter(const string&, std::vector >*); } // namespace compiler diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/command_line_interface.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/command_line_interface.cc index 50669891456fc8..56b010f7bcc215 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/command_line_interface.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/command_line_interface.cc @@ -45,10 +45,7 @@ #endif #include #include -#ifdef _MSC_VER -#include -#include -#else +#ifndef _MSC_VER #include #endif #include @@ -103,6 +100,14 @@ namespace compiler { namespace { #if defined(_WIN32) && !defined(__CYGWIN__) static const char* kPathSeparator = ";"; +// DO NOT include , instead create functions in io_win32.{h,cc} and import +// them like we do below. +using google::protobuf::stubs::access; +using google::protobuf::stubs::close; +using google::protobuf::stubs::mkdir; +using google::protobuf::stubs::open; +using google::protobuf::stubs::setmode; +using google::protobuf::stubs::write; #else static const char* kPathSeparator = ":"; #endif @@ -126,9 +131,9 @@ static bool IsWindowsAbsolutePath(const string& text) { void SetFdToTextMode(int fd) { #ifdef _WIN32 - if (_setmode(fd, _O_TEXT) == -1) { + if (setmode(fd, _O_TEXT) == -1) { // This should never happen, I think. - GOOGLE_LOG(WARNING) << "_setmode(" << fd << ", _O_TEXT): " << strerror(errno); + GOOGLE_LOG(WARNING) << "setmode(" << fd << ", _O_TEXT): " << strerror(errno); } #endif // (Text and binary are the same on non-Windows platforms.) @@ -136,9 +141,9 @@ void SetFdToTextMode(int fd) { void SetFdToBinaryMode(int fd) { #ifdef _WIN32 - if (_setmode(fd, _O_BINARY) == -1) { + if (setmode(fd, _O_BINARY) == -1) { // This should never happen, I think. - GOOGLE_LOG(WARNING) << "_setmode(" << fd << ", _O_BINARY): " << strerror(errno); + GOOGLE_LOG(WARNING) << "setmode(" << fd << ", _O_BINARY): " << strerror(errno); } #endif // (Text and binary are the same on non-Windows platforms.) @@ -789,8 +794,8 @@ int CommandLineInterface::Run(int argc, const char* const argv[]) { // Enforce --disallow_services. if (disallow_services_ && parsed_file->service_count() > 0) { - cerr << parsed_file->name() << ": This file contains services, but " - "--disallow_services was used." << endl; + std::cerr << parsed_file->name() << ": This file contains services, but " + "--disallow_services was used." << std::endl; return 1; } @@ -801,11 +806,11 @@ int CommandLineInterface::Run(int argc, const char* const argv[]) { if (direct_dependencies_.find(parsed_file->dependency(i)->name()) == direct_dependencies_.end()) { indirect_imports = true; - cerr << parsed_file->name() << ": " - << StringReplace(direct_dependencies_violation_msg_, "%s", - parsed_file->dependency(i)->name(), - true /* replace_all */) - << std::endl; + std::cerr << parsed_file->name() << ": " + << StringReplace(direct_dependencies_violation_msg_, "%s", + parsed_file->dependency(i)->name(), + true /* replace_all */) + << std::endl; } } if (indirect_imports) { @@ -1023,7 +1028,7 @@ CommandLineInterface::ParseArguments(int argc, const char* const argv[]) { // Make sure each plugin option has a matching plugin output. bool foundUnknownPluginOption = false; - for (map::const_iterator i = plugin_parameters_.begin(); + for (std::map::const_iterator i = plugin_parameters_.begin(); i != plugin_parameters_.end(); ++i) { if (plugins_.find(i->first) != plugins_.end()) { continue; @@ -1206,7 +1211,8 @@ CommandLineInterface::InterpretArgument(const string& name, if (access(disk_path.c_str(), F_OK) < 0) { // Try the original path; it may have just happed to have a '=' in it. if (access(parts[i].c_str(), F_OK) < 0) { - cerr << disk_path << ": warning: directory does not exist." << endl; + std::cerr << disk_path << ": warning: directory does not exist." + << std::endl; } else { virtual_path = ""; disk_path = parts[i]; @@ -1287,9 +1293,9 @@ CommandLineInterface::InterpretArgument(const string& name, if (!version_info_.empty()) { std::cout << version_info_ << std::endl; } - cout << "libprotoc " + std::cout << "libprotoc " << protobuf::internal::VersionString(GOOGLE_PROTOBUF_VERSION) - << endl; + << std::endl; return PARSE_ARGUMENT_DONE_AND_EXIT; // Exit without running compiler. } else if (name == "--disallow_services") { @@ -1376,6 +1382,7 @@ CommandLineInterface::InterpretArgument(const string& name, } mode_ = MODE_PRINT; print_mode_ = PRINT_FREE_FIELDS; + } else if (name == "--profile_path") { } else { // Some other flag. Look it up in the generators list. const GeneratorInfo* generator_info = @@ -1775,31 +1782,34 @@ bool CommandLineInterface::EncodeOrDecode(const DescriptorPool* pool) { } bool CommandLineInterface::WriteDescriptorSet( - const std::vector parsed_files) { + const std::vector& parsed_files) { FileDescriptorSet file_set; - if (imports_in_descriptor_set_) { - std::set already_seen; - for (int i = 0; i < parsed_files.size(); i++) { - GetTransitiveDependencies(parsed_files[i], - true, // Include json_name - source_info_in_descriptor_set_, - &already_seen, file_set.mutable_file()); - } - } else { - std::set already_seen; + std::set already_seen; + if (!imports_in_descriptor_set_) { + // Since we don't want to output transitive dependencies, but we do want + // things to be in dependency order, add all dependencies that aren't in + // parsed_files to already_seen. This will short circuit the recursion + // in GetTransitiveDependencies. + std::set to_output; + to_output.insert(parsed_files.begin(), parsed_files.end()); for (int i = 0; i < parsed_files.size(); i++) { - if (!already_seen.insert(parsed_files[i]).second) { - continue; - } - FileDescriptorProto* file_proto = file_set.add_file(); - parsed_files[i]->CopyTo(file_proto); - parsed_files[i]->CopyJsonNameTo(file_proto); - if (source_info_in_descriptor_set_) { - parsed_files[i]->CopySourceCodeInfoTo(file_proto); + const FileDescriptor* file = parsed_files[i]; + for (int i = 0; i < file->dependency_count(); i++) { + const FileDescriptor* dependency = file->dependency(i); + // if the dependency isn't in parsed files, mark it as already seen + if (to_output.find(dependency) == to_output.end()) { + already_seen.insert(dependency); + } } } } + for (int i = 0; i < parsed_files.size(); i++) { + GetTransitiveDependencies(parsed_files[i], + true, // Include json_name + source_info_in_descriptor_set_, + &already_seen, file_set.mutable_file()); + } int fd; do { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/command_line_interface.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/command_line_interface.h index 8f8c2682fdb26b..997c17482d238b 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/command_line_interface.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/command_line_interface.h @@ -258,7 +258,7 @@ class LIBPROTOC_EXPORT CommandLineInterface { // Implements the --descriptor_set_out option. bool WriteDescriptorSet( - const std::vector parsed_files); + const std::vector& parsed_files); // Implements the --dependency_out option bool GenerateDependencyManifestFile( @@ -391,6 +391,11 @@ class LIBPROTOC_EXPORT CommandLineInterface { // dependency file will be written. Otherwise, empty. string dependency_out_name_; + // Path to a file that contains serialized AccessInfo which provides + // relative hotness of fields per message. This helps protoc to generate + // better code. + string profile_path_; + // True if --include_imports was given, meaning that we should // write all transitive dependencies to the DescriptorSet. Otherwise, only // the .proto files listed on the command-line are added. diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/command_line_interface_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/command_line_interface_unittest.cc index eab14f600142d4..178999ddaec111 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/command_line_interface_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/command_line_interface_unittest.cc @@ -32,12 +32,10 @@ // Based on original Protocol Buffers design by // Sanjay Ghemawat, Jeff Dean, and others. -#include -#include #include -#ifdef _MSC_VER -#include -#else +#include +#include +#ifndef _MSC_VER #include #endif #include @@ -46,46 +44,46 @@ #endif #include -#include -#include -#include -#include -#include +#include +#include #include #include #include -#include +#include +#include #include -#include -#include -#include +#include +#include +#include +#include #include #include #include #include +#include +#include namespace google { namespace protobuf { namespace compiler { +#if defined(_WIN32) +// DO NOT include , instead create functions in io_win32.{h,cc} and import +// them like we do below. +using google::protobuf::stubs::access; +using google::protobuf::stubs::dup; +using google::protobuf::stubs::dup2; +using google::protobuf::stubs::close; +using google::protobuf::stubs::open; +using google::protobuf::stubs::write; +#endif + // Disable the whole test when we use tcmalloc for "draconian" heap checks, in // which case tcmalloc will print warnings that fail the plugin tests. #if !GOOGLE_PROTOBUF_HEAP_CHECK_DRACONIAN -#if defined(_WIN32) -#ifndef STDIN_FILENO -#define STDIN_FILENO 0 -#endif -#ifndef STDOUT_FILENO -#define STDOUT_FILENO 1 -#endif -#ifndef F_OK -#define F_OK 00 // not defined by MSVC for whatever reason -#endif -#endif - namespace { bool FileExists(const string& path) { @@ -101,7 +99,7 @@ class CommandLineInterfaceTest : public testing::Test { // command is automatically split on spaces, and the string "$tmpdir" // is replaced with TestTempDir(). void Run(const string& command); - void RunWithArgs(vector args); + void RunWithArgs(std::vector args); // ----------------------------------------------------------------- // Methods to set up the test (called before Run()). @@ -301,7 +299,7 @@ void CommandLineInterfaceTest::Run(const string& command) { RunWithArgs(Split(command, " ", true)); } -void CommandLineInterfaceTest::RunWithArgs(vector args) { +void CommandLineInterfaceTest::RunWithArgs(std::vector args) { if (!disallow_plugins_) { cli_.AllowPlugins("prefix-"); #ifndef GOOGLE_THIRD_PARTY_PROTOBUF @@ -1044,7 +1042,7 @@ TEST_F(CommandLineInterfaceTest, DirectDependencies_CustomErrorMessage) { "syntax = \"proto2\";\n" "message Bar { optional string text = 1; }"); - vector commands; + std::vector commands; commands.push_back("protocol_compiler"); commands.push_back("--test_out=$tmpdir"); commands.push_back("--proto_path=$tmpdir"); @@ -1127,15 +1125,17 @@ TEST_F(CommandLineInterfaceTest, WriteDescriptorSetWithDuplicates) { ReadDescriptorSet("descriptor_set", &descriptor_set); if (HasFatalFailure()) return; EXPECT_EQ(3, descriptor_set.file_size()); - EXPECT_EQ("bar.proto", descriptor_set.file(0).name()); - EXPECT_EQ("foo.proto", descriptor_set.file(1).name()); + // foo should come first since the output is in dependency order. + // since bar and baz are unordered, they should be in command line order. + EXPECT_EQ("foo.proto", descriptor_set.file(0).name()); + EXPECT_EQ("bar.proto", descriptor_set.file(1).name()); EXPECT_EQ("baz.proto", descriptor_set.file(2).name()); // Descriptor set should not have source code info. EXPECT_FALSE(descriptor_set.file(0).has_source_code_info()); // Descriptor set should have json_name. - EXPECT_EQ("Bar", descriptor_set.file(0).message_type(0).name()); - EXPECT_EQ("foo", descriptor_set.file(0).message_type(0).field(0).name()); - EXPECT_TRUE(descriptor_set.file(0).message_type(0).field(0).has_json_name()); + EXPECT_EQ("Bar", descriptor_set.file(1).message_type(0).name()); + EXPECT_EQ("foo", descriptor_set.file(1).message_type(0).field(0).name()); + EXPECT_TRUE(descriptor_set.file(1).message_type(0).field(0).has_json_name()); } TEST_F(CommandLineInterfaceTest, WriteDescriptorSetWithSourceInfo) { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc index bf4e58319c641c..fce58c029226c0 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc @@ -46,12 +46,11 @@ #include #include -#include #include +#include +#include #include #include -#include -#include #include #include @@ -126,9 +125,12 @@ TEST(BootstrapTest, GeneratedDescriptorMatches) { importer.Import("google/protobuf/descriptor.proto"); const FileDescriptor* plugin_proto_file = importer.Import("google/protobuf/compiler/plugin.proto"); + const FileDescriptor* profile_proto_file = + importer.Import("google/protobuf/compiler/profile.proto"); EXPECT_EQ("", error_collector.text_); ASSERT_TRUE(proto_file != NULL); ASSERT_TRUE(plugin_proto_file != NULL); + ASSERT_TRUE(profile_proto_file != NULL); CppGenerator generator; MockGeneratorContext context; @@ -139,6 +141,8 @@ TEST(BootstrapTest, GeneratedDescriptorMatches) { parameter = "dllexport_decl=LIBPROTOC_EXPORT"; ASSERT_TRUE(generator.Generate(plugin_proto_file, parameter, &context, &error)); + ASSERT_TRUE(generator.Generate(profile_proto_file, parameter, + &context, &error)); context.ExpectFileMatches("google/protobuf/descriptor.pb.h", "google/protobuf/descriptor.pb.h"); @@ -148,6 +152,10 @@ TEST(BootstrapTest, GeneratedDescriptorMatches) { "google/protobuf/compiler/plugin.pb.h"); context.ExpectFileMatches("google/protobuf/compiler/plugin.pb.cc", "google/protobuf/compiler/plugin.pb.cc"); + context.ExpectFileMatches("google/protobuf/compiler/profile.pb.h", + "google/protobuf/compiler/profile.pb.h"); + context.ExpectFileMatches("google/protobuf/compiler/profile.pb.cc", + "google/protobuf/compiler/profile.pb.cc"); } } // namespace diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_enum_field.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_enum_field.cc index e4b17a98e47ded..c15be9427fbf11 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_enum_field.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_enum_field.cc @@ -318,7 +318,7 @@ GenerateMergingCode(io::Printer* printer) const { void RepeatedEnumFieldGenerator:: GenerateSwappingCode(io::Printer* printer) const { - printer->Print(variables_, "$name$_.UnsafeArenaSwap(&other->$name$_);\n"); + printer->Print(variables_, "$name$_.InternalSwap(&other->$name$_);\n"); } void RepeatedEnumFieldGenerator:: @@ -461,20 +461,14 @@ GenerateSerializeWithCachedSizesToArray(io::Printer* printer) const { " target);\n" " target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(" " _$name$_cached_byte_size_, target);\n" - "}\n"); - } - printer->Print(variables_, - "for (int i = 0, n = this->$name$_size(); i < n; i++) {\n"); - if (descriptor_->is_packed()) { - printer->Print(variables_, " target = ::google::protobuf::internal::WireFormatLite::WriteEnumNoTagToArray(\n" - " this->$name$(i), target);\n"); + " this->$name$_, target);\n" + "}\n"); } else { printer->Print(variables_, - " target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(\n" - " $number$, this->$name$(i), target);\n"); + "target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(\n" + " $number$, this->$name$_, target);\n"); } - printer->Print("}\n"); } void RepeatedEnumFieldGenerator:: diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_file.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_file.cc index f2e013c05e18f1..e0542ae86d1b13 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_file.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_file.cc @@ -39,6 +39,7 @@ #include #endif #include +#include #include #include @@ -67,7 +68,7 @@ bool IsMacroName(const string& name) { return false; } -void CollectMacroNames(const Descriptor* message, vector* names) { +void CollectMacroNames(const Descriptor* message, std::vector* names) { for (int i = 0; i < message->field_count(); ++i) { const FieldDescriptor* field = message->field(i); if (IsMacroName(field->name())) { @@ -79,7 +80,13 @@ void CollectMacroNames(const Descriptor* message, vector* names) { } } -void CollectMacroNames(const FileDescriptor* file, vector* names) { +void CollectMacroNames(const FileDescriptor* file, std::vector* names) { + // Only do this for protobuf's own types. There are some google3 protos using + // macros as field names and the generated code compiles after the macro + // expansion. Undefing these macros actually breaks such code. + if (file->name() != "google/protobuf/compiler/plugin.proto") { + return; + } for (int i = 0; i < file->message_type_count(); ++i) { CollectMacroNames(file->message_type(i), names); } @@ -93,18 +100,19 @@ void CollectMacroNames(const FileDescriptor* file, vector* names) { FileGenerator::FileGenerator(const FileDescriptor* file, const Options& options) : file_(file), options_(options), + scc_analyzer_(options), message_generators_owner_( - new google::protobuf::scoped_ptr[ file->message_type_count() ]), + new google::protobuf::scoped_ptr[file->message_type_count()]), enum_generators_owner_( - new google::protobuf::scoped_ptr[ file->enum_type_count() ]), + new google::protobuf::scoped_ptr[file->enum_type_count()]), service_generators_owner_( - new google::protobuf::scoped_ptr[ file->service_count() ]), + new google::protobuf::scoped_ptr[file->service_count()]), extension_generators_owner_( - new google::protobuf::scoped_ptr[ file->extension_count() ]) { + new google::protobuf::scoped_ptr[file->extension_count()]) { for (int i = 0; i < file->message_type_count(); i++) { message_generators_owner_[i].reset( - new MessageGenerator(file->message_type(i), options)); + new MessageGenerator(file->message_type(i), options, &scc_analyzer_)); message_generators_owner_[i]->Flatten(&message_generators_); } @@ -137,7 +145,7 @@ FileGenerator::FileGenerator(const FileDescriptor* file, const Options& options) FileGenerator::~FileGenerator() {} void FileGenerator::GenerateMacroUndefs(io::Printer* printer) { - vector names_to_undef; + std::vector names_to_undef; CollectMacroNames(file_, &names_to_undef); for (int i = 0; i < names_to_undef.size(); ++i) { printer->Print( @@ -241,6 +249,7 @@ void FileGenerator::GeneratePBHeader(io::Printer* printer, } else { GenerateLibraryIncludes(printer); } + GenerateDependencyIncludes(printer); GenerateMetadataPragma(printer, info_path); @@ -327,11 +336,17 @@ void FileGenerator::GenerateSource(io::Printer* printer) { GenerateNamespaceOpeners(printer); for (int i = 0; i < message_generators_.size(); i++) { - if (IsMapEntryMessage(message_generators_[i]->descriptor_)) continue; + string parent; + if (IsMapEntryMessage(message_generators_[i]->descriptor_)) { + parent = ClassName(message_generators_[i]->descriptor_->containing_type(), + false) + + "::"; + } printer->Print( "class $classname$DefaultTypeInternal : " - "public ::google::protobuf::internal::ExplicitlyConstructed<$classname$> {\n", - "classname", message_generators_[i]->classname_); + "public ::google::protobuf::internal::ExplicitlyConstructed<$parent$$classname$> " + "{\n", + "parent", parent, "classname", message_generators_[i]->classname_); printer->Indent(); message_generators_[i]->GenerateExtraDefaultFields(printer); printer->Outdent(); @@ -340,9 +355,6 @@ void FileGenerator::GenerateSource(io::Printer* printer) { "classname", message_generators_[i]->classname_); } - for (int i = 0; i < message_generators_.size(); i++) { - message_generators_[i]->index_in_metadata_ = i; - } for (int i = 0; i < enum_generators_.size(); i++) { enum_generators_[i]->index_in_metadata_ = i; } @@ -530,6 +542,70 @@ void FileGenerator::GenerateBuildDescriptors(io::Printer* printer) { // In optimize_for = LITE_RUNTIME mode, we don't generate AssignDescriptors() // and we only use AddDescriptors() to allocate default instances. + // TODO(ckennelly): Gate this with the same options flag to enable + // table-driven parsing. + + printer->Print("PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField\n" + " const TableStruct::entries[] = {\n"); + printer->Indent(); + + std::vector entries; + size_t count = 0; + for (int i = 0; i < message_generators_.size(); i++) { + size_t value = message_generators_[i]->GenerateParseOffsets(printer); + entries.push_back(value); + count += value; + } + + // We need these arrays to exist, and MSVC does not like empty arrays. + if (count == 0) { + printer->Print("{0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0},\n"); + } + + printer->Outdent(); + printer->Print( + "};\n" + "\n" + "PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField\n" + " const TableStruct::aux[] = {\n"); + printer->Indent(); + + std::vector aux_entries; + count = 0; + for (int i = 0; i < message_generators_.size(); i++) { + size_t value = message_generators_[i]->GenerateParseAuxTable(printer); + aux_entries.push_back(value); + count += value; + } + + if (count == 0) { + printer->Print("::google::protobuf::internal::AuxillaryParseTableField(),\n"); + } + + printer->Outdent(); + printer->Print( + "};\n" + "PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const\n" + " TableStruct::schema[] = {\n"); + printer->Indent(); + + size_t offset = 0; + size_t aux_offset = 0; + for (int i = 0; i < message_generators_.size(); i++) { + message_generators_[i]->GenerateParseTable(printer, offset, aux_offset); + offset += entries[i]; + aux_offset += aux_entries[i]; + } + + if (message_generators_.empty()) { + printer->Print("{ NULL, NULL, 0, -1, -1, false },\n"); + } + + printer->Outdent(); + printer->Print( + "};\n" + "\n"); + if (HasDescriptorMethods(file_, options_)) { if (!message_generators_.empty()) { printer->Print("const ::google::protobuf::uint32 TableStruct::offsets[] = {\n"); @@ -560,8 +636,6 @@ void FileGenerator::GenerateBuildDescriptors(io::Printer* printer) { printer->Indent(); for (int i = 0; i < message_generators_.size(); i++) { const Descriptor* descriptor = message_generators_[i]->descriptor_; - if (IsMapEntryMessage(descriptor)) continue; - printer->Print( "reinterpret_cast(&_$classname$_default_instance_),\n", @@ -600,7 +674,31 @@ void FileGenerator::GenerateBuildDescriptors(io::Printer* printer) { " AssignDescriptors(\n" " \"$filename$\", schemas, file_default_instances, " "TableStruct::offsets, factory,\n" - " $metadata$, $enum_descriptors$, $service_descriptors$);\n" + " $metadata$, $enum_descriptors$, $service_descriptors$);\n", + "filename", file_->name(), "metadata", + !message_generators_.empty() ? "file_level_metadata" : "NULL", + "enum_descriptors", + !enum_generators_.empty() ? "file_level_enum_descriptors" : "NULL", + "service_descriptors", + HasGenericServices(file_, options_) && file_->service_count() > 0 + ? "file_level_service_descriptors" + : "NULL", + "factory", message_factory); + // TODO(gerbens) have the compiler include the schemas for map types + // so that this can go away, and we can potentially use table driven + // serialization for map types as well. + for (int i = 0; i < message_generators_.size(); i++) { + if (!IsMapEntryMessage(message_generators_[i]->descriptor_)) continue; + printer->Print( + "file_level_metadata[$index$].reflection = " + "$parent$::$classname$::CreateReflection(file_level_metadata[$index$]" + ".descriptor, _$classname$_default_instance_.get_mutable());\n", + "index", SimpleItoa(i), "parent", + ClassName(message_generators_[i]->descriptor_->containing_type(), + false), + "classname", ClassName(message_generators_[i]->descriptor_, false)); + } + printer->Print( "}\n" "\n" "void protobuf_AssignDescriptorsOnce() {\n" @@ -634,12 +732,6 @@ void FileGenerator::GenerateBuildDescriptors(io::Printer* printer) { "size", SimpleItoa(message_generators_.size())); } - // Map types are treated special - // TODO(gerbens) find a way to treat maps more like normal messages. - for (int i = 0; i < message_generators_.size(); i++) { - message_generators_[i]->GenerateTypeRegistrations(printer); - } - printer->Outdent(); printer->Print( "}\n" @@ -659,6 +751,15 @@ void FileGenerator::GenerateBuildDescriptors(io::Printer* printer) { message_generators_[i]->GenerateShutdownCode(printer); } + if (HasDescriptorMethods(file_, options_)) { + for (int i = 0; i < message_generators_.size(); i++) { + if (!IsMapEntryMessage(message_generators_[i]->descriptor_)) continue; + printer->Print( + "delete file_level_metadata[$index$].reflection;\n", + "index", SimpleItoa(i)); + } + } + printer->Outdent(); printer->Print( "}\n\n"); @@ -902,8 +1003,16 @@ void FileGenerator::GenerateLibraryIncludes(io::Printer* printer) { "#include \n" "#include \n" "#include \n" - "#include \n" + "#include \n" + "#include \n"); + + if (HasDescriptorMethods(file_, options_)) { + printer->Print( "#include \n"); + } else { + printer->Print( + "#include \n"); + } if (!message_generators_.empty()) { if (HasDescriptorMethods(file_, options_)) { @@ -921,7 +1030,8 @@ void FileGenerator::GenerateLibraryIncludes(io::Printer* printer) { " // IWYU pragma: export\n"); if (HasMapFields(file_)) { printer->Print( - "#include \n"); + "#include " + " // IWYU pragma: export\n"); if (HasDescriptorMethods(file_, options_)) { printer->Print( "#include \n"); @@ -1001,6 +1111,9 @@ void FileGenerator::GenerateGlobalStateFunctionDeclarations( "namespace $file_namespace$ {\n" "// Internal implementation detail -- do not call these.\n" "struct $dllexport_decl$TableStruct {\n" + " static const ::google::protobuf::internal::ParseTableField entries[];\n" + " static const ::google::protobuf::internal::AuxillaryParseTableField aux[];\n" + " static const ::google::protobuf::internal::ParseTable schema[];\n" " static const ::google::protobuf::uint32 offsets[];\n" // The following function(s) need to be able to access private members of // the messages defined in the file. So we make them static members. diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_file.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_file.h index e3fbb96d23912b..e10fe2f3d0422b 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_file.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_file.h @@ -43,6 +43,7 @@ #include #include #include +#include #include namespace google { @@ -145,6 +146,8 @@ class FileGenerator { const FileDescriptor* file_; const Options options_; + SCCAnalyzer scc_analyzer_; + // Contains the post-order walk of all the messages (and child messages) in // this file. If you need a pre-order walk just reverse iterate. std::vector message_generators_; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_generator.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_generator.cc index 648ab28a514bc1..cee31224fc032d 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_generator.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_generator.cc @@ -98,6 +98,8 @@ bool CppGenerator::Generate(const FileDescriptor* file, file_options.annotation_guard_name = options[i].second; } else if (options[i].first == "lite") { file_options.enforce_lite = true; + } else if (options[i].first == "table_driven_parsing") { + file_options.table_driven_parsing = true; } else { *error = "Unknown generator option: " + options[i].first; return false; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_helpers.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_helpers.cc index 3c4dddc59042d5..9cddba5c208f2f 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_helpers.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_helpers.cc @@ -654,6 +654,109 @@ void GenerateUtf8CheckCodeForCord(const FieldDescriptor* field, "VerifyUtf8Cord", "VerifyUTF8CordNamedField", printer); } +bool HasWeakFields(const Descriptor* descriptor) { + return false; +} + +bool HasWeakFields(const FileDescriptor* file) { + return false; +} + +SCCAnalyzer::NodeData SCCAnalyzer::DFS(const Descriptor* descriptor) { + // Must not have visited already. + GOOGLE_DCHECK_EQ(cache_.count(descriptor), 0); + + // Mark visited by inserting in map. + NodeData& result = cache_[descriptor]; + // Initialize data structures. + result.index = result.lowlink = index_++; + stack_.push_back(descriptor); + + // Recurse the fields / nodes in graph + for (int i = 0; i < descriptor->field_count(); i++) { + const Descriptor* child = descriptor->field(i)->message_type(); + if (child) { + if (cache_.count(child) == 0) { + // unexplored node + NodeData child_data = DFS(child); + result.lowlink = std::min(result.lowlink, child_data.lowlink); + } else { + NodeData child_data = cache_[child]; + if (child_data.scc == NULL) { + // Still in the stack_ so we found a back edge + result.lowlink = std::min(result.lowlink, child_data.index); + } + } + } + } + if (result.index == result.lowlink) { + // This is the root of a strongly connected component + SCC* scc = CreateSCC(); + while (true) { + const Descriptor* scc_desc = stack_.back(); + scc->descriptors.push_back(scc_desc); + // Remove from stack + stack_.pop_back(); + cache_[scc_desc].scc = scc; + + if (scc_desc == descriptor) break; + } + } + return result; +} + +MessageAnalysis SCCAnalyzer::GetSCCAnalysis(const SCC* scc) { + if (analysis_cache_.count(scc)) return analysis_cache_[scc]; + MessageAnalysis result = MessageAnalysis(); + for (int i = 0; i < scc->descriptors.size(); i++) { + const Descriptor* descriptor = scc->descriptors[i]; + if (descriptor->extension_range_count() > 0) { + result.contains_extension = true; + } + for (int i = 0; i < descriptor->field_count(); i++) { + const FieldDescriptor* field = descriptor->field(i); + if (field->is_required()) { + result.contains_required = true; + } + switch (field->type()) { + case FieldDescriptor::TYPE_STRING: + case FieldDescriptor::TYPE_BYTES: { + if (field->options().ctype() == FieldOptions::CORD) { + result.contains_cord = true; + } + break; + } + case FieldDescriptor::TYPE_GROUP: + case FieldDescriptor::TYPE_MESSAGE: { + const SCC* child = GetSCC(field->message_type()); + if (child != scc) { + MessageAnalysis analysis = GetSCCAnalysis(child); + result.contains_cord |= analysis.contains_cord; + result.contains_extension |= analysis.contains_extension; + if (!ShouldIgnoreRequiredFieldCheck(field, options_)) { + result.contains_required |= analysis.contains_required; + } + } else { + // This field points back into the same SCC hence the messages + // in the SCC are recursive. Note if SCC contains more than two + // nodes it has to be recursive, however this test also works for + // a single node that is recursive. + result.is_recursive = true; + } + break; + } + default: + break; + } + } + } + // We deliberately only insert the result here. After we contracted the SCC + // in the graph, the graph should be a DAG. Hence we shouldn't need to mark + // nodes visited as we can never return to them. By inserting them here + // we will go in an infinite loop if the SCC is not correct. + return analysis_cache_[scc] = result; +} + } // namespace cpp } // namespace compiler } // namespace protobuf diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_helpers.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_helpers.h index 0f297ec8b1909d..a744a8650e3805 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_helpers.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_helpers.h @@ -277,6 +277,73 @@ inline ::google::protobuf::FileOptions_OptimizeMode GetOptimizeFor( : file->options().optimize_for(); } +bool HasWeakFields(const Descriptor* desc); +bool HasWeakFields(const FileDescriptor* desc); + +// Returns true if the "required" restriction check should be ignored for the +// given field. +inline static bool ShouldIgnoreRequiredFieldCheck(const FieldDescriptor* field, + const Options& options) { + return false; +} + +struct SCC { + std::vector descriptors; +}; + +struct MessageAnalysis { + bool is_recursive; + bool contains_cord; + bool contains_extension; + bool contains_required; +}; + +// This class is used in FileGenerator, to ensure linear instead of +// quadratic performance, if we do this per message we would get O(V*(V+E)). +// Logically this is just only used in message.cc, but in the header for +// FileGenerator to help share it. +class LIBPROTOC_EXPORT SCCAnalyzer { + public: + explicit SCCAnalyzer(const Options& options) : options_(options), index_(0) {} + ~SCCAnalyzer() { + for (int i = 0; i < garbage_bin_.size(); i++) delete garbage_bin_[i]; + } + + const SCC* GetSCC(const Descriptor* descriptor) { + if (cache_.count(descriptor)) return cache_[descriptor].scc; + return DFS(descriptor).scc; + } + + MessageAnalysis GetSCCAnalysis(const SCC* scc); + + bool HasRequiredFields(const Descriptor* descriptor) { + MessageAnalysis result = GetSCCAnalysis(GetSCC(descriptor)); + return result.contains_required || result.contains_extension; + } + + private: + struct NodeData { + const SCC* scc; // if null it means its still on the stack + int index; + int lowlink; + }; + + Options options_; + std::map cache_; + std::map analysis_cache_; + std::vector stack_; + int index_; + std::vector garbage_bin_; + + SCC* CreateSCC() { + garbage_bin_.push_back(new SCC()); + return garbage_bin_.back(); + } + + // Tarjan's Strongly Connected Components algo + NodeData DFS(const Descriptor* descriptor); +}; + } // namespace cpp } // namespace compiler } // namespace protobuf diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_map_field.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_map_field.cc index b4eaf485d06e75..52a3b8b0df88ae 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_map_field.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_map_field.cc @@ -32,6 +32,7 @@ #include #include #include + #include namespace google { @@ -113,18 +114,49 @@ MapFieldGenerator::~MapFieldGenerator() {} void MapFieldGenerator:: GeneratePrivateMembers(io::Printer* printer) const { + if (HasDescriptorMethods(descriptor_->file(), options_)) { + printer->Print( + variables_, + "public:\n" + "class $map_classname$ : public " + "::google::protobuf::internal::MapEntry<$map_classname$, \n" + " $key_cpp$, $val_cpp$,\n" + " $key_wire_type$,\n" + " $val_wire_type$,\n" + " $default_enum_value$ > {\n" + "public:\n" + " typedef ::google::protobuf::internal::MapEntry<$map_classname$, \n" + " $key_cpp$, $val_cpp$,\n" + " $key_wire_type$,\n" + " $val_wire_type$,\n" + " $default_enum_value$ > SuperType;\n" + " $map_classname$();\n" + " $map_classname$(::google::protobuf::Arena* arena);\n" + " void MergeFrom(const ::google::protobuf::Message& other) PROTOBUF_FINAL;\n" + " void MergeFrom(const $map_classname$& other);\n" + " static const Message* internal_default_instance() { return " + "reinterpret_cast(&_$map_classname$_default_instance_); }\n" + " ::google::protobuf::Metadata GetMetadata() const;\n" + "};\n"); + } else { + printer->Print(variables_, + "public:\n" + "typedef ::google::protobuf::internal::MapEntryLite<\n" + " $key_cpp$, $val_cpp$,\n" + " $key_wire_type$,\n" + " $val_wire_type$,\n" + " $default_enum_value$ >\n" + " $map_classname$;\n"); + } printer->Print(variables_, - "typedef ::google::protobuf::internal::MapEntryLite<\n" - " $key_cpp$, $val_cpp$,\n" - " $key_wire_type$,\n" - " $val_wire_type$,\n" - " $default_enum_value$ >\n" - " $map_classname$;\n" - "::google::protobuf::internal::MapField$lite$<\n" - " $key_cpp$, $val_cpp$,\n" - " $key_wire_type$,\n" - " $val_wire_type$,\n" - " $default_enum_value$ > $name$_;\n"); + "::google::protobuf::internal::MapField$lite$<\n" + " $map_classname$,\n" + " $key_cpp$, $val_cpp$,\n" + " $key_wire_type$,\n" + " $val_wire_type$,\n" + " $default_enum_value$ > $name$_;\n" + "private:\n"); } void MapFieldGenerator:: @@ -171,17 +203,6 @@ GenerateSwappingCode(io::Printer* printer) const { printer->Print(variables_, "$name$_.Swap(&other->$name$_);\n"); } -void MapFieldGenerator:: -GenerateConstructorCode(io::Printer* printer) const { - if (HasDescriptorMethods(descriptor_->file(), options_)) { - printer->Print(variables_, - "$name$_.SetAssignDescriptorCallback(\n" - " $file_namespace$::protobuf_AssignDescriptorsOnce);\n" - "$name$_.SetEntryDescriptor(\n" - " &$type$_descriptor);\n"); - } -} - void MapFieldGenerator:: GenerateCopyConstructorCode(io::Printer* printer) const { GenerateConstructorCode(printer); @@ -199,13 +220,15 @@ GenerateMergeFromCodedStream(io::Printer* printer) const { string value; if (IsProto3Field(descriptor_) || value_field->type() != FieldDescriptor::TYPE_ENUM) { - printer->Print(variables_, + printer->Print( + variables_, "$map_classname$::Parser< ::google::protobuf::internal::MapField$lite$<\n" - " $key_cpp$, $val_cpp$,\n" - " $key_wire_type$,\n" - " $val_wire_type$,\n" - " $default_enum_value$ >,\n" - " ::google::protobuf::Map< $key_cpp$, $val_cpp$ > >" + " $map_classname$,\n" + " $key_cpp$, $val_cpp$,\n" + " $key_wire_type$,\n" + " $val_wire_type$,\n" + " $default_enum_value$ >,\n" + " ::google::protobuf::Map< $key_cpp$, $val_cpp$ > >" " parser(&$name$_);\n" "DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(\n" " input, &parser));\n"); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_map_field.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_map_field.h index 816687b3a94ee9..02e664976667b6 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_map_field.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_map_field.h @@ -54,7 +54,7 @@ class MapFieldGenerator : public FieldGenerator { void GenerateClearingCode(io::Printer* printer) const; void GenerateMergingCode(io::Printer* printer) const; void GenerateSwappingCode(io::Printer* printer) const; - void GenerateConstructorCode(io::Printer* printer) const; + void GenerateConstructorCode(io::Printer* printer) const {} void GenerateCopyConstructorCode(io::Printer* printer) const; void GenerateMergeFromCodedStream(io::Printer* printer) const; void GenerateSerializeWithCachedSizes(io::Printer* printer) const; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message.cc index 1373ffc2c1ab26..d9524f649cedd4 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message.cc @@ -32,6 +32,8 @@ // Based on original Protocol Buffers design by // Sanjay Ghemawat, Jeff Dean, and others. +#include + #include #include #include @@ -41,16 +43,18 @@ #endif #include #include -#include -#include + #include #include +#include #include -#include -#include #include -#include +#include #include +#include +#include +#include +#include namespace google { @@ -103,54 +107,6 @@ struct ExtensionRangeSorter { } }; -// Returns true if the "required" restriction check should be ignored for the -// given field. -inline static bool ShouldIgnoreRequiredFieldCheck(const FieldDescriptor* field, - const Options& options) { - return false; -} - -// Returns true if the message type has any required fields. If it doesn't, -// we can optimize out calls to its IsInitialized() method. -// -// already_seen is used to avoid checking the same type multiple times -// (and also to protect against recursion). -static bool HasRequiredFields(const Descriptor* type, const Options& options, - hash_set* already_seen) { - if (already_seen->count(type) > 0) { - // Since the first occurrence of a required field causes the whole - // function to return true, we can assume that if the type is already - // in the cache it didn't have any required fields. - return false; - } - already_seen->insert(type); - - // If the type has extensions, an extension with message type could contain - // required fields, so we have to be conservative and assume such an - // extension exists. - if (type->extension_range_count() > 0) return true; - - for (int i = 0; i < type->field_count(); i++) { - const FieldDescriptor* field = type->field(i); - if (field->is_required()) { - return true; - } - if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE && - !ShouldIgnoreRequiredFieldCheck(field, options)) { - if (HasRequiredFields(field->message_type(), options, already_seen)) { - return true; - } - } - } - - return false; -} - -static bool HasRequiredFields(const Descriptor* type, const Options& options) { - hash_set already_seen; - return HasRequiredFields(type, options, &already_seen); -} - // This returns an estimate of the compiler's alignment for the field. This // can't guarantee to be correct because the generated code could be compiled on // different systems with different alignment rules. The estimates below assume @@ -288,10 +244,13 @@ bool CanConstructByZeroing(const FieldDescriptor* field, // order, fields of similiar family (see below) are together and within each // family, alignment padding is minimized. // -// We try to do this while keeping each field as close as possible to its -// declaration order (from the .proto file) so that we don't reduce cache -// locality much for function that access each field in order. This is also the -// only (weak) signal we have for author intent concerning field layout. +// We try to do this while keeping each field as close as possible to its field +// number order so that we don't reduce cache locality much for function that +// access each field in order. Originally, OptimizePadding used declaration +// order for its decisions, but generated code minus the serializer/parsers uses +// the output of OptimizePadding as well (stored in +// MessageGenerator::optimized_order_). Since the serializers use field number +// order, we use that as a tie-breaker. // // TODO(ckennelly): If/when we have profiles available for the compiler, use // those rather than respect declaration order. @@ -346,10 +305,11 @@ void OptimizePadding(std::vector* fields, f = ZERO_INITIALIZABLE; } + const int j = field->number(); switch (EstimateAlignmentSize(field)) { - case 1: aligned_to_1[f].push_back(FieldGroup(i, field)); break; - case 4: aligned_to_4[f].push_back(FieldGroup(i, field)); break; - case 8: aligned_to_8[f].push_back(FieldGroup(i, field)); break; + case 1: aligned_to_1[f].push_back(FieldGroup(j, field)); break; + case 4: aligned_to_4[f].push_back(FieldGroup(j, field)); break; + case 8: aligned_to_8[f].push_back(FieldGroup(j, field)); break; default: GOOGLE_LOG(FATAL) << "Unknown alignment size."; } @@ -366,7 +326,7 @@ void OptimizePadding(std::vector* fields, } aligned_to_4[f].push_back(field_group); } - // Sort by preferred location to keep fields as close to their declaration + // Sort by preferred location to keep fields as close to their field number // order as possible. Using stable_sort ensures that the output is // consistent across runs. std::stable_sort(aligned_to_4[f].begin(), aligned_to_4[f].end()); @@ -406,9 +366,6 @@ void OptimizePadding(std::vector* fields, } } -string MessageTypeProtoName(const FieldDescriptor* field) { - return field->message_type()->full_name(); -} // Emits an if-statement with a condition that evaluates to true if |field| is // considered non-default (will be sent over the wire), for message types @@ -495,30 +452,99 @@ bool HasPrivateHasMethod(const FieldDescriptor* field) { } +bool TableDrivenEnabled(const Descriptor* descriptor, const Options& options) { + if (!options.table_driven_parsing) { + return false; + } + + // Consider table-driven parsing. We only do this if: + // - There are no extensions + if (descriptor->extension_range_count() != 0) { + return false; + } + + // - We are not using UnknownFieldSet (part of the non-lite library). + if (UseUnknownFieldSet(descriptor->file(), options)) { + return false; + } + + // - We have has_bits for fields. This avoids a check on every field we set + // when are present (the common case). + if (!HasFieldPresence(descriptor->file())) { + return false; + } + + const double table_sparseness = 0.5; + int max_field_number = 0; + for (int i = 0; i < descriptor->field_count(); i++) { + const FieldDescriptor* field = descriptor->field(i); + if (max_field_number < field->number()) { + max_field_number = field->number(); + } + + // - There are no map fields. + if (field->is_map()) { + return false; + } + + // - There are no oneof fields. + if (field->containing_oneof()) { + return false; + } + + // - There are no weak fields. + if (field->options().weak()) { + return false; + } + } + + // - There range of field numbers is "small" + if (max_field_number >= (2 << 14)) { + return false; + } + + // - Field numbers are relatively dense within the actual number of fields + if (max_field_number * table_sparseness >= descriptor->field_count()) { + return false; + } + + // - This is not a MapEntryMessage. + if (IsMapEntryMessage(descriptor)) { + return false; + } + + return true; +} + } // anonymous namespace // =================================================================== MessageGenerator::MessageGenerator(const Descriptor* descriptor, - const Options& options) + const Options& options, + SCCAnalyzer* scc_analyzer) : descriptor_(descriptor), classname_(ClassName(descriptor, false)), options_(options), field_generators_(descriptor, options), max_has_bit_index_(0), nested_generators_(new google::protobuf::scoped_ptr< - MessageGenerator>[descriptor->nested_type_count()]), + MessageGenerator>[descriptor->nested_type_count()]), enum_generators_( new google::protobuf::scoped_ptr[descriptor->enum_type_count()]), extension_generators_(new google::protobuf::scoped_ptr< - ExtensionGenerator>[descriptor->extension_count()]), - use_dependent_base_(false) { - + ExtensionGenerator>[descriptor->extension_count()]), + use_dependent_base_(false), + num_weak_fields_(0), + scc_analyzer_(scc_analyzer) { // Compute optimized field order to be used for layout and initialization // purposes. for (int i = 0; i < descriptor_->field_count(); i++) { - if (!descriptor_->field(i)->containing_oneof()) { - optimized_order_.push_back(descriptor_->field(i)); + const FieldDescriptor* field = descriptor_->field(i); + if (field->options().weak()) { + num_weak_fields_++; + } else if (!field->containing_oneof()) { + optimized_order_.push_back(field); } } OptimizePadding(&optimized_order_, options_); @@ -538,8 +564,8 @@ MessageGenerator::MessageGenerator(const Descriptor* descriptor, } for (int i = 0; i < descriptor->nested_type_count(); i++) { - nested_generators_[i].reset( - new MessageGenerator(descriptor->nested_type(i), options)); + nested_generators_[i].reset(new MessageGenerator(descriptor->nested_type(i), + options, scc_analyzer)); } for (int i = 0; i < descriptor->enum_type_count(); i++) { @@ -565,6 +591,8 @@ MessageGenerator::MessageGenerator(const Descriptor* descriptor, // Always make oneofs dependent. use_dependent_base_ = true; } + + table_driven_ = TableDrivenEnabled(descriptor_, options_); } MessageGenerator::~MessageGenerator() {} @@ -586,6 +614,7 @@ void MessageGenerator::Flatten(std::vector* list) { for (int i = 0; i < descriptor_->nested_type_count(); i++) { nested_generators_[i]->Flatten(list); } + index_in_file_messages_ = list->size(); list->push_back(this); } @@ -602,7 +631,6 @@ void MessageGenerator::AddGenerators( void MessageGenerator::FillMessageForwardDeclarations( std::map* class_names) { - if (IsMapEntryMessage(descriptor_)) return; (*class_names)[classname_] = descriptor_; } @@ -644,7 +672,7 @@ GenerateFieldAccessorDeclarations(io::Printer* printer) { ordered_fields.begin(), optimized_order_.begin(), optimized_order_.end()); for (int i = 0; i < descriptor_->field_count(); i++) { const FieldDescriptor* field = descriptor_->field(i); - if (field->containing_oneof() == NULL) { + if (field->containing_oneof() == NULL && !field->options().weak()) { continue; } ordered_fields.push_back(field); @@ -777,6 +805,15 @@ void MessageGenerator:: GenerateSingularFieldHasBits(const FieldDescriptor* field, std::map vars, io::Printer* printer) { + if (field->options().weak()) { + printer->Print( + vars, + "$inline$" + "bool $classname$::has_$name$() const {\n" + " return _weak_field_map_.Has($number$);\n" + "}\n"); + return; + } if (HasFieldPresence(descriptor_->file())) { // N.B.: without field presence, we do not use has-bits or generate // has_$name$() methods. @@ -896,7 +933,7 @@ GenerateFieldClear(const FieldDescriptor* field, field_generators_.get(field) .GenerateClearingCode(printer); if (HasFieldPresence(descriptor_->file())) { - if (!field->is_repeated()) { + if (!field->is_repeated() && !field->options().weak()) { printer->Print(vars, "$this_message$clear_has_$name$();\n"); } @@ -1049,6 +1086,29 @@ GenerateClassDefinition(io::Printer* printer) { "}\n" "\n"); + // Generate move constructor and move assignment operator for types other than + // Any. + #ifdef PROTO_EXPERIMENTAL_ENABLE_MOVE + if (!IsAnyMessage(descriptor_)) { + printer->Print(vars, + "#if LANG_CXX11\n" + "$classname$($classname$&& from)\n" + " : $classname$() {\n" + " *this = ::std::move(from);\n" + "}\n" + "\n" + "inline $classname$& operator=($classname$&& from) {\n" + " if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {\n" + " InternalSwap(&from);\n" + " } else {\n" + " CopyFrom(from);\n" + " }\n" + " return *this;\n" + "}\n" + "#endif\n"); + } + #endif + if (PreserveUnknownFields(descriptor_)) { string type = UseUnknownFieldSet(descriptor_->file(), options_) ? "::google::protobuf::UnknownFieldSet" @@ -1119,12 +1179,15 @@ GenerateClassDefinition(io::Printer* printer) { } // TODO(gerbens) make this private, while still granting other protos access. + vars["message_index"] = SimpleItoa(index_in_file_messages_); printer->Print( vars, "static inline const $classname$* internal_default_instance() {\n" " return reinterpret_cast(\n" " &_$classname$_default_instance_);\n" "}\n" + "static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =\n" + " $message_index$;\n" "\n"); @@ -1199,14 +1262,8 @@ GenerateClassDefinition(io::Printer* printer) { } if (HasFastArraySerialization(descriptor_->file(), options_)) { printer->Print( - "::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(\n" - " bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;\n" - "::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output)\n" - " const PROTOBUF_FINAL {\n" - " return InternalSerializeWithCachedSizesToArray(\n" - " ::google::protobuf::io::CodedOutputStream::" - "IsDefaultSerializationDeterministic(), output);\n" - "}\n"); + "::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(\n" + " bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;\n"); } } @@ -1312,7 +1369,8 @@ GenerateClassDefinition(io::Printer* printer) { for (int i = 0; i < descriptor_->field_count(); i++) { - if (!descriptor_->field(i)->is_repeated()) { + if (!descriptor_->field(i)->is_repeated() && + !descriptor_->field(i)->options().weak()) { // set_has_***() generated in all proto1/2 code and in oneofs (only) for // messages without true field presence. if (HasFieldPresence(descriptor_->file()) || @@ -1451,6 +1509,10 @@ GenerateClassDefinition(io::Printer* printer) { "\n"); } + if (num_weak_fields_) { + printer->Print( + "::google::protobuf::internal::WeakFieldMap _weak_field_map_;\n"); + } // Generate _any_metadata_ for the Any type. if (IsAnyMessage(descriptor_)) { printer->Print(vars, @@ -1459,6 +1521,7 @@ GenerateClassDefinition(io::Printer* printer) { // The TableStruct struct needs access to the private parts, in order to // construct the offsets of all members. + // // Some InitDefault and Shutdown are defined as static member functions of // TableStruct such that they are also allowed to access private members. printer->Print( @@ -1511,8 +1574,9 @@ GenerateInlineMethods(io::Printer* printer, bool is_inline) { void MessageGenerator:: GenerateExtraDefaultFields(io::Printer* printer) { - // Generate oneof default instance for reflection usage. - if (descriptor_->oneof_decl_count() > 0) { + // Generate oneof default instance and weak field instances for reflection + // usage. + if (descriptor_->oneof_decl_count() > 0 || num_weak_fields_ > 0) { printer->Print("public:\n"); for (int i = 0; i < descriptor_->oneof_decl_count(); i++) { for (int j = 0; j < descriptor_->oneof_decl(i)->field_count(); j++) { @@ -1525,9 +1589,71 @@ GenerateExtraDefaultFields(io::Printer* printer) { field_generators_.get(field).GeneratePrivateMembers(printer); } } + for (int i = 0; i < descriptor_->field_count(); i++) { + const FieldDescriptor* field = descriptor_->field(i); + if (field->options().weak()) { + printer->Print( + " const ::google::protobuf::Message* $name$_;\n", "name", FieldName(field)); + } + } } } +bool MessageGenerator::GenerateParseTable(io::Printer* printer, size_t offset, + size_t aux_offset) { + if (!table_driven_) { + printer->Print("{ NULL, NULL, 0, -1, -1, false },\n"); + return false; + } + + std::map vars; + + vars["classname"] = classname_; + vars["offset"] = SimpleItoa(offset); + vars["aux_offset"] = SimpleItoa(aux_offset); + + int max_field_number = 0; + for (int i = 0; i < descriptor_->field_count(); i++) { + const FieldDescriptor* field = descriptor_->field(i); + if (max_field_number < field->number()) { + max_field_number = field->number(); + } + } + + vars["max_field_number"] = SimpleItoa(max_field_number); + + printer->Print("{\n"); + printer->Indent(); + + printer->Print(vars, + "TableStruct::entries + $offset$,\n" + "TableStruct::aux + $aux_offset$,\n" + "$max_field_number$,\n"); + + if (!HasFieldPresence(descriptor_->file())) { + // If we don't have field presence, then _has_bits_ does not exist. + printer->Print(vars, "-1,\n"); + } else { + printer->Print(vars, + "GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(\n" + " $classname$, _has_bits_),\n"); + } + + printer->Print(vars, + "GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(\n" + " $classname$, _internal_metadata_),\n"); + + if (UseUnknownFieldSet(descriptor_->file(), options_)) { + printer->Print(vars, "true,\n"); + } else { + printer->Print(vars, "false,\n"); + } + + printer->Outdent(); + printer->Print("},\n"); + return true; +} + void MessageGenerator::GenerateSchema(io::Printer* printer, int offset, int has_offset) { if (IsMapEntryMessage(descriptor_)) return; @@ -1544,47 +1670,8 @@ void MessageGenerator::GenerateSchema(io::Printer* printer, int offset, "{ $offset$, $has_bits_offsets$, sizeof($classname$)},\n"); } -void MessageGenerator:: -GenerateTypeRegistrations(io::Printer* printer) { - // Register this message type with the message factory. - if (IsMapEntryMessage(descriptor_)) { - std::map vars; - CollectMapInfo(descriptor_, &vars); - vars["classname"] = classname_; - vars["file_namespace"] = FileLevelNamespace(descriptor_->file()->name()); - - const FieldDescriptor* val = descriptor_->FindFieldByName("value"); - if (descriptor_->file()->syntax() == FileDescriptor::SYNTAX_PROTO2 && - val->type() == FieldDescriptor::TYPE_ENUM) { - const EnumValueDescriptor* default_value = val->default_value_enum(); - vars["default_enum_value"] = Int32ToString(default_value->number()); - } else { - vars["default_enum_value"] = "0"; - } - - vars["index_in_metadata"] = SimpleItoa(index_in_metadata_); - - printer->Print( - vars, - "const ::google::protobuf::Descriptor* $classname$_descriptor = " - "$file_namespace$::file_level_metadata[$index_in_metadata$].descriptor;" - "\n" - "::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(\n" - " $classname$_descriptor,\n" - " ::google::protobuf::internal::MapEntry<\n" - " $key$,\n" - " $val$,\n" - " $key_wire_type$,\n" - " $val_wire_type$,\n" - " $default_enum_value$>::CreateDefaultInstance(\n" - " $classname$_descriptor));\n"); - } -} - void MessageGenerator:: GenerateDefaultInstanceAllocator(io::Printer* printer) { - if (IsMapEntryMessage(descriptor_)) return; - // Construct the default instances of all fields, as they will be used // when creating the default instance of the entire message. for (int i = 0; i < descriptor_->field_count(); i++) { @@ -1601,7 +1688,15 @@ GenerateDefaultInstanceAllocator(io::Printer* printer) { void MessageGenerator:: GenerateDefaultInstanceInitializer(io::Printer* printer) { - if (IsMapEntryMessage(descriptor_)) return; + if (IsMapEntryMessage(descriptor_)) { + printer->Print( + "_$classname$_default_instance_.get_mutable()->set_default_instance(_$" + "classname$_default_instance_.get_mutable());\n" + "_$classname$_default_instance_.get_mutable()->InitAsDefaultInstance();" + "\n", + "classname", classname_); + return; + } // The default instance needs all of its embedded message pointers // cross-linked to other default instances. We can't do this initialization @@ -1617,7 +1712,7 @@ GenerateDefaultInstanceInitializer(io::Printer* printer) { (field->containing_oneof() == NULL || HasDescriptorMethods(descriptor_->file(), options_))) { string name; - if (field->containing_oneof()) { + if (field->containing_oneof() || field->options().weak()) { name = "_" + classname_ + "_default_instance_."; } else { name = "_" + classname_ + "_default_instance_.get_mutable()->"; @@ -1645,7 +1740,7 @@ GenerateShutdownCode(io::Printer* printer) { if (HasDescriptorMethods(descriptor_->file(), options_)) { printer->Print("delete file_level_metadata[$index$].reflection;\n", "index", - SimpleItoa(index_in_metadata_)); + SimpleItoa(index_in_file_messages_)); } // Handle default instances of fields. @@ -1657,7 +1752,31 @@ GenerateShutdownCode(io::Printer* printer) { void MessageGenerator:: GenerateClassMethods(io::Printer* printer) { - if (IsMapEntryMessage(descriptor_)) return; + if (IsMapEntryMessage(descriptor_)) { + if (HasDescriptorMethods(descriptor_->file(), options_)) { + printer->Print( + "$parent$::$classname$::$classname$() {}\n" + "$parent$::$classname$::$classname$(::google::protobuf::Arena* arena) : " + "SuperType(arena) {}\n" + "::google::protobuf::Metadata $parent$::$classname$::GetMetadata() const {\n" + " $file_namespace$::protobuf_AssignDescriptorsOnce();\n" + " return $file_namespace$::file_level_metadata[$index$];\n" + "}\n" + "void $parent$::$classname$::MergeFrom(\n" + " const ::google::protobuf::Message& other) {\n" + " ::google::protobuf::Message::MergeFrom(other);\n" + "}\n" + "void $parent$::$classname$::MergeFrom(const $classname$& other) {\n" + " MergeFromInternal(other);\n" + "}\n" + "\n", + "file_namespace", FileLevelNamespace(descriptor_->file()->name()), + "parent", ClassName(descriptor_->containing_type(), false), + "classname", classname_, "index", + SimpleItoa(index_in_file_messages_)); + } + return; + } if (IsAnyMessage(descriptor_)) { printer->Print( @@ -1739,11 +1858,12 @@ GenerateClassMethods(io::Printer* printer) { printer->Print( "::google::protobuf::Metadata $classname$::GetMetadata() const {\n" " $file_namespace$::protobuf_AssignDescriptorsOnce();\n" - " return $file_namespace$::file_level_metadata[$index$];\n" + " return " + "$file_namespace$::file_level_metadata[kIndexInFileMessages];\n" "}\n" "\n", - "classname", classname_, "index", SimpleItoa(index_in_metadata_), - "file_namespace", FileLevelNamespace(descriptor_->file()->name())); + "classname", classname_, "file_namespace", + FileLevelNamespace(descriptor_->file()->name())); } else { printer->Print( "::std::string $classname$::GetTypeName() const {\n" @@ -1756,6 +1876,185 @@ GenerateClassMethods(io::Printer* printer) { } +size_t MessageGenerator::GenerateParseOffsets(io::Printer* printer) { + if (!table_driven_) { + return 0; + } + + // Field "0" is special: We use it in our switch statement of processing + // types to handle the successful end tag case. + printer->Print("{0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0},\n"); + int last_field_number = 1; + + std::vector ordered_fields = + SortFieldsByNumber(descriptor_); + + for (int i = 0; i < descriptor_->field_count(); i++) { + const FieldDescriptor* field = ordered_fields[i]; + GOOGLE_CHECK_GE(field->number(), last_field_number); + + for (; last_field_number < field->number(); last_field_number++) { + printer->Print( + "{ 0, 0, ::google::protobuf::internal::kInvalidMask,\n" + " ::google::protobuf::internal::kInvalidMask, 0, 0 },\n"); + } + last_field_number++; + + unsigned char normal_wiretype, packed_wiretype, processing_type; + normal_wiretype = WireFormat::WireTypeForFieldType(field->type()); + + if (field->is_packable()) { + packed_wiretype = WireFormatLite::WIRETYPE_LENGTH_DELIMITED; + } else { + packed_wiretype = internal::kNotPackedMask; + } + + processing_type = static_cast(field->type()); + if (field->type() == FieldDescriptor::TYPE_STRING) { + switch (EffectiveStringCType(field)) { + case FieldOptions::STRING: + default: + break; + } + } else if (field->type() == FieldDescriptor::TYPE_BYTES) { + switch (EffectiveStringCType(field)) { + case FieldOptions::STRING: + default: + break; + } + } + + processing_type |= static_cast( + field->is_repeated() ? internal::kRepeatedMask : 0); + const unsigned char tag_size = + WireFormat::TagSize(field->number(), field->type()); + + std::map vars; + vars["classname"] = classname_; + vars["name"] = FieldName(field); + vars["has"] = SimpleItoa(has_bit_indices_[field->index()]); + vars["nwtype"] = SimpleItoa(normal_wiretype); + vars["pwtype"] = SimpleItoa(packed_wiretype); + vars["ptype"] = SimpleItoa(processing_type); + vars["tag_size"] = SimpleItoa(tag_size); + + printer->Print(vars, + "{\n" + " GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(\n" + " $classname$, $name$_),\n" + " static_cast< ::google::protobuf::uint32>($has$),\n" + " $nwtype$, $pwtype$, $ptype$, $tag_size$\n" + "},\n"); + } + + return last_field_number; +} + +size_t MessageGenerator::GenerateParseAuxTable(io::Printer* printer) { + if (!table_driven_) { + return 0; + } + + std::vector ordered_fields = + SortFieldsByNumber(descriptor_); + + printer->Print("::google::protobuf::internal::AuxillaryParseTableField(),\n"); + int last_field_number = 1; + for (int i = 0; i < descriptor_->field_count(); i++) { + const FieldDescriptor* field = ordered_fields[i]; + + GOOGLE_CHECK_GE(field->number(), last_field_number); + for (; last_field_number < field->number(); last_field_number++) { + printer->Print("::google::protobuf::internal::AuxillaryParseTableField(),\n"); + } + + std::map vars; + SetCommonFieldVariables(field, &vars, options_); + + switch (field->cpp_type()) { + case FieldDescriptor::CPPTYPE_ENUM: + vars["type"] = ClassName(field->enum_type(), true); + printer->Print( + vars, + "{::google::protobuf::internal::AuxillaryParseTableField::enum_aux{" + "$type$_IsValid, \"$type$\" }},\n"); + last_field_number++; + break; + case FieldDescriptor::CPPTYPE_MESSAGE: { + std::vector package_parts; + + const Descriptor* outer = field->message_type(); + while (outer->containing_type() != NULL) { + outer = outer->containing_type(); + } + + package_parts = Split( + outer->full_name(), ".", true); + // outer->full_name() contains the class itself. Remove it as it is + // used in the name of the default instance variable. + GOOGLE_DCHECK_NE(package_parts.size(), 0); + package_parts.back().clear(); + + vars["classname"] = ClassName(field->message_type(), false); + vars["ns"] = Join(package_parts, "::"); + vars["type"] = FieldMessageTypeName(field); + vars["file_namespace"] = FileLevelNamespace(outer->file()->name()); + + printer->Print(vars, + "{::google::protobuf::internal::AuxillaryParseTableField::message_aux{\n" + " &::$ns$_$classname$_default_instance_,\n"); + + bool dont_emit_table = + !TableDrivenEnabled(field->message_type(), options_); + + if (dont_emit_table) { + printer->Print(" NULL,\n"); + } else { + printer->Print(vars, + " ::$ns$$file_namespace$::TableStruct::schema +\n" + " ::$ns$$classname$::kIndexInFileMessages,\n"); + } + + printer->Print("}},\n"); + last_field_number++; + break; + } + case FieldDescriptor::CPPTYPE_STRING: + switch (EffectiveStringCType(field)) { + case FieldOptions::STRING: + vars["default"] = + field->default_value_string().empty() + ? "&::google::protobuf::internal::fixed_address_empty_string" + : "&" + classname_ + "::_default_" + FieldName(field) + "_"; + break; + case FieldOptions::CORD: + case FieldOptions::STRING_PIECE: + vars["default"] = + "\"" + CEscape(field->default_value_string()) + "\""; + break; + } + vars["full_name"] = field->full_name(); + vars["strict"] = + field->file()->syntax() == FileDescriptor::SYNTAX_PROTO3 + ? "true" : "false"; + vars["type"] = field->full_name(); + printer->Print(vars, + "{::google::protobuf::internal::AuxillaryParseTableField::string_aux{\n" + " $default$,\n" + " \"$full_name$\",\n" + " $strict$,\n" + " \"$type$\"\n" + "}},\n"); + last_field_number++; + break; + default: + break; + } + } + + return last_field_number; +} + std::pair MessageGenerator::GenerateOffsets( io::Printer* printer) { if (IsMapEntryMessage(descriptor_)) return std::make_pair(0, 0); @@ -1765,7 +2064,8 @@ std::pair MessageGenerator::GenerateOffsets( if (HasFieldPresence(descriptor_->file())) { printer->Print( variables, - "GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET($classname$, _has_bits_),\n"); + "GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET($classname$, " + "_has_bits_),\n"); } else { printer->Print("~0u, // no _has_bits_\n"); } @@ -1775,34 +2075,41 @@ std::pair MessageGenerator::GenerateOffsets( if (descriptor_->extension_range_count() > 0) { printer->Print( variables, - "GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET($classname$, _extensions_),\n"); + "GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET($classname$, " + "_extensions_),\n"); } else { printer->Print("~0u, // no _extensions_\n"); } if (descriptor_->oneof_decl_count() > 0) { printer->Print(variables, - "GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET($classname$, " - "_oneof_case_[0]),\n"); + "GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(" + "$classname$, _oneof_case_[0]),\n"); } else { printer->Print("~0u, // no _oneof_case_\n"); } - - const int kNumGenericOffsets = 4; // the number of fixed offsets above + if (num_weak_fields_ > 0) { + printer->Print(variables, + "GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET($classname$," + " _weak_field_map_),\n"); + } else { + printer->Print("~0u, // no _weak_field_map_\n"); + } + const int kNumGenericOffsets = 5; // the number of fixed offsets above const size_t offsets = kNumGenericOffsets + descriptor_->field_count() + descriptor_->oneof_decl_count(); size_t entries = offsets; for (int i = 0; i < descriptor_->field_count(); i++) { const FieldDescriptor* field = descriptor_->field(i); - if (field->containing_oneof()) { + if (field->containing_oneof() || field->options().weak()) { printer->Print( - "PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(" + "GOOGLE_PROTOBUF_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(" "(&_$classname$_default_instance_), $name$_),\n", "classname", classname_, "name", FieldName(field)); } else { printer->Print( "GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET($classname$, " - "$name$_),\n", + "$name$_),\n", "classname", classname_, "name", FieldName(field)); } @@ -1844,19 +2151,6 @@ GenerateSharedConstructorCode(io::Printer* printer) { need_to_clear_cached_size = false; } - // TODO(gerbens) Clean this hack, and why do i need a reference to a pointer?? - for (int i = 0; i < descriptor_->nested_type_count(); i++) { - if (HasDescriptorMethods(descriptor_->file(), options_) && - IsMapEntryMessage(descriptor_->nested_type(i))) { - printer->Print( - "const ::google::protobuf::Descriptor*& $type$_descriptor = " - "$file_namespace$::file_level_metadata[$index$].descriptor;\n", - "type", ClassName(descriptor_->nested_type(i), false), "index", - SimpleItoa(nested_generators_[i]->index_in_metadata_), - "file_namespace", FileLevelNamespace(descriptor_->file()->name())); - } - } - std::vector processed(optimized_order_.size(), false); GenerateConstructorBody(printer, processed, false); @@ -1906,6 +2200,9 @@ GenerateSharedDestructorCode(io::Printer* printer) { "oneof_name", descriptor_->oneof_decl(i)->name()); } + if (num_weak_fields_) { + printer->Print("_weak_field_map_.ClearAll();\n"); + } printer->Outdent(); printer->Print( "}\n" @@ -1956,6 +2253,12 @@ GenerateArenaDestructorCode(io::Printer* printer) { } } } + if (num_weak_fields_) { + // _this is the object being destructed (we are inside a static method + // here). + printer->Print("_this->_weak_field_map_.ClearAll();\n"); + need_registration = true; + } printer->Outdent(); printer->Print( @@ -2077,12 +2380,18 @@ GenerateStructors(io::Printer* printer) { if (IsAnyMessage(descriptor_)) { initializer_with_arena += ",\n _any_metadata_(&type_url_, &value_)"; } + if (num_weak_fields_ > 0) { + initializer_with_arena += ", _weak_field_map_(arena)"; + } string initializer_null; initializer_null = ", _internal_metadata_(NULL)"; if (IsAnyMessage(descriptor_)) { initializer_null += ", _any_metadata_(&type_url_, &value_)"; } + if (num_weak_fields_ > 0) { + initializer_null += ", _weak_field_map_(NULL)"; + } printer->Print( "$classname$::$classname$()\n" @@ -2165,6 +2474,9 @@ GenerateStructors(io::Printer* printer) { if (IsAnyMessage(descriptor_)) { printer->Print(",\n_any_metadata_(&type_url_, &value_)"); } + if (num_weak_fields_ > 0) { + printer->Print(",\n_weak_field_map_(from._weak_field_map_)"); + } printer->Outdent(); printer->Outdent(); @@ -2177,19 +2489,6 @@ GenerateStructors(io::Printer* printer) { printer->Print("_extensions_.MergeFrom(from._extensions_);\n"); } - // TODO(gerbens) Clean this hack, and why do i need a reference to a pointer?? - for (int i = 0; i < descriptor_->nested_type_count(); i++) { - if (HasDescriptorMethods(descriptor_->file(), options_) && - IsMapEntryMessage(descriptor_->nested_type(i))) { - printer->Print( - "const ::google::protobuf::Descriptor*& $type$_descriptor = " - "$file_namespace$::file_level_metadata[$index$].descriptor;\n", - "type", ClassName(descriptor_->nested_type(i), false), "index", - SimpleItoa(nested_generators_[i]->index_in_metadata_), - "file_namespace", FileLevelNamespace(descriptor_->file()->name())); - } - } - GenerateConstructorBody(printer, processed, true); // Copy oneof fields. Oneof field requires oneof case check. @@ -2268,11 +2567,13 @@ GenerateStructors(io::Printer* printer) { printer->Print( "const ::google::protobuf::Descriptor* $classname$::descriptor() {\n" " $file_namespace$::protobuf_AssignDescriptorsOnce();\n" - " return $file_namespace$::file_level_metadata[$index$].descriptor;\n" + " return " + "$file_namespace$::file_level_metadata[kIndexInFileMessages]." + "descriptor;\n" "}\n" "\n", - "index", SimpleItoa(index_in_metadata_), "classname", classname_, - "file_namespace", FileLevelNamespace(descriptor_->file()->name())); + "classname", classname_, "file_namespace", + FileLevelNamespace(descriptor_->file()->name())); } printer->Print( @@ -2504,6 +2805,10 @@ GenerateClear(io::Printer* printer) { "oneof_name", descriptor_->oneof_decl(i)->name()); } + if (num_weak_fields_) { + printer->Print("_weak_field_map_.ClearAll();\n"); + } + if (HasFieldPresence(descriptor_->file())) { // Step 5: Everything else. printer->Print("_has_bits_.Clear();\n"); @@ -2647,6 +2952,10 @@ GenerateSwap(io::Printer* printer) { if (descriptor_->extension_range_count() > 0) { printer->Print("_extensions_.Swap(&other->_extensions_);\n"); } + if (num_weak_fields_) { + printer->Print( + "_weak_field_map_.UnsafeArenaSwap(&other->_weak_field_map_);\n"); + } } else { printer->Print("GetReflection()->Swap(this, other);"); } @@ -2714,7 +3023,14 @@ GenerateMergeFrom(io::Printer* printer) { } printer->Print( - "_internal_metadata_.MergeFrom(from._internal_metadata_);\n"); + "_internal_metadata_.MergeFrom(from._internal_metadata_);\n" + "::google::protobuf::uint32 cached_has_bits = 0;\n" + "(void) cached_has_bits;\n\n"); + + // cached_has_bit_index maintains that: + // cached_has_bits = from._has_bits_[cached_has_bit_index] + // for cached_has_bit_index >= 0 + int cached_has_bit_index = -1; int last_i = -1; for (int i = 0; i < optimized_order_.size(); ) { @@ -2734,7 +3050,7 @@ GenerateMergeFrom(io::Printer* printer) { generator.GenerateMergingCode(printer); } - // Merge Optional and Required fields (after a _has_bit check). + // Merge Optional and Required fields (after a _has_bit_ check). int last_chunk = -1; int last_chunk_start = -1; int last_chunk_end = -1; @@ -2779,23 +3095,43 @@ GenerateMergeFrom(io::Printer* printer) { GOOGLE_DCHECK_LE(2, count); GOOGLE_DCHECK_GE(8, count); + if (cached_has_bit_index != last_chunk / 4) { + int new_index = last_chunk / 4; + printer->Print("cached_has_bits = from._has_bits_[$new_index$];\n", + "new_index", SimpleItoa(new_index)); + cached_has_bit_index = new_index; + } + printer->Print( - "if (from._has_bits_[$index$ / 32] & $mask$u) {\n", - "index", SimpleItoa(last_chunk * 8), + "if (cached_has_bits & $mask$u) {\n", "mask", SimpleItoa(last_chunk_mask)); printer->Indent(); } // Go back and emit clears for each of the fields we processed. + bool deferred_has_bit_changes = false; for (int j = last_chunk_start; j <= last_chunk_end; j++) { const FieldDescriptor* field = optimized_order_[j]; const FieldGenerator& generator = field_generators_.get(field); bool have_enclosing_if = false; if (HasFieldPresence(descriptor_->file())) { - printer->Print( - "if (from.has_$name$()) {\n", - "name", FieldName(field)); + // Attempt to use the state of cached_has_bits, if possible. + int has_bit_index = has_bit_indices_[field->index()]; + if (!field->options().weak() && + cached_has_bit_index == has_bit_index / 32) { + const string mask = StrCat( + strings::Hex(1u << (has_bit_index % 32), + strings::ZERO_PAD_8)); + + printer->Print( + "if (cached_has_bits & 0x$mask$u) {\n", "mask", mask); + } else { + printer->Print( + "if (from.has_$name$()) {\n", + "name", FieldName(field)); + } + printer->Indent(); have_enclosing_if = true; } else { @@ -2805,7 +3141,17 @@ GenerateMergeFrom(io::Printer* printer) { printer, "from.", field); } - generator.GenerateMergingCode(printer); + if (have_outer_if && IsPOD(field)) { + // GenerateCopyConstructorCode for enum and primitive scalar fields + // does not do _has_bits_ modifications. We defer _has_bits_ + // manipulation until the end of the outer if. + // + // This can reduce the number of loads/stores by up to 7 per 8 fields. + deferred_has_bit_changes = true; + generator.GenerateCopyConstructorCode(printer); + } else { + generator.GenerateMergingCode(printer); + } if (have_enclosing_if) { printer->Outdent(); @@ -2814,6 +3160,14 @@ GenerateMergeFrom(io::Printer* printer) { } if (have_outer_if) { + if (deferred_has_bit_changes) { + // Flush the has bits for the primitives we deferred. + GOOGLE_CHECK_LE(0, cached_has_bit_index); + printer->Print( + "_has_bits_[$index$] |= cached_has_bits;\n", + "index", SimpleItoa(cached_has_bit_index)); + } + printer->Outdent(); printer->Print("}\n"); } @@ -2849,6 +3203,9 @@ GenerateMergeFrom(io::Printer* printer) { printer->Print( "}\n"); } + if (num_weak_fields_) { + printer->Print("_weak_field_map_.MergeFrom(from._weak_field_map_);\n"); + } printer->Outdent(); printer->Print("}\n"); @@ -2913,13 +3270,36 @@ GenerateMergeFromCodedStream(io::Printer* printer) { return; } + std::vector ordered_fields = + SortFieldsByNumber(descriptor_); + printer->Print( "bool $classname$::MergePartialFromCodedStream(\n" - " ::google::protobuf::io::CodedInputStream* input) {\n" - "#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure\n" - " ::google::protobuf::uint32 tag;\n", + " ::google::protobuf::io::CodedInputStream* input) {\n", "classname", classname_); + if (table_driven_) { + printer->Indent(); + + printer->Print( + "return ::google::protobuf::internal::MergePartialFromCodedStream(\n" + " this,\n" + " $file_namespace$::TableStruct::schema[\n" + " $classname$::kIndexInFileMessages],\n" + " input);\n", + "classname", classname_, + "file_namespace", FileLevelNamespace(descriptor_->file()->name())); + + printer->Outdent(); + + printer->Print("}\n"); + return; + } + + printer->Print( + "#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure\n" + " ::google::protobuf::uint32 tag;\n"); + if (PreserveUnknownFields(descriptor_) && !UseUnknownFieldSet(descriptor_->file(), options_)) { // Use LazyStringOutputString to avoid initializing unknown fields string @@ -2928,7 +3308,8 @@ GenerateMergeFromCodedStream(io::Printer* printer) { printer->Print( " ::google::protobuf::io::LazyStringOutputStream unknown_fields_string(\n" " ::google::protobuf::NewPermanentCallback(&_internal_metadata_,\n" - " &::google::protobuf::internal::InternalMetadataWithArenaLite::mutable_unknown_fields));\n" + " &::google::protobuf::internal::InternalMetadataWithArenaLite::\n" + " mutable_unknown_fields));\n" " ::google::protobuf::io::CodedOutputStream unknown_fields_stream(\n" " &unknown_fields_string, false);\n", "classname", classname_); @@ -2942,8 +3323,6 @@ GenerateMergeFromCodedStream(io::Printer* printer) { printer->Print("for (;;) {\n"); printer->Indent(); - std::vector ordered_fields = - SortFieldsByNumber(descriptor_); uint32 maxtag = descriptor_->field_count() == 0 ? 0 : WireFormat::MakeTag(ordered_fields[descriptor_->field_count() - 1]); const int kCutoff0 = 127; // fits in 1-byte varint @@ -3004,20 +3383,8 @@ GenerateMergeFromCodedStream(io::Printer* printer) { printer->Indent(); - // Find repeated messages and groups now, to simplify what follows. - hash_set fields_with_parse_loop; - for (int i = 0; i < ordered_fields.size(); i++) { - const FieldDescriptor* field = ordered_fields[i]; - if (field->is_repeated() && - (field->type() == FieldDescriptor::TYPE_MESSAGE || - field->type() == FieldDescriptor::TYPE_GROUP)) { - fields_with_parse_loop.insert(i); - } - } - for (int i = 0; i < ordered_fields.size(); i++) { const FieldDescriptor* field = ordered_fields[i]; - const bool loops = fields_with_parse_loop.count(i) > 0; PrintFieldComment(printer, field); @@ -3030,11 +3397,7 @@ GenerateMergeFromCodedStream(io::Printer* printer) { // Emit code to parse the common, expected case. printer->Print("if (static_cast< ::google::protobuf::uint8>(tag) ==\n" " static_cast< ::google::protobuf::uint8>($commontag$u)) {\n", - "commontag", SimpleItoa(WireFormat::MakeTag(field))); - - if (loops) { - printer->Print(" DO_(input->IncrementRecursionDepth());\n"); - } + "commontag", SimpleItoa(WireFormat::MakeTag(field))); printer->Indent(); if (field->is_packed()) { @@ -3074,12 +3437,6 @@ GenerateMergeFromCodedStream(io::Printer* printer) { " goto handle_unusual;\n" "}\n"); - // For repeated messages/groups, we need to decrement recursion depth. - if (loops) { - printer->Print( - "input->UnsafeDecrementRecursionDepth();\n"); - } - printer->Print( "break;\n"); @@ -3194,7 +3551,7 @@ void MessageGenerator::GenerateSerializeOneofFields( bool to_array) { GOOGLE_CHECK(!fields.empty()); if (fields.size() == 1) { - GenerateSerializeOneField(printer, fields[0], to_array); + GenerateSerializeOneField(printer, fields[0], to_array, -1); return; } // We have multiple mutually exclusive choices. Emit a switch statement. @@ -3227,14 +3584,31 @@ void MessageGenerator::GenerateSerializeOneofFields( } void MessageGenerator::GenerateSerializeOneField( - io::Printer* printer, const FieldDescriptor* field, bool to_array) { - PrintFieldComment(printer, field); + io::Printer* printer, const FieldDescriptor* field, bool to_array, + int cached_has_bits_index) { + if (!field->options().weak()) { + // For weakfields, PrintFieldComment is called during iteration. + PrintFieldComment(printer, field); + } bool have_enclosing_if = false; - if (!field->is_repeated() && HasFieldPresence(descriptor_->file())) { - printer->Print( - "if (has_$name$()) {\n", - "name", FieldName(field)); + if (field->options().weak()) { + } else if (!field->is_repeated() && HasFieldPresence(descriptor_->file())) { + // Attempt to use the state of cached_has_bits, if possible. + int has_bit_index = has_bit_indices_[field->index()]; + if (cached_has_bits_index == has_bit_index / 32) { + const string mask = StrCat( + strings::Hex(1u << (has_bit_index % 32), + strings::ZERO_PAD_8)); + + printer->Print( + "if (cached_has_bits & 0x$mask$u) {\n", "mask", mask); + } else { + printer->Print( + "if (has_$name$()) {\n", + "name", FieldName(field)); + } + printer->Indent(); have_enclosing_if = true; } else if (!HasFieldPresence(descriptor_->file())) { @@ -3341,7 +3715,6 @@ GenerateSerializeWithCachedSizesToArray(io::Printer* printer) { "classname", classname_); printer->Indent(); - printer->Print("(void)deterministic; // Unused\n"); printer->Print( "// @@protoc_insertion_point(serialize_to_array_start:$full_name$)\n", "full_name", descriptor_->full_name()); @@ -3372,7 +3745,8 @@ GenerateSerializeWithCachedSizesBody(io::Printer* printer, bool to_array) { : mg_(mg), printer_(printer), to_array_(to_array), - eager_(!HasFieldPresence(mg->descriptor_->file())) {} + eager_(!HasFieldPresence(mg->descriptor_->file())), + cached_has_bit_index_(-1) {} ~LazySerializerEmitter() { Flush(); } @@ -3383,7 +3757,27 @@ GenerateSerializeWithCachedSizesBody(io::Printer* printer, bool to_array) { Flush(); } if (field->containing_oneof() == NULL) { - mg_->GenerateSerializeOneField(printer_, field, to_array_); + // TODO(ckennelly): Defer non-oneof fields similarly to oneof fields. + + if (!field->options().weak() && !field->is_repeated() && !eager_) { + // We speculatively load the entire _has_bits_[index] contents, even + // if it is for only one field. Deferring non-oneof emitting would + // allow us to determine whether this is going to be useful. + int has_bit_index = mg_->has_bit_indices_[field->index()]; + if (cached_has_bit_index_ != has_bit_index / 32) { + // Reload. + int new_index = has_bit_index / 32; + + printer_->Print( + "cached_has_bits = _has_bits_[$new_index$];\n", + "new_index", SimpleItoa(new_index)); + + cached_has_bit_index_ = new_index; + } + } + + mg_->GenerateSerializeOneField( + printer_, field, to_array_, cached_has_bit_index_); } else { v_.push_back(field); } @@ -3409,6 +3803,11 @@ GenerateSerializeWithCachedSizesBody(io::Printer* printer, bool to_array) { const bool to_array_; const bool eager_; std::vector v_; + + // cached_has_bit_index_ maintains that: + // cached_has_bits = from._has_bits_[cached_has_bit_index_] + // for cached_has_bit_index_ >= 0 + int cached_has_bit_index_; }; std::vector ordered_fields = @@ -3420,29 +3819,51 @@ GenerateSerializeWithCachedSizesBody(io::Printer* printer, bool to_array) { } std::sort(sorted_extensions.begin(), sorted_extensions.end(), ExtensionRangeSorter()); + if (num_weak_fields_) { + printer->Print( + "::google::protobuf::internal::WeakFieldMap::FieldWriter field_writer(" + "_weak_field_map_);\n"); + } + + printer->Print( + "::google::protobuf::uint32 cached_has_bits = 0;\n" + "(void) cached_has_bits;\n\n"); // Merge the fields and the extension ranges, both sorted by field number. { LazySerializerEmitter e(this, printer, to_array); + const FieldDescriptor* last_weak_field = NULL; int i, j; for (i = 0, j = 0; i < ordered_fields.size() || j < sorted_extensions.size();) { - if (i == descriptor_->field_count()) { - e.Flush(); - GenerateSerializeOneExtensionRange(printer, - sorted_extensions[j++], - to_array); - } else if (j == sorted_extensions.size()) { - e.Emit(ordered_fields[i++]); - } else if (ordered_fields[i]->number() < sorted_extensions[j]->start) { - e.Emit(ordered_fields[i++]); - } else { + if ((j == sorted_extensions.size()) || + (i < descriptor_->field_count() && + ordered_fields[i]->number() < sorted_extensions[j]->start)) { + const FieldDescriptor* field = ordered_fields[i++]; + if (field->options().weak()) { + last_weak_field = field; + PrintFieldComment(printer, field); + } else { + if (last_weak_field != NULL) { + e.Emit(last_weak_field); + last_weak_field = NULL; + } + e.Emit(field); + } + } else { + if (last_weak_field != NULL) { + e.Emit(last_weak_field); + last_weak_field = NULL; + } e.Flush(); GenerateSerializeOneExtensionRange(printer, sorted_extensions[j++], to_array); } } + if (last_weak_field != NULL) { + e.Emit(last_weak_field); + } } if (PreserveUnknownFields(descriptor_)) { @@ -3783,6 +4204,11 @@ GenerateByteSize(io::Printer* printer) { "}\n"); } + if (num_weak_fields_) { + // TagSize + MessageSize + printer->Print("total_size += _weak_field_map_.ByteSizeLong();\n"); + } + // We update _cached_size_ even though this is a const method. In theory, // this is not thread-compatible, because concurrent writes have undefined // results. In practice, since any concurrent writes will be writing the @@ -3840,26 +4266,28 @@ GenerateIsInitialized(io::Printer* printer) { // TODO(ckennelly): Push this down into a generator? if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE && !ShouldIgnoreRequiredFieldCheck(field, options_) && - HasRequiredFields(field->message_type(), options_)) { + scc_analyzer_->HasRequiredFields(field->message_type())) { if (field->is_repeated()) { printer->Print( "if (!::google::protobuf::internal::AllAreInitialized(this->$name$()))" " return false;\n", "name", FieldName(field)); + } else if (field->options().weak()) { + continue; } else { - GOOGLE_CHECK(field->options().weak() || !field->containing_oneof()); - // For weak fields, use the data member (::google::protobuf::Message*) instead - // of the getter to avoid a link dependency on the weak message type - // which is only forward declared. + GOOGLE_CHECK(!field->containing_oneof()); printer->Print( "if (has_$name$()) {\n" " if (!this->$name$_->IsInitialized()) return false;\n" "}\n", - "name", FieldName(field)); + "name", FieldName(field)); } } } - + if (num_weak_fields_) { + // For Weak fields. + printer->Print("if (!_weak_field_map_.IsInitialized()) return false;\n"); + } // Go through the oneof fields, emitting a switch if any might have required // fields. for (int i = 0; i < descriptor_->oneof_decl_count(); i++) { @@ -3871,7 +4299,7 @@ GenerateIsInitialized(io::Printer* printer) { if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE && !ShouldIgnoreRequiredFieldCheck(field, options_) && - HasRequiredFields(field->message_type(), options_)) { + scc_analyzer_->HasRequiredFields(field->message_type())) { has_required_fields = true; break; } @@ -3894,17 +4322,10 @@ GenerateIsInitialized(io::Printer* printer) { if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE && !ShouldIgnoreRequiredFieldCheck(field, options_) && - HasRequiredFields(field->message_type(), options_)) { + scc_analyzer_->HasRequiredFields(field->message_type())) { GOOGLE_CHECK(!(field->options().weak() || !field->containing_oneof())); if (field->options().weak()) { - // For weak fields, use the data member (::google::protobuf::Message*) instead - // of the getter to avoid a link dependency on the weak message type - // which is only forward declared. - printer->Print( - "if (has_$name$()) {\n" - " if (!this->$name$_->IsInitialized()) return false;\n" - "}\n", - "name", FieldName(field)); + // Just skip. } else { printer->Print( "if (has_$name$()) {\n" diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message.h index 1a804a16b38ea4..23aaeeb0fe1d21 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message.h @@ -42,6 +42,7 @@ #include #include #include +#include #include namespace google { @@ -61,7 +62,8 @@ class ExtensionGenerator; // extension.h class MessageGenerator { public: // See generator.cc for the meaning of dllexport_decl. - MessageGenerator(const Descriptor* descriptor, const Options& options); + MessageGenerator(const Descriptor* descriptor, const Options& options, + SCCAnalyzer* scc_analyzer); ~MessageGenerator(); // Appends the pre-order walk of the nested generators to list. @@ -94,10 +96,6 @@ class MessageGenerator { // Generate extra fields void GenerateExtraDefaultFields(io::Printer* printer); - // Generate code that calls MessageFactory::InternalRegisterGeneratedMessage() - // for all types. - void GenerateTypeRegistrations(io::Printer* printer); - // Generates code that allocates the message's default instance. void GenerateDefaultInstanceAllocator(io::Printer* printer); @@ -121,6 +119,15 @@ class MessageGenerator { void GenerateDependentFieldAccessorDefinitions(io::Printer* printer); void GenerateFieldAccessorDefinitions(io::Printer* printer, bool is_inline); + // Generate the table-driven parsing array. Returns the number of entries + // generated. + size_t GenerateParseOffsets(io::Printer* printer); + size_t GenerateParseAuxTable(io::Printer* printer); + // Generates a ParseTable entry. Returns whether the proto uses table-driven + // parsing. + bool GenerateParseTable(io::Printer* printer, size_t offset, + size_t aux_offset); + // Generate the field offsets array. Returns the a pair of the total numer // of entries generated and the index of the first has_bit entry. std::pair GenerateOffsets(io::Printer* printer); @@ -155,9 +162,14 @@ class MessageGenerator { void GenerateIsInitialized(io::Printer* printer); // Helpers for GenerateSerializeWithCachedSizes(). + // + // cached_has_bit_index maintains that: + // cached_has_bits = _has_bits_[cached_has_bit_index] + // for cached_has_bit_index >= 0 void GenerateSerializeOneField(io::Printer* printer, const FieldDescriptor* field, - bool unbounded); + bool unbounded, + int cached_has_bits_index); // Generate a switch statement to serialize 2+ fields from the same oneof. // Or, if fields.size() == 1, just call GenerateSerializeOneField(). void GenerateSerializeOneofFields( @@ -197,7 +209,7 @@ class MessageGenerator { // optimized_order_ is the order we layout the message's fields in the class. // This is reused to initialize the fields in-order for cache efficiency. // - // optimized_order_ excludes oneof fields. + // optimized_order_ excludes oneof fields and weak fields. std::vector optimized_order_; std::vector has_bit_indices_; int max_has_bit_index_; @@ -206,8 +218,13 @@ class MessageGenerator { google::protobuf::scoped_array > extension_generators_; int num_required_fields_; bool use_dependent_base_; + int num_weak_fields_; + // table_driven_ indicates the generated message uses table-driven parsing. + bool table_driven_; + + int index_in_file_messages_; - int index_in_metadata_; + SCCAnalyzer* scc_analyzer_; friend class FileGenerator; GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageGenerator); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message_field.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message_field.cc index c3d1745c7cc5e0..fc3c456417d92a 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message_field.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message_field.cc @@ -35,6 +35,7 @@ #include #include #include + #include namespace google { @@ -583,7 +584,7 @@ GenerateSerializeWithCachedSizesToArray(io::Printer* printer) const { printer->Print(variables_, "target = ::google::protobuf::internal::WireFormatLite::\n" " InternalWrite$declared_type$NoVirtualToArray(\n" - " $number$, *$non_null_ptr_to_name$, false, target);\n"); + " $number$, *$non_null_ptr_to_name$, deterministic, target);\n"); } void MessageFieldGenerator:: @@ -670,15 +671,6 @@ GenerateInlineAccessorDefinitions(io::Printer* printer, InternalGenerateInlineAccessorDefinitions(variables, printer); } -void MessageOneofFieldGenerator:: -GenerateNonInlineAccessorDefinitions(io::Printer* printer) const { - std::map variables(variables_); - variables["field_member"] = - variables["oneof_prefix"] + variables["name"] + "_"; - - //printer->Print(variables, -} - void MessageOneofFieldGenerator::InternalGenerateInlineAccessorDefinitions( const std::map& variables, io::Printer* printer) const { printer->Print(variables, @@ -1066,7 +1058,7 @@ GenerateMergingCode(io::Printer* printer) const { void RepeatedMessageFieldGenerator:: GenerateSwappingCode(io::Printer* printer) const { - printer->Print(variables_, "$name$_.UnsafeArenaSwap(&other->$name$_);\n"); + printer->Print(variables_, "$name$_.InternalSwap(&other->$name$_);\n"); } void RepeatedMessageFieldGenerator:: @@ -1079,12 +1071,12 @@ GenerateMergeFromCodedStream(io::Printer* printer) const { if (descriptor_->type() == FieldDescriptor::TYPE_MESSAGE) { printer->Print(variables_, "DO_(::google::protobuf::internal::WireFormatLite::" - "ReadMessageNoVirtualNoRecursionDepth(\n" + "ReadMessageNoVirtual(\n" " input, add_$name$()));\n"); } else { printer->Print(variables_, "DO_(::google::protobuf::internal::WireFormatLite::" - "ReadGroupNoVirtualNoRecursionDepth(\n" + "ReadGroupNoVirtual(\n" " $number$, input, add_$name$()));\n"); } } @@ -1104,7 +1096,7 @@ GenerateSerializeWithCachedSizesToArray(io::Printer* printer) const { "for (unsigned int i = 0, n = this->$name$_size(); i < n; i++) {\n" " target = ::google::protobuf::internal::WireFormatLite::\n" " InternalWrite$declared_type$NoVirtualToArray(\n" - " $number$, this->$name$(i), false, target);\n" + " $number$, this->$name$(i), deterministic, target);\n" "}\n"); } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message_field.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message_field.h index 9ca9115313bfec..cd9737f0e37245 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message_field.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_message_field.h @@ -95,7 +95,7 @@ class MessageOneofFieldGenerator : public MessageFieldGenerator { void GenerateDependentInlineAccessorDefinitions(io::Printer* printer) const; void GenerateInlineAccessorDefinitions(io::Printer* printer, bool is_inline) const; - void GenerateNonInlineAccessorDefinitions(io::Printer* printer) const; + void GenerateNonInlineAccessorDefinitions(io::Printer* printer) const { } void GenerateClearingCode(io::Printer* printer) const; // MessageFieldGenerator, from which we inherit, overrides this so we need to diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_options.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_options.h index ee44fb0abce35a..bdaa12a55dabb0 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_options.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_options.h @@ -46,16 +46,18 @@ struct Options { Options() : safe_boundary_check(false), proto_h(false), - allow_import_public(true), + transitive_pb_h(true), annotate_headers(false), - enforce_lite(false) {} + enforce_lite(false), + table_driven_parsing(false) {} string dllexport_decl; bool safe_boundary_check; bool proto_h; - bool allow_import_public; + bool transitive_pb_h; bool annotate_headers; bool enforce_lite; + bool table_driven_parsing; string annotation_pragma_name; string annotation_guard_name; }; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc index 4a0a23f60e23a7..020c194120e836 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc @@ -342,7 +342,7 @@ GenerateMergingCode(io::Printer* printer) const { void RepeatedPrimitiveFieldGenerator:: GenerateSwappingCode(io::Printer* printer) const { - printer->Print(variables_, "$name$_.UnsafeArenaSwap(&other->$name$_);\n"); + printer->Print(variables_, "$name$_.InternalSwap(&other->$name$_);\n"); } void RepeatedPrimitiveFieldGenerator:: @@ -385,6 +385,9 @@ GenerateSerializeWithCachedSizes(io::Printer* printer) const { " output->WriteVarint32(_$name$_cached_byte_size_);\n"); if (FixedSize(descriptor_->type()) > 0) { + // TODO(ckennelly): Use RepeatedField::unsafe_data() via + // WireFormatLite to access the contents of this->$name$_ to save a branch + // here. printer->Print(variables_, " ::google::protobuf::internal::WireFormatLite::Write$declared_type$Array(\n" " this->$name$().data(), this->$name$_size(), output);\n"); @@ -420,20 +423,14 @@ GenerateSerializeWithCachedSizesToArray(io::Printer* printer) const { " target);\n" " target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(\n" " _$name$_cached_byte_size_, target);\n" - "}\n"); - } - printer->Print(variables_, - "for (int i = 0, n = this->$name$_size(); i < n; i++) {\n"); - if (descriptor_->is_packed()) { - printer->Print(variables_, " target = ::google::protobuf::internal::WireFormatLite::\n" - " Write$declared_type$NoTagToArray(this->$name$(i), target);\n"); + " Write$declared_type$NoTagToArray(this->$name$_, target);\n" + "}\n"); } else { printer->Print(variables_, - " target = ::google::protobuf::internal::WireFormatLite::\n" - " Write$declared_type$ToArray($number$, this->$name$(i), target);\n"); + "target = ::google::protobuf::internal::WireFormatLite::\n" + " Write$declared_type$ToArray($number$, this->$name$_, target);\n"); } - printer->Print("}\n"); } void RepeatedPrimitiveFieldGenerator:: diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_string_field.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_string_field.cc index 664a2779468bf3..7a849e2e5ea2f5 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_string_field.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_string_field.cc @@ -36,6 +36,7 @@ #include #include #include + #include namespace google { @@ -61,6 +62,7 @@ void SetStringVariables(const FieldDescriptor* descriptor, ".get()"; (*variables)["pointer_type"] = descriptor->type() == FieldDescriptor::TYPE_BYTES ? "void" : "char"; + (*variables)["null_check"] = "GOOGLE_DCHECK(value != NULL);\n"; // NOTE: Escaped here to unblock proto1->proto2 migration. // TODO(liujisi): Extend this to apply for other conflicting methods. (*variables)["release_name"] = @@ -190,6 +192,7 @@ GenerateInlineAccessorDefinitions(io::Printer* printer, " // @@protoc_insertion_point(field_set:$full_name$)\n" "}\n" "$inline$void $classname$::set_$name$(const char* value) {\n" + " $null_check$" " $set_hasbit$\n" " $name$_.Set($default_variable$, $string_piece$(value),\n" " GetArenaNoVirtual());\n" @@ -267,6 +270,7 @@ GenerateInlineAccessorDefinitions(io::Printer* printer, "}\n" "#endif\n" "$inline$void $classname$::set_$name$(const char* value) {\n" + " $null_check$" " $set_hasbit$\n" " $name$_.SetNoArena($default_variable$, $string_piece$(value));\n" " // @@protoc_insertion_point(field_set_char:$full_name$)\n" @@ -548,6 +552,7 @@ GenerateInlineAccessorDefinitions(io::Printer* printer, " // @@protoc_insertion_point(field_set:$full_name$)\n" "}\n" "$inline$void $classname$::set_$name$(const char* value) {\n" + " $null_check$" " if (!has_$name$()) {\n" " clear_$oneof_name$();\n" " set_has_$name$();\n" @@ -664,6 +669,7 @@ GenerateInlineAccessorDefinitions(io::Printer* printer, "}\n" "#endif\n" "$inline$void $classname$::set_$name$(const char* value) {\n" + " $null_check$" " if (!has_$name$()) {\n" " clear_$oneof_name$();\n" " set_has_$name$();\n" @@ -882,6 +888,7 @@ GenerateInlineAccessorDefinitions(io::Printer* printer, "}\n" "#endif\n" "$inline$void $classname$::set_$name$(int index, const char* value) {\n" + " $null_check$" " $name$_.Mutable(index)->assign(value);\n" " // @@protoc_insertion_point(field_set_char:$full_name$)\n" "}\n" @@ -902,11 +909,12 @@ GenerateInlineAccessorDefinitions(io::Printer* printer, "}\n" "#if LANG_CXX11\n" "$inline$void $classname$::add_$name$(::std::string&& value) {\n" - " $name$_.Add()->assign(std::move(value));\n" + " $name$_.Add(std::move(value));\n" " // @@protoc_insertion_point(field_add:$full_name$)\n" "}\n" "#endif\n" "$inline$void $classname$::add_$name$(const char* value) {\n" + " $null_check$" " $name$_.Add()->assign(value);\n" " // @@protoc_insertion_point(field_add_char:$full_name$)\n" "}\n" @@ -939,7 +947,7 @@ GenerateMergingCode(io::Printer* printer) const { void RepeatedStringFieldGenerator:: GenerateSwappingCode(io::Printer* printer) const { - printer->Print(variables_, "$name$_.UnsafeArenaSwap(&other->$name$_);\n"); + printer->Print(variables_, "$name$_.InternalSwap(&other->$name$_);\n"); } void RepeatedStringFieldGenerator:: @@ -969,7 +977,7 @@ GenerateMergeFromCodedStream(io::Printer* printer) const { void RepeatedStringFieldGenerator:: GenerateSerializeWithCachedSizes(io::Printer* printer) const { printer->Print(variables_, - "for (int i = 0, n = this->$name$_size(); i < n; i++) {\n"); + "for (int i = 0, n = this->$name$_size(); i < n; i++) {\n"); printer->Indent(); if (descriptor_->type() == FieldDescriptor::TYPE_STRING) { GenerateUtf8CheckCodeForString( diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_unittest.cc index 6d68ec35a9def3..e56964c78f1f23 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/cpp/cpp_unittest.cc @@ -76,7 +76,6 @@ #include #include #include -#include #include #include #include @@ -2162,6 +2161,61 @@ TEST_F(OneofTest, MergeFrom) { } +TEST(HelpersTest, TestSCC) { + protobuf_unittest::TestMutualRecursionA a; + SCCAnalyzer scc_analyzer((Options())); + const SCC* scc = scc_analyzer.GetSCC(a.GetDescriptor()); + std::vector names; + for (int i = 0; i < scc->descriptors.size(); i++) { + names.push_back(scc->descriptors[i]->full_name()); + } + ASSERT_EQ(names.size(), 4); + std::sort(names.begin(), names.end()); + EXPECT_EQ(names[0], "protobuf_unittest.TestMutualRecursionA"); + EXPECT_EQ(names[1], "protobuf_unittest.TestMutualRecursionA.SubGroup"); + EXPECT_EQ(names[2], "protobuf_unittest.TestMutualRecursionA.SubMessage"); + EXPECT_EQ(names[3], "protobuf_unittest.TestMutualRecursionB"); + + MessageAnalysis result = scc_analyzer.GetSCCAnalysis(scc); + EXPECT_EQ(result.is_recursive, true); + EXPECT_EQ(result.contains_required, false); + EXPECT_EQ(result.contains_cord, true); // TestAllTypes + EXPECT_EQ(result.contains_extension, false); // TestAllTypes +} + +TEST(HelpersTest, TestSCCAnalysis) { + { + protobuf_unittest::TestRecursiveMessage msg; + SCCAnalyzer scc_analyzer((Options())); + const SCC* scc = scc_analyzer.GetSCC(msg.GetDescriptor()); + MessageAnalysis result = scc_analyzer.GetSCCAnalysis(scc); + EXPECT_EQ(result.is_recursive, true); + EXPECT_EQ(result.contains_required, false); + EXPECT_EQ(result.contains_cord, false); + EXPECT_EQ(result.contains_extension, false); + } + { + protobuf_unittest::TestAllExtensions msg; + SCCAnalyzer scc_analyzer((Options())); + const SCC* scc = scc_analyzer.GetSCC(msg.GetDescriptor()); + MessageAnalysis result = scc_analyzer.GetSCCAnalysis(scc); + EXPECT_EQ(result.is_recursive, false); + EXPECT_EQ(result.contains_required, false); + EXPECT_EQ(result.contains_cord, false); + EXPECT_EQ(result.contains_extension, true); + } + { + protobuf_unittest::TestRequired msg; + SCCAnalyzer scc_analyzer((Options())); + const SCC* scc = scc_analyzer.GetSCC(msg.GetDescriptor()); + MessageAnalysis result = scc_analyzer.GetSCCAnalysis(scc); + EXPECT_EQ(result.is_recursive, false); + EXPECT_EQ(result.contains_required, true); + EXPECT_EQ(result.contains_cord, false); + EXPECT_EQ(result.contains_extension, false); + } +} + } // namespace cpp_unittest } // namespace cpp } // namespace compiler diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/csharp/csharp_field_base.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/csharp/csharp_field_base.cc index 139cc75366a365..ebb8fbc26c9538 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/csharp/csharp_field_base.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/csharp/csharp_field_base.cc @@ -322,9 +322,9 @@ std::string FieldGeneratorBase::default_value(const FieldDescriptor* descriptor) } case FieldDescriptor::TYPE_DOUBLE: { double value = descriptor->default_value_double(); - if (value == numeric_limits::infinity()) { + if (value == std::numeric_limits::infinity()) { return "double.PositiveInfinity"; - } else if (value == -numeric_limits::infinity()) { + } else if (value == -std::numeric_limits::infinity()) { return "double.NegativeInfinity"; } else if (MathLimits::IsNaN(value)) { return "double.NaN"; @@ -333,9 +333,9 @@ std::string FieldGeneratorBase::default_value(const FieldDescriptor* descriptor) } case FieldDescriptor::TYPE_FLOAT: { float value = descriptor->default_value_float(); - if (value == numeric_limits::infinity()) { + if (value == std::numeric_limits::infinity()) { return "float.PositiveInfinity"; - } else if (value == -numeric_limits::infinity()) { + } else if (value == -std::numeric_limits::infinity()) { return "float.NegativeInfinity"; } else if (MathLimits::IsNaN(value)) { return "float.NaN"; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/importer.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/importer.cc index bb168d524174e4..9b5e103ae86c22 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/importer.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/importer.cc @@ -32,7 +32,9 @@ // Based on original Protocol Buffers design by // Sanjay Ghemawat, Jeff Dean, and others. -#ifndef _MSC_VER +#ifdef _MSC_VER +#include +#else #include #endif #include @@ -54,14 +56,18 @@ #include #include -namespace google { -namespace protobuf { -namespace compiler { - #ifdef _WIN32 #include +// DO NOT include , instead create functions in io_win32.{h,cc} and import +// them like we do below. +using google::protobuf::stubs::access; +using google::protobuf::stubs::open; #endif +namespace google { +namespace protobuf { +namespace compiler { + // Returns true if the text looks like a Windows-style absolute path, starting // with a drive letter. Example: "C:\foo". TODO(kenton): Share this with // copy in command_line_interface.cc? @@ -218,6 +224,7 @@ void Importer::ClearUnusedImportTrackFiles() { pool_.ClearUnusedImportTrackFiles(); } + // =================================================================== SourceTree::~SourceTree() {} diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/importer.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/importer.h index 759636e164b294..a4ffcf87de32a0 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/importer.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/importer.h @@ -175,6 +175,7 @@ class LIBPROTOBUF_EXPORT Importer { void AddUnusedImportTrackFile(const string& file_name); void ClearUnusedImportTrackFiles(); + private: SourceTreeDescriptorDatabase database_; DescriptorPool pool_; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/importer_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/importer_unittest.cc index 00285bcc63a41c..a96ac8533935f7 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/importer_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/importer_unittest.cc @@ -47,11 +47,11 @@ #include #include #include -#include #include #include #include #include +#include namespace google { namespace protobuf { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_enum_field_lite.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_enum_field_lite.cc index 50eed5da49f583..1eefdcfc12272e 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_enum_field_lite.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_enum_field_lite.cc @@ -314,6 +314,7 @@ GenerateParsingDoneCode(io::Printer* printer) const { // noop for enums } + void ImmutableEnumFieldLiteGenerator:: GenerateSerializationCode(io::Printer* printer) const { printer->Print(variables_, @@ -423,6 +424,7 @@ GenerateMembers(io::Printer* printer) const { "}\n"); } + void ImmutableEnumOneofFieldLiteGenerator:: GenerateBuilderMembers(io::Printer* printer) const { if (SupportFieldPresence(descriptor_->file())) { @@ -707,6 +709,7 @@ GenerateMembers(io::Printer* printer) const { } } + void RepeatedImmutableEnumFieldLiteGenerator:: GenerateBuilderMembers(io::Printer* printer) const { WriteFieldDocComment(printer, descriptor_); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_enum_lite.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_enum_lite.cc index 96815920a67a0b..38b054e70a00f4 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_enum_lite.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_enum_lite.cc @@ -49,17 +49,6 @@ namespace protobuf { namespace compiler { namespace java { -namespace { -bool EnumHasCustomOptions(const EnumDescriptor* descriptor) { - if (descriptor->options().unknown_fields().field_count() > 0) return true; - for (int i = 0; i < descriptor->value_count(); ++i) { - const EnumValueDescriptor* value = descriptor->value(i); - if (value->options().unknown_fields().field_count() > 0) return true; - } - return false; -} -} // namespace - EnumLiteGenerator::EnumLiteGenerator(const EnumDescriptor* descriptor, bool immutable_api, Context* context) : descriptor_(descriptor), @@ -139,22 +128,30 @@ void EnumLiteGenerator::Generate(io::Printer* printer) { // ----------------------------------------------------------------- printer->Print( - "\n" - "public final int getNumber() {\n" - " return value;\n" - "}\n" - "\n" - "/**\n" - " * @deprecated Use {@link #forNumber(int)} instead.\n" - " */\n" - "@java.lang.Deprecated\n" - "public static $classname$ valueOf(int value) {\n" - " return forNumber(value);\n" - "}\n" - "\n" - "public static $classname$ forNumber(int value) {\n" - " switch (value) {\n", - "classname", descriptor_->name()); + "\n" + "public final int getNumber() {\n"); + if (SupportUnknownEnumValue(descriptor_->file())) { + printer->Print( + " if (this == UNRECOGNIZED) {\n" + " throw new java.lang.IllegalArgumentException(\n" + " \"Can't get the number of an unknown enum value.\");\n" + " }\n"); + } + printer->Print( + " return value;\n" + "}\n" + "\n" + "/**\n" + " * @deprecated Use {@link #forNumber(int)} instead.\n" + " */\n" + "@java.lang.Deprecated\n" + "public static $classname$ valueOf(int value) {\n" + " return forNumber(value);\n" + "}\n" + "\n" + "public static $classname$ forNumber(int value) {\n" + " switch (value) {\n", + "classname", descriptor_->name()); printer->Indent(); printer->Indent(); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_field.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_field.h index 434e610cc1f9b3..cc1d83d9815dbd 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_field.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_field.h @@ -119,6 +119,7 @@ class ImmutableFieldLiteGenerator { virtual void GenerateEqualsCode(io::Printer* printer) const = 0; virtual void GenerateHashCode(io::Printer* printer) const = 0; + virtual string GetBoxedType() const = 0; private: diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_file.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_file.cc index 86719f704c778d..0fda166d120af3 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_file.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_file.cc @@ -154,12 +154,6 @@ void CollectExtensions(const FileDescriptorProto& file_proto, } } -// Compare two field descriptors, returning true if the first should come -// before the second. -bool CompareFieldsByName(const FieldDescriptor *a, const FieldDescriptor *b) { - return a->full_name() < b->full_name(); -} - // Our static initialization methods can become very, very large. // So large that if we aren't careful we end up blowing the JVM's // 64K bytes of bytecode/method. Fortunately, since these static diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_generator.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_generator.cc index 2c02d996fe1f72..02141210985685 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_generator.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_generator.cc @@ -47,6 +47,7 @@ #include #include #include + #include namespace google { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_helpers.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_helpers.cc index efb5fd45655c34..8469740fba2823 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_helpers.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_helpers.cc @@ -43,6 +43,7 @@ #include #include #include +#include // for hash namespace google { namespace protobuf { @@ -245,6 +246,7 @@ string ClassName(const FileDescriptor* descriptor) { return name_resolver.GetClassName(descriptor, true); } + string ExtraMessageInterfaces(const Descriptor* descriptor) { string interfaces = "// @@protoc_insertion_point(message_implements:" + descriptor->full_name() + ")"; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_lazy_message_field_lite.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_lazy_message_field_lite.cc index 49070ba0e1284d..51bb11f1c71821 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_lazy_message_field_lite.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_lazy_message_field_lite.cc @@ -232,6 +232,7 @@ GenerateSerializedSizeCode(io::Printer* printer) const { "}\n"); } + // =================================================================== ImmutableLazyMessageOneofFieldLiteGenerator:: @@ -415,6 +416,7 @@ GenerateSerializedSizeCode(io::Printer* printer) const { "}\n"); } + // =================================================================== RepeatedImmutableLazyMessageFieldLiteGenerator:: @@ -716,6 +718,7 @@ GenerateSerializedSizeCode(io::Printer* printer) const { "}\n"); } + } // namespace java } // namespace compiler } // namespace protobuf diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_lazy_message_field_lite.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_lazy_message_field_lite.h index 47ebeb49a03edb..65b84fbcabb011 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_lazy_message_field_lite.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_lazy_message_field_lite.h @@ -68,6 +68,7 @@ class ImmutableLazyMessageFieldLiteGenerator void GenerateSerializationCode(io::Printer* printer) const; void GenerateSerializedSizeCode(io::Printer* printer) const; + private: GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableLazyMessageFieldLiteGenerator); }; @@ -87,6 +88,7 @@ class ImmutableLazyMessageOneofFieldLiteGenerator void GenerateSerializationCode(io::Printer* printer) const; void GenerateSerializedSizeCode(io::Printer* printer) const; + private: GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableLazyMessageOneofFieldLiteGenerator); }; @@ -106,6 +108,7 @@ class RepeatedImmutableLazyMessageFieldLiteGenerator void GenerateSerializationCode(io::Printer* printer) const; void GenerateSerializedSizeCode(io::Printer* printer) const; + private: GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedImmutableLazyMessageFieldLiteGenerator); }; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_map_field.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_map_field.cc index 3fe68ae3d5e004..608b53786a5960 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_map_field.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_map_field.cc @@ -417,9 +417,6 @@ GenerateBuilderMembers(io::Printer* printer) const { " $key_type$ key,\n" " $value_type$ value) {\n" " $key_null_check$\n" - " if ($value_enum_type$.forNumber(value) == null) {\n" - " throw new java.lang.IllegalArgumentException();\n" - " }\n" " internalGetMutable$capitalized_name$().getMutableMap()\n" " .put(key, value);\n" " return this;\n" diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_map_field_lite.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_map_field_lite.cc index 523052cc9e934c..073d1cfc5945ba 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_map_field_lite.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_map_field_lite.cc @@ -484,6 +484,7 @@ GenerateMembers(io::Printer* printer) const { } } + void ImmutableMapFieldLiteGenerator:: GenerateBuilderMembers(io::Printer* printer) const { printer->Print( @@ -642,9 +643,6 @@ GenerateBuilderMembers(io::Printer* printer) const { " $key_type$ key,\n" " $value_type$ value) {\n" " $key_null_check$\n" - " if ($value_enum_type$.forNumber(value) == null) {\n" - " throw new java.lang.IllegalArgumentException();\n" - " }\n" " copyOnWrite();\n" " instance.getMutable$capitalized_name$ValueMap().put(key, value);\n" " return this;\n" diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_map_field_lite.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_map_field_lite.h index 63dedbc2cf4c41..94aa48136bc5a8 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_map_field_lite.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_map_field_lite.h @@ -62,6 +62,7 @@ class ImmutableMapFieldLiteGenerator : public ImmutableFieldLiteGenerator { void GenerateEqualsCode(io::Printer* printer) const; void GenerateHashCode(io::Printer* printer) const; + string GetBoxedType() const; private: diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message.cc index 3b8d7ab8ec305c..6e3b4a758d29d7 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message.cc @@ -685,6 +685,17 @@ GenerateParseFromMethods(io::Printer* printer) { // because they need to be generated even for messages that are optimized // for code size. printer->Print( + "public static $classname$ parseFrom(\n" + " java.nio.ByteBuffer data)\n" + " throws com.google.protobuf.InvalidProtocolBufferException {\n" + " return PARSER.parseFrom(data);\n" + "}\n" + "public static $classname$ parseFrom(\n" + " java.nio.ByteBuffer data,\n" + " com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n" + " throws com.google.protobuf.InvalidProtocolBufferException {\n" + " return PARSER.parseFrom(data, extensionRegistry);\n" + "}\n" "public static $classname$ parseFrom(\n" " com.google.protobuf.ByteString data)\n" " throws com.google.protobuf.InvalidProtocolBufferException {\n" diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_builder_lite.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_builder_lite.cc index 7e404ba1674fe3..1ad58c09ce3d2e 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_builder_lite.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_builder_lite.cc @@ -67,13 +67,6 @@ bool GenerateHasBits(const Descriptor* descriptor) { return SupportFieldPresence(descriptor->file()) || HasRepeatedFields(descriptor); } - -string MapValueImmutableClassdName(const Descriptor* descriptor, - ClassNameResolver* name_resolver) { - const FieldDescriptor* value_field = descriptor->FindFieldByName("value"); - GOOGLE_CHECK_EQ(FieldDescriptor::TYPE_MESSAGE, value_field->type()); - return name_resolver->GetImmutableClassName(value_field->message_type()); -} } // namespace MessageBuilderLiteGenerator::MessageBuilderLiteGenerator( diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_field_lite.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_field_lite.cc index 0957676cb053ff..c71e910128bc78 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_field_lite.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_field_lite.cc @@ -451,6 +451,7 @@ GenerateMembers(io::Printer* printer) const { "}\n"); } + void ImmutableMessageOneofFieldLiteGenerator:: GenerateBuilderMembers(io::Printer* printer) const { // The comments above the methods below are based on a hypothetical @@ -856,6 +857,7 @@ GenerateFieldBuilderInitializationCode(io::Printer* printer) const { "get$capitalized_name$FieldBuilder();\n"); } + void RepeatedImmutableMessageFieldLiteGenerator:: GenerateInitializationCode(io::Printer* printer) const { printer->Print(variables_, "$name$_ = emptyProtobufList();\n"); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_field_lite.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_field_lite.h index dbb263de18f4c7..7c814c6d7e058f 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_field_lite.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_field_lite.h @@ -106,6 +106,7 @@ class ImmutableMessageOneofFieldLiteGenerator void GenerateSerializationCode(io::Printer* printer) const; void GenerateSerializedSizeCode(io::Printer* printer) const; + private: GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableMessageOneofFieldLiteGenerator); }; @@ -135,6 +136,7 @@ class RepeatedImmutableMessageFieldLiteGenerator void GenerateEqualsCode(io::Printer* printer) const; void GenerateHashCode(io::Printer* printer) const; + string GetBoxedType() const; protected: diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_lite.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_lite.cc index e84321bb634961..5007ecee8f7f92 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_lite.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_message_lite.cc @@ -398,6 +398,7 @@ void ImmutableMessageLiteGenerator::Generate(io::Printer* printer) { printer->Print( "}\n" + "// fall through\n" "case GET_DEFAULT_INSTANCE: {\n" " return DEFAULT_INSTANCE;\n" "}\n" @@ -588,6 +589,19 @@ GenerateParseFromMethods(io::Printer* printer) { // because they need to be generated even for messages that are optimized // for code size. printer->Print( + "public static $classname$ parseFrom(\n" + " java.nio.ByteBuffer data)\n" + " throws com.google.protobuf.InvalidProtocolBufferException {\n" + " return com.google.protobuf.GeneratedMessageLite.parseFrom(\n" + " DEFAULT_INSTANCE, data);\n" + "}\n" + "public static $classname$ parseFrom(\n" + " java.nio.ByteBuffer data,\n" + " com.google.protobuf.ExtensionRegistryLite extensionRegistry)\n" + " throws com.google.protobuf.InvalidProtocolBufferException {\n" + " return com.google.protobuf.GeneratedMessageLite.parseFrom(\n" + " DEFAULT_INSTANCE, data, extensionRegistry);\n" + "}\n" "public static $classname$ parseFrom(\n" " com.google.protobuf.ByteString data)\n" " throws com.google.protobuf.InvalidProtocolBufferException {\n" @@ -1057,21 +1071,6 @@ void ImmutableMessageLiteGenerator::GenerateDynamicMethodMergeFromStream( // =================================================================== -namespace { -bool CheckHasBitsForEqualsAndHashCode(const FieldDescriptor* field) { - if (field->is_repeated()) { - return false; - } - if (SupportFieldPresence(field->file())) { - return true; - } - return GetJavaType(field) == JAVATYPE_MESSAGE && - field->containing_oneof() == NULL; -} -} // namespace - -// =================================================================== - void ImmutableMessageLiteGenerator:: GenerateExtensionRegistrationCode(io::Printer* printer) { for (int i = 0; i < descriptor_->extension_count(); i++) { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_primitive_field_lite.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_primitive_field_lite.cc index b04bf1c22caa86..0e8e492f6293bc 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_primitive_field_lite.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_primitive_field_lite.cc @@ -297,6 +297,7 @@ GenerateFieldBuilderInitializationCode(io::Printer* printer) const { // noop for primitives } + void ImmutablePrimitiveFieldLiteGenerator:: GenerateInitializationCode(io::Printer* printer) const { if (IsByteStringWithCustomDefaultValue(descriptor_)) { @@ -747,6 +748,7 @@ GenerateFieldBuilderInitializationCode(io::Printer* printer) const { // noop for primitives } + void RepeatedImmutablePrimitiveFieldLiteGenerator:: GenerateInitializationCode(io::Printer* printer) const { printer->Print(variables_, "$name$_ = $empty_list$;\n"); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_primitive_field_lite.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_primitive_field_lite.h index dc59f0cf9e0e10..93416f0b6826ff 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_primitive_field_lite.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_primitive_field_lite.h @@ -80,6 +80,7 @@ class ImmutablePrimitiveFieldLiteGenerator void GenerateEqualsCode(io::Printer* printer) const; void GenerateHashCode(io::Printer* printer) const; + string GetBoxedType() const; protected: @@ -110,6 +111,7 @@ class ImmutablePrimitiveOneofFieldLiteGenerator void GenerateSerializationCode(io::Printer* printer) const; void GenerateSerializedSizeCode(io::Printer* printer) const; + private: GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutablePrimitiveOneofFieldLiteGenerator); }; @@ -142,6 +144,7 @@ class RepeatedImmutablePrimitiveFieldLiteGenerator void GenerateEqualsCode(io::Printer* printer) const; void GenerateHashCode(io::Printer* printer) const; + string GetBoxedType() const; private: diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_string_field_lite.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_string_field_lite.cc index 138e59b6938b1d..7e3ad1d007fff7 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_string_field_lite.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_string_field_lite.cc @@ -295,6 +295,7 @@ GenerateFieldBuilderInitializationCode(io::Printer* printer) const { // noop for strings } + void ImmutableStringFieldLiteGenerator:: GenerateInitializationCode(io::Printer* printer) const { printer->Print(variables_, "$name$_ = $default$;\n"); @@ -467,6 +468,7 @@ GenerateMembers(io::Printer* printer) const { "}\n"); } + void ImmutableStringOneofFieldLiteGenerator:: GenerateBuilderMembers(io::Printer* printer) const { if (SupportFieldPresence(descriptor_->file())) { @@ -763,6 +765,7 @@ GenerateFieldBuilderInitializationCode(io::Printer* printer) const { // noop for strings } + void RepeatedImmutableStringFieldLiteGenerator:: GenerateInitializationCode(io::Printer* printer) const { printer->Print(variables_, "$name$_ = $empty_list$;\n"); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_string_field_lite.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_string_field_lite.h index 80496c8744fbcd..b7fb640959e50f 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_string_field_lite.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/java/java_string_field_lite.h @@ -78,6 +78,7 @@ class ImmutableStringFieldLiteGenerator : public ImmutableFieldLiteGenerator { void GenerateEqualsCode(io::Printer* printer) const; void GenerateHashCode(io::Printer* printer) const; + string GetBoxedType() const; protected: @@ -108,6 +109,7 @@ class ImmutableStringOneofFieldLiteGenerator void GenerateSerializationCode(io::Printer* printer) const; void GenerateSerializedSizeCode(io::Printer* printer) const; + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableStringOneofFieldLiteGenerator); }; @@ -136,6 +138,7 @@ class RepeatedImmutableStringFieldLiteGenerator void GenerateEqualsCode(io::Printer* printer) const; void GenerateHashCode(io::Printer* printer) const; + string GetBoxedType() const; private: diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/javanano/javanano_file.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/javanano/javanano_file.cc index 3676ab9d196559..17f7386e77d5de 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/javanano/javanano_file.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/javanano/javanano_file.cc @@ -120,12 +120,12 @@ bool FileGenerator::Validate(string* error) { if (!params_.has_java_outer_classname(file_->name()) && file_->message_type_count() == 1 && file_->enum_type_count() == 0 && file_->extension_count() == 0) { - cout << "INFO: " << file_->name() << ":" << endl; - cout << "Javanano generator has changed to align with java generator. " + std::cout << "INFO: " << file_->name() << ":" << std::endl; + std::cout << "Javanano generator has changed to align with java generator. " "An outer class will be created for this file and the single message " "in the file will become a nested class. Use java_multiple_files to " "skip generating the outer class, or set an explicit " - "java_outer_classname to suppress this message." << endl; + "java_outer_classname to suppress this message." << std::endl; } // Check that no class name matches the file's class name. This is a common diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/javanano/javanano_helpers.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/javanano/javanano_helpers.cc index 02811a24dcbb92..5018250cfce9f9 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/javanano/javanano_helpers.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/javanano/javanano_helpers.cc @@ -428,9 +428,9 @@ string DefaultValue(const Params& params, const FieldDescriptor* field) { "L"; case FieldDescriptor::CPPTYPE_DOUBLE: { double value = field->default_value_double(); - if (value == numeric_limits::infinity()) { + if (value == std::numeric_limits::infinity()) { return "Double.POSITIVE_INFINITY"; - } else if (value == -numeric_limits::infinity()) { + } else if (value == -std::numeric_limits::infinity()) { return "Double.NEGATIVE_INFINITY"; } else if (value != value) { return "Double.NaN"; @@ -440,9 +440,9 @@ string DefaultValue(const Params& params, const FieldDescriptor* field) { } case FieldDescriptor::CPPTYPE_FLOAT: { float value = field->default_value_float(); - if (value == numeric_limits::infinity()) { + if (value == std::numeric_limits::infinity()) { return "Float.POSITIVE_INFINITY"; - } else if (value == -numeric_limits::infinity()) { + } else if (value == -std::numeric_limits::infinity()) { return "Float.NEGATIVE_INFINITY"; } else if (value != value) { return "Float.NaN"; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/javanano/javanano_message.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/javanano/javanano_message.cc index a41da5ae3301e1..f81f7f9aa0a6e0 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/javanano/javanano_message.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/javanano/javanano_message.cc @@ -69,7 +69,7 @@ const FieldDescriptor** SortFieldsByNumber(const Descriptor* descriptor) { for (int i = 0; i < descriptor->field_count(); i++) { fields[i] = descriptor->field(i); } - sort(fields, fields + descriptor->field_count(), + std::sort(fields, fields + descriptor->field_count(), FieldOrderingByNumber()); return fields; } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/js/embed.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/js/embed.cc index 57d38237b3a9e3..a725b62eb8c689 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/js/embed.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/js/embed.cc @@ -98,7 +98,7 @@ static void AddFile(const char* name, std::basic_ostream* out) { int main(int argc, char *argv[]) { std::cout << "#include " - "\n"; + "\"google/protobuf/compiler/js/well_known_types_embed.h\"\n"; std::cout << "struct FileToc well_known_types_js[] = {\n"; for (int i = 1; i < argc; i++) { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/js/js_generator.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/js/js_generator.cc index 727ed09025ad9e..7c63e58f650c21 100755 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/js/js_generator.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/js/js_generator.cc @@ -198,8 +198,8 @@ string ModuleAlias(const string& filename) { // Returns the fully normalized JavaScript path for the given // file descriptor's package. -string GetPath(const GeneratorOptions& options, - const FileDescriptor* file) { +string GetFilePath(const GeneratorOptions& options, + const FileDescriptor* file) { if (!options.namespace_prefix.empty()) { return options.namespace_prefix; } else if (!file->package().empty()) { @@ -231,51 +231,32 @@ string GetNestedMessageName(const Descriptor* descriptor) { string GetPrefix(const GeneratorOptions& options, const FileDescriptor* file_descriptor, const Descriptor* containing_type) { - string prefix = - GetPath(options, file_descriptor) + GetNestedMessageName(containing_type); + string prefix = GetFilePath(options, file_descriptor) + + GetNestedMessageName(containing_type); if (!prefix.empty()) { prefix += "."; } return prefix; } - // Returns the fully normalized JavaScript path for the given // message descriptor. -string GetPath(const GeneratorOptions& options, - const Descriptor* descriptor) { +string GetMessagePath(const GeneratorOptions& options, + const Descriptor* descriptor) { return GetPrefix( options, descriptor->file(), descriptor->containing_type()) + descriptor->name(); } - -// Returns the fully normalized JavaScript path for the given -// field's containing message descriptor. -string GetPath(const GeneratorOptions& options, - const FieldDescriptor* descriptor) { - return GetPath(options, descriptor->containing_type()); -} - // Returns the fully normalized JavaScript path for the given // enumeration descriptor. -string GetPath(const GeneratorOptions& options, - const EnumDescriptor* enum_descriptor) { +string GetEnumPath(const GeneratorOptions& options, + const EnumDescriptor* enum_descriptor) { return GetPrefix( options, enum_descriptor->file(), enum_descriptor->containing_type()) + enum_descriptor->name(); } - -// Returns the fully normalized JavaScript path for the given -// enumeration value descriptor. -string GetPath(const GeneratorOptions& options, - const EnumValueDescriptor* value_descriptor) { - return GetPath( - options, - value_descriptor->type()) + "." + value_descriptor->name(); -} - string MaybeCrossFileRef(const GeneratorOptions& options, const FileDescriptor* from_file, const Descriptor* to_message) { @@ -288,7 +269,7 @@ string MaybeCrossFileRef(const GeneratorOptions& options, to_message->name(); } else { // Within a single file we use a full name. - return GetPath(options, to_message); + return GetMessagePath(options, to_message); } } @@ -413,7 +394,7 @@ string ToFileName(const string& input) { // that top-level extensions should go in. string GetExtensionFileName(const GeneratorOptions& options, const FileDescriptor* file) { - return options.output_dir + "/" + ToFileName(GetPath(options, file)) + + return options.output_dir + "/" + ToFileName(GetFilePath(options, file)) + options.GetFileNameExtension(); } @@ -550,14 +531,6 @@ string JSGetterName(const GeneratorOptions& options, return name; } -string JSMapGetterName(const GeneratorOptions& options, - const FieldDescriptor* field) { - return JSIdent(options, field, - /* is_upper_camel = */ true, - /* is_map = */ true, - /* drop_list = */ false); -} - string JSOneofName(const OneofDescriptor* oneof) { @@ -872,11 +845,11 @@ string ProtoTypeName(const GeneratorOptions& options, case FieldDescriptor::TYPE_BYTES: return "bytes"; case FieldDescriptor::TYPE_GROUP: - return GetPath(options, field->message_type()); + return GetMessagePath(options, field->message_type()); case FieldDescriptor::TYPE_ENUM: - return GetPath(options, field->enum_type()); + return GetEnumPath(options, field->enum_type()); case FieldDescriptor::TYPE_MESSAGE: - return GetPath(options, field->message_type()); + return GetMessagePath(options, field->message_type()); default: return ""; } @@ -925,9 +898,9 @@ string JSTypeName(const GeneratorOptions& options, case FieldDescriptor::CPPTYPE_STRING: return JSStringTypeName(options, field, bytes_mode); case FieldDescriptor::CPPTYPE_ENUM: - return GetPath(options, field->enum_type()); + return GetEnumPath(options, field->enum_type()); case FieldDescriptor::CPPTYPE_MESSAGE: - return GetPath(options, field->message_type()); + return GetMessagePath(options, field->message_type()); default: return ""; } @@ -1111,7 +1084,7 @@ static const char* kRepeatedFieldArrayName = ".repeatedFields_"; string RepeatedFieldsArrayName(const GeneratorOptions& options, const Descriptor* desc) { return HasRepeatedFields(options, desc) - ? (GetPath(options, desc) + kRepeatedFieldArrayName) + ? (GetMessagePath(options, desc) + kRepeatedFieldArrayName) : "null"; } @@ -1128,8 +1101,9 @@ static const char* kOneofGroupArrayName = ".oneofGroups_"; string OneofFieldsArrayName(const GeneratorOptions& options, const Descriptor* desc) { - return HasOneofFields(desc) ? - (GetPath(options, desc) + kOneofGroupArrayName) : "null"; + return HasOneofFields(desc) + ? (GetMessagePath(options, desc) + kOneofGroupArrayName) + : "null"; } string RepeatedFieldNumberList(const GeneratorOptions& options, @@ -1571,7 +1545,7 @@ void Generator::FindProvidesForMessage( return; } - string name = GetPath(options, desc); + string name = GetMessagePath(options, desc); provided->insert(name); for (int i = 0; i < desc->enum_type_count(); i++) { @@ -1588,7 +1562,7 @@ void Generator::FindProvidesForEnum(const GeneratorOptions& options, io::Printer* printer, const EnumDescriptor* enumdesc, std::set* provided) const { - string name = GetPath(options, enumdesc); + string name = GetEnumPath(options, enumdesc); provided->insert(name); } @@ -1604,9 +1578,8 @@ void Generator::FindProvidesForFields( continue; } - string name = - GetPath(options, field->file()) + "." + - JSObjectFieldName(options, field); + string name = GetFilePath(options, field->file()) + "." + + JSObjectFieldName(options, field); provided->insert(name); } } @@ -1684,7 +1657,7 @@ void Generator::GenerateRequiresForLibrary( } if (extension->containing_type()->full_name() != "google.protobuf.bridge.MessageSet") { - required.insert(GetPath(options, extension->containing_type())); + required.insert(GetMessagePath(options, extension->containing_type())); } FindRequiresForField(options, extension, &required, &forwards); have_extensions = true; @@ -1805,13 +1778,13 @@ void Generator::FindRequiresForField(const GeneratorOptions& options, // dependencies, as per original codegen. !(field->is_extension() && field->extension_scope() == NULL)) { if (options.add_require_for_enums) { - required->insert(GetPath(options, field->enum_type())); + required->insert(GetEnumPath(options, field->enum_type())); } else { - forwards->insert(GetPath(options, field->enum_type())); + forwards->insert(GetEnumPath(options, field->enum_type())); } } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) { if (!IgnoreMessage(options, field->message_type())) { - required->insert(GetPath(options, field->message_type())); + required->insert(GetMessagePath(options, field->message_type())); } } } @@ -1821,7 +1794,7 @@ void Generator::FindRequiresForExtension(const GeneratorOptions& options, std::set* required, std::set* forwards) const { if (field->containing_type()->full_name() != "google.protobuf.bridge.MessageSet") { - required->insert(GetPath(options, field->containing_type())); + required->insert(GetMessagePath(options, field->containing_type())); } FindRequiresForField(options, field, required, forwards); } @@ -1868,7 +1841,7 @@ void Generator::GenerateClass(const GeneratorOptions& options, } // Recurse on nested types. These must come *before* the extension-field - // info generation in GenerateClassRegistration so that extensions that + // info generation in GenerateClassRegistration so that extensions that // reference nested types proceed the definitions of the nested types. for (int i = 0; i < desc->enum_type_count(); i++) { GenerateEnum(options, printer, desc->enum_type(i)); @@ -1890,7 +1863,6 @@ void Generator::GenerateClass(const GeneratorOptions& options, } } } - } void Generator::GenerateClassConstructor(const GeneratorOptions& options, @@ -1912,7 +1884,7 @@ void Generator::GenerateClassConstructor(const GeneratorOptions& options, " * @constructor\n" " */\n" "$classname$ = function(opt_data) {\n", - "classname", GetPath(options, desc)); + "classname", GetMessagePath(options, desc)); string message_id = GetMessageId(desc); printer->Print( " jspb.Message.initialize(this, opt_data, $messageId$, $pivot$, " @@ -1929,7 +1901,7 @@ void Generator::GenerateClassConstructor(const GeneratorOptions& options, "if (goog.DEBUG && !COMPILED) {\n" " $classname$.displayName = '$classname$';\n" "}\n", - "classname", GetPath(options, desc)); + "classname", GetMessagePath(options, desc)); } void Generator::GenerateClassFieldInfo(const GeneratorOptions& options, @@ -1944,7 +1916,7 @@ void Generator::GenerateClassFieldInfo(const GeneratorOptions& options, " */\n" "$classname$$rptfieldarray$ = $rptfields$;\n" "\n", - "classname", GetPath(options, desc), + "classname", GetMessagePath(options, desc), "rptfieldarray", kRepeatedFieldArrayName, "rptfields", RepeatedFieldNumberList(options, desc)); } @@ -1965,7 +1937,7 @@ void Generator::GenerateClassFieldInfo(const GeneratorOptions& options, " */\n" "$classname$$oneofgrouparray$ = $oneofgroups$;\n" "\n", - "classname", GetPath(options, desc), + "classname", GetMessagePath(options, desc), "oneofgrouparray", kOneofGroupArrayName, "oneofgroups", OneofGroupList(desc)); @@ -1985,7 +1957,7 @@ void Generator::GenerateClassXid(const GeneratorOptions& options, "\n" "\n" "$class$.prototype.messageXid = xid('$class$');\n", - "class", GetPath(options, desc)); + "class", GetMessagePath(options, desc)); } void Generator::GenerateOneofCaseDefinition( @@ -1998,7 +1970,7 @@ void Generator::GenerateOneofCaseDefinition( " */\n" "$classname$.$oneof$Case = {\n" " $upcase$_NOT_SET: 0", - "classname", GetPath(options, oneof->containing_type()), + "classname", GetMessagePath(options, oneof->containing_type()), "oneof", JSOneofName(oneof), "upcase", ToEnumCase(oneof->name())); @@ -2026,7 +1998,7 @@ void Generator::GenerateOneofCaseDefinition( "computeOneofCase(this, $class$.oneofGroups_[$oneofindex$]));\n" "};\n" "\n", - "class", GetPath(options, oneof->containing_type()), + "class", GetMessagePath(options, oneof->containing_type()), "oneof", JSOneofName(oneof), "oneofindex", JSOneofIndex(oneof)); } @@ -2068,7 +2040,7 @@ void Generator::GenerateClassToObject(const GeneratorOptions& options, " */\n" "$classname$.toObject = function(includeInstance, msg) {\n" " var f, obj = {", - "classname", GetPath(options, desc)); + "classname", GetMessagePath(options, desc)); bool first = true; for (int i = 0; i < desc->field_count(); i++) { @@ -2100,7 +2072,7 @@ void Generator::GenerateClassToObject(const GeneratorOptions& options, " $extObject$, $class$.prototype.getExtension,\n" " includeInstance);\n", "extObject", JSExtensionsObjectName(options, desc->file(), desc), - "class", GetPath(options, desc)); + "class", GetMessagePath(options, desc)); } printer->Print( @@ -2112,7 +2084,7 @@ void Generator::GenerateClassToObject(const GeneratorOptions& options, "}\n" "\n" "\n", - "classname", GetPath(options, desc)); + "classname", GetMessagePath(options, desc)); } void Generator::GenerateFieldValueExpression(io::Printer* printer, @@ -2173,7 +2145,7 @@ void Generator::GenerateClassFieldToObject(const GeneratorOptions& options, string value_to_object; if (value_field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) { value_to_object = - GetPath(options, value_field->message_type()) + ".toObject"; + GetMessagePath(options, value_field->message_type()) + ".toObject"; } else { value_to_object = "undefined"; } @@ -2235,7 +2207,7 @@ void Generator::GenerateClassFromObject(const GeneratorOptions& options, " */\n" "$classname$.fromObject = function(obj) {\n" " var f, msg = new $classname$();\n", - "classname", GetPath(options, desc)); + "classname", GetMessagePath(options, desc)); for (int i = 0; i < desc->field_count(); i++) { const FieldDescriptor* field = desc->field(i); @@ -2263,7 +2235,7 @@ void Generator::GenerateClassFieldFromObject( "$fieldclass$.fromObject));\n", "name", JSObjectFieldName(options, field), "index", JSFieldIndex(field), - "fieldclass", GetPath(options, value_field->message_type())); + "fieldclass", GetMessagePath(options, value_field->message_type())); } else { // `msg` is a newly-constructed message object that has not yet built any // map containers wrapping underlying arrays, so we can simply directly @@ -2354,7 +2326,7 @@ void GenerateBytesWrapper(const GeneratorOptions& options, "fielddef", FieldDefinition(options, field), "comment", FieldComments(field, bytes_mode), "type", type, - "class", GetPath(options, field->containing_type()), + "class", GetMessagePath(options, field->containing_type()), "name", JSGetterName(options, field, bytes_mode), "list", field->is_repeated() ? "List" : "", "suffix", JSByteGetterSuffix(bytes_mode), @@ -2395,7 +2367,7 @@ void Generator::GenerateClassField(const GeneratorOptions& options, printer->Print( "$class$.prototype.get$name$ = function(opt_noLazyCreate) {\n" " return /** @type {!jspb.Map<$keytype$,$valuetype$>} */ (\n", - "class", GetPath(options, field->containing_type()), + "class", GetMessagePath(options, field->containing_type()), "name", JSGetterName(options, field), "keytype", key_type, "valuetype", value_type); @@ -2404,9 +2376,10 @@ void Generator::GenerateClassField(const GeneratorOptions& options, "index", JSFieldIndex(field)); if (value_field->type() == FieldDescriptor::TYPE_MESSAGE) { - printer->Print(",\n" + printer->Print( + ",\n" " $messageType$", - "messageType", GetPath(options, value_field->message_type())); + "messageType", GetMessagePath(options, value_field->message_type())); } else { printer->Print(",\n" " null"); @@ -2443,7 +2416,7 @@ void Generator::GenerateClassField(const GeneratorOptions& options, "};\n" "\n" "\n", - "class", GetPath(options, field->containing_type()), + "class", GetMessagePath(options, field->containing_type()), "name", JSGetterName(options, field), "type", JSFieldTypeAnnotation(options, field, /* is_setter_argument = */ false, @@ -2464,7 +2437,7 @@ void Generator::GenerateClassField(const GeneratorOptions& options, /* force_present = */ false, /* singular_if_not_packed = */ false), "returndoc", JSReturnDoc(options, field), - "class", GetPath(options, field->containing_type()), + "class", GetMessagePath(options, field->containing_type()), "name", JSGetterName(options, field), "oneoftag", (field->containing_oneof() ? "Oneof" : ""), "repeatedtag", (field->is_repeated() ? "Repeated" : "")); @@ -2520,7 +2493,7 @@ void Generator::GenerateClassField(const GeneratorOptions& options, printer->Print( "$class$.prototype.get$name$ = function() {\n", - "class", GetPath(options, field->containing_type()), + "class", GetMessagePath(options, field->containing_type()), "name", JSGetterName(options, field)); if (untyped) { @@ -2585,7 +2558,7 @@ void Generator::GenerateClassField(const GeneratorOptions& options, printer->Print( "$class$.prototype.set$name$ = function(value) {\n" " jspb.Message.set$oneoftag$Field(this, $index$", - "class", GetPath(options, field->containing_type()), + "class", GetMessagePath(options, field->containing_type()), "name", JSGetterName(options, field), "oneoftag", (field->containing_oneof() ? "Oneof" : ""), "index", JSFieldIndex(field)); @@ -2626,7 +2599,7 @@ void Generator::GenerateClassField(const GeneratorOptions& options, "};\n" "\n" "\n", - "class", GetPath(options, field->containing_type()), + "class", GetMessagePath(options, field->containing_type()), "name", JSGetterName(options, field), "returnvalue", JSReturnClause(field)); } else if (field->is_repeated() || @@ -2639,7 +2612,7 @@ void Generator::GenerateClassField(const GeneratorOptions& options, "};\n" "\n" "\n", - "class", GetPath(options, field->containing_type()), + "class", GetMessagePath(options, field->containing_type()), "name", JSGetterName(options, field), "clearedvalue", (field->is_repeated() ? "[]" : "undefined"), "returnvalue", JSReturnClause(field)); @@ -2650,7 +2623,7 @@ void Generator::GenerateClassField(const GeneratorOptions& options, "$class$.prototype.clear$name$ = function() {\n" " jspb.Message.set$maybeoneof$Field(this, " "$index$$maybeoneofgroup$, ", - "class", GetPath(options, field->containing_type()), + "class", GetMessagePath(options, field->containing_type()), "name", JSGetterName(options, field), "maybeoneof", (field->containing_oneof() ? "Oneof" : ""), "maybeoneofgroup", (field->containing_oneof() ? @@ -2676,7 +2649,7 @@ void Generator::GenerateClassField(const GeneratorOptions& options, "};\n" "\n" "\n", - "class", GetPath(options, field->containing_type()), + "class", GetMessagePath(options, field->containing_type()), "name", JSGetterName(options, field), "index", JSFieldIndex(field)); } @@ -2692,8 +2665,8 @@ void Generator::GenerateRepeatedPrimitiveHelperMethods( " */\n" "$class$.prototype.add$name$ = function(value, opt_index) {\n" " jspb.Message.addToRepeatedField(this, $index$", - "class", GetPath(options, field->containing_type()), "name", - JSGetterName(options, field, BYTES_DEFAULT, + "class", GetMessagePath(options, field->containing_type()), + "name", JSGetterName(options, field, BYTES_DEFAULT, /* drop_list = */ true), "optionaltype", JSTypeName(options, field, BYTES_DEFAULT), "index", JSFieldIndex(field)); @@ -2719,9 +2692,9 @@ void Generator::GenerateRepeatedMessageHelperMethods( " */\n" "$class$.prototype.add$name$ = function(opt_value, opt_index) {\n" " return jspb.Message.addTo$repeatedtag$WrapperField(", - "optionaltype", JSTypeName(options, field, BYTES_DEFAULT), "class", - GetPath(options, field->containing_type()), "name", - JSGetterName(options, field, BYTES_DEFAULT, + "optionaltype", JSTypeName(options, field, BYTES_DEFAULT), + "class", GetMessagePath(options, field->containing_type()), + "name", JSGetterName(options, field, BYTES_DEFAULT, /* drop_list = */ true), "repeatedtag", (field->is_repeated() ? "Repeated" : "")); @@ -2732,7 +2705,7 @@ void Generator::GenerateRepeatedMessageHelperMethods( "\n", "index", JSFieldIndex(field), "oneofgroup", (field->containing_oneof() ? (", " + JSOneofArray(options, field)) : ""), - "ctor", GetPath(options, field->message_type())); + "ctor", GetMessagePath(options, field->message_type())); } void Generator::GenerateClassExtensionFieldInfo(const GeneratorOptions& options, @@ -2758,7 +2731,7 @@ void Generator::GenerateClassExtensionFieldInfo(const GeneratorOptions& options, " */\n" "$class$.extensions = {};\n" "\n", - "class", GetPath(options, desc)); + "class", GetMessagePath(options, desc)); printer->Print( "\n" @@ -2779,7 +2752,7 @@ void Generator::GenerateClassExtensionFieldInfo(const GeneratorOptions& options, " */\n" "$class$.extensionsBinary = {};\n" "\n", - "class", GetPath(options, desc)); + "class", GetMessagePath(options, desc)); } } @@ -2817,7 +2790,7 @@ void Generator::GenerateClassDeserializeBinary(const GeneratorOptions& options, " }\n" " var field = reader.getFieldNumber();\n" " switch (field) {\n", - "class", GetPath(options, desc)); + "class", GetMessagePath(options, desc)); for (int i = 0; i < desc->field_count(); i++) { if (!IgnoreField(desc->field(i))) { @@ -2834,7 +2807,7 @@ void Generator::GenerateClassDeserializeBinary(const GeneratorOptions& options, " $class$.prototype.setExtension);\n" " break;\n", "extobj", JSExtensionsObjectName(options, desc->file(), desc), - "class", GetPath(options, desc)); + "class", GetMessagePath(options, desc)); } else { printer->Print( " reader.skipField();\n" @@ -2873,7 +2846,7 @@ void Generator::GenerateClassDeserializeBinaryField( if (value_field->type() == FieldDescriptor::TYPE_MESSAGE) { printer->Print(", $messageType$.deserializeBinaryFromReader", - "messageType", GetPath(options, value_field->message_type())); + "messageType", GetMessagePath(options, value_field->message_type())); } printer->Print(");\n"); @@ -2941,7 +2914,7 @@ void Generator::GenerateClassSerializeBinary(const GeneratorOptions& options, "$class$.serializeBinaryToWriter = function(message, " "writer) {\n" " var f = undefined;\n", - "class", GetPath(options, desc)); + "class", GetMessagePath(options, desc)); for (int i = 0; i < desc->field_count(); i++) { if (!IgnoreField(desc->field(i))) { @@ -2954,7 +2927,7 @@ void Generator::GenerateClassSerializeBinary(const GeneratorOptions& options, " jspb.Message.serializeBinaryExtensions(message, writer,\n" " $extobj$Binary, $class$.prototype.getExtension);\n", "extobj", JSExtensionsObjectName(options, desc->file(), desc), - "class", GetPath(options, desc)); + "class", GetMessagePath(options, desc)); } printer->Print( @@ -3049,7 +3022,7 @@ void Generator::GenerateClassSerializeBinaryField( if (value_field->type() == FieldDescriptor::TYPE_MESSAGE) { printer->Print(", $messageType$.serializeBinaryToWriter", - "messageType", GetPath(options, value_field->message_type())); + "messageType", GetMessagePath(options, value_field->message_type())); } printer->Print(");\n"); @@ -3088,7 +3061,7 @@ void Generator::GenerateEnum(const GeneratorOptions& options, " * @enum {number}\n" " */\n" "$name$ = {\n", - "name", GetPath(options, enumdesc)); + "name", GetEnumPath(options, enumdesc)); for (int i = 0; i < enumdesc->value_count(); i++) { const EnumValueDescriptor* value = enumdesc->value(i); @@ -3108,9 +3081,9 @@ void Generator::GenerateExtension(const GeneratorOptions& options, io::Printer* printer, const FieldDescriptor* field) const { string extension_scope = - (field->extension_scope() ? - GetPath(options, field->extension_scope()) : - GetPath(options, field->file())); + (field->extension_scope() + ? GetMessagePath(options, field->extension_scope()) + : GetFilePath(options, field->file())); printer->Print( "\n" @@ -3347,7 +3320,7 @@ void Generator::GenerateFile(const GeneratorOptions& options, IgnoreField(file->extension(i))) { continue; } - provided.insert(GetPath(options, file) + "." + + provided.insert(GetFilePath(options, file) + "." + JSObjectFieldName(options, file->extension(i))); extensions.insert(file->extension(i)); } @@ -3371,7 +3344,7 @@ void Generator::GenerateFile(const GeneratorOptions& options, if (options.import_style == GeneratorOptions::kImportCommonJs) { printer->Print("goog.object.extend(exports, $package$);\n", - "package", GetPath(options, file)); + "package", GetFilePath(options, file)); } // Emit well-known type methods. diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/js/well_known_types/timestamp.js b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/js/well_known_types/timestamp.js index 77c07bb4e1a1e1..b7e43f1967529e 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/js/well_known_types/timestamp.js +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/js/well_known_types/timestamp.js @@ -48,7 +48,6 @@ proto.google.protobuf.Timestamp.prototype.toDate = function() { * @param {!Date} value The value to set. */ proto.google.protobuf.Timestamp.prototype.fromDate = function(value) { - var millis = value.getTime(); this.setSeconds(Math.floor(value.getTime() / 1000)); this.setNanos(value.getMilliseconds() * 1000000); }; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/mock_code_generator.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/mock_code_generator.cc index a4b522cec36e70..0ddb99e56e2d4c 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/mock_code_generator.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/mock_code_generator.cc @@ -40,27 +40,21 @@ #endif #include +#include + #include #include #include #include #include +#include #include #include #include #include -#include #include #include -#ifdef major -#undef major -#endif -#ifdef minor -#undef minor -#endif -#include - namespace google { namespace protobuf { namespace compiler { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_extension.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_extension.cc index 7073173c8809df..73e4b86e210da3 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_extension.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_extension.cc @@ -49,9 +49,9 @@ ExtensionGenerator::ExtensionGenerator(const string& root_class_name, if (descriptor->is_map()) { // NOTE: src/google/protobuf/compiler/plugin.cc makes use of cerr for some // error cases, so it seems to be ok to use as a back door for errors. - cerr << "error: Extension is a map<>!" - << " That used to be blocked by the compiler." << endl; - cerr.flush(); + std::cerr << "error: Extension is a map<>!" + << " That used to be blocked by the compiler." << std::endl; + std::cerr.flush(); abort(); } } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_field.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_field.cc index 527b7c0c7057ff..9f7e84f2885be9 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_field.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_field.cc @@ -228,8 +228,8 @@ int FieldGenerator::ExtraRuntimeHasBitsNeeded(void) const { void FieldGenerator::SetExtraRuntimeHasBitsBase(int index_base) { // NOTE: src/google/protobuf/compiler/plugin.cc makes use of cerr for some // error cases, so it seems to be ok to use as a back door for errors. - cerr << "Error: should have overridden SetExtraRuntimeHasBitsBase()." << endl; - cerr.flush(); + std::cerr << "Error: should have overridden SetExtraRuntimeHasBitsBase()." << std::endl; + std::cerr.flush(); abort(); } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc index 4bf17d7b6e311e..bd8fd7226e3115 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc @@ -50,6 +50,12 @@ #include #include +#if defined(_WIN32) +// DO NOT include , instead create functions in io_win32.{h,cc} and import +// them like we do below. +using google::protobuf::stubs::open; +#endif + // NOTE: src/google/protobuf/compiler/plugin.cc makes use of cerr for some // error cases, so it seems to be ok to use as a back door for errors. @@ -1062,21 +1068,21 @@ bool ValidateObjCClassPrefix( // to Apple's rules (the checks above implicitly whitelist anything that // doesn't meet these rules). if (!ascii_isupper(prefix[0])) { - cerr << endl + std::cerr << std::endl << "protoc:0: warning: Invalid 'option objc_class_prefix = \"" << prefix << "\";' in '" << file->name() << "';" - << " it should start with a capital letter." << endl; - cerr.flush(); + << " it should start with a capital letter." << std::endl; + std::cerr.flush(); } if (prefix.length() < 3) { // Apple reserves 2 character prefixes for themselves. They do use some // 3 character prefixes, but they haven't updated the rules/docs. - cerr << endl + std::cerr << std::endl << "protoc:0: warning: Invalid 'option objc_class_prefix = \"" << prefix << "\";' in '" << file->name() << "';" << " Apple recommends they should be at least 3 characters long." - << endl; - cerr.flush(); + << std::endl; + std::cerr.flush(); } // Look for any other package that uses the same prefix. @@ -1095,22 +1101,22 @@ bool ValidateObjCClassPrefix( // The file does not have a package and ... if (other_package_for_prefix.empty()) { // ... no other package has declared that prefix. - cerr << endl + std::cerr << std::endl << "protoc:0: warning: File '" << file->name() << "' has no " << "package. Consider adding a new package to the proto and adding '" << "new.package = " << prefix << "' to the expected prefixes file (" - << expected_prefixes_path << ")." << endl; - cerr.flush(); + << expected_prefixes_path << ")." << std::endl; + std::cerr.flush(); } else { // ... another package has declared the same prefix. - cerr << endl + std::cerr << std::endl << "protoc:0: warning: File '" << file->name() << "' has no package " << "and package '" << other_package_for_prefix << "' already uses '" << prefix << "' as its prefix. Consider either adding a new package " << "to the proto, or reusing one of the packages already using this " << "prefix in the expected prefixes file (" - << expected_prefixes_path << ")." << endl; - cerr.flush(); + << expected_prefixes_path << ")." << std::endl; + std::cerr.flush(); } return true; } @@ -1132,12 +1138,12 @@ bool ValidateObjCClassPrefix( // Check: Warning - If the given package/prefix pair wasn't expected, issue a // warning issue a warning suggesting it gets added to the file. if (!expected_package_prefixes.empty()) { - cerr << endl + std::cerr << std::endl << "protoc:0: warning: Found unexpected 'option objc_class_prefix = \"" << prefix << "\";' in '" << file->name() << "';" << " consider adding it to the expected prefixes file (" - << expected_prefixes_path << ")." << endl; - cerr.flush(); + << expected_prefixes_path << ")." << std::endl; + std::cerr.flush(); } return true; @@ -1179,10 +1185,10 @@ void TextFormatDecodeData::AddString(int32 key, for (vector::const_iterator i = entries_.begin(); i != entries_.end(); ++i) { if (i->first == key) { - cerr << "error: duplicate key (" << key + std::cerr << "error: duplicate key (" << key << ") making TextFormat data, input: \"" << input_for_decode - << "\", desired: \"" << desired_output << "\"." << endl; - cerr.flush(); + << "\", desired: \"" << desired_output << "\"." << std::endl; + std::cerr.flush(); abort(); } } @@ -1193,7 +1199,7 @@ void TextFormatDecodeData::AddString(int32 key, } string TextFormatDecodeData::Data() const { - ostringstream data_stringstream; + std::ostringstream data_stringstream; if (num_entries() > 0) { io::OstreamOutputStream data_outputstream(&data_stringstream); @@ -1334,18 +1340,18 @@ string DirectDecodeString(const string& str) { string TextFormatDecodeData::DecodeDataForString(const string& input_for_decode, const string& desired_output) { if ((input_for_decode.size() == 0) || (desired_output.size() == 0)) { - cerr << "error: got empty string for making TextFormat data, input: \"" + std::cerr << "error: got empty string for making TextFormat data, input: \"" << input_for_decode << "\", desired: \"" << desired_output << "\"." - << endl; - cerr.flush(); + << std::endl; + std::cerr.flush(); abort(); } if ((input_for_decode.find('\0') != string::npos) || (desired_output.find('\0') != string::npos)) { - cerr << "error: got a null char in a string for making TextFormat data," + std::cerr << "error: got a null char in a string for making TextFormat data," << " input: \"" << CEscape(input_for_decode) << "\", desired: \"" - << CEscape(desired_output) << "\"." << endl; - cerr.flush(); + << CEscape(desired_output) << "\"." << std::endl; + std::cerr.flush(); abort(); } @@ -1610,9 +1616,9 @@ void ImportWriter::ParseFrameworkMappings() { string parse_error; if (!ParseSimpleFile(named_framework_to_proto_path_mappings_path_, &collector, &parse_error)) { - cerr << "error parsing " << named_framework_to_proto_path_mappings_path_ - << " : " << parse_error << endl; - cerr.flush(); + std::cerr << "error parsing " << named_framework_to_proto_path_mappings_path_ + << " : " << parse_error << std::endl; + std::cerr.flush(); } } @@ -1642,16 +1648,16 @@ bool ImportWriter::ProtoFrameworkCollector::ConsumeLine( map::iterator existing_entry = map_->find(proto_file.ToString()); if (existing_entry != map_->end()) { - cerr << "warning: duplicate proto file reference, replacing framework entry for '" + std::cerr << "warning: duplicate proto file reference, replacing framework entry for '" << proto_file.ToString() << "' with '" << framework_name.ToString() - << "' (was '" << existing_entry->second << "')." << endl; - cerr.flush(); + << "' (was '" << existing_entry->second << "')." << std::endl; + std::cerr.flush(); } if (proto_file.find(' ') != StringPiece::npos) { - cerr << "note: framework mapping file had a proto file with a space in, hopefully that isn't a missing comma: '" - << proto_file.ToString() << "'" << endl; - cerr.flush(); + std::cerr << "note: framework mapping file had a proto file with a space in, hopefully that isn't a missing comma: '" + << proto_file.ToString() << "'" << std::endl; + std::cerr.flush(); } (*map_)[proto_file.ToString()] = framework_name.ToString(); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_message.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_message.cc index e0bd3dac043aea..0a554a83932af1 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_message.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/objectivec/objectivec_message.cc @@ -156,7 +156,7 @@ const FieldDescriptor** SortFieldsByNumber(const Descriptor* descriptor) { for (int i = 0; i < descriptor->field_count(); i++) { fields[i] = descriptor->field(i); } - sort(fields, fields + descriptor->field_count(), FieldOrderingByNumber()); + std::sort(fields, fields + descriptor->field_count(), FieldOrderingByNumber()); return fields; } @@ -168,7 +168,7 @@ const FieldDescriptor** SortFieldsByStorageSize(const Descriptor* descriptor) { for (int i = 0; i < descriptor->field_count(); i++) { fields[i] = descriptor->field(i); } - sort(fields, fields + descriptor->field_count(), + std::sort(fields, fields + descriptor->field_count(), FieldOrderingByStorageSize()); return fields; } @@ -430,7 +430,7 @@ void MessageGenerator::GenerateSource(io::Printer* printer) { sorted_extensions.push_back(descriptor_->extension_range(i)); } - sort(sorted_extensions.begin(), sorted_extensions.end(), + std::sort(sorted_extensions.begin(), sorted_extensions.end(), ExtensionRangeOrdering()); // Assign has bits: diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/parser_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/parser_unittest.cc index 20140f8e7b6a80..d5e31325c9ed9a 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/parser_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/parser_unittest.cc @@ -42,14 +42,13 @@ #include +#include +#include #include #include #include -#include #include -#include -#include -#include +#include #include #include diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/php/php_generator.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/php/php_generator.cc index db72ea1ad81ffe..ea850c0f45ea56 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/php/php_generator.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/php/php_generator.cc @@ -49,6 +49,8 @@ const std::string kDescriptorMetadataFile = "GPBMetadata/Google/Protobuf/Internal/Descriptor.php"; const std::string kDescriptorDirName = "Google/Protobuf/Internal"; const std::string kDescriptorPackageName = "Google\\Protobuf\\Internal"; +const char* const kReservedNames[] = {"Empty", "ECHO"}; +const int kReservedNamesSize = 2; namespace google { namespace protobuf { @@ -84,33 +86,6 @@ std::string RenameEmpty(const std::string& name) { } } -std::string MessagePrefix(const Descriptor* message) { - // Empty cannot be php class name. - if (message->name() == "Empty" && - message->file()->package() == "google.protobuf") { - return "GPB"; - } else { - return (message->file()->options()).php_class_prefix(); - } -} - -std::string MessageName(const Descriptor* message, bool is_descriptor) { - string message_name = message->name(); - const Descriptor* descriptor = message->containing_type(); - while (descriptor != NULL) { - message_name = descriptor->name() + '_' + message_name; - descriptor = descriptor->containing_type(); - } - message_name = MessagePrefix(message) + message_name; - - if (message->file()->package() == "") { - return message_name; - } else { - return PhpName(message->file()->package(), is_descriptor) + '\\' + - message_name; - } -} - std::string MessageFullName(const Descriptor* message, bool is_descriptor) { if (is_descriptor) { return StringReplace(message->full_name(), @@ -131,19 +106,51 @@ std::string EnumFullName(const EnumDescriptor* envm, bool is_descriptor) { } } -std::string EnumClassName(const EnumDescriptor* envm) { - string enum_class_name = envm->name(); - const Descriptor* descriptor = envm->containing_type(); - while (descriptor != NULL) { - enum_class_name = descriptor->name() + '_' + enum_class_name; - descriptor = descriptor->containing_type(); +template +std::string ClassNamePrefix(const string& classname, + const DescriptorType* desc) { + const string& prefix = (desc->file()->options()).php_class_prefix(); + if (prefix != "") { + return prefix; + } + + bool is_reserved = false; + + for (int i = 0; i < kReservedNamesSize; i++) { + if (classname == kReservedNames[i]) { + is_reserved = true; + break; + } + } + + if (is_reserved) { + if (desc->file()->package() == "google.protobuf") { + return "GPB"; + } else { + return "PB"; + } } - return enum_class_name; + + return ""; } -std::string EnumName(const EnumDescriptor* envm, bool is_descriptor) { - string enum_name = EnumClassName(envm); - return PhpName(envm->file()->package(), is_descriptor) + '\\' + enum_name; + +template +std::string FullClassName(const DescriptorType* desc, bool is_descriptor) { + string classname = desc->name(); + const Descriptor* containing = desc->containing_type(); + while (containing != NULL) { + classname = containing->name() + '_' + classname; + containing = containing->containing_type(); + } + classname = ClassNamePrefix(classname, desc) + classname; + + if (desc->file()->package() == "") { + return classname; + } else { + return PhpName(desc->file()->package(), is_descriptor) + '\\' + + classname; + } } std::string PhpName(const std::string& full_name, bool is_descriptor) { @@ -231,7 +238,7 @@ std::string GeneratedMetadataFileName(const std::string& proto_file, std::string GeneratedMessageFileName(const Descriptor* message, bool is_descriptor) { - std::string result = MessageName(message, is_descriptor); + std::string result = FullClassName(message, is_descriptor); for (int i = 0; i < result.size(); i++) { if (result[i] == '\\') { result[i] = '/'; @@ -242,7 +249,7 @@ std::string GeneratedMessageFileName(const Descriptor* message, std::string GeneratedEnumFileName(const EnumDescriptor* en, bool is_descriptor) { - std::string result = EnumName(en, is_descriptor); + std::string result = FullClassName(en, is_descriptor); for (int i = 0; i < result.size(); i++) { if (result[i] == '\\') { result[i] = '/'; @@ -456,12 +463,12 @@ void GenerateFieldAccessor(const FieldDescriptor* field, bool is_descriptor, printer->Print( ", \\^class_name^);\n", "class_name", - MessageName(value->message_type(), is_descriptor) + "::class"); + FullClassName(value->message_type(), is_descriptor) + "::class"); } else if (value->cpp_type() == FieldDescriptor::CPPTYPE_ENUM) { printer->Print( - ", ^class_name^);\n", + ", \\^class_name^);\n", "class_name", - EnumName(value->enum_type(), is_descriptor) + "::class"); + FullClassName(value->enum_type(), is_descriptor) + "::class"); } else { printer->Print(");\n"); } @@ -474,23 +481,23 @@ void GenerateFieldAccessor(const FieldDescriptor* field, bool is_descriptor, printer->Print( ", \\^class_name^);\n", "class_name", - MessageName(field->message_type(), is_descriptor) + "::class"); + FullClassName(field->message_type(), is_descriptor) + "::class"); } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM) { printer->Print( - ", ^class_name^);\n", + ", \\^class_name^);\n", "class_name", - EnumName(field->enum_type(), is_descriptor) + "::class"); + FullClassName(field->enum_type(), is_descriptor) + "::class"); } else { printer->Print(");\n"); } } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) { printer->Print( "GPBUtil::checkMessage($var, \\^class_name^::class);\n", - "class_name", MessageName(field->message_type(), is_descriptor)); + "class_name", FullClassName(field->message_type(), is_descriptor)); } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM) { printer->Print( "GPBUtil::checkEnum($var, \\^class_name^::class);\n", - "class_name", EnumName(field->enum_type(), is_descriptor)); + "class_name", FullClassName(field->enum_type(), is_descriptor)); } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_STRING) { printer->Print( "GPBUtil::checkString($var, ^utf8^);\n", @@ -552,7 +559,7 @@ void GenerateEnumToPool(const EnumDescriptor* en, io::Printer* printer) { const EnumValueDescriptor* value = en->value(i); printer->Print( "->value(\"^name^\", ^number^)\n", - "name", value->name(), + "name", ClassNamePrefix(value->name(), en) + value->name(), "number", IntToString(value->number())); } printer->Print("->finalizeToPool();\n\n"); @@ -667,6 +674,12 @@ void GenerateAddFileToPool(const FileDescriptor* file, bool is_descriptor, } else { for (int i = 0; i < file->dependency_count(); i++) { const std::string& name = file->dependency(i)->name(); + // Currently, descriptor.proto is not ready for external usage. Skip to + // import it for now, so that its dependencies can still work as long as + // they don't use protos defined in descriptor.proto. + if (name == kDescriptorFile) { + continue; + } std::string dependency_filename = GeneratedMetadataFileName(name, is_descriptor); printer->Print( @@ -678,6 +691,26 @@ void GenerateAddFileToPool(const FileDescriptor* file, bool is_descriptor, FileDescriptorSet files; FileDescriptorProto* file_proto = files.add_file(); file->CopyTo(file_proto); + + // Filter out descriptor.proto as it cannot be depended on for now. + RepeatedPtrField* dependency = file_proto->mutable_dependency(); + for (RepeatedPtrField::iterator it = dependency->begin(); + it != dependency->end(); ++it) { + if (*it != kDescriptorFile) { + dependency->erase(it); + break; + } + } + + // Filter out all extensions, since we do not support extension yet. + file_proto->clear_extension(); + RepeatedPtrField* message_type = + file_proto->mutable_message_type(); + for (RepeatedPtrField::iterator it = message_type->begin(); + it != message_type->end(); ++it) { + it->clear_extension(); + } + string files_data; files.SerializeToString(&files_data); @@ -812,7 +845,7 @@ void GenerateEnumFile(const FileDescriptor* file, const EnumDescriptor* en, const EnumValueDescriptor* value = en->value(i); GenerateEnumValueDocComment(&printer, value); printer.Print("const ^name^ = ^number^;\n", - "name", value->name(), + "name", ClassNamePrefix(value->name(), en) + value->name(), "number", IntToString(value->number())); } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.cc index 3848101d1fd854..7b9635f6abb7f0 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.cc @@ -36,18 +36,12 @@ #include #ifdef _WIN32 -#include #include -#ifndef STDIN_FILENO -#define STDIN_FILENO 0 -#endif -#ifndef STDOUT_FILENO -#define STDOUT_FILENO 1 -#endif #else #include #endif +#include #include #include #include @@ -55,6 +49,11 @@ #include #include +#if defined(_WIN32) +// DO NOT include , instead create functions in io_win32.{h,cc} and import +// them like we do below. +using google::protobuf::stubs::setmode; +#endif namespace google { namespace protobuf { @@ -150,8 +149,8 @@ int PluginMain(int argc, char* argv[], const CodeGenerator* generator) { } #ifdef _WIN32 - _setmode(STDIN_FILENO, _O_BINARY); - _setmode(STDOUT_FILENO, _O_BINARY); + setmode(STDIN_FILENO, _O_BINARY); + setmode(STDOUT_FILENO, _O_BINARY); #endif CodeGeneratorRequest request; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.pb.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.pb.cc index d044fbbebfae35..f7dc1b70867db9 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.pb.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.pb.cc @@ -38,11 +38,29 @@ ::google::protobuf::Metadata file_level_metadata[4]; } // namespace +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField + const TableStruct::entries[] = { + {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0}, +}; + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField + const TableStruct::aux[] = { + ::google::protobuf::internal::AuxillaryParseTableField(), +}; +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const + TableStruct::schema[] = { + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, +}; + const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Version, _has_bits_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Version, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Version, major_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Version, minor_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Version, patch_), @@ -55,6 +73,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(CodeGeneratorRequest, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(CodeGeneratorRequest, file_to_generate_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(CodeGeneratorRequest, parameter_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(CodeGeneratorRequest, proto_file_), @@ -67,6 +86,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(CodeGeneratorResponse_File, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(CodeGeneratorResponse_File, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(CodeGeneratorResponse_File, insertion_point_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(CodeGeneratorResponse_File, content_), @@ -77,6 +97,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(CodeGeneratorResponse, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(CodeGeneratorResponse, error_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(CodeGeneratorResponse, file_), 0, @@ -84,10 +105,10 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { }; static const ::google::protobuf::internal::MigrationSchema schemas[] = { - { 0, 8, sizeof(Version)}, - { 12, 20, sizeof(CodeGeneratorRequest)}, - { 24, 31, sizeof(CodeGeneratorResponse_File)}, - { 34, 40, sizeof(CodeGeneratorResponse)}, + { 0, 9, sizeof(Version)}, + { 13, 22, sizeof(CodeGeneratorRequest)}, + { 26, 34, sizeof(CodeGeneratorResponse_File)}, + { 37, 44, sizeof(CodeGeneratorResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -246,7 +267,7 @@ void Version::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Version::descriptor() { protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[0].descriptor; + return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Version& Version::default_instance() { @@ -369,23 +390,27 @@ bool Version::MergePartialFromCodedStream( void Version::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.compiler.Version) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional int32 major = 1; - if (has_major()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->major(), output); } // optional int32 minor = 2; - if (has_minor()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->minor(), output); } // optional int32 patch = 3; - if (has_patch()) { + if (cached_has_bits & 0x00000008u) { ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->patch(), output); } // optional string suffix = 4; - if (has_suffix()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->suffix().data(), this->suffix().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -403,25 +428,28 @@ void Version::SerializeWithCachedSizes( ::google::protobuf::uint8* Version::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.compiler.Version) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional int32 major = 1; - if (has_major()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->major(), target); } // optional int32 minor = 2; - if (has_minor()) { + if (cached_has_bits & 0x00000004u) { target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->minor(), target); } // optional int32 patch = 3; - if (has_patch()) { + if (cached_has_bits & 0x00000008u) { target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(3, this->patch(), target); } // optional string suffix = 4; - if (has_suffix()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->suffix().data(), this->suffix().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -504,20 +532,25 @@ void Version::MergeFrom(const Version& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.compiler.Version) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); - if (from._has_bits_[0 / 32] & 15u) { - if (from.has_suffix()) { + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 15u) { + if (cached_has_bits & 0x00000001u) { set_has_suffix(); suffix_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.suffix_); } - if (from.has_major()) { - set_major(from.major()); + if (cached_has_bits & 0x00000002u) { + major_ = from.major_; } - if (from.has_minor()) { - set_minor(from.minor()); + if (cached_has_bits & 0x00000004u) { + minor_ = from.minor_; } - if (from.has_patch()) { - set_patch(from.patch()); + if (cached_has_bits & 0x00000008u) { + patch_ = from.patch_; } + _has_bits_[0] |= cached_has_bits; } } @@ -555,7 +588,7 @@ void Version::InternalSwap(Version* other) { ::google::protobuf::Metadata Version::GetMetadata() const { protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[0]; + return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -665,6 +698,7 @@ void Version::set_suffix(::std::string&& value) { } #endif void Version::set_suffix(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_suffix(); suffix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.Version.suffix) @@ -759,7 +793,7 @@ void CodeGeneratorRequest::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* CodeGeneratorRequest::descriptor() { protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[1].descriptor; + return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const CodeGeneratorRequest& CodeGeneratorRequest::default_instance() { @@ -852,13 +886,11 @@ bool CodeGeneratorRequest::MergePartialFromCodedStream( case 15: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(122u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_proto_file())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -887,6 +919,9 @@ bool CodeGeneratorRequest::MergePartialFromCodedStream( void CodeGeneratorRequest::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.compiler.CodeGeneratorRequest) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated string file_to_generate = 1; for (int i = 0, n = this->file_to_generate_size(); i < n; i++) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( @@ -897,8 +932,9 @@ void CodeGeneratorRequest::SerializeWithCachedSizes( 1, this->file_to_generate(i), output); } + cached_has_bits = _has_bits_[0]; // optional string parameter = 2; - if (has_parameter()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->parameter().data(), this->parameter().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -908,7 +944,7 @@ void CodeGeneratorRequest::SerializeWithCachedSizes( } // optional .google.protobuf.compiler.Version compiler_version = 3; - if (has_compiler_version()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( 3, *this->compiler_version_, output); } @@ -928,8 +964,10 @@ void CodeGeneratorRequest::SerializeWithCachedSizes( ::google::protobuf::uint8* CodeGeneratorRequest::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.compiler.CodeGeneratorRequest) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated string file_to_generate = 1; for (int i = 0, n = this->file_to_generate_size(); i < n; i++) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( @@ -940,8 +978,9 @@ ::google::protobuf::uint8* CodeGeneratorRequest::InternalSerializeWithCachedSize WriteStringToArray(1, this->file_to_generate(i), target); } + cached_has_bits = _has_bits_[0]; // optional string parameter = 2; - if (has_parameter()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->parameter().data(), this->parameter().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -952,17 +991,17 @@ ::google::protobuf::uint8* CodeGeneratorRequest::InternalSerializeWithCachedSize } // optional .google.protobuf.compiler.Version compiler_version = 3; - if (has_compiler_version()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 3, *this->compiler_version_, false, target); + 3, *this->compiler_version_, deterministic, target); } // repeated .google.protobuf.FileDescriptorProto proto_file = 15; for (unsigned int i = 0, n = this->proto_file_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 15, this->proto_file(i), false, target); + 15, this->proto_file(i), deterministic, target); } if (_internal_metadata_.have_unknown_fields()) { @@ -1043,14 +1082,18 @@ void CodeGeneratorRequest::MergeFrom(const CodeGeneratorRequest& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.compiler.CodeGeneratorRequest) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + file_to_generate_.MergeFrom(from.file_to_generate_); proto_file_.MergeFrom(from.proto_file_); - if (from._has_bits_[0 / 32] & 3u) { - if (from.has_parameter()) { + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 3u) { + if (cached_has_bits & 0x00000001u) { set_has_parameter(); parameter_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.parameter_); } - if (from.has_compiler_version()) { + if (cached_has_bits & 0x00000002u) { mutable_compiler_version()->::google::protobuf::compiler::Version::MergeFrom(from.compiler_version()); } } @@ -1080,8 +1123,8 @@ void CodeGeneratorRequest::Swap(CodeGeneratorRequest* other) { InternalSwap(other); } void CodeGeneratorRequest::InternalSwap(CodeGeneratorRequest* other) { - file_to_generate_.UnsafeArenaSwap(&other->file_to_generate_); - proto_file_.UnsafeArenaSwap(&other->proto_file_); + file_to_generate_.InternalSwap(&other->file_to_generate_); + proto_file_.InternalSwap(&other->proto_file_); parameter_.Swap(&other->parameter_); std::swap(compiler_version_, other->compiler_version_); std::swap(_has_bits_[0], other->_has_bits_[0]); @@ -1091,7 +1134,7 @@ void CodeGeneratorRequest::InternalSwap(CodeGeneratorRequest* other) { ::google::protobuf::Metadata CodeGeneratorRequest::GetMetadata() const { protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[1]; + return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -1123,6 +1166,7 @@ void CodeGeneratorRequest::set_file_to_generate(int index, ::std::string&& value } #endif void CodeGeneratorRequest::set_file_to_generate(int index, const char* value) { + GOOGLE_DCHECK(value != NULL); file_to_generate_.Mutable(index)->assign(value); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) } @@ -1141,11 +1185,12 @@ void CodeGeneratorRequest::add_file_to_generate(const ::std::string& value) { } #if LANG_CXX11 void CodeGeneratorRequest::add_file_to_generate(::std::string&& value) { - file_to_generate_.Add()->assign(std::move(value)); + file_to_generate_.Add(std::move(value)); // @@protoc_insertion_point(field_add:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) } #endif void CodeGeneratorRequest::add_file_to_generate(const char* value) { + GOOGLE_DCHECK(value != NULL); file_to_generate_.Add()->assign(value); // @@protoc_insertion_point(field_add_char:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) } @@ -1196,6 +1241,7 @@ void CodeGeneratorRequest::set_parameter(::std::string&& value) { } #endif void CodeGeneratorRequest::set_parameter(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_parameter(); parameter_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorRequest.parameter) @@ -1365,7 +1411,7 @@ void CodeGeneratorResponse_File::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* CodeGeneratorResponse_File::descriptor() { protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[2].descriptor; + return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const CodeGeneratorResponse_File& CodeGeneratorResponse_File::default_instance() { @@ -1484,8 +1530,12 @@ bool CodeGeneratorResponse_File::MergePartialFromCodedStream( void CodeGeneratorResponse_File::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.compiler.CodeGeneratorResponse.File) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -1495,7 +1545,7 @@ void CodeGeneratorResponse_File::SerializeWithCachedSizes( } // optional string insertion_point = 2; - if (has_insertion_point()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->insertion_point().data(), this->insertion_point().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -1505,7 +1555,7 @@ void CodeGeneratorResponse_File::SerializeWithCachedSizes( } // optional string content = 15; - if (has_content()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->content().data(), this->content().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -1523,10 +1573,13 @@ void CodeGeneratorResponse_File::SerializeWithCachedSizes( ::google::protobuf::uint8* CodeGeneratorResponse_File::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.compiler.CodeGeneratorResponse.File) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -1537,7 +1590,7 @@ ::google::protobuf::uint8* CodeGeneratorResponse_File::InternalSerializeWithCach } // optional string insertion_point = 2; - if (has_insertion_point()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->insertion_point().data(), this->insertion_point().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -1548,7 +1601,7 @@ ::google::protobuf::uint8* CodeGeneratorResponse_File::InternalSerializeWithCach } // optional string content = 15; - if (has_content()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->content().data(), this->content().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -1624,16 +1677,20 @@ void CodeGeneratorResponse_File::MergeFrom(const CodeGeneratorResponse_File& fro // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.compiler.CodeGeneratorResponse.File) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); - if (from._has_bits_[0 / 32] & 7u) { - if (from.has_name()) { + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 7u) { + if (cached_has_bits & 0x00000001u) { set_has_name(); name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } - if (from.has_insertion_point()) { + if (cached_has_bits & 0x00000002u) { set_has_insertion_point(); insertion_point_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.insertion_point_); } - if (from.has_content()) { + if (cached_has_bits & 0x00000004u) { set_has_content(); content_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.content_); } @@ -1673,7 +1730,7 @@ void CodeGeneratorResponse_File::InternalSwap(CodeGeneratorResponse_File* other) ::google::protobuf::Metadata CodeGeneratorResponse_File::GetMetadata() const { protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[2]; + return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -1711,6 +1768,7 @@ void CodeGeneratorResponse_File::set_name(::std::string&& value) { } #endif void CodeGeneratorResponse_File::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.File.name) @@ -1773,6 +1831,7 @@ void CodeGeneratorResponse_File::set_insertion_point(::std::string&& value) { } #endif void CodeGeneratorResponse_File::set_insertion_point(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_insertion_point(); insertion_point_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) @@ -1835,6 +1894,7 @@ void CodeGeneratorResponse_File::set_content(::std::string&& value) { } #endif void CodeGeneratorResponse_File::set_content(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_content(); content_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.File.content) @@ -1917,7 +1977,7 @@ void CodeGeneratorResponse::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* CodeGeneratorResponse::descriptor() { protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[3].descriptor; + return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const CodeGeneratorResponse& CodeGeneratorResponse::default_instance() { @@ -1974,13 +2034,11 @@ bool CodeGeneratorResponse::MergePartialFromCodedStream( case 15: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(122u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_file())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -2009,8 +2067,12 @@ bool CodeGeneratorResponse::MergePartialFromCodedStream( void CodeGeneratorResponse::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.compiler.CodeGeneratorResponse) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string error = 1; - if (has_error()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->error().data(), this->error().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -2034,10 +2096,13 @@ void CodeGeneratorResponse::SerializeWithCachedSizes( ::google::protobuf::uint8* CodeGeneratorResponse::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.compiler.CodeGeneratorResponse) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string error = 1; - if (has_error()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->error().data(), this->error().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -2051,7 +2116,7 @@ ::google::protobuf::uint8* CodeGeneratorResponse::InternalSerializeWithCachedSiz for (unsigned int i = 0, n = this->file_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 15, this->file(i), false, target); + 15, this->file(i), deterministic, target); } if (_internal_metadata_.have_unknown_fields()) { @@ -2115,6 +2180,9 @@ void CodeGeneratorResponse::MergeFrom(const CodeGeneratorResponse& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.compiler.CodeGeneratorResponse) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + file_.MergeFrom(from.file_); if (from.has_error()) { set_has_error(); @@ -2145,7 +2213,7 @@ void CodeGeneratorResponse::Swap(CodeGeneratorResponse* other) { InternalSwap(other); } void CodeGeneratorResponse::InternalSwap(CodeGeneratorResponse* other) { - file_.UnsafeArenaSwap(&other->file_); + file_.InternalSwap(&other->file_); error_.Swap(&other->error_); std::swap(_has_bits_[0], other->_has_bits_[0]); _internal_metadata_.Swap(&other->_internal_metadata_); @@ -2154,7 +2222,7 @@ void CodeGeneratorResponse::InternalSwap(CodeGeneratorResponse* other) { ::google::protobuf::Metadata CodeGeneratorResponse::GetMetadata() const { protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[3]; + return protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -2192,6 +2260,7 @@ void CodeGeneratorResponse::set_error(::std::string&& value) { } #endif void CodeGeneratorResponse::set_error(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_error(); error_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.error) diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.pb.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.pb.h index ff8b949f2c10f3..4f8befb6eda892 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.pb.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.pb.h @@ -8,12 +8,12 @@ #include -#if GOOGLE_PROTOBUF_VERSION < 3002000 +#if GOOGLE_PROTOBUF_VERSION < 3003000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3002000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -137,6 +138,9 @@ namespace compiler { namespace protobuf_google_2fprotobuf_2fcompiler_2fplugin_2eproto { // Internal implementation detail -- do not call these. struct LIBPROTOC_EXPORT TableStruct { + static const ::google::protobuf::internal::ParseTableField entries[]; + static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; + static const ::google::protobuf::internal::ParseTable schema[]; static const ::google::protobuf::uint32 offsets[]; static void InitDefaultsImpl(); static void Shutdown(); @@ -174,6 +178,8 @@ class LIBPROTOC_EXPORT Version : public ::google::protobuf::Message /* @@protoc_ return reinterpret_cast( &_Version_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 0; void Swap(Version* other); @@ -196,11 +202,6 @@ class LIBPROTOC_EXPORT Version : public ::google::protobuf::Message /* @@protoc_ ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -307,6 +308,8 @@ class LIBPROTOC_EXPORT CodeGeneratorRequest : public ::google::protobuf::Message return reinterpret_cast( &_CodeGeneratorRequest_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 1; void Swap(CodeGeneratorRequest* other); @@ -329,11 +332,6 @@ class LIBPROTOC_EXPORT CodeGeneratorRequest : public ::google::protobuf::Message ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -458,6 +456,8 @@ class LIBPROTOC_EXPORT CodeGeneratorResponse_File : public ::google::protobuf::M return reinterpret_cast( &_CodeGeneratorResponse_File_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 2; void Swap(CodeGeneratorResponse_File* other); @@ -480,11 +480,6 @@ class LIBPROTOC_EXPORT CodeGeneratorResponse_File : public ::google::protobuf::M ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -597,6 +592,8 @@ class LIBPROTOC_EXPORT CodeGeneratorResponse : public ::google::protobuf::Messag return reinterpret_cast( &_CodeGeneratorResponse_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 3; void Swap(CodeGeneratorResponse* other); @@ -619,11 +616,6 @@ class LIBPROTOC_EXPORT CodeGeneratorResponse : public ::google::protobuf::Messag ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -798,6 +790,7 @@ inline void Version::set_suffix(::std::string&& value) { } #endif inline void Version::set_suffix(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_suffix(); suffix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.Version.suffix) @@ -858,6 +851,7 @@ inline void CodeGeneratorRequest::set_file_to_generate(int index, ::std::string& } #endif inline void CodeGeneratorRequest::set_file_to_generate(int index, const char* value) { + GOOGLE_DCHECK(value != NULL); file_to_generate_.Mutable(index)->assign(value); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) } @@ -876,11 +870,12 @@ inline void CodeGeneratorRequest::add_file_to_generate(const ::std::string& valu } #if LANG_CXX11 inline void CodeGeneratorRequest::add_file_to_generate(::std::string&& value) { - file_to_generate_.Add()->assign(std::move(value)); + file_to_generate_.Add(std::move(value)); // @@protoc_insertion_point(field_add:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) } #endif inline void CodeGeneratorRequest::add_file_to_generate(const char* value) { + GOOGLE_DCHECK(value != NULL); file_to_generate_.Add()->assign(value); // @@protoc_insertion_point(field_add_char:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) } @@ -931,6 +926,7 @@ inline void CodeGeneratorRequest::set_parameter(::std::string&& value) { } #endif inline void CodeGeneratorRequest::set_parameter(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_parameter(); parameter_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorRequest.parameter) @@ -1072,6 +1068,7 @@ inline void CodeGeneratorResponse_File::set_name(::std::string&& value) { } #endif inline void CodeGeneratorResponse_File::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.File.name) @@ -1134,6 +1131,7 @@ inline void CodeGeneratorResponse_File::set_insertion_point(::std::string&& valu } #endif inline void CodeGeneratorResponse_File::set_insertion_point(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_insertion_point(); insertion_point_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) @@ -1196,6 +1194,7 @@ inline void CodeGeneratorResponse_File::set_content(::std::string&& value) { } #endif inline void CodeGeneratorResponse_File::set_content(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_content(); content_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.File.content) @@ -1262,6 +1261,7 @@ inline void CodeGeneratorResponse::set_error(::std::string&& value) { } #endif inline void CodeGeneratorResponse::set_error(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_error(); error_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.error) diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.proto b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.proto index bf91d76e0f29ef..f04dc73c8cde89 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.proto +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/plugin.proto @@ -84,6 +84,9 @@ message CodeGeneratorRequest { // the entire set into memory at once. However, as of this writing, this // is not similarly optimized on protoc's end -- it will store all fields in // memory at once before sending them to the plugin. + // + // Type names of fields and extensions in the FileDescriptorProto are always + // fully qualified. repeated FileDescriptorProto proto_file = 15; // The version number of protocol compiler. diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/profile.pb.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/profile.pb.cc new file mode 100644 index 00000000000000..c185e4f9108369 --- /dev/null +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/profile.pb.cc @@ -0,0 +1,1442 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/protobuf/compiler/profile.proto + +#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +// @@protoc_insertion_point(includes) + +namespace google { +namespace protobuf { +namespace compiler { +class FieldAccessInfoDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed { +} _FieldAccessInfo_default_instance_; +class MessageAccessInfoDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed { +} _MessageAccessInfo_default_instance_; +class AccessInfoDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed { +} _AccessInfo_default_instance_; + +namespace protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto { + + +namespace { + +::google::protobuf::Metadata file_level_metadata[3]; + +} // namespace + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField + const TableStruct::entries[] = { + {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0}, +}; + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField + const TableStruct::aux[] = { + ::google::protobuf::internal::AuxillaryParseTableField(), +}; +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const + TableStruct::schema[] = { + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, +}; + +const ::google::protobuf::uint32 TableStruct::offsets[] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldAccessInfo, _has_bits_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldAccessInfo, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldAccessInfo, name_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldAccessInfo, getters_count_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldAccessInfo, setters_count_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldAccessInfo, configs_count_), + 0, + 1, + 2, + 3, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageAccessInfo, _has_bits_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageAccessInfo, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageAccessInfo, name_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageAccessInfo, count_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageAccessInfo, field_), + 0, + 1, + ~0u, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(AccessInfo, _has_bits_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(AccessInfo, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(AccessInfo, message_), + ~0u, +}; + +static const ::google::protobuf::internal::MigrationSchema schemas[] = { + { 0, 9, sizeof(FieldAccessInfo)}, + { 13, 21, sizeof(MessageAccessInfo)}, + { 24, 30, sizeof(AccessInfo)}, +}; + +static ::google::protobuf::Message const * const file_default_instances[] = { + reinterpret_cast(&_FieldAccessInfo_default_instance_), + reinterpret_cast(&_MessageAccessInfo_default_instance_), + reinterpret_cast(&_AccessInfo_default_instance_), +}; + +namespace { + +void protobuf_AssignDescriptors() { + AddDescriptors(); + ::google::protobuf::MessageFactory* factory = NULL; + AssignDescriptors( + "google/protobuf/compiler/profile.proto", schemas, file_default_instances, TableStruct::offsets, factory, + file_level_metadata, NULL, NULL); +} + +void protobuf_AssignDescriptorsOnce() { + static GOOGLE_PROTOBUF_DECLARE_ONCE(once); + ::google::protobuf::GoogleOnceInit(&once, &protobuf_AssignDescriptors); +} + +void protobuf_RegisterTypes(const ::std::string&) GOOGLE_ATTRIBUTE_COLD; +void protobuf_RegisterTypes(const ::std::string&) { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 3); +} + +} // namespace + +void TableStruct::Shutdown() { + _FieldAccessInfo_default_instance_.Shutdown(); + delete file_level_metadata[0].reflection; + _MessageAccessInfo_default_instance_.Shutdown(); + delete file_level_metadata[1].reflection; + _AccessInfo_default_instance_.Shutdown(); + delete file_level_metadata[2].reflection; +} + +void TableStruct::InitDefaultsImpl() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + + ::google::protobuf::internal::InitProtobufDefaults(); + _FieldAccessInfo_default_instance_.DefaultConstruct(); + _MessageAccessInfo_default_instance_.DefaultConstruct(); + _AccessInfo_default_instance_.DefaultConstruct(); +} + +void InitDefaults() { + static GOOGLE_PROTOBUF_DECLARE_ONCE(once); + ::google::protobuf::GoogleOnceInit(&once, &TableStruct::InitDefaultsImpl); +} +void AddDescriptorsImpl() { + InitDefaults(); + static const char descriptor[] = { + "\n&google/protobuf/compiler/profile.proto" + "\022\030google.protobuf.compiler\"d\n\017FieldAcces" + "sInfo\022\014\n\004name\030\001 \001(\t\022\025\n\rgetters_count\030\002 \001" + "(\004\022\025\n\rsetters_count\030\003 \001(\004\022\025\n\rconfigs_cou" + "nt\030\004 \001(\004\"j\n\021MessageAccessInfo\022\014\n\004name\030\001 " + "\001(\t\022\r\n\005count\030\002 \001(\004\0228\n\005field\030\003 \003(\0132).goog" + "le.protobuf.compiler.FieldAccessInfo\"J\n\n" + "AccessInfo\022<\n\007message\030\001 \003(\0132+.google.pro" + "tobuf.compiler.MessageAccessInfo" + }; + ::google::protobuf::DescriptorPool::InternalAddGeneratedFile( + descriptor, 352); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile( + "google/protobuf/compiler/profile.proto", &protobuf_RegisterTypes); + ::google::protobuf::internal::OnShutdown(&TableStruct::Shutdown); +} + +void AddDescriptors() { + static GOOGLE_PROTOBUF_DECLARE_ONCE(once); + ::google::protobuf::GoogleOnceInit(&once, &AddDescriptorsImpl); +} +// Force AddDescriptors() to be called at static initialization time. +struct StaticDescriptorInitializer { + StaticDescriptorInitializer() { + AddDescriptors(); + } +} static_descriptor_initializer; + +} // namespace protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto + + +// =================================================================== + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int FieldAccessInfo::kNameFieldNumber; +const int FieldAccessInfo::kGettersCountFieldNumber; +const int FieldAccessInfo::kSettersCountFieldNumber; +const int FieldAccessInfo::kConfigsCountFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +FieldAccessInfo::FieldAccessInfo() + : ::google::protobuf::Message(), _internal_metadata_(NULL) { + if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) { + protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::InitDefaults(); + } + SharedCtor(); + // @@protoc_insertion_point(constructor:google.protobuf.compiler.FieldAccessInfo) +} +FieldAccessInfo::FieldAccessInfo(const FieldAccessInfo& from) + : ::google::protobuf::Message(), + _internal_metadata_(NULL), + _has_bits_(from._has_bits_), + _cached_size_(0) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.has_name()) { + name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); + } + ::memcpy(&getters_count_, &from.getters_count_, + reinterpret_cast(&configs_count_) - + reinterpret_cast(&getters_count_) + sizeof(configs_count_)); + // @@protoc_insertion_point(copy_constructor:google.protobuf.compiler.FieldAccessInfo) +} + +void FieldAccessInfo::SharedCtor() { + _cached_size_ = 0; + name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::memset(&getters_count_, 0, reinterpret_cast(&configs_count_) - + reinterpret_cast(&getters_count_) + sizeof(configs_count_)); +} + +FieldAccessInfo::~FieldAccessInfo() { + // @@protoc_insertion_point(destructor:google.protobuf.compiler.FieldAccessInfo) + SharedDtor(); +} + +void FieldAccessInfo::SharedDtor() { + name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} + +void FieldAccessInfo::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* FieldAccessInfo::descriptor() { + protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::protobuf_AssignDescriptorsOnce(); + return protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; +} + +const FieldAccessInfo& FieldAccessInfo::default_instance() { + protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::InitDefaults(); + return *internal_default_instance(); +} + +FieldAccessInfo* FieldAccessInfo::New(::google::protobuf::Arena* arena) const { + FieldAccessInfo* n = new FieldAccessInfo; + if (arena != NULL) { + arena->Own(n); + } + return n; +} + +void FieldAccessInfo::Clear() { +// @@protoc_insertion_point(message_clear_start:google.protobuf.compiler.FieldAccessInfo) + if (has_name()) { + GOOGLE_DCHECK(!name_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited())); + (*name_.UnsafeRawStringPointer())->clear(); + } + if (_has_bits_[0 / 32] & 14u) { + ::memset(&getters_count_, 0, reinterpret_cast(&configs_count_) - + reinterpret_cast(&getters_count_) + sizeof(configs_count_)); + } + _has_bits_.Clear(); + _internal_metadata_.Clear(); +} + +bool FieldAccessInfo::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:google.protobuf.compiler.FieldAccessInfo) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // optional string name = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(10u)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_name())); + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->name().data(), this->name().length(), + ::google::protobuf::internal::WireFormat::PARSE, + "google.protobuf.compiler.FieldAccessInfo.name"); + } else { + goto handle_unusual; + } + break; + } + + // optional uint64 getters_count = 2; + case 2: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(16u)) { + set_has_getters_count(); + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>( + input, &getters_count_))); + } else { + goto handle_unusual; + } + break; + } + + // optional uint64 setters_count = 3; + case 3: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(24u)) { + set_has_setters_count(); + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>( + input, &setters_count_))); + } else { + goto handle_unusual; + } + break; + } + + // optional uint64 configs_count = 4; + case 4: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(32u)) { + set_has_configs_count(); + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>( + input, &configs_count_))); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0 || + ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == + ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:google.protobuf.compiler.FieldAccessInfo) + return true; +failure: + // @@protoc_insertion_point(parse_failure:google.protobuf.compiler.FieldAccessInfo) + return false; +#undef DO_ +} + +void FieldAccessInfo::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:google.protobuf.compiler.FieldAccessInfo) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; + // optional string name = 1; + if (cached_has_bits & 0x00000001u) { + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->name().data(), this->name().length(), + ::google::protobuf::internal::WireFormat::SERIALIZE, + "google.protobuf.compiler.FieldAccessInfo.name"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 1, this->name(), output); + } + + // optional uint64 getters_count = 2; + if (cached_has_bits & 0x00000002u) { + ::google::protobuf::internal::WireFormatLite::WriteUInt64(2, this->getters_count(), output); + } + + // optional uint64 setters_count = 3; + if (cached_has_bits & 0x00000004u) { + ::google::protobuf::internal::WireFormatLite::WriteUInt64(3, this->setters_count(), output); + } + + // optional uint64 configs_count = 4; + if (cached_has_bits & 0x00000008u) { + ::google::protobuf::internal::WireFormatLite::WriteUInt64(4, this->configs_count(), output); + } + + if (_internal_metadata_.have_unknown_fields()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:google.protobuf.compiler.FieldAccessInfo) +} + +::google::protobuf::uint8* FieldAccessInfo::InternalSerializeWithCachedSizesToArray( + bool deterministic, ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.compiler.FieldAccessInfo) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; + // optional string name = 1; + if (cached_has_bits & 0x00000001u) { + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->name().data(), this->name().length(), + ::google::protobuf::internal::WireFormat::SERIALIZE, + "google.protobuf.compiler.FieldAccessInfo.name"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 1, this->name(), target); + } + + // optional uint64 getters_count = 2; + if (cached_has_bits & 0x00000002u) { + target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(2, this->getters_count(), target); + } + + // optional uint64 setters_count = 3; + if (cached_has_bits & 0x00000004u) { + target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(3, this->setters_count(), target); + } + + // optional uint64 configs_count = 4; + if (cached_has_bits & 0x00000008u) { + target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(4, this->configs_count(), target); + } + + if (_internal_metadata_.have_unknown_fields()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.compiler.FieldAccessInfo) + return target; +} + +size_t FieldAccessInfo::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:google.protobuf.compiler.FieldAccessInfo) + size_t total_size = 0; + + if (_internal_metadata_.have_unknown_fields()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + unknown_fields()); + } + if (_has_bits_[0 / 32] & 15u) { + // optional string name = 1; + if (has_name()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->name()); + } + + // optional uint64 getters_count = 2; + if (has_getters_count()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::UInt64Size( + this->getters_count()); + } + + // optional uint64 setters_count = 3; + if (has_setters_count()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::UInt64Size( + this->setters_count()); + } + + // optional uint64 configs_count = 4; + if (has_configs_count()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::UInt64Size( + this->configs_count()); + } + + } + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = cached_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void FieldAccessInfo::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.compiler.FieldAccessInfo) + GOOGLE_DCHECK_NE(&from, this); + const FieldAccessInfo* source = + ::google::protobuf::internal::DynamicCastToGenerated( + &from); + if (source == NULL) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.compiler.FieldAccessInfo) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.compiler.FieldAccessInfo) + MergeFrom(*source); + } +} + +void FieldAccessInfo::MergeFrom(const FieldAccessInfo& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.compiler.FieldAccessInfo) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 15u) { + if (cached_has_bits & 0x00000001u) { + set_has_name(); + name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); + } + if (cached_has_bits & 0x00000002u) { + getters_count_ = from.getters_count_; + } + if (cached_has_bits & 0x00000004u) { + setters_count_ = from.setters_count_; + } + if (cached_has_bits & 0x00000008u) { + configs_count_ = from.configs_count_; + } + _has_bits_[0] |= cached_has_bits; + } +} + +void FieldAccessInfo::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.compiler.FieldAccessInfo) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void FieldAccessInfo::CopyFrom(const FieldAccessInfo& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.compiler.FieldAccessInfo) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool FieldAccessInfo::IsInitialized() const { + return true; +} + +void FieldAccessInfo::Swap(FieldAccessInfo* other) { + if (other == this) return; + InternalSwap(other); +} +void FieldAccessInfo::InternalSwap(FieldAccessInfo* other) { + name_.Swap(&other->name_); + std::swap(getters_count_, other->getters_count_); + std::swap(setters_count_, other->setters_count_); + std::swap(configs_count_, other->configs_count_); + std::swap(_has_bits_[0], other->_has_bits_[0]); + _internal_metadata_.Swap(&other->_internal_metadata_); + std::swap(_cached_size_, other->_cached_size_); +} + +::google::protobuf::Metadata FieldAccessInfo::GetMetadata() const { + protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::protobuf_AssignDescriptorsOnce(); + return protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::file_level_metadata[kIndexInFileMessages]; +} + +#if PROTOBUF_INLINE_NOT_IN_HEADERS +// FieldAccessInfo + +// optional string name = 1; +bool FieldAccessInfo::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +void FieldAccessInfo::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +void FieldAccessInfo::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +void FieldAccessInfo::clear_name() { + name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + clear_has_name(); +} +const ::std::string& FieldAccessInfo::name() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.FieldAccessInfo.name) + return name_.GetNoArena(); +} +void FieldAccessInfo::set_name(const ::std::string& value) { + set_has_name(); + name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:google.protobuf.compiler.FieldAccessInfo.name) +} +#if LANG_CXX11 +void FieldAccessInfo::set_name(::std::string&& value) { + set_has_name(); + name_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:google.protobuf.compiler.FieldAccessInfo.name) +} +#endif +void FieldAccessInfo::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); + set_has_name(); + name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.FieldAccessInfo.name) +} +void FieldAccessInfo::set_name(const char* value, size_t size) { + set_has_name(); + name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.FieldAccessInfo.name) +} +::std::string* FieldAccessInfo::mutable_name() { + set_has_name(); + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.FieldAccessInfo.name) + return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +::std::string* FieldAccessInfo::release_name() { + // @@protoc_insertion_point(field_release:google.protobuf.compiler.FieldAccessInfo.name) + clear_has_name(); + return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +void FieldAccessInfo::set_allocated_name(::std::string* name) { + if (name != NULL) { + set_has_name(); + } else { + clear_has_name(); + } + name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name); + // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.FieldAccessInfo.name) +} + +// optional uint64 getters_count = 2; +bool FieldAccessInfo::has_getters_count() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +void FieldAccessInfo::set_has_getters_count() { + _has_bits_[0] |= 0x00000002u; +} +void FieldAccessInfo::clear_has_getters_count() { + _has_bits_[0] &= ~0x00000002u; +} +void FieldAccessInfo::clear_getters_count() { + getters_count_ = GOOGLE_ULONGLONG(0); + clear_has_getters_count(); +} +::google::protobuf::uint64 FieldAccessInfo::getters_count() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.FieldAccessInfo.getters_count) + return getters_count_; +} +void FieldAccessInfo::set_getters_count(::google::protobuf::uint64 value) { + set_has_getters_count(); + getters_count_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.compiler.FieldAccessInfo.getters_count) +} + +// optional uint64 setters_count = 3; +bool FieldAccessInfo::has_setters_count() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +void FieldAccessInfo::set_has_setters_count() { + _has_bits_[0] |= 0x00000004u; +} +void FieldAccessInfo::clear_has_setters_count() { + _has_bits_[0] &= ~0x00000004u; +} +void FieldAccessInfo::clear_setters_count() { + setters_count_ = GOOGLE_ULONGLONG(0); + clear_has_setters_count(); +} +::google::protobuf::uint64 FieldAccessInfo::setters_count() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.FieldAccessInfo.setters_count) + return setters_count_; +} +void FieldAccessInfo::set_setters_count(::google::protobuf::uint64 value) { + set_has_setters_count(); + setters_count_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.compiler.FieldAccessInfo.setters_count) +} + +// optional uint64 configs_count = 4; +bool FieldAccessInfo::has_configs_count() const { + return (_has_bits_[0] & 0x00000008u) != 0; +} +void FieldAccessInfo::set_has_configs_count() { + _has_bits_[0] |= 0x00000008u; +} +void FieldAccessInfo::clear_has_configs_count() { + _has_bits_[0] &= ~0x00000008u; +} +void FieldAccessInfo::clear_configs_count() { + configs_count_ = GOOGLE_ULONGLONG(0); + clear_has_configs_count(); +} +::google::protobuf::uint64 FieldAccessInfo::configs_count() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.FieldAccessInfo.configs_count) + return configs_count_; +} +void FieldAccessInfo::set_configs_count(::google::protobuf::uint64 value) { + set_has_configs_count(); + configs_count_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.compiler.FieldAccessInfo.configs_count) +} + +#endif // PROTOBUF_INLINE_NOT_IN_HEADERS + +// =================================================================== + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int MessageAccessInfo::kNameFieldNumber; +const int MessageAccessInfo::kCountFieldNumber; +const int MessageAccessInfo::kFieldFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +MessageAccessInfo::MessageAccessInfo() + : ::google::protobuf::Message(), _internal_metadata_(NULL) { + if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) { + protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::InitDefaults(); + } + SharedCtor(); + // @@protoc_insertion_point(constructor:google.protobuf.compiler.MessageAccessInfo) +} +MessageAccessInfo::MessageAccessInfo(const MessageAccessInfo& from) + : ::google::protobuf::Message(), + _internal_metadata_(NULL), + _has_bits_(from._has_bits_), + _cached_size_(0), + field_(from.field_) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.has_name()) { + name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); + } + count_ = from.count_; + // @@protoc_insertion_point(copy_constructor:google.protobuf.compiler.MessageAccessInfo) +} + +void MessageAccessInfo::SharedCtor() { + _cached_size_ = 0; + name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + count_ = GOOGLE_ULONGLONG(0); +} + +MessageAccessInfo::~MessageAccessInfo() { + // @@protoc_insertion_point(destructor:google.protobuf.compiler.MessageAccessInfo) + SharedDtor(); +} + +void MessageAccessInfo::SharedDtor() { + name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} + +void MessageAccessInfo::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* MessageAccessInfo::descriptor() { + protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::protobuf_AssignDescriptorsOnce(); + return protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; +} + +const MessageAccessInfo& MessageAccessInfo::default_instance() { + protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::InitDefaults(); + return *internal_default_instance(); +} + +MessageAccessInfo* MessageAccessInfo::New(::google::protobuf::Arena* arena) const { + MessageAccessInfo* n = new MessageAccessInfo; + if (arena != NULL) { + arena->Own(n); + } + return n; +} + +void MessageAccessInfo::Clear() { +// @@protoc_insertion_point(message_clear_start:google.protobuf.compiler.MessageAccessInfo) + field_.Clear(); + if (has_name()) { + GOOGLE_DCHECK(!name_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited())); + (*name_.UnsafeRawStringPointer())->clear(); + } + count_ = GOOGLE_ULONGLONG(0); + _has_bits_.Clear(); + _internal_metadata_.Clear(); +} + +bool MessageAccessInfo::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:google.protobuf.compiler.MessageAccessInfo) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // optional string name = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(10u)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_name())); + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->name().data(), this->name().length(), + ::google::protobuf::internal::WireFormat::PARSE, + "google.protobuf.compiler.MessageAccessInfo.name"); + } else { + goto handle_unusual; + } + break; + } + + // optional uint64 count = 2; + case 2: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(16u)) { + set_has_count(); + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>( + input, &count_))); + } else { + goto handle_unusual; + } + break; + } + + // repeated .google.protobuf.compiler.FieldAccessInfo field = 3; + case 3: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(26u)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( + input, add_field())); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0 || + ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == + ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:google.protobuf.compiler.MessageAccessInfo) + return true; +failure: + // @@protoc_insertion_point(parse_failure:google.protobuf.compiler.MessageAccessInfo) + return false; +#undef DO_ +} + +void MessageAccessInfo::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:google.protobuf.compiler.MessageAccessInfo) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; + // optional string name = 1; + if (cached_has_bits & 0x00000001u) { + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->name().data(), this->name().length(), + ::google::protobuf::internal::WireFormat::SERIALIZE, + "google.protobuf.compiler.MessageAccessInfo.name"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 1, this->name(), output); + } + + // optional uint64 count = 2; + if (cached_has_bits & 0x00000002u) { + ::google::protobuf::internal::WireFormatLite::WriteUInt64(2, this->count(), output); + } + + // repeated .google.protobuf.compiler.FieldAccessInfo field = 3; + for (unsigned int i = 0, n = this->field_size(); i < n; i++) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 3, this->field(i), output); + } + + if (_internal_metadata_.have_unknown_fields()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:google.protobuf.compiler.MessageAccessInfo) +} + +::google::protobuf::uint8* MessageAccessInfo::InternalSerializeWithCachedSizesToArray( + bool deterministic, ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.compiler.MessageAccessInfo) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; + // optional string name = 1; + if (cached_has_bits & 0x00000001u) { + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->name().data(), this->name().length(), + ::google::protobuf::internal::WireFormat::SERIALIZE, + "google.protobuf.compiler.MessageAccessInfo.name"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 1, this->name(), target); + } + + // optional uint64 count = 2; + if (cached_has_bits & 0x00000002u) { + target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(2, this->count(), target); + } + + // repeated .google.protobuf.compiler.FieldAccessInfo field = 3; + for (unsigned int i = 0, n = this->field_size(); i < n; i++) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageNoVirtualToArray( + 3, this->field(i), deterministic, target); + } + + if (_internal_metadata_.have_unknown_fields()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.compiler.MessageAccessInfo) + return target; +} + +size_t MessageAccessInfo::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:google.protobuf.compiler.MessageAccessInfo) + size_t total_size = 0; + + if (_internal_metadata_.have_unknown_fields()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + unknown_fields()); + } + // repeated .google.protobuf.compiler.FieldAccessInfo field = 3; + { + unsigned int count = this->field_size(); + total_size += 1UL * count; + for (unsigned int i = 0; i < count; i++) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( + this->field(i)); + } + } + + if (_has_bits_[0 / 32] & 3u) { + // optional string name = 1; + if (has_name()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->name()); + } + + // optional uint64 count = 2; + if (has_count()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::UInt64Size( + this->count()); + } + + } + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = cached_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void MessageAccessInfo::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.compiler.MessageAccessInfo) + GOOGLE_DCHECK_NE(&from, this); + const MessageAccessInfo* source = + ::google::protobuf::internal::DynamicCastToGenerated( + &from); + if (source == NULL) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.compiler.MessageAccessInfo) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.compiler.MessageAccessInfo) + MergeFrom(*source); + } +} + +void MessageAccessInfo::MergeFrom(const MessageAccessInfo& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.compiler.MessageAccessInfo) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + field_.MergeFrom(from.field_); + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 3u) { + if (cached_has_bits & 0x00000001u) { + set_has_name(); + name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); + } + if (cached_has_bits & 0x00000002u) { + count_ = from.count_; + } + _has_bits_[0] |= cached_has_bits; + } +} + +void MessageAccessInfo::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.compiler.MessageAccessInfo) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void MessageAccessInfo::CopyFrom(const MessageAccessInfo& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.compiler.MessageAccessInfo) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool MessageAccessInfo::IsInitialized() const { + return true; +} + +void MessageAccessInfo::Swap(MessageAccessInfo* other) { + if (other == this) return; + InternalSwap(other); +} +void MessageAccessInfo::InternalSwap(MessageAccessInfo* other) { + field_.InternalSwap(&other->field_); + name_.Swap(&other->name_); + std::swap(count_, other->count_); + std::swap(_has_bits_[0], other->_has_bits_[0]); + _internal_metadata_.Swap(&other->_internal_metadata_); + std::swap(_cached_size_, other->_cached_size_); +} + +::google::protobuf::Metadata MessageAccessInfo::GetMetadata() const { + protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::protobuf_AssignDescriptorsOnce(); + return protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::file_level_metadata[kIndexInFileMessages]; +} + +#if PROTOBUF_INLINE_NOT_IN_HEADERS +// MessageAccessInfo + +// optional string name = 1; +bool MessageAccessInfo::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +void MessageAccessInfo::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +void MessageAccessInfo::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +void MessageAccessInfo::clear_name() { + name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + clear_has_name(); +} +const ::std::string& MessageAccessInfo::name() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.MessageAccessInfo.name) + return name_.GetNoArena(); +} +void MessageAccessInfo::set_name(const ::std::string& value) { + set_has_name(); + name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:google.protobuf.compiler.MessageAccessInfo.name) +} +#if LANG_CXX11 +void MessageAccessInfo::set_name(::std::string&& value) { + set_has_name(); + name_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:google.protobuf.compiler.MessageAccessInfo.name) +} +#endif +void MessageAccessInfo::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); + set_has_name(); + name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.MessageAccessInfo.name) +} +void MessageAccessInfo::set_name(const char* value, size_t size) { + set_has_name(); + name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.MessageAccessInfo.name) +} +::std::string* MessageAccessInfo::mutable_name() { + set_has_name(); + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.MessageAccessInfo.name) + return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +::std::string* MessageAccessInfo::release_name() { + // @@protoc_insertion_point(field_release:google.protobuf.compiler.MessageAccessInfo.name) + clear_has_name(); + return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +void MessageAccessInfo::set_allocated_name(::std::string* name) { + if (name != NULL) { + set_has_name(); + } else { + clear_has_name(); + } + name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name); + // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.MessageAccessInfo.name) +} + +// optional uint64 count = 2; +bool MessageAccessInfo::has_count() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +void MessageAccessInfo::set_has_count() { + _has_bits_[0] |= 0x00000002u; +} +void MessageAccessInfo::clear_has_count() { + _has_bits_[0] &= ~0x00000002u; +} +void MessageAccessInfo::clear_count() { + count_ = GOOGLE_ULONGLONG(0); + clear_has_count(); +} +::google::protobuf::uint64 MessageAccessInfo::count() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.MessageAccessInfo.count) + return count_; +} +void MessageAccessInfo::set_count(::google::protobuf::uint64 value) { + set_has_count(); + count_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.compiler.MessageAccessInfo.count) +} + +// repeated .google.protobuf.compiler.FieldAccessInfo field = 3; +int MessageAccessInfo::field_size() const { + return field_.size(); +} +void MessageAccessInfo::clear_field() { + field_.Clear(); +} +const ::google::protobuf::compiler::FieldAccessInfo& MessageAccessInfo::field(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.MessageAccessInfo.field) + return field_.Get(index); +} +::google::protobuf::compiler::FieldAccessInfo* MessageAccessInfo::mutable_field(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.MessageAccessInfo.field) + return field_.Mutable(index); +} +::google::protobuf::compiler::FieldAccessInfo* MessageAccessInfo::add_field() { + // @@protoc_insertion_point(field_add:google.protobuf.compiler.MessageAccessInfo.field) + return field_.Add(); +} +::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::FieldAccessInfo >* +MessageAccessInfo::mutable_field() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.compiler.MessageAccessInfo.field) + return &field_; +} +const ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::FieldAccessInfo >& +MessageAccessInfo::field() const { + // @@protoc_insertion_point(field_list:google.protobuf.compiler.MessageAccessInfo.field) + return field_; +} + +#endif // PROTOBUF_INLINE_NOT_IN_HEADERS + +// =================================================================== + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int AccessInfo::kMessageFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +AccessInfo::AccessInfo() + : ::google::protobuf::Message(), _internal_metadata_(NULL) { + if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) { + protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::InitDefaults(); + } + SharedCtor(); + // @@protoc_insertion_point(constructor:google.protobuf.compiler.AccessInfo) +} +AccessInfo::AccessInfo(const AccessInfo& from) + : ::google::protobuf::Message(), + _internal_metadata_(NULL), + _has_bits_(from._has_bits_), + _cached_size_(0), + message_(from.message_) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + // @@protoc_insertion_point(copy_constructor:google.protobuf.compiler.AccessInfo) +} + +void AccessInfo::SharedCtor() { + _cached_size_ = 0; +} + +AccessInfo::~AccessInfo() { + // @@protoc_insertion_point(destructor:google.protobuf.compiler.AccessInfo) + SharedDtor(); +} + +void AccessInfo::SharedDtor() { +} + +void AccessInfo::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* AccessInfo::descriptor() { + protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::protobuf_AssignDescriptorsOnce(); + return protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; +} + +const AccessInfo& AccessInfo::default_instance() { + protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::InitDefaults(); + return *internal_default_instance(); +} + +AccessInfo* AccessInfo::New(::google::protobuf::Arena* arena) const { + AccessInfo* n = new AccessInfo; + if (arena != NULL) { + arena->Own(n); + } + return n; +} + +void AccessInfo::Clear() { +// @@protoc_insertion_point(message_clear_start:google.protobuf.compiler.AccessInfo) + message_.Clear(); + _has_bits_.Clear(); + _internal_metadata_.Clear(); +} + +bool AccessInfo::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:google.protobuf.compiler.AccessInfo) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // repeated .google.protobuf.compiler.MessageAccessInfo message = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(10u)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( + input, add_message())); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0 || + ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == + ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:google.protobuf.compiler.AccessInfo) + return true; +failure: + // @@protoc_insertion_point(parse_failure:google.protobuf.compiler.AccessInfo) + return false; +#undef DO_ +} + +void AccessInfo::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:google.protobuf.compiler.AccessInfo) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // repeated .google.protobuf.compiler.MessageAccessInfo message = 1; + for (unsigned int i = 0, n = this->message_size(); i < n; i++) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 1, this->message(i), output); + } + + if (_internal_metadata_.have_unknown_fields()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:google.protobuf.compiler.AccessInfo) +} + +::google::protobuf::uint8* AccessInfo::InternalSerializeWithCachedSizesToArray( + bool deterministic, ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.compiler.AccessInfo) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // repeated .google.protobuf.compiler.MessageAccessInfo message = 1; + for (unsigned int i = 0, n = this->message_size(); i < n; i++) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageNoVirtualToArray( + 1, this->message(i), deterministic, target); + } + + if (_internal_metadata_.have_unknown_fields()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.compiler.AccessInfo) + return target; +} + +size_t AccessInfo::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:google.protobuf.compiler.AccessInfo) + size_t total_size = 0; + + if (_internal_metadata_.have_unknown_fields()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + unknown_fields()); + } + // repeated .google.protobuf.compiler.MessageAccessInfo message = 1; + { + unsigned int count = this->message_size(); + total_size += 1UL * count; + for (unsigned int i = 0; i < count; i++) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( + this->message(i)); + } + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = cached_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void AccessInfo::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:google.protobuf.compiler.AccessInfo) + GOOGLE_DCHECK_NE(&from, this); + const AccessInfo* source = + ::google::protobuf::internal::DynamicCastToGenerated( + &from); + if (source == NULL) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.protobuf.compiler.AccessInfo) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:google.protobuf.compiler.AccessInfo) + MergeFrom(*source); + } +} + +void AccessInfo::MergeFrom(const AccessInfo& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.compiler.AccessInfo) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + message_.MergeFrom(from.message_); +} + +void AccessInfo::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:google.protobuf.compiler.AccessInfo) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void AccessInfo::CopyFrom(const AccessInfo& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:google.protobuf.compiler.AccessInfo) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool AccessInfo::IsInitialized() const { + return true; +} + +void AccessInfo::Swap(AccessInfo* other) { + if (other == this) return; + InternalSwap(other); +} +void AccessInfo::InternalSwap(AccessInfo* other) { + message_.InternalSwap(&other->message_); + std::swap(_has_bits_[0], other->_has_bits_[0]); + _internal_metadata_.Swap(&other->_internal_metadata_); + std::swap(_cached_size_, other->_cached_size_); +} + +::google::protobuf::Metadata AccessInfo::GetMetadata() const { + protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::protobuf_AssignDescriptorsOnce(); + return protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::file_level_metadata[kIndexInFileMessages]; +} + +#if PROTOBUF_INLINE_NOT_IN_HEADERS +// AccessInfo + +// repeated .google.protobuf.compiler.MessageAccessInfo message = 1; +int AccessInfo::message_size() const { + return message_.size(); +} +void AccessInfo::clear_message() { + message_.Clear(); +} +const ::google::protobuf::compiler::MessageAccessInfo& AccessInfo::message(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.AccessInfo.message) + return message_.Get(index); +} +::google::protobuf::compiler::MessageAccessInfo* AccessInfo::mutable_message(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.AccessInfo.message) + return message_.Mutable(index); +} +::google::protobuf::compiler::MessageAccessInfo* AccessInfo::add_message() { + // @@protoc_insertion_point(field_add:google.protobuf.compiler.AccessInfo.message) + return message_.Add(); +} +::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::MessageAccessInfo >* +AccessInfo::mutable_message() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.compiler.AccessInfo.message) + return &message_; +} +const ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::MessageAccessInfo >& +AccessInfo::message() const { + // @@protoc_insertion_point(field_list:google.protobuf.compiler.AccessInfo.message) + return message_; +} + +#endif // PROTOBUF_INLINE_NOT_IN_HEADERS + +// @@protoc_insertion_point(namespace_scope) + +} // namespace compiler +} // namespace protobuf +} // namespace google + +// @@protoc_insertion_point(global_scope) diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/profile.pb.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/profile.pb.h new file mode 100644 index 00000000000000..d20b87ed68ced3 --- /dev/null +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/profile.pb.h @@ -0,0 +1,728 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/protobuf/compiler/profile.proto + +#ifndef PROTOBUF_google_2fprotobuf_2fcompiler_2fprofile_2eproto__INCLUDED +#define PROTOBUF_google_2fprotobuf_2fcompiler_2fprofile_2eproto__INCLUDED + +#include + +#include + +#if GOOGLE_PROTOBUF_VERSION < 3003000 +#error This file was generated by a newer version of protoc which is +#error incompatible with your Protocol Buffer headers. Please update +#error your headers. +#endif +#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#error This file was generated by an older version of protoc which is +#error incompatible with your Protocol Buffer headers. Please +#error regenerate this file with a newer version of protoc. +#endif + +#include +#include +#include +#include +#include +#include +#include +#include // IWYU pragma: export +#include // IWYU pragma: export +#include +// @@protoc_insertion_point(includes) +namespace google { +namespace protobuf { +namespace compiler { +class AccessInfo; +class AccessInfoDefaultTypeInternal; +LIBPROTOC_EXPORT extern AccessInfoDefaultTypeInternal _AccessInfo_default_instance_; +class FieldAccessInfo; +class FieldAccessInfoDefaultTypeInternal; +LIBPROTOC_EXPORT extern FieldAccessInfoDefaultTypeInternal _FieldAccessInfo_default_instance_; +class MessageAccessInfo; +class MessageAccessInfoDefaultTypeInternal; +LIBPROTOC_EXPORT extern MessageAccessInfoDefaultTypeInternal _MessageAccessInfo_default_instance_; +} // namespace compiler +} // namespace protobuf +} // namespace google + +namespace google { +namespace protobuf { +namespace compiler { + +namespace protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto { +// Internal implementation detail -- do not call these. +struct LIBPROTOC_EXPORT TableStruct { + static const ::google::protobuf::internal::ParseTableField entries[]; + static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; + static const ::google::protobuf::internal::ParseTable schema[]; + static const ::google::protobuf::uint32 offsets[]; + static void InitDefaultsImpl(); + static void Shutdown(); +}; +void LIBPROTOC_EXPORT AddDescriptors(); +void LIBPROTOC_EXPORT InitDefaults(); +} // namespace protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto + +// =================================================================== + +class LIBPROTOC_EXPORT FieldAccessInfo : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.compiler.FieldAccessInfo) */ { + public: + FieldAccessInfo(); + virtual ~FieldAccessInfo(); + + FieldAccessInfo(const FieldAccessInfo& from); + + inline FieldAccessInfo& operator=(const FieldAccessInfo& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _internal_metadata_.unknown_fields(); + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return _internal_metadata_.mutable_unknown_fields(); + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const FieldAccessInfo& default_instance(); + + static inline const FieldAccessInfo* internal_default_instance() { + return reinterpret_cast( + &_FieldAccessInfo_default_instance_); + } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 0; + + void Swap(FieldAccessInfo* other); + + // implements Message ---------------------------------------------- + + inline FieldAccessInfo* New() const PROTOBUF_FINAL { return New(NULL); } + + FieldAccessInfo* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL; + void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL; + void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL; + void CopyFrom(const FieldAccessInfo& from); + void MergeFrom(const FieldAccessInfo& from); + void Clear() PROTOBUF_FINAL; + bool IsInitialized() const PROTOBUF_FINAL; + + size_t ByteSizeLong() const PROTOBUF_FINAL; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL; + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; + ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( + bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; + int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const PROTOBUF_FINAL; + void InternalSwap(FieldAccessInfo* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return NULL; + } + inline void* MaybeArenaPtr() const { + return NULL; + } + public: + + ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string name = 1; + bool has_name() const; + void clear_name(); + static const int kNameFieldNumber = 1; + const ::std::string& name() const; + void set_name(const ::std::string& value); + #if LANG_CXX11 + void set_name(::std::string&& value); + #endif + void set_name(const char* value); + void set_name(const char* value, size_t size); + ::std::string* mutable_name(); + ::std::string* release_name(); + void set_allocated_name(::std::string* name); + + // optional uint64 getters_count = 2; + bool has_getters_count() const; + void clear_getters_count(); + static const int kGettersCountFieldNumber = 2; + ::google::protobuf::uint64 getters_count() const; + void set_getters_count(::google::protobuf::uint64 value); + + // optional uint64 setters_count = 3; + bool has_setters_count() const; + void clear_setters_count(); + static const int kSettersCountFieldNumber = 3; + ::google::protobuf::uint64 setters_count() const; + void set_setters_count(::google::protobuf::uint64 value); + + // optional uint64 configs_count = 4; + bool has_configs_count() const; + void clear_configs_count(); + static const int kConfigsCountFieldNumber = 4; + ::google::protobuf::uint64 configs_count() const; + void set_configs_count(::google::protobuf::uint64 value); + + // @@protoc_insertion_point(class_scope:google.protobuf.compiler.FieldAccessInfo) + private: + void set_has_name(); + void clear_has_name(); + void set_has_getters_count(); + void clear_has_getters_count(); + void set_has_setters_count(); + void clear_has_setters_count(); + void set_has_configs_count(); + void clear_has_configs_count(); + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::internal::HasBits<1> _has_bits_; + mutable int _cached_size_; + ::google::protobuf::internal::ArenaStringPtr name_; + ::google::protobuf::uint64 getters_count_; + ::google::protobuf::uint64 setters_count_; + ::google::protobuf::uint64 configs_count_; + friend struct protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::TableStruct; +}; +// ------------------------------------------------------------------- + +class LIBPROTOC_EXPORT MessageAccessInfo : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.compiler.MessageAccessInfo) */ { + public: + MessageAccessInfo(); + virtual ~MessageAccessInfo(); + + MessageAccessInfo(const MessageAccessInfo& from); + + inline MessageAccessInfo& operator=(const MessageAccessInfo& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _internal_metadata_.unknown_fields(); + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return _internal_metadata_.mutable_unknown_fields(); + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const MessageAccessInfo& default_instance(); + + static inline const MessageAccessInfo* internal_default_instance() { + return reinterpret_cast( + &_MessageAccessInfo_default_instance_); + } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 1; + + void Swap(MessageAccessInfo* other); + + // implements Message ---------------------------------------------- + + inline MessageAccessInfo* New() const PROTOBUF_FINAL { return New(NULL); } + + MessageAccessInfo* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL; + void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL; + void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL; + void CopyFrom(const MessageAccessInfo& from); + void MergeFrom(const MessageAccessInfo& from); + void Clear() PROTOBUF_FINAL; + bool IsInitialized() const PROTOBUF_FINAL; + + size_t ByteSizeLong() const PROTOBUF_FINAL; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL; + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; + ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( + bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; + int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const PROTOBUF_FINAL; + void InternalSwap(MessageAccessInfo* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return NULL; + } + inline void* MaybeArenaPtr() const { + return NULL; + } + public: + + ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // repeated .google.protobuf.compiler.FieldAccessInfo field = 3; + int field_size() const; + void clear_field(); + static const int kFieldFieldNumber = 3; + const ::google::protobuf::compiler::FieldAccessInfo& field(int index) const; + ::google::protobuf::compiler::FieldAccessInfo* mutable_field(int index); + ::google::protobuf::compiler::FieldAccessInfo* add_field(); + ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::FieldAccessInfo >* + mutable_field(); + const ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::FieldAccessInfo >& + field() const; + + // optional string name = 1; + bool has_name() const; + void clear_name(); + static const int kNameFieldNumber = 1; + const ::std::string& name() const; + void set_name(const ::std::string& value); + #if LANG_CXX11 + void set_name(::std::string&& value); + #endif + void set_name(const char* value); + void set_name(const char* value, size_t size); + ::std::string* mutable_name(); + ::std::string* release_name(); + void set_allocated_name(::std::string* name); + + // optional uint64 count = 2; + bool has_count() const; + void clear_count(); + static const int kCountFieldNumber = 2; + ::google::protobuf::uint64 count() const; + void set_count(::google::protobuf::uint64 value); + + // @@protoc_insertion_point(class_scope:google.protobuf.compiler.MessageAccessInfo) + private: + void set_has_name(); + void clear_has_name(); + void set_has_count(); + void clear_has_count(); + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::internal::HasBits<1> _has_bits_; + mutable int _cached_size_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::FieldAccessInfo > field_; + ::google::protobuf::internal::ArenaStringPtr name_; + ::google::protobuf::uint64 count_; + friend struct protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::TableStruct; +}; +// ------------------------------------------------------------------- + +class LIBPROTOC_EXPORT AccessInfo : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:google.protobuf.compiler.AccessInfo) */ { + public: + AccessInfo(); + virtual ~AccessInfo(); + + AccessInfo(const AccessInfo& from); + + inline AccessInfo& operator=(const AccessInfo& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _internal_metadata_.unknown_fields(); + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return _internal_metadata_.mutable_unknown_fields(); + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const AccessInfo& default_instance(); + + static inline const AccessInfo* internal_default_instance() { + return reinterpret_cast( + &_AccessInfo_default_instance_); + } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 2; + + void Swap(AccessInfo* other); + + // implements Message ---------------------------------------------- + + inline AccessInfo* New() const PROTOBUF_FINAL { return New(NULL); } + + AccessInfo* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL; + void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL; + void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL; + void CopyFrom(const AccessInfo& from); + void MergeFrom(const AccessInfo& from); + void Clear() PROTOBUF_FINAL; + bool IsInitialized() const PROTOBUF_FINAL; + + size_t ByteSizeLong() const PROTOBUF_FINAL; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL; + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; + ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( + bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; + int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const PROTOBUF_FINAL; + void InternalSwap(AccessInfo* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return NULL; + } + inline void* MaybeArenaPtr() const { + return NULL; + } + public: + + ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // repeated .google.protobuf.compiler.MessageAccessInfo message = 1; + int message_size() const; + void clear_message(); + static const int kMessageFieldNumber = 1; + const ::google::protobuf::compiler::MessageAccessInfo& message(int index) const; + ::google::protobuf::compiler::MessageAccessInfo* mutable_message(int index); + ::google::protobuf::compiler::MessageAccessInfo* add_message(); + ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::MessageAccessInfo >* + mutable_message(); + const ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::MessageAccessInfo >& + message() const; + + // @@protoc_insertion_point(class_scope:google.protobuf.compiler.AccessInfo) + private: + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::internal::HasBits<1> _has_bits_; + mutable int _cached_size_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::MessageAccessInfo > message_; + friend struct protobuf_google_2fprotobuf_2fcompiler_2fprofile_2eproto::TableStruct; +}; +// =================================================================== + + +// =================================================================== + +#if !PROTOBUF_INLINE_NOT_IN_HEADERS +// FieldAccessInfo + +// optional string name = 1; +inline bool FieldAccessInfo::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void FieldAccessInfo::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +inline void FieldAccessInfo::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +inline void FieldAccessInfo::clear_name() { + name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + clear_has_name(); +} +inline const ::std::string& FieldAccessInfo::name() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.FieldAccessInfo.name) + return name_.GetNoArena(); +} +inline void FieldAccessInfo::set_name(const ::std::string& value) { + set_has_name(); + name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:google.protobuf.compiler.FieldAccessInfo.name) +} +#if LANG_CXX11 +inline void FieldAccessInfo::set_name(::std::string&& value) { + set_has_name(); + name_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:google.protobuf.compiler.FieldAccessInfo.name) +} +#endif +inline void FieldAccessInfo::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); + set_has_name(); + name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.FieldAccessInfo.name) +} +inline void FieldAccessInfo::set_name(const char* value, size_t size) { + set_has_name(); + name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.FieldAccessInfo.name) +} +inline ::std::string* FieldAccessInfo::mutable_name() { + set_has_name(); + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.FieldAccessInfo.name) + return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* FieldAccessInfo::release_name() { + // @@protoc_insertion_point(field_release:google.protobuf.compiler.FieldAccessInfo.name) + clear_has_name(); + return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void FieldAccessInfo::set_allocated_name(::std::string* name) { + if (name != NULL) { + set_has_name(); + } else { + clear_has_name(); + } + name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name); + // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.FieldAccessInfo.name) +} + +// optional uint64 getters_count = 2; +inline bool FieldAccessInfo::has_getters_count() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void FieldAccessInfo::set_has_getters_count() { + _has_bits_[0] |= 0x00000002u; +} +inline void FieldAccessInfo::clear_has_getters_count() { + _has_bits_[0] &= ~0x00000002u; +} +inline void FieldAccessInfo::clear_getters_count() { + getters_count_ = GOOGLE_ULONGLONG(0); + clear_has_getters_count(); +} +inline ::google::protobuf::uint64 FieldAccessInfo::getters_count() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.FieldAccessInfo.getters_count) + return getters_count_; +} +inline void FieldAccessInfo::set_getters_count(::google::protobuf::uint64 value) { + set_has_getters_count(); + getters_count_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.compiler.FieldAccessInfo.getters_count) +} + +// optional uint64 setters_count = 3; +inline bool FieldAccessInfo::has_setters_count() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void FieldAccessInfo::set_has_setters_count() { + _has_bits_[0] |= 0x00000004u; +} +inline void FieldAccessInfo::clear_has_setters_count() { + _has_bits_[0] &= ~0x00000004u; +} +inline void FieldAccessInfo::clear_setters_count() { + setters_count_ = GOOGLE_ULONGLONG(0); + clear_has_setters_count(); +} +inline ::google::protobuf::uint64 FieldAccessInfo::setters_count() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.FieldAccessInfo.setters_count) + return setters_count_; +} +inline void FieldAccessInfo::set_setters_count(::google::protobuf::uint64 value) { + set_has_setters_count(); + setters_count_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.compiler.FieldAccessInfo.setters_count) +} + +// optional uint64 configs_count = 4; +inline bool FieldAccessInfo::has_configs_count() const { + return (_has_bits_[0] & 0x00000008u) != 0; +} +inline void FieldAccessInfo::set_has_configs_count() { + _has_bits_[0] |= 0x00000008u; +} +inline void FieldAccessInfo::clear_has_configs_count() { + _has_bits_[0] &= ~0x00000008u; +} +inline void FieldAccessInfo::clear_configs_count() { + configs_count_ = GOOGLE_ULONGLONG(0); + clear_has_configs_count(); +} +inline ::google::protobuf::uint64 FieldAccessInfo::configs_count() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.FieldAccessInfo.configs_count) + return configs_count_; +} +inline void FieldAccessInfo::set_configs_count(::google::protobuf::uint64 value) { + set_has_configs_count(); + configs_count_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.compiler.FieldAccessInfo.configs_count) +} + +// ------------------------------------------------------------------- + +// MessageAccessInfo + +// optional string name = 1; +inline bool MessageAccessInfo::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void MessageAccessInfo::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +inline void MessageAccessInfo::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +inline void MessageAccessInfo::clear_name() { + name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + clear_has_name(); +} +inline const ::std::string& MessageAccessInfo::name() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.MessageAccessInfo.name) + return name_.GetNoArena(); +} +inline void MessageAccessInfo::set_name(const ::std::string& value) { + set_has_name(); + name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:google.protobuf.compiler.MessageAccessInfo.name) +} +#if LANG_CXX11 +inline void MessageAccessInfo::set_name(::std::string&& value) { + set_has_name(); + name_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:google.protobuf.compiler.MessageAccessInfo.name) +} +#endif +inline void MessageAccessInfo::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); + set_has_name(); + name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.MessageAccessInfo.name) +} +inline void MessageAccessInfo::set_name(const char* value, size_t size) { + set_has_name(); + name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.MessageAccessInfo.name) +} +inline ::std::string* MessageAccessInfo::mutable_name() { + set_has_name(); + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.MessageAccessInfo.name) + return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* MessageAccessInfo::release_name() { + // @@protoc_insertion_point(field_release:google.protobuf.compiler.MessageAccessInfo.name) + clear_has_name(); + return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void MessageAccessInfo::set_allocated_name(::std::string* name) { + if (name != NULL) { + set_has_name(); + } else { + clear_has_name(); + } + name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name); + // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.MessageAccessInfo.name) +} + +// optional uint64 count = 2; +inline bool MessageAccessInfo::has_count() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void MessageAccessInfo::set_has_count() { + _has_bits_[0] |= 0x00000002u; +} +inline void MessageAccessInfo::clear_has_count() { + _has_bits_[0] &= ~0x00000002u; +} +inline void MessageAccessInfo::clear_count() { + count_ = GOOGLE_ULONGLONG(0); + clear_has_count(); +} +inline ::google::protobuf::uint64 MessageAccessInfo::count() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.MessageAccessInfo.count) + return count_; +} +inline void MessageAccessInfo::set_count(::google::protobuf::uint64 value) { + set_has_count(); + count_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.compiler.MessageAccessInfo.count) +} + +// repeated .google.protobuf.compiler.FieldAccessInfo field = 3; +inline int MessageAccessInfo::field_size() const { + return field_.size(); +} +inline void MessageAccessInfo::clear_field() { + field_.Clear(); +} +inline const ::google::protobuf::compiler::FieldAccessInfo& MessageAccessInfo::field(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.MessageAccessInfo.field) + return field_.Get(index); +} +inline ::google::protobuf::compiler::FieldAccessInfo* MessageAccessInfo::mutable_field(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.MessageAccessInfo.field) + return field_.Mutable(index); +} +inline ::google::protobuf::compiler::FieldAccessInfo* MessageAccessInfo::add_field() { + // @@protoc_insertion_point(field_add:google.protobuf.compiler.MessageAccessInfo.field) + return field_.Add(); +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::FieldAccessInfo >* +MessageAccessInfo::mutable_field() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.compiler.MessageAccessInfo.field) + return &field_; +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::FieldAccessInfo >& +MessageAccessInfo::field() const { + // @@protoc_insertion_point(field_list:google.protobuf.compiler.MessageAccessInfo.field) + return field_; +} + +// ------------------------------------------------------------------- + +// AccessInfo + +// repeated .google.protobuf.compiler.MessageAccessInfo message = 1; +inline int AccessInfo::message_size() const { + return message_.size(); +} +inline void AccessInfo::clear_message() { + message_.Clear(); +} +inline const ::google::protobuf::compiler::MessageAccessInfo& AccessInfo::message(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.AccessInfo.message) + return message_.Get(index); +} +inline ::google::protobuf::compiler::MessageAccessInfo* AccessInfo::mutable_message(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.AccessInfo.message) + return message_.Mutable(index); +} +inline ::google::protobuf::compiler::MessageAccessInfo* AccessInfo::add_message() { + // @@protoc_insertion_point(field_add:google.protobuf.compiler.AccessInfo.message) + return message_.Add(); +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::MessageAccessInfo >* +AccessInfo::mutable_message() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.compiler.AccessInfo.message) + return &message_; +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::MessageAccessInfo >& +AccessInfo::message() const { + // @@protoc_insertion_point(field_list:google.protobuf.compiler.AccessInfo.message) + return message_; +} + +#endif // !PROTOBUF_INLINE_NOT_IN_HEADERS +// ------------------------------------------------------------------- + +// ------------------------------------------------------------------- + + +// @@protoc_insertion_point(namespace_scope) + + +} // namespace compiler +} // namespace protobuf +} // namespace google + +// @@protoc_insertion_point(global_scope) + +#endif // PROTOBUF_google_2fprotobuf_2fcompiler_2fprofile_2eproto__INCLUDED diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/profile.proto b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/profile.proto new file mode 100644 index 00000000000000..09ebe091b8089e --- /dev/null +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/profile.proto @@ -0,0 +1,68 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: seongkim@google.com (Seong Beom Kim) +// +// protoc (Protocol Compiler) can generate more efficient code +// if it knows how a workload accesses fields of a message; +// e.g. some much more frequently than others. +// +// Protos defined here describe the access information per message +// and per field. Note that one can use any methods to collect +// the access patterns like CPU profiling, instrumented build, etc. + +syntax = "proto2"; + +package google.protobuf.compiler; + +// To convey the access pattern of a field, it classifies +// the type of the accessor methods into getters, setters and +// configs. Getters and setters read and write the field +// respectively and other operations like checking if the field +// exists are considered as configs. +message FieldAccessInfo { + optional string name = 1; + optional uint64 getters_count = 2; + optional uint64 setters_count = 3; + optional uint64 configs_count = 4; +} + +// "count" correlates with how many samples an access info has +// for a message. High "count" means more confident optimization +// based on the info. +message MessageAccessInfo { + optional string name = 1; + optional uint64 count = 2; + repeated FieldAccessInfo field = 3; +} + +message AccessInfo { + repeated MessageAccessInfo message = 1; +} diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/python/python_generator.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/python/python_generator.cc index f83f155a822762..21a7e158c7f0ef 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/python/python_generator.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/python/python_generator.cc @@ -445,8 +445,6 @@ void Generator::PrintFileDescriptor() const { printer_->Outdent(); printer_->Print(")\n"); - printer_->Print("_sym_db.RegisterFileDescriptor($name$)\n", "name", - kDescriptorKey); printer_->Print("\n"); } @@ -999,6 +997,10 @@ void Generator::FixForeignFieldsInDescriptors() const { for (int i = 0; i < file_->extension_count(); ++i) { AddExtensionToFileDescriptor(*file_->extension(i)); } + // TODO(jieluo): Move this register to PrintFileDescriptor() when + // FieldDescriptor.file is added in generated file. + printer_->Print("_sym_db.RegisterFileDescriptor($name$)\n", "name", + kDescriptorKey); printer_->Print("\n"); } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/test_plugin.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/test_plugin.cc index 4830fd70a0df08..c676ce8ce9f435 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/test_plugin.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/test_plugin.cc @@ -37,7 +37,6 @@ #include #include #include -#include int main(int argc, char* argv[]) { #ifdef _MSC_VER diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/zip_writer.cc b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/zip_writer.cc index 07d52b18cd7d40..458cced29d2b11 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/zip_writer.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/zip_writer.cc @@ -28,6 +28,36 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + // Author: ambrose@google.com (Ambrose Feinstein), // kenton@google.com (Kenton Varda) // diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/zip_writer.h b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/zip_writer.h index 737f4d42f3793d..03db4d573cc065 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/compiler/zip_writer.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/compiler/zip_writer.h @@ -28,6 +28,36 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + // Author: kenton@google.com (Kenton Varda) #include diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.cc b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.cc index c87327ce010e31..6a807926ad622d 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.cc @@ -72,6 +72,79 @@ namespace google { namespace protobuf { +struct Symbol { + enum Type { + NULL_SYMBOL, + MESSAGE, + FIELD, + ONEOF, + ENUM, + ENUM_VALUE, + SERVICE, + METHOD, + PACKAGE + }; + Type type; + union { + const Descriptor* descriptor; + const FieldDescriptor* field_descriptor; + const OneofDescriptor* oneof_descriptor; + const EnumDescriptor* enum_descriptor; + const EnumValueDescriptor* enum_value_descriptor; + const ServiceDescriptor* service_descriptor; + const MethodDescriptor* method_descriptor; + const FileDescriptor* package_file_descriptor; + }; + + inline Symbol() : type(NULL_SYMBOL) { descriptor = NULL; } + inline bool IsNull() const { return type == NULL_SYMBOL; } + inline bool IsType() const { return type == MESSAGE || type == ENUM; } + inline bool IsAggregate() const { + return type == MESSAGE || type == PACKAGE || type == ENUM || + type == SERVICE; + } + +#define CONSTRUCTOR(TYPE, TYPE_CONSTANT, FIELD) \ + inline explicit Symbol(const TYPE* value) { \ + type = TYPE_CONSTANT; \ + this->FIELD = value; \ + } + + CONSTRUCTOR(Descriptor, MESSAGE, descriptor) + CONSTRUCTOR(FieldDescriptor, FIELD, field_descriptor) + CONSTRUCTOR(OneofDescriptor, ONEOF, oneof_descriptor) + CONSTRUCTOR(EnumDescriptor, ENUM, enum_descriptor) + CONSTRUCTOR(EnumValueDescriptor, ENUM_VALUE, enum_value_descriptor) + CONSTRUCTOR(ServiceDescriptor, SERVICE, service_descriptor) + CONSTRUCTOR(MethodDescriptor, METHOD, method_descriptor) + CONSTRUCTOR(FileDescriptor, PACKAGE, package_file_descriptor) +#undef CONSTRUCTOR + + const FileDescriptor* GetFile() const { + switch (type) { + case NULL_SYMBOL: + return NULL; + case MESSAGE: + return descriptor->file(); + case FIELD: + return field_descriptor->file(); + case ONEOF: + return oneof_descriptor->containing_type()->file(); + case ENUM: + return enum_descriptor->file(); + case ENUM_VALUE: + return enum_value_descriptor->type()->file(); + case SERVICE: + return service_descriptor->file(); + case METHOD: + return method_descriptor->service()->file(); + case PACKAGE: + return package_file_descriptor; + } + return NULL; + } +}; + const FieldDescriptor::CppType FieldDescriptor::kTypeToCppTypeMap[MAX_TYPE + 1] = { static_cast(0), // 0 is reserved for errors @@ -369,65 +442,6 @@ struct PointerStringPairHash { }; -struct Symbol { - enum Type { - NULL_SYMBOL, MESSAGE, FIELD, ONEOF, ENUM, ENUM_VALUE, SERVICE, METHOD, - PACKAGE - }; - Type type; - union { - const Descriptor* descriptor; - const FieldDescriptor* field_descriptor; - const OneofDescriptor* oneof_descriptor; - const EnumDescriptor* enum_descriptor; - const EnumValueDescriptor* enum_value_descriptor; - const ServiceDescriptor* service_descriptor; - const MethodDescriptor* method_descriptor; - const FileDescriptor* package_file_descriptor; - }; - - inline Symbol() : type(NULL_SYMBOL) { descriptor = NULL; } - inline bool IsNull() const { return type == NULL_SYMBOL; } - inline bool IsType() const { - return type == MESSAGE || type == ENUM; - } - inline bool IsAggregate() const { - return type == MESSAGE || type == PACKAGE - || type == ENUM || type == SERVICE; - } - -#define CONSTRUCTOR(TYPE, TYPE_CONSTANT, FIELD) \ - inline explicit Symbol(const TYPE* value) { \ - type = TYPE_CONSTANT; \ - this->FIELD = value; \ - } - - CONSTRUCTOR(Descriptor , MESSAGE , descriptor ) - CONSTRUCTOR(FieldDescriptor , FIELD , field_descriptor ) - CONSTRUCTOR(OneofDescriptor , ONEOF , oneof_descriptor ) - CONSTRUCTOR(EnumDescriptor , ENUM , enum_descriptor ) - CONSTRUCTOR(EnumValueDescriptor, ENUM_VALUE, enum_value_descriptor ) - CONSTRUCTOR(ServiceDescriptor , SERVICE , service_descriptor ) - CONSTRUCTOR(MethodDescriptor , METHOD , method_descriptor ) - CONSTRUCTOR(FileDescriptor , PACKAGE , package_file_descriptor) -#undef CONSTRUCTOR - - const FileDescriptor* GetFile() const { - switch (type) { - case NULL_SYMBOL: return NULL; - case MESSAGE : return descriptor ->file(); - case FIELD : return field_descriptor ->file(); - case ONEOF : return oneof_descriptor ->containing_type()->file(); - case ENUM : return enum_descriptor ->file(); - case ENUM_VALUE : return enum_value_descriptor->type()->file(); - case SERVICE : return service_descriptor ->file(); - case METHOD : return method_descriptor ->service()->file(); - case PACKAGE : return package_file_descriptor; - } - return NULL; - } -}; - const Symbol kNullSymbol; typedef hash_map strings_; // All strings in the pool. std::vector messages_; // All messages in the pool. + std::vector + once_dynamics_; // All GoogleOnceDynamics in the pool. std::vector file_tables_; // All file tables in the pool. std::vector allocations_; // All other memory allocated in the pool. @@ -632,19 +652,20 @@ class DescriptorPool::Tables { struct CheckPoint { explicit CheckPoint(const Tables* tables) - : strings_before_checkpoint(tables->strings_.size()), - messages_before_checkpoint(tables->messages_.size()), - file_tables_before_checkpoint(tables->file_tables_.size()), - allocations_before_checkpoint(tables->allocations_.size()), - pending_symbols_before_checkpoint( - tables->symbols_after_checkpoint_.size()), - pending_files_before_checkpoint( - tables->files_after_checkpoint_.size()), - pending_extensions_before_checkpoint( - tables->extensions_after_checkpoint_.size()) { - } + : strings_before_checkpoint(tables->strings_.size()), + messages_before_checkpoint(tables->messages_.size()), + once_dynamics_before_checkpoint(tables->once_dynamics_.size()), + file_tables_before_checkpoint(tables->file_tables_.size()), + allocations_before_checkpoint(tables->allocations_.size()), + pending_symbols_before_checkpoint( + tables->symbols_after_checkpoint_.size()), + pending_files_before_checkpoint( + tables->files_after_checkpoint_.size()), + pending_extensions_before_checkpoint( + tables->extensions_after_checkpoint_.size()) {} int strings_before_checkpoint; int messages_before_checkpoint; + int once_dynamics_before_checkpoint; int file_tables_before_checkpoint; int allocations_before_checkpoint; int pending_symbols_before_checkpoint; @@ -767,6 +788,7 @@ DescriptorPool::Tables::~Tables() { } STLDeleteElements(&strings_); STLDeleteElements(&file_tables_); + STLDeleteElements(&once_dynamics_); } FileDescriptorTables::FileDescriptorTables() @@ -855,6 +877,9 @@ void DescriptorPool::Tables::RollbackToLastCheckpoint() { STLDeleteContainerPointers( messages_.begin() + checkpoint.messages_before_checkpoint, messages_.end()); + STLDeleteContainerPointers( + once_dynamics_.begin() + checkpoint.once_dynamics_before_checkpoint, + once_dynamics_.end()); STLDeleteContainerPointers( file_tables_.begin() + checkpoint.file_tables_before_checkpoint, file_tables_.end()); @@ -866,6 +891,7 @@ void DescriptorPool::Tables::RollbackToLastCheckpoint() { strings_.resize(checkpoint.strings_before_checkpoint); messages_.resize(checkpoint.messages_before_checkpoint); + once_dynamics_.resize(checkpoint.once_dynamics_before_checkpoint); file_tables_.resize(checkpoint.file_tables_before_checkpoint); allocations_.resize(checkpoint.allocations_before_checkpoint); checkpoints_.pop_back(); @@ -1104,6 +1130,12 @@ string* DescriptorPool::Tables::AllocateString(const string& value) { return result; } +GoogleOnceDynamic* DescriptorPool::Tables::AllocateOnceDynamic() { + GoogleOnceDynamic* result = new GoogleOnceDynamic(); + once_dynamics_.push_back(result); + return result; +} + template Type* DescriptorPool::Tables::AllocateMessage(Type* /* dummy */) { Type* result = new Type; @@ -1157,8 +1189,10 @@ DescriptorPool::DescriptorPool() underlay_(NULL), tables_(new Tables), enforce_dependencies_(true), + lazily_build_dependencies_(false), allow_unknown_(false), - enforce_weak_(false) {} + enforce_weak_(false), + disallow_enforce_utf8_(false) {} DescriptorPool::DescriptorPool(DescriptorDatabase* fallback_database, ErrorCollector* error_collector) @@ -1168,8 +1202,10 @@ DescriptorPool::DescriptorPool(DescriptorDatabase* fallback_database, underlay_(NULL), tables_(new Tables), enforce_dependencies_(true), + lazily_build_dependencies_(false), allow_unknown_(false), - enforce_weak_(false) { + enforce_weak_(false), + disallow_enforce_utf8_(false) { } DescriptorPool::DescriptorPool(const DescriptorPool* underlay) @@ -1179,8 +1215,10 @@ DescriptorPool::DescriptorPool(const DescriptorPool* underlay) underlay_(underlay), tables_(new Tables), enforce_dependencies_(true), + lazily_build_dependencies_(false), allow_unknown_(false), - enforce_weak_(false) {} + enforce_weak_(false), + disallow_enforce_utf8_(false) {} DescriptorPool::~DescriptorPool() { if (mutex_ != NULL) delete mutex_; @@ -1225,6 +1263,7 @@ void DeleteGeneratedPool() { static void InitGeneratedPool() { generated_database_ = new EncodedDescriptorDatabase; generated_pool_ = new DescriptorPool(generated_database_); + generated_pool_->InternalSetLazilyBuildDependencies(); internal::OnShutdown(&DeleteGeneratedPool); } @@ -3023,15 +3062,16 @@ class DescriptorBuilder { // - Search the pool's underlay if not found in tables_. // - Insure that the resulting Symbol is from one of the file's declared // dependencies. - Symbol FindSymbol(const string& name); + Symbol FindSymbol(const string& name, bool build_it = true); // Like FindSymbol() but does not require that the symbol is in one of the // file's declared dependencies. - Symbol FindSymbolNotEnforcingDeps(const string& name); + Symbol FindSymbolNotEnforcingDeps(const string& name, bool build_it = true); // This implements the body of FindSymbolNotEnforcingDeps(). Symbol FindSymbolNotEnforcingDepsHelper(const DescriptorPool* pool, - const string& name); + const string& name, + bool build_it = true); // Like FindSymbol(), but looks up the name relative to some other symbol // name. This first searches siblings of relative_to, then siblings of its @@ -3047,31 +3087,21 @@ class DescriptorBuilder { // that LookupSymbol may still return a non-type symbol in LOOKUP_TYPES mode, // if it believes that's all it could refer to. The caller should always // check that it receives the type of symbol it was expecting. - enum PlaceholderType { - PLACEHOLDER_MESSAGE, - PLACEHOLDER_ENUM, - PLACEHOLDER_EXTENDABLE_MESSAGE - }; enum ResolveMode { LOOKUP_ALL, LOOKUP_TYPES }; Symbol LookupSymbol(const string& name, const string& relative_to, - PlaceholderType placeholder_type = PLACEHOLDER_MESSAGE, - ResolveMode resolve_mode = LOOKUP_ALL); + DescriptorPool::PlaceholderType placeholder_type = + DescriptorPool::PLACEHOLDER_MESSAGE, + ResolveMode resolve_mode = LOOKUP_ALL, + bool build_it = true); // Like LookupSymbol() but will not return a placeholder even if // AllowUnknownDependencies() has been used. Symbol LookupSymbolNoPlaceholder(const string& name, const string& relative_to, - ResolveMode resolve_mode = LOOKUP_ALL); - - // Creates a placeholder type suitable for return from LookupSymbol(). May - // return kNullSymbol if the name is not a valid type name. - Symbol NewPlaceholder(const string& name, PlaceholderType placeholder_type); - - // Creates a placeholder file. Never returns NULL. This is used when an - // import is not found and AllowUnknownDependencies() is enabled. - FileDescriptor* NewPlaceholderFile(const string& name); + ResolveMode resolve_mode = LOOKUP_ALL, + bool build_it = true); // Calls tables_->AddSymbol() and records an error if it fails. Returns // true if successful or false if failed, though most callers can ignore @@ -3093,10 +3123,6 @@ class DescriptorBuilder { void ValidateSymbolName(const string& name, const string& full_name, const Message& proto); - // Like ValidateSymbolName(), but the name is allowed to contain periods and - // an error is indicated by returning false (not recording the error). - bool ValidateQualifiedName(const string& name); - // Used by BUILD_ARRAY macro (below) to avoid having to have the type // specified as a macro parameter. template @@ -3495,7 +3521,7 @@ void DescriptorBuilder::RecordPublicDependencies(const FileDescriptor* file) { } Symbol DescriptorBuilder::FindSymbolNotEnforcingDepsHelper( - const DescriptorPool* pool, const string& name) { + const DescriptorPool* pool, const string& name, bool build_it) { // If we are looking at an underlay, we must lock its mutex_, since we are // accessing the underlay's tables_ directly. MutexLockMaybe lock((pool == pool_) ? NULL : pool->mutex_); @@ -3507,12 +3533,14 @@ Symbol DescriptorBuilder::FindSymbolNotEnforcingDepsHelper( } if (result.IsNull()) { - // In theory, we shouldn't need to check fallback_database_ because the - // symbol should be in one of its file's direct dependencies, and we have - // already loaded those by the time we get here. But we check anyway so - // that we can generate better error message when dependencies are missing - // (i.e., "missing dependency" rather than "type is not defined"). - if (pool->TryFindSymbolInFallbackDatabase(name)) { + // With lazily_build_dependencies_, a symbol lookup at cross link time is + // not guaranteed to be successful. In most cases, build_it will be false, + // which intentionally prevents us from building an import until it's + // actually needed. In some cases, like registering an extension, we want + // to build the file containing the symbol, and build_it will be set. + // Also, build_it will be true when !lazily_build_dependencies_, to provide + // better error reporting of missing dependencies. + if (build_it && pool->TryFindSymbolInFallbackDatabase(name)) { result = pool->tables_->FindSymbol(name); } } @@ -3520,17 +3548,18 @@ Symbol DescriptorBuilder::FindSymbolNotEnforcingDepsHelper( return result; } -Symbol DescriptorBuilder::FindSymbolNotEnforcingDeps(const string& name) { - return FindSymbolNotEnforcingDepsHelper(pool_, name); +Symbol DescriptorBuilder::FindSymbolNotEnforcingDeps(const string& name, + bool build_it) { + return FindSymbolNotEnforcingDepsHelper(pool_, name, build_it); } -Symbol DescriptorBuilder::FindSymbol(const string& name) { - Symbol result = FindSymbolNotEnforcingDeps(name); +Symbol DescriptorBuilder::FindSymbol(const string& name, bool build_it) { + Symbol result = FindSymbolNotEnforcingDeps(name, build_it); if (result.IsNull()) return result; if (!pool_->enforce_dependencies_) { - // Hack for CompilerUpgrader. + // Hack for CompilerUpgrader, and also used for lazily_build_dependencies_ return result; } @@ -3564,14 +3593,16 @@ Symbol DescriptorBuilder::FindSymbol(const string& name) { return kNullSymbol; } -Symbol DescriptorBuilder::LookupSymbolNoPlaceholder( - const string& name, const string& relative_to, ResolveMode resolve_mode) { +Symbol DescriptorBuilder::LookupSymbolNoPlaceholder(const string& name, + const string& relative_to, + ResolveMode resolve_mode, + bool build_it) { possible_undeclared_dependency_ = NULL; undefine_resolved_name_.clear(); - if (name.size() > 0 && name[0] == '.') { + if (!name.empty() && name[0] == '.') { // Fully-qualified name. - return FindSymbol(name.substr(1)); + return FindSymbol(name.substr(1), build_it); } // If name is something like "Foo.Bar.baz", and symbols named "Foo" are @@ -3599,7 +3630,7 @@ Symbol DescriptorBuilder::LookupSymbolNoPlaceholder( // Chop off the last component of the scope. string::size_type dot_pos = scope_to_try.find_last_of('.'); if (dot_pos == string::npos) { - return FindSymbol(name); + return FindSymbol(name, build_it); } else { scope_to_try.erase(dot_pos); } @@ -3608,7 +3639,7 @@ Symbol DescriptorBuilder::LookupSymbolNoPlaceholder( string::size_type old_size = scope_to_try.size(); scope_to_try.append(1, '.'); scope_to_try.append(first_part_of_name); - Symbol result = FindSymbol(scope_to_try); + Symbol result = FindSymbol(scope_to_try, build_it); if (!result.IsNull()) { if (first_part_of_name.size() < name.size()) { // name is a compound symbol, of which we only found the first part. @@ -3616,7 +3647,7 @@ Symbol DescriptorBuilder::LookupSymbolNoPlaceholder( if (result.IsAggregate()) { scope_to_try.append(name, first_part_of_name.size(), name.size() - first_part_of_name.size()); - result = FindSymbol(scope_to_try); + result = FindSymbol(scope_to_try, build_it); if (result.IsNull()) { undefine_resolved_name_ = scope_to_try; } @@ -3640,19 +3671,49 @@ Symbol DescriptorBuilder::LookupSymbolNoPlaceholder( Symbol DescriptorBuilder::LookupSymbol( const string& name, const string& relative_to, - PlaceholderType placeholder_type, ResolveMode resolve_mode) { - Symbol result = LookupSymbolNoPlaceholder( - name, relative_to, resolve_mode); + DescriptorPool::PlaceholderType placeholder_type, ResolveMode resolve_mode, + bool build_it) { + Symbol result = + LookupSymbolNoPlaceholder(name, relative_to, resolve_mode, build_it); if (result.IsNull() && pool_->allow_unknown_) { // Not found, but AllowUnknownDependencies() is enabled. Return a // placeholder instead. - result = NewPlaceholder(name, placeholder_type); + result = pool_->NewPlaceholderWithMutexHeld(name, placeholder_type); } return result; } -Symbol DescriptorBuilder::NewPlaceholder(const string& name, - PlaceholderType placeholder_type) { +static bool ValidateQualifiedName(const string& name) { + bool last_was_period = false; + + for (int i = 0; i < name.size(); i++) { + // I don't trust isalnum() due to locales. :( + if (('a' <= name[i] && name[i] <= 'z') || + ('A' <= name[i] && name[i] <= 'Z') || + ('0' <= name[i] && name[i] <= '9') || (name[i] == '_')) { + last_was_period = false; + } else if (name[i] == '.') { + if (last_was_period) return false; + last_was_period = true; + } else { + return false; + } + } + + return !name.empty() && !last_was_period; +} + +Symbol DescriptorPool::NewPlaceholder(const string& name, + PlaceholderType placeholder_type) const { + MutexLockMaybe lock(mutex_); + return NewPlaceholderWithMutexHeld(name, placeholder_type); +} + +Symbol DescriptorPool::NewPlaceholderWithMutexHeld( + const string& name, PlaceholderType placeholder_type) const { + if (mutex_) { + mutex_->AssertHeld(); + } // Compute names. const string* placeholder_full_name; const string* placeholder_name; @@ -3678,7 +3739,7 @@ Symbol DescriptorBuilder::NewPlaceholder(const string& name, } // Create the placeholders. - FileDescriptor* placeholder_file = NewPlaceholderFile( + FileDescriptor* placeholder_file = NewPlaceholderFileWithMutexHeld( *placeholder_full_name + ".placeholder.proto"); placeholder_file->package_ = placeholder_package; @@ -3744,19 +3805,28 @@ Symbol DescriptorBuilder::NewPlaceholder(const string& name, } } -FileDescriptor* DescriptorBuilder::NewPlaceholderFile( - const string& name) { +FileDescriptor* DescriptorPool::NewPlaceholderFile(const string& name) const { + MutexLockMaybe lock(mutex_); + return NewPlaceholderFileWithMutexHeld(name); +} + +FileDescriptor* DescriptorPool::NewPlaceholderFileWithMutexHeld( + const string& name) const { + if (mutex_) { + mutex_->AssertHeld(); + } FileDescriptor* placeholder = tables_->Allocate(); memset(placeholder, 0, sizeof(*placeholder)); placeholder->name_ = tables_->AllocateString(name); placeholder->package_ = &internal::GetEmptyString(); - placeholder->pool_ = pool_; + placeholder->pool_ = this; placeholder->options_ = &FileOptions::default_instance(); placeholder->tables_ = &FileDescriptorTables::GetEmptyInstance(); placeholder->source_code_info_ = &SourceCodeInfo::default_instance(); placeholder->is_placeholder_ = true; placeholder->syntax_ = FileDescriptor::SYNTAX_PROTO2; + placeholder->finished_building_ = true; // All other fields are zero or NULL. return placeholder; @@ -3850,27 +3920,6 @@ void DescriptorBuilder::ValidateSymbolName( } } -bool DescriptorBuilder::ValidateQualifiedName(const string& name) { - bool last_was_period = false; - - for (int i = 0; i < name.size(); i++) { - // I don't trust isalnum() due to locales. :( - if (('a' <= name[i] && name[i] <= 'z') || - ('A' <= name[i] && name[i] <= 'Z') || - ('0' <= name[i] && name[i] <= '9') || - (name[i] == '_')) { - last_was_period = false; - } else if (name[i] == '.') { - if (last_was_period) return false; - last_was_period = true; - } else { - return false; - } - } - - return !name.empty() && !last_was_period; -} - // ------------------------------------------------------------------- // This generic implementation is good for all descriptors except @@ -4014,20 +4063,22 @@ const FileDescriptor* DescriptorBuilder::BuildFile( } } - // If we have a fallback_database_, attempt to load all dependencies now, - // before checkpointing tables_. This avoids confusion with recursive - // checkpoints. - if (pool_->fallback_database_ != NULL) { - tables_->pending_files_.push_back(proto.name()); - for (int i = 0; i < proto.dependency_size(); i++) { - if (tables_->FindFile(proto.dependency(i)) == NULL && - (pool_->underlay_ == NULL || - pool_->underlay_->FindFileByName(proto.dependency(i)) == NULL)) { - // We don't care what this returns since we'll find out below anyway. - pool_->TryFindFileInFallbackDatabase(proto.dependency(i)); + // If we have a fallback_database_, and we aren't doing lazy import building, + // attempt to load all dependencies now, before checkpointing tables_. This + // avoids confusion with recursive checkpoints. + if (!pool_->lazily_build_dependencies_) { + if (pool_->fallback_database_ != NULL) { + tables_->pending_files_.push_back(proto.name()); + for (int i = 0; i < proto.dependency_size(); i++) { + if (tables_->FindFile(proto.dependency(i)) == NULL && + (pool_->underlay_ == NULL || + pool_->underlay_->FindFileByName(proto.dependency(i)) == NULL)) { + // We don't care what this returns since we'll find out below anyway. + pool_->TryFindFileInFallbackDatabase(proto.dependency(i)); + } } + tables_->pending_files_.pop_back(); } - tables_->pending_files_.pop_back(); } return BuildFileImpl(proto); } @@ -4041,6 +4092,7 @@ const FileDescriptor* DescriptorBuilder::BuildFileImpl( file_ = result; result->is_placeholder_ = false; + result->finished_building_ = false; if (proto.has_source_code_info()) { SourceCodeInfo *info = tables_->AllocateMessage(); info->CopyFrom(proto.source_code_info()); @@ -4098,7 +4150,17 @@ const FileDescriptor* DescriptorBuilder::BuildFileImpl( std::set seen_dependencies; result->dependency_count_ = proto.dependency_size(); result->dependencies_ = - tables_->AllocateArray(proto.dependency_size()); + tables_->AllocateArray(proto.dependency_size()); + if (pool_->lazily_build_dependencies_) { + result->dependencies_once_ = tables_->AllocateOnceDynamic(); + result->dependencies_names_ = + tables_->AllocateArray(proto.dependency_size()); + memset(result->dependencies_names_, 0, + sizeof(*result->dependencies_names_) * proto.dependency_size()); + } else { + result->dependencies_once_ = NULL; + result->dependencies_names_ = NULL; + } unused_dependency_.clear(); std::set weak_deps; for (int i = 0; i < proto.weak_dependency_size(); ++i) { @@ -4125,9 +4187,12 @@ const FileDescriptor* DescriptorBuilder::BuildFileImpl( if (dependency == NULL) { if (pool_->allow_unknown_ || (!pool_->enforce_weak_ && weak_deps.find(i) != weak_deps.end())) { - dependency = NewPlaceholderFile(proto.dependency(i)); + dependency = + pool_->NewPlaceholderFileWithMutexHeld(proto.dependency(i)); } else { - AddImportError(proto, i); + if (!pool_->lazily_build_dependencies_) { + AddImportError(proto, i); + } } } else { // Add to unused_dependency_ to track unused imported files. @@ -4141,6 +4206,10 @@ const FileDescriptor* DescriptorBuilder::BuildFileImpl( } result->dependencies_[i] = dependency; + if (pool_->lazily_build_dependencies_ && !dependency) { + result->dependencies_names_[i] = + tables_->AllocateString(proto.dependency(i)); + } } // Check public dependencies. @@ -4153,7 +4222,12 @@ const FileDescriptor* DescriptorBuilder::BuildFileImpl( if (index >= 0 && index < proto.dependency_size()) { result->public_dependencies_[public_dependency_count++] = index; // Do not track unused imported files for public import. - unused_dependency_.erase(result->dependency(index)); + // Calling dependency(i) builds that file when doing lazy imports, + // need to avoid doing this. Unused dependency detection isn't done + // when building lazily, anyways. + if (!pool_->lazily_build_dependencies_) { + unused_dependency_.erase(result->dependency(index)); + } } else { AddError(proto.name(), proto, DescriptorPool::ErrorCollector::OTHER, @@ -4164,8 +4238,13 @@ const FileDescriptor* DescriptorBuilder::BuildFileImpl( // Build dependency set dependencies_.clear(); - for (int i = 0; i < result->dependency_count(); i++) { - RecordPublicDependencies(result->dependency(i)); + // We don't/can't do proper dependency error checking when + // lazily_build_dependencies_, and calling dependency(i) will force + // a dependency to be built, which we don't want. + if (!pool_->lazily_build_dependencies_) { + for (int i = 0; i < result->dependency_count(); i++) { + RecordPublicDependencies(result->dependency(i)); + } } // Check weak dependencies. @@ -4215,8 +4294,9 @@ const FileDescriptor* DescriptorBuilder::BuildFileImpl( options_to_interpret_.clear(); } - // Validate options. - if (!had_errors_) { + // Validate options. See comments at InternalSetLazilyBuildDependencies about + // error checking and lazy import building. + if (!had_errors_ && !pool_->lazily_build_dependencies_) { ValidateFileOptions(result, proto); } @@ -4229,7 +4309,9 @@ const FileDescriptor* DescriptorBuilder::BuildFileImpl( } - if (!unused_dependency_.empty()) { + // Again, see comments at InternalSetLazilyBuildDependencies about error + // checking. + if (!unused_dependency_.empty() && !pool_->lazily_build_dependencies_) { LogUnusedDependency(proto, result); } @@ -4238,6 +4320,7 @@ const FileDescriptor* DescriptorBuilder::BuildFileImpl( return NULL; } else { tables_->ClearLastCheckpoint(); + result->finished_building_ = true; return result; } } @@ -4447,6 +4530,10 @@ void DescriptorBuilder::BuildFieldOrExtension(const FieldDescriptorProto& proto, result->extension_scope_ = NULL; result->message_type_ = NULL; result->enum_type_ = NULL; + result->type_name_ = NULL; + result->type_once_ = NULL; + result->default_value_enum_ = NULL; + result->default_value_enum_name_ = NULL; result->has_default_value_ = proto.has_default_value(); if (proto.has_default_value() && result->is_repeated()) { @@ -4947,8 +5034,8 @@ void DescriptorBuilder::BuildMethod(const MethodDescriptorProto& proto, ValidateSymbolName(proto.name(), *full_name, proto); // These will be filled in when cross-linking. - result->input_type_ = NULL; - result->output_type_ = NULL; + result->input_type_.Init(); + result->output_type_.Init(); // Copy options. if (!proto.has_options()) { @@ -5081,9 +5168,13 @@ void DescriptorBuilder::CrossLinkField( field->options_ = &FieldOptions::default_instance(); } + // Add the field to the lowercase-name and camelcase-name tables. + file_tables_->AddFieldByStylizedNames(field); + if (proto.has_extendee()) { - Symbol extendee = LookupSymbol(proto.extendee(), field->full_name(), - PLACEHOLDER_EXTENDABLE_MESSAGE); + Symbol extendee = + LookupSymbol(proto.extendee(), field->full_name(), + DescriptorPool::PLACEHOLDER_EXTENDABLE_MESSAGE); if (extendee.IsNull()) { AddNotDefinedError(field->full_name(), proto, DescriptorPool::ErrorCollector::EXTENDEE, @@ -5129,9 +5220,10 @@ void DescriptorBuilder::CrossLinkField( proto.has_default_value(); Symbol type = - LookupSymbol(proto.type_name(), field->full_name(), - expecting_enum ? PLACEHOLDER_ENUM : PLACEHOLDER_MESSAGE, - LOOKUP_TYPES); + LookupSymbol(proto.type_name(), field->full_name(), + expecting_enum ? DescriptorPool::PLACEHOLDER_ENUM + : DescriptorPool::PLACEHOLDER_MESSAGE, + LOOKUP_TYPES, !pool_->lazily_build_dependencies_); // If the type is a weak type, we change the type to a google.protobuf.Empty field. if (type.IsNull() && !pool_->enforce_weak_ && proto.options().weak()) { @@ -5139,10 +5231,35 @@ void DescriptorBuilder::CrossLinkField( } if (type.IsNull()) { - AddNotDefinedError(field->full_name(), proto, - DescriptorPool::ErrorCollector::TYPE, - proto.type_name()); - return; + if (pool_->lazily_build_dependencies_) { + // Save the symbol names for later for lookup, and allocate the once + // object needed for the accessors. + string name = proto.type_name(); + if (!pool_->enforce_weak_ && proto.options().weak()) { + name = kNonLinkedWeakMessageReplacementName; + } + field->type_once_ = tables_->AllocateOnceDynamic(); + field->type_name_ = tables_->AllocateString(name); + if (proto.has_default_value()) { + field->default_value_enum_name_ = + tables_->AllocateString(proto.default_value()); + } + // AddFieldByNumber and AddExtension are done later in this function, + // and can/must be done if the field type was not found. The related + // error checking is not necessary when in lazily_build_dependencies_ + // mode, and can't be done without building the type's descriptor, + // which we don't want to do. + file_tables_->AddFieldByNumber(field); + if (field->is_extension()) { + tables_->AddExtension(field); + } + return; + } else { + AddNotDefinedError(field->full_name(), proto, + DescriptorPool::ErrorCollector::TYPE, + proto.type_name()); + return; + } } if (!proto.has_type()) { @@ -5238,7 +5355,10 @@ void DescriptorBuilder::CrossLinkField( // Add the field to the fields-by-number table. // Note: We have to do this *after* cross-linking because extensions do not - // know their containing type until now. + // know their containing type until now. If we're in + // lazily_build_dependencies_ mode, we're guaranteed there's no errors, so no + // risk to calling containing_type() or other accessors that will build + // dependencies. if (!file_tables_->AddFieldByNumber(field)) { const FieldDescriptor* conflicting_field = file_tables_->FindFieldByNumber(field->containing_type(), @@ -5284,9 +5404,6 @@ void DescriptorBuilder::CrossLinkField( } } } - - // Add the field to the lowercase-name and camelcase-name tables. - file_tables_->AddFieldByStylizedNames(field); } void DescriptorBuilder::CrossLinkEnum( @@ -5325,30 +5442,44 @@ void DescriptorBuilder::CrossLinkMethod( method->options_ = &MethodOptions::default_instance(); } - Symbol input_type = LookupSymbol(proto.input_type(), method->full_name()); + Symbol input_type = + LookupSymbol(proto.input_type(), method->full_name(), + DescriptorPool::PLACEHOLDER_MESSAGE, LOOKUP_ALL, + !pool_->lazily_build_dependencies_); if (input_type.IsNull()) { - AddNotDefinedError(method->full_name(), proto, - DescriptorPool::ErrorCollector::INPUT_TYPE, - proto.input_type()); + if (!pool_->lazily_build_dependencies_) { + AddNotDefinedError(method->full_name(), proto, + DescriptorPool::ErrorCollector::INPUT_TYPE, + proto.input_type()); + } else { + method->input_type_.SetLazy(proto.input_type(), file_); + } } else if (input_type.type != Symbol::MESSAGE) { AddError(method->full_name(), proto, DescriptorPool::ErrorCollector::INPUT_TYPE, "\"" + proto.input_type() + "\" is not a message type."); } else { - method->input_type_ = input_type.descriptor; + method->input_type_.Set(input_type.descriptor); } - Symbol output_type = LookupSymbol(proto.output_type(), method->full_name()); + Symbol output_type = + LookupSymbol(proto.output_type(), method->full_name(), + DescriptorPool::PLACEHOLDER_MESSAGE, LOOKUP_ALL, + !pool_->lazily_build_dependencies_); if (output_type.IsNull()) { - AddNotDefinedError(method->full_name(), proto, - DescriptorPool::ErrorCollector::OUTPUT_TYPE, - proto.output_type()); + if (!pool_->lazily_build_dependencies_) { + AddNotDefinedError(method->full_name(), proto, + DescriptorPool::ErrorCollector::OUTPUT_TYPE, + proto.output_type()); + } else { + method->output_type_.SetLazy(proto.output_type(), file_); + } } else if (output_type.type != Symbol::MESSAGE) { AddError(method->full_name(), proto, DescriptorPool::ErrorCollector::OUTPUT_TYPE, "\"" + proto.output_type() + "\" is not a message type."); } else { - method->output_type_ = output_type.descriptor; + method->output_type_.Set(output_type.descriptor); } } @@ -5539,8 +5670,12 @@ void DescriptorBuilder::ValidateMessageOptions(Descriptor* message, } } + void DescriptorBuilder::ValidateFieldOptions(FieldDescriptor* field, const FieldDescriptorProto& proto) { + if (pool_->lazily_build_dependencies_ && (!field || !field->message_type())) { + return; + } // Only message type fields may be lazy. if (field->options().lazy()) { if (field->type() != FieldDescriptor::TYPE_MESSAGE) { @@ -6553,5 +6688,165 @@ void DescriptorBuilder::LogUnusedDependency(const FileDescriptorProto& proto, } } +Symbol DescriptorPool::CrossLinkOnDemandHelper(const string& name, + bool expecting_enum) const { + string lookup_name = name; + if (!lookup_name.empty() && lookup_name[0] == '.') { + lookup_name = lookup_name.substr(1); + } + Symbol result = tables_->FindByNameHelper(this, lookup_name); + return result; +} + +// Handle the lazy import building for a message field whose type wasn't built +// at cross link time. If that was the case, we saved the name of the type to +// be looked up when the accessor for the type was called. Set type_, +// enum_type_, message_type_, and default_value_enum_ appropriately. +void FieldDescriptor::InternalTypeOnceInit() const { + GOOGLE_CHECK(file()->finished_building_ == true); + if (type_name_) { + Symbol result = file()->pool()->CrossLinkOnDemandHelper( + *type_name_, type_ == FieldDescriptor::TYPE_ENUM); + if (result.type == Symbol::MESSAGE) { + type_ = FieldDescriptor::TYPE_MESSAGE; + message_type_ = result.descriptor; + } else if (result.type == Symbol::ENUM) { + type_ = FieldDescriptor::TYPE_ENUM; + enum_type_ = result.enum_descriptor; + } + } + if (enum_type_ && !default_value_enum_) { + if (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. + string name = enum_type_->full_name(); + // Enum values reside in the same scope as the enum type. + string::size_type last_dot = name.find_last_of('.'); + if (last_dot != string::npos) { + name = name.substr(0, last_dot) + "." + *default_value_enum_name_; + } else { + name = *default_value_enum_name_; + } + Symbol result = file()->pool()->CrossLinkOnDemandHelper(name, true); + if (result.type == Symbol::ENUM_VALUE) { + default_value_enum_ = result.enum_value_descriptor; + } + } + 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); + } + } +} + +void FieldDescriptor::TypeOnceInit(const FieldDescriptor* to_init) { + to_init->InternalTypeOnceInit(); +} + +// message_type(), enum_type(), default_value_enum(), and type() +// all share the same GoogleOnceDynamic init path to do lazy +// import building and cross linking of a field of a message. +const Descriptor* FieldDescriptor::message_type() const { + if (type_once_) { + type_once_->Init(&FieldDescriptor::TypeOnceInit, this); + } + return message_type_; +} + +const EnumDescriptor* FieldDescriptor::enum_type() const { + if (type_once_) { + type_once_->Init(&FieldDescriptor::TypeOnceInit, this); + } + return enum_type_; +} + +const EnumValueDescriptor* FieldDescriptor::default_value_enum() const { + if (type_once_) { + type_once_->Init(&FieldDescriptor::TypeOnceInit, this); + } + return default_value_enum_; +} + +FieldDescriptor::Type FieldDescriptor::type() const { + if (type_once_) { + type_once_->Init(&FieldDescriptor::TypeOnceInit, this); + } + return type_; +} + +void FileDescriptor::InternalDependenciesOnceInit() const { + GOOGLE_CHECK(finished_building_ == true); + for (int i = 0; i < dependency_count(); i++) { + if (dependencies_names_[i]) { + dependencies_[i] = pool_->FindFileByName(*dependencies_names_[i]); + } + } +} + +void FileDescriptor::DependenciesOnceInit(const FileDescriptor* to_init) { + to_init->InternalDependenciesOnceInit(); +} + +const FileDescriptor* FileDescriptor::dependency(int index) const { + if (dependencies_once_) { + // Do once init for all indicies, as it's unlikely only a single index would + // be called, and saves on GoogleOnceDynamic allocations. + dependencies_once_->Init(&FileDescriptor::DependenciesOnceInit, this); + } + return dependencies_[index]; +} + +const Descriptor* MethodDescriptor::input_type() const { + return input_type_.Get(); +} + +const Descriptor* MethodDescriptor::output_type() const { + return output_type_.Get(); +} + + +namespace internal { +void LazyDescriptor::Set(const Descriptor* descriptor) { + GOOGLE_CHECK(!name_); + GOOGLE_CHECK(!once_); + GOOGLE_CHECK(!file_); + descriptor_ = descriptor; +} + +void LazyDescriptor::SetLazy(const string& name, const FileDescriptor* file) { + // verify Init() has been called and Set hasn't been called yet. + GOOGLE_CHECK(!descriptor_); + GOOGLE_CHECK(!file_); + GOOGLE_CHECK(!name_); + GOOGLE_CHECK(!once_); + GOOGLE_CHECK(file && file->pool_); + GOOGLE_CHECK(file->pool_->lazily_build_dependencies_); + GOOGLE_CHECK(!file->finished_building_); + file_ = file; + name_ = file->pool_->tables_->AllocateString(name); + once_ = file->pool_->tables_->AllocateOnceDynamic(); +} + +void LazyDescriptor::Once() { + if (once_) { + once_->Init(&LazyDescriptor::OnceStatic, this); + } +} + +void LazyDescriptor::OnceStatic(LazyDescriptor* lazy) { lazy->OnceInternal(); } + +void LazyDescriptor::OnceInternal() { + GOOGLE_CHECK(file_->finished_building_); + if (!descriptor_ && name_) { + Symbol result = file_->pool_->CrossLinkOnDemandHelper(*name_, false); + if (!result.IsNull() && result.type == Symbol::MESSAGE) { + descriptor_ = result.descriptor; + } + } +} +} // namespace internal + } // namespace protobuf } // namespace google diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.h b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.h index cc0996934676e4..7aea7344da584d 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.h @@ -63,6 +63,7 @@ #include #include #include +#include // TYPE_BOOL is defined in the MacOS's ConditionalMacros.h. #ifdef TYPE_BOOL @@ -110,6 +111,7 @@ class Message; // Defined in descriptor.cc class DescriptorBuilder; class FileDescriptorTables; +struct Symbol; // Defined in unknown_field_set.h. class UnknownField; @@ -165,6 +167,55 @@ struct DebugStringOptions { elide_oneof_body(false) {} }; +// A class to handle the simplest cases of a lazily linked descriptor +// for a message type that isn't built at the time of cross linking, +// which is needed when a pool has lazily_build_dependencies_ set. +// Must be instantiated as mutable in a descriptor. +namespace internal { +class LIBPROTOBUF_EXPORT LazyDescriptor { + public: + // Init function to be called at init time of a descriptor containing + // a LazyDescriptor. + void Init() { + descriptor_ = NULL; + name_ = NULL; + once_ = NULL; + file_ = NULL; + } + + // Sets the value of the descriptor if it is known during the descriptor + // building process. Not thread safe, should only be called during the + // descriptor build process. Should not be called after SetLazy has been + // called. + void Set(const Descriptor* descriptor); + + // Sets the information needed to lazily cross link the descriptor at a later + // time, SetLazy is not thread safe, should be called only once at descriptor + // build time if the symbol wasn't found and building of the file containing + // that type is delayed because lazily_build_dependencies_ is set on the pool. + // Should not be called after Set() has been called. + void SetLazy(const string& name, const FileDescriptor* file); + + // Returns the current value of the descriptor, thread-safe. If SetLazy(...) + // has been called, will do a one-time cross link of the type specified, + // building the descriptor file that contains the type if necessary. + inline const Descriptor* Get() { + Once(); + return descriptor_; + } + + private: + static void OnceStatic(LazyDescriptor* lazy); + void OnceInternal(); + void Once(); + + const Descriptor* descriptor_; + const string* name_; + GoogleOnceDynamic* once_; + const FileDescriptor* file_; +}; +} // namespace internal + // Describes a type of protocol message, or a particular group within a // message. To obtain the Descriptor for a given message object, call // Message::GetDescriptor(). Generated message classes also have a @@ -417,6 +468,7 @@ class LIBPROTOBUF_EXPORT Descriptor { // Must be constructed using DescriptorPool. Descriptor() {} friend class DescriptorBuilder; + friend class DescriptorPool; friend class EnumDescriptor; friend class FieldDescriptor; friend class OneofDescriptor; @@ -692,16 +744,21 @@ class LIBPROTOBUF_EXPORT FieldDescriptor { const string* json_name_; const FileDescriptor* file_; int number_; - Type type_; + GoogleOnceDynamic* type_once_; + static void TypeOnceInit(const FieldDescriptor* to_init); + void InternalTypeOnceInit() const; + mutable Type type_; Label label_; bool is_extension_; int index_in_oneof_; const Descriptor* containing_type_; const OneofDescriptor* containing_oneof_; const Descriptor* extension_scope_; - const Descriptor* message_type_; - const EnumDescriptor* enum_type_; + mutable const Descriptor* message_type_; + mutable const EnumDescriptor* enum_type_; const FieldOptions* options_; + const string* type_name_; + const string* default_value_enum_name_; // IMPORTANT: If you add a new field, make sure to search for all instances // of Allocate() and AllocateArray() in // descriptor.cc and update them to initialize the field. @@ -716,7 +773,7 @@ class LIBPROTOBUF_EXPORT FieldDescriptor { double default_value_double_; bool default_value_bool_; - const EnumValueDescriptor* default_value_enum_; + mutable const EnumValueDescriptor* default_value_enum_; const string* default_value_string_; }; @@ -918,6 +975,7 @@ class LIBPROTOBUF_EXPORT EnumDescriptor { friend class FieldDescriptor; friend class EnumValueDescriptor; friend class FileDescriptor; + friend class DescriptorPool; friend class internal::GeneratedMessageReflection; GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumDescriptor); }; @@ -994,6 +1052,7 @@ class LIBPROTOBUF_EXPORT EnumValueDescriptor { EnumValueDescriptor() {} friend class DescriptorBuilder; friend class EnumDescriptor; + friend class DescriptorPool; friend class FileDescriptorTables; GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumValueDescriptor); }; @@ -1144,8 +1203,8 @@ class LIBPROTOBUF_EXPORT MethodDescriptor { const string* name_; const string* full_name_; const ServiceDescriptor* service_; - const Descriptor* input_type_; - const Descriptor* output_type_; + mutable internal::LazyDescriptor input_type_; + mutable internal::LazyDescriptor output_type_; const MethodOptions* options_; bool client_streaming_; bool server_streaming_; @@ -1302,7 +1361,11 @@ class LIBPROTOBUF_EXPORT FileDescriptor { const string* package_; const DescriptorPool* pool_; int dependency_count_; - const FileDescriptor** dependencies_; + mutable const FileDescriptor** dependencies_; + const string** dependencies_names_; + GoogleOnceDynamic* dependencies_once_; + static void DependenciesOnceInit(const FileDescriptor* to_init); + void InternalDependenciesOnceInit() const; int public_dependency_count_; int* public_dependencies_; int weak_dependency_count_; @@ -1321,14 +1384,22 @@ class LIBPROTOBUF_EXPORT FileDescriptor { const FileDescriptorTables* tables_; const SourceCodeInfo* source_code_info_; + + // Indicates the FileDescriptor is completed building. Used to verify + // that type accessor functions that can possibly build a dependent file + // aren't called during the process of building the file. + bool finished_building_; + // IMPORTANT: If you add a new field, make sure to search for all instances // of Allocate() and AllocateArray() in // descriptor.cc and update them to initialize the field. FileDescriptor() {} friend class DescriptorBuilder; + friend class DescriptorPool; friend class Descriptor; friend class FieldDescriptor; + friend class internal::LazyDescriptor; friend class OneofDescriptor; friend class EnumDescriptor; friend class EnumValueDescriptor; @@ -1559,6 +1630,9 @@ class LIBPROTOBUF_EXPORT DescriptorPool { static void InternalAddGeneratedFile( const void* encoded_file_descriptor, int size); + // Disallow [enforce_utf8 = false] in .proto files. + void DisallowEnforceUtf8() { disallow_enforce_utf8_ = true; } + // For internal use only: Gets a non-const pointer to the generated pool. // This is called at static-initialization time only, so thread-safety is @@ -1571,6 +1645,21 @@ class LIBPROTOBUF_EXPORT DescriptorPool { // which it did not officially declare as dependencies. void InternalDontEnforceDependencies(); + // For internal use only: Enables lazy building of dependencies of a file. + // Delay the building of dependencies of a file descriptor until absolutely + // necessary, like when message_type() is called on a field that is defined + // in that dependency's file. This will cause functional issues if a proto + // or one of it's dependencies has errors. Should only be enabled for the + // generated_pool_ (because no descriptor build errors are guaranteed by + // the compilation generation process), testing, or if a lack of descriptor + // build errors can be guaranteed for a pool. + void InternalSetLazilyBuildDependencies() { + lazily_build_dependencies_ = true; + // This needs to be set when lazily building dependencies, as it breaks + // dependency checking. + InternalDontEnforceDependencies(); + } + // For internal use only. void internal_set_underlay(const DescriptorPool* underlay) { underlay_ = underlay; @@ -1589,10 +1678,13 @@ class LIBPROTOBUF_EXPORT DescriptorPool { private: friend class Descriptor; + friend class internal::LazyDescriptor; friend class FieldDescriptor; friend class EnumDescriptor; friend class ServiceDescriptor; + friend class MethodDescriptor; friend class FileDescriptor; + friend class StreamDescriptor; friend class DescriptorBuilder; friend class FileDescriptorTables; @@ -1616,6 +1708,28 @@ class LIBPROTOBUF_EXPORT DescriptorPool { const FileDescriptor* BuildFileFromDatabase( const FileDescriptorProto& proto) const; + // Helper for when lazily_build_dependencies_ is set, can look up a symbol + // after the file's descriptor is built, and can build the file where that + // symbol is defined if necessary. Will create a placeholder if the type + // doesn't exist in the fallback database, or the file doesn't build + // successfully. + Symbol CrossLinkOnDemandHelper(const string& name, bool expecting_enum) const; + + // Create a placeholder FileDescriptor of the specified name + FileDescriptor* NewPlaceholderFile(const string& name) const; + FileDescriptor* NewPlaceholderFileWithMutexHeld(const string& name) const; + + enum PlaceholderType { + PLACEHOLDER_MESSAGE, + PLACEHOLDER_ENUM, + PLACEHOLDER_EXTENDABLE_MESSAGE + }; + // Create a placeholder Descriptor of the specified name + Symbol NewPlaceholder(const string& name, + PlaceholderType placeholder_type) const; + Symbol NewPlaceholderWithMutexHeld(const string& name, + PlaceholderType placeholder_type) const; + // If fallback_database_ is NULL, this is NULL. Otherwise, this is a mutex // which must be locked while accessing tables_. Mutex* mutex_; @@ -1631,9 +1745,11 @@ class LIBPROTOBUF_EXPORT DescriptorPool { google::protobuf::scoped_ptr tables_; bool enforce_dependencies_; + bool lazily_build_dependencies_; bool allow_unknown_; bool enforce_weak_; std::set unused_import_track_files_; + bool disallow_enforce_utf8_; GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DescriptorPool); }; @@ -1693,15 +1809,12 @@ PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, camelcase_name) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, file, const FileDescriptor*) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, number, int) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, is_extension, bool) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, type, FieldDescriptor::Type) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, label, FieldDescriptor::Label) 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_ACCESSOR(FieldDescriptor, message_type, const Descriptor*) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, enum_type, const EnumDescriptor*) PROTOBUF_DEFINE_OPTIONS_ACCESSOR(FieldDescriptor, FieldOptions) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, has_default_value, bool) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, has_json_name, bool) @@ -1712,8 +1825,6 @@ PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_uint64, uint64) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_float , float ) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_double, double) PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_bool , bool ) -PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_enum, - const EnumValueDescriptor*) PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, default_value_string) PROTOBUF_DEFINE_STRING_ACCESSOR(OneofDescriptor, name) @@ -1749,8 +1860,6 @@ PROTOBUF_DEFINE_OPTIONS_ACCESSOR(ServiceDescriptor, ServiceOptions) PROTOBUF_DEFINE_STRING_ACCESSOR(MethodDescriptor, name) PROTOBUF_DEFINE_STRING_ACCESSOR(MethodDescriptor, full_name) PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, service, const ServiceDescriptor*) -PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, input_type, const Descriptor*) -PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, output_type, const Descriptor*) PROTOBUF_DEFINE_OPTIONS_ACCESSOR(MethodDescriptor, MethodOptions) PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, client_streaming, bool) PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, server_streaming, bool) @@ -1824,7 +1933,7 @@ inline bool FieldDescriptor::is_packable() const { // in the parent's array of children. inline int FieldDescriptor::index() const { if (!is_extension_) { - return static_cast(this - containing_type_->fields_); + return static_cast(this - containing_type()->fields_); } else if (extension_scope_ != NULL) { return static_cast(this - extension_scope_->extensions_); } else { @@ -1865,15 +1974,15 @@ inline int MethodDescriptor::index() const { } inline const char* FieldDescriptor::type_name() const { - return kTypeToName[type_]; + return kTypeToName[type()]; } inline FieldDescriptor::CppType FieldDescriptor::cpp_type() const { - return kTypeToCppTypeMap[type_]; + return kTypeToCppTypeMap[type()]; } inline const char* FieldDescriptor::cpp_type_name() const { - return kCppTypeToName[kTypeToCppTypeMap[type_]]; + return kCppTypeToName[kTypeToCppTypeMap[type()]]; } inline FieldDescriptor::CppType FieldDescriptor::TypeToCppType(Type type) { @@ -1895,18 +2004,14 @@ inline bool FieldDescriptor::IsTypePackable(Type field_type) { field_type != FieldDescriptor::TYPE_BYTES); } -inline const FileDescriptor* FileDescriptor::dependency(int index) const { - return dependencies_[index]; -} - inline const FileDescriptor* FileDescriptor::public_dependency( int index) const { - return dependencies_[public_dependencies_[index]]; + return dependency(public_dependencies_[index]); } inline const FileDescriptor* FileDescriptor::weak_dependency( int index) const { - return dependencies_[weak_dependencies_[index]]; + return dependency(weak_dependencies_[index]); } inline FileDescriptor::Syntax FileDescriptor::syntax() const { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.pb.cc b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.pb.cc index 57fbfd86cc658a..56c395e6b8ba7b 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.pb.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.pb.cc @@ -80,17 +80,57 @@ const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[6]; } // namespace +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField + const TableStruct::entries[] = { + {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0}, +}; + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField + const TableStruct::aux[] = { + ::google::protobuf::internal::AuxillaryParseTableField(), +}; +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const + TableStruct::schema[] = { + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, +}; + const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileDescriptorSet, _has_bits_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileDescriptorSet, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileDescriptorSet, file_), ~0u, GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileDescriptorProto, _has_bits_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileDescriptorProto, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileDescriptorProto, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileDescriptorProto, package_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileDescriptorProto, dependency_), @@ -119,6 +159,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DescriptorProto_ExtensionRange, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DescriptorProto_ExtensionRange, start_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DescriptorProto_ExtensionRange, end_), 0, @@ -127,6 +168,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DescriptorProto_ReservedRange, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DescriptorProto_ReservedRange, start_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DescriptorProto_ReservedRange, end_), 0, @@ -135,6 +177,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DescriptorProto, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DescriptorProto, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DescriptorProto, field_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DescriptorProto, extension_), @@ -159,6 +202,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldDescriptorProto, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldDescriptorProto, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldDescriptorProto, number_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldDescriptorProto, label_), @@ -173,8 +217,8 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { 6, 8, 9, - 1, 2, + 1, 3, 7, 4, @@ -183,6 +227,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(OneofDescriptorProto, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(OneofDescriptorProto, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(OneofDescriptorProto, options_), 0, @@ -191,6 +236,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumDescriptorProto, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumDescriptorProto, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumDescriptorProto, value_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumDescriptorProto, options_), @@ -201,6 +247,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumValueDescriptorProto, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumValueDescriptorProto, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumValueDescriptorProto, number_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumValueDescriptorProto, options_), @@ -211,6 +258,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServiceDescriptorProto, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServiceDescriptorProto, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServiceDescriptorProto, method_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServiceDescriptorProto, options_), @@ -221,6 +269,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MethodDescriptorProto, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MethodDescriptorProto, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MethodDescriptorProto, input_type_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MethodDescriptorProto, output_type_), @@ -237,6 +286,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileOptions, _internal_metadata_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileOptions, _extensions_), ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileOptions, java_package_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileOptions, java_outer_classname_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FileOptions, java_multiple_files_), @@ -275,6 +325,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageOptions, _internal_metadata_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageOptions, _extensions_), ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageOptions, message_set_wire_format_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageOptions, no_standard_descriptor_accessor_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageOptions, deprecated_), @@ -289,6 +340,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldOptions, _internal_metadata_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldOptions, _extensions_), ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldOptions, ctype_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldOptions, packed_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldOptions, jstype_), @@ -297,22 +349,24 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldOptions, weak_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldOptions, uninterpreted_option_), 0, - 2, 1, + 5, + 2, 3, 4, - 5, ~0u, GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(OneofOptions, _has_bits_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(OneofOptions, _internal_metadata_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(OneofOptions, _extensions_), ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(OneofOptions, uninterpreted_option_), ~0u, GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumOptions, _has_bits_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumOptions, _internal_metadata_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumOptions, _extensions_), ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumOptions, allow_alias_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumOptions, deprecated_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumOptions, uninterpreted_option_), @@ -323,6 +377,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumValueOptions, _internal_metadata_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumValueOptions, _extensions_), ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumValueOptions, deprecated_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumValueOptions, uninterpreted_option_), 0, @@ -331,6 +386,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServiceOptions, _internal_metadata_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServiceOptions, _extensions_), ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServiceOptions, deprecated_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ServiceOptions, uninterpreted_option_), 0, @@ -339,6 +395,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MethodOptions, _internal_metadata_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MethodOptions, _extensions_), ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MethodOptions, deprecated_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MethodOptions, idempotency_level_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MethodOptions, uninterpreted_option_), @@ -349,6 +406,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(UninterpretedOption_NamePart, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(UninterpretedOption_NamePart, name_part_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(UninterpretedOption_NamePart, is_extension_), 0, @@ -357,6 +415,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(UninterpretedOption, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(UninterpretedOption, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(UninterpretedOption, identifier_value_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(UninterpretedOption, positive_int_value_), @@ -375,6 +434,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SourceCodeInfo_Location, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SourceCodeInfo_Location, path_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SourceCodeInfo_Location, span_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SourceCodeInfo_Location, leading_comments_), @@ -389,12 +449,14 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SourceCodeInfo, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SourceCodeInfo, location_), ~0u, GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(GeneratedCodeInfo_Annotation, _has_bits_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(GeneratedCodeInfo_Annotation, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(GeneratedCodeInfo_Annotation, path_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(GeneratedCodeInfo_Annotation, source_file_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(GeneratedCodeInfo_Annotation, begin_), @@ -407,36 +469,37 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(GeneratedCodeInfo, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(GeneratedCodeInfo, annotation_), ~0u, }; static const ::google::protobuf::internal::MigrationSchema schemas[] = { - { 0, 5, sizeof(FileDescriptorSet)}, - { 6, 22, sizeof(FileDescriptorProto)}, - { 34, 40, sizeof(DescriptorProto_ExtensionRange)}, - { 42, 48, sizeof(DescriptorProto_ReservedRange)}, - { 50, 64, sizeof(DescriptorProto)}, - { 74, 88, sizeof(FieldDescriptorProto)}, - { 98, 104, sizeof(OneofDescriptorProto)}, - { 106, 113, sizeof(EnumDescriptorProto)}, - { 116, 123, sizeof(EnumValueDescriptorProto)}, - { 126, 133, sizeof(ServiceDescriptorProto)}, - { 136, 146, sizeof(MethodDescriptorProto)}, - { 152, 173, sizeof(FileOptions)}, - { 190, 199, sizeof(MessageOptions)}, - { 204, 215, sizeof(FieldOptions)}, - { 222, 227, sizeof(OneofOptions)}, - { 228, 235, sizeof(EnumOptions)}, - { 238, 244, sizeof(EnumValueOptions)}, - { 246, 252, sizeof(ServiceOptions)}, - { 254, 261, sizeof(MethodOptions)}, - { 264, 270, sizeof(UninterpretedOption_NamePart)}, - { 272, 283, sizeof(UninterpretedOption)}, - { 290, 299, sizeof(SourceCodeInfo_Location)}, - { 304, 309, sizeof(SourceCodeInfo)}, - { 310, 318, sizeof(GeneratedCodeInfo_Annotation)}, - { 322, 327, sizeof(GeneratedCodeInfo)}, + { 0, 6, sizeof(FileDescriptorSet)}, + { 7, 24, sizeof(FileDescriptorProto)}, + { 36, 43, sizeof(DescriptorProto_ExtensionRange)}, + { 45, 52, sizeof(DescriptorProto_ReservedRange)}, + { 54, 69, sizeof(DescriptorProto)}, + { 79, 94, sizeof(FieldDescriptorProto)}, + { 104, 111, sizeof(OneofDescriptorProto)}, + { 113, 121, sizeof(EnumDescriptorProto)}, + { 124, 132, sizeof(EnumValueDescriptorProto)}, + { 135, 143, sizeof(ServiceDescriptorProto)}, + { 146, 157, sizeof(MethodDescriptorProto)}, + { 163, 185, sizeof(FileOptions)}, + { 202, 212, sizeof(MessageOptions)}, + { 217, 229, sizeof(FieldOptions)}, + { 236, 242, sizeof(OneofOptions)}, + { 243, 251, sizeof(EnumOptions)}, + { 254, 261, sizeof(EnumValueOptions)}, + { 263, 270, sizeof(ServiceOptions)}, + { 272, 280, sizeof(MethodOptions)}, + { 283, 290, sizeof(UninterpretedOption_NamePart)}, + { 292, 304, sizeof(UninterpretedOption)}, + { 311, 321, sizeof(SourceCodeInfo_Location)}, + { 326, 332, sizeof(SourceCodeInfo)}, + { 333, 342, sizeof(GeneratedCodeInfo_Annotation)}, + { 346, 352, sizeof(GeneratedCodeInfo)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -681,67 +744,67 @@ void AddDescriptorsImpl() { "\001(\t\022C\n\024uninterpreted_option\030\347\007 \003(\0132$.goo" "gle.protobuf.UninterpretedOption\":\n\014Opti" "mizeMode\022\t\n\005SPEED\020\001\022\r\n\tCODE_SIZE\020\002\022\020\n\014LI" - "TE_RUNTIME\020\003*\t\010\350\007\020\200\200\200\200\002J\004\010&\020\'\"\354\001\n\016Messag" + "TE_RUNTIME\020\003*\t\010\350\007\020\200\200\200\200\002J\004\010&\020\'\"\362\001\n\016Messag" "eOptions\022&\n\027message_set_wire_format\030\001 \001(" "\010:\005false\022.\n\037no_standard_descriptor_acces" "sor\030\002 \001(\010:\005false\022\031\n\ndeprecated\030\003 \001(\010:\005fa" "lse\022\021\n\tmap_entry\030\007 \001(\010\022C\n\024uninterpreted_" "option\030\347\007 \003(\0132$.google.protobuf.Uninterp" - "retedOption*\t\010\350\007\020\200\200\200\200\002J\004\010\010\020\t\"\236\003\n\014FieldOp" - "tions\022:\n\005ctype\030\001 \001(\0162#.google.protobuf.F" - "ieldOptions.CType:\006STRING\022\016\n\006packed\030\002 \001(" - "\010\022\?\n\006jstype\030\006 \001(\0162$.google.protobuf.Fiel" - "dOptions.JSType:\tJS_NORMAL\022\023\n\004lazy\030\005 \001(\010" - ":\005false\022\031\n\ndeprecated\030\003 \001(\010:\005false\022\023\n\004we" - "ak\030\n \001(\010:\005false\022C\n\024uninterpreted_option\030" - "\347\007 \003(\0132$.google.protobuf.UninterpretedOp" - "tion\"/\n\005CType\022\n\n\006STRING\020\000\022\010\n\004CORD\020\001\022\020\n\014S" - "TRING_PIECE\020\002\"5\n\006JSType\022\r\n\tJS_NORMAL\020\000\022\r" - "\n\tJS_STRING\020\001\022\r\n\tJS_NUMBER\020\002*\t\010\350\007\020\200\200\200\200\002J" - "\004\010\004\020\005\"^\n\014OneofOptions\022C\n\024uninterpreted_o" + "retedOption*\t\010\350\007\020\200\200\200\200\002J\004\010\010\020\tJ\004\010\t\020\n\"\236\003\n\014F" + "ieldOptions\022:\n\005ctype\030\001 \001(\0162#.google.prot" + "obuf.FieldOptions.CType:\006STRING\022\016\n\006packe" + "d\030\002 \001(\010\022\?\n\006jstype\030\006 \001(\0162$.google.protobu" + "f.FieldOptions.JSType:\tJS_NORMAL\022\023\n\004lazy" + "\030\005 \001(\010:\005false\022\031\n\ndeprecated\030\003 \001(\010:\005false" + "\022\023\n\004weak\030\n \001(\010:\005false\022C\n\024uninterpreted_o" "ption\030\347\007 \003(\0132$.google.protobuf.Uninterpr" - "etedOption*\t\010\350\007\020\200\200\200\200\002\"\215\001\n\013EnumOptions\022\023\n" - "\013allow_alias\030\002 \001(\010\022\031\n\ndeprecated\030\003 \001(\010:\005" - "false\022C\n\024uninterpreted_option\030\347\007 \003(\0132$.g" - "oogle.protobuf.UninterpretedOption*\t\010\350\007\020" - "\200\200\200\200\002\"}\n\020EnumValueOptions\022\031\n\ndeprecated\030" - "\001 \001(\010:\005false\022C\n\024uninterpreted_option\030\347\007 " - "\003(\0132$.google.protobuf.UninterpretedOptio" - "n*\t\010\350\007\020\200\200\200\200\002\"{\n\016ServiceOptions\022\031\n\ndeprec" - "ated\030! \001(\010:\005false\022C\n\024uninterpreted_optio" - "n\030\347\007 \003(\0132$.google.protobuf.Uninterpreted" - "Option*\t\010\350\007\020\200\200\200\200\002\"\255\002\n\rMethodOptions\022\031\n\nd" - "eprecated\030! \001(\010:\005false\022_\n\021idempotency_le" - "vel\030\" \001(\0162/.google.protobuf.MethodOption" - "s.IdempotencyLevel:\023IDEMPOTENCY_UNKNOWN\022" - "C\n\024uninterpreted_option\030\347\007 \003(\0132$.google." - "protobuf.UninterpretedOption\"P\n\020Idempote" - "ncyLevel\022\027\n\023IDEMPOTENCY_UNKNOWN\020\000\022\023\n\017NO_" - "SIDE_EFFECTS\020\001\022\016\n\nIDEMPOTENT\020\002*\t\010\350\007\020\200\200\200\200" - "\002\"\236\002\n\023UninterpretedOption\022;\n\004name\030\002 \003(\0132" - "-.google.protobuf.UninterpretedOption.Na" - "mePart\022\030\n\020identifier_value\030\003 \001(\t\022\032\n\022posi" - "tive_int_value\030\004 \001(\004\022\032\n\022negative_int_val" - "ue\030\005 \001(\003\022\024\n\014double_value\030\006 \001(\001\022\024\n\014string" - "_value\030\007 \001(\014\022\027\n\017aggregate_value\030\010 \001(\t\0323\n" - "\010NamePart\022\021\n\tname_part\030\001 \002(\t\022\024\n\014is_exten" - "sion\030\002 \002(\010\"\325\001\n\016SourceCodeInfo\022:\n\010locatio" - "n\030\001 \003(\0132(.google.protobuf.SourceCodeInfo" - ".Location\032\206\001\n\010Location\022\020\n\004path\030\001 \003(\005B\002\020\001" - "\022\020\n\004span\030\002 \003(\005B\002\020\001\022\030\n\020leading_comments\030\003" - " \001(\t\022\031\n\021trailing_comments\030\004 \001(\t\022!\n\031leadi" - "ng_detached_comments\030\006 \003(\t\"\247\001\n\021Generated" - "CodeInfo\022A\n\nannotation\030\001 \003(\0132-.google.pr" - "otobuf.GeneratedCodeInfo.Annotation\032O\n\nA" - "nnotation\022\020\n\004path\030\001 \003(\005B\002\020\001\022\023\n\013source_fi" - "le\030\002 \001(\t\022\r\n\005begin\030\003 \001(\005\022\013\n\003end\030\004 \001(\005B\214\001\n" - "\023com.google.protobufB\020DescriptorProtosH\001" - "Z>github.com/golang/protobuf/protoc-gen-" - "go/descriptor;descriptor\242\002\003GPB\252\002\032Google." - "Protobuf.Reflection" + "etedOption\"/\n\005CType\022\n\n\006STRING\020\000\022\010\n\004CORD\020" + "\001\022\020\n\014STRING_PIECE\020\002\"5\n\006JSType\022\r\n\tJS_NORM" + "AL\020\000\022\r\n\tJS_STRING\020\001\022\r\n\tJS_NUMBER\020\002*\t\010\350\007\020" + "\200\200\200\200\002J\004\010\004\020\005\"^\n\014OneofOptions\022C\n\024uninterpr" + "eted_option\030\347\007 \003(\0132$.google.protobuf.Uni" + "nterpretedOption*\t\010\350\007\020\200\200\200\200\002\"\223\001\n\013EnumOpti" + "ons\022\023\n\013allow_alias\030\002 \001(\010\022\031\n\ndeprecated\030\003" + " \001(\010:\005false\022C\n\024uninterpreted_option\030\347\007 \003" + "(\0132$.google.protobuf.UninterpretedOption" + "*\t\010\350\007\020\200\200\200\200\002J\004\010\005\020\006\"}\n\020EnumValueOptions\022\031\n" + "\ndeprecated\030\001 \001(\010:\005false\022C\n\024uninterprete" + "d_option\030\347\007 \003(\0132$.google.protobuf.Uninte" + "rpretedOption*\t\010\350\007\020\200\200\200\200\002\"{\n\016ServiceOptio" + "ns\022\031\n\ndeprecated\030! \001(\010:\005false\022C\n\024uninter" + "preted_option\030\347\007 \003(\0132$.google.protobuf.U" + "ninterpretedOption*\t\010\350\007\020\200\200\200\200\002\"\255\002\n\rMethod" + "Options\022\031\n\ndeprecated\030! \001(\010:\005false\022_\n\021id" + "empotency_level\030\" \001(\0162/.google.protobuf." + "MethodOptions.IdempotencyLevel:\023IDEMPOTE" + "NCY_UNKNOWN\022C\n\024uninterpreted_option\030\347\007 \003" + "(\0132$.google.protobuf.UninterpretedOption" + "\"P\n\020IdempotencyLevel\022\027\n\023IDEMPOTENCY_UNKN" + "OWN\020\000\022\023\n\017NO_SIDE_EFFECTS\020\001\022\016\n\nIDEMPOTENT" + "\020\002*\t\010\350\007\020\200\200\200\200\002\"\236\002\n\023UninterpretedOption\022;\n" + "\004name\030\002 \003(\0132-.google.protobuf.Uninterpre" + "tedOption.NamePart\022\030\n\020identifier_value\030\003" + " \001(\t\022\032\n\022positive_int_value\030\004 \001(\004\022\032\n\022nega" + "tive_int_value\030\005 \001(\003\022\024\n\014double_value\030\006 \001" + "(\001\022\024\n\014string_value\030\007 \001(\014\022\027\n\017aggregate_va" + "lue\030\010 \001(\t\0323\n\010NamePart\022\021\n\tname_part\030\001 \002(\t" + "\022\024\n\014is_extension\030\002 \002(\010\"\325\001\n\016SourceCodeInf" + "o\022:\n\010location\030\001 \003(\0132(.google.protobuf.So" + "urceCodeInfo.Location\032\206\001\n\010Location\022\020\n\004pa" + "th\030\001 \003(\005B\002\020\001\022\020\n\004span\030\002 \003(\005B\002\020\001\022\030\n\020leadin" + "g_comments\030\003 \001(\t\022\031\n\021trailing_comments\030\004 " + "\001(\t\022!\n\031leading_detached_comments\030\006 \003(\t\"\247" + "\001\n\021GeneratedCodeInfo\022A\n\nannotation\030\001 \003(\013" + "2-.google.protobuf.GeneratedCodeInfo.Ann" + "otation\032O\n\nAnnotation\022\020\n\004path\030\001 \003(\005B\002\020\001\022" + "\023\n\013source_file\030\002 \001(\t\022\r\n\005begin\030\003 \001(\005\022\013\n\003e" + "nd\030\004 \001(\005B\214\001\n\023com.google.protobufB\020Descri" + "ptorProtosH\001Z>github.com/golang/protobuf" + "/protoc-gen-go/descriptor;descriptor\242\002\003G" + "PB\252\002\032Google.Protobuf.Reflection" }; ::google::protobuf::DescriptorPool::InternalAddGeneratedFile( - descriptor, 5579); + descriptor, 5591); ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile( "google/protobuf/descriptor.proto", &protobuf_RegisterTypes); ::google::protobuf::internal::OnShutdown(&TableStruct::Shutdown); @@ -972,7 +1035,7 @@ void FileDescriptorSet::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* FileDescriptorSet::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[0].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const FileDescriptorSet& FileDescriptorSet::default_instance() { @@ -1009,13 +1072,11 @@ bool FileDescriptorSet::MergePartialFromCodedStream( case 1: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(10u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_file())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -1044,6 +1105,9 @@ bool FileDescriptorSet::MergePartialFromCodedStream( void FileDescriptorSet::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.FileDescriptorSet) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated .google.protobuf.FileDescriptorProto file = 1; for (unsigned int i = 0, n = this->file_size(); i < n; i++) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( @@ -1059,13 +1123,15 @@ void FileDescriptorSet::SerializeWithCachedSizes( ::google::protobuf::uint8* FileDescriptorSet::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FileDescriptorSet) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated .google.protobuf.FileDescriptorProto file = 1; for (unsigned int i = 0, n = this->file_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 1, this->file(i), false, target); + 1, this->file(i), deterministic, target); } if (_internal_metadata_.have_unknown_fields()) { @@ -1122,6 +1188,9 @@ void FileDescriptorSet::MergeFrom(const FileDescriptorSet& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.FileDescriptorSet) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + file_.MergeFrom(from.file_); } @@ -1149,7 +1218,7 @@ void FileDescriptorSet::Swap(FileDescriptorSet* other) { InternalSwap(other); } void FileDescriptorSet::InternalSwap(FileDescriptorSet* other) { - file_.UnsafeArenaSwap(&other->file_); + file_.InternalSwap(&other->file_); std::swap(_has_bits_[0], other->_has_bits_[0]); _internal_metadata_.Swap(&other->_internal_metadata_); std::swap(_cached_size_, other->_cached_size_); @@ -1157,7 +1226,7 @@ void FileDescriptorSet::InternalSwap(FileDescriptorSet* other) { ::google::protobuf::Metadata FileDescriptorSet::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[0]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -1226,12 +1295,12 @@ FileDescriptorProto::FileDescriptorProto(const FileDescriptorProto& from) _has_bits_(from._has_bits_), _cached_size_(0), dependency_(from.dependency_), - public_dependency_(from.public_dependency_), - weak_dependency_(from.weak_dependency_), message_type_(from.message_type_), enum_type_(from.enum_type_), service_(from.service_), - extension_(from.extension_) { + extension_(from.extension_), + public_dependency_(from.public_dependency_), + weak_dependency_(from.weak_dependency_) { _internal_metadata_.MergeFrom(from._internal_metadata_); name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (from.has_name()) { @@ -1291,7 +1360,7 @@ void FileDescriptorProto::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* FileDescriptorProto::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[1].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const FileDescriptorProto& FileDescriptorProto::default_instance() { @@ -1310,12 +1379,12 @@ FileDescriptorProto* FileDescriptorProto::New(::google::protobuf::Arena* arena) void FileDescriptorProto::Clear() { // @@protoc_insertion_point(message_clear_start:google.protobuf.FileDescriptorProto) dependency_.Clear(); - public_dependency_.Clear(); - weak_dependency_.Clear(); message_type_.Clear(); enum_type_.Clear(); service_.Clear(); extension_.Clear(); + public_dependency_.Clear(); + weak_dependency_.Clear(); if (_has_bits_[0 / 32] & 31u) { if (has_name()) { GOOGLE_DCHECK(!name_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited())); @@ -1405,13 +1474,11 @@ bool FileDescriptorProto::MergePartialFromCodedStream( case 4: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(34u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_message_type())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -1419,13 +1486,11 @@ bool FileDescriptorProto::MergePartialFromCodedStream( case 5: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(42u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_enum_type())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -1433,13 +1498,11 @@ bool FileDescriptorProto::MergePartialFromCodedStream( case 6: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(50u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_service())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -1447,13 +1510,11 @@ bool FileDescriptorProto::MergePartialFromCodedStream( case 7: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(58u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_extension())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -1558,8 +1619,12 @@ bool FileDescriptorProto::MergePartialFromCodedStream( void FileDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.FileDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -1569,7 +1634,7 @@ void FileDescriptorProto::SerializeWithCachedSizes( } // optional string package = 2; - if (has_package()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->package().data(), this->package().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -1613,13 +1678,13 @@ void FileDescriptorProto::SerializeWithCachedSizes( } // optional .google.protobuf.FileOptions options = 8; - if (has_options()) { + if (cached_has_bits & 0x00000008u) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( 8, *this->options_, output); } // optional .google.protobuf.SourceCodeInfo source_code_info = 9; - if (has_source_code_info()) { + if (cached_has_bits & 0x00000010u) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( 9, *this->source_code_info_, output); } @@ -1637,7 +1702,7 @@ void FileDescriptorProto::SerializeWithCachedSizes( } // optional string syntax = 12; - if (has_syntax()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->syntax().data(), this->syntax().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -1655,10 +1720,13 @@ void FileDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::uint8* FileDescriptorProto::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FileDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -1669,7 +1737,7 @@ ::google::protobuf::uint8* FileDescriptorProto::InternalSerializeWithCachedSizes } // optional string package = 2; - if (has_package()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->package().data(), this->package().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -1693,58 +1761,54 @@ ::google::protobuf::uint8* FileDescriptorProto::InternalSerializeWithCachedSizes for (unsigned int i = 0, n = this->message_type_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 4, this->message_type(i), false, target); + 4, this->message_type(i), deterministic, target); } // repeated .google.protobuf.EnumDescriptorProto enum_type = 5; for (unsigned int i = 0, n = this->enum_type_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 5, this->enum_type(i), false, target); + 5, this->enum_type(i), deterministic, target); } // repeated .google.protobuf.ServiceDescriptorProto service = 6; for (unsigned int i = 0, n = this->service_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 6, this->service(i), false, target); + 6, this->service(i), deterministic, target); } // repeated .google.protobuf.FieldDescriptorProto extension = 7; for (unsigned int i = 0, n = this->extension_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 7, this->extension(i), false, target); + 7, this->extension(i), deterministic, target); } // optional .google.protobuf.FileOptions options = 8; - if (has_options()) { + if (cached_has_bits & 0x00000008u) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 8, *this->options_, false, target); + 8, *this->options_, deterministic, target); } // optional .google.protobuf.SourceCodeInfo source_code_info = 9; - if (has_source_code_info()) { + if (cached_has_bits & 0x00000010u) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 9, *this->source_code_info_, false, target); + 9, *this->source_code_info_, deterministic, target); } // repeated int32 public_dependency = 10; - for (int i = 0, n = this->public_dependency_size(); i < n; i++) { - target = ::google::protobuf::internal::WireFormatLite:: - WriteInt32ToArray(10, this->public_dependency(i), target); - } + target = ::google::protobuf::internal::WireFormatLite:: + WriteInt32ToArray(10, this->public_dependency_, target); // repeated int32 weak_dependency = 11; - for (int i = 0, n = this->weak_dependency_size(); i < n; i++) { - target = ::google::protobuf::internal::WireFormatLite:: - WriteInt32ToArray(11, this->weak_dependency(i), target); - } + target = ::google::protobuf::internal::WireFormatLite:: + WriteInt32ToArray(11, this->weak_dependency_, target); // optional string syntax = 12; - if (has_syntax()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->syntax().data(), this->syntax().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -1779,24 +1843,6 @@ size_t FileDescriptorProto::ByteSizeLong() const { this->dependency(i)); } - // repeated int32 public_dependency = 10; - { - size_t data_size = ::google::protobuf::internal::WireFormatLite:: - Int32Size(this->public_dependency_); - total_size += 1 * - ::google::protobuf::internal::FromIntSize(this->public_dependency_size()); - total_size += data_size; - } - - // repeated int32 weak_dependency = 11; - { - size_t data_size = ::google::protobuf::internal::WireFormatLite:: - Int32Size(this->weak_dependency_); - total_size += 1 * - ::google::protobuf::internal::FromIntSize(this->weak_dependency_size()); - total_size += data_size; - } - // repeated .google.protobuf.DescriptorProto message_type = 4; { unsigned int count = this->message_type_size(); @@ -1841,6 +1887,24 @@ size_t FileDescriptorProto::ByteSizeLong() const { } } + // repeated int32 public_dependency = 10; + { + size_t data_size = ::google::protobuf::internal::WireFormatLite:: + Int32Size(this->public_dependency_); + total_size += 1 * + ::google::protobuf::internal::FromIntSize(this->public_dependency_size()); + total_size += data_size; + } + + // repeated int32 weak_dependency = 11; + { + size_t data_size = ::google::protobuf::internal::WireFormatLite:: + Int32Size(this->weak_dependency_); + total_size += 1 * + ::google::protobuf::internal::FromIntSize(this->weak_dependency_size()); + total_size += data_size; + } + if (_has_bits_[0 / 32] & 31u) { // optional string name = 1; if (has_name()) { @@ -1904,30 +1968,34 @@ void FileDescriptorProto::MergeFrom(const FileDescriptorProto& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.FileDescriptorProto) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + dependency_.MergeFrom(from.dependency_); - public_dependency_.MergeFrom(from.public_dependency_); - weak_dependency_.MergeFrom(from.weak_dependency_); message_type_.MergeFrom(from.message_type_); enum_type_.MergeFrom(from.enum_type_); service_.MergeFrom(from.service_); extension_.MergeFrom(from.extension_); - if (from._has_bits_[0 / 32] & 31u) { - if (from.has_name()) { + public_dependency_.MergeFrom(from.public_dependency_); + weak_dependency_.MergeFrom(from.weak_dependency_); + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 31u) { + if (cached_has_bits & 0x00000001u) { set_has_name(); name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } - if (from.has_package()) { + if (cached_has_bits & 0x00000002u) { set_has_package(); package_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.package_); } - if (from.has_syntax()) { + if (cached_has_bits & 0x00000004u) { set_has_syntax(); syntax_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.syntax_); } - if (from.has_options()) { + if (cached_has_bits & 0x00000008u) { mutable_options()->::google::protobuf::FileOptions::MergeFrom(from.options()); } - if (from.has_source_code_info()) { + if (cached_has_bits & 0x00000010u) { mutable_source_code_info()->::google::protobuf::SourceCodeInfo::MergeFrom(from.source_code_info()); } } @@ -1963,13 +2031,13 @@ void FileDescriptorProto::Swap(FileDescriptorProto* other) { InternalSwap(other); } void FileDescriptorProto::InternalSwap(FileDescriptorProto* other) { - dependency_.UnsafeArenaSwap(&other->dependency_); - public_dependency_.UnsafeArenaSwap(&other->public_dependency_); - weak_dependency_.UnsafeArenaSwap(&other->weak_dependency_); - message_type_.UnsafeArenaSwap(&other->message_type_); - enum_type_.UnsafeArenaSwap(&other->enum_type_); - service_.UnsafeArenaSwap(&other->service_); - extension_.UnsafeArenaSwap(&other->extension_); + dependency_.InternalSwap(&other->dependency_); + message_type_.InternalSwap(&other->message_type_); + enum_type_.InternalSwap(&other->enum_type_); + service_.InternalSwap(&other->service_); + extension_.InternalSwap(&other->extension_); + public_dependency_.InternalSwap(&other->public_dependency_); + weak_dependency_.InternalSwap(&other->weak_dependency_); name_.Swap(&other->name_); package_.Swap(&other->package_); syntax_.Swap(&other->syntax_); @@ -1982,7 +2050,7 @@ void FileDescriptorProto::InternalSwap(FileDescriptorProto* other) { ::google::protobuf::Metadata FileDescriptorProto::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[1]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -2020,6 +2088,7 @@ void FileDescriptorProto::set_name(::std::string&& value) { } #endif void FileDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileDescriptorProto.name) @@ -2082,6 +2151,7 @@ void FileDescriptorProto::set_package(::std::string&& value) { } #endif void FileDescriptorProto::set_package(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_package(); package_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileDescriptorProto.package) @@ -2138,6 +2208,7 @@ void FileDescriptorProto::set_dependency(int index, ::std::string&& value) { } #endif void FileDescriptorProto::set_dependency(int index, const char* value) { + GOOGLE_DCHECK(value != NULL); dependency_.Mutable(index)->assign(value); // @@protoc_insertion_point(field_set_char:google.protobuf.FileDescriptorProto.dependency) } @@ -2156,11 +2227,12 @@ void FileDescriptorProto::add_dependency(const ::std::string& value) { } #if LANG_CXX11 void FileDescriptorProto::add_dependency(::std::string&& value) { - dependency_.Add()->assign(std::move(value)); + dependency_.Add(std::move(value)); // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.dependency) } #endif void FileDescriptorProto::add_dependency(const char* value) { + GOOGLE_DCHECK(value != NULL); dependency_.Add()->assign(value); // @@protoc_insertion_point(field_add_char:google.protobuf.FileDescriptorProto.dependency) } @@ -2481,6 +2553,7 @@ void FileDescriptorProto::set_syntax(::std::string&& value) { } #endif void FileDescriptorProto::set_syntax(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_syntax(); syntax_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileDescriptorProto.syntax) @@ -2561,7 +2634,7 @@ void DescriptorProto_ExtensionRange::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* DescriptorProto_ExtensionRange::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[2].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const DescriptorProto_ExtensionRange& DescriptorProto_ExtensionRange::default_instance() { @@ -2650,13 +2723,17 @@ bool DescriptorProto_ExtensionRange::MergePartialFromCodedStream( void DescriptorProto_ExtensionRange::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.DescriptorProto.ExtensionRange) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional int32 start = 1; - if (has_start()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->start(), output); } // optional int32 end = 2; - if (has_end()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->end(), output); } @@ -2669,15 +2746,18 @@ void DescriptorProto_ExtensionRange::SerializeWithCachedSizes( ::google::protobuf::uint8* DescriptorProto_ExtensionRange::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.DescriptorProto.ExtensionRange) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional int32 start = 1; - if (has_start()) { + if (cached_has_bits & 0x00000001u) { target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->start(), target); } // optional int32 end = 2; - if (has_end()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->end(), target); } @@ -2740,13 +2820,18 @@ void DescriptorProto_ExtensionRange::MergeFrom(const DescriptorProto_ExtensionRa // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.DescriptorProto.ExtensionRange) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); - if (from._has_bits_[0 / 32] & 3u) { - if (from.has_start()) { - set_start(from.start()); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 3u) { + if (cached_has_bits & 0x00000001u) { + start_ = from.start_; } - if (from.has_end()) { - set_end(from.end()); + if (cached_has_bits & 0x00000002u) { + end_ = from.end_; } + _has_bits_[0] |= cached_has_bits; } } @@ -2782,7 +2867,7 @@ void DescriptorProto_ExtensionRange::InternalSwap(DescriptorProto_ExtensionRange ::google::protobuf::Metadata DescriptorProto_ExtensionRange::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[2]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -2886,7 +2971,7 @@ void DescriptorProto_ReservedRange::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* DescriptorProto_ReservedRange::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[3].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const DescriptorProto_ReservedRange& DescriptorProto_ReservedRange::default_instance() { @@ -2975,13 +3060,17 @@ bool DescriptorProto_ReservedRange::MergePartialFromCodedStream( void DescriptorProto_ReservedRange::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.DescriptorProto.ReservedRange) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional int32 start = 1; - if (has_start()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->start(), output); } // optional int32 end = 2; - if (has_end()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->end(), output); } @@ -2994,15 +3083,18 @@ void DescriptorProto_ReservedRange::SerializeWithCachedSizes( ::google::protobuf::uint8* DescriptorProto_ReservedRange::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.DescriptorProto.ReservedRange) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional int32 start = 1; - if (has_start()) { + if (cached_has_bits & 0x00000001u) { target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->start(), target); } // optional int32 end = 2; - if (has_end()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->end(), target); } @@ -3065,13 +3157,18 @@ void DescriptorProto_ReservedRange::MergeFrom(const DescriptorProto_ReservedRang // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.DescriptorProto.ReservedRange) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); - if (from._has_bits_[0 / 32] & 3u) { - if (from.has_start()) { - set_start(from.start()); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 3u) { + if (cached_has_bits & 0x00000001u) { + start_ = from.start_; } - if (from.has_end()) { - set_end(from.end()); + if (cached_has_bits & 0x00000002u) { + end_ = from.end_; } + _has_bits_[0] |= cached_has_bits; } } @@ -3107,7 +3204,7 @@ void DescriptorProto_ReservedRange::InternalSwap(DescriptorProto_ReservedRange* ::google::protobuf::Metadata DescriptorProto_ReservedRange::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[3]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -3192,10 +3289,10 @@ DescriptorProto::DescriptorProto(const DescriptorProto& from) _has_bits_(from._has_bits_), _cached_size_(0), field_(from.field_), - extension_(from.extension_), nested_type_(from.nested_type_), enum_type_(from.enum_type_), extension_range_(from.extension_range_), + extension_(from.extension_), oneof_decl_(from.oneof_decl_), reserved_range_(from.reserved_range_), reserved_name_(from.reserved_name_) { @@ -3237,7 +3334,7 @@ void DescriptorProto::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* DescriptorProto::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[4].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const DescriptorProto& DescriptorProto::default_instance() { @@ -3256,10 +3353,10 @@ DescriptorProto* DescriptorProto::New(::google::protobuf::Arena* arena) const { void DescriptorProto::Clear() { // @@protoc_insertion_point(message_clear_start:google.protobuf.DescriptorProto) field_.Clear(); - extension_.Clear(); nested_type_.Clear(); enum_type_.Clear(); extension_range_.Clear(); + extension_.Clear(); oneof_decl_.Clear(); reserved_range_.Clear(); reserved_name_.Clear(); @@ -3307,13 +3404,11 @@ bool DescriptorProto::MergePartialFromCodedStream( case 2: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(18u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_field())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -3321,13 +3416,11 @@ bool DescriptorProto::MergePartialFromCodedStream( case 3: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(26u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_nested_type())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -3335,13 +3428,11 @@ bool DescriptorProto::MergePartialFromCodedStream( case 4: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(34u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_enum_type())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -3349,13 +3440,11 @@ bool DescriptorProto::MergePartialFromCodedStream( case 5: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(42u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_extension_range())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -3363,13 +3452,11 @@ bool DescriptorProto::MergePartialFromCodedStream( case 6: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(50u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_extension())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -3389,13 +3476,11 @@ bool DescriptorProto::MergePartialFromCodedStream( case 8: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(66u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_oneof_decl())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -3403,13 +3488,11 @@ bool DescriptorProto::MergePartialFromCodedStream( case 9: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(74u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_reserved_range())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -3455,8 +3538,12 @@ bool DescriptorProto::MergePartialFromCodedStream( void DescriptorProto::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.DescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -3496,7 +3583,7 @@ void DescriptorProto::SerializeWithCachedSizes( } // optional .google.protobuf.MessageOptions options = 7; - if (has_options()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( 7, *this->options_, output); } @@ -3532,10 +3619,13 @@ void DescriptorProto::SerializeWithCachedSizes( ::google::protobuf::uint8* DescriptorProto::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.DescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -3549,56 +3639,56 @@ ::google::protobuf::uint8* DescriptorProto::InternalSerializeWithCachedSizesToAr for (unsigned int i = 0, n = this->field_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 2, this->field(i), false, target); + 2, this->field(i), deterministic, target); } // repeated .google.protobuf.DescriptorProto nested_type = 3; for (unsigned int i = 0, n = this->nested_type_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 3, this->nested_type(i), false, target); + 3, this->nested_type(i), deterministic, target); } // repeated .google.protobuf.EnumDescriptorProto enum_type = 4; for (unsigned int i = 0, n = this->enum_type_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 4, this->enum_type(i), false, target); + 4, this->enum_type(i), deterministic, target); } // repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; for (unsigned int i = 0, n = this->extension_range_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 5, this->extension_range(i), false, target); + 5, this->extension_range(i), deterministic, target); } // repeated .google.protobuf.FieldDescriptorProto extension = 6; for (unsigned int i = 0, n = this->extension_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 6, this->extension(i), false, target); + 6, this->extension(i), deterministic, target); } // optional .google.protobuf.MessageOptions options = 7; - if (has_options()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 7, *this->options_, false, target); + 7, *this->options_, deterministic, target); } // repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; for (unsigned int i = 0, n = this->oneof_decl_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 8, this->oneof_decl(i), false, target); + 8, this->oneof_decl(i), deterministic, target); } // repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; for (unsigned int i = 0, n = this->reserved_range_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 9, this->reserved_range(i), false, target); + 9, this->reserved_range(i), deterministic, target); } // repeated string reserved_name = 10; @@ -3639,17 +3729,6 @@ size_t DescriptorProto::ByteSizeLong() const { } } - // repeated .google.protobuf.FieldDescriptorProto extension = 6; - { - unsigned int count = this->extension_size(); - total_size += 1UL * count; - for (unsigned int i = 0; i < count; i++) { - total_size += - ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( - this->extension(i)); - } - } - // repeated .google.protobuf.DescriptorProto nested_type = 3; { unsigned int count = this->nested_type_size(); @@ -3683,6 +3762,17 @@ size_t DescriptorProto::ByteSizeLong() const { } } + // repeated .google.protobuf.FieldDescriptorProto extension = 6; + { + unsigned int count = this->extension_size(); + total_size += 1UL * count; + for (unsigned int i = 0; i < count; i++) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( + this->extension(i)); + } + } + // repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; { unsigned int count = this->oneof_decl_size(); @@ -3755,20 +3845,24 @@ void DescriptorProto::MergeFrom(const DescriptorProto& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.DescriptorProto) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + field_.MergeFrom(from.field_); - extension_.MergeFrom(from.extension_); nested_type_.MergeFrom(from.nested_type_); enum_type_.MergeFrom(from.enum_type_); extension_range_.MergeFrom(from.extension_range_); + extension_.MergeFrom(from.extension_); oneof_decl_.MergeFrom(from.oneof_decl_); reserved_range_.MergeFrom(from.reserved_range_); reserved_name_.MergeFrom(from.reserved_name_); - if (from._has_bits_[0 / 32] & 3u) { - if (from.has_name()) { + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 3u) { + if (cached_has_bits & 0x00000001u) { set_has_name(); name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } - if (from.has_options()) { + if (cached_has_bits & 0x00000002u) { mutable_options()->::google::protobuf::MessageOptions::MergeFrom(from.options()); } } @@ -3790,9 +3884,9 @@ void DescriptorProto::CopyFrom(const DescriptorProto& from) { bool DescriptorProto::IsInitialized() const { if (!::google::protobuf::internal::AllAreInitialized(this->field())) return false; - if (!::google::protobuf::internal::AllAreInitialized(this->extension())) return false; if (!::google::protobuf::internal::AllAreInitialized(this->nested_type())) return false; if (!::google::protobuf::internal::AllAreInitialized(this->enum_type())) return false; + if (!::google::protobuf::internal::AllAreInitialized(this->extension())) return false; if (!::google::protobuf::internal::AllAreInitialized(this->oneof_decl())) return false; if (has_options()) { if (!this->options_->IsInitialized()) return false; @@ -3805,14 +3899,14 @@ void DescriptorProto::Swap(DescriptorProto* other) { InternalSwap(other); } void DescriptorProto::InternalSwap(DescriptorProto* other) { - field_.UnsafeArenaSwap(&other->field_); - extension_.UnsafeArenaSwap(&other->extension_); - nested_type_.UnsafeArenaSwap(&other->nested_type_); - enum_type_.UnsafeArenaSwap(&other->enum_type_); - extension_range_.UnsafeArenaSwap(&other->extension_range_); - oneof_decl_.UnsafeArenaSwap(&other->oneof_decl_); - reserved_range_.UnsafeArenaSwap(&other->reserved_range_); - reserved_name_.UnsafeArenaSwap(&other->reserved_name_); + field_.InternalSwap(&other->field_); + nested_type_.InternalSwap(&other->nested_type_); + enum_type_.InternalSwap(&other->enum_type_); + extension_range_.InternalSwap(&other->extension_range_); + extension_.InternalSwap(&other->extension_); + oneof_decl_.InternalSwap(&other->oneof_decl_); + reserved_range_.InternalSwap(&other->reserved_range_); + reserved_name_.InternalSwap(&other->reserved_name_); name_.Swap(&other->name_); std::swap(options_, other->options_); std::swap(_has_bits_[0], other->_has_bits_[0]); @@ -3822,7 +3916,7 @@ void DescriptorProto::InternalSwap(DescriptorProto* other) { ::google::protobuf::Metadata DescriptorProto::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[4]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -3860,6 +3954,7 @@ void DescriptorProto::set_name(::std::string&& value) { } #endif void DescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.DescriptorProto.name) @@ -4171,6 +4266,7 @@ void DescriptorProto::set_reserved_name(int index, ::std::string&& value) { } #endif void DescriptorProto::set_reserved_name(int index, const char* value) { + GOOGLE_DCHECK(value != NULL); reserved_name_.Mutable(index)->assign(value); // @@protoc_insertion_point(field_set_char:google.protobuf.DescriptorProto.reserved_name) } @@ -4189,11 +4285,12 @@ void DescriptorProto::add_reserved_name(const ::std::string& value) { } #if LANG_CXX11 void DescriptorProto::add_reserved_name(::std::string&& value) { - reserved_name_.Add()->assign(std::move(value)); + reserved_name_.Add(std::move(value)); // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.reserved_name) } #endif void DescriptorProto::add_reserved_name(const char* value) { + GOOGLE_DCHECK(value != NULL); reserved_name_.Add()->assign(value); // @@protoc_insertion_point(field_add_char:google.protobuf.DescriptorProto.reserved_name) } @@ -4247,14 +4344,14 @@ FieldDescriptorProto::FieldDescriptorProto(const FieldDescriptorProto& from) if (from.has_name()) { name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } - type_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.has_type_name()) { - type_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.type_name_); - } extendee_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (from.has_extendee()) { extendee_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.extendee_); } + type_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.has_type_name()) { + type_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.type_name_); + } default_value_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (from.has_default_value()) { default_value_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.default_value_); @@ -4277,8 +4374,8 @@ FieldDescriptorProto::FieldDescriptorProto(const FieldDescriptorProto& from) void FieldDescriptorProto::SharedCtor() { _cached_size_ = 0; name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - type_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); extendee_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + type_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); default_value_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); json_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); ::memset(&options_, 0, reinterpret_cast(&oneof_index_) - @@ -4294,8 +4391,8 @@ FieldDescriptorProto::~FieldDescriptorProto() { void FieldDescriptorProto::SharedDtor() { name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - type_name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); extendee_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + type_name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); default_value_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); json_name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (this != internal_default_instance()) { @@ -4310,7 +4407,7 @@ void FieldDescriptorProto::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* FieldDescriptorProto::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[5].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const FieldDescriptorProto& FieldDescriptorProto::default_instance() { @@ -4333,14 +4430,14 @@ void FieldDescriptorProto::Clear() { GOOGLE_DCHECK(!name_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited())); (*name_.UnsafeRawStringPointer())->clear(); } - if (has_type_name()) { - GOOGLE_DCHECK(!type_name_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited())); - (*type_name_.UnsafeRawStringPointer())->clear(); - } if (has_extendee()) { GOOGLE_DCHECK(!extendee_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited())); (*extendee_.UnsafeRawStringPointer())->clear(); } + if (has_type_name()) { + GOOGLE_DCHECK(!type_name_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited())); + (*type_name_.UnsafeRawStringPointer())->clear(); + } if (has_default_value()) { GOOGLE_DCHECK(!default_value_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited())); (*default_value_.UnsafeRawStringPointer())->clear(); @@ -4559,8 +4656,12 @@ bool FieldDescriptorProto::MergePartialFromCodedStream( void FieldDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.FieldDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -4570,7 +4671,7 @@ void FieldDescriptorProto::SerializeWithCachedSizes( } // optional string extendee = 2; - if (has_extendee()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->extendee().data(), this->extendee().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -4580,24 +4681,24 @@ void FieldDescriptorProto::SerializeWithCachedSizes( } // optional int32 number = 3; - if (has_number()) { + if (cached_has_bits & 0x00000040u) { ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->number(), output); } // optional .google.protobuf.FieldDescriptorProto.Label label = 4; - if (has_label()) { + if (cached_has_bits & 0x00000100u) { ::google::protobuf::internal::WireFormatLite::WriteEnum( 4, this->label(), output); } // optional .google.protobuf.FieldDescriptorProto.Type type = 5; - if (has_type()) { + if (cached_has_bits & 0x00000200u) { ::google::protobuf::internal::WireFormatLite::WriteEnum( 5, this->type(), output); } // optional string type_name = 6; - if (has_type_name()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->type_name().data(), this->type_name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -4607,7 +4708,7 @@ void FieldDescriptorProto::SerializeWithCachedSizes( } // optional string default_value = 7; - if (has_default_value()) { + if (cached_has_bits & 0x00000008u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->default_value().data(), this->default_value().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -4617,18 +4718,18 @@ void FieldDescriptorProto::SerializeWithCachedSizes( } // optional .google.protobuf.FieldOptions options = 8; - if (has_options()) { + if (cached_has_bits & 0x00000020u) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( 8, *this->options_, output); } // optional int32 oneof_index = 9; - if (has_oneof_index()) { + if (cached_has_bits & 0x00000080u) { ::google::protobuf::internal::WireFormatLite::WriteInt32(9, this->oneof_index(), output); } // optional string json_name = 10; - if (has_json_name()) { + if (cached_has_bits & 0x00000010u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->json_name().data(), this->json_name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -4646,10 +4747,13 @@ void FieldDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::uint8* FieldDescriptorProto::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FieldDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -4660,7 +4764,7 @@ ::google::protobuf::uint8* FieldDescriptorProto::InternalSerializeWithCachedSize } // optional string extendee = 2; - if (has_extendee()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->extendee().data(), this->extendee().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -4671,24 +4775,24 @@ ::google::protobuf::uint8* FieldDescriptorProto::InternalSerializeWithCachedSize } // optional int32 number = 3; - if (has_number()) { + if (cached_has_bits & 0x00000040u) { target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(3, this->number(), target); } // optional .google.protobuf.FieldDescriptorProto.Label label = 4; - if (has_label()) { + if (cached_has_bits & 0x00000100u) { target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( 4, this->label(), target); } // optional .google.protobuf.FieldDescriptorProto.Type type = 5; - if (has_type()) { + if (cached_has_bits & 0x00000200u) { target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( 5, this->type(), target); } // optional string type_name = 6; - if (has_type_name()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->type_name().data(), this->type_name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -4699,7 +4803,7 @@ ::google::protobuf::uint8* FieldDescriptorProto::InternalSerializeWithCachedSize } // optional string default_value = 7; - if (has_default_value()) { + if (cached_has_bits & 0x00000008u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->default_value().data(), this->default_value().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -4710,19 +4814,19 @@ ::google::protobuf::uint8* FieldDescriptorProto::InternalSerializeWithCachedSize } // optional .google.protobuf.FieldOptions options = 8; - if (has_options()) { + if (cached_has_bits & 0x00000020u) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 8, *this->options_, false, target); + 8, *this->options_, deterministic, target); } // optional int32 oneof_index = 9; - if (has_oneof_index()) { + if (cached_has_bits & 0x00000080u) { target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(9, this->oneof_index(), target); } // optional string json_name = 10; - if (has_json_name()) { + if (cached_has_bits & 0x00000010u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->json_name().data(), this->json_name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -4757,18 +4861,18 @@ size_t FieldDescriptorProto::ByteSizeLong() const { this->name()); } - // optional string type_name = 6; - if (has_type_name()) { + // optional string extendee = 2; + if (has_extendee()) { total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize( - this->type_name()); + this->extendee()); } - // optional string extendee = 2; - if (has_extendee()) { + // optional string type_name = 6; + if (has_type_name()) { total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize( - this->extendee()); + this->type_name()); } // optional string default_value = 7; @@ -4847,44 +4951,50 @@ void FieldDescriptorProto::MergeFrom(const FieldDescriptorProto& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.FieldDescriptorProto) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); - if (from._has_bits_[0 / 32] & 255u) { - if (from.has_name()) { + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 255u) { + if (cached_has_bits & 0x00000001u) { set_has_name(); name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } - if (from.has_type_name()) { - set_has_type_name(); - type_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.type_name_); - } - if (from.has_extendee()) { + if (cached_has_bits & 0x00000002u) { set_has_extendee(); extendee_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.extendee_); } - if (from.has_default_value()) { + if (cached_has_bits & 0x00000004u) { + set_has_type_name(); + type_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.type_name_); + } + if (cached_has_bits & 0x00000008u) { set_has_default_value(); default_value_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.default_value_); } - if (from.has_json_name()) { + if (cached_has_bits & 0x00000010u) { set_has_json_name(); json_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.json_name_); } - if (from.has_options()) { + if (cached_has_bits & 0x00000020u) { mutable_options()->::google::protobuf::FieldOptions::MergeFrom(from.options()); } - if (from.has_number()) { - set_number(from.number()); + if (cached_has_bits & 0x00000040u) { + number_ = from.number_; } - if (from.has_oneof_index()) { - set_oneof_index(from.oneof_index()); + if (cached_has_bits & 0x00000080u) { + oneof_index_ = from.oneof_index_; } + _has_bits_[0] |= cached_has_bits; } - if (from._has_bits_[8 / 32] & 768u) { - if (from.has_label()) { - set_label(from.label()); + if (cached_has_bits & 768u) { + if (cached_has_bits & 0x00000100u) { + label_ = from.label_; } - if (from.has_type()) { - set_type(from.type()); + if (cached_has_bits & 0x00000200u) { + type_ = from.type_; } + _has_bits_[0] |= cached_has_bits; } } @@ -4915,8 +5025,8 @@ void FieldDescriptorProto::Swap(FieldDescriptorProto* other) { } void FieldDescriptorProto::InternalSwap(FieldDescriptorProto* other) { name_.Swap(&other->name_); - type_name_.Swap(&other->type_name_); extendee_.Swap(&other->extendee_); + type_name_.Swap(&other->type_name_); default_value_.Swap(&other->default_value_); json_name_.Swap(&other->json_name_); std::swap(options_, other->options_); @@ -4931,7 +5041,7 @@ void FieldDescriptorProto::InternalSwap(FieldDescriptorProto* other) { ::google::protobuf::Metadata FieldDescriptorProto::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[5]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -4969,6 +5079,7 @@ void FieldDescriptorProto::set_name(::std::string&& value) { } #endif void FieldDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.name) @@ -5075,13 +5186,13 @@ void FieldDescriptorProto::set_type(::google::protobuf::FieldDescriptorProto_Typ // optional string type_name = 6; bool FieldDescriptorProto::has_type_name() const { - return (_has_bits_[0] & 0x00000002u) != 0; + return (_has_bits_[0] & 0x00000004u) != 0; } void FieldDescriptorProto::set_has_type_name() { - _has_bits_[0] |= 0x00000002u; + _has_bits_[0] |= 0x00000004u; } void FieldDescriptorProto::clear_has_type_name() { - _has_bits_[0] &= ~0x00000002u; + _has_bits_[0] &= ~0x00000004u; } void FieldDescriptorProto::clear_type_name() { type_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); @@ -5105,6 +5216,7 @@ void FieldDescriptorProto::set_type_name(::std::string&& value) { } #endif void FieldDescriptorProto::set_type_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_type_name(); type_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.type_name) @@ -5137,13 +5249,13 @@ void FieldDescriptorProto::set_allocated_type_name(::std::string* type_name) { // optional string extendee = 2; bool FieldDescriptorProto::has_extendee() const { - return (_has_bits_[0] & 0x00000004u) != 0; + return (_has_bits_[0] & 0x00000002u) != 0; } void FieldDescriptorProto::set_has_extendee() { - _has_bits_[0] |= 0x00000004u; + _has_bits_[0] |= 0x00000002u; } void FieldDescriptorProto::clear_has_extendee() { - _has_bits_[0] &= ~0x00000004u; + _has_bits_[0] &= ~0x00000002u; } void FieldDescriptorProto::clear_extendee() { extendee_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); @@ -5167,6 +5279,7 @@ void FieldDescriptorProto::set_extendee(::std::string&& value) { } #endif void FieldDescriptorProto::set_extendee(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_extendee(); extendee_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.extendee) @@ -5229,6 +5342,7 @@ void FieldDescriptorProto::set_default_value(::std::string&& value) { } #endif void FieldDescriptorProto::set_default_value(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_default_value(); default_value_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.default_value) @@ -5315,6 +5429,7 @@ void FieldDescriptorProto::set_json_name(::std::string&& value) { } #endif void FieldDescriptorProto::set_json_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_json_name(); json_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.json_name) @@ -5450,7 +5565,7 @@ void OneofDescriptorProto::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* OneofDescriptorProto::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[6].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const OneofDescriptorProto& OneofDescriptorProto::default_instance() { @@ -5545,8 +5660,12 @@ bool OneofDescriptorProto::MergePartialFromCodedStream( void OneofDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.OneofDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -5556,7 +5675,7 @@ void OneofDescriptorProto::SerializeWithCachedSizes( } // optional .google.protobuf.OneofOptions options = 2; - if (has_options()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( 2, *this->options_, output); } @@ -5570,10 +5689,13 @@ void OneofDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::uint8* OneofDescriptorProto::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.OneofDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -5584,10 +5706,10 @@ ::google::protobuf::uint8* OneofDescriptorProto::InternalSerializeWithCachedSize } // optional .google.protobuf.OneofOptions options = 2; - if (has_options()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 2, *this->options_, false, target); + 2, *this->options_, deterministic, target); } if (_internal_metadata_.have_unknown_fields()) { @@ -5649,12 +5771,16 @@ void OneofDescriptorProto::MergeFrom(const OneofDescriptorProto& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.OneofDescriptorProto) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); - if (from._has_bits_[0 / 32] & 3u) { - if (from.has_name()) { + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 3u) { + if (cached_has_bits & 0x00000001u) { set_has_name(); name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } - if (from.has_options()) { + if (cached_has_bits & 0x00000002u) { mutable_options()->::google::protobuf::OneofOptions::MergeFrom(from.options()); } } @@ -5695,7 +5821,7 @@ void OneofDescriptorProto::InternalSwap(OneofDescriptorProto* other) { ::google::protobuf::Metadata OneofDescriptorProto::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[6]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -5733,6 +5859,7 @@ void OneofDescriptorProto::set_name(::std::string&& value) { } #endif void OneofDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.OneofDescriptorProto.name) @@ -5870,7 +5997,7 @@ void EnumDescriptorProto::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* EnumDescriptorProto::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[7].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const EnumDescriptorProto& EnumDescriptorProto::default_instance() { @@ -5933,13 +6060,11 @@ bool EnumDescriptorProto::MergePartialFromCodedStream( case 2: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(18u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_value())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -5980,8 +6105,12 @@ bool EnumDescriptorProto::MergePartialFromCodedStream( void EnumDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.EnumDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -5997,7 +6126,7 @@ void EnumDescriptorProto::SerializeWithCachedSizes( } // optional .google.protobuf.EnumOptions options = 3; - if (has_options()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( 3, *this->options_, output); } @@ -6011,10 +6140,13 @@ void EnumDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::uint8* EnumDescriptorProto::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.EnumDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -6028,14 +6160,14 @@ ::google::protobuf::uint8* EnumDescriptorProto::InternalSerializeWithCachedSizes for (unsigned int i = 0, n = this->value_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 2, this->value(i), false, target); + 2, this->value(i), deterministic, target); } // optional .google.protobuf.EnumOptions options = 3; - if (has_options()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 3, *this->options_, false, target); + 3, *this->options_, deterministic, target); } if (_internal_metadata_.have_unknown_fields()) { @@ -6108,13 +6240,17 @@ void EnumDescriptorProto::MergeFrom(const EnumDescriptorProto& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.EnumDescriptorProto) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + value_.MergeFrom(from.value_); - if (from._has_bits_[0 / 32] & 3u) { - if (from.has_name()) { + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 3u) { + if (cached_has_bits & 0x00000001u) { set_has_name(); name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } - if (from.has_options()) { + if (cached_has_bits & 0x00000002u) { mutable_options()->::google::protobuf::EnumOptions::MergeFrom(from.options()); } } @@ -6147,7 +6283,7 @@ void EnumDescriptorProto::Swap(EnumDescriptorProto* other) { InternalSwap(other); } void EnumDescriptorProto::InternalSwap(EnumDescriptorProto* other) { - value_.UnsafeArenaSwap(&other->value_); + value_.InternalSwap(&other->value_); name_.Swap(&other->name_); std::swap(options_, other->options_); std::swap(_has_bits_[0], other->_has_bits_[0]); @@ -6157,7 +6293,7 @@ void EnumDescriptorProto::InternalSwap(EnumDescriptorProto* other) { ::google::protobuf::Metadata EnumDescriptorProto::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[7]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -6195,6 +6331,7 @@ void EnumDescriptorProto::set_name(::std::string&& value) { } #endif void EnumDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.EnumDescriptorProto.name) @@ -6363,7 +6500,7 @@ void EnumValueDescriptorProto::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* EnumValueDescriptorProto::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[8].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const EnumValueDescriptorProto& EnumValueDescriptorProto::default_instance() { @@ -6473,8 +6610,12 @@ bool EnumValueDescriptorProto::MergePartialFromCodedStream( void EnumValueDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.EnumValueDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -6484,12 +6625,12 @@ void EnumValueDescriptorProto::SerializeWithCachedSizes( } // optional int32 number = 2; - if (has_number()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormatLite::WriteInt32(2, this->number(), output); } // optional .google.protobuf.EnumValueOptions options = 3; - if (has_options()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( 3, *this->options_, output); } @@ -6503,10 +6644,13 @@ void EnumValueDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::uint8* EnumValueDescriptorProto::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.EnumValueDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -6517,15 +6661,15 @@ ::google::protobuf::uint8* EnumValueDescriptorProto::InternalSerializeWithCached } // optional int32 number = 2; - if (has_number()) { + if (cached_has_bits & 0x00000004u) { target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(2, this->number(), target); } // optional .google.protobuf.EnumValueOptions options = 3; - if (has_options()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 3, *this->options_, false, target); + 3, *this->options_, deterministic, target); } if (_internal_metadata_.have_unknown_fields()) { @@ -6594,17 +6738,22 @@ void EnumValueDescriptorProto::MergeFrom(const EnumValueDescriptorProto& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.EnumValueDescriptorProto) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); - if (from._has_bits_[0 / 32] & 7u) { - if (from.has_name()) { + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 7u) { + if (cached_has_bits & 0x00000001u) { set_has_name(); name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } - if (from.has_options()) { + if (cached_has_bits & 0x00000002u) { mutable_options()->::google::protobuf::EnumValueOptions::MergeFrom(from.options()); } - if (from.has_number()) { - set_number(from.number()); + if (cached_has_bits & 0x00000004u) { + number_ = from.number_; } + _has_bits_[0] |= cached_has_bits; } } @@ -6644,7 +6793,7 @@ void EnumValueDescriptorProto::InternalSwap(EnumValueDescriptorProto* other) { ::google::protobuf::Metadata EnumValueDescriptorProto::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[8]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -6682,6 +6831,7 @@ void EnumValueDescriptorProto::set_name(::std::string&& value) { } #endif void EnumValueDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.EnumValueDescriptorProto.name) @@ -6843,7 +6993,7 @@ void ServiceDescriptorProto::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* ServiceDescriptorProto::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[9].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const ServiceDescriptorProto& ServiceDescriptorProto::default_instance() { @@ -6906,13 +7056,11 @@ bool ServiceDescriptorProto::MergePartialFromCodedStream( case 2: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(18u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_method())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -6953,8 +7101,12 @@ bool ServiceDescriptorProto::MergePartialFromCodedStream( void ServiceDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.ServiceDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -6970,7 +7122,7 @@ void ServiceDescriptorProto::SerializeWithCachedSizes( } // optional .google.protobuf.ServiceOptions options = 3; - if (has_options()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( 3, *this->options_, output); } @@ -6984,10 +7136,13 @@ void ServiceDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::uint8* ServiceDescriptorProto::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.ServiceDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -7001,14 +7156,14 @@ ::google::protobuf::uint8* ServiceDescriptorProto::InternalSerializeWithCachedSi for (unsigned int i = 0, n = this->method_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 2, this->method(i), false, target); + 2, this->method(i), deterministic, target); } // optional .google.protobuf.ServiceOptions options = 3; - if (has_options()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 3, *this->options_, false, target); + 3, *this->options_, deterministic, target); } if (_internal_metadata_.have_unknown_fields()) { @@ -7081,13 +7236,17 @@ void ServiceDescriptorProto::MergeFrom(const ServiceDescriptorProto& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.ServiceDescriptorProto) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + method_.MergeFrom(from.method_); - if (from._has_bits_[0 / 32] & 3u) { - if (from.has_name()) { + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 3u) { + if (cached_has_bits & 0x00000001u) { set_has_name(); name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } - if (from.has_options()) { + if (cached_has_bits & 0x00000002u) { mutable_options()->::google::protobuf::ServiceOptions::MergeFrom(from.options()); } } @@ -7120,7 +7279,7 @@ void ServiceDescriptorProto::Swap(ServiceDescriptorProto* other) { InternalSwap(other); } void ServiceDescriptorProto::InternalSwap(ServiceDescriptorProto* other) { - method_.UnsafeArenaSwap(&other->method_); + method_.InternalSwap(&other->method_); name_.Swap(&other->name_); std::swap(options_, other->options_); std::swap(_has_bits_[0], other->_has_bits_[0]); @@ -7130,7 +7289,7 @@ void ServiceDescriptorProto::InternalSwap(ServiceDescriptorProto* other) { ::google::protobuf::Metadata ServiceDescriptorProto::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[9]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -7168,6 +7327,7 @@ void ServiceDescriptorProto::set_name(::std::string&& value) { } #endif void ServiceDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.ServiceDescriptorProto.name) @@ -7353,7 +7513,7 @@ void MethodDescriptorProto::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* MethodDescriptorProto::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[10].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const MethodDescriptorProto& MethodDescriptorProto::default_instance() { @@ -7520,8 +7680,12 @@ bool MethodDescriptorProto::MergePartialFromCodedStream( void MethodDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.MethodDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -7531,7 +7695,7 @@ void MethodDescriptorProto::SerializeWithCachedSizes( } // optional string input_type = 2; - if (has_input_type()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->input_type().data(), this->input_type().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -7541,7 +7705,7 @@ void MethodDescriptorProto::SerializeWithCachedSizes( } // optional string output_type = 3; - if (has_output_type()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->output_type().data(), this->output_type().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -7551,18 +7715,18 @@ void MethodDescriptorProto::SerializeWithCachedSizes( } // optional .google.protobuf.MethodOptions options = 4; - if (has_options()) { + if (cached_has_bits & 0x00000008u) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( 4, *this->options_, output); } // optional bool client_streaming = 5 [default = false]; - if (has_client_streaming()) { + if (cached_has_bits & 0x00000010u) { ::google::protobuf::internal::WireFormatLite::WriteBool(5, this->client_streaming(), output); } // optional bool server_streaming = 6 [default = false]; - if (has_server_streaming()) { + if (cached_has_bits & 0x00000020u) { ::google::protobuf::internal::WireFormatLite::WriteBool(6, this->server_streaming(), output); } @@ -7575,10 +7739,13 @@ void MethodDescriptorProto::SerializeWithCachedSizes( ::google::protobuf::uint8* MethodDescriptorProto::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.MethodDescriptorProto) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string name = 1; - if (has_name()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name().data(), this->name().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -7589,7 +7756,7 @@ ::google::protobuf::uint8* MethodDescriptorProto::InternalSerializeWithCachedSiz } // optional string input_type = 2; - if (has_input_type()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->input_type().data(), this->input_type().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -7600,7 +7767,7 @@ ::google::protobuf::uint8* MethodDescriptorProto::InternalSerializeWithCachedSiz } // optional string output_type = 3; - if (has_output_type()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->output_type().data(), this->output_type().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -7611,19 +7778,19 @@ ::google::protobuf::uint8* MethodDescriptorProto::InternalSerializeWithCachedSiz } // optional .google.protobuf.MethodOptions options = 4; - if (has_options()) { + if (cached_has_bits & 0x00000008u) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 4, *this->options_, false, target); + 4, *this->options_, deterministic, target); } // optional bool client_streaming = 5 [default = false]; - if (has_client_streaming()) { + if (cached_has_bits & 0x00000010u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(5, this->client_streaming(), target); } // optional bool server_streaming = 6 [default = false]; - if (has_server_streaming()) { + if (cached_has_bits & 0x00000020u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(6, this->server_streaming(), target); } @@ -7710,28 +7877,33 @@ void MethodDescriptorProto::MergeFrom(const MethodDescriptorProto& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.MethodDescriptorProto) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); - if (from._has_bits_[0 / 32] & 63u) { - if (from.has_name()) { + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 63u) { + if (cached_has_bits & 0x00000001u) { set_has_name(); name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_); } - if (from.has_input_type()) { + if (cached_has_bits & 0x00000002u) { set_has_input_type(); input_type_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.input_type_); } - if (from.has_output_type()) { + if (cached_has_bits & 0x00000004u) { set_has_output_type(); output_type_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.output_type_); } - if (from.has_options()) { + if (cached_has_bits & 0x00000008u) { mutable_options()->::google::protobuf::MethodOptions::MergeFrom(from.options()); } - if (from.has_client_streaming()) { - set_client_streaming(from.client_streaming()); + if (cached_has_bits & 0x00000010u) { + client_streaming_ = from.client_streaming_; } - if (from.has_server_streaming()) { - set_server_streaming(from.server_streaming()); + if (cached_has_bits & 0x00000020u) { + server_streaming_ = from.server_streaming_; } + _has_bits_[0] |= cached_has_bits; } } @@ -7774,7 +7946,7 @@ void MethodDescriptorProto::InternalSwap(MethodDescriptorProto* other) { ::google::protobuf::Metadata MethodDescriptorProto::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[10]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -7812,6 +7984,7 @@ void MethodDescriptorProto::set_name(::std::string&& value) { } #endif void MethodDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.MethodDescriptorProto.name) @@ -7874,6 +8047,7 @@ void MethodDescriptorProto::set_input_type(::std::string&& value) { } #endif void MethodDescriptorProto::set_input_type(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_input_type(); input_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.MethodDescriptorProto.input_type) @@ -7936,6 +8110,7 @@ void MethodDescriptorProto::set_output_type(::std::string&& value) { } #endif void MethodDescriptorProto::set_output_type(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_output_type(); output_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.MethodDescriptorProto.output_type) @@ -8169,7 +8344,7 @@ void FileOptions::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* FileOptions::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[11].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const FileOptions& FileOptions::default_instance() { @@ -8486,13 +8661,11 @@ bool FileOptions::MergePartialFromCodedStream( case 999: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(7994u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_uninterpreted_option())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -8526,8 +8699,12 @@ bool FileOptions::MergePartialFromCodedStream( void FileOptions::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.FileOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string java_package = 1; - if (has_java_package()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->java_package().data(), this->java_package().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8537,7 +8714,7 @@ void FileOptions::SerializeWithCachedSizes( } // optional string java_outer_classname = 8; - if (has_java_outer_classname()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->java_outer_classname().data(), this->java_outer_classname().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8547,18 +8724,18 @@ void FileOptions::SerializeWithCachedSizes( } // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; - if (has_optimize_for()) { + if (cached_has_bits & 0x00008000u) { ::google::protobuf::internal::WireFormatLite::WriteEnum( 9, this->optimize_for(), output); } // optional bool java_multiple_files = 10 [default = false]; - if (has_java_multiple_files()) { + if (cached_has_bits & 0x00000080u) { ::google::protobuf::internal::WireFormatLite::WriteBool(10, this->java_multiple_files(), output); } // optional string go_package = 11; - if (has_go_package()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->go_package().data(), this->go_package().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8568,42 +8745,42 @@ void FileOptions::SerializeWithCachedSizes( } // optional bool cc_generic_services = 16 [default = false]; - if (has_cc_generic_services()) { + if (cached_has_bits & 0x00000400u) { ::google::protobuf::internal::WireFormatLite::WriteBool(16, this->cc_generic_services(), output); } // optional bool java_generic_services = 17 [default = false]; - if (has_java_generic_services()) { + if (cached_has_bits & 0x00000800u) { ::google::protobuf::internal::WireFormatLite::WriteBool(17, this->java_generic_services(), output); } // optional bool py_generic_services = 18 [default = false]; - if (has_py_generic_services()) { + if (cached_has_bits & 0x00001000u) { ::google::protobuf::internal::WireFormatLite::WriteBool(18, this->py_generic_services(), output); } // optional bool java_generate_equals_and_hash = 20 [deprecated = true]; - if (has_java_generate_equals_and_hash()) { + if (cached_has_bits & 0x00000100u) { ::google::protobuf::internal::WireFormatLite::WriteBool(20, this->java_generate_equals_and_hash(), output); } // optional bool deprecated = 23 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00002000u) { ::google::protobuf::internal::WireFormatLite::WriteBool(23, this->deprecated(), output); } // optional bool java_string_check_utf8 = 27 [default = false]; - if (has_java_string_check_utf8()) { + if (cached_has_bits & 0x00000200u) { ::google::protobuf::internal::WireFormatLite::WriteBool(27, this->java_string_check_utf8(), output); } // optional bool cc_enable_arenas = 31 [default = false]; - if (has_cc_enable_arenas()) { + if (cached_has_bits & 0x00004000u) { ::google::protobuf::internal::WireFormatLite::WriteBool(31, this->cc_enable_arenas(), output); } // optional string objc_class_prefix = 36; - if (has_objc_class_prefix()) { + if (cached_has_bits & 0x00000008u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->objc_class_prefix().data(), this->objc_class_prefix().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8613,7 +8790,7 @@ void FileOptions::SerializeWithCachedSizes( } // optional string csharp_namespace = 37; - if (has_csharp_namespace()) { + if (cached_has_bits & 0x00000010u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->csharp_namespace().data(), this->csharp_namespace().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8623,7 +8800,7 @@ void FileOptions::SerializeWithCachedSizes( } // optional string swift_prefix = 39; - if (has_swift_prefix()) { + if (cached_has_bits & 0x00000020u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->swift_prefix().data(), this->swift_prefix().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8633,7 +8810,7 @@ void FileOptions::SerializeWithCachedSizes( } // optional string php_class_prefix = 40; - if (has_php_class_prefix()) { + if (cached_has_bits & 0x00000040u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->php_class_prefix().data(), this->php_class_prefix().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8661,10 +8838,13 @@ void FileOptions::SerializeWithCachedSizes( ::google::protobuf::uint8* FileOptions::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FileOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional string java_package = 1; - if (has_java_package()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->java_package().data(), this->java_package().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8675,7 +8855,7 @@ ::google::protobuf::uint8* FileOptions::InternalSerializeWithCachedSizesToArray( } // optional string java_outer_classname = 8; - if (has_java_outer_classname()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->java_outer_classname().data(), this->java_outer_classname().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8686,18 +8866,18 @@ ::google::protobuf::uint8* FileOptions::InternalSerializeWithCachedSizesToArray( } // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; - if (has_optimize_for()) { + if (cached_has_bits & 0x00008000u) { target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( 9, this->optimize_for(), target); } // optional bool java_multiple_files = 10 [default = false]; - if (has_java_multiple_files()) { + if (cached_has_bits & 0x00000080u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(10, this->java_multiple_files(), target); } // optional string go_package = 11; - if (has_go_package()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->go_package().data(), this->go_package().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8708,42 +8888,42 @@ ::google::protobuf::uint8* FileOptions::InternalSerializeWithCachedSizesToArray( } // optional bool cc_generic_services = 16 [default = false]; - if (has_cc_generic_services()) { + if (cached_has_bits & 0x00000400u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(16, this->cc_generic_services(), target); } // optional bool java_generic_services = 17 [default = false]; - if (has_java_generic_services()) { + if (cached_has_bits & 0x00000800u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(17, this->java_generic_services(), target); } // optional bool py_generic_services = 18 [default = false]; - if (has_py_generic_services()) { + if (cached_has_bits & 0x00001000u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(18, this->py_generic_services(), target); } // optional bool java_generate_equals_and_hash = 20 [deprecated = true]; - if (has_java_generate_equals_and_hash()) { + if (cached_has_bits & 0x00000100u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(20, this->java_generate_equals_and_hash(), target); } // optional bool deprecated = 23 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00002000u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(23, this->deprecated(), target); } // optional bool java_string_check_utf8 = 27 [default = false]; - if (has_java_string_check_utf8()) { + if (cached_has_bits & 0x00000200u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(27, this->java_string_check_utf8(), target); } // optional bool cc_enable_arenas = 31 [default = false]; - if (has_cc_enable_arenas()) { + if (cached_has_bits & 0x00004000u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(31, this->cc_enable_arenas(), target); } // optional string objc_class_prefix = 36; - if (has_objc_class_prefix()) { + if (cached_has_bits & 0x00000008u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->objc_class_prefix().data(), this->objc_class_prefix().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8754,7 +8934,7 @@ ::google::protobuf::uint8* FileOptions::InternalSerializeWithCachedSizesToArray( } // optional string csharp_namespace = 37; - if (has_csharp_namespace()) { + if (cached_has_bits & 0x00000010u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->csharp_namespace().data(), this->csharp_namespace().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8765,7 +8945,7 @@ ::google::protobuf::uint8* FileOptions::InternalSerializeWithCachedSizesToArray( } // optional string swift_prefix = 39; - if (has_swift_prefix()) { + if (cached_has_bits & 0x00000020u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->swift_prefix().data(), this->swift_prefix().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8776,7 +8956,7 @@ ::google::protobuf::uint8* FileOptions::InternalSerializeWithCachedSizesToArray( } // optional string php_class_prefix = 40; - if (has_php_class_prefix()) { + if (cached_has_bits & 0x00000040u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->php_class_prefix().data(), this->php_class_prefix().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -8790,7 +8970,7 @@ ::google::protobuf::uint8* FileOptions::InternalSerializeWithCachedSizesToArray( for (unsigned int i = 0, n = this->uninterpreted_option_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 999, this->uninterpreted_option(i), false, target); + 999, this->uninterpreted_option(i), deterministic, target); } // Extension range [1000, 536870912) @@ -8953,65 +9133,71 @@ void FileOptions::MergeFrom(const FileOptions& from) { GOOGLE_DCHECK_NE(&from, this); _extensions_.MergeFrom(from._extensions_); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + uninterpreted_option_.MergeFrom(from.uninterpreted_option_); - if (from._has_bits_[0 / 32] & 255u) { - if (from.has_java_package()) { + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 255u) { + if (cached_has_bits & 0x00000001u) { set_has_java_package(); java_package_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.java_package_); } - if (from.has_java_outer_classname()) { + if (cached_has_bits & 0x00000002u) { set_has_java_outer_classname(); java_outer_classname_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.java_outer_classname_); } - if (from.has_go_package()) { + if (cached_has_bits & 0x00000004u) { set_has_go_package(); go_package_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.go_package_); } - if (from.has_objc_class_prefix()) { + if (cached_has_bits & 0x00000008u) { set_has_objc_class_prefix(); objc_class_prefix_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.objc_class_prefix_); } - if (from.has_csharp_namespace()) { + if (cached_has_bits & 0x00000010u) { set_has_csharp_namespace(); csharp_namespace_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.csharp_namespace_); } - if (from.has_swift_prefix()) { + if (cached_has_bits & 0x00000020u) { set_has_swift_prefix(); swift_prefix_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.swift_prefix_); } - if (from.has_php_class_prefix()) { + if (cached_has_bits & 0x00000040u) { set_has_php_class_prefix(); php_class_prefix_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.php_class_prefix_); } - if (from.has_java_multiple_files()) { - set_java_multiple_files(from.java_multiple_files()); + if (cached_has_bits & 0x00000080u) { + java_multiple_files_ = from.java_multiple_files_; } + _has_bits_[0] |= cached_has_bits; } - if (from._has_bits_[8 / 32] & 65280u) { - if (from.has_java_generate_equals_and_hash()) { - set_java_generate_equals_and_hash(from.java_generate_equals_and_hash()); + if (cached_has_bits & 65280u) { + if (cached_has_bits & 0x00000100u) { + java_generate_equals_and_hash_ = from.java_generate_equals_and_hash_; } - if (from.has_java_string_check_utf8()) { - set_java_string_check_utf8(from.java_string_check_utf8()); + if (cached_has_bits & 0x00000200u) { + java_string_check_utf8_ = from.java_string_check_utf8_; } - if (from.has_cc_generic_services()) { - set_cc_generic_services(from.cc_generic_services()); + if (cached_has_bits & 0x00000400u) { + cc_generic_services_ = from.cc_generic_services_; } - if (from.has_java_generic_services()) { - set_java_generic_services(from.java_generic_services()); + if (cached_has_bits & 0x00000800u) { + java_generic_services_ = from.java_generic_services_; } - if (from.has_py_generic_services()) { - set_py_generic_services(from.py_generic_services()); + if (cached_has_bits & 0x00001000u) { + py_generic_services_ = from.py_generic_services_; } - if (from.has_deprecated()) { - set_deprecated(from.deprecated()); + if (cached_has_bits & 0x00002000u) { + deprecated_ = from.deprecated_; } - if (from.has_cc_enable_arenas()) { - set_cc_enable_arenas(from.cc_enable_arenas()); + if (cached_has_bits & 0x00004000u) { + cc_enable_arenas_ = from.cc_enable_arenas_; } - if (from.has_optimize_for()) { - set_optimize_for(from.optimize_for()); + if (cached_has_bits & 0x00008000u) { + optimize_for_ = from.optimize_for_; } + _has_bits_[0] |= cached_has_bits; } } @@ -9043,7 +9229,7 @@ void FileOptions::Swap(FileOptions* other) { InternalSwap(other); } void FileOptions::InternalSwap(FileOptions* other) { - uninterpreted_option_.UnsafeArenaSwap(&other->uninterpreted_option_); + uninterpreted_option_.InternalSwap(&other->uninterpreted_option_); java_package_.Swap(&other->java_package_); java_outer_classname_.Swap(&other->java_outer_classname_); go_package_.Swap(&other->go_package_); @@ -9068,7 +9254,7 @@ void FileOptions::InternalSwap(FileOptions* other) { ::google::protobuf::Metadata FileOptions::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[11]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -9106,6 +9292,7 @@ void FileOptions::set_java_package(::std::string&& value) { } #endif void FileOptions::set_java_package(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_java_package(); java_package_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.java_package) @@ -9168,6 +9355,7 @@ void FileOptions::set_java_outer_classname(::std::string&& value) { } #endif void FileOptions::set_java_outer_classname(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_java_outer_classname(); java_outer_classname_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.java_outer_classname) @@ -9327,6 +9515,7 @@ void FileOptions::set_go_package(::std::string&& value) { } #endif void FileOptions::set_go_package(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_go_package(); go_package_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.go_package) @@ -9509,6 +9698,7 @@ void FileOptions::set_objc_class_prefix(::std::string&& value) { } #endif void FileOptions::set_objc_class_prefix(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_objc_class_prefix(); objc_class_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.objc_class_prefix) @@ -9571,6 +9761,7 @@ void FileOptions::set_csharp_namespace(::std::string&& value) { } #endif void FileOptions::set_csharp_namespace(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_csharp_namespace(); csharp_namespace_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.csharp_namespace) @@ -9633,6 +9824,7 @@ void FileOptions::set_swift_prefix(::std::string&& value) { } #endif void FileOptions::set_swift_prefix(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_swift_prefix(); swift_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.swift_prefix) @@ -9695,6 +9887,7 @@ void FileOptions::set_php_class_prefix(::std::string&& value) { } #endif void FileOptions::set_php_class_prefix(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_php_class_prefix(); php_class_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.php_class_prefix) @@ -9810,7 +10003,7 @@ void MessageOptions::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* MessageOptions::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[12].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const MessageOptions& MessageOptions::default_instance() { @@ -9908,13 +10101,11 @@ bool MessageOptions::MergePartialFromCodedStream( case 999: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(7994u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_uninterpreted_option())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -9948,23 +10139,27 @@ bool MessageOptions::MergePartialFromCodedStream( void MessageOptions::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.MessageOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional bool message_set_wire_format = 1 [default = false]; - if (has_message_set_wire_format()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormatLite::WriteBool(1, this->message_set_wire_format(), output); } // optional bool no_standard_descriptor_accessor = 2 [default = false]; - if (has_no_standard_descriptor_accessor()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteBool(2, this->no_standard_descriptor_accessor(), output); } // optional bool deprecated = 3 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormatLite::WriteBool(3, this->deprecated(), output); } // optional bool map_entry = 7; - if (has_map_entry()) { + if (cached_has_bits & 0x00000008u) { ::google::protobuf::internal::WireFormatLite::WriteBool(7, this->map_entry(), output); } @@ -9987,25 +10182,28 @@ void MessageOptions::SerializeWithCachedSizes( ::google::protobuf::uint8* MessageOptions::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.MessageOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional bool message_set_wire_format = 1 [default = false]; - if (has_message_set_wire_format()) { + if (cached_has_bits & 0x00000001u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(1, this->message_set_wire_format(), target); } // optional bool no_standard_descriptor_accessor = 2 [default = false]; - if (has_no_standard_descriptor_accessor()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(2, this->no_standard_descriptor_accessor(), target); } // optional bool deprecated = 3 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00000004u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(3, this->deprecated(), target); } // optional bool map_entry = 7; - if (has_map_entry()) { + if (cached_has_bits & 0x00000008u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(7, this->map_entry(), target); } @@ -10013,7 +10211,7 @@ ::google::protobuf::uint8* MessageOptions::InternalSerializeWithCachedSizesToArr for (unsigned int i = 0, n = this->uninterpreted_option_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 999, this->uninterpreted_option(i), false, target); + 999, this->uninterpreted_option(i), deterministic, target); } // Extension range [1000, 536870912) @@ -10099,20 +10297,25 @@ void MessageOptions::MergeFrom(const MessageOptions& from) { GOOGLE_DCHECK_NE(&from, this); _extensions_.MergeFrom(from._extensions_); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + uninterpreted_option_.MergeFrom(from.uninterpreted_option_); - if (from._has_bits_[0 / 32] & 15u) { - if (from.has_message_set_wire_format()) { - set_message_set_wire_format(from.message_set_wire_format()); + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 15u) { + if (cached_has_bits & 0x00000001u) { + message_set_wire_format_ = from.message_set_wire_format_; } - if (from.has_no_standard_descriptor_accessor()) { - set_no_standard_descriptor_accessor(from.no_standard_descriptor_accessor()); + if (cached_has_bits & 0x00000002u) { + no_standard_descriptor_accessor_ = from.no_standard_descriptor_accessor_; } - if (from.has_deprecated()) { - set_deprecated(from.deprecated()); + if (cached_has_bits & 0x00000004u) { + deprecated_ = from.deprecated_; } - if (from.has_map_entry()) { - set_map_entry(from.map_entry()); + if (cached_has_bits & 0x00000008u) { + map_entry_ = from.map_entry_; } + _has_bits_[0] |= cached_has_bits; } } @@ -10144,7 +10347,7 @@ void MessageOptions::Swap(MessageOptions* other) { InternalSwap(other); } void MessageOptions::InternalSwap(MessageOptions* other) { - uninterpreted_option_.UnsafeArenaSwap(&other->uninterpreted_option_); + uninterpreted_option_.InternalSwap(&other->uninterpreted_option_); std::swap(message_set_wire_format_, other->message_set_wire_format_); std::swap(no_standard_descriptor_accessor_, other->no_standard_descriptor_accessor_); std::swap(deprecated_, other->deprecated_); @@ -10157,7 +10360,7 @@ void MessageOptions::InternalSwap(MessageOptions* other) { ::google::protobuf::Metadata MessageOptions::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[12]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -10320,15 +10523,15 @@ FieldOptions::FieldOptions(const FieldOptions& from) _internal_metadata_.MergeFrom(from._internal_metadata_); _extensions_.MergeFrom(from._extensions_); ::memcpy(&ctype_, &from.ctype_, - reinterpret_cast(&weak_) - - reinterpret_cast(&ctype_) + sizeof(weak_)); + reinterpret_cast(&jstype_) - + reinterpret_cast(&ctype_) + sizeof(jstype_)); // @@protoc_insertion_point(copy_constructor:google.protobuf.FieldOptions) } void FieldOptions::SharedCtor() { _cached_size_ = 0; - ::memset(&ctype_, 0, reinterpret_cast(&weak_) - - reinterpret_cast(&ctype_) + sizeof(weak_)); + ::memset(&ctype_, 0, reinterpret_cast(&jstype_) - + reinterpret_cast(&ctype_) + sizeof(jstype_)); } FieldOptions::~FieldOptions() { @@ -10346,7 +10549,7 @@ void FieldOptions::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* FieldOptions::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[13].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const FieldOptions& FieldOptions::default_instance() { @@ -10367,8 +10570,8 @@ void FieldOptions::Clear() { _extensions_.Clear(); uninterpreted_option_.Clear(); if (_has_bits_[0 / 32] & 63u) { - ::memset(&ctype_, 0, reinterpret_cast(&weak_) - - reinterpret_cast(&ctype_) + sizeof(weak_)); + ::memset(&ctype_, 0, reinterpret_cast(&jstype_) - + reinterpret_cast(&ctype_) + sizeof(jstype_)); } _has_bits_.Clear(); _internal_metadata_.Clear(); @@ -10482,13 +10685,11 @@ bool FieldOptions::MergePartialFromCodedStream( case 999: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(7994u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_uninterpreted_option())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -10522,35 +10723,39 @@ bool FieldOptions::MergePartialFromCodedStream( void FieldOptions::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.FieldOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; - if (has_ctype()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormatLite::WriteEnum( 1, this->ctype(), output); } // optional bool packed = 2; - if (has_packed()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteBool(2, this->packed(), output); } // optional bool deprecated = 3 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00000008u) { ::google::protobuf::internal::WireFormatLite::WriteBool(3, this->deprecated(), output); } // optional bool lazy = 5 [default = false]; - if (has_lazy()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormatLite::WriteBool(5, this->lazy(), output); } // optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; - if (has_jstype()) { + if (cached_has_bits & 0x00000020u) { ::google::protobuf::internal::WireFormatLite::WriteEnum( 6, this->jstype(), output); } // optional bool weak = 10 [default = false]; - if (has_weak()) { + if (cached_has_bits & 0x00000010u) { ::google::protobuf::internal::WireFormatLite::WriteBool(10, this->weak(), output); } @@ -10573,37 +10778,40 @@ void FieldOptions::SerializeWithCachedSizes( ::google::protobuf::uint8* FieldOptions::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FieldOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; - if (has_ctype()) { + if (cached_has_bits & 0x00000001u) { target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( 1, this->ctype(), target); } // optional bool packed = 2; - if (has_packed()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(2, this->packed(), target); } // optional bool deprecated = 3 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00000008u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(3, this->deprecated(), target); } // optional bool lazy = 5 [default = false]; - if (has_lazy()) { + if (cached_has_bits & 0x00000004u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(5, this->lazy(), target); } // optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; - if (has_jstype()) { + if (cached_has_bits & 0x00000020u) { target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( 6, this->jstype(), target); } // optional bool weak = 10 [default = false]; - if (has_weak()) { + if (cached_has_bits & 0x00000010u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(10, this->weak(), target); } @@ -10611,7 +10819,7 @@ ::google::protobuf::uint8* FieldOptions::InternalSerializeWithCachedSizesToArray for (unsigned int i = 0, n = this->uninterpreted_option_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 999, this->uninterpreted_option(i), false, target); + 999, this->uninterpreted_option(i), deterministic, target); } // Extension range [1000, 536870912) @@ -10655,12 +10863,6 @@ size_t FieldOptions::ByteSizeLong() const { ::google::protobuf::internal::WireFormatLite::EnumSize(this->ctype()); } - // optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; - if (has_jstype()) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::EnumSize(this->jstype()); - } - // optional bool packed = 2; if (has_packed()) { total_size += 1 + 1; @@ -10681,6 +10883,12 @@ size_t FieldOptions::ByteSizeLong() const { total_size += 1 + 1; } + // optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; + if (has_jstype()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::EnumSize(this->jstype()); + } + } int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); @@ -10709,26 +10917,31 @@ void FieldOptions::MergeFrom(const FieldOptions& from) { GOOGLE_DCHECK_NE(&from, this); _extensions_.MergeFrom(from._extensions_); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + uninterpreted_option_.MergeFrom(from.uninterpreted_option_); - if (from._has_bits_[0 / 32] & 63u) { - if (from.has_ctype()) { - set_ctype(from.ctype()); + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 63u) { + if (cached_has_bits & 0x00000001u) { + ctype_ = from.ctype_; } - if (from.has_jstype()) { - set_jstype(from.jstype()); + if (cached_has_bits & 0x00000002u) { + packed_ = from.packed_; } - if (from.has_packed()) { - set_packed(from.packed()); + if (cached_has_bits & 0x00000004u) { + lazy_ = from.lazy_; } - if (from.has_lazy()) { - set_lazy(from.lazy()); + if (cached_has_bits & 0x00000008u) { + deprecated_ = from.deprecated_; } - if (from.has_deprecated()) { - set_deprecated(from.deprecated()); + if (cached_has_bits & 0x00000010u) { + weak_ = from.weak_; } - if (from.has_weak()) { - set_weak(from.weak()); + if (cached_has_bits & 0x00000020u) { + jstype_ = from.jstype_; } + _has_bits_[0] |= cached_has_bits; } } @@ -10760,13 +10973,13 @@ void FieldOptions::Swap(FieldOptions* other) { InternalSwap(other); } void FieldOptions::InternalSwap(FieldOptions* other) { - uninterpreted_option_.UnsafeArenaSwap(&other->uninterpreted_option_); + uninterpreted_option_.InternalSwap(&other->uninterpreted_option_); std::swap(ctype_, other->ctype_); - std::swap(jstype_, other->jstype_); std::swap(packed_, other->packed_); std::swap(lazy_, other->lazy_); std::swap(deprecated_, other->deprecated_); std::swap(weak_, other->weak_); + std::swap(jstype_, other->jstype_); std::swap(_has_bits_[0], other->_has_bits_[0]); _internal_metadata_.Swap(&other->_internal_metadata_); std::swap(_cached_size_, other->_cached_size_); @@ -10775,7 +10988,7 @@ void FieldOptions::InternalSwap(FieldOptions* other) { ::google::protobuf::Metadata FieldOptions::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[13]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -10808,13 +11021,13 @@ void FieldOptions::set_ctype(::google::protobuf::FieldOptions_CType value) { // optional bool packed = 2; bool FieldOptions::has_packed() const { - return (_has_bits_[0] & 0x00000004u) != 0; + return (_has_bits_[0] & 0x00000002u) != 0; } void FieldOptions::set_has_packed() { - _has_bits_[0] |= 0x00000004u; + _has_bits_[0] |= 0x00000002u; } void FieldOptions::clear_has_packed() { - _has_bits_[0] &= ~0x00000004u; + _has_bits_[0] &= ~0x00000002u; } void FieldOptions::clear_packed() { packed_ = false; @@ -10832,13 +11045,13 @@ void FieldOptions::set_packed(bool value) { // optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; bool FieldOptions::has_jstype() const { - return (_has_bits_[0] & 0x00000002u) != 0; + return (_has_bits_[0] & 0x00000020u) != 0; } void FieldOptions::set_has_jstype() { - _has_bits_[0] |= 0x00000002u; + _has_bits_[0] |= 0x00000020u; } void FieldOptions::clear_has_jstype() { - _has_bits_[0] &= ~0x00000002u; + _has_bits_[0] &= ~0x00000020u; } void FieldOptions::clear_jstype() { jstype_ = 0; @@ -10857,13 +11070,13 @@ void FieldOptions::set_jstype(::google::protobuf::FieldOptions_JSType value) { // optional bool lazy = 5 [default = false]; bool FieldOptions::has_lazy() const { - return (_has_bits_[0] & 0x00000008u) != 0; + return (_has_bits_[0] & 0x00000004u) != 0; } void FieldOptions::set_has_lazy() { - _has_bits_[0] |= 0x00000008u; + _has_bits_[0] |= 0x00000004u; } void FieldOptions::clear_has_lazy() { - _has_bits_[0] &= ~0x00000008u; + _has_bits_[0] &= ~0x00000004u; } void FieldOptions::clear_lazy() { lazy_ = false; @@ -10881,13 +11094,13 @@ void FieldOptions::set_lazy(bool value) { // optional bool deprecated = 3 [default = false]; bool FieldOptions::has_deprecated() const { - return (_has_bits_[0] & 0x00000010u) != 0; + return (_has_bits_[0] & 0x00000008u) != 0; } void FieldOptions::set_has_deprecated() { - _has_bits_[0] |= 0x00000010u; + _has_bits_[0] |= 0x00000008u; } void FieldOptions::clear_has_deprecated() { - _has_bits_[0] &= ~0x00000010u; + _has_bits_[0] &= ~0x00000008u; } void FieldOptions::clear_deprecated() { deprecated_ = false; @@ -10905,13 +11118,13 @@ void FieldOptions::set_deprecated(bool value) { // optional bool weak = 10 [default = false]; bool FieldOptions::has_weak() const { - return (_has_bits_[0] & 0x00000020u) != 0; + return (_has_bits_[0] & 0x00000010u) != 0; } void FieldOptions::set_has_weak() { - _has_bits_[0] |= 0x00000020u; + _has_bits_[0] |= 0x00000010u; } void FieldOptions::clear_has_weak() { - _has_bits_[0] &= ~0x00000020u; + _has_bits_[0] &= ~0x00000010u; } void FieldOptions::clear_weak() { weak_ = false; @@ -11003,7 +11216,7 @@ void OneofOptions::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* OneofOptions::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[14].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const OneofOptions& OneofOptions::default_instance() { @@ -11041,13 +11254,11 @@ bool OneofOptions::MergePartialFromCodedStream( case 999: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(7994u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_uninterpreted_option())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -11081,6 +11292,9 @@ bool OneofOptions::MergePartialFromCodedStream( void OneofOptions::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.OneofOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; for (unsigned int i = 0, n = this->uninterpreted_option_size(); i < n; i++) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( @@ -11100,13 +11314,15 @@ void OneofOptions::SerializeWithCachedSizes( ::google::protobuf::uint8* OneofOptions::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.OneofOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; for (unsigned int i = 0, n = this->uninterpreted_option_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 999, this->uninterpreted_option(i), false, target); + 999, this->uninterpreted_option(i), deterministic, target); } // Extension range [1000, 536870912) @@ -11170,6 +11386,9 @@ void OneofOptions::MergeFrom(const OneofOptions& from) { GOOGLE_DCHECK_NE(&from, this); _extensions_.MergeFrom(from._extensions_); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + uninterpreted_option_.MergeFrom(from.uninterpreted_option_); } @@ -11201,7 +11420,7 @@ void OneofOptions::Swap(OneofOptions* other) { InternalSwap(other); } void OneofOptions::InternalSwap(OneofOptions* other) { - uninterpreted_option_.UnsafeArenaSwap(&other->uninterpreted_option_); + uninterpreted_option_.InternalSwap(&other->uninterpreted_option_); std::swap(_has_bits_[0], other->_has_bits_[0]); _internal_metadata_.Swap(&other->_internal_metadata_); std::swap(_cached_size_, other->_cached_size_); @@ -11210,7 +11429,7 @@ void OneofOptions::InternalSwap(OneofOptions* other) { ::google::protobuf::Metadata OneofOptions::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[14]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -11299,7 +11518,7 @@ void EnumOptions::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* EnumOptions::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[15].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const EnumOptions& EnumOptions::default_instance() { @@ -11369,13 +11588,11 @@ bool EnumOptions::MergePartialFromCodedStream( case 999: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(7994u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_uninterpreted_option())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -11409,13 +11626,17 @@ bool EnumOptions::MergePartialFromCodedStream( void EnumOptions::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.EnumOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional bool allow_alias = 2; - if (has_allow_alias()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormatLite::WriteBool(2, this->allow_alias(), output); } // optional bool deprecated = 3 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteBool(3, this->deprecated(), output); } @@ -11438,15 +11659,18 @@ void EnumOptions::SerializeWithCachedSizes( ::google::protobuf::uint8* EnumOptions::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.EnumOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional bool allow_alias = 2; - if (has_allow_alias()) { + if (cached_has_bits & 0x00000001u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(2, this->allow_alias(), target); } // optional bool deprecated = 3 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(3, this->deprecated(), target); } @@ -11454,7 +11678,7 @@ ::google::protobuf::uint8* EnumOptions::InternalSerializeWithCachedSizesToArray( for (unsigned int i = 0, n = this->uninterpreted_option_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 999, this->uninterpreted_option(i), false, target); + 999, this->uninterpreted_option(i), deterministic, target); } // Extension range [1000, 536870912) @@ -11530,14 +11754,19 @@ void EnumOptions::MergeFrom(const EnumOptions& from) { GOOGLE_DCHECK_NE(&from, this); _extensions_.MergeFrom(from._extensions_); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + uninterpreted_option_.MergeFrom(from.uninterpreted_option_); - if (from._has_bits_[0 / 32] & 3u) { - if (from.has_allow_alias()) { - set_allow_alias(from.allow_alias()); + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 3u) { + if (cached_has_bits & 0x00000001u) { + allow_alias_ = from.allow_alias_; } - if (from.has_deprecated()) { - set_deprecated(from.deprecated()); + if (cached_has_bits & 0x00000002u) { + deprecated_ = from.deprecated_; } + _has_bits_[0] |= cached_has_bits; } } @@ -11569,7 +11798,7 @@ void EnumOptions::Swap(EnumOptions* other) { InternalSwap(other); } void EnumOptions::InternalSwap(EnumOptions* other) { - uninterpreted_option_.UnsafeArenaSwap(&other->uninterpreted_option_); + uninterpreted_option_.InternalSwap(&other->uninterpreted_option_); std::swap(allow_alias_, other->allow_alias_); std::swap(deprecated_, other->deprecated_); std::swap(_has_bits_[0], other->_has_bits_[0]); @@ -11580,7 +11809,7 @@ void EnumOptions::InternalSwap(EnumOptions* other) { ::google::protobuf::Metadata EnumOptions::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[15]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -11713,7 +11942,7 @@ void EnumValueOptions::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* EnumValueOptions::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[16].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const EnumValueOptions& EnumValueOptions::default_instance() { @@ -11766,13 +11995,11 @@ bool EnumValueOptions::MergePartialFromCodedStream( case 999: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(7994u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_uninterpreted_option())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -11806,8 +12033,12 @@ bool EnumValueOptions::MergePartialFromCodedStream( void EnumValueOptions::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.EnumValueOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional bool deprecated = 1 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormatLite::WriteBool(1, this->deprecated(), output); } @@ -11830,10 +12061,13 @@ void EnumValueOptions::SerializeWithCachedSizes( ::google::protobuf::uint8* EnumValueOptions::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.EnumValueOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional bool deprecated = 1 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00000001u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(1, this->deprecated(), target); } @@ -11841,7 +12075,7 @@ ::google::protobuf::uint8* EnumValueOptions::InternalSerializeWithCachedSizesToA for (unsigned int i = 0, n = this->uninterpreted_option_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 999, this->uninterpreted_option(i), false, target); + 999, this->uninterpreted_option(i), deterministic, target); } // Extension range [1000, 536870912) @@ -11910,6 +12144,9 @@ void EnumValueOptions::MergeFrom(const EnumValueOptions& from) { GOOGLE_DCHECK_NE(&from, this); _extensions_.MergeFrom(from._extensions_); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + uninterpreted_option_.MergeFrom(from.uninterpreted_option_); if (from.has_deprecated()) { set_deprecated(from.deprecated()); @@ -11944,7 +12181,7 @@ void EnumValueOptions::Swap(EnumValueOptions* other) { InternalSwap(other); } void EnumValueOptions::InternalSwap(EnumValueOptions* other) { - uninterpreted_option_.UnsafeArenaSwap(&other->uninterpreted_option_); + uninterpreted_option_.InternalSwap(&other->uninterpreted_option_); std::swap(deprecated_, other->deprecated_); std::swap(_has_bits_[0], other->_has_bits_[0]); _internal_metadata_.Swap(&other->_internal_metadata_); @@ -11954,7 +12191,7 @@ void EnumValueOptions::InternalSwap(EnumValueOptions* other) { ::google::protobuf::Metadata EnumValueOptions::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[16]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -12063,7 +12300,7 @@ void ServiceOptions::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* ServiceOptions::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[17].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const ServiceOptions& ServiceOptions::default_instance() { @@ -12116,13 +12353,11 @@ bool ServiceOptions::MergePartialFromCodedStream( case 999: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(7994u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_uninterpreted_option())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -12156,8 +12391,12 @@ bool ServiceOptions::MergePartialFromCodedStream( void ServiceOptions::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.ServiceOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional bool deprecated = 33 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormatLite::WriteBool(33, this->deprecated(), output); } @@ -12180,10 +12419,13 @@ void ServiceOptions::SerializeWithCachedSizes( ::google::protobuf::uint8* ServiceOptions::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.ServiceOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional bool deprecated = 33 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00000001u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(33, this->deprecated(), target); } @@ -12191,7 +12433,7 @@ ::google::protobuf::uint8* ServiceOptions::InternalSerializeWithCachedSizesToArr for (unsigned int i = 0, n = this->uninterpreted_option_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 999, this->uninterpreted_option(i), false, target); + 999, this->uninterpreted_option(i), deterministic, target); } // Extension range [1000, 536870912) @@ -12260,6 +12502,9 @@ void ServiceOptions::MergeFrom(const ServiceOptions& from) { GOOGLE_DCHECK_NE(&from, this); _extensions_.MergeFrom(from._extensions_); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + uninterpreted_option_.MergeFrom(from.uninterpreted_option_); if (from.has_deprecated()) { set_deprecated(from.deprecated()); @@ -12294,7 +12539,7 @@ void ServiceOptions::Swap(ServiceOptions* other) { InternalSwap(other); } void ServiceOptions::InternalSwap(ServiceOptions* other) { - uninterpreted_option_.UnsafeArenaSwap(&other->uninterpreted_option_); + uninterpreted_option_.InternalSwap(&other->uninterpreted_option_); std::swap(deprecated_, other->deprecated_); std::swap(_has_bits_[0], other->_has_bits_[0]); _internal_metadata_.Swap(&other->_internal_metadata_); @@ -12304,7 +12549,7 @@ void ServiceOptions::InternalSwap(ServiceOptions* other) { ::google::protobuf::Metadata ServiceOptions::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[17]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -12417,7 +12662,7 @@ void MethodOptions::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* MethodOptions::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[18].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const MethodOptions& MethodOptions::default_instance() { @@ -12492,13 +12737,11 @@ bool MethodOptions::MergePartialFromCodedStream( case 999: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(7994u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_uninterpreted_option())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -12532,13 +12775,17 @@ bool MethodOptions::MergePartialFromCodedStream( void MethodOptions::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.MethodOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional bool deprecated = 33 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormatLite::WriteBool(33, this->deprecated(), output); } // optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN]; - if (has_idempotency_level()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteEnum( 34, this->idempotency_level(), output); } @@ -12562,15 +12809,18 @@ void MethodOptions::SerializeWithCachedSizes( ::google::protobuf::uint8* MethodOptions::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.MethodOptions) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // optional bool deprecated = 33 [default = false]; - if (has_deprecated()) { + if (cached_has_bits & 0x00000001u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(33, this->deprecated(), target); } // optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN]; - if (has_idempotency_level()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( 34, this->idempotency_level(), target); } @@ -12579,7 +12829,7 @@ ::google::protobuf::uint8* MethodOptions::InternalSerializeWithCachedSizesToArra for (unsigned int i = 0, n = this->uninterpreted_option_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 999, this->uninterpreted_option(i), false, target); + 999, this->uninterpreted_option(i), deterministic, target); } // Extension range [1000, 536870912) @@ -12656,14 +12906,19 @@ void MethodOptions::MergeFrom(const MethodOptions& from) { GOOGLE_DCHECK_NE(&from, this); _extensions_.MergeFrom(from._extensions_); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + uninterpreted_option_.MergeFrom(from.uninterpreted_option_); - if (from._has_bits_[0 / 32] & 3u) { - if (from.has_deprecated()) { - set_deprecated(from.deprecated()); + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 3u) { + if (cached_has_bits & 0x00000001u) { + deprecated_ = from.deprecated_; } - if (from.has_idempotency_level()) { - set_idempotency_level(from.idempotency_level()); + if (cached_has_bits & 0x00000002u) { + idempotency_level_ = from.idempotency_level_; } + _has_bits_[0] |= cached_has_bits; } } @@ -12695,7 +12950,7 @@ void MethodOptions::Swap(MethodOptions* other) { InternalSwap(other); } void MethodOptions::InternalSwap(MethodOptions* other) { - uninterpreted_option_.UnsafeArenaSwap(&other->uninterpreted_option_); + uninterpreted_option_.InternalSwap(&other->uninterpreted_option_); std::swap(deprecated_, other->deprecated_); std::swap(idempotency_level_, other->idempotency_level_); std::swap(_has_bits_[0], other->_has_bits_[0]); @@ -12706,7 +12961,7 @@ void MethodOptions::InternalSwap(MethodOptions* other) { ::google::protobuf::Metadata MethodOptions::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[18]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -12844,7 +13099,7 @@ void UninterpretedOption_NamePart::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* UninterpretedOption_NamePart::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[19].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const UninterpretedOption_NamePart& UninterpretedOption_NamePart::default_instance() { @@ -12936,8 +13191,12 @@ bool UninterpretedOption_NamePart::MergePartialFromCodedStream( void UninterpretedOption_NamePart::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.UninterpretedOption.NamePart) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // required string name_part = 1; - if (has_name_part()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name_part().data(), this->name_part().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -12947,7 +13206,7 @@ void UninterpretedOption_NamePart::SerializeWithCachedSizes( } // required bool is_extension = 2; - if (has_is_extension()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteBool(2, this->is_extension(), output); } @@ -12960,10 +13219,13 @@ void UninterpretedOption_NamePart::SerializeWithCachedSizes( ::google::protobuf::uint8* UninterpretedOption_NamePart::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.UninterpretedOption.NamePart) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = _has_bits_[0]; // required string name_part = 1; - if (has_name_part()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->name_part().data(), this->name_part().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -12974,7 +13236,7 @@ ::google::protobuf::uint8* UninterpretedOption_NamePart::InternalSerializeWithCa } // required bool is_extension = 2; - if (has_is_extension()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(2, this->is_extension(), target); } @@ -13051,14 +13313,19 @@ void UninterpretedOption_NamePart::MergeFrom(const UninterpretedOption_NamePart& // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.UninterpretedOption.NamePart) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); - if (from._has_bits_[0 / 32] & 3u) { - if (from.has_name_part()) { + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 3u) { + if (cached_has_bits & 0x00000001u) { set_has_name_part(); name_part_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_part_); } - if (from.has_is_extension()) { - set_is_extension(from.is_extension()); + if (cached_has_bits & 0x00000002u) { + is_extension_ = from.is_extension_; } + _has_bits_[0] |= cached_has_bits; } } @@ -13095,7 +13362,7 @@ void UninterpretedOption_NamePart::InternalSwap(UninterpretedOption_NamePart* ot ::google::protobuf::Metadata UninterpretedOption_NamePart::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[19]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -13133,6 +13400,7 @@ void UninterpretedOption_NamePart::set_name_part(::std::string&& value) { } #endif void UninterpretedOption_NamePart::set_name_part(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name_part(); name_part_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.UninterpretedOption.NamePart.name_part) @@ -13261,7 +13529,7 @@ void UninterpretedOption::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* UninterpretedOption::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[20].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const UninterpretedOption& UninterpretedOption::default_instance() { @@ -13316,13 +13584,11 @@ bool UninterpretedOption::MergePartialFromCodedStream( case 2: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(18u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_name())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -13437,14 +13703,18 @@ bool UninterpretedOption::MergePartialFromCodedStream( void UninterpretedOption::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.UninterpretedOption) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated .google.protobuf.UninterpretedOption.NamePart name = 2; for (unsigned int i = 0, n = this->name_size(); i < n; i++) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( 2, this->name(i), output); } + cached_has_bits = _has_bits_[0]; // optional string identifier_value = 3; - if (has_identifier_value()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->identifier_value().data(), this->identifier_value().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -13454,28 +13724,28 @@ void UninterpretedOption::SerializeWithCachedSizes( } // optional uint64 positive_int_value = 4; - if (has_positive_int_value()) { + if (cached_has_bits & 0x00000008u) { ::google::protobuf::internal::WireFormatLite::WriteUInt64(4, this->positive_int_value(), output); } // optional int64 negative_int_value = 5; - if (has_negative_int_value()) { + if (cached_has_bits & 0x00000010u) { ::google::protobuf::internal::WireFormatLite::WriteInt64(5, this->negative_int_value(), output); } // optional double double_value = 6; - if (has_double_value()) { + if (cached_has_bits & 0x00000020u) { ::google::protobuf::internal::WireFormatLite::WriteDouble(6, this->double_value(), output); } // optional bytes string_value = 7; - if (has_string_value()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased( 7, this->string_value(), output); } // optional string aggregate_value = 8; - if (has_aggregate_value()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->aggregate_value().data(), this->aggregate_value().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -13493,17 +13763,20 @@ void UninterpretedOption::SerializeWithCachedSizes( ::google::protobuf::uint8* UninterpretedOption::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.UninterpretedOption) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated .google.protobuf.UninterpretedOption.NamePart name = 2; for (unsigned int i = 0, n = this->name_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 2, this->name(i), false, target); + 2, this->name(i), deterministic, target); } + cached_has_bits = _has_bits_[0]; // optional string identifier_value = 3; - if (has_identifier_value()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->identifier_value().data(), this->identifier_value().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -13514,29 +13787,29 @@ ::google::protobuf::uint8* UninterpretedOption::InternalSerializeWithCachedSizes } // optional uint64 positive_int_value = 4; - if (has_positive_int_value()) { + if (cached_has_bits & 0x00000008u) { target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(4, this->positive_int_value(), target); } // optional int64 negative_int_value = 5; - if (has_negative_int_value()) { + if (cached_has_bits & 0x00000010u) { target = ::google::protobuf::internal::WireFormatLite::WriteInt64ToArray(5, this->negative_int_value(), target); } // optional double double_value = 6; - if (has_double_value()) { + if (cached_has_bits & 0x00000020u) { target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(6, this->double_value(), target); } // optional bytes string_value = 7; - if (has_string_value()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite::WriteBytesToArray( 7, this->string_value(), target); } // optional string aggregate_value = 8; - if (has_aggregate_value()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->aggregate_value().data(), this->aggregate_value().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -13642,29 +13915,34 @@ void UninterpretedOption::MergeFrom(const UninterpretedOption& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.UninterpretedOption) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + name_.MergeFrom(from.name_); - if (from._has_bits_[0 / 32] & 63u) { - if (from.has_identifier_value()) { + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 63u) { + if (cached_has_bits & 0x00000001u) { set_has_identifier_value(); identifier_value_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.identifier_value_); } - if (from.has_string_value()) { + if (cached_has_bits & 0x00000002u) { set_has_string_value(); string_value_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.string_value_); } - if (from.has_aggregate_value()) { + if (cached_has_bits & 0x00000004u) { set_has_aggregate_value(); aggregate_value_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.aggregate_value_); } - if (from.has_positive_int_value()) { - set_positive_int_value(from.positive_int_value()); + if (cached_has_bits & 0x00000008u) { + positive_int_value_ = from.positive_int_value_; } - if (from.has_negative_int_value()) { - set_negative_int_value(from.negative_int_value()); + if (cached_has_bits & 0x00000010u) { + negative_int_value_ = from.negative_int_value_; } - if (from.has_double_value()) { - set_double_value(from.double_value()); + if (cached_has_bits & 0x00000020u) { + double_value_ = from.double_value_; } + _has_bits_[0] |= cached_has_bits; } } @@ -13692,7 +13970,7 @@ void UninterpretedOption::Swap(UninterpretedOption* other) { InternalSwap(other); } void UninterpretedOption::InternalSwap(UninterpretedOption* other) { - name_.UnsafeArenaSwap(&other->name_); + name_.InternalSwap(&other->name_); identifier_value_.Swap(&other->identifier_value_); string_value_.Swap(&other->string_value_); aggregate_value_.Swap(&other->aggregate_value_); @@ -13706,7 +13984,7 @@ void UninterpretedOption::InternalSwap(UninterpretedOption* other) { ::google::protobuf::Metadata UninterpretedOption::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[20]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -13774,6 +14052,7 @@ void UninterpretedOption::set_identifier_value(::std::string&& value) { } #endif void UninterpretedOption::set_identifier_value(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_identifier_value(); identifier_value_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.UninterpretedOption.identifier_value) @@ -13908,6 +14187,7 @@ void UninterpretedOption::set_string_value(::std::string&& value) { } #endif void UninterpretedOption::set_string_value(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_string_value(); string_value_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.UninterpretedOption.string_value) @@ -13970,6 +14250,7 @@ void UninterpretedOption::set_aggregate_value(::std::string&& value) { } #endif void UninterpretedOption::set_aggregate_value(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_aggregate_value(); aggregate_value_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.UninterpretedOption.aggregate_value) @@ -14063,7 +14344,7 @@ void SourceCodeInfo_Location::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* SourceCodeInfo_Location::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[21].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const SourceCodeInfo_Location& SourceCodeInfo_Location::default_instance() { @@ -14218,6 +14499,9 @@ bool SourceCodeInfo_Location::MergePartialFromCodedStream( void SourceCodeInfo_Location::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.SourceCodeInfo.Location) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated int32 path = 1 [packed = true]; if (this->path_size() > 0) { ::google::protobuf::internal::WireFormatLite::WriteTag(1, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output); @@ -14238,8 +14522,9 @@ void SourceCodeInfo_Location::SerializeWithCachedSizes( this->span(i), output); } + cached_has_bits = _has_bits_[0]; // optional string leading_comments = 3; - if (has_leading_comments()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->leading_comments().data(), this->leading_comments().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -14249,7 +14534,7 @@ void SourceCodeInfo_Location::SerializeWithCachedSizes( } // optional string trailing_comments = 4; - if (has_trailing_comments()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->trailing_comments().data(), this->trailing_comments().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -14277,8 +14562,10 @@ void SourceCodeInfo_Location::SerializeWithCachedSizes( ::google::protobuf::uint8* SourceCodeInfo_Location::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.SourceCodeInfo.Location) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated int32 path = 1 [packed = true]; if (this->path_size() > 0) { target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray( @@ -14287,10 +14574,8 @@ ::google::protobuf::uint8* SourceCodeInfo_Location::InternalSerializeWithCachedS target); target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray( _path_cached_byte_size_, target); - } - for (int i = 0, n = this->path_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: - WriteInt32NoTagToArray(this->path(i), target); + WriteInt32NoTagToArray(this->path_, target); } // repeated int32 span = 2 [packed = true]; @@ -14301,14 +14586,13 @@ ::google::protobuf::uint8* SourceCodeInfo_Location::InternalSerializeWithCachedS target); target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray( _span_cached_byte_size_, target); - } - for (int i = 0, n = this->span_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: - WriteInt32NoTagToArray(this->span(i), target); + WriteInt32NoTagToArray(this->span_, target); } + cached_has_bits = _has_bits_[0]; // optional string leading_comments = 3; - if (has_leading_comments()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->leading_comments().data(), this->leading_comments().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -14319,7 +14603,7 @@ ::google::protobuf::uint8* SourceCodeInfo_Location::InternalSerializeWithCachedS } // optional string trailing_comments = 4; - if (has_trailing_comments()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->trailing_comments().data(), this->trailing_comments().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -14436,15 +14720,19 @@ void SourceCodeInfo_Location::MergeFrom(const SourceCodeInfo_Location& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.SourceCodeInfo.Location) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + path_.MergeFrom(from.path_); span_.MergeFrom(from.span_); leading_detached_comments_.MergeFrom(from.leading_detached_comments_); - if (from._has_bits_[0 / 32] & 3u) { - if (from.has_leading_comments()) { + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 3u) { + if (cached_has_bits & 0x00000001u) { set_has_leading_comments(); leading_comments_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.leading_comments_); } - if (from.has_trailing_comments()) { + if (cached_has_bits & 0x00000002u) { set_has_trailing_comments(); trailing_comments_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.trailing_comments_); } @@ -14474,9 +14762,9 @@ void SourceCodeInfo_Location::Swap(SourceCodeInfo_Location* other) { InternalSwap(other); } void SourceCodeInfo_Location::InternalSwap(SourceCodeInfo_Location* other) { - path_.UnsafeArenaSwap(&other->path_); - span_.UnsafeArenaSwap(&other->span_); - leading_detached_comments_.UnsafeArenaSwap(&other->leading_detached_comments_); + path_.InternalSwap(&other->path_); + span_.InternalSwap(&other->span_); + leading_detached_comments_.InternalSwap(&other->leading_detached_comments_); leading_comments_.Swap(&other->leading_comments_); trailing_comments_.Swap(&other->trailing_comments_); std::swap(_has_bits_[0], other->_has_bits_[0]); @@ -14486,7 +14774,7 @@ void SourceCodeInfo_Location::InternalSwap(SourceCodeInfo_Location* other) { ::google::protobuf::Metadata SourceCodeInfo_Location::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[21]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -14584,6 +14872,7 @@ void SourceCodeInfo_Location::set_leading_comments(::std::string&& value) { } #endif void SourceCodeInfo_Location::set_leading_comments(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_leading_comments(); leading_comments_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.SourceCodeInfo.Location.leading_comments) @@ -14646,6 +14935,7 @@ void SourceCodeInfo_Location::set_trailing_comments(::std::string&& value) { } #endif void SourceCodeInfo_Location::set_trailing_comments(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_trailing_comments(); trailing_comments_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.SourceCodeInfo.Location.trailing_comments) @@ -14702,6 +14992,7 @@ void SourceCodeInfo_Location::set_leading_detached_comments(int index, ::std::st } #endif void SourceCodeInfo_Location::set_leading_detached_comments(int index, const char* value) { + GOOGLE_DCHECK(value != NULL); leading_detached_comments_.Mutable(index)->assign(value); // @@protoc_insertion_point(field_set_char:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) } @@ -14720,11 +15011,12 @@ void SourceCodeInfo_Location::add_leading_detached_comments(const ::std::string& } #if LANG_CXX11 void SourceCodeInfo_Location::add_leading_detached_comments(::std::string&& value) { - leading_detached_comments_.Add()->assign(std::move(value)); + leading_detached_comments_.Add(std::move(value)); // @@protoc_insertion_point(field_add:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) } #endif void SourceCodeInfo_Location::add_leading_detached_comments(const char* value) { + GOOGLE_DCHECK(value != NULL); leading_detached_comments_.Add()->assign(value); // @@protoc_insertion_point(field_add_char:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) } @@ -14788,7 +15080,7 @@ void SourceCodeInfo::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* SourceCodeInfo::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[22].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const SourceCodeInfo& SourceCodeInfo::default_instance() { @@ -14825,13 +15117,11 @@ bool SourceCodeInfo::MergePartialFromCodedStream( case 1: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(10u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_location())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -14860,6 +15150,9 @@ bool SourceCodeInfo::MergePartialFromCodedStream( void SourceCodeInfo::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.SourceCodeInfo) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated .google.protobuf.SourceCodeInfo.Location location = 1; for (unsigned int i = 0, n = this->location_size(); i < n; i++) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( @@ -14875,13 +15168,15 @@ void SourceCodeInfo::SerializeWithCachedSizes( ::google::protobuf::uint8* SourceCodeInfo::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.SourceCodeInfo) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated .google.protobuf.SourceCodeInfo.Location location = 1; for (unsigned int i = 0, n = this->location_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 1, this->location(i), false, target); + 1, this->location(i), deterministic, target); } if (_internal_metadata_.have_unknown_fields()) { @@ -14938,6 +15233,9 @@ void SourceCodeInfo::MergeFrom(const SourceCodeInfo& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.SourceCodeInfo) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + location_.MergeFrom(from.location_); } @@ -14964,7 +15262,7 @@ void SourceCodeInfo::Swap(SourceCodeInfo* other) { InternalSwap(other); } void SourceCodeInfo::InternalSwap(SourceCodeInfo* other) { - location_.UnsafeArenaSwap(&other->location_); + location_.InternalSwap(&other->location_); std::swap(_has_bits_[0], other->_has_bits_[0]); _internal_metadata_.Swap(&other->_internal_metadata_); std::swap(_cached_size_, other->_cached_size_); @@ -14972,7 +15270,7 @@ void SourceCodeInfo::InternalSwap(SourceCodeInfo* other) { ::google::protobuf::Metadata SourceCodeInfo::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[22]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -15067,7 +15365,7 @@ void GeneratedCodeInfo_Annotation::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* GeneratedCodeInfo_Annotation::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[23].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const GeneratedCodeInfo_Annotation& GeneratedCodeInfo_Annotation::default_instance() { @@ -15195,6 +15493,9 @@ bool GeneratedCodeInfo_Annotation::MergePartialFromCodedStream( void GeneratedCodeInfo_Annotation::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.GeneratedCodeInfo.Annotation) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated int32 path = 1 [packed = true]; if (this->path_size() > 0) { ::google::protobuf::internal::WireFormatLite::WriteTag(1, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output); @@ -15205,8 +15506,9 @@ void GeneratedCodeInfo_Annotation::SerializeWithCachedSizes( this->path(i), output); } + cached_has_bits = _has_bits_[0]; // optional string source_file = 2; - if (has_source_file()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->source_file().data(), this->source_file().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -15216,12 +15518,12 @@ void GeneratedCodeInfo_Annotation::SerializeWithCachedSizes( } // optional int32 begin = 3; - if (has_begin()) { + if (cached_has_bits & 0x00000002u) { ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->begin(), output); } // optional int32 end = 4; - if (has_end()) { + if (cached_has_bits & 0x00000004u) { ::google::protobuf::internal::WireFormatLite::WriteInt32(4, this->end(), output); } @@ -15234,8 +15536,10 @@ void GeneratedCodeInfo_Annotation::SerializeWithCachedSizes( ::google::protobuf::uint8* GeneratedCodeInfo_Annotation::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.GeneratedCodeInfo.Annotation) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated int32 path = 1 [packed = true]; if (this->path_size() > 0) { target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray( @@ -15244,14 +15548,13 @@ ::google::protobuf::uint8* GeneratedCodeInfo_Annotation::InternalSerializeWithCa target); target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray( _path_cached_byte_size_, target); - } - for (int i = 0, n = this->path_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: - WriteInt32NoTagToArray(this->path(i), target); + WriteInt32NoTagToArray(this->path_, target); } + cached_has_bits = _has_bits_[0]; // optional string source_file = 2; - if (has_source_file()) { + if (cached_has_bits & 0x00000001u) { ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( this->source_file().data(), this->source_file().length(), ::google::protobuf::internal::WireFormat::SERIALIZE, @@ -15262,12 +15565,12 @@ ::google::protobuf::uint8* GeneratedCodeInfo_Annotation::InternalSerializeWithCa } // optional int32 begin = 3; - if (has_begin()) { + if (cached_has_bits & 0x00000002u) { target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(3, this->begin(), target); } // optional int32 end = 4; - if (has_end()) { + if (cached_has_bits & 0x00000004u) { target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(4, this->end(), target); } @@ -15352,18 +15655,23 @@ void GeneratedCodeInfo_Annotation::MergeFrom(const GeneratedCodeInfo_Annotation& // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.GeneratedCodeInfo.Annotation) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + path_.MergeFrom(from.path_); - if (from._has_bits_[0 / 32] & 7u) { - if (from.has_source_file()) { + cached_has_bits = from._has_bits_[0]; + if (cached_has_bits & 7u) { + if (cached_has_bits & 0x00000001u) { set_has_source_file(); source_file_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.source_file_); } - if (from.has_begin()) { - set_begin(from.begin()); + if (cached_has_bits & 0x00000002u) { + begin_ = from.begin_; } - if (from.has_end()) { - set_end(from.end()); + if (cached_has_bits & 0x00000004u) { + end_ = from.end_; } + _has_bits_[0] |= cached_has_bits; } } @@ -15390,7 +15698,7 @@ void GeneratedCodeInfo_Annotation::Swap(GeneratedCodeInfo_Annotation* other) { InternalSwap(other); } void GeneratedCodeInfo_Annotation::InternalSwap(GeneratedCodeInfo_Annotation* other) { - path_.UnsafeArenaSwap(&other->path_); + path_.InternalSwap(&other->path_); source_file_.Swap(&other->source_file_); std::swap(begin_, other->begin_); std::swap(end_, other->end_); @@ -15401,7 +15709,7 @@ void GeneratedCodeInfo_Annotation::InternalSwap(GeneratedCodeInfo_Annotation* ot ::google::protobuf::Metadata GeneratedCodeInfo_Annotation::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[23]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -15469,6 +15777,7 @@ void GeneratedCodeInfo_Annotation::set_source_file(::std::string&& value) { } #endif void GeneratedCodeInfo_Annotation::set_source_file(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_source_file(); source_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.GeneratedCodeInfo.Annotation.source_file) @@ -15592,7 +15901,7 @@ void GeneratedCodeInfo::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* GeneratedCodeInfo::descriptor() { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[24].descriptor; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const GeneratedCodeInfo& GeneratedCodeInfo::default_instance() { @@ -15629,13 +15938,11 @@ bool GeneratedCodeInfo::MergePartialFromCodedStream( case 1: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(10u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_annotation())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -15664,6 +15971,9 @@ bool GeneratedCodeInfo::MergePartialFromCodedStream( void GeneratedCodeInfo::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.GeneratedCodeInfo) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; for (unsigned int i = 0, n = this->annotation_size(); i < n; i++) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( @@ -15679,13 +15989,15 @@ void GeneratedCodeInfo::SerializeWithCachedSizes( ::google::protobuf::uint8* GeneratedCodeInfo::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.GeneratedCodeInfo) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; for (unsigned int i = 0, n = this->annotation_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 1, this->annotation(i), false, target); + 1, this->annotation(i), deterministic, target); } if (_internal_metadata_.have_unknown_fields()) { @@ -15742,6 +16054,9 @@ void GeneratedCodeInfo::MergeFrom(const GeneratedCodeInfo& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.GeneratedCodeInfo) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + annotation_.MergeFrom(from.annotation_); } @@ -15768,7 +16083,7 @@ void GeneratedCodeInfo::Swap(GeneratedCodeInfo* other) { InternalSwap(other); } void GeneratedCodeInfo::InternalSwap(GeneratedCodeInfo* other) { - annotation_.UnsafeArenaSwap(&other->annotation_); + annotation_.InternalSwap(&other->annotation_); std::swap(_has_bits_[0], other->_has_bits_[0]); _internal_metadata_.Swap(&other->_internal_metadata_); std::swap(_cached_size_, other->_cached_size_); @@ -15776,7 +16091,7 @@ void GeneratedCodeInfo::InternalSwap(GeneratedCodeInfo* other) { ::google::protobuf::Metadata GeneratedCodeInfo::GetMetadata() const { protobuf_google_2fprotobuf_2fdescriptor_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[24]; + return protobuf_google_2fprotobuf_2fdescriptor_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.pb.h b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.pb.h index 10708963af37e1..d1ed2b1f516787 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.pb.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.pb.h @@ -8,12 +8,12 @@ #include -#if GOOGLE_PROTOBUF_VERSION < 3002000 +#if GOOGLE_PROTOBUF_VERSION < 3003000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3002000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -116,6 +117,9 @@ namespace protobuf { namespace protobuf_google_2fprotobuf_2fdescriptor_2eproto { // Internal implementation detail -- do not call these. struct LIBPROTOBUF_EXPORT TableStruct { + static const ::google::protobuf::internal::ParseTableField entries[]; + static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; + static const ::google::protobuf::internal::ParseTable schema[]; static const ::google::protobuf::uint32 offsets[]; static void InitDefaultsImpl(); static void Shutdown(); @@ -288,6 +292,8 @@ class LIBPROTOBUF_EXPORT FileDescriptorSet : public ::google::protobuf::Message return reinterpret_cast( &_FileDescriptorSet_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 0; void Swap(FileDescriptorSet* other); @@ -310,11 +316,6 @@ class LIBPROTOBUF_EXPORT FileDescriptorSet : public ::google::protobuf::Message ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -386,6 +387,8 @@ class LIBPROTOBUF_EXPORT FileDescriptorProto : public ::google::protobuf::Messag return reinterpret_cast( &_FileDescriptorProto_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 1; void Swap(FileDescriptorProto* other); @@ -408,11 +411,6 @@ class LIBPROTOBUF_EXPORT FileDescriptorProto : public ::google::protobuf::Messag ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -456,30 +454,6 @@ class LIBPROTOBUF_EXPORT FileDescriptorProto : public ::google::protobuf::Messag const ::google::protobuf::RepeatedPtrField< ::std::string>& dependency() const; ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_dependency(); - // repeated int32 public_dependency = 10; - int public_dependency_size() const; - void clear_public_dependency(); - static const int kPublicDependencyFieldNumber = 10; - ::google::protobuf::int32 public_dependency(int index) const; - void set_public_dependency(int index, ::google::protobuf::int32 value); - void add_public_dependency(::google::protobuf::int32 value); - const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& - public_dependency() const; - ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* - mutable_public_dependency(); - - // repeated int32 weak_dependency = 11; - int weak_dependency_size() const; - void clear_weak_dependency(); - static const int kWeakDependencyFieldNumber = 11; - ::google::protobuf::int32 weak_dependency(int index) const; - void set_weak_dependency(int index, ::google::protobuf::int32 value); - void add_weak_dependency(::google::protobuf::int32 value); - const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& - weak_dependency() const; - ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* - mutable_weak_dependency(); - // repeated .google.protobuf.DescriptorProto message_type = 4; int message_type_size() const; void clear_message_type(); @@ -528,6 +502,30 @@ class LIBPROTOBUF_EXPORT FileDescriptorProto : public ::google::protobuf::Messag const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >& extension() const; + // repeated int32 public_dependency = 10; + int public_dependency_size() const; + void clear_public_dependency(); + static const int kPublicDependencyFieldNumber = 10; + ::google::protobuf::int32 public_dependency(int index) const; + void set_public_dependency(int index, ::google::protobuf::int32 value); + void add_public_dependency(::google::protobuf::int32 value); + const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& + public_dependency() const; + ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* + mutable_public_dependency(); + + // repeated int32 weak_dependency = 11; + int weak_dependency_size() const; + void clear_weak_dependency(); + static const int kWeakDependencyFieldNumber = 11; + ::google::protobuf::int32 weak_dependency(int index) const; + void set_weak_dependency(int index, ::google::protobuf::int32 value); + void add_weak_dependency(::google::protobuf::int32 value); + const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& + weak_dependency() const; + ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* + mutable_weak_dependency(); + // optional string name = 1; bool has_name() const; void clear_name(); @@ -608,12 +606,12 @@ class LIBPROTOBUF_EXPORT FileDescriptorProto : public ::google::protobuf::Messag ::google::protobuf::internal::HasBits<1> _has_bits_; mutable int _cached_size_; ::google::protobuf::RepeatedPtrField< ::std::string> dependency_; - ::google::protobuf::RepeatedField< ::google::protobuf::int32 > public_dependency_; - ::google::protobuf::RepeatedField< ::google::protobuf::int32 > weak_dependency_; ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto > message_type_; ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto > enum_type_; ::google::protobuf::RepeatedPtrField< ::google::protobuf::ServiceDescriptorProto > service_; ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto > extension_; + ::google::protobuf::RepeatedField< ::google::protobuf::int32 > public_dependency_; + ::google::protobuf::RepeatedField< ::google::protobuf::int32 > weak_dependency_; ::google::protobuf::internal::ArenaStringPtr name_; ::google::protobuf::internal::ArenaStringPtr package_; ::google::protobuf::internal::ArenaStringPtr syntax_; @@ -650,6 +648,8 @@ class LIBPROTOBUF_EXPORT DescriptorProto_ExtensionRange : public ::google::proto return reinterpret_cast( &_DescriptorProto_ExtensionRange_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 2; void Swap(DescriptorProto_ExtensionRange* other); @@ -672,11 +672,6 @@ class LIBPROTOBUF_EXPORT DescriptorProto_ExtensionRange : public ::google::proto ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -755,6 +750,8 @@ class LIBPROTOBUF_EXPORT DescriptorProto_ReservedRange : public ::google::protob return reinterpret_cast( &_DescriptorProto_ReservedRange_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 3; void Swap(DescriptorProto_ReservedRange* other); @@ -777,11 +774,6 @@ class LIBPROTOBUF_EXPORT DescriptorProto_ReservedRange : public ::google::protob ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -860,6 +852,8 @@ class LIBPROTOBUF_EXPORT DescriptorProto : public ::google::protobuf::Message /* return reinterpret_cast( &_DescriptorProto_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 4; void Swap(DescriptorProto* other); @@ -882,11 +876,6 @@ class LIBPROTOBUF_EXPORT DescriptorProto : public ::google::protobuf::Message /* ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -923,18 +912,6 @@ class LIBPROTOBUF_EXPORT DescriptorProto : public ::google::protobuf::Message /* const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >& field() const; - // repeated .google.protobuf.FieldDescriptorProto extension = 6; - int extension_size() const; - void clear_extension(); - static const int kExtensionFieldNumber = 6; - const ::google::protobuf::FieldDescriptorProto& extension(int index) const; - ::google::protobuf::FieldDescriptorProto* mutable_extension(int index); - ::google::protobuf::FieldDescriptorProto* add_extension(); - ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >* - mutable_extension(); - const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >& - extension() const; - // repeated .google.protobuf.DescriptorProto nested_type = 3; int nested_type_size() const; void clear_nested_type(); @@ -971,6 +948,18 @@ class LIBPROTOBUF_EXPORT DescriptorProto : public ::google::protobuf::Message /* const ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto_ExtensionRange >& extension_range() const; + // repeated .google.protobuf.FieldDescriptorProto extension = 6; + int extension_size() const; + void clear_extension(); + static const int kExtensionFieldNumber = 6; + const ::google::protobuf::FieldDescriptorProto& extension(int index) const; + ::google::protobuf::FieldDescriptorProto* mutable_extension(int index); + ::google::protobuf::FieldDescriptorProto* add_extension(); + ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >* + mutable_extension(); + const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >& + extension() const; + // repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; int oneof_decl_size() const; void clear_oneof_decl(); @@ -1052,10 +1041,10 @@ class LIBPROTOBUF_EXPORT DescriptorProto : public ::google::protobuf::Message /* ::google::protobuf::internal::HasBits<1> _has_bits_; mutable int _cached_size_; ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto > field_; - ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto > extension_; ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto > nested_type_; ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto > enum_type_; ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto_ExtensionRange > extension_range_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto > extension_; ::google::protobuf::RepeatedPtrField< ::google::protobuf::OneofDescriptorProto > oneof_decl_; ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto_ReservedRange > reserved_range_; ::google::protobuf::RepeatedPtrField< ::std::string> reserved_name_; @@ -1092,6 +1081,8 @@ class LIBPROTOBUF_EXPORT FieldDescriptorProto : public ::google::protobuf::Messa return reinterpret_cast( &_FieldDescriptorProto_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 5; void Swap(FieldDescriptorProto* other); @@ -1114,11 +1105,6 @@ class LIBPROTOBUF_EXPORT FieldDescriptorProto : public ::google::protobuf::Messa ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -1241,21 +1227,6 @@ class LIBPROTOBUF_EXPORT FieldDescriptorProto : public ::google::protobuf::Messa ::std::string* release_name(); void set_allocated_name(::std::string* name); - // optional string type_name = 6; - bool has_type_name() const; - void clear_type_name(); - static const int kTypeNameFieldNumber = 6; - const ::std::string& type_name() const; - void set_type_name(const ::std::string& value); - #if LANG_CXX11 - void set_type_name(::std::string&& value); - #endif - void set_type_name(const char* value); - void set_type_name(const char* value, size_t size); - ::std::string* mutable_type_name(); - ::std::string* release_type_name(); - void set_allocated_type_name(::std::string* type_name); - // optional string extendee = 2; bool has_extendee() const; void clear_extendee(); @@ -1271,6 +1242,21 @@ class LIBPROTOBUF_EXPORT FieldDescriptorProto : public ::google::protobuf::Messa ::std::string* release_extendee(); void set_allocated_extendee(::std::string* extendee); + // optional string type_name = 6; + bool has_type_name() const; + void clear_type_name(); + static const int kTypeNameFieldNumber = 6; + const ::std::string& type_name() const; + void set_type_name(const ::std::string& value); + #if LANG_CXX11 + void set_type_name(::std::string&& value); + #endif + void set_type_name(const char* value); + void set_type_name(const char* value, size_t size); + ::std::string* mutable_type_name(); + ::std::string* release_type_name(); + void set_allocated_type_name(::std::string* type_name); + // optional string default_value = 7; bool has_default_value() const; void clear_default_value(); @@ -1365,8 +1351,8 @@ class LIBPROTOBUF_EXPORT FieldDescriptorProto : public ::google::protobuf::Messa ::google::protobuf::internal::HasBits<1> _has_bits_; mutable int _cached_size_; ::google::protobuf::internal::ArenaStringPtr name_; - ::google::protobuf::internal::ArenaStringPtr type_name_; ::google::protobuf::internal::ArenaStringPtr extendee_; + ::google::protobuf::internal::ArenaStringPtr type_name_; ::google::protobuf::internal::ArenaStringPtr default_value_; ::google::protobuf::internal::ArenaStringPtr json_name_; ::google::protobuf::FieldOptions* options_; @@ -1405,6 +1391,8 @@ class LIBPROTOBUF_EXPORT OneofDescriptorProto : public ::google::protobuf::Messa return reinterpret_cast( &_OneofDescriptorProto_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 6; void Swap(OneofDescriptorProto* other); @@ -1427,11 +1415,6 @@ class LIBPROTOBUF_EXPORT OneofDescriptorProto : public ::google::protobuf::Messa ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -1520,6 +1503,8 @@ class LIBPROTOBUF_EXPORT EnumDescriptorProto : public ::google::protobuf::Messag return reinterpret_cast( &_EnumDescriptorProto_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 7; void Swap(EnumDescriptorProto* other); @@ -1542,11 +1527,6 @@ class LIBPROTOBUF_EXPORT EnumDescriptorProto : public ::google::protobuf::Messag ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -1648,6 +1628,8 @@ class LIBPROTOBUF_EXPORT EnumValueDescriptorProto : public ::google::protobuf::M return reinterpret_cast( &_EnumValueDescriptorProto_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 8; void Swap(EnumValueDescriptorProto* other); @@ -1670,11 +1652,6 @@ class LIBPROTOBUF_EXPORT EnumValueDescriptorProto : public ::google::protobuf::M ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -1773,6 +1750,8 @@ class LIBPROTOBUF_EXPORT ServiceDescriptorProto : public ::google::protobuf::Mes return reinterpret_cast( &_ServiceDescriptorProto_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 9; void Swap(ServiceDescriptorProto* other); @@ -1795,11 +1774,6 @@ class LIBPROTOBUF_EXPORT ServiceDescriptorProto : public ::google::protobuf::Mes ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -1901,6 +1875,8 @@ class LIBPROTOBUF_EXPORT MethodDescriptorProto : public ::google::protobuf::Mess return reinterpret_cast( &_MethodDescriptorProto_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 10; void Swap(MethodDescriptorProto* other); @@ -1923,11 +1899,6 @@ class LIBPROTOBUF_EXPORT MethodDescriptorProto : public ::google::protobuf::Mess ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -2072,6 +2043,8 @@ class LIBPROTOBUF_EXPORT FileOptions : public ::google::protobuf::Message /* @@p return reinterpret_cast( &_FileOptions_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 11; void Swap(FileOptions* other); @@ -2094,11 +2067,6 @@ class LIBPROTOBUF_EXPORT FileOptions : public ::google::protobuf::Message /* @@p ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -2417,6 +2385,8 @@ class LIBPROTOBUF_EXPORT MessageOptions : public ::google::protobuf::Message /* return reinterpret_cast( &_MessageOptions_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 12; void Swap(MessageOptions* other); @@ -2439,11 +2409,6 @@ class LIBPROTOBUF_EXPORT MessageOptions : public ::google::protobuf::Message /* ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -2558,6 +2523,8 @@ class LIBPROTOBUF_EXPORT FieldOptions : public ::google::protobuf::Message /* @@ return reinterpret_cast( &_FieldOptions_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 13; void Swap(FieldOptions* other); @@ -2580,11 +2547,6 @@ class LIBPROTOBUF_EXPORT FieldOptions : public ::google::protobuf::Message /* @@ ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -2681,13 +2643,6 @@ class LIBPROTOBUF_EXPORT FieldOptions : public ::google::protobuf::Message /* @@ ::google::protobuf::FieldOptions_CType ctype() const; void set_ctype(::google::protobuf::FieldOptions_CType value); - // optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; - bool has_jstype() const; - void clear_jstype(); - static const int kJstypeFieldNumber = 6; - ::google::protobuf::FieldOptions_JSType jstype() const; - void set_jstype(::google::protobuf::FieldOptions_JSType value); - // optional bool packed = 2; bool has_packed() const; void clear_packed(); @@ -2716,6 +2671,13 @@ class LIBPROTOBUF_EXPORT FieldOptions : public ::google::protobuf::Message /* @@ bool weak() const; void set_weak(bool value); + // optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; + bool has_jstype() const; + void clear_jstype(); + static const int kJstypeFieldNumber = 6; + ::google::protobuf::FieldOptions_JSType jstype() const; + void set_jstype(::google::protobuf::FieldOptions_JSType value); + GOOGLE_PROTOBUF_EXTENSION_ACCESSORS(FieldOptions) // @@protoc_insertion_point(class_scope:google.protobuf.FieldOptions) private: @@ -2739,11 +2701,11 @@ class LIBPROTOBUF_EXPORT FieldOptions : public ::google::protobuf::Message /* @@ mutable int _cached_size_; ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_; int ctype_; - int jstype_; bool packed_; bool lazy_; bool deprecated_; bool weak_; + int jstype_; friend struct protobuf_google_2fprotobuf_2fdescriptor_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -2775,6 +2737,8 @@ class LIBPROTOBUF_EXPORT OneofOptions : public ::google::protobuf::Message /* @@ return reinterpret_cast( &_OneofOptions_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 14; void Swap(OneofOptions* other); @@ -2797,11 +2761,6 @@ class LIBPROTOBUF_EXPORT OneofOptions : public ::google::protobuf::Message /* @@ ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -2876,6 +2835,8 @@ class LIBPROTOBUF_EXPORT EnumOptions : public ::google::protobuf::Message /* @@p return reinterpret_cast( &_EnumOptions_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 15; void Swap(EnumOptions* other); @@ -2898,11 +2859,6 @@ class LIBPROTOBUF_EXPORT EnumOptions : public ::google::protobuf::Message /* @@p ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -2997,6 +2953,8 @@ class LIBPROTOBUF_EXPORT EnumValueOptions : public ::google::protobuf::Message / return reinterpret_cast( &_EnumValueOptions_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 16; void Swap(EnumValueOptions* other); @@ -3019,11 +2977,6 @@ class LIBPROTOBUF_EXPORT EnumValueOptions : public ::google::protobuf::Message / ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -3108,6 +3061,8 @@ class LIBPROTOBUF_EXPORT ServiceOptions : public ::google::protobuf::Message /* return reinterpret_cast( &_ServiceOptions_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 17; void Swap(ServiceOptions* other); @@ -3130,11 +3085,6 @@ class LIBPROTOBUF_EXPORT ServiceOptions : public ::google::protobuf::Message /* ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -3219,6 +3169,8 @@ class LIBPROTOBUF_EXPORT MethodOptions : public ::google::protobuf::Message /* @ return reinterpret_cast( &_MethodOptions_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 18; void Swap(MethodOptions* other); @@ -3241,11 +3193,6 @@ class LIBPROTOBUF_EXPORT MethodOptions : public ::google::protobuf::Message /* @ ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -3368,6 +3315,8 @@ class LIBPROTOBUF_EXPORT UninterpretedOption_NamePart : public ::google::protobu return reinterpret_cast( &_UninterpretedOption_NamePart_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 19; void Swap(UninterpretedOption_NamePart* other); @@ -3390,11 +3339,6 @@ class LIBPROTOBUF_EXPORT UninterpretedOption_NamePart : public ::google::protobu ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -3484,6 +3428,8 @@ class LIBPROTOBUF_EXPORT UninterpretedOption : public ::google::protobuf::Messag return reinterpret_cast( &_UninterpretedOption_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 20; void Swap(UninterpretedOption* other); @@ -3506,11 +3452,6 @@ class LIBPROTOBUF_EXPORT UninterpretedOption : public ::google::protobuf::Messag ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -3668,6 +3609,8 @@ class LIBPROTOBUF_EXPORT SourceCodeInfo_Location : public ::google::protobuf::Me return reinterpret_cast( &_SourceCodeInfo_Location_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 21; void Swap(SourceCodeInfo_Location* other); @@ -3690,11 +3633,6 @@ class LIBPROTOBUF_EXPORT SourceCodeInfo_Location : public ::google::protobuf::Me ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -3840,6 +3778,8 @@ class LIBPROTOBUF_EXPORT SourceCodeInfo : public ::google::protobuf::Message /* return reinterpret_cast( &_SourceCodeInfo_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 22; void Swap(SourceCodeInfo* other); @@ -3862,11 +3802,6 @@ class LIBPROTOBUF_EXPORT SourceCodeInfo : public ::google::protobuf::Message /* ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -3940,6 +3875,8 @@ class LIBPROTOBUF_EXPORT GeneratedCodeInfo_Annotation : public ::google::protobu return reinterpret_cast( &_GeneratedCodeInfo_Annotation_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 23; void Swap(GeneratedCodeInfo_Annotation* other); @@ -3962,11 +3899,6 @@ class LIBPROTOBUF_EXPORT GeneratedCodeInfo_Annotation : public ::google::protobu ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -4077,6 +4009,8 @@ class LIBPROTOBUF_EXPORT GeneratedCodeInfo : public ::google::protobuf::Message return reinterpret_cast( &_GeneratedCodeInfo_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 24; void Swap(GeneratedCodeInfo* other); @@ -4099,11 +4033,6 @@ class LIBPROTOBUF_EXPORT GeneratedCodeInfo : public ::google::protobuf::Message ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -4222,6 +4151,7 @@ inline void FileDescriptorProto::set_name(::std::string&& value) { } #endif inline void FileDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileDescriptorProto.name) @@ -4284,6 +4214,7 @@ inline void FileDescriptorProto::set_package(::std::string&& value) { } #endif inline void FileDescriptorProto::set_package(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_package(); package_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileDescriptorProto.package) @@ -4340,6 +4271,7 @@ inline void FileDescriptorProto::set_dependency(int index, ::std::string&& value } #endif inline void FileDescriptorProto::set_dependency(int index, const char* value) { + GOOGLE_DCHECK(value != NULL); dependency_.Mutable(index)->assign(value); // @@protoc_insertion_point(field_set_char:google.protobuf.FileDescriptorProto.dependency) } @@ -4358,11 +4290,12 @@ inline void FileDescriptorProto::add_dependency(const ::std::string& value) { } #if LANG_CXX11 inline void FileDescriptorProto::add_dependency(::std::string&& value) { - dependency_.Add()->assign(std::move(value)); + dependency_.Add(std::move(value)); // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.dependency) } #endif inline void FileDescriptorProto::add_dependency(const char* value) { + GOOGLE_DCHECK(value != NULL); dependency_.Add()->assign(value); // @@protoc_insertion_point(field_add_char:google.protobuf.FileDescriptorProto.dependency) } @@ -4683,6 +4616,7 @@ inline void FileDescriptorProto::set_syntax(::std::string&& value) { } #endif inline void FileDescriptorProto::set_syntax(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_syntax(); syntax_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileDescriptorProto.syntax) @@ -4853,6 +4787,7 @@ inline void DescriptorProto::set_name(::std::string&& value) { } #endif inline void DescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.DescriptorProto.name) @@ -5164,6 +5099,7 @@ inline void DescriptorProto::set_reserved_name(int index, ::std::string&& value) } #endif inline void DescriptorProto::set_reserved_name(int index, const char* value) { + GOOGLE_DCHECK(value != NULL); reserved_name_.Mutable(index)->assign(value); // @@protoc_insertion_point(field_set_char:google.protobuf.DescriptorProto.reserved_name) } @@ -5182,11 +5118,12 @@ inline void DescriptorProto::add_reserved_name(const ::std::string& value) { } #if LANG_CXX11 inline void DescriptorProto::add_reserved_name(::std::string&& value) { - reserved_name_.Add()->assign(std::move(value)); + reserved_name_.Add(std::move(value)); // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.reserved_name) } #endif inline void DescriptorProto::add_reserved_name(const char* value) { + GOOGLE_DCHECK(value != NULL); reserved_name_.Add()->assign(value); // @@protoc_insertion_point(field_add_char:google.protobuf.DescriptorProto.reserved_name) } @@ -5241,6 +5178,7 @@ inline void FieldDescriptorProto::set_name(::std::string&& value) { } #endif inline void FieldDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.name) @@ -5347,13 +5285,13 @@ inline void FieldDescriptorProto::set_type(::google::protobuf::FieldDescriptorPr // optional string type_name = 6; inline bool FieldDescriptorProto::has_type_name() const { - return (_has_bits_[0] & 0x00000002u) != 0; + return (_has_bits_[0] & 0x00000004u) != 0; } inline void FieldDescriptorProto::set_has_type_name() { - _has_bits_[0] |= 0x00000002u; + _has_bits_[0] |= 0x00000004u; } inline void FieldDescriptorProto::clear_has_type_name() { - _has_bits_[0] &= ~0x00000002u; + _has_bits_[0] &= ~0x00000004u; } inline void FieldDescriptorProto::clear_type_name() { type_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); @@ -5377,6 +5315,7 @@ inline void FieldDescriptorProto::set_type_name(::std::string&& value) { } #endif inline void FieldDescriptorProto::set_type_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_type_name(); type_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.type_name) @@ -5409,13 +5348,13 @@ inline void FieldDescriptorProto::set_allocated_type_name(::std::string* type_na // optional string extendee = 2; inline bool FieldDescriptorProto::has_extendee() const { - return (_has_bits_[0] & 0x00000004u) != 0; + return (_has_bits_[0] & 0x00000002u) != 0; } inline void FieldDescriptorProto::set_has_extendee() { - _has_bits_[0] |= 0x00000004u; + _has_bits_[0] |= 0x00000002u; } inline void FieldDescriptorProto::clear_has_extendee() { - _has_bits_[0] &= ~0x00000004u; + _has_bits_[0] &= ~0x00000002u; } inline void FieldDescriptorProto::clear_extendee() { extendee_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); @@ -5439,6 +5378,7 @@ inline void FieldDescriptorProto::set_extendee(::std::string&& value) { } #endif inline void FieldDescriptorProto::set_extendee(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_extendee(); extendee_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.extendee) @@ -5501,6 +5441,7 @@ inline void FieldDescriptorProto::set_default_value(::std::string&& value) { } #endif inline void FieldDescriptorProto::set_default_value(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_default_value(); default_value_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.default_value) @@ -5587,6 +5528,7 @@ inline void FieldDescriptorProto::set_json_name(::std::string&& value) { } #endif inline void FieldDescriptorProto::set_json_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_json_name(); json_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.json_name) @@ -5698,6 +5640,7 @@ inline void OneofDescriptorProto::set_name(::std::string&& value) { } #endif inline void OneofDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.OneofDescriptorProto.name) @@ -5809,6 +5752,7 @@ inline void EnumDescriptorProto::set_name(::std::string&& value) { } #endif inline void EnumDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.EnumDescriptorProto.name) @@ -5950,6 +5894,7 @@ inline void EnumValueDescriptorProto::set_name(::std::string&& value) { } #endif inline void EnumValueDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.EnumValueDescriptorProto.name) @@ -6085,6 +6030,7 @@ inline void ServiceDescriptorProto::set_name(::std::string&& value) { } #endif inline void ServiceDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.ServiceDescriptorProto.name) @@ -6226,6 +6172,7 @@ inline void MethodDescriptorProto::set_name(::std::string&& value) { } #endif inline void MethodDescriptorProto::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name(); name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.MethodDescriptorProto.name) @@ -6288,6 +6235,7 @@ inline void MethodDescriptorProto::set_input_type(::std::string&& value) { } #endif inline void MethodDescriptorProto::set_input_type(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_input_type(); input_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.MethodDescriptorProto.input_type) @@ -6350,6 +6298,7 @@ inline void MethodDescriptorProto::set_output_type(::std::string&& value) { } #endif inline void MethodDescriptorProto::set_output_type(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_output_type(); output_type_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.MethodDescriptorProto.output_type) @@ -6509,6 +6458,7 @@ inline void FileOptions::set_java_package(::std::string&& value) { } #endif inline void FileOptions::set_java_package(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_java_package(); java_package_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.java_package) @@ -6571,6 +6521,7 @@ inline void FileOptions::set_java_outer_classname(::std::string&& value) { } #endif inline void FileOptions::set_java_outer_classname(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_java_outer_classname(); java_outer_classname_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.java_outer_classname) @@ -6730,6 +6681,7 @@ inline void FileOptions::set_go_package(::std::string&& value) { } #endif inline void FileOptions::set_go_package(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_go_package(); go_package_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.go_package) @@ -6912,6 +6864,7 @@ inline void FileOptions::set_objc_class_prefix(::std::string&& value) { } #endif inline void FileOptions::set_objc_class_prefix(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_objc_class_prefix(); objc_class_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.objc_class_prefix) @@ -6974,6 +6927,7 @@ inline void FileOptions::set_csharp_namespace(::std::string&& value) { } #endif inline void FileOptions::set_csharp_namespace(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_csharp_namespace(); csharp_namespace_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.csharp_namespace) @@ -7036,6 +6990,7 @@ inline void FileOptions::set_swift_prefix(::std::string&& value) { } #endif inline void FileOptions::set_swift_prefix(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_swift_prefix(); swift_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.swift_prefix) @@ -7098,6 +7053,7 @@ inline void FileOptions::set_php_class_prefix(::std::string&& value) { } #endif inline void FileOptions::set_php_class_prefix(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_php_class_prefix(); php_class_prefix_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.php_class_prefix) @@ -7319,13 +7275,13 @@ inline void FieldOptions::set_ctype(::google::protobuf::FieldOptions_CType value // optional bool packed = 2; inline bool FieldOptions::has_packed() const { - return (_has_bits_[0] & 0x00000004u) != 0; + return (_has_bits_[0] & 0x00000002u) != 0; } inline void FieldOptions::set_has_packed() { - _has_bits_[0] |= 0x00000004u; + _has_bits_[0] |= 0x00000002u; } inline void FieldOptions::clear_has_packed() { - _has_bits_[0] &= ~0x00000004u; + _has_bits_[0] &= ~0x00000002u; } inline void FieldOptions::clear_packed() { packed_ = false; @@ -7343,13 +7299,13 @@ inline void FieldOptions::set_packed(bool value) { // optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; inline bool FieldOptions::has_jstype() const { - return (_has_bits_[0] & 0x00000002u) != 0; + return (_has_bits_[0] & 0x00000020u) != 0; } inline void FieldOptions::set_has_jstype() { - _has_bits_[0] |= 0x00000002u; + _has_bits_[0] |= 0x00000020u; } inline void FieldOptions::clear_has_jstype() { - _has_bits_[0] &= ~0x00000002u; + _has_bits_[0] &= ~0x00000020u; } inline void FieldOptions::clear_jstype() { jstype_ = 0; @@ -7368,13 +7324,13 @@ inline void FieldOptions::set_jstype(::google::protobuf::FieldOptions_JSType val // optional bool lazy = 5 [default = false]; inline bool FieldOptions::has_lazy() const { - return (_has_bits_[0] & 0x00000008u) != 0; + return (_has_bits_[0] & 0x00000004u) != 0; } inline void FieldOptions::set_has_lazy() { - _has_bits_[0] |= 0x00000008u; + _has_bits_[0] |= 0x00000004u; } inline void FieldOptions::clear_has_lazy() { - _has_bits_[0] &= ~0x00000008u; + _has_bits_[0] &= ~0x00000004u; } inline void FieldOptions::clear_lazy() { lazy_ = false; @@ -7392,13 +7348,13 @@ inline void FieldOptions::set_lazy(bool value) { // optional bool deprecated = 3 [default = false]; inline bool FieldOptions::has_deprecated() const { - return (_has_bits_[0] & 0x00000010u) != 0; + return (_has_bits_[0] & 0x00000008u) != 0; } inline void FieldOptions::set_has_deprecated() { - _has_bits_[0] |= 0x00000010u; + _has_bits_[0] |= 0x00000008u; } inline void FieldOptions::clear_has_deprecated() { - _has_bits_[0] &= ~0x00000010u; + _has_bits_[0] &= ~0x00000008u; } inline void FieldOptions::clear_deprecated() { deprecated_ = false; @@ -7416,13 +7372,13 @@ inline void FieldOptions::set_deprecated(bool value) { // optional bool weak = 10 [default = false]; inline bool FieldOptions::has_weak() const { - return (_has_bits_[0] & 0x00000020u) != 0; + return (_has_bits_[0] & 0x00000010u) != 0; } inline void FieldOptions::set_has_weak() { - _has_bits_[0] |= 0x00000020u; + _has_bits_[0] |= 0x00000010u; } inline void FieldOptions::clear_has_weak() { - _has_bits_[0] &= ~0x00000020u; + _has_bits_[0] &= ~0x00000010u; } inline void FieldOptions::clear_weak() { weak_ = false; @@ -7819,6 +7775,7 @@ inline void UninterpretedOption_NamePart::set_name_part(::std::string&& value) { } #endif inline void UninterpretedOption_NamePart::set_name_part(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_name_part(); name_part_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.UninterpretedOption.NamePart.name_part) @@ -7939,6 +7896,7 @@ inline void UninterpretedOption::set_identifier_value(::std::string&& value) { } #endif inline void UninterpretedOption::set_identifier_value(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_identifier_value(); identifier_value_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.UninterpretedOption.identifier_value) @@ -8073,6 +8031,7 @@ inline void UninterpretedOption::set_string_value(::std::string&& value) { } #endif inline void UninterpretedOption::set_string_value(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_string_value(); string_value_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.UninterpretedOption.string_value) @@ -8135,6 +8094,7 @@ inline void UninterpretedOption::set_aggregate_value(::std::string&& value) { } #endif inline void UninterpretedOption::set_aggregate_value(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_aggregate_value(); aggregate_value_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.UninterpretedOption.aggregate_value) @@ -8261,6 +8221,7 @@ inline void SourceCodeInfo_Location::set_leading_comments(::std::string&& value) } #endif inline void SourceCodeInfo_Location::set_leading_comments(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_leading_comments(); leading_comments_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.SourceCodeInfo.Location.leading_comments) @@ -8323,6 +8284,7 @@ inline void SourceCodeInfo_Location::set_trailing_comments(::std::string&& value } #endif inline void SourceCodeInfo_Location::set_trailing_comments(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_trailing_comments(); trailing_comments_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.SourceCodeInfo.Location.trailing_comments) @@ -8379,6 +8341,7 @@ inline void SourceCodeInfo_Location::set_leading_detached_comments(int index, :: } #endif inline void SourceCodeInfo_Location::set_leading_detached_comments(int index, const char* value) { + GOOGLE_DCHECK(value != NULL); leading_detached_comments_.Mutable(index)->assign(value); // @@protoc_insertion_point(field_set_char:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) } @@ -8397,11 +8360,12 @@ inline void SourceCodeInfo_Location::add_leading_detached_comments(const ::std:: } #if LANG_CXX11 inline void SourceCodeInfo_Location::add_leading_detached_comments(::std::string&& value) { - leading_detached_comments_.Add()->assign(std::move(value)); + leading_detached_comments_.Add(std::move(value)); // @@protoc_insertion_point(field_add:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) } #endif inline void SourceCodeInfo_Location::add_leading_detached_comments(const char* value) { + GOOGLE_DCHECK(value != NULL); leading_detached_comments_.Add()->assign(value); // @@protoc_insertion_point(field_add_char:google.protobuf.SourceCodeInfo.Location.leading_detached_comments) } @@ -8520,6 +8484,7 @@ inline void GeneratedCodeInfo_Annotation::set_source_file(::std::string&& value) } #endif inline void GeneratedCodeInfo_Annotation::set_source_file(const char* value) { + GOOGLE_DCHECK(value != NULL); set_has_source_file(); source_file_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.GeneratedCodeInfo.Annotation.source_file) diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.proto b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.proto index be2236839060e3..f859c42972fcb8 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.proto +++ b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor.proto @@ -445,7 +445,7 @@ message MessageOptions { optional bool map_entry = 7; reserved 8; // javalite_serializable - + reserved 9; // javanano_as_lite // The parser stores options it doesn't recognize here. See above. repeated UninterpretedOption uninterpreted_option = 999; @@ -565,6 +565,7 @@ message EnumOptions { // is a formalization for deprecating enums. optional bool deprecated = 3 [default=false]; + reserved 5; // javanano_as_lite // The parser stores options it doesn't recognize here. See above. repeated UninterpretedOption uninterpreted_option = 999; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_database.cc b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_database.cc index 57ae960f9b8321..4e46b2a88a1bd8 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_database.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_database.cc @@ -199,7 +199,7 @@ template bool SimpleDescriptorDatabase::DescriptorIndex::FindAllExtensionNumbers( const string& containing_type, std::vector* output) { - typename std::map, Value>::const_iterator it = + typename std::map, Value>::const_iterator it = by_extension_.lower_bound(std::make_pair(containing_type, 0)); bool success = false; @@ -213,7 +213,7 @@ bool SimpleDescriptorDatabase::DescriptorIndex::FindAllExtensionNumbers( } template -typename map::iterator +typename std::map::iterator SimpleDescriptorDatabase::DescriptorIndex::FindLastLessOrEqual( const string& name) { // Find the last key in the map which sorts less than or equal to the diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_database.h b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_database.h index be97a6d8862af6..28f8af7a2da008 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_database.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_database.h @@ -102,6 +102,18 @@ class LIBPROTOBUF_EXPORT DescriptorDatabase { } + // Finds the file names and appends them to the output in an + // undefined order. This method is best-effort: it's not guaranteed that the + // database will find all files. Returns true if the database supports + // searching all file names, otherwise returns false and leaves output + // unchanged. + // + // This method has a default implementation that always returns + // false. + virtual bool FindAllFileNames(std::vector* output) { + return false; + } + private: GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DescriptorDatabase); }; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_database_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_database_unittest.cc index 05d67656f6eec3..7e81d70af236ea 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_database_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_database_unittest.cc @@ -44,7 +44,6 @@ #include #include #include -#include #include #include diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_unittest.cc index 7ec75156b88bf8..7523893117741a 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/descriptor_unittest.cc @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -52,7 +53,6 @@ #include #include #include -#include #include #include @@ -501,7 +501,7 @@ void ExtractDebugString( for (int i = 0; i < file->dependency_count(); ++i) { ExtractDebugString(file->dependency(i), visited, debug_strings); } - debug_strings->push_back(make_pair(file->name(), file->DebugString())); + debug_strings->push_back(std::make_pair(file->name(), file->DebugString())); } class SimpleErrorCollector : public google::protobuf::io::ErrorCollector { @@ -6066,6 +6066,7 @@ TEST_F(ValidationErrorTest, ValidateProto3JsonName) { "conflicts with field \"ab\". This is not allowed in proto3.\n"); } + // =================================================================== // DescriptorDatabase @@ -6824,6 +6825,360 @@ TEST_F(CopySourceCodeInfoToTest, CopySourceCodeInfoTo) { // =================================================================== +class LazilyBuildDependenciesTest : public testing::Test { + public: + LazilyBuildDependenciesTest() : pool_(&db_, NULL) { + pool_.InternalSetLazilyBuildDependencies(); + } + + void ParseProtoAndAddToDb(const char* proto) { + FileDescriptorProto tmp; + ASSERT_TRUE(TextFormat::ParseFromString(proto, &tmp)); + db_.Add(tmp); + } + + void ParseProtoAndAddToDb(const string& proto) { + FileDescriptorProto tmp; + ASSERT_TRUE(TextFormat::ParseFromString(proto, &tmp)); + db_.Add(tmp); + } + + void AddSimpleMessageProtoFileToDb(const char* file_name, + const char* message_name) { + ParseProtoAndAddToDb("name: '" + string(file_name) + + ".proto' " + "package: \"protobuf_unittest\" " + "message_type { " + " name:'" + + string(message_name) + + "' " + " field { name:'a' number:1 " + " label:LABEL_OPTIONAL " + " type_name:'int32' } " + "}"); + } + + void AddSimpleEnumProtoFileToDb(const char* file_name, const char* enum_name, + const char* enum_value_name) { + ParseProtoAndAddToDb("name: '" + string(file_name) + + ".proto' " + "package: 'protobuf_unittest' " + "enum_type { " + " name:'" + + string(enum_name) + + "' " + " value { name:'" + + string(enum_value_name) + + "' number:1 } " + "}"); + } + + protected: + SimpleDescriptorDatabase db_; + DescriptorPool pool_; +}; + +TEST_F(LazilyBuildDependenciesTest, Message) { + ParseProtoAndAddToDb( + "name: 'foo.proto' " + "package: 'protobuf_unittest' " + "dependency: 'bar.proto' " + "message_type { " + " name:'Foo' " + " field { name:'bar' number:1 label:LABEL_OPTIONAL " + "type_name:'.protobuf_unittest.Bar' } " + "}"); + AddSimpleMessageProtoFileToDb("bar", "Bar"); + + // Verify neither has been built yet. + EXPECT_FALSE(pool_.InternalIsFileLoaded("foo.proto")); + EXPECT_FALSE(pool_.InternalIsFileLoaded("bar.proto")); + + const FileDescriptor* file = pool_.FindFileByName("foo.proto"); + + // Verify only foo gets built when asking for foo.proto + EXPECT_TRUE(file != NULL); + EXPECT_TRUE(pool_.InternalIsFileLoaded("foo.proto")); + EXPECT_FALSE(pool_.InternalIsFileLoaded("bar.proto")); + + // Verify calling FindFieldBy* works when the type of the field was + // not built at cross link time. Verify this doesn't build the file + // the field's type is defined in, as well. + const Descriptor* desc = file->FindMessageTypeByName("Foo"); + const FieldDescriptor* field = desc->FindFieldByName("bar"); + EXPECT_TRUE(field != NULL); + EXPECT_EQ(field, desc->FindFieldByNumber(1)); + EXPECT_EQ(field, desc->FindFieldByLowercaseName("bar")); + EXPECT_EQ(field, desc->FindFieldByCamelcaseName("bar")); + EXPECT_FALSE(pool_.InternalIsFileLoaded("bar.proto")); + + // Finally, verify that if we call message_type() on the field, we will + // buid the file where the message is defined, and get a valid descriptor + EXPECT_TRUE(field->message_type() != NULL); + EXPECT_TRUE(pool_.InternalIsFileLoaded("bar.proto")); +} + +TEST_F(LazilyBuildDependenciesTest, Enum) { + ParseProtoAndAddToDb( + "name: 'foo.proto' " + "package: 'protobuf_unittest' " + "dependency: 'enum1.proto' " + "dependency: 'enum2.proto' " + "message_type { " + " name:'Lazy' " + " field { name:'enum1' number:1 label:LABEL_OPTIONAL " + "type_name:'.protobuf_unittest.Enum1' } " + " field { name:'enum2' number:1 label:LABEL_OPTIONAL " + "type_name:'.protobuf_unittest.Enum2' } " + "}"); + AddSimpleEnumProtoFileToDb("enum1", "Enum1", "ENUM1"); + AddSimpleEnumProtoFileToDb("enum2", "Enum2", "ENUM2"); + + const FileDescriptor* file = pool_.FindFileByName("foo.proto"); + + // Verify calling enum_type() on a field whose definition is not + // yet built will build the file and return a descriptor. + EXPECT_FALSE(pool_.InternalIsFileLoaded("enum1.proto")); + const Descriptor* desc = file->FindMessageTypeByName("Lazy"); + EXPECT_TRUE(desc != NULL); + const FieldDescriptor* field = desc->FindFieldByName("enum1"); + EXPECT_TRUE(field != NULL); + EXPECT_TRUE(field->enum_type() != NULL); + EXPECT_TRUE(pool_.InternalIsFileLoaded("enum1.proto")); + + // Verify calling default_value_enum() on a field whose definition is not + // yet built will build the file and return a descriptor to the value. + EXPECT_FALSE(pool_.InternalIsFileLoaded("enum2.proto")); + field = desc->FindFieldByName("enum2"); + EXPECT_TRUE(field != NULL); + EXPECT_TRUE(field->default_value_enum() != NULL); + EXPECT_TRUE(pool_.InternalIsFileLoaded("enum2.proto")); +} + +TEST_F(LazilyBuildDependenciesTest, Type) { + ParseProtoAndAddToDb( + "name: 'foo.proto' " + "package: 'protobuf_unittest' " + "dependency: 'message1.proto' " + "dependency: 'message2.proto' " + "dependency: 'enum1.proto' " + "dependency: 'enum2.proto' " + "message_type { " + " name:'Lazy' " + " field { name:'message1' number:1 label:LABEL_OPTIONAL " + "type_name:'.protobuf_unittest.Message1' } " + " field { name:'message2' number:1 label:LABEL_OPTIONAL " + "type_name:'.protobuf_unittest.Message2' } " + " field { name:'enum1' number:1 label:LABEL_OPTIONAL " + "type_name:'.protobuf_unittest.Enum1' } " + " field { name:'enum2' number:1 label:LABEL_OPTIONAL " + "type_name:'.protobuf_unittest.Enum2' } " + "}"); + AddSimpleMessageProtoFileToDb("message1", "Message1"); + AddSimpleMessageProtoFileToDb("message2", "Message2"); + AddSimpleEnumProtoFileToDb("enum1", "Enum1", "ENUM1"); + AddSimpleEnumProtoFileToDb("enum2", "Enum2", "ENUM2"); + + const FileDescriptor* file = pool_.FindFileByName("foo.proto"); + + // Verify calling type() on a field that is a message type will + // build the type defined in another file. + EXPECT_FALSE(pool_.InternalIsFileLoaded("message1.proto")); + const Descriptor* desc = file->FindMessageTypeByName("Lazy"); + EXPECT_TRUE(desc != NULL); + const FieldDescriptor* field = desc->FindFieldByName("message1"); + EXPECT_TRUE(field != NULL); + EXPECT_EQ(field->type(), FieldDescriptor::TYPE_MESSAGE); + EXPECT_TRUE(pool_.InternalIsFileLoaded("message1.proto")); + + // Verify calling cpp_type() on a field that is a message type will + // build the type defined in another file. + EXPECT_FALSE(pool_.InternalIsFileLoaded("message2.proto")); + field = desc->FindFieldByName("message2"); + EXPECT_TRUE(field != NULL); + EXPECT_EQ(field->cpp_type(), FieldDescriptor::CPPTYPE_MESSAGE); + EXPECT_TRUE(pool_.InternalIsFileLoaded("message2.proto")); + + // Verify calling type() on a field that is an enum type will + // build the type defined in another file. + EXPECT_FALSE(pool_.InternalIsFileLoaded("enum1.proto")); + field = desc->FindFieldByName("enum1"); + EXPECT_TRUE(field != NULL); + EXPECT_EQ(field->type(), FieldDescriptor::TYPE_ENUM); + EXPECT_TRUE(pool_.InternalIsFileLoaded("enum1.proto")); + + // Verify calling cpp_type() on a field that is an enum type will + // build the type defined in another file. + EXPECT_FALSE(pool_.InternalIsFileLoaded("enum2.proto")); + field = desc->FindFieldByName("enum2"); + EXPECT_TRUE(field != NULL); + EXPECT_EQ(field->cpp_type(), FieldDescriptor::CPPTYPE_ENUM); + EXPECT_TRUE(pool_.InternalIsFileLoaded("enum2.proto")); +} + +TEST_F(LazilyBuildDependenciesTest, Extension) { + ParseProtoAndAddToDb( + "name: 'foo.proto' " + "package: 'protobuf_unittest' " + "dependency: 'bar.proto' " + "dependency: 'baz.proto' " + "extension { extendee: '.protobuf_unittest.Bar' name:'bar' number:11" + " label:LABEL_OPTIONAL type_name:'.protobuf_unittest.Baz' }"); + ParseProtoAndAddToDb( + "name: 'bar.proto' " + "package: 'protobuf_unittest' " + "message_type { " + " name:'Bar' " + " extension_range { start: 10 end: 20 }" + "}"); + AddSimpleMessageProtoFileToDb("baz", "Baz"); + + // Verify none have been built yet. + EXPECT_FALSE(pool_.InternalIsFileLoaded("foo.proto")); + EXPECT_FALSE(pool_.InternalIsFileLoaded("bar.proto")); + EXPECT_FALSE(pool_.InternalIsFileLoaded("baz.proto")); + + const FileDescriptor* file = pool_.FindFileByName("foo.proto"); + + // Verify foo.bar gets loaded, and bar.proto gets loaded + // to register the extension. baz.proto should not get loaded. + EXPECT_TRUE(file != NULL); + EXPECT_TRUE(pool_.InternalIsFileLoaded("foo.proto")); + EXPECT_TRUE(pool_.InternalIsFileLoaded("bar.proto")); + EXPECT_FALSE(pool_.InternalIsFileLoaded("baz.proto")); +} + +TEST_F(LazilyBuildDependenciesTest, Service) { + ParseProtoAndAddToDb( + "name: 'foo.proto' " + "package: 'protobuf_unittest' " + "dependency: 'message1.proto' " + "dependency: 'message2.proto' " + "dependency: 'message3.proto' " + "dependency: 'message4.proto' " + "service {" + " name: 'LazyService'" + " method { name: 'A' input_type: '.protobuf_unittest.Message1' " + " output_type: '.protobuf_unittest.Message2' }" + "}"); + AddSimpleMessageProtoFileToDb("message1", "Message1"); + AddSimpleMessageProtoFileToDb("message2", "Message2"); + AddSimpleMessageProtoFileToDb("message3", "Message3"); + AddSimpleMessageProtoFileToDb("message4", "Message4"); + + const FileDescriptor* file = pool_.FindFileByName("foo.proto"); + + // Verify calling FindServiceByName or FindMethodByName doesn't build the + // files defining the input and output type, and input_type() and + // output_type() does indeed build the appropriate files. + const ServiceDescriptor* service = file->FindServiceByName("LazyService"); + EXPECT_TRUE(service != NULL); + const MethodDescriptor* method = service->FindMethodByName("A"); + EXPECT_FALSE(pool_.InternalIsFileLoaded("message1.proto")); + EXPECT_FALSE(pool_.InternalIsFileLoaded("message2.proto")); + EXPECT_TRUE(method != NULL); + EXPECT_TRUE(method->input_type() != NULL); + EXPECT_TRUE(pool_.InternalIsFileLoaded("message1.proto")); + EXPECT_FALSE(pool_.InternalIsFileLoaded("message2.proto")); + EXPECT_TRUE(method->output_type() != NULL); + EXPECT_TRUE(pool_.InternalIsFileLoaded("message2.proto")); +} + + +TEST_F(LazilyBuildDependenciesTest, GeneratedFile) { + // Most testing is done with custom pools with lazy dependencies forced on, + // do some sanity checking that lazy imports is on by default for the + // generated pool, and do custom options testing with generated to + // be able to use the GetExtension ids for the custom options. + + // Verify none of the files are loaded yet. + EXPECT_FALSE(DescriptorPool::generated_pool()->InternalIsFileLoaded( + "google/protobuf/unittest_lazy_dependencies.proto")); + EXPECT_FALSE(DescriptorPool::generated_pool()->InternalIsFileLoaded( + "google/protobuf/unittest_lazy_dependencies_custom_option.proto")); + EXPECT_FALSE(DescriptorPool::generated_pool()->InternalIsFileLoaded( + "google/protobuf/unittest_lazy_dependencies_enum.proto")); + + // Verify calling autogenerated function to get a descriptor in the base + // file will build that file but none of it's imports. This verifies that + // lazily_build_dependencies_ is set on the generated pool, and also that + // the generated function "descriptor()" doesn't somehow subvert the laziness + // by manually loading the dependencies or something. + EXPECT_TRUE(protobuf_unittest::lazy_imports::ImportedMessage::descriptor() != + NULL); + EXPECT_TRUE(DescriptorPool::generated_pool()->InternalIsFileLoaded( + "google/protobuf/unittest_lazy_dependencies.proto")); + EXPECT_FALSE(DescriptorPool::generated_pool()->InternalIsFileLoaded( + "google/protobuf/unittest_lazy_dependencies_custom_option.proto")); + EXPECT_FALSE(DescriptorPool::generated_pool()->InternalIsFileLoaded( + "google/protobuf/unittest_lazy_dependencies_enum.proto")); + + // Verify custom options work when defined in an import that isn't loaded, + // and that a non-default value of a custom option doesn't load the file + // where that enum is defined. + const google::protobuf::MessageOptions& options = + protobuf_unittest::lazy_imports::MessageCustomOption::descriptor() + ->options(); + protobuf_unittest::lazy_imports::LazyEnum custom_option_value = + options.GetExtension(protobuf_unittest::lazy_imports::lazy_enum_option); + + EXPECT_FALSE(DescriptorPool::generated_pool()->InternalIsFileLoaded( + "google/protobuf/unittest_lazy_dependencies_custom_option.proto")); + EXPECT_FALSE(DescriptorPool::generated_pool()->InternalIsFileLoaded( + "google/protobuf/unittest_lazy_dependencies_enum.proto")); + EXPECT_EQ(custom_option_value, protobuf_unittest::lazy_imports::LAZY_ENUM_1); + + const google::protobuf::MessageOptions& options2 = + protobuf_unittest::lazy_imports::MessageCustomOption2::descriptor() + ->options(); + custom_option_value = + options2.GetExtension(protobuf_unittest::lazy_imports::lazy_enum_option); + + EXPECT_FALSE(DescriptorPool::generated_pool()->InternalIsFileLoaded( + "google/protobuf/unittest_lazy_dependencies_custom_option.proto")); + EXPECT_FALSE(DescriptorPool::generated_pool()->InternalIsFileLoaded( + "google/protobuf/unittest_lazy_dependencies_enum.proto")); + EXPECT_EQ(custom_option_value, protobuf_unittest::lazy_imports::LAZY_ENUM_0); +} + +TEST_F(LazilyBuildDependenciesTest, Dependency) { + ParseProtoAndAddToDb( + "name: 'foo.proto' " + "package: 'protobuf_unittest' " + "dependency: 'bar.proto' " + "message_type { " + " name:'Foo' " + " field { name:'bar' number:1 label:LABEL_OPTIONAL " + "type_name:'.protobuf_unittest.Bar' } " + "}"); + ParseProtoAndAddToDb( + "name: 'bar.proto' " + "package: 'protobuf_unittest' " + "dependency: 'baz.proto' " + "message_type { " + " name:'Bar' " + " field { name:'baz' number:1 label:LABEL_OPTIONAL " + "type_name:'.protobuf_unittest.Baz' } " + "}"); + AddSimpleMessageProtoFileToDb("baz", "Baz"); + + const FileDescriptor* foo_file = pool_.FindFileByName("foo.proto"); + EXPECT_TRUE(foo_file != NULL); + // As expected, requesting foo.proto shouldn't build it's dependencies + EXPECT_TRUE(pool_.InternalIsFileLoaded("foo.proto")); + EXPECT_FALSE(pool_.InternalIsFileLoaded("bar.proto")); + EXPECT_FALSE(pool_.InternalIsFileLoaded("baz.proto")); + + // Verify calling dependency(N) will build the dependency, but + // not that file's dependencies. + const FileDescriptor* bar_file = foo_file->dependency(0); + EXPECT_TRUE(bar_file != NULL); + EXPECT_TRUE(pool_.InternalIsFileLoaded("bar.proto")); + EXPECT_FALSE(pool_.InternalIsFileLoaded("baz.proto")); +} + +// =================================================================== + } // namespace descriptor_unittest } // namespace protobuf diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/duration.pb.cc b/third_party/protobuf/3.2.0/src/google/protobuf/duration.pb.cc index e046cc5a7fd7e5..ae1a5e08f58760 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/duration.pb.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/duration.pb.cc @@ -31,11 +31,26 @@ ::google::protobuf::Metadata file_level_metadata[1]; } // namespace +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField + const TableStruct::entries[] = { + {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0}, +}; + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField + const TableStruct::aux[] = { + ::google::protobuf::internal::AuxillaryParseTableField(), +}; +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const + TableStruct::schema[] = { + { NULL, NULL, 0, -1, -1, false }, +}; + const ::google::protobuf::uint32 TableStruct::offsets[] = { ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Duration, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Duration, seconds_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Duration, nanos_), }; @@ -186,7 +201,7 @@ void Duration::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Duration::descriptor() { protobuf_google_2fprotobuf_2fduration_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fduration_2eproto::file_level_metadata[0].descriptor; + return protobuf_google_2fprotobuf_2fduration_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Duration& Duration::default_instance() { @@ -266,6 +281,9 @@ bool Duration::MergePartialFromCodedStream( void Duration::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Duration) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // int64 seconds = 1; if (this->seconds() != 0) { ::google::protobuf::internal::WireFormatLite::WriteInt64(1, this->seconds(), output); @@ -281,8 +299,10 @@ void Duration::SerializeWithCachedSizes( ::google::protobuf::uint8* Duration::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Duration) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // int64 seconds = 1; if (this->seconds() != 0) { target = ::google::protobuf::internal::WireFormatLite::WriteInt64ToArray(1, this->seconds(), target); @@ -341,6 +361,9 @@ void Duration::MergeFrom(const Duration& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Duration) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.seconds() != 0) { set_seconds(from.seconds()); } @@ -394,7 +417,7 @@ void Duration::InternalSwap(Duration* other) { ::google::protobuf::Metadata Duration::GetMetadata() const { protobuf_google_2fprotobuf_2fduration_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fduration_2eproto::file_level_metadata[0]; + return protobuf_google_2fprotobuf_2fduration_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/duration.pb.h b/third_party/protobuf/3.2.0/src/google/protobuf/duration.pb.h index 591c11d1da7a5b..34873d974404e1 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/duration.pb.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/duration.pb.h @@ -8,12 +8,12 @@ #include -#if GOOGLE_PROTOBUF_VERSION < 3002000 +#if GOOGLE_PROTOBUF_VERSION < 3003000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3002000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -43,6 +44,9 @@ namespace protobuf { namespace protobuf_google_2fprotobuf_2fduration_2eproto { // Internal implementation detail -- do not call these. struct LIBPROTOBUF_EXPORT TableStruct { + static const ::google::protobuf::internal::ParseTableField entries[]; + static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; + static const ::google::protobuf::internal::ParseTable schema[]; static const ::google::protobuf::uint32 offsets[]; static void InitDefaultsImpl(); static void Shutdown(); @@ -78,6 +82,8 @@ class LIBPROTOBUF_EXPORT Duration : public ::google::protobuf::Message /* @@prot return reinterpret_cast( &_Duration_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 0; void UnsafeArenaSwap(Duration* other); void Swap(Duration* other); @@ -101,11 +107,6 @@ class LIBPROTOBUF_EXPORT Duration : public ::google::protobuf::Message /* @@prot ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -154,7 +155,7 @@ class LIBPROTOBUF_EXPORT Duration : public ::google::protobuf::Message /* @@prot ::google::protobuf::int64 seconds_; ::google::protobuf::int32 nanos_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fduration_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fduration_2eproto::TableStruct; }; // =================================================================== diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/duration.proto b/third_party/protobuf/3.2.0/src/google/protobuf/duration.proto index 7f461f408d82f6..975fce41aae054 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/duration.proto +++ b/third_party/protobuf/3.2.0/src/google/protobuf/duration.proto @@ -47,6 +47,8 @@ option objc_class_prefix = "GPB"; // two Timestamp values is a Duration and it can be added or subtracted // from a Timestamp. Range is approximately +-10,000 years. // +// # Examples +// // Example 1: Compute Duration from two Timestamps in pseudo code. // // Timestamp start = ...; @@ -87,11 +89,22 @@ option objc_class_prefix = "GPB"; // duration = Duration() // duration.FromTimedelta(td) // +// # JSON Mapping +// +// In JSON format, the Duration type is encoded as a string rather than an +// object, where the string ends in the suffix "s" (indicating seconds) and +// is preceded by the number of seconds, with nanoseconds expressed as +// fractional seconds. For example, 3 seconds with 0 nanoseconds should be +// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should +// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 +// microsecond should be expressed in JSON format as "3.000001s". +// // message Duration { // Signed seconds of the span of time. Must be from -315,576,000,000 - // to +315,576,000,000 inclusive. + // to +315,576,000,000 inclusive. Note: these bounds are computed from: + // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years int64 seconds = 1; // Signed fractions of a second at nanosecond resolution of the span diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/dynamic_message.cc b/third_party/protobuf/3.2.0/src/google/protobuf/dynamic_message.cc index d6bde495bab9ee..ee8113e31dba66 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/dynamic_message.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/dynamic_message.cc @@ -77,13 +77,14 @@ #include #include #include +#include +#include #include +#include #include #include -#include -#include #include -#include + namespace google { namespace protobuf { @@ -239,6 +240,7 @@ class DynamicMessage : public Message { // looking back at this field. This would assume details about the // implementation of scoped_ptr. const DynamicMessage* prototype; + int weak_field_map_offset; // The offset for the weak_field_map; TypeInfo() : prototype(NULL) {} @@ -323,7 +325,6 @@ void DynamicMessage::SharedCtor() { // constructor.) const Descriptor* descriptor = type_info_->type; - // Initialize oneof cases. for (int i = 0 ; i < descriptor->oneof_decl_count(); ++i) { new (OffsetToPointer(type_info_->oneof_case_offset + sizeof(uint32) * i)) @@ -336,7 +337,6 @@ void DynamicMessage::SharedCtor() { if (type_info_->extensions_offset != -1) { new (OffsetToPointer(type_info_->extensions_offset)) ExtensionSet; } - for (int i = 0; i < descriptor->field_count(); i++) { const FieldDescriptor* field = descriptor->field(i); void* field_ptr = OffsetToPointer(type_info_->offsets[i]); @@ -537,7 +537,6 @@ void DynamicMessage::CrossLinkPrototypes() { for (int i = 0; i < descriptor->field_count(); i++) { const FieldDescriptor* field = descriptor->field(i); void* field_ptr = OffsetToPointer(type_info_->offsets[i]); - if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE && !field->is_repeated()) { // For fields with message types, we need to cross-link with the @@ -694,6 +693,7 @@ const Message* DynamicMessageFactory::GetPrototypeNoLock( // All the fields. // // TODO(b/31226269): Optimize the order of fields to minimize padding. + int num_weak_fields = 0; for (int i = 0; i < type->field_count(); i++) { // Make sure field is aligned to avoid bus errors. // Oneof fields do not use any space. @@ -717,6 +717,8 @@ const Message* DynamicMessageFactory::GetPrototypeNoLock( type_info->internal_metadata_offset = size; size += sizeof(InternalMetadataWithArena); + type_info->weak_field_map_offset = -1; + // Align the final size to make sure no clever allocators think that // alignment is not necessary. type_info->size = size; @@ -738,7 +740,6 @@ const Message* DynamicMessageFactory::GetPrototypeNoLock( } } size = AlignOffset(size); - // Allocate the prototype + oneof fields. void* base = operator new(size); memset(base, 0, size); @@ -752,7 +753,7 @@ const Message* DynamicMessageFactory::GetPrototypeNoLock( type_info->prototype = static_cast(base); DynamicMessage* prototype = new(base) DynamicMessage(type_info); - if (type->oneof_decl_count() > 0) { + if (type->oneof_decl_count() > 0 || num_weak_fields > 0) { // Construct default oneof instance. ConstructDefaultOneofInstance(type_info->type, type_info->offsets.get(), @@ -767,7 +768,8 @@ const Message* DynamicMessageFactory::GetPrototypeNoLock( type_info->internal_metadata_offset, type_info->extensions_offset, type_info->oneof_case_offset, - type_info->size}; + type_info->size, + type_info->weak_field_map_offset}; type_info->reflection.reset(new GeneratedMessageReflection( type_info->type, schema, type_info->pool, this)); @@ -781,12 +783,12 @@ const Message* DynamicMessageFactory::GetPrototypeNoLock( void DynamicMessageFactory::ConstructDefaultOneofInstance( const Descriptor* type, const uint32 offsets[], - void* default_oneof_instance) { + void* default_oneof_or_weak_instance) { for (int i = 0; i < type->oneof_decl_count(); i++) { for (int j = 0; j < type->oneof_decl(i)->field_count(); j++) { const FieldDescriptor* field = type->oneof_decl(i)->field(j); void* field_ptr = reinterpret_cast( - default_oneof_instance) + offsets[field->index()]; + default_oneof_or_weak_instance) + offsets[field->index()]; switch (field->cpp_type()) { #define HANDLE_TYPE(CPPTYPE, TYPE) \ case FieldDescriptor::CPPTYPE_##CPPTYPE: \ diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/empty.pb.cc b/third_party/protobuf/3.2.0/src/google/protobuf/empty.pb.cc index 31cba0971697e1..71195056f71d1a 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/empty.pb.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/empty.pb.cc @@ -31,11 +31,26 @@ ::google::protobuf::Metadata file_level_metadata[1]; } // namespace +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField + const TableStruct::entries[] = { + {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0}, +}; + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField + const TableStruct::aux[] = { + ::google::protobuf::internal::AuxillaryParseTableField(), +}; +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const + TableStruct::schema[] = { + { NULL, NULL, 0, -1, -1, false }, +}; + const ::google::protobuf::uint32 TableStruct::offsets[] = { ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Empty, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ }; static const ::google::protobuf::internal::MigrationSchema schemas[] = { @@ -176,7 +191,7 @@ void Empty::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Empty::descriptor() { protobuf_google_2fprotobuf_2fempty_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fempty_2eproto::file_level_metadata[0].descriptor; + return protobuf_google_2fprotobuf_2fempty_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Empty& Empty::default_instance() { @@ -221,13 +236,18 @@ bool Empty::MergePartialFromCodedStream( void Empty::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Empty) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // @@protoc_insertion_point(serialize_end:google.protobuf.Empty) } ::google::protobuf::uint8* Empty::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Empty) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.Empty) return target; } @@ -262,6 +282,9 @@ void Empty::MergeFrom(const Empty& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Empty) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + } void Empty::CopyFrom(const ::google::protobuf::Message& from) { @@ -307,7 +330,7 @@ void Empty::InternalSwap(Empty* other) { ::google::protobuf::Metadata Empty::GetMetadata() const { protobuf_google_2fprotobuf_2fempty_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fempty_2eproto::file_level_metadata[0]; + return protobuf_google_2fprotobuf_2fempty_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/empty.pb.h b/third_party/protobuf/3.2.0/src/google/protobuf/empty.pb.h index a75d6dd695b463..f28dc19beb0dd1 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/empty.pb.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/empty.pb.h @@ -8,12 +8,12 @@ #include -#if GOOGLE_PROTOBUF_VERSION < 3002000 +#if GOOGLE_PROTOBUF_VERSION < 3003000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3002000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -43,6 +44,9 @@ namespace protobuf { namespace protobuf_google_2fprotobuf_2fempty_2eproto { // Internal implementation detail -- do not call these. struct LIBPROTOBUF_EXPORT TableStruct { + static const ::google::protobuf::internal::ParseTableField entries[]; + static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; + static const ::google::protobuf::internal::ParseTable schema[]; static const ::google::protobuf::uint32 offsets[]; static void InitDefaultsImpl(); static void Shutdown(); @@ -78,6 +82,8 @@ class LIBPROTOBUF_EXPORT Empty : public ::google::protobuf::Message /* @@protoc_ return reinterpret_cast( &_Empty_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 0; void UnsafeArenaSwap(Empty* other); void Swap(Empty* other); @@ -101,11 +107,6 @@ class LIBPROTOBUF_EXPORT Empty : public ::google::protobuf::Message /* @@protoc_ ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -140,7 +141,7 @@ class LIBPROTOBUF_EXPORT Empty : public ::google::protobuf::Message /* @@protoc_ typedef void InternalArenaConstructable_; typedef void DestructorSkippable_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fempty_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fempty_2eproto::TableStruct; }; // =================================================================== diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/extension_set.h b/third_party/protobuf/3.2.0/src/google/protobuf/extension_set.h index f5aa8de959c164..cf5f652da9d5a3 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/extension_set.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/extension_set.h @@ -416,7 +416,8 @@ class LIBPROTOBUF_EXPORT ExtensionSet { uint8* target) const; // For backward-compatibility, versions of two of the above methods that - // are never forced to serialize deterministically. + // serialize deterministically iff SetDefaultSerializationDeterministic() + // has been called. uint8* SerializeWithCachedSizesToArray(int start_field_number, int end_field_number, uint8* target) const; @@ -435,6 +436,8 @@ class LIBPROTOBUF_EXPORT ExtensionSet { // be linked in). It's up to the protocol compiler to avoid calling this on // such ExtensionSets (easy enough since lite messages don't implement // SpaceUsed()). + size_t SpaceUsedExcludingSelfLong() const; + int SpaceUsedExcludingSelf() const; private: @@ -457,7 +460,7 @@ class LIBPROTOBUF_EXPORT ExtensionSet { virtual bool IsInitialized() const = 0; virtual int ByteSize() const = 0; - virtual int SpaceUsed() const = 0; + virtual size_t SpaceUsedLong() const = 0; virtual void MergeFrom(const LazyMessageExtension& other) = 0; virtual void Clear() = 0; @@ -556,7 +559,7 @@ class LIBPROTOBUF_EXPORT ExtensionSet { void Clear(); int GetSize() const; void Free(); - int SpaceUsedExcludingSelf() const; + size_t SpaceUsedExcludingSelfLong() const; }; typedef std::map ExtensionMap; @@ -620,7 +623,7 @@ class LIBPROTOBUF_EXPORT ExtensionSet { // class. // Defined in extension_set_heavy.cc. - static inline int RepeatedMessage_SpaceUsedExcludingSelf( + static inline size_t RepeatedMessage_SpaceUsedExcludingSelfLong( RepeatedPtrFieldBase* field); // The Extension struct is small enough to be passed by value, so we use it @@ -1100,7 +1103,7 @@ template inline // parameter, and thus make an instance of ExtensionIdentifier have no // actual contents. However, if we did that, then using at extension // identifier would not necessarily cause the compiler to output any sort -// of reference to any simple defined in the extension's .pb.o file. Some +// of reference to any symbol defined in the extension's .pb.o file. Some // linkers will actually drop object files that are not explicitly referenced, // but that would be bad because it would cause this extension to not be // registered at static initialization, and therefore using it would crash. diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/extension_set_heavy.cc b/third_party/protobuf/3.2.0/src/google/protobuf/extension_set_heavy.cc index 8f8f180a7e26b4..f545fe30f95b6f 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/extension_set_heavy.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/extension_set_heavy.cc @@ -341,31 +341,35 @@ bool ExtensionSet::ParseMessageSet(io::CodedInputStream* input, } int ExtensionSet::SpaceUsedExcludingSelf() const { - int total_size = + return internal::FromIntSize(SpaceUsedExcludingSelfLong()); +} + +size_t ExtensionSet::SpaceUsedExcludingSelfLong() const { + size_t total_size = extensions_.size() * sizeof(ExtensionMap::value_type); for (ExtensionMap::const_iterator iter = extensions_.begin(), end = extensions_.end(); iter != end; ++iter) { - total_size += iter->second.SpaceUsedExcludingSelf(); + total_size += iter->second.SpaceUsedExcludingSelfLong(); } return total_size; } -inline int ExtensionSet::RepeatedMessage_SpaceUsedExcludingSelf( +inline size_t ExtensionSet::RepeatedMessage_SpaceUsedExcludingSelfLong( RepeatedPtrFieldBase* field) { - return field->SpaceUsedExcludingSelf >(); + return field->SpaceUsedExcludingSelfLong >(); } -int ExtensionSet::Extension::SpaceUsedExcludingSelf() const { - int total_size = 0; +size_t ExtensionSet::Extension::SpaceUsedExcludingSelfLong() const { + size_t total_size = 0; if (is_repeated) { switch (cpp_type(type)) { -#define HANDLE_TYPE(UPPERCASE, LOWERCASE) \ - case FieldDescriptor::CPPTYPE_##UPPERCASE: \ - total_size += sizeof(*repeated_##LOWERCASE##_value) + \ - repeated_##LOWERCASE##_value->SpaceUsedExcludingSelf();\ - break +#define HANDLE_TYPE(UPPERCASE, LOWERCASE) \ + case FieldDescriptor::CPPTYPE_##UPPERCASE: \ + total_size += sizeof(*repeated_##LOWERCASE##_value) + \ + repeated_##LOWERCASE##_value->SpaceUsedExcludingSelfLong(); \ + break HANDLE_TYPE( INT32, int32); HANDLE_TYPE( INT64, int64); @@ -380,24 +384,25 @@ int ExtensionSet::Extension::SpaceUsedExcludingSelf() const { case FieldDescriptor::CPPTYPE_MESSAGE: // repeated_message_value is actually a RepeatedPtrField, - // but MessageLite has no SpaceUsed(), so we must directly call - // RepeatedPtrFieldBase::SpaceUsedExcludingSelf() with a different type - // handler. - total_size += sizeof(*repeated_message_value) + - RepeatedMessage_SpaceUsedExcludingSelf(repeated_message_value); + // but MessageLite has no SpaceUsedLong(), so we must directly call + // RepeatedPtrFieldBase::SpaceUsedExcludingSelfLong() with a different + // type handler. + total_size += + sizeof(*repeated_message_value) + + RepeatedMessage_SpaceUsedExcludingSelfLong(repeated_message_value); break; } } else { switch (cpp_type(type)) { case FieldDescriptor::CPPTYPE_STRING: total_size += sizeof(*string_value) + - StringSpaceUsedExcludingSelf(*string_value); + StringSpaceUsedExcludingSelfLong(*string_value); break; case FieldDescriptor::CPPTYPE_MESSAGE: if (is_lazy) { - total_size += lazymessage_value->SpaceUsed(); + total_size += lazymessage_value->SpaceUsedLong(); } else { - total_size += down_cast(message_value)->SpaceUsed(); + total_size += down_cast(message_value)->SpaceUsedLong(); } break; default: diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/extension_set_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/extension_set_unittest.cc index d6b823c042749d..772d2734e90be5 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/extension_set_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/extension_set_unittest.cc @@ -32,6 +32,7 @@ // Based on original Protocol Buffers design by // Sanjay Ghemawat, Jeff Dean, and others. +#include #include #include #include @@ -46,7 +47,6 @@ #include #include -#include #include #include #include diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/field_mask.pb.cc b/third_party/protobuf/3.2.0/src/google/protobuf/field_mask.pb.cc index b054dffdd9600f..094c4cc9c2fa4d 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/field_mask.pb.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/field_mask.pb.cc @@ -31,11 +31,26 @@ ::google::protobuf::Metadata file_level_metadata[1]; } // namespace +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField + const TableStruct::entries[] = { + {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0}, +}; + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField + const TableStruct::aux[] = { + ::google::protobuf::internal::AuxillaryParseTableField(), +}; +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const + TableStruct::schema[] = { + { NULL, NULL, 0, -1, -1, false }, +}; + const ::google::protobuf::uint32 TableStruct::offsets[] = { ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldMask, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FieldMask, paths_), }; @@ -159,7 +174,7 @@ void FieldMask::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* FieldMask::descriptor() { protobuf_google_2fprotobuf_2ffield_5fmask_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ffield_5fmask_2eproto::file_level_metadata[0].descriptor; + return protobuf_google_2fprotobuf_2ffield_5fmask_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const FieldMask& FieldMask::default_instance() { @@ -231,6 +246,9 @@ bool FieldMask::MergePartialFromCodedStream( void FieldMask::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.FieldMask) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated string paths = 1; for (int i = 0, n = this->paths_size(); i < n; i++) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -246,8 +264,10 @@ void FieldMask::SerializeWithCachedSizes( ::google::protobuf::uint8* FieldMask::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FieldMask) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated string paths = 1; for (int i = 0, n = this->paths_size(); i < n; i++) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -300,6 +320,9 @@ void FieldMask::MergeFrom(const FieldMask& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.FieldMask) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + paths_.MergeFrom(from.paths_); } @@ -326,13 +349,13 @@ void FieldMask::Swap(FieldMask* other) { InternalSwap(other); } void FieldMask::InternalSwap(FieldMask* other) { - paths_.UnsafeArenaSwap(&other->paths_); + paths_.InternalSwap(&other->paths_); std::swap(_cached_size_, other->_cached_size_); } ::google::protobuf::Metadata FieldMask::GetMetadata() const { protobuf_google_2fprotobuf_2ffield_5fmask_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ffield_5fmask_2eproto::file_level_metadata[0]; + return protobuf_google_2fprotobuf_2ffield_5fmask_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -364,6 +387,7 @@ void FieldMask::set_paths(int index, ::std::string&& value) { } #endif void FieldMask::set_paths(int index, const char* value) { + GOOGLE_DCHECK(value != NULL); paths_.Mutable(index)->assign(value); // @@protoc_insertion_point(field_set_char:google.protobuf.FieldMask.paths) } @@ -382,11 +406,12 @@ void FieldMask::add_paths(const ::std::string& value) { } #if LANG_CXX11 void FieldMask::add_paths(::std::string&& value) { - paths_.Add()->assign(std::move(value)); + paths_.Add(std::move(value)); // @@protoc_insertion_point(field_add:google.protobuf.FieldMask.paths) } #endif void FieldMask::add_paths(const char* value) { + GOOGLE_DCHECK(value != NULL); paths_.Add()->assign(value); // @@protoc_insertion_point(field_add_char:google.protobuf.FieldMask.paths) } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/field_mask.pb.h b/third_party/protobuf/3.2.0/src/google/protobuf/field_mask.pb.h index b609f235b4f0e4..742c1cf9b814dc 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/field_mask.pb.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/field_mask.pb.h @@ -8,12 +8,12 @@ #include -#if GOOGLE_PROTOBUF_VERSION < 3002000 +#if GOOGLE_PROTOBUF_VERSION < 3003000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3002000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -43,6 +44,9 @@ namespace protobuf { namespace protobuf_google_2fprotobuf_2ffield_5fmask_2eproto { // Internal implementation detail -- do not call these. struct LIBPROTOBUF_EXPORT TableStruct { + static const ::google::protobuf::internal::ParseTableField entries[]; + static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; + static const ::google::protobuf::internal::ParseTable schema[]; static const ::google::protobuf::uint32 offsets[]; static void InitDefaultsImpl(); static void Shutdown(); @@ -72,6 +76,8 @@ class LIBPROTOBUF_EXPORT FieldMask : public ::google::protobuf::Message /* @@pro return reinterpret_cast( &_FieldMask_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 0; void Swap(FieldMask* other); @@ -94,11 +100,6 @@ class LIBPROTOBUF_EXPORT FieldMask : public ::google::protobuf::Message /* @@pro ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -148,7 +149,7 @@ class LIBPROTOBUF_EXPORT FieldMask : public ::google::protobuf::Message /* @@pro ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; ::google::protobuf::RepeatedPtrField< ::std::string> paths_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2ffield_5fmask_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2ffield_5fmask_2eproto::TableStruct; }; // =================================================================== @@ -184,6 +185,7 @@ inline void FieldMask::set_paths(int index, ::std::string&& value) { } #endif inline void FieldMask::set_paths(int index, const char* value) { + GOOGLE_DCHECK(value != NULL); paths_.Mutable(index)->assign(value); // @@protoc_insertion_point(field_set_char:google.protobuf.FieldMask.paths) } @@ -202,11 +204,12 @@ inline void FieldMask::add_paths(const ::std::string& value) { } #if LANG_CXX11 inline void FieldMask::add_paths(::std::string&& value) { - paths_.Add()->assign(std::move(value)); + paths_.Add(std::move(value)); // @@protoc_insertion_point(field_add:google.protobuf.FieldMask.paths) } #endif inline void FieldMask::add_paths(const char* value) { + GOOGLE_DCHECK(value != NULL); paths_.Add()->assign(value); // @@protoc_insertion_point(field_add_char:google.protobuf.FieldMask.paths) } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_reflection.cc b/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_reflection.cc index 2f8f8256b7114f..9aebd901261aad 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_reflection.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_reflection.cc @@ -190,7 +190,9 @@ GeneratedMessageReflection::GeneratedMessageReflection( schema_(schema), descriptor_pool_((pool == NULL) ? DescriptorPool::generated_pool() : pool), - message_factory_(factory) { + message_factory_(factory), + last_non_weak_field_index_(-1) { + last_non_weak_field_index_ = descriptor_->field_count() - 1; } GeneratedMessageReflection::~GeneratedMessageReflection() {} @@ -231,28 +233,25 @@ UnknownFieldSet* GeneratedMessageReflection::MutableUnknownFields( return MutableInternalMetadataWithArena(message)->mutable_unknown_fields(); } -int GeneratedMessageReflection::SpaceUsed(const Message& message) const { +size_t GeneratedMessageReflection::SpaceUsedLong(const Message& message) const { // object_size_ already includes the in-memory representation of each field // in the message, so we only need to account for additional memory used by // the fields. - int total_size = schema_.GetObjectSize(); + size_t total_size = schema_.GetObjectSize(); - total_size += GetUnknownFields(message).SpaceUsedExcludingSelf(); + total_size += GetUnknownFields(message).SpaceUsedExcludingSelfLong(); if (schema_.HasExtensionSet()) { - total_size += GetExtensionSet(message).SpaceUsedExcludingSelf(); + total_size += GetExtensionSet(message).SpaceUsedExcludingSelfLong(); } - - const int field_count = descriptor_->field_count(); - for (int i = 0; i < field_count; i++) { + for (int i = 0; i <= last_non_weak_field_index_; i++) { const FieldDescriptor* field = descriptor_->field(i); - if (field->is_repeated()) { switch (field->cpp_type()) { #define HANDLE_TYPE(UPPERCASE, LOWERCASE) \ case FieldDescriptor::CPPTYPE_##UPPERCASE : \ total_size += GetRaw >(message, field) \ - .SpaceUsedExcludingSelf(); \ + .SpaceUsedExcludingSelfLong(); \ break HANDLE_TYPE( INT32, int32); @@ -270,21 +269,21 @@ int GeneratedMessageReflection::SpaceUsed(const Message& message) const { default: // TODO(kenton): Support other string reps. case FieldOptions::STRING: total_size += GetRaw >(message, field) - .SpaceUsedExcludingSelf(); + .SpaceUsedExcludingSelfLong(); break; } break; case FieldDescriptor::CPPTYPE_MESSAGE: if (IsMapFieldInApi(field)) { - total_size += - GetRaw(message, field).SpaceUsedExcludingSelf(); + total_size += GetRaw(message, field) + .SpaceUsedExcludingSelfLong(); } else { // We don't know which subclass of RepeatedPtrFieldBase the type is, // so we use RepeatedPtrFieldBase directly. total_size += GetRaw(message, field) - .SpaceUsedExcludingSelf >(); + .SpaceUsedExcludingSelfLong >(); } break; @@ -320,7 +319,8 @@ int GeneratedMessageReflection::SpaceUsed(const Message& message) const { if (ptr != default_ptr) { // string fields are represented by just a pointer, so also // include sizeof(string) as well. - total_size += sizeof(*ptr) + StringSpaceUsedExcludingSelf(*ptr); + total_size += + sizeof(*ptr) + StringSpaceUsedExcludingSelfLong(*ptr); } break; } @@ -335,14 +335,13 @@ int GeneratedMessageReflection::SpaceUsed(const Message& message) const { } else { const Message* sub_message = GetRaw(message, field); if (sub_message != NULL) { - total_size += sub_message->SpaceUsed(); + total_size += sub_message->SpaceUsedLong(); } } break; } } } - return total_size; } @@ -643,14 +642,11 @@ void GeneratedMessageReflection::Swap( } } - const int field_count = descriptor_->field_count(); - for (int i = 0; i < field_count; i++) { + for (int i = 0; i <= last_non_weak_field_index_; i++) { const FieldDescriptor* field = descriptor_->field(i); - if (!field->containing_oneof()) { - SwapField(message1, message2, field); - } + if (field->containing_oneof()) continue; + SwapField(message1, message2, field); } - const int oneof_decl_count = descriptor_->oneof_decl_count(); for (int i = 0; i < oneof_decl_count; i++) { SwapOneofField(message1, message2, descriptor_->oneof_decl(i)); @@ -782,7 +778,6 @@ void GeneratedMessageReflection::ClearField( ClearOneofField(message, field); return; } - if (HasBit(*message, field)) { ClearBit(message, field); @@ -1026,10 +1021,8 @@ void GeneratedMessageReflection::ListFields( const uint32* const has_bits_indices = schema_.has_bit_indices_; const uint32* const oneof_case_array = &GetConstRefAtOffset(message, schema_.oneof_case_offset_); - - const int field_count = descriptor_->field_count(); - output->reserve(field_count); - for (int i = 0; i < field_count; i++) { + output->reserve(descriptor_->field_count()); + for (int i = 0; i <= last_non_weak_field_index_; i++) { const FieldDescriptor* field = descriptor_->field(i); if (field->is_repeated()) { if (FieldSize(message, field) > 0) { @@ -1052,7 +1045,6 @@ void GeneratedMessageReflection::ListFields( } } } - if (schema_.HasExtensionSet()) { GetExtensionSet(message).AppendToList(descriptor_, descriptor_pool_, output); @@ -1458,8 +1450,7 @@ const Message& GeneratedMessageReflection::GetMessage( GetExtensionSet(message).GetMessage( field->number(), field->message_type(), factory)); } else { - const Message* result; - result = GetRaw(message, field); + const Message* result = GetRaw(message, field); if (result == NULL) { result = DefaultRaw(field); } @@ -1479,6 +1470,7 @@ Message* GeneratedMessageReflection::MutableMessage( MutableExtensionSet(message)->MutableMessage(field, factory)); } else { Message* result; + Message** result_holder = MutableRaw(message, field); if (field->containing_oneof()) { @@ -1976,6 +1968,7 @@ inline const Type& GeneratedMessageReflection::DefaultRaw( // Simple accessors for manipulating has_bits_. inline bool GeneratedMessageReflection::HasBit( const Message& message, const FieldDescriptor* field) const { + GOOGLE_DCHECK(!field->options().weak()); if (schema_.HasHasbits()) { return IsIndexInHasBitSet(GetHasBits(message), schema_.HasBitIndex(field)); } @@ -2031,6 +2024,7 @@ inline bool GeneratedMessageReflection::HasBit( inline void GeneratedMessageReflection::SetBit( Message* message, const FieldDescriptor* field) const { + GOOGLE_DCHECK(!field->options().weak()); if (!schema_.HasHasbits()) { return; } @@ -2041,6 +2035,7 @@ inline void GeneratedMessageReflection::SetBit( inline void GeneratedMessageReflection::ClearBit( Message* message, const FieldDescriptor* field) const { + GOOGLE_DCHECK(!field->options().weak()); if (!schema_.HasHasbits()) { return; } @@ -2051,6 +2046,7 @@ inline void GeneratedMessageReflection::ClearBit( inline void GeneratedMessageReflection::SwapBit( Message* message1, Message* message2, const FieldDescriptor* field) const { + GOOGLE_DCHECK(!field->options().weak()); if (!schema_.HasHasbits()) { return; } @@ -2236,16 +2232,16 @@ ReflectionSchema MigrationToReflectionSchema( MigrationSchema migration_schema) { ReflectionSchema result; result.default_instance_ = *default_instance; - // First 5 offsets are offsets to the special fields. The following offsets + // First 6 offsets are offsets to the special fields. The following offsets // are the proto fields. - result.offsets_ = offsets + migration_schema.offsets_index + 4; + result.offsets_ = offsets + migration_schema.offsets_index + 5; result.has_bit_indices_ = offsets + migration_schema.has_bit_indices_index; result.has_bits_offset_ = offsets[migration_schema.offsets_index + 0]; result.metadata_offset_ = offsets[migration_schema.offsets_index + 1]; result.extensions_offset_ = offsets[migration_schema.offsets_index + 2]; result.oneof_case_offset_ = offsets[migration_schema.offsets_index + 3]; result.object_size_ = migration_schema.object_size; - result.weak_field_map_offset_ = 0; + result.weak_field_map_offset_ = offsets[migration_schema.offsets_index + 4]; return result; } @@ -2275,7 +2271,7 @@ class AssignDescriptorsHelper { if (!descriptor->options().map_entry()) { // Only set reflection for non map types. file_level_metadata_->reflection = new GeneratedMessageReflection( - descriptor, MigrationToReflectionSchema(default_instance_data_++, + descriptor, MigrationToReflectionSchema(default_instance_data_, offsets_, *schemas_), ::google::protobuf::DescriptorPool::generated_pool(), factory_); for (int i = 0; i < descriptor->enum_type_count(); i++) { @@ -2283,6 +2279,7 @@ class AssignDescriptorsHelper { } schemas_++; } + default_instance_data_++; file_level_metadata_++; } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_reflection.h b/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_reflection.h index 8b1362a2a7b54b..12b73ca3a7cc74 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_reflection.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_reflection.h @@ -62,7 +62,15 @@ namespace protobuf { class DescriptorPool; class MapKey; class MapValueRef; -} +} // namespace protobuf + + +namespace protobuf { +namespace flat { +class MetadataBuilder; +} // namespace flat +} // namespace protobuf + namespace protobuf { namespace internal { @@ -73,6 +81,7 @@ class GeneratedMessageReflection; // Defined in other files. class ExtensionSet; // extension_set.h +class WeakFieldMap; // weak_field_map.h // This struct describes the internal layout of the message, hence this is // used to act on the message reflectively. @@ -83,17 +92,17 @@ class ExtensionSet; // extension_set.h // embedded message fields *must* have non-NULL pointers // in the default instance.) // offsets: An array of ints giving the byte offsets. -// For each oneof field, the offset is relative to the -// default_oneof_instance. These can be computed at compile -// time using the -// PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET() macro. -// For each none oneof field, the offset is related to -// the start of the message object. These can be computed -// at compile time using the +// For each oneof or weak field, the offset is relative to the +// default_instance. These can be computed at compile time +// using the +// GOOGLE_PROTOBUF_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET() +// macro. For each none oneof field, the offset is related to +// the start of the message object. These can be computed at +// compile time using the // GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET() macro. // Besides offsets for all fields, this array also contains -// offsets for oneof unions. The offset of the i-th oneof -// union is offsets[descriptor->field_count() + i]. +// offsets for oneof unions. The offset of the i-th oneof union +// is offsets[descriptor->field_count() + i]. // has_bit_indices: Mapping from field indexes to their index in the has // bit array. // has_bits_offset: Offset in the message of an array of uint32s of size @@ -114,6 +123,9 @@ class ExtensionSet; // extension_set.h // by sizeof(). // arena_offset: If a message doesn't have a unknown_field_set that stores // the arena, it must have a direct pointer to the arena. +// weak_field_map_offset: If the message proto has weak fields, this is the +// offset of _weak_field_map_ in the generated proto. Otherwise +// -1. struct ReflectionSchema { public: // Size of a google::protobuf::Message object of this type. @@ -187,6 +199,9 @@ struct ReflectionSchema { offsets_[field->index()]; } + + bool HasWeakFields() const { return weak_field_map_offset_ > 0; } + // These members are intended to be private, but we cannot actually make them // private because this prevents us from using aggregate initialization of // them, ie. @@ -240,8 +255,7 @@ struct MigrationSchema { // of whatever type the individual field would be. Strings and // Messages use RepeatedPtrFields while everything else uses // RepeatedFields. -class LIBPROTOBUF_EXPORT GeneratedMessageReflection PROTOBUF_FINAL - : public Reflection { +class LIBPROTOBUF_EXPORT GeneratedMessageReflection PROTOBUF_FINAL : public Reflection { public: // Constructs a GeneratedMessageReflection. // Parameters: @@ -263,7 +277,7 @@ class LIBPROTOBUF_EXPORT GeneratedMessageReflection PROTOBUF_FINAL const UnknownFieldSet& GetUnknownFields(const Message& message) const; UnknownFieldSet* MutableUnknownFields(Message* message) const; - int SpaceUsed(const Message& message) const; + size_t SpaceUsedLong(const Message& message) const; bool HasField(const Message& message, const FieldDescriptor* field) const; int FieldSize(const Message& message, const FieldDescriptor* field) const; @@ -481,7 +495,7 @@ class LIBPROTOBUF_EXPORT GeneratedMessageReflection PROTOBUF_FINAL const Descriptor* message_type) const; private: - friend class GeneratedMessage; + friend class google::protobuf::flat::MetadataBuilder; friend class upb::google_opensource::GMR_Handlers; const Descriptor* const descriptor_; @@ -489,6 +503,11 @@ class LIBPROTOBUF_EXPORT GeneratedMessageReflection PROTOBUF_FINAL const DescriptorPool* const descriptor_pool_; MessageFactory* const message_factory_; + // Last non weak field index. This is an optimization when most weak fields + // are at the end of the containing message. If a message proto doesn't + // contain weak fields, then this field equals descriptor_->field_count(). + int last_non_weak_field_index_; + template const T& GetRawNonOneof(const Message& message, const FieldDescriptor* field) const; @@ -614,40 +633,6 @@ class LIBPROTOBUF_EXPORT GeneratedMessageReflection PROTOBUF_FINAL GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(GeneratedMessageReflection); }; -// Returns the offset of the given field within the given aggregate type. -// This is equivalent to the ANSI C offsetof() macro. However, according -// to the C++ standard, offsetof() only works on POD types, and GCC -// enforces this requirement with a warning. In practice, this rule is -// unnecessarily strict; there is probably no compiler or platform on -// which the offsets of the direct fields of a class are non-constant. -// Fields inherited from superclasses *can* have non-constant offsets, -// but that's not what this macro will be used for. -#if defined(__clang__) -// For Clang we use __builtin_offsetof() and suppress the warning, -// to avoid Control Flow Integrity and UBSan vptr sanitizers from -// crashing while trying to validate the invalid reinterpet_casts. -#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(TYPE, FIELD) \ - _Pragma("clang diagnostic push") \ - _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \ - __builtin_offsetof(TYPE, FIELD) \ - _Pragma("clang diagnostic pop") -#else -// Note that we calculate relative to the pointer value 16 here since if we -// just use zero, GCC complains about dereferencing a NULL pointer. We -// choose 16 rather than some other number just in case the compiler would -// be confused by an unaligned pointer. -#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(TYPE, FIELD) \ - static_cast< ::google::protobuf::uint32>( \ - reinterpret_cast( \ - &reinterpret_cast(16)->FIELD) - \ - reinterpret_cast(16)) -#endif - -#define PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ONEOF, FIELD) \ - static_cast< ::google::protobuf::uint32>( \ - reinterpret_cast(&(ONEOF->FIELD)) \ - - reinterpret_cast(ONEOF)) - // There are some places in proto2 where dynamic_cast would be useful as an // optimization. For example, take Message::MergeFrom(const Message& other). // For a given generated message FooMessage, we generate these two methods: diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_table_driven.cc b/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_table_driven.cc new file mode 100644 index 00000000000000..e281266dfed152 --- /dev/null +++ b/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_table_driven.cc @@ -0,0 +1,676 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include + +#include + +#include +#include +#include +#include +#include + + +namespace google { +namespace protobuf { +namespace internal { + + +namespace { + +enum StringType { + StringType_STRING = 0, + StringType_CORD = 1, + StringType_STRING_PIECE = 2 +}; + +template +inline Type* Raw(MessageLite* msg, int64 offset) { + return reinterpret_cast(reinterpret_cast(msg) + offset); +} + +template +inline const Type* Raw(const MessageLite* msg, int64 offset) { + return reinterpret_cast(reinterpret_cast(msg) + + offset); +} + +inline Arena* GetArena(MessageLite* msg, int64 arena_offset) { + if (GOOGLE_PREDICT_FALSE(arena_offset == -1)) { + return NULL; + } + + return Raw(msg, arena_offset)->arena(); +} + +template +inline Type* AddField(MessageLite* msg, int64 offset) { +#if LANG_CXX11 + static_assert(std::is_trivially_copy_assignable::value, + "Do not assign"); +#endif + + google::protobuf::RepeatedField* repeated = + Raw >(msg, offset); + return repeated->Add(); +} + +template <> +inline string* AddField(MessageLite* msg, int64 offset) { + google::protobuf::RepeatedPtrField* repeated = + Raw >(msg, offset); + return repeated->Add(); +} + + +template +inline void AddField(MessageLite* msg, int64 offset, Type value) { +#if LANG_CXX11 + static_assert(std::is_trivially_copy_assignable::value, + "Do not assign"); +#endif + *AddField(msg, offset) = value; +} + +inline void SetBit(uint32* has_bits, uint32 has_bit_index) { + GOOGLE_DCHECK(has_bits != NULL); + + uint32 mask = static_cast(1u) << (has_bit_index % 32); + has_bits[has_bit_index / 32u] |= mask; +} + +template +inline Type* MutableField(MessageLite* msg, uint32* has_bits, + uint32 has_bit_index, int64 offset) { + SetBit(has_bits, has_bit_index); + return Raw(msg, offset); +} + +template +inline void SetField(MessageLite* msg, uint32* has_bits, uint32 has_bit_index, + int64 offset, Type value) { +#if LANG_CXX11 + static_assert(std::is_trivially_copy_assignable::value, + "Do not assign"); +#endif + *MutableField(msg, has_bits, has_bit_index, offset) = value; +} + +template +static inline bool HandleString(io::CodedInputStream* input, MessageLite* msg, + Arena* arena, uint32* has_bits, + uint32 has_bit_index, int64 offset, + const void* default_ptr, bool strict_utf8, + const char* field_name) { +#ifdef GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED + const char* sdata; + size_t size; +#endif + + string* value; + if (repeated) { + value = AddField(msg, offset); + GOOGLE_DCHECK(value != NULL); + } else { + // TODO(ckennelly): Is this optimal? + value = MutableField(msg, has_bits, has_bit_index, offset) + ->Mutable(static_cast(default_ptr), arena); + GOOGLE_DCHECK(value != NULL); + } + + if (GOOGLE_PREDICT_FALSE(!WireFormatLite::ReadString(input, value))) { + return false; + } + +#ifdef GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED + sdata = value->data(); + size = value->size(); +#endif + +#ifdef GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED + if (validate) { + if (strict_utf8) { + if (GOOGLE_PREDICT_FALSE(!WireFormatLite::VerifyUtf8String( + sdata, size, WireFormatLite::PARSE, field_name))) { + return false; + } + } else { + WireFormatLite::VerifyUTF8String( + sdata, size, WireFormat::PARSE, field_name); + } + } +#endif + + return true; +} + +string* MutableUnknownFields(MessageLite* msg, int64 arena_offset) { + return Raw(msg, arena_offset) + ->mutable_unknown_fields(); +} + +// RepeatedMessageTypeHandler allows us to operate on RepeatedPtrField fields +// without instantiating the specific template. +class RepeatedMessageTypeHandler { + public: + typedef MessageLite Type; + static Arena* GetArena(Type* t) { return t->GetArena(); } + static void* GetMaybeArenaPointer(Type* t) { + return t->GetMaybeArenaPointer(); + } + static inline Type* NewFromPrototype(const Type* prototype, + Arena* arena = NULL) { + return prototype->New(arena); + } + static void Delete(Type* t, Arena* arena = NULL) { + if (arena == NULL) { + delete t; + } + } +}; + +inline bool ReadGroup(int field_number, io::CodedInputStream* input, + MessageLite* value, const ParseTable& table) { + if (GOOGLE_PREDICT_FALSE(!input->IncrementRecursionDepth())) { + return false; + } + + if (GOOGLE_PREDICT_FALSE(!MergePartialFromCodedStream(value, table, input))) { + return false; + } + + input->DecrementRecursionDepth(); + // Make sure the last thing read was an end tag for this group. + if (GOOGLE_PREDICT_FALSE(!input->LastTagWas(WireFormatLite::MakeTag( + field_number, WireFormatLite::WIRETYPE_END_GROUP)))) { + return false; + } + + return true; +} + +inline bool ReadMessage(io::CodedInputStream* input, MessageLite* value, + const ParseTable& table) { + int length; + if (GOOGLE_PREDICT_FALSE(!input->ReadVarintSizeAsInt(&length))) { + return false; + } + + std::pair p = + input->IncrementRecursionDepthAndPushLimit(length); + if (GOOGLE_PREDICT_FALSE(p.second < 0 || + !MergePartialFromCodedStream(value, table, input))) { + return false; + } + + // Make sure that parsing stopped when the limit was hit, not at an endgroup + // tag. + return input->DecrementRecursionDepthAndPopLimit(p.first); +} + +} // namespace + +class MergePartialFromCodedStreamHelper { + public: + static MessageLite* Add(RepeatedPtrFieldBase* field, + const MessageLite* prototype) { + return field->Add( + const_cast(prototype)); + } +}; + +bool MergePartialFromCodedStream(MessageLite* msg, const ParseTable& table, + io::CodedInputStream* input) { + // We require that has_bits are present, as to avoid having to check for them + // for every field. + // + // TODO(ckennelly): Make this a compile-time parameter with templates. + GOOGLE_DCHECK_GE(table.has_bits_offset, 0); + uint32* has_bits = Raw(msg, table.has_bits_offset); + GOOGLE_DCHECK(has_bits != NULL); + + while (true) { + uint32 tag = input->ReadTag(); + + const WireFormatLite::WireType wire_type = + WireFormatLite::GetTagWireType(tag); + const int field_number = WireFormatLite::GetTagFieldNumber(tag); + + if (GOOGLE_PREDICT_FALSE(field_number > table.max_field_number)) { + GOOGLE_DCHECK(!table.unknown_field_set); + ::google::protobuf::io::StringOutputStream unknown_fields_string( + MutableUnknownFields(msg, table.arena_offset)); + ::google::protobuf::io::CodedOutputStream unknown_fields_stream( + &unknown_fields_string, false); + + if (!::google::protobuf::internal::WireFormatLite::SkipField( + input, tag, &unknown_fields_stream)) { + return false; + } + + continue; + } + + // We implicitly verify that data points to a valid field as we check the + // wire types. Entries in table.fields[i] that do not correspond to valid + // field numbers have their normal_wiretype and packed_wiretype fields set + // with the kInvalidMask value. As wire_type cannot take on that value, we + // will never match. + const ParseTableField* data = table.fields + field_number; + + // TODO(ckennelly): Avoid sign extension + const int64 has_bit_index = data->has_bit_index; + const int64 offset = data->offset; + const unsigned char processing_type = data->processing_type; + + if (data->normal_wiretype == static_cast(wire_type)) { + // TODO(ckennelly): Use a computed goto on GCC/LLVM or otherwise eliminate + // the bounds check on processing_type. + + switch (processing_type) { +#define STR(S) #S +#define HANDLE_TYPE(TYPE, CPPTYPE) \ + case (WireFormatLite::TYPE_##TYPE): { \ + CPPTYPE value; \ + if (GOOGLE_PREDICT_FALSE( \ + (!WireFormatLite::ReadPrimitive< \ + CPPTYPE, WireFormatLite::TYPE_##TYPE>(input, &value)))) { \ + return false; \ + } \ + SetField(msg, has_bits, has_bit_index, offset, value); \ + break; \ + } \ + case (WireFormatLite::TYPE_##TYPE) | kRepeatedMask: { \ + google::protobuf::RepeatedField* values = \ + Raw >(msg, offset); \ + if (GOOGLE_PREDICT_FALSE((!WireFormatLite::ReadRepeatedPrimitive< \ + CPPTYPE, WireFormatLite::TYPE_##TYPE>( \ + data->tag_size, tag, input, values)))) { \ + return false; \ + } \ + break; \ + } + + HANDLE_TYPE(INT32, int32) + HANDLE_TYPE(INT64, int64) + HANDLE_TYPE(SINT32, int32) + HANDLE_TYPE(SINT64, int64) + HANDLE_TYPE(UINT32, uint32) + HANDLE_TYPE(UINT64, uint64) + + HANDLE_TYPE(FIXED32, uint32) + HANDLE_TYPE(FIXED64, uint64) + HANDLE_TYPE(SFIXED32, int32) + HANDLE_TYPE(SFIXED64, int64) + + HANDLE_TYPE(FLOAT, float) + HANDLE_TYPE(DOUBLE, double) + + HANDLE_TYPE(BOOL, bool) +#undef HANDLE_TYPE +#undef STR + case WireFormatLite::TYPE_BYTES: +#ifndef GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED + case WireFormatLite::TYPE_STRING: +#endif + { + GOOGLE_DCHECK(!table.unknown_field_set); + Arena* const arena = GetArena(msg, table.arena_offset); + const void* default_ptr = table.aux[field_number].strings.default_ptr; + + if (GOOGLE_PREDICT_FALSE((!HandleString( + input, msg, arena, has_bits, has_bit_index, offset, + default_ptr, false, NULL)))) { + return false; + } + break; + } + case (WireFormatLite::TYPE_BYTES) | kRepeatedMask: +#ifndef GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED + case (WireFormatLite::TYPE_STRING) | kRepeatedMask: +#endif + { + GOOGLE_DCHECK(!table.unknown_field_set); + Arena* const arena = GetArena(msg, table.arena_offset); + const void* default_ptr = + table.aux[field_number].strings.default_ptr; + + if (GOOGLE_PREDICT_FALSE((!HandleString( + input, msg, arena, has_bits, has_bit_index, offset, + default_ptr, false, NULL)))) { + return false; + } + break; + } +#ifdef GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED + case (WireFormatLite::TYPE_STRING): { + GOOGLE_DCHECK(!table.unknown_field_set); + Arena* const arena = GetArena(msg, table.arena_offset); + const void* default_ptr = table.aux[field_number].strings.default_ptr; + const char* field_name = table.aux[field_number].strings.field_name; + const bool strict_utf8 = table.aux[field_number].strings.strict_utf8; + + if (GOOGLE_PREDICT_FALSE((!HandleString( + input, msg, arena, has_bits, has_bit_index, offset, + default_ptr, strict_utf8, field_name)))) { + return false; + } + break; + } + case (WireFormatLite::TYPE_STRING) | kRepeatedMask: { + GOOGLE_DCHECK(!table.unknown_field_set); + Arena* const arena = GetArena(msg, table.arena_offset); + const void* default_ptr = table.aux[field_number].strings.default_ptr; + const char* field_name = table.aux[field_number].strings.field_name; + const bool strict_utf8 = table.aux[field_number].strings.strict_utf8; + + if (GOOGLE_PREDICT_FALSE((!HandleString( + input, msg, arena, has_bits, has_bit_index, offset, + default_ptr, strict_utf8, field_name)))) { + return false; + } + break; + } +#endif + case WireFormatLite::TYPE_ENUM: { + int value; + if (GOOGLE_PREDICT_FALSE((!WireFormatLite::ReadPrimitive< + int, WireFormatLite::TYPE_ENUM>(input, &value)))) { + return false; + } + + AuxillaryParseTableField::EnumValidator validator = + table.aux[field_number].enums.validator; + if (validator(value)) { + SetField(msg, has_bits, has_bit_index, offset, value); + } else { + GOOGLE_DCHECK(!table.unknown_field_set); + + ::google::protobuf::io::StringOutputStream unknown_fields_string( + MutableUnknownFields(msg, table.arena_offset)); + ::google::protobuf::io::CodedOutputStream unknown_fields_stream( + &unknown_fields_string, false); + unknown_fields_stream.WriteVarint32(tag); + unknown_fields_stream.WriteVarint32(value); + } + break; + } + case WireFormatLite::TYPE_ENUM | kRepeatedMask: { + int value; + if (GOOGLE_PREDICT_FALSE((!WireFormatLite::ReadPrimitive< + int, WireFormatLite::TYPE_ENUM>(input, &value)))) { + return false; + } + + AuxillaryParseTableField::EnumValidator validator = + table.aux[field_number].enums.validator; + if (validator(value)) { + AddField(msg, offset, value); + } else { + GOOGLE_DCHECK(!table.unknown_field_set); + + ::google::protobuf::io::StringOutputStream unknown_fields_string( + MutableUnknownFields(msg, table.arena_offset)); + ::google::protobuf::io::CodedOutputStream unknown_fields_stream( + &unknown_fields_string, false); + unknown_fields_stream.WriteVarint32(tag); + unknown_fields_stream.WriteVarint32(value); + } + + break; + } + case WireFormatLite::TYPE_GROUP: { + MessageLite** submsg_holder = + MutableField(msg, has_bits, has_bit_index, offset); + MessageLite* submsg = *submsg_holder; + + if (submsg == NULL) { + GOOGLE_DCHECK(!table.unknown_field_set); + Arena* const arena = GetArena(msg, table.arena_offset); + const MessageLite* prototype = + table.aux[field_number].messages.default_message(); + submsg = prototype->New(arena); + *submsg_holder = submsg; + } + + const ParseTable* ptable = + table.aux[field_number].messages.parse_table; + + if (ptable) { + if (GOOGLE_PREDICT_FALSE( + !ReadGroup(field_number, input, submsg, *ptable))) { + return false; + } + } else if (!WireFormatLite::ReadGroup(field_number, input, submsg)) { + return false; + } + + break; + } + case WireFormatLite::TYPE_GROUP | kRepeatedMask: { + RepeatedPtrFieldBase* field = Raw(msg, offset); + const MessageLite* prototype = + table.aux[field_number].messages.default_message(); + GOOGLE_DCHECK(prototype != NULL); + + MessageLite* submsg = + MergePartialFromCodedStreamHelper::Add(field, prototype); + const ParseTable* ptable = + table.aux[field_number].messages.parse_table; + + if (ptable) { + if (GOOGLE_PREDICT_FALSE( + !ReadGroup(field_number, input, submsg, *ptable))) { + return false; + } + } else if (!WireFormatLite::ReadGroup(field_number, input, submsg)) { + return false; + } + + break; + } + case WireFormatLite::TYPE_MESSAGE: { + MessageLite** submsg_holder = + MutableField(msg, has_bits, has_bit_index, offset); + MessageLite* submsg = *submsg_holder; + + if (submsg == NULL) { + GOOGLE_DCHECK(!table.unknown_field_set); + Arena* const arena = GetArena(msg, table.arena_offset); + const MessageLite* prototype = + table.aux[field_number].messages.default_message(); + submsg = prototype->New(arena); + *submsg_holder = submsg; + } + + const ParseTable* ptable = + table.aux[field_number].messages.parse_table; + + if (ptable) { + if (GOOGLE_PREDICT_FALSE(!ReadMessage(input, submsg, *ptable))) { + return false; + } + } else if (!WireFormatLite::ReadMessage(input, submsg)) { + return false; + } + + break; + } + // TODO(ckennelly): Adapt ReadMessageNoVirtualNoRecursionDepth and + // manage input->IncrementRecursionDepth() here. + case WireFormatLite::TYPE_MESSAGE | kRepeatedMask: { + RepeatedPtrFieldBase* field = Raw(msg, offset); + const MessageLite* prototype = + table.aux[field_number].messages.default_message(); + GOOGLE_DCHECK(prototype != NULL); + + MessageLite* submsg = + MergePartialFromCodedStreamHelper::Add(field, prototype); + const ParseTable* ptable = + table.aux[field_number].messages.parse_table; + + if (ptable) { + if (GOOGLE_PREDICT_FALSE(!ReadMessage(input, submsg, *ptable))) { + return false; + } + } else if (!WireFormatLite::ReadMessage(input, submsg)) { + return false; + } + + break; + } + case 0: { + // Done. + return true; + } + default: + break; + } + } else if (data->packed_wiretype == static_cast(wire_type)) { + // Non-packable fields have their packed_wiretype masked with + // kNotPackedMask, which is impossible to match here. + GOOGLE_DCHECK(processing_type & kRepeatedMask); + GOOGLE_DCHECK_NE(processing_type, kRepeatedMask); + + + + // TODO(ckennelly): Use a computed goto on GCC/LLVM. + // + // Mask out kRepeatedMask bit, allowing the jump table to be smaller. + switch (static_cast( + processing_type ^ kRepeatedMask)) { +#define HANDLE_PACKED_TYPE(TYPE, CPPTYPE, CPPTYPE_METHOD) \ + case WireFormatLite::TYPE_##TYPE: { \ + google::protobuf::RepeatedField* values = \ + Raw >(msg, offset); \ + if (GOOGLE_PREDICT_FALSE( \ + (!WireFormatLite::ReadPackedPrimitive< \ + CPPTYPE, WireFormatLite::TYPE_##TYPE>(input, values)))) { \ + return false; \ + } \ + break; \ + } + + HANDLE_PACKED_TYPE(INT32, int32, Int32) + HANDLE_PACKED_TYPE(INT64, int64, Int64) + HANDLE_PACKED_TYPE(SINT32, int32, Int32) + HANDLE_PACKED_TYPE(SINT64, int64, Int64) + HANDLE_PACKED_TYPE(UINT32, uint32, UInt32) + HANDLE_PACKED_TYPE(UINT64, uint64, UInt64) + + HANDLE_PACKED_TYPE(FIXED32, uint32, UInt32) + HANDLE_PACKED_TYPE(FIXED64, uint64, UInt64) + HANDLE_PACKED_TYPE(SFIXED32, int32, Int32) + HANDLE_PACKED_TYPE(SFIXED64, int64, Int64) + + HANDLE_PACKED_TYPE(FLOAT, float, Float) + HANDLE_PACKED_TYPE(DOUBLE, double, Double) + + HANDLE_PACKED_TYPE(BOOL, bool, Bool) +#undef HANDLE_PACKED_TYPE + case WireFormatLite::TYPE_ENUM: { + // To avoid unnecessarily calling MutableUnknownFields (which mutates + // InternalMetadataWithArena) when all inputs in the repeated series + // are valid, we implement our own parser rather than call + // WireFormat::ReadPackedEnumPreserveUnknowns. + uint32 length; + if (GOOGLE_PREDICT_FALSE(!input->ReadVarint32(&length))) { + return false; + } + + AuxillaryParseTableField::EnumValidator validator = + table.aux[field_number].enums.validator; + google::protobuf::RepeatedField* values = + Raw >(msg, offset); + string* unknown_fields = NULL; + + io::CodedInputStream::Limit limit = input->PushLimit(length); + while (input->BytesUntilLimit() > 0) { + int value; + if (GOOGLE_PREDICT_FALSE( + (!google::protobuf::internal::WireFormatLite::ReadPrimitive< + int, WireFormatLite::TYPE_ENUM>(input, &value)))) { + return false; + } + + if (validator(value)) { + values->Add(value); + } else { + if (GOOGLE_PREDICT_FALSE(unknown_fields == NULL)) { + GOOGLE_DCHECK(!table.unknown_field_set); + unknown_fields = MutableUnknownFields(msg, table.arena_offset); + } + + ::google::protobuf::io::StringOutputStream unknown_fields_string( + unknown_fields); + ::google::protobuf::io::CodedOutputStream unknown_fields_stream( + &unknown_fields_string, false); + unknown_fields_stream.WriteVarint32(tag); + unknown_fields_stream.WriteVarint32(value); + } + } + input->PopLimit(limit); + + break; + } + case WireFormatLite::TYPE_STRING: + case WireFormatLite::TYPE_GROUP: + case WireFormatLite::TYPE_MESSAGE: + case WireFormatLite::TYPE_BYTES: + GOOGLE_DCHECK(false); + return false; + default: + break; + } + } else { + if (wire_type == WireFormatLite::WIRETYPE_END_GROUP) { + // Must be the end of the message. + return true; + } + + // process unknown field. + GOOGLE_DCHECK(!table.unknown_field_set); + ::google::protobuf::io::StringOutputStream unknown_fields_string( + MutableUnknownFields(msg, table.arena_offset)); + ::google::protobuf::io::CodedOutputStream unknown_fields_stream( + &unknown_fields_string, false); + + if (!::google::protobuf::internal::WireFormatLite::SkipField( + input, tag, &unknown_fields_stream)) { + return false; + } + } + } +} + +} // namespace internal +} // namespace protobuf +} // namespace google diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_table_driven.h b/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_table_driven.h new file mode 100644 index 00000000000000..557c57d35cb412 --- /dev/null +++ b/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_table_driven.h @@ -0,0 +1,173 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef GOOGLE_PROTOBUF_GENERATED_MESSAGE_TABLE_DRIVEN_H__ +#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_TABLE_DRIVEN_H__ + +#include + +#if LANG_CXX11 +#define PROTOBUF_CONSTEXPR constexpr + +// We require C++11 and Clang to use constexpr for variables, as GCC 4.8 +// requires constexpr to be consistent between declarations of variables +// unnecessarily (see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58541). +#ifdef __clang__ +#define PROTOBUF_CONSTEXPR_VAR constexpr +#else // !__clang__ +#define PROTOBUF_CONSTEXPR_VAR +#endif // !_clang + +#else +#define PROTOBUF_CONSTEXPR +#define PROTOBUF_CONSTEXPR_VAR +#endif + +namespace google { +namespace protobuf { +namespace internal { + +static PROTOBUF_CONSTEXPR const unsigned char kOneofMask = 0x40; +static PROTOBUF_CONSTEXPR const unsigned char kRepeatedMask = 0x20; +// Check this against types. + +static PROTOBUF_CONSTEXPR const unsigned char kNotPackedMask = 0x10; +static PROTOBUF_CONSTEXPR const unsigned char kInvalidMask = 0x20; + +enum ProcessingTypes { + TYPE_STRING_CORD = 19, + TYPE_STRING_STRING_PIECE = 20, + TYPE_BYTES_CORD = 21, + TYPE_BYTES_STRING_PIECE = 22, +}; + +#if LANG_CXX11 +static_assert(TYPE_BYTES_STRING_PIECE < kRepeatedMask, "Invalid enum"); +#endif + +// TODO(ckennelly): Add a static assertion to ensure that these masks do not +// conflict with wiretypes. + +// ParseTableField is kept small to help simplify instructions for computing +// offsets, as we will always need this information to parse a field. +// Additional data, needed for some types, is stored in +// AuxillaryParseTableField. +struct ParseTableField { + uint32 offset; + uint32 has_bit_index; + unsigned char normal_wiretype; + unsigned char packed_wiretype; + + // processing_type is given by: + // (FieldDescriptor->type() << 1) | FieldDescriptor->is_packed() + unsigned char processing_type; + + unsigned char tag_size; +}; + +struct ParseTable; + +union AuxillaryParseTableField { + typedef bool (*EnumValidator)(int); + + // Enums + struct enum_aux { + EnumValidator validator; + const char* name; + }; + enum_aux enums; + // Group, messages + struct message_aux { + // ExplicitlyInitialized -> T requires a reinterpret_cast, which prevents + // the tables from being constructed as a constexpr. We use void to avoid + // the cast. + const void* default_message_void; + const MessageLite* default_message() const { + return static_cast(default_message_void); + } + const ParseTable* parse_table; + }; + message_aux messages; + // Strings + struct string_aux { + const void* default_ptr; + const char* field_name; + bool strict_utf8; + const char* name; + }; + string_aux strings; + +#if LANG_CXX11 + AuxillaryParseTableField() = default; +#else + AuxillaryParseTableField() { } +#endif + PROTOBUF_CONSTEXPR AuxillaryParseTableField( + AuxillaryParseTableField::enum_aux e) : enums(e) {} + PROTOBUF_CONSTEXPR AuxillaryParseTableField( + AuxillaryParseTableField::message_aux m) : messages(m) {} + PROTOBUF_CONSTEXPR AuxillaryParseTableField( + AuxillaryParseTableField::string_aux s) : strings(s) {} +}; + +struct ParseTable { + const ParseTableField* fields; + const AuxillaryParseTableField* aux; + int max_field_number; + // TODO(ckennelly): Do something with this padding. + + // TODO(ckennelly): Vet these for sign extension. + int64 has_bits_offset; + int64 arena_offset; + int unknown_field_set; +}; + +// TODO(jhen): Remove the __NVCC__ check when we get a version of nvcc that +// supports these checks. +#if LANG_CXX11 && !defined(__NVCC__) +static_assert(sizeof(ParseTableField) <= 16, "ParseTableField is too large"); +// The tables must be composed of POD components to ensure link-time +// initialization. +static_assert(std::is_pod::value, ""); +static_assert(std::is_pod::value, ""); +static_assert(std::is_pod::value, ""); +static_assert(std::is_pod::value, ""); +static_assert(std::is_pod::value, ""); +static_assert(std::is_pod::value, ""); +#endif + +bool MergePartialFromCodedStream(MessageLite* msg, const ParseTable& table, + io::CodedInputStream* input); + +} // namespace internal +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_GENERATED_MESSAGE_TABLE_DRIVEN_H__ diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_util.cc b/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_util.cc index b4d2c9c15032b1..35d8156ef3d1a5 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_util.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_util.cc @@ -58,7 +58,7 @@ void InitEmptyString() { OnShutdown(&DeleteEmptyString); } -int StringSpaceUsedExcludingSelf(const string& str) { +size_t StringSpaceUsedExcludingSelfLong(const string& str) { const void* start = &str; const void* end = &str + 1; if (start <= str.data() && str.data() < end) { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_util.h b/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_util.h index 14101832a24f01..44174466a8bc65 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_util.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/generated_message_util.h @@ -39,14 +39,16 @@ #define GOOGLE_PROTOBUF_GENERATED_MESSAGE_UTIL_H__ #include +#include #include +#include #include #include #include #ifndef PROTOBUF_FINAL -#if LANG_CXX11 +#if LANG_CXX11 && !defined(__NVCC__) #define PROTOBUF_FINAL final #else #define PROTOBUF_FINAL @@ -75,6 +77,43 @@ namespace internal { #define GOOGLE_PROTOBUF_DEPRECATED_ATTR +// Returns the offset of the given field within the given aggregate type. +// This is equivalent to the ANSI C offsetof() macro. However, according +// to the C++ standard, offsetof() only works on POD types, and GCC +// enforces this requirement with a warning. In practice, this rule is +// unnecessarily strict; there is probably no compiler or platform on +// which the offsets of the direct fields of a class are non-constant. +// Fields inherited from superclasses *can* have non-constant offsets, +// but that's not what this macro will be used for. +#if defined(__clang__) +// For Clang we use __builtin_offsetof() and suppress the warning, +// to avoid Control Flow Integrity and UBSan vptr sanitizers from +// crashing while trying to validate the invalid reinterpet_casts. +#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(TYPE, FIELD) \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \ + __builtin_offsetof(TYPE, FIELD) \ + _Pragma("clang diagnostic pop") +#else +// Note that we calculate relative to the pointer value 16 here since if we +// just use zero, GCC complains about dereferencing a NULL pointer. We +// choose 16 rather than some other number just in case the compiler would +// be confused by an unaligned pointer. +#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(TYPE, FIELD) \ + static_cast( \ + reinterpret_cast( \ + &reinterpret_cast(16)->FIELD) - \ + reinterpret_cast(16)) +#endif + +#define GOOGLE_PROTOBUF_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ONEOF, FIELD) \ + static_cast< ::google::protobuf::uint32>( \ + reinterpret_cast(&(ONEOF->FIELD)) \ + - reinterpret_cast(ONEOF)) +// TODO(acozzette): remove this transitional macro after updating generated code +#define PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ONEOF, FIELD) \ + GOOGLE_PROTOBUF_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ONEOF, FIELD) + // Constants for special floating point values. LIBPROTOBUF_EXPORT double Infinity(); LIBPROTOBUF_EXPORT double NaN(); @@ -125,7 +164,7 @@ class ExplicitlyConstructed { // Default empty string object. Don't use this directly. Instead, call // GetEmptyString() to get the reference. -LIBPROTOBUF_EXPORT extern ExplicitlyConstructed< ::std::string> fixed_address_empty_string; +extern ExplicitlyConstructed< ::std::string> fixed_address_empty_string; LIBPROTOBUF_EXPORT extern ProtobufOnceType empty_string_once_init_; LIBPROTOBUF_EXPORT void InitEmptyString(); @@ -139,7 +178,7 @@ LIBPROTOBUF_EXPORT inline const ::std::string& GetEmptyString() { return GetEmptyStringAlreadyInited(); } -LIBPROTOBUF_EXPORT int StringSpaceUsedExcludingSelf(const string& str); +LIBPROTOBUF_EXPORT size_t StringSpaceUsedExcludingSelfLong(const string& str); // True if IsInitialized() is true for all elements of t. Type is expected @@ -159,11 +198,21 @@ LIBPROTOBUF_EXPORT void InitProtobufDefaults(); // We compute sizes as size_t but cache them as int. This function converts a // computed size to a cached size. Since we don't proceed with serialization if // the total size was > INT_MAX, it is not important what this function returns -// for inputs > INT_MAX. +// for inputs > INT_MAX. However this case should not error or GOOGLE_CHECK-fail, +// because the full size_t resolution is still returned from ByteSizeLong() and +// checked against INT_MAX; we can catch the overflow there. inline int ToCachedSize(size_t size) { return static_cast(size); } +// For cases where a legacy function returns an integer size. We GOOGLE_DCHECK() that +// the conversion will fit within an integer; if this is false then we are +// losing information. +inline int ToIntSize(size_t size) { + GOOGLE_DCHECK_LE(size, static_cast(INT_MAX)); + return static_cast(size); +} + // We mainly calculate sizes in terms of size_t, but some functions that compute // sizes return "int". These int sizes are expected to always be positive. // This function is more efficient than casting an int to size_t directly on diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/io/coded_stream.cc b/third_party/protobuf/3.2.0/src/google/protobuf/io/coded_stream.cc index 3c2e0fbd2cb264..df4250e5134bff 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/io/coded_stream.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/io/coded_stream.cc @@ -76,10 +76,6 @@ CodedInputStream::~CodedInputStream() { if (input_ != NULL) { BackUpInputToCurrentPosition(); } - - if (total_bytes_warning_threshold_ == -2) { - GOOGLE_LOG(WARNING) << "The total number of bytes read was " << total_bytes_read_; - } } // Static. @@ -123,21 +119,15 @@ CodedInputStream::Limit CodedInputStream::PushLimit(int byte_limit) { Limit old_limit = current_limit_; // security: byte_limit is possibly evil, so check for negative values - // and overflow. - if (byte_limit >= 0 && - byte_limit <= INT_MAX - current_position) { + // and overflow. Also check that the new requested limit is before the + // previous limit; otherwise we continue to enforce the previous limit. + if GOOGLE_PREDICT_TRUE(byte_limit >= 0 && + byte_limit <= INT_MAX - current_position && + byte_limit < current_limit_ - current_position) { current_limit_ = current_position + byte_limit; - } else { - // Negative or overflow. - current_limit_ = INT_MAX; + RecomputeBufferLimits(); } - // We need to enforce all limits, not just the new one, so if the previous - // limit was before the new requested limit, we continue to enforce the - // previous limit. - current_limit_ = std::min(current_limit_, old_limit); - - RecomputeBufferLimits(); return old_limit; } @@ -185,16 +175,12 @@ int CodedInputStream::BytesUntilLimit() const { void CodedInputStream::SetTotalBytesLimit( int total_bytes_limit, int warning_threshold) { + (void) warning_threshold; + // Make sure the limit isn't already past, since this could confuse other // code. int current_position = CurrentPosition(); total_bytes_limit_ = std::max(current_position, total_bytes_limit); - if (warning_threshold >= 0) { - total_bytes_warning_threshold_ = warning_threshold; - } else { - // warning_threshold is negative - total_bytes_warning_threshold_ = -1; - } RecomputeBufferLimits(); } @@ -605,20 +591,6 @@ bool CodedInputStream::Refresh() { return false; } - if (total_bytes_warning_threshold_ >= 0 && - total_bytes_read_ >= total_bytes_warning_threshold_) { - GOOGLE_LOG(INFO) << "Reading dangerously large protocol message. If the " - "message turns out to be larger than " - << total_bytes_limit_ << " bytes, parsing will be halted " - "for security reasons. To increase the limit (or to " - "disable these warnings), see " - "CodedInputStream::SetTotalBytesLimit() in " - "google/protobuf/io/coded_stream.h."; - - // Don't warn again for this stream, and print total size at the end. - total_bytes_warning_threshold_ = -2; - } - const void* void_buffer; int buffer_size; if (NextNonEmpty(input_, &void_buffer, &buffer_size)) { @@ -655,7 +627,7 @@ bool CodedInputStream::Refresh() { // CodedOutputStream ================================================= -bool CodedOutputStream::default_serialization_deterministic_ = false; +google::protobuf::internal::AtomicWord CodedOutputStream::default_serialization_deterministic_ = 0; CodedOutputStream::CodedOutputStream(ZeroCopyOutputStream* output) : output_(output), diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/io/coded_stream.h b/third_party/protobuf/3.2.0/src/google/protobuf/io/coded_stream.h index b71b4a989d4211..20d86143110f96 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/io/coded_stream.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/io/coded_stream.h @@ -131,7 +131,9 @@ #define PROTOBUF_LITTLE_ENDIAN 1 #endif #endif +#include #include +#include namespace google { @@ -371,11 +373,10 @@ class LIBPROTOBUF_EXPORT CodedInputStream { // maximum message length should be limited to the shortest length that // will not harm usability. The theoretical shortest message that could // cause integer overflows is 512MB. The default limit is 64MB. Apps - // should set shorter limits if possible. If warning_threshold is not -1, - // a warning will be printed to stderr after warning_threshold bytes are - // read. For backwards compatibility all negative values get squashed to -1, - // as other negative values might have special internal meanings. - // An error will always be printed to stderr if the limit is reached. + // should set shorter limits if possible. For backwards compatibility all + // negative values get squashed to -1, as other negative values might have + // special internal meanings. An error will always be printed to stderr if + // the limit is reached. // // This is unrelated to PushLimit()/PopLimit(). // @@ -568,12 +569,6 @@ class LIBPROTOBUF_EXPORT CodedInputStream { // current_limit_. Set using SetTotalBytesLimit(). int total_bytes_limit_; - // If positive/0: Limit for bytes read after which a warning due to size - // should be logged. - // If -1: Printing of warning disabled. Can be set by client. - // If -2: Internal: Limit has been reached, print full size when destructing. - int total_bytes_warning_threshold_; - // Current recursion budget, controlled by IncrementRecursionDepth() and // similar. Starts at recursion_limit_ and goes down: if this reaches // -1 we are over budget. @@ -581,6 +576,8 @@ class LIBPROTOBUF_EXPORT CodedInputStream { // Recursion depth limit, set by SetRecursionLimit(). int recursion_limit_; + bool disable_strict_correctness_enforcement_; + // See SetExtensionRegistry(). const DescriptorPool* extension_pool_; MessageFactory* extension_factory_; @@ -642,8 +639,6 @@ class LIBPROTOBUF_EXPORT CodedInputStream { static const int kDefaultTotalBytesLimit = INT_MAX; - static const int kDefaultTotalBytesWarningThreshold = 32 << 20; // 32MB - static int default_recursion_limit_; // 100 by default. }; @@ -870,7 +865,7 @@ class LIBPROTOBUF_EXPORT CodedOutputStream { } static bool IsDefaultSerializationDeterministic() { - return default_serialization_deterministic_; + return google::protobuf::internal::Acquire_Load(&default_serialization_deterministic_); } private: @@ -885,7 +880,8 @@ class LIBPROTOBUF_EXPORT CodedOutputStream { // See SetSerializationDeterministic() regarding these three fields. bool serialization_deterministic_is_overridden_; bool serialization_deterministic_override_; - static bool default_serialization_deterministic_; + // Conceptually, default_serialization_deterministic_ is an atomic bool. + static google::protobuf::internal::AtomicWord default_serialization_deterministic_; // Advance the buffer by a given number of bytes. void Advance(int amount); @@ -904,10 +900,15 @@ class LIBPROTOBUF_EXPORT CodedOutputStream { void WriteVarint64SlowPath(uint64 value); // See above. Other projects may use "friend" to allow them to call this. - // Requires: no protocol buffer serialization in progress. + // After SetDefaultSerializationDeterministic() completes, all protocol + // buffer serializations will be deterministic by default. Thread safe. + // However, the meaning of "after" is subtle here: to be safe, each thread + // that wants deterministic serialization by default needs to call + // SetDefaultSerializationDeterministic() or ensure on its own that another + // thread has done so. friend void ::google::protobuf::internal::MapTestForceDeterministic(); static void SetDefaultSerializationDeterministic() { - default_serialization_deterministic_ = true; + google::protobuf::internal::Release_Store(&default_serialization_deterministic_, 1); } }; @@ -1395,9 +1396,9 @@ inline CodedInputStream::CodedInputStream(ZeroCopyInputStream* input) current_limit_(kint32max), buffer_size_after_limit_(0), total_bytes_limit_(kDefaultTotalBytesLimit), - total_bytes_warning_threshold_(kDefaultTotalBytesWarningThreshold), recursion_budget_(default_recursion_limit_), recursion_limit_(default_recursion_limit_), + disable_strict_correctness_enforcement_(true), extension_pool_(NULL), extension_factory_(NULL) { // Eagerly Refresh() so buffer space is immediately available. @@ -1416,9 +1417,9 @@ inline CodedInputStream::CodedInputStream(const uint8* buffer, int size) current_limit_(size), buffer_size_after_limit_(0), total_bytes_limit_(kDefaultTotalBytesLimit), - total_bytes_warning_threshold_(kDefaultTotalBytesWarningThreshold), recursion_budget_(default_recursion_limit_), recursion_limit_(default_recursion_limit_), + disable_strict_correctness_enforcement_(true), extension_pool_(NULL), extension_factory_(NULL) { // Note that setting current_limit_ == size is important to prevent some diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/io/coded_stream_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/io/coded_stream_unittest.cc index 31574d5be35b3c..96f91ae91c2d33 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/io/coded_stream_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/io/coded_stream_unittest.cc @@ -63,6 +63,7 @@ namespace protobuf { namespace io { namespace { + // =================================================================== // Data-Driven Test Infrastructure @@ -1296,35 +1297,6 @@ void CodedStreamTest::SetupTotalBytesLimitWarningTest( *out_warnings = scoped_log.GetMessages(WARNING); } -TEST_F(CodedStreamTest, TotalBytesLimitWarning) { - std::vector errors; - std::vector warnings; - SetupTotalBytesLimitWarningTest(10240, 1024, &errors, &warnings); - - EXPECT_EQ(0, errors.size()); - - EXPECT_EQ(1, warnings.size()); - EXPECT_PRED_FORMAT2(testing::IsSubstring, - "The total number of bytes read was 2048", - warnings[0]); -} - -TEST_F(CodedStreamTest, TotalBytesLimitWarningDisabled) { - std::vector errors; - std::vector warnings; - - // Test with -1 - SetupTotalBytesLimitWarningTest(10240, -1, &errors, &warnings); - EXPECT_EQ(0, errors.size()); - EXPECT_EQ(0, warnings.size()); - - // Test again with -2, expecting the same result - SetupTotalBytesLimitWarningTest(10240, -2, &errors, &warnings); - EXPECT_EQ(0, errors.size()); - EXPECT_EQ(0, warnings.size()); -} - - TEST_F(CodedStreamTest, RecursionLimit) { ArrayInputStream input(buffer_, sizeof(buffer_)); CodedInputStream coded_input(&input); @@ -1425,9 +1397,6 @@ TEST_F(CodedStreamTest, InputOver2G) { EXPECT_EQ(0, errors.size()); } -// =================================================================== - - } // namespace } // namespace io } // namespace protobuf diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/io/gzip_stream.h b/third_party/protobuf/3.2.0/src/google/protobuf/io/gzip_stream.h index df1a446ebc16fc..15b02fe3d7dc7f 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/io/gzip_stream.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/io/gzip_stream.h @@ -118,7 +118,7 @@ class LIBPROTOBUF_EXPORT GzipOutputStream : public ZeroCopyOutputStream { ZLIB = 2, }; - struct LIBPROTOBUF_EXPORT Options { + struct Options { // Defaults to GZIP. Format format; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/io/zero_copy_stream_impl.cc b/third_party/protobuf/3.2.0/src/google/protobuf/io/zero_copy_stream_impl.cc index 3ab5224a64adda..02619d7bedc0c3 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/io/zero_copy_stream_impl.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/io/zero_copy_stream_impl.cc @@ -32,9 +32,7 @@ // Based on original Protocol Buffers design by // Sanjay Ghemawat, Jeff Dean, and others. -#ifdef _MSC_VER -#include -#else +#ifndef _MSC_VER #include #include #include @@ -43,7 +41,6 @@ #include #include #include - #include #include #include @@ -59,6 +56,13 @@ namespace io { // Win32 lseek is broken: If invoked on a non-seekable file descriptor, its // return value is undefined. We re-define it to always produce an error. #define lseek(fd, offset, origin) ((off_t)-1) +// DO NOT include , instead create functions in io_win32.{h,cc} and import +// them like we do below. +using google::protobuf::stubs::access; +using google::protobuf::stubs::close; +using google::protobuf::stubs::open; +using google::protobuf::stubs::read; +using google::protobuf::stubs::write; #endif namespace { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/io/zero_copy_stream_impl_lite.h b/third_party/protobuf/3.2.0/src/google/protobuf/io/zero_copy_stream_impl_lite.h index e4d6a024dd344d..6db1d69595d253 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/io/zero_copy_stream_impl_lite.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/io/zero_copy_stream_impl_lite.h @@ -399,7 +399,7 @@ inline std::pair as_string_data(string* s) { #ifdef LANG_CXX11 return std::make_pair(p, true); #else - return make_pair(p, p != NULL); + return std::make_pair(p, p != NULL); #endif } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/io/zero_copy_stream_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/io/zero_copy_stream_unittest.cc index a83e2b738e3dbc..5904b0d9edf4d6 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/io/zero_copy_stream_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/io/zero_copy_stream_unittest.cc @@ -47,9 +47,7 @@ // implementations. -#ifdef _MSC_VER -#include -#else +#ifndef _MSC_VER #include #endif #include @@ -85,6 +83,12 @@ namespace { #ifdef _WIN32 #define pipe(fds) _pipe(fds, 4096, O_BINARY) +// DO NOT include , instead create functions in io_win32.{h,cc} and import +// them like we do below. +using google::protobuf::stubs::access; +using google::protobuf::stubs::mkdir; +using google::protobuf::stubs::open; +using google::protobuf::stubs::close; #endif #ifndef O_BINARY diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/lite_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/lite_unittest.cc index 3ca3fbaf6ecb3a..2f5268af1535e8 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/lite_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/lite_unittest.cc @@ -36,24 +36,24 @@ #include #include #include -#include #include +#include #include #include #include #include #include #include -#include +#include -using namespace std; +#include namespace { // Helper methods to test parsing merge behavior. void ExpectMessageMerged(const google::protobuf::unittest::TestAllTypesLite& message) { - GOOGLE_CHECK(message.optional_int32() == 3); - GOOGLE_CHECK(message.optional_int64() == 2); - GOOGLE_CHECK(message.optional_string() == "hello"); + EXPECT_EQ(message.optional_int32(), 3); + EXPECT_EQ(message.optional_int64(), 2); + EXPECT_EQ(message.optional_string(), "hello"); } void AssignParsingMergeMessages( @@ -71,7 +71,7 @@ void SetAllTypesInEmptyMessageUnknownFields( protobuf_unittest::TestAllTypesLite message; google::protobuf::TestUtilLite::ExpectClear(message); google::protobuf::TestUtilLite::SetAllFields(&message); - string data = message.SerializeAsString(); + std::string data = message.SerializeAsString(); empty_message->ParseFromString(data); } @@ -83,20 +83,14 @@ void SetSomeTypesInEmptyMessageUnknownFields( message.set_optional_int64(102); message.set_optional_uint32(103); message.set_optional_uint64(104); - string data = message.SerializeAsString(); + std::string data = message.SerializeAsString(); empty_message->ParseFromString(data); } } // namespace -#define EXPECT_TRUE GOOGLE_CHECK -#define ASSERT_TRUE GOOGLE_CHECK -#define EXPECT_FALSE(COND) GOOGLE_CHECK(!(COND)) -#define EXPECT_EQ GOOGLE_CHECK_EQ -#define ASSERT_EQ GOOGLE_CHECK_EQ - -int main(int argc, char* argv[]) { - string data, data2, packed_data; +TEST(Lite, AllLite1) { + std::string data; { protobuf_unittest::TestAllTypesLite message, message2, message3; @@ -113,13 +107,16 @@ int main(int argc, char* argv[]) { message.Clear(); google::protobuf::TestUtilLite::ExpectClear(message); } +} +TEST(Lite, AllLite2) { + std::string data; { protobuf_unittest::TestAllExtensionsLite message, message2, message3; google::protobuf::TestUtilLite::ExpectExtensionsClear(message); google::protobuf::TestUtilLite::SetAllExtensions(&message); message2.CopyFrom(message); - string extensions_data = message.SerializeAsString(); + std::string extensions_data = message.SerializeAsString(); message3.ParseFromString(extensions_data); google::protobuf::TestUtilLite::ExpectAllExtensionsSet(message); google::protobuf::TestUtilLite::ExpectAllExtensionsSet(message2); @@ -129,6 +126,10 @@ int main(int argc, char* argv[]) { message.Clear(); google::protobuf::TestUtilLite::ExpectExtensionsClear(message); } +} + +TEST(Lite, AllLite3) { + std::string data, packed_data; { protobuf_unittest::TestPackedTypesLite message, message2, message3; @@ -151,8 +152,8 @@ int main(int argc, char* argv[]) { google::protobuf::TestUtilLite::ExpectPackedExtensionsClear(message); google::protobuf::TestUtilLite::SetPackedExtensions(&message); message2.CopyFrom(message); - string packed_extensions_data = message.SerializeAsString(); - GOOGLE_CHECK(packed_extensions_data == packed_data); + std::string packed_extensions_data = message.SerializeAsString(); + EXPECT_EQ(packed_extensions_data, packed_data); message3.ParseFromString(packed_extensions_data); google::protobuf::TestUtilLite::ExpectPackedExtensionsSet(message); google::protobuf::TestUtilLite::ExpectPackedExtensionsSet(message2); @@ -162,6 +163,10 @@ int main(int argc, char* argv[]) { message.Clear(); google::protobuf::TestUtilLite::ExpectPackedExtensionsClear(message); } +} + +TEST(Lite, AllLite5) { + std::string data; { // Test that if an optional or required message/group field appears multiple @@ -195,7 +200,7 @@ int main(int argc, char* argv[]) { #undef ASSIGN_REPEATED_GROUP - string buffer; + std::string buffer; generator.SerializeToString(&buffer); google::protobuf::unittest::TestParsingMergeLite parsing_merge; parsing_merge.ParseFromString(buffer); @@ -209,11 +214,16 @@ int main(int argc, char* argv[]) { google::protobuf::unittest::TestParsingMergeLite::optional_ext)); // Repeated fields should not be merged. - GOOGLE_CHECK(parsing_merge.repeated_all_types_size() == 3); - GOOGLE_CHECK(parsing_merge.repeatedgroup_size() == 3); - GOOGLE_CHECK(parsing_merge.ExtensionSize( - google::protobuf::unittest::TestParsingMergeLite::repeated_ext) == 3); + EXPECT_EQ(parsing_merge.repeated_all_types_size(), 3); + EXPECT_EQ(parsing_merge.repeatedgroup_size(), 3); + EXPECT_EQ(parsing_merge.ExtensionSize( + google::protobuf::unittest::TestParsingMergeLite::repeated_ext), + 3); } +} + +TEST(Lite, AllLite6) { + std::string data; // Test unknown fields support for lite messages. { @@ -231,6 +241,10 @@ int main(int argc, char* argv[]) { message.Clear(); google::protobuf::TestUtilLite::ExpectClear(message); } +} + +TEST(Lite, AllLite7) { + std::string data; { protobuf_unittest::TestAllExtensionsLite message, message2; @@ -247,6 +261,10 @@ int main(int argc, char* argv[]) { message.Clear(); google::protobuf::TestUtilLite::ExpectExtensionsClear(message); } +} + +TEST(Lite, AllLite8) { + std::string data; { protobuf_unittest::TestPackedTypesLite message, message2; @@ -263,6 +281,10 @@ int main(int argc, char* argv[]) { message.Clear(); google::protobuf::TestUtilLite::ExpectPackedClear(message); } +} + +TEST(Lite, AllLite9) { + std::string data; { protobuf_unittest::TestPackedExtensionsLite message, message2; @@ -279,6 +301,10 @@ int main(int argc, char* argv[]) { message.Clear(); google::protobuf::TestUtilLite::ExpectPackedExtensionsClear(message); } +} + +TEST(Lite, AllLite10) { + std::string data; { // Test Unknown fields swap @@ -286,11 +312,15 @@ int main(int argc, char* argv[]) { SetAllTypesInEmptyMessageUnknownFields(&empty_message); SetSomeTypesInEmptyMessageUnknownFields(&empty_message2); data = empty_message.SerializeAsString(); - data2 = empty_message2.SerializeAsString(); + std::string data2 = empty_message2.SerializeAsString(); empty_message.Swap(&empty_message2); - GOOGLE_CHECK_EQ(data, empty_message2.SerializeAsString()); - GOOGLE_CHECK_EQ(data2, empty_message.SerializeAsString()); + EXPECT_EQ(data, empty_message2.SerializeAsString()); + EXPECT_EQ(data2, empty_message.SerializeAsString()); } +} + +TEST(Lite, AllLite11) { + std::string data; { // Test unknown fields swap with self @@ -298,8 +328,12 @@ int main(int argc, char* argv[]) { SetAllTypesInEmptyMessageUnknownFields(&empty_message); data = empty_message.SerializeAsString(); empty_message.Swap(&empty_message); - GOOGLE_CHECK_EQ(data, empty_message.SerializeAsString()); + EXPECT_EQ(data, empty_message.SerializeAsString()); } +} + +TEST(Lite, AllLite12) { + std::string data; { // Test MergeFrom with unknown fields @@ -324,13 +358,17 @@ int main(int argc, char* argv[]) { // We do not compare the serialized output of a normal message and a lite // message because the order of fields do not match. We convert lite message // back into normal message, then compare. - GOOGLE_CHECK_EQ(message.SerializeAsString(), message2.SerializeAsString()); + EXPECT_EQ(message.SerializeAsString(), message2.SerializeAsString()); } +} + +TEST(Lite, AllLite13) { + std::string data; { // Test unknown enum value protobuf_unittest::TestAllTypesLite message; - string buffer; + std::string buffer; { google::protobuf::io::StringOutputStream output_stream(&buffer); google::protobuf::io::CodedOutputStream coded_output(&output_stream); @@ -345,18 +383,26 @@ int main(int argc, char* argv[]) { } message.ParseFromString(buffer); data = message.SerializeAsString(); - GOOGLE_CHECK_EQ(data, buffer); + EXPECT_EQ(data, buffer); } +} + +TEST(Lite, AllLite14) { + std::string data; { // Test Clear with unknown fields protobuf_unittest::TestEmptyMessageLite empty_message; SetAllTypesInEmptyMessageUnknownFields(&empty_message); empty_message.Clear(); - GOOGLE_CHECK_EQ(0, empty_message.unknown_fields().size()); + EXPECT_EQ(0, empty_message.unknown_fields().size()); } +} + +// Tests for map lite ============================================= - // Tests for map lite ============================================= +TEST(Lite, AllLite15) { + std::string data; { // Accessors @@ -368,6 +414,10 @@ int main(int argc, char* argv[]) { google::protobuf::MapLiteTestUtil::ModifyMapFields(&message); google::protobuf::MapLiteTestUtil::ExpectMapFieldsModified(message); } +} + +TEST(Lite, AllLite16) { + std::string data; { // SetMapFieldsInitialized @@ -376,6 +426,10 @@ int main(int argc, char* argv[]) { google::protobuf::MapLiteTestUtil::SetMapFieldsInitialized(&message); google::protobuf::MapLiteTestUtil::ExpectMapFieldsSetInitialized(message); } +} + +TEST(Lite, AllLite17) { + std::string data; { // Clear @@ -385,6 +439,10 @@ int main(int argc, char* argv[]) { message.Clear(); google::protobuf::MapLiteTestUtil::ExpectClear(message); } +} + +TEST(Lite, AllLite18) { + std::string data; { // ClearMessageMap @@ -394,6 +452,10 @@ int main(int argc, char* argv[]) { google::protobuf::TestUtilLite::ExpectClear( (*message.mutable_map_int32_message())[0]); } +} + +TEST(Lite, AllLite19) { + std::string data; { // CopyFrom @@ -407,6 +469,10 @@ int main(int argc, char* argv[]) { message2.CopyFrom(message2); google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); } +} + +TEST(Lite, AllLite20) { + std::string data; { // CopyFromMessageMap @@ -421,6 +487,10 @@ int main(int argc, char* argv[]) { EXPECT_EQ(1, message1.map_int32_message().at(0).repeated_int32_size()); EXPECT_EQ(101, message1.map_int32_message().at(0).repeated_int32(0)); } +} + +TEST(Lite, AllLite21) { + std::string data; { // SwapWithEmpty @@ -434,6 +504,10 @@ int main(int argc, char* argv[]) { google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); google::protobuf::MapLiteTestUtil::ExpectClear(message1); } +} + +TEST(Lite, AllLite22) { + std::string data; { // SwapWithSelf @@ -445,6 +519,10 @@ int main(int argc, char* argv[]) { message.Swap(&message); google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message); } +} + +TEST(Lite, AllLite23) { + std::string data; { // SwapWithOther @@ -458,6 +536,10 @@ int main(int argc, char* argv[]) { google::protobuf::MapLiteTestUtil::ExpectMapFieldsModified(message1); google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); } +} + +TEST(Lite, AllLite24) { + std::string data; { // CopyConstructor @@ -467,6 +549,10 @@ int main(int argc, char* argv[]) { protobuf_unittest::TestMapLite message2(message1); google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); } +} + +TEST(Lite, AllLite25) { + std::string data; { // CopyAssignmentOperator @@ -481,6 +567,10 @@ int main(int argc, char* argv[]) { message2.operator=(message2); google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); } +} + +TEST(Lite, AllLite26) { + std::string data; { // NonEmptyMergeFrom @@ -499,6 +589,10 @@ int main(int argc, char* argv[]) { message1.MergeFrom(message2); google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message1); } +} + +TEST(Lite, AllLite27) { + std::string data; { // MergeFromMessageMap @@ -513,11 +607,15 @@ int main(int argc, char* argv[]) { EXPECT_EQ(1, message1.map_int32_message().at(0).repeated_int32_size()); EXPECT_EQ(101, message1.map_int32_message().at(0).repeated_int32(0)); } +} + +TEST(Lite, AllLite28) { + std::string data; { // Test the generated SerializeWithCachedSizesToArray() protobuf_unittest::TestMapLite message1, message2; - string data; + std::string data; google::protobuf::MapLiteTestUtil::SetMapFields(&message1); int size = message1.ByteSize(); data.resize(size); @@ -527,13 +625,17 @@ int main(int argc, char* argv[]) { EXPECT_TRUE(message2.ParseFromString(data)); google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); } +} + +TEST(Lite, AllLite29) { + std::string data; { // Test the generated SerializeWithCachedSizes() protobuf_unittest::TestMapLite message1, message2; google::protobuf::MapLiteTestUtil::SetMapFields(&message1); int size = message1.ByteSize(); - string data; + std::string data; data.resize(size); { // Allow the output stream to buffer only one byte at a time. @@ -547,7 +649,11 @@ int main(int argc, char* argv[]) { EXPECT_TRUE(message2.ParseFromString(data)); google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); } +} + +TEST(Lite, AllLite32) { + std::string data; { // Proto2UnknownEnum @@ -556,7 +662,7 @@ int main(int argc, char* argv[]) { protobuf_unittest::E_PROTO2_MAP_ENUM_FOO_LITE; (*from.mutable_unknown_map_field())[0] = protobuf_unittest::E_PROTO2_MAP_ENUM_EXTRA_LITE; - string data; + std::string data; from.SerializeToString(&data); protobuf_unittest::TestEnumMapLite to; @@ -578,98 +684,134 @@ int main(int argc, char* argv[]) { EXPECT_EQ(protobuf_unittest::E_PROTO2_MAP_ENUM_EXTRA_LITE, from.unknown_map_field().at(0)); } +} + +TEST(Lite, AllLite33) { + std::string data; { // StandardWireFormat protobuf_unittest::TestMapLite message; - string data = "\x0A\x04\x08\x01\x10\x01"; + std::string data = "\x0A\x04\x08\x01\x10\x01"; EXPECT_TRUE(message.ParseFromString(data)); EXPECT_EQ(1, message.map_int32_int32().size()); EXPECT_EQ(1, message.map_int32_int32().at(1)); } +} + +TEST(Lite, AllLite34) { + std::string data; { // UnorderedWireFormat protobuf_unittest::TestMapLite message; // put value before key in wire format - string data = "\x0A\x04\x10\x01\x08\x02"; + std::string data = "\x0A\x04\x10\x01\x08\x02"; EXPECT_TRUE(message.ParseFromString(data)); EXPECT_EQ(1, message.map_int32_int32().size()); EXPECT_EQ(1, message.map_int32_int32().at(2)); } +} + +TEST(Lite, AllLite35) { + std::string data; { // DuplicatedKeyWireFormat protobuf_unittest::TestMapLite message; // Two key fields in wire format - string data = "\x0A\x06\x08\x01\x08\x02\x10\x01"; + std::string data = "\x0A\x06\x08\x01\x08\x02\x10\x01"; EXPECT_TRUE(message.ParseFromString(data)); EXPECT_EQ(1, message.map_int32_int32().size()); EXPECT_EQ(1, message.map_int32_int32().at(2)); } +} + +TEST(Lite, AllLite36) { + std::string data; { // DuplicatedValueWireFormat protobuf_unittest::TestMapLite message; // Two value fields in wire format - string data = "\x0A\x06\x08\x01\x10\x01\x10\x02"; + std::string data = "\x0A\x06\x08\x01\x10\x01\x10\x02"; EXPECT_TRUE(message.ParseFromString(data)); EXPECT_EQ(1, message.map_int32_int32().size()); EXPECT_EQ(2, message.map_int32_int32().at(1)); } +} + +TEST(Lite, AllLite37) { + std::string data; { // MissedKeyWireFormat protobuf_unittest::TestMapLite message; // No key field in wire format - string data = "\x0A\x02\x10\x01"; + std::string data = "\x0A\x02\x10\x01"; EXPECT_TRUE(message.ParseFromString(data)); EXPECT_EQ(1, message.map_int32_int32().size()); EXPECT_EQ(1, message.map_int32_int32().at(0)); } +} + +TEST(Lite, AllLite38) { + std::string data; { // MissedValueWireFormat protobuf_unittest::TestMapLite message; // No value field in wire format - string data = "\x0A\x02\x08\x01"; + std::string data = "\x0A\x02\x08\x01"; EXPECT_TRUE(message.ParseFromString(data)); EXPECT_EQ(1, message.map_int32_int32().size()); EXPECT_EQ(0, message.map_int32_int32().at(1)); } +} + +TEST(Lite, AllLite39) { + std::string data; { // UnknownFieldWireFormat protobuf_unittest::TestMapLite message; // Unknown field in wire format - string data = "\x0A\x06\x08\x02\x10\x03\x18\x01"; + std::string data = "\x0A\x06\x08\x02\x10\x03\x18\x01"; EXPECT_TRUE(message.ParseFromString(data)); EXPECT_EQ(1, message.map_int32_int32().size()); EXPECT_EQ(3, message.map_int32_int32().at(2)); } +} + +TEST(Lite, AllLite40) { + std::string data; { // CorruptedWireFormat protobuf_unittest::TestMapLite message; // corrupted data in wire format - string data = "\x0A\x06\x08\x02\x11\x03"; + std::string data = "\x0A\x06\x08\x02\x11\x03"; EXPECT_FALSE(message.ParseFromString(data)); } +} + +TEST(Lite, AllLite41) { + std::string data; { // IsInitialized @@ -685,6 +827,10 @@ int main(int argc, char* argv[]) { (*map_message.mutable_map_field())[0].set_c(0); EXPECT_TRUE(map_message.IsInitialized()); } +} + +TEST(Lite, AllLite42) { + std::string data; { // Check that adding more values to enum does not corrupt message @@ -693,7 +839,7 @@ int main(int argc, char* argv[]) { v2_message.set_int_field(800); // Set enum field to the value not understood by the old client. v2_message.set_enum_field(protobuf_unittest::V2_SECOND); - string v2_bytes = v2_message.SerializeAsString(); + std::string v2_bytes = v2_message.SerializeAsString(); protobuf_unittest::V1MessageLite v1_message; v1_message.ParseFromString(v2_bytes); @@ -704,7 +850,7 @@ int main(int argc, char* argv[]) { EXPECT_EQ(v1_message.enum_field(), protobuf_unittest::V1_FIRST); // However, when re-serialized, it should preserve enum value. - string v1_bytes = v1_message.SerializeAsString(); + std::string v1_bytes = v1_message.SerializeAsString(); protobuf_unittest::V2MessageLite same_v2_message; same_v2_message.ParseFromString(v1_bytes); @@ -714,5 +860,4 @@ int main(int argc, char* argv[]) { } std::cout << "PASS" << std::endl; - return 0; } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map.h b/third_party/protobuf/3.2.0/src/google/protobuf/map.h index e6d78b20692b7d..18ee365276b859 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map.h @@ -37,7 +37,6 @@ #ifndef GOOGLE_PROTOBUF_MAP_H__ #define GOOGLE_PROTOBUF_MAP_H__ -#include #include #include // To support Visual Studio 2008 #include @@ -47,8 +46,7 @@ #include #include #include -#include -#include +#include #if __cpp_exceptions && LANG_CXX11 #include #endif @@ -64,16 +62,14 @@ class MapIterator; template struct is_proto_enum; namespace internal { -template + WireFormatLite::FieldType value_wire_type, int default_enum_value> class MapFieldLite; -template + WireFormatLite::FieldType value_wire_type, int default_enum_value> class MapField; template @@ -84,389 +80,6 @@ class DynamicMapField; class GeneratedMessageReflection; } // namespace internal -#define TYPE_CHECK(EXPECTEDTYPE, METHOD) \ - if (type() != EXPECTEDTYPE) { \ - GOOGLE_LOG(FATAL) \ - << "Protocol Buffer map usage error:\n" \ - << METHOD << " type does not match\n" \ - << " Expected : " \ - << FieldDescriptor::CppTypeName(EXPECTEDTYPE) << "\n" \ - << " Actual : " \ - << FieldDescriptor::CppTypeName(type()); \ - } - -// MapKey is an union type for representing any possible -// map key. -class LIBPROTOBUF_EXPORT MapKey { - public: - MapKey() : type_(0) { - } - MapKey(const MapKey& other) : type_(0) { - CopyFrom(other); - } - - ~MapKey() { - if (type_ == FieldDescriptor::CPPTYPE_STRING) { - delete val_.string_value_; - } - } - - FieldDescriptor::CppType type() const { - if (type_ == 0) { - GOOGLE_LOG(FATAL) - << "Protocol Buffer map usage error:\n" - << "MapKey::type MapKey is not initialized. " - << "Call set methods to initialize MapKey."; - } - return (FieldDescriptor::CppType)type_; - } - - void SetInt64Value(int64 value) { - SetType(FieldDescriptor::CPPTYPE_INT64); - val_.int64_value_ = value; - } - void SetUInt64Value(uint64 value) { - SetType(FieldDescriptor::CPPTYPE_UINT64); - val_.uint64_value_ = value; - } - void SetInt32Value(int32 value) { - SetType(FieldDescriptor::CPPTYPE_INT32); - val_.int32_value_ = value; - } - void SetUInt32Value(uint32 value) { - SetType(FieldDescriptor::CPPTYPE_UINT32); - val_.uint32_value_ = value; - } - void SetBoolValue(bool value) { - SetType(FieldDescriptor::CPPTYPE_BOOL); - val_.bool_value_ = value; - } - void SetStringValue(const string& val) { - SetType(FieldDescriptor::CPPTYPE_STRING); - *val_.string_value_ = val; - } - - int64 GetInt64Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_INT64, - "MapKey::GetInt64Value"); - return val_.int64_value_; - } - uint64 GetUInt64Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT64, - "MapKey::GetUInt64Value"); - return val_.uint64_value_; - } - int32 GetInt32Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_INT32, - "MapKey::GetInt32Value"); - return val_.int32_value_; - } - uint32 GetUInt32Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT32, - "MapKey::GetUInt32Value"); - return val_.uint32_value_; - } - bool GetBoolValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_BOOL, - "MapKey::GetBoolValue"); - return val_.bool_value_; - } - const string& GetStringValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_STRING, - "MapKey::GetStringValue"); - return *val_.string_value_; - } - - bool operator<(const MapKey& other) const { - if (type_ != other.type_) { - // We could define a total order that handles this case, but - // there currently no need. So, for now, fail. - GOOGLE_LOG(FATAL) << "Unsupported: type mismatch"; - } - switch (type()) { - case FieldDescriptor::CPPTYPE_DOUBLE: - case FieldDescriptor::CPPTYPE_FLOAT: - case FieldDescriptor::CPPTYPE_ENUM: - case FieldDescriptor::CPPTYPE_MESSAGE: - GOOGLE_LOG(FATAL) << "Unsupported"; - return false; - case FieldDescriptor::CPPTYPE_STRING: - return *val_.string_value_ < *other.val_.string_value_; - case FieldDescriptor::CPPTYPE_INT64: - return val_.int64_value_ < other.val_.int64_value_; - case FieldDescriptor::CPPTYPE_INT32: - return val_.int32_value_ < other.val_.int32_value_; - case FieldDescriptor::CPPTYPE_UINT64: - return val_.uint64_value_ < other.val_.uint64_value_; - case FieldDescriptor::CPPTYPE_UINT32: - return val_.uint32_value_ < other.val_.uint32_value_; - case FieldDescriptor::CPPTYPE_BOOL: - return val_.bool_value_ < other.val_.bool_value_; - } - return false; - } - - bool operator==(const MapKey& other) const { - if (type_ != other.type_) { - // To be consistent with operator<, we don't allow this either. - GOOGLE_LOG(FATAL) << "Unsupported: type mismatch"; - } - switch (type()) { - case FieldDescriptor::CPPTYPE_DOUBLE: - case FieldDescriptor::CPPTYPE_FLOAT: - case FieldDescriptor::CPPTYPE_ENUM: - case FieldDescriptor::CPPTYPE_MESSAGE: - GOOGLE_LOG(FATAL) << "Unsupported"; - break; - case FieldDescriptor::CPPTYPE_STRING: - return *val_.string_value_ == *other.val_.string_value_; - case FieldDescriptor::CPPTYPE_INT64: - return val_.int64_value_ == other.val_.int64_value_; - case FieldDescriptor::CPPTYPE_INT32: - return val_.int32_value_ == other.val_.int32_value_; - case FieldDescriptor::CPPTYPE_UINT64: - return val_.uint64_value_ == other.val_.uint64_value_; - case FieldDescriptor::CPPTYPE_UINT32: - return val_.uint32_value_ == other.val_.uint32_value_; - case FieldDescriptor::CPPTYPE_BOOL: - return val_.bool_value_ == other.val_.bool_value_; - } - GOOGLE_LOG(FATAL) << "Can't get here."; - return false; - } - - void CopyFrom(const MapKey& other) { - SetType(other.type()); - switch (type_) { - case FieldDescriptor::CPPTYPE_DOUBLE: - case FieldDescriptor::CPPTYPE_FLOAT: - case FieldDescriptor::CPPTYPE_ENUM: - case FieldDescriptor::CPPTYPE_MESSAGE: - GOOGLE_LOG(FATAL) << "Unsupported"; - break; - case FieldDescriptor::CPPTYPE_STRING: - *val_.string_value_ = *other.val_.string_value_; - break; - case FieldDescriptor::CPPTYPE_INT64: - val_.int64_value_ = other.val_.int64_value_; - break; - case FieldDescriptor::CPPTYPE_INT32: - val_.int32_value_ = other.val_.int32_value_; - break; - case FieldDescriptor::CPPTYPE_UINT64: - val_.uint64_value_ = other.val_.uint64_value_; - break; - case FieldDescriptor::CPPTYPE_UINT32: - val_.uint32_value_ = other.val_.uint32_value_; - break; - case FieldDescriptor::CPPTYPE_BOOL: - val_.bool_value_ = other.val_.bool_value_; - break; - } - } - - private: - template - friend class internal::TypeDefinedMapFieldBase; - friend class MapIterator; - friend class internal::DynamicMapField; - - union KeyValue { - KeyValue() {} - string* string_value_; - int64 int64_value_; - int32 int32_value_; - uint64 uint64_value_; - uint32 uint32_value_; - bool bool_value_; - } val_; - - void SetType(FieldDescriptor::CppType type) { - if (type_ == type) return; - if (type_ == FieldDescriptor::CPPTYPE_STRING) { - delete val_.string_value_; - } - type_ = type; - if (type_ == FieldDescriptor::CPPTYPE_STRING) { - val_.string_value_ = new string; - } - } - - // type_ is 0 or a valid FieldDescriptor::CppType. - int type_; -}; - -// MapValueRef points to a map value. -class LIBPROTOBUF_EXPORT MapValueRef { - public: - MapValueRef() : data_(NULL), type_(0) {} - - void SetInt64Value(int64 value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_INT64, - "MapValueRef::SetInt64Value"); - *reinterpret_cast(data_) = value; - } - void SetUInt64Value(uint64 value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT64, - "MapValueRef::SetUInt64Value"); - *reinterpret_cast(data_) = value; - } - void SetInt32Value(int32 value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_INT32, - "MapValueRef::SetInt32Value"); - *reinterpret_cast(data_) = value; - } - void SetUInt32Value(uint32 value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT32, - "MapValueRef::SetUInt32Value"); - *reinterpret_cast(data_) = value; - } - void SetBoolValue(bool value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_BOOL, - "MapValueRef::SetBoolValue"); - *reinterpret_cast(data_) = value; - } - // TODO(jieluo) - Checks that enum is member. - void SetEnumValue(int value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_ENUM, - "MapValueRef::SetEnumValue"); - *reinterpret_cast(data_) = value; - } - void SetStringValue(const string& value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_STRING, - "MapValueRef::SetStringValue"); - *reinterpret_cast(data_) = value; - } - void SetFloatValue(float value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_FLOAT, - "MapValueRef::SetFloatValue"); - *reinterpret_cast(data_) = value; - } - void SetDoubleValue(double value) { - TYPE_CHECK(FieldDescriptor::CPPTYPE_DOUBLE, - "MapValueRef::SetDoubleValue"); - *reinterpret_cast(data_) = value; - } - - int64 GetInt64Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_INT64, - "MapValueRef::GetInt64Value"); - return *reinterpret_cast(data_); - } - uint64 GetUInt64Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT64, - "MapValueRef::GetUInt64Value"); - return *reinterpret_cast(data_); - } - int32 GetInt32Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_INT32, - "MapValueRef::GetInt32Value"); - return *reinterpret_cast(data_); - } - uint32 GetUInt32Value() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT32, - "MapValueRef::GetUInt32Value"); - return *reinterpret_cast(data_); - } - bool GetBoolValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_BOOL, - "MapValueRef::GetBoolValue"); - return *reinterpret_cast(data_); - } - int GetEnumValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_ENUM, - "MapValueRef::GetEnumValue"); - return *reinterpret_cast(data_); - } - const string& GetStringValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_STRING, - "MapValueRef::GetStringValue"); - return *reinterpret_cast(data_); - } - float GetFloatValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_FLOAT, - "MapValueRef::GetFloatValue"); - return *reinterpret_cast(data_); - } - double GetDoubleValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_DOUBLE, - "MapValueRef::GetDoubleValue"); - return *reinterpret_cast(data_); - } - - const Message& GetMessageValue() const { - TYPE_CHECK(FieldDescriptor::CPPTYPE_MESSAGE, - "MapValueRef::GetMessageValue"); - return *reinterpret_cast(data_); - } - - Message* MutableMessageValue() { - TYPE_CHECK(FieldDescriptor::CPPTYPE_MESSAGE, - "MapValueRef::MutableMessageValue"); - return reinterpret_cast(data_); - } - - private: - template - friend class internal::MapField; - template - friend class internal::TypeDefinedMapFieldBase; - friend class MapIterator; - friend class internal::GeneratedMessageReflection; - friend class internal::DynamicMapField; - - void SetType(FieldDescriptor::CppType type) { - type_ = type; - } - - FieldDescriptor::CppType type() const { - if (type_ == 0 || data_ == NULL) { - GOOGLE_LOG(FATAL) - << "Protocol Buffer map usage error:\n" - << "MapValueRef::type MapValueRef is not initialized."; - } - return (FieldDescriptor::CppType)type_; - } - void SetValue(const void* val) { - data_ = const_cast(val); - } - void CopyFrom(const MapValueRef& other) { - type_ = other.type_; - data_ = other.data_; - } - // Only used in DynamicMapField - void DeleteData() { - switch (type_) { -#define HANDLE_TYPE(CPPTYPE, TYPE) \ - case google::protobuf::FieldDescriptor::CPPTYPE_##CPPTYPE: { \ - delete reinterpret_cast(data_); \ - break; \ - } - HANDLE_TYPE(INT32, int32); - HANDLE_TYPE(INT64, int64); - HANDLE_TYPE(UINT32, uint32); - HANDLE_TYPE(UINT64, uint64); - HANDLE_TYPE(DOUBLE, double); - HANDLE_TYPE(FLOAT, float); - HANDLE_TYPE(BOOL, bool); - HANDLE_TYPE(STRING, string); - HANDLE_TYPE(ENUM, int32); - HANDLE_TYPE(MESSAGE, Message); -#undef HANDLE_TYPE - } - } - // data_ point to a map value. MapValueRef does not - // own this value. - void* data_; - // type_ is 0 or a valid FieldDescriptor::CppType. - int type_; -}; - -#undef TYPE_CHECK - // This is the class for google::protobuf::Map's internal value_type. Instead of using // std::pair as value_type, we use this class which provides us more control of // its process of construction and destruction. @@ -523,30 +136,18 @@ class Map { typedef size_t size_type; typedef hash hasher; - explicit Map(bool old_style = false) - : arena_(NULL), - default_enum_value_(0), - old_style_(old_style) { - Init(); - } - explicit Map(Arena* arena, bool old_style = false) - : arena_(arena), - default_enum_value_(0), - old_style_(old_style) { - Init(); - } + Map() : arena_(NULL), default_enum_value_(0) { Init(); } + explicit Map(Arena* arena) : arena_(arena), default_enum_value_(0) { Init(); } + Map(const Map& other) - : arena_(NULL), - default_enum_value_(other.default_enum_value_), - old_style_(other.old_style_) { + : arena_(NULL), default_enum_value_(other.default_enum_value_) { Init(); insert(other.begin(), other.end()); } + template - Map(const InputIt& first, const InputIt& last, bool old_style = false) - : arena_(NULL), - default_enum_value_(0), - old_style_(old_style) { + Map(const InputIt& first, const InputIt& last) + : arena_(NULL), default_enum_value_(0) { Init(); insert(first, last); } @@ -554,22 +155,13 @@ class Map { ~Map() { clear(); if (arena_ == NULL) { - if (old_style_) - delete deprecated_elements_; - else - delete elements_; + delete elements_; } } private: void Init() { - if (old_style_) - deprecated_elements_ = Arena::Create( - arena_, 0, hasher(), std::equal_to(), - MapAllocator*> >(arena_)); - else - elements_ = - Arena::Create(arena_, 0, hasher(), Allocator(arena_)); + elements_ = Arena::Create(arena_, 0, hasher(), Allocator(arena_)); } // re-implement std::allocator to use arena allocator for memory allocation. @@ -678,7 +270,7 @@ class Map { const Key& key() const { return k_; } Key& key() { return k_; } - value_type* const value() const { return v_; } + value_type* value() const { return v_; } value_type*& value() { return v_; } private: @@ -764,14 +356,13 @@ class Map { }; typedef typename Allocator::template rebind::other KeyPtrAllocator; typedef std::set Tree; + typedef typename Tree::iterator TreeIterator; // iterator and const_iterator are instantiations of iterator_base. template - class iterator_base { - public: + struct iterator_base { typedef KeyValueType& reference; typedef KeyValueType* pointer; - typedef typename Tree::iterator TreeIterator; // Invariants: // node_ is always correct. This is handy because the most common @@ -780,7 +371,7 @@ class Map { // are updated to be correct also, but those fields can become stale // if the underlying map is modified. When those fields are needed they // are rechecked, and updated if necessary. - iterator_base() : node_(NULL) {} + iterator_base() : node_(NULL), m_(NULL), bucket_index_(0) {} explicit iterator_base(const InnerMap* m) : m_(m) { SearchFrom(m->index_of_first_non_null_); @@ -791,22 +382,15 @@ class Map { // can convert to const_iterator" is OK but the reverse direction is not. template explicit iterator_base(const iterator_base& it) - : node_(it.node_), - m_(it.m_), - bucket_index_(it.bucket_index_), - tree_it_(it.tree_it_) {} + : node_(it.node_), m_(it.m_), bucket_index_(it.bucket_index_) {} iterator_base(Node* n, const InnerMap* m, size_type index) - : node_(n), - m_(m), - bucket_index_(index) {} + : node_(n), m_(m), bucket_index_(index) {} iterator_base(TreeIterator tree_it, const InnerMap* m, size_type index) - : node_(NodePtrFromKeyPtr(*tree_it)), - m_(m), - bucket_index_(index), - tree_it_(tree_it) { - // Invariant: iterators that use tree_it_ have an even bucket_index_. + : node_(NodePtrFromKeyPtr(*tree_it)), m_(m), bucket_index_(index) { + // Invariant: iterators that use buckets with trees have an even + // bucket_index_. GOOGLE_DCHECK_EQ(bucket_index_ % 2, 0); } @@ -824,8 +408,7 @@ class Map { } else if (m_->TableEntryIsTree(bucket_index_)) { Tree* tree = static_cast(m_->table_[bucket_index_]); GOOGLE_DCHECK(!tree->empty()); - tree_it_ = tree->begin(); - node_ = NodePtrFromKeyPtr(*tree_it_); + node_ = NodePtrFromKeyPtr(*tree->begin()); break; } } @@ -843,16 +426,17 @@ class Map { iterator_base& operator++() { if (node_->next == NULL) { - const bool is_list = revalidate_if_necessary(); + TreeIterator tree_it; + const bool is_list = revalidate_if_necessary(&tree_it); if (is_list) { SearchFrom(bucket_index_ + 1); } else { GOOGLE_DCHECK_EQ(bucket_index_ & 1, 0); Tree* tree = static_cast(m_->table_[bucket_index_]); - if (++tree_it_ == tree->end()) { + if (++tree_it == tree->end()) { SearchFrom(bucket_index_ + 2); } else { - node_ = NodePtrFromKeyPtr(*tree_it_); + node_ = NodePtrFromKeyPtr(*tree_it); } } } else { @@ -869,8 +453,9 @@ class Map { // Assumes node_ and m_ are correct and non-NULL, but other fields may be // stale. Fix them as needed. Then return true iff node_ points to a - // Node in a list. - bool revalidate_if_necessary() { + // Node in a list. If false is returned then *it is modified to be + // a valid iterator for node_. + bool revalidate_if_necessary(TreeIterator* it) { GOOGLE_DCHECK(node_ != NULL && m_ != NULL); // Force bucket_index_ to be in range. bucket_index_ &= (m_->num_buckets_ - 1); @@ -891,16 +476,14 @@ class Map { // not. Revalidate just to be sure. This case is rare enough that we // don't worry about potential optimizations, such as having a custom // find-like method that compares Node* instead of const Key&. - iterator_base i(m_->find(*KeyPtrFromNodePtr(node_))); + iterator_base i(m_->find(*KeyPtrFromNodePtr(node_), it)); bucket_index_ = i.bucket_index_; - tree_it_ = i.tree_it_; return m_->TableEntryIsList(bucket_index_); } Node* node_; const InnerMap* m_; size_type bucket_index_; - TreeIterator tree_it_; }; public: @@ -952,7 +535,7 @@ class Map { bool empty() const { return size() == 0; } iterator find(const Key& k) { return iterator(FindHelper(k).first); } - const_iterator find(const Key& k) const { return FindHelper(k).first; } + const_iterator find(const Key& k) const { return find(k, NULL); } // In traditional C++ style, this performs "insert if not present." std::pair insert(const KeyValuePair& kv) { @@ -999,7 +582,8 @@ class Map { void erase(iterator it) { GOOGLE_DCHECK_EQ(it.m_, this); - const bool is_list = it.revalidate_if_necessary(); + typename Tree::iterator tree_it; + const bool is_list = it.revalidate_if_necessary(&tree_it); size_type b = it.bucket_index_; Node* const item = it.node_; if (is_list) { @@ -1010,7 +594,7 @@ class Map { } else { GOOGLE_DCHECK(TableEntryIsTree(b)); Tree* tree = static_cast(table_[b]); - tree->erase(it.tree_it_); + tree->erase(*tree_it); if (tree->empty()) { // Force b to be the minimum of b and b ^ 1. This is important // only because we want index_of_first_non_null_ to be correct. @@ -1030,7 +614,14 @@ class Map { } private: + const_iterator find(const Key& k, TreeIterator* it) const { + return FindHelper(k, it).first; + } std::pair FindHelper(const Key& k) const { + return FindHelper(k, NULL); + } + std::pair FindHelper(const Key& k, + TreeIterator* it) const { size_type b = BucketNumber(k); if (TableEntryIsNonEmptyList(b)) { Node* node = static_cast(table_[b]); @@ -1048,6 +639,7 @@ class Map { Key* key = const_cast(&k); typename Tree::iterator tree_it = tree->find(key); if (tree_it != tree->end()) { + if (it != NULL) *it = tree_it; return std::make_pair(const_iterator(tree_it, this, b), b); } } @@ -1358,72 +950,30 @@ class Map { GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(InnerMap); }; // end of class InnerMap - typedef hash_map, std::equal_to, - MapAllocator*> > > - DeprecatedInnerMap; - public: // Iterators - class iterator_base { - public: - // We support "old style" and "new style" iterators for now. This is - // temporary. Also, for "iterator()" we have an unknown category. - // TODO(gpike): get rid of this. - enum IteratorStyle { kUnknown, kOld, kNew }; - explicit iterator_base(IteratorStyle style) : iterator_style_(style) {} - - bool OldStyle() const { - GOOGLE_DCHECK_NE(iterator_style_, kUnknown); - return iterator_style_ == kOld; - } - bool UnknownStyle() const { - return iterator_style_ == kUnknown; - } - bool SameStyle(const iterator_base& other) const { - return iterator_style_ == other.iterator_style_; - } - - private: - IteratorStyle iterator_style_; - }; - class const_iterator - : private iterator_base, - public std::iterator { typedef typename InnerMap::const_iterator InnerIt; - typedef typename DeprecatedInnerMap::const_iterator DeprecatedInnerIt; public: - const_iterator() : iterator_base(iterator_base::kUnknown) {} - explicit const_iterator(const DeprecatedInnerIt& dit) - : iterator_base(iterator_base::kOld), dit_(dit) {} - explicit const_iterator(const InnerIt& it) - : iterator_base(iterator_base::kNew), it_(it) {} - - const_iterator(const const_iterator& other) - : iterator_base(other), it_(other.it_), dit_(other.dit_) {} + const_iterator() {} + explicit const_iterator(const InnerIt& it) : it_(it) {} const_reference operator*() const { - return this->OldStyle() ? *dit_->second : *it_->value(); + return *it_->value(); } const_pointer operator->() const { return &(operator*()); } const_iterator& operator++() { - if (this->OldStyle()) - ++dit_; - else - ++it_; + ++it_; return *this; } - const_iterator operator++(int) { - return this->OldStyle() ? const_iterator(dit_++) : const_iterator(it_++); - } + const_iterator operator++(int) { return const_iterator(it_++); } friend bool operator==(const const_iterator& a, const const_iterator& b) { - if (!a.SameStyle(b)) return false; - if (a.UnknownStyle()) return true; - return a.OldStyle() ? (a.dit_ == b.dit_) : (a.it_ == b.it_); + return a.it_ == b.it_; } friend bool operator!=(const const_iterator& a, const const_iterator& b) { return !(a == b); @@ -1431,48 +981,31 @@ class Map { private: InnerIt it_; - DeprecatedInnerIt dit_; }; - class iterator : private iterator_base, - public std::iterator { + class iterator : public std::iterator { typedef typename InnerMap::iterator InnerIt; - typedef typename DeprecatedInnerMap::iterator DeprecatedInnerIt; public: - iterator() : iterator_base(iterator_base::kUnknown) {} - explicit iterator(const DeprecatedInnerIt& dit) - : iterator_base(iterator_base::kOld), dit_(dit) {} - explicit iterator(const InnerIt& it) - : iterator_base(iterator_base::kNew), it_(it) {} + iterator() {} + explicit iterator(const InnerIt& it) : it_(it) {} - reference operator*() const { - return this->OldStyle() ? *dit_->second : *it_->value(); - } + reference operator*() const { return *it_->value(); } pointer operator->() const { return &(operator*()); } iterator& operator++() { - if (this->OldStyle()) - ++dit_; - else - ++it_; + ++it_; return *this; } - iterator operator++(int) { - return this->OldStyle() ? iterator(dit_++) : iterator(it_++); - } + iterator operator++(int) { return iterator(it_++); } // Allow implicit conversion to const_iterator. operator const_iterator() const { - return this->OldStyle() ? - const_iterator(typename DeprecatedInnerMap::const_iterator(dit_)) : - const_iterator(typename InnerMap::const_iterator(it_)); + return const_iterator(typename InnerMap::const_iterator(it_)); } friend bool operator==(const iterator& a, const iterator& b) { - if (!a.SameStyle(b)) return false; - if (a.UnknownStyle()) return true; - return a.OldStyle() ? a.dit_ == b.dit_ : a.it_ == b.it_; + return a.it_ == b.it_; } friend bool operator!=(const iterator& a, const iterator& b) { return !(a == b); @@ -1482,38 +1015,26 @@ class Map { friend class Map; InnerIt it_; - DeprecatedInnerIt dit_; }; - iterator begin() { - return old_style_ ? iterator(deprecated_elements_->begin()) - : iterator(elements_->begin()); - } - iterator end() { - return old_style_ ? iterator(deprecated_elements_->end()) - : iterator(elements_->end()); - } + iterator begin() { return iterator(elements_->begin()); } + iterator end() { return iterator(elements_->end()); } const_iterator begin() const { - return old_style_ ? const_iterator(deprecated_elements_->begin()) - : const_iterator(iterator(elements_->begin())); + return const_iterator(iterator(elements_->begin())); } const_iterator end() const { - return old_style_ ? const_iterator(deprecated_elements_->end()) - : const_iterator(iterator(elements_->end())); + return const_iterator(iterator(elements_->end())); } const_iterator cbegin() const { return begin(); } const_iterator cend() const { return end(); } // Capacity - size_type size() const { - return old_style_ ? deprecated_elements_->size() : elements_->size(); - } + size_type size() const { return elements_->size(); } bool empty() const { return size() == 0; } // Element access T& operator[](const key_type& key) { - value_type** value = - old_style_ ? &(*deprecated_elements_)[key] : &(*elements_)[key]; + value_type** value = &(*elements_)[key]; if (*value == NULL) { *value = CreateValueTypeInternal(key); internal::MapValueInitializer::value, @@ -1540,13 +1061,9 @@ class Map { return it == end() ? 0 : 1; } const_iterator find(const key_type& key) const { - return old_style_ ? const_iterator(deprecated_elements_->find(key)) - : const_iterator(iterator(elements_->find(key))); - } - iterator find(const key_type& key) { - return old_style_ ? iterator(deprecated_elements_->find(key)) - : iterator(elements_->find(key)); + return const_iterator(iterator(elements_->find(key))); } + iterator find(const key_type& key) { return iterator(elements_->find(key)); } std::pair equal_range( const key_type& key) const { const_iterator it = find(key); @@ -1569,23 +1086,12 @@ class Map { // insert std::pair insert(const value_type& value) { - if (old_style_) { - iterator it = find(value.first); - if (it != end()) { - return std::pair(it, false); - } else { - return std::pair( - iterator(deprecated_elements_->insert(std::pair( - value.first, CreateValueTypeInternal(value))).first), true); - } - } else { - std::pair p = - elements_->insert(value.first); - if (p.second) { - p.first->value() = CreateValueTypeInternal(value); - } - return std::pair(iterator(p.first), p.second); + std::pair p = + elements_->insert(value.first); + if (p.second) { + p.first->value() = CreateValueTypeInternal(value); } + return std::pair(iterator(p.first), p.second); } template void insert(InputIt first, InputIt last) { @@ -1610,10 +1116,7 @@ class Map { iterator erase(iterator pos) { if (arena_ == NULL) delete pos.operator->(); iterator i = pos++; - if (old_style_) - deprecated_elements_->erase(i.dit_); - else - elements_->erase(i.it_); + elements_->erase(i.it_); return pos; } void erase(iterator first, iterator last) { @@ -1633,13 +1136,9 @@ class Map { } void swap(Map& other) { - if (arena_ == other.arena_ && old_style_ == other.old_style_) { + if (arena_ == other.arena_) { std::swap(default_enum_value_, other.default_enum_value_); - if (old_style_) { - std::swap(deprecated_elements_, other.deprecated_elements_); - } else { - std::swap(elements_, other.elements_); - } + std::swap(elements_, other.elements_); } else { // TODO(zuguang): optimize this. The temporary copy can be allocated // in the same arena as the other message, and the "other = copy" can @@ -1653,8 +1152,7 @@ class Map { // Access to hasher. Currently this returns a copy, but it may // be modified to return a const reference in the future. hasher hash_function() const { - return old_style_ ? deprecated_elements_->hash_function() - : elements_->hash_function(); + return elements_->hash_function(); } private: @@ -1692,19 +1190,12 @@ class Map { Arena* arena_; int default_enum_value_; - // The following is a tagged union because we support two map styles - // for now. - // TODO(gpike): get rid of the old style. - const bool old_style_; - union { - InnerMap* elements_; - DeprecatedInnerMap* deprecated_elements_; - }; + InnerMap* elements_; friend class ::google::protobuf::Arena; typedef void InternalArenaConstructable_; typedef void DestructorSkippable_; - template @@ -1712,49 +1203,6 @@ class Map { }; } // namespace protobuf -} // namespace google - -GOOGLE_PROTOBUF_HASH_NAMESPACE_DECLARATION_START -template<> -struct hash { - size_t - operator()(const google::protobuf::MapKey& map_key) const { - switch (map_key.type()) { - case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: - case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: - case google::protobuf::FieldDescriptor::CPPTYPE_ENUM: - case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: - GOOGLE_LOG(FATAL) << "Unsupported"; - break; - case google::protobuf::FieldDescriptor::CPPTYPE_STRING: - return hash()(map_key.GetStringValue()); -#if defined(GOOGLE_PROTOBUF_HAVE_64BIT_HASH) - case google::protobuf::FieldDescriptor::CPPTYPE_INT64: - return hash< ::google::protobuf::int64>()(map_key.GetInt64Value()); - case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: - return hash< ::google::protobuf::uint64>()(map_key.GetUInt64Value()); -#else - case google::protobuf::FieldDescriptor::CPPTYPE_INT64: - case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: - GOOGLE_LOG(FATAL) << "Unsupported on this platform."; - break; -#endif - case google::protobuf::FieldDescriptor::CPPTYPE_INT32: - return hash< ::google::protobuf::int32>()(map_key.GetInt32Value()); - case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: - return hash< ::google::protobuf::uint32>()(map_key.GetUInt32Value()); - case google::protobuf::FieldDescriptor::CPPTYPE_BOOL: - return hash()(map_key.GetBoolValue()); - } - GOOGLE_LOG(FATAL) << "Can't get here."; - return 0; - } - bool - operator()(const google::protobuf::MapKey& map_key1, - const google::protobuf::MapKey& map_key2) const { - return map_key1 < map_key2; - } -}; -GOOGLE_PROTOBUF_HASH_NAMESPACE_DECLARATION_END +} // namespace google #endif // GOOGLE_PROTOBUF_MAP_H__ diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map_entry.h b/third_party/protobuf/3.2.0/src/google/protobuf/map_entry.h index d7db9b0f7233ef..7c6755687fca9f 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map_entry.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map_entry.h @@ -43,10 +43,9 @@ namespace google { namespace protobuf { class Arena; namespace internal { -template + WireFormatLite::FieldType kValueFieldType, int default_enum_value> class MapField; } } @@ -54,30 +53,6 @@ class MapField; namespace protobuf { namespace internal { -// Register all MapEntry default instances so we can delete them in -// ShutdownProtobufLibrary(). -void LIBPROTOBUF_EXPORT RegisterMapEntryDefaultInstance( - MessageLite* default_instance); - -// This is the common base class for MapEntry. It is used by MapFieldBase in -// reflection api, in which the static type of key and value is unknown. -class LIBPROTOBUF_EXPORT MapEntryBase : public Message { - public: - ::google::protobuf::Metadata GetMetadata() const { - ::google::protobuf::Metadata metadata; - metadata.descriptor = descriptor_; - metadata.reflection = reflection_; - return metadata; - } - - protected: - MapEntryBase() : descriptor_(NULL), reflection_(NULL) { } - virtual ~MapEntryBase() {} - - const Descriptor* descriptor_; - const Reflection* reflection_; -}; - // MapEntry is the returned google::protobuf::Message when calling AddMessage of // google::protobuf::Reflection. In order to let it work with generated message // reflection, its in-memory type is the same as generated message with the same @@ -105,212 +80,72 @@ class LIBPROTOBUF_EXPORT MapEntryBase : public Message { // while we need to explicitly specify the cpp type if proto type is // TYPE_MESSAGE to infer the in-memory type. Moreover, default_enum_value is // used to initialize enum field in proto2. -template -class MapEntry : public MapEntryBase { - // Provide utilities to parse/serialize key/value. Provide utilities to - // manipulate internal stored type. - typedef MapTypeHandler KeyTypeHandler; - typedef MapTypeHandler ValueTypeHandler; - - // Enum type cannot be used for MapTypeHandler::Read. Define a type - // which will replace Enum with int. - typedef typename KeyTypeHandler::MapEntryAccessorType KeyMapEntryAccessorType; - typedef typename ValueTypeHandler::MapEntryAccessorType - ValueMapEntryAccessorType; - - // Abbreviation for MapEntry - typedef typename google::protobuf::internal::MapEntry< - Key, Value, kKeyFieldType, kValueFieldType, default_enum_value> EntryType; - - // Abbreviation for MapEntryLite - typedef typename google::protobuf::internal::MapEntryLite< - Key, Value, kKeyFieldType, kValueFieldType, default_enum_value> - EntryLiteType; - + WireFormatLite::FieldType kValueFieldType, int default_enum_value> +class MapEntry + : public MapEntryImpl { public: - ~MapEntry() { - if (this == default_instance_) { - delete reflection_; - } - } - - // accessors ====================================================== - - virtual inline const KeyMapEntryAccessorType& key() const { - return entry_lite_.key(); - } - inline KeyMapEntryAccessorType* mutable_key() { - return entry_lite_.mutable_key(); - } - virtual inline const ValueMapEntryAccessorType& value() const { - return entry_lite_.value(); - } - inline ValueMapEntryAccessorType* mutable_value() { - return entry_lite_.mutable_value(); - } - - // implements Message ============================================= - - bool MergePartialFromCodedStream(::google::protobuf::io::CodedInputStream* input) { - return entry_lite_.MergePartialFromCodedStream(input); - } - - size_t ByteSizeLong() const { - return entry_lite_.ByteSizeLong(); - } - - void SerializeWithCachedSizes(::google::protobuf::io::CodedOutputStream* output) const { - entry_lite_.SerializeWithCachedSizes(output); - } - - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(bool deterministic, - ::google::protobuf::uint8* output) const { - return entry_lite_.InternalSerializeWithCachedSizesToArray(deterministic, - output); - } - - int GetCachedSize() const { - return entry_lite_.GetCachedSize(); - } - - bool IsInitialized() const { - return entry_lite_.IsInitialized(); - } - - Message* New() const { - MapEntry* entry = new MapEntry; - entry->descriptor_ = descriptor_; - entry->reflection_ = reflection_; - entry->set_default_instance(default_instance_); - return entry; - } - - Message* New(Arena* arena) const { - MapEntry* entry = Arena::CreateMessage(arena); - entry->descriptor_ = descriptor_; - entry->reflection_ = reflection_; - entry->set_default_instance(default_instance_); - return entry; - } - - int SpaceUsed() const { - int size = sizeof(MapEntry); - size += entry_lite_.SpaceUsed(); - return size; - } - - void CopyFrom(const ::google::protobuf::Message& from) { - Clear(); - MergeFrom(from); - } - - void MergeFrom(const ::google::protobuf::Message& from) { - GOOGLE_CHECK_NE(&from, this); - const MapEntry* source = dynamic_cast_if_available(&from); - if (source == NULL) { - ReflectionOps::Merge(from, this); - } else { - MergeFrom(*source); - } - } - - void CopyFrom(const MapEntry& from) { - Clear(); - MergeFrom(from); - } - - void MergeFrom(const MapEntry& from) { - entry_lite_.MergeFrom(from.entry_lite_); - } - - void Clear() { - entry_lite_.Clear(); - } - - void InitAsDefaultInstance() { - entry_lite_.InitAsDefaultInstance(); - } - - Arena* GetArena() const { - return entry_lite_.GetArena(); - } - // Create default MapEntry instance for given descriptor. Descriptor has to be // given when creating default MapEntry instance because different map field // may have the same type and MapEntry class. The given descriptor is needed // to distinguish instances of the same MapEntry class. - static MapEntry* CreateDefaultInstance(const Descriptor* descriptor) { - MapEntry* entry = new MapEntry; + static const Reflection* CreateReflection(const Descriptor* descriptor, + const Derived* entry) { ReflectionSchema schema = { entry, offsets_, has_bits_, - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapEntry, entry_lite_._has_bits_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapEntry, _internal_metadata_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapEntry, _has_bits_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapEntry, + _internal_metadata_), -1, -1, sizeof(MapEntry)}; const Reflection* reflection = new GeneratedMessageReflection( descriptor, schema, DescriptorPool::generated_pool(), MessageFactory::generated_factory()); - entry->descriptor_ = descriptor; - entry->reflection_ = reflection; - entry->set_default_instance(entry); - entry->InitAsDefaultInstance(); - RegisterMapEntryDefaultInstance(entry); - return entry; + return reflection; } - private: - MapEntry() - : _internal_metadata_(NULL), default_instance_(NULL), entry_lite_() {} - + MapEntry() : _internal_metadata_(NULL) {} explicit MapEntry(Arena* arena) - : _internal_metadata_(arena), - default_instance_(NULL), - entry_lite_(arena) {} - - inline Arena* GetArenaNoVirtual() const { - return entry_lite_.GetArenaNoVirtual(); - } - - void set_default_instance(MapEntry* default_instance) { - default_instance_ = default_instance; - entry_lite_.set_default_instance(&default_instance->entry_lite_); - } + : MapEntryImpl(arena), + _internal_metadata_(arena) {} + typedef void InternalArenaConstructable_; + typedef void DestructorSkippable_; + private: static uint32 offsets_[2]; static uint32 has_bits_[2]; InternalMetadataWithArena _internal_metadata_; - MapEntry* default_instance_; - EntryLiteType entry_lite_; friend class ::google::protobuf::Arena; - typedef void InternalArenaConstructable_; - typedef void DestructorSkippable_; - template + template friend class internal::MapField; friend class internal::GeneratedMessageReflection; GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MapEntry); }; -template -uint32 MapEntry::offsets_[2] = { - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapEntry, entry_lite_.key_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapEntry, entry_lite_.value_), +uint32 MapEntry::offsets_[2] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapEntry, key_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MapEntry, value_), }; -template -uint32 MapEntry::has_bits_[2] = {0, 1}; +uint32 MapEntry::has_bits_[2] = {0, 1}; } // namespace internal } // namespace protobuf diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map_entry_lite.h b/third_party/protobuf/3.2.0/src/google/protobuf/map_entry_lite.h index 1243911bcb98a9..c466cc7b8743da 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map_entry_lite.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map_entry_lite.h @@ -32,22 +32,21 @@ #define GOOGLE_PROTOBUF_MAP_ENTRY_LITE_H__ #include + +#include #include #include namespace google { namespace protobuf { -class Arena; namespace internal { -template + WireFormatLite::FieldType kValueFieldType, int default_enum_value> class MapEntry; -template + WireFormatLite::FieldType kValueFieldType, int default_enum_value> class MapFieldLite; } // namespace internal } // namespace protobuf @@ -87,13 +86,14 @@ struct MoveHelper { // strings and similar } }; -// MapEntryLite is used to implement parsing and serialization of map for lite -// runtime. -template -class MapEntryLite : public MessageLite { + WireFormatLite::FieldType kValueFieldType, int default_enum_value> +class MapEntryImpl : public Base { + protected: // Provide utilities to parse/serialize key/value. Provide utilities to // manipulate internal stored type. typedef MapTypeHandler KeyTypeHandler; @@ -122,7 +122,30 @@ class MapEntryLite : public MessageLite { static const size_t kTagSize = 1; public: - ~MapEntryLite() { + // Work-around for a compiler bug (see repeated_field.h). + typedef void MapEntryHasMergeTypeTrait; + typedef Derived EntryType; + typedef Key EntryKeyType; + typedef Value EntryValueType; + static const WireFormatLite::FieldType kEntryKeyFieldType = kKeyFieldType; + static const WireFormatLite::FieldType kEntryValueFieldType = kValueFieldType; + static const int kEntryDefaultEnumValue = default_enum_value; + + MapEntryImpl() : default_instance_(NULL), arena_(NULL) { + KeyTypeHandler::Initialize(&key_, NULL); + ValueTypeHandler::InitializeMaybeByDefaultEnum(&value_, default_enum_value, + NULL); + _has_bits_[0] = 0; + } + + explicit MapEntryImpl(Arena* arena) : default_instance_(NULL), arena_(arena) { + KeyTypeHandler::Initialize(&key_, arena); + ValueTypeHandler::InitializeMaybeByDefaultEnum(&value_, default_enum_value, + arena); + _has_bits_[0] = 0; + } + + ~MapEntryImpl() { if (this != default_instance_) { if (GetArenaNoVirtual() != NULL) return; KeyTypeHandler::DeleteNoArena(key_); @@ -151,12 +174,12 @@ class MapEntryLite : public MessageLite { // implements MessageLite ========================================= - // MapEntryLite is for implementation only and this function isn't called + // MapEntryImpl is for implementation only and this function isn't called // anywhere. Just provide a fake implementation here for MessageLite. string GetTypeName() const { return ""; } void CheckTypeAndMergeFrom(const MessageLite& other) { - MergeFrom(*::google::protobuf::down_cast(&other)); + MergeFromInternal(*::google::protobuf::down_cast(&other)); } bool MergePartialFromCodedStream(::google::protobuf::io::CodedInputStream* input) { @@ -238,26 +261,29 @@ class MapEntryLite : public MessageLite { bool IsInitialized() const { return ValueTypeHandler::IsInitialized(value_); } - MessageLite* New() const { - MapEntryLite* entry = new MapEntryLite; + Base* New() const { + Derived* entry = new Derived; entry->default_instance_ = default_instance_; return entry; } - MessageLite* New(Arena* arena) const { - MapEntryLite* entry = Arena::CreateMessage(arena); + Base* New(Arena* arena) const { + Derived* entry = Arena::CreateMessage(arena); entry->default_instance_ = default_instance_; return entry; } - int SpaceUsed() const { - int size = sizeof(MapEntryLite); - size += KeyTypeHandler::SpaceUsedInMapEntry(key_); - size += ValueTypeHandler::SpaceUsedInMapEntry(value_); + size_t SpaceUsedLong() const { + size_t size = sizeof(Derived); + size += KeyTypeHandler::SpaceUsedInMapEntryLong(key_); + size += ValueTypeHandler::SpaceUsedInMapEntryLong(value_); return size; } - void MergeFrom(const MapEntryLite& from) { + protected: + // We can't declare this function directly here as it would hide the other + // overload (const Message&). + void MergeFromInternal(const MapEntryImpl& from) { if (from._has_bits_[0]) { if (from.has_key()) { KeyTypeHandler::EnsureMutable(&key_, GetArenaNoVirtual()); @@ -272,6 +298,7 @@ class MapEntryLite : public MessageLite { } } + public: void Clear() { KeyTypeHandler::Clear(&key_, GetArenaNoVirtual()); ValueTypeHandler::ClearMaybeByDefaultEnum( @@ -280,6 +307,10 @@ class MapEntryLite : public MessageLite { clear_has_value(); } + void set_default_instance(MapEntryImpl* default_instance) { + default_instance_ = default_instance; + } + void InitAsDefaultInstance() { KeyTypeHandler::AssignDefaultValue(&key_); ValueTypeHandler::AssignDefaultValue(&value_); @@ -289,24 +320,18 @@ class MapEntryLite : public MessageLite { return GetArenaNoVirtual(); } - // Create a MapEntryLite for given key and value from google::protobuf::Map in + // Create a MapEntryImpl for given key and value from google::protobuf::Map in // serialization. This function is only called when value is enum. Enum is // treated differently because its type in MapEntry is int and its type in // google::protobuf::Map is enum. We cannot create a reference to int from an enum. - static MapEntryLite* EnumWrap(const Key& key, const Value value, - Arena* arena) { - return Arena::CreateMessage >( - arena, key, value); + static Derived* EnumWrap(const Key& key, const Value value, Arena* arena) { + return Arena::CreateMessage(arena, key, value); } // Like above, but for all the other types. This avoids value copy to create - // MapEntryLite from google::protobuf::Map in serialization. - static MapEntryLite* Wrap(const Key& key, const Value& value, Arena* arena) { - return Arena::CreateMessage >( - arena, key, value); + // MapEntryImpl from google::protobuf::Map in serialization. + static Derived* Wrap(const Key& key, const Value& value, Arena* arena) { + return Arena::CreateMessage(arena, key, value); } // Parsing using MergePartialFromCodedStream, above, is not as @@ -411,7 +436,7 @@ class MapEntryLite : public MessageLite { Value* value_ptr_; // On the fast path entry_ is not used. And, when entry_ is used, it's set // to mf_->NewEntry(), so in the arena case we must call entry_.release. - google::protobuf::scoped_ptr entry_; + google::protobuf::scoped_ptr entry_; }; protected: @@ -433,21 +458,17 @@ class MapEntryLite : public MessageLite { // involves copy of key and value to construct a MapEntry. In order to avoid // this copy in constructing a MapEntry, we need the following class which // only takes references of given key and value. - template - class MapEntryWrapper - : public MapEntryLite { - typedef MapEntryLite Base; - typedef typename Base::KeyMapEntryAccessorType KeyMapEntryAccessorType; - typedef typename Base::ValueMapEntryAccessorType ValueMapEntryAccessorType; + class MapEntryWrapper : public Derived { + typedef Derived BaseClass; + typedef typename BaseClass::KeyMapEntryAccessorType KeyMapEntryAccessorType; + typedef + typename BaseClass::ValueMapEntryAccessorType ValueMapEntryAccessorType; public: - MapEntryWrapper(Arena* arena, const K& key, const V& value) - : MapEntryLite(arena), - key_(key), - value_(value) { - Base::set_has_key(); - Base::set_has_value(); + MapEntryWrapper(Arena* arena, const Key& key, const Value& value) + : Derived(arena), key_(key), value_(value) { + BaseClass::set_has_key(); + BaseClass::set_has_value(); } inline const KeyMapEntryAccessorType& key() const { return key_; } inline const ValueMapEntryAccessorType& value() const { return value_; } @@ -467,21 +488,17 @@ class MapEntryLite : public MessageLite { // initialize a reference to int with a reference to enum, compiler will // generate a temporary int from enum and initialize the reference to int with // the temporary. - template - class MapEnumEntryWrapper - : public MapEntryLite { - typedef MapEntryLite Base; - typedef typename Base::KeyMapEntryAccessorType KeyMapEntryAccessorType; - typedef typename Base::ValueMapEntryAccessorType ValueMapEntryAccessorType; + class MapEnumEntryWrapper : public Derived { + typedef Derived BaseClass; + typedef typename BaseClass::KeyMapEntryAccessorType KeyMapEntryAccessorType; + typedef + typename BaseClass::ValueMapEntryAccessorType ValueMapEntryAccessorType; public: - MapEnumEntryWrapper(Arena* arena, const K& key, const V& value) - : MapEntryLite(arena), - key_(key), - value_(value) { - Base::set_has_key(); - Base::set_has_value(); + MapEnumEntryWrapper(Arena* arena, const Key& key, const Value& value) + : Derived(arena), key_(key), value_(value) { + BaseClass::set_has_key(); + BaseClass::set_has_value(); } inline const KeyMapEntryAccessorType& key() const { return key_; } inline const ValueMapEntryAccessorType& value() const { return value_; } @@ -494,30 +511,11 @@ class MapEntryLite : public MessageLite { typedef void DestructorSkippable_; }; - MapEntryLite() : default_instance_(NULL), arena_(NULL) { - KeyTypeHandler::Initialize(&key_, NULL); - ValueTypeHandler::InitializeMaybeByDefaultEnum( - &value_, default_enum_value, NULL); - _has_bits_[0] = 0; - } - - explicit MapEntryLite(Arena* arena) - : default_instance_(NULL), arena_(arena) { - KeyTypeHandler::Initialize(&key_, arena); - ValueTypeHandler::InitializeMaybeByDefaultEnum( - &value_, default_enum_value, arena); - _has_bits_[0] = 0; - } - inline Arena* GetArenaNoVirtual() const { return arena_; } - void set_default_instance(MapEntryLite* default_instance) { - default_instance_ = default_instance; - } - - MapEntryLite* default_instance_; + MapEntryImpl* default_instance_; KeyOnMemory key_; ValueOnMemory value_; @@ -527,14 +525,33 @@ class MapEntryLite : public MessageLite { friend class ::google::protobuf::Arena; typedef void InternalArenaConstructable_; typedef void DestructorSkippable_; - template friend class internal::MapEntry; - template friend class internal::MapFieldLite; - GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MapEntryLite); + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MapEntryImpl); +}; + +template +class MapEntryLite + : public MapEntryImpl, + MessageLite, Key, Value, kKeyFieldType, + kValueFieldType, default_enum_value> { + public: + typedef MapEntryImpl + SuperType; + MapEntryLite() {} + explicit MapEntryLite(Arena* arena) : SuperType(arena) {} + void MergeFrom(const MapEntryLite& other) { + MergeFromInternal(other); + } }; // Helpers for deterministic serialization ============================= diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map_field.cc b/third_party/protobuf/3.2.0/src/google/protobuf/map_field.cc index 49f918181fcc96..64dcc990ff06e1 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map_field.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map_field.cc @@ -37,31 +37,6 @@ namespace google { namespace protobuf { namespace internal { -ProtobufOnceType map_entry_default_instances_once_; -Mutex* map_entry_default_instances_mutex_; -vector* map_entry_default_instances_; - -void DeleteMapEntryDefaultInstances() { - for (int i = 0; i < map_entry_default_instances_->size(); ++i) { - delete map_entry_default_instances_->at(i); - } - delete map_entry_default_instances_mutex_; - delete map_entry_default_instances_; -} - -void InitMapEntryDefaultInstances() { - map_entry_default_instances_mutex_ = new Mutex(); - map_entry_default_instances_ = new vector(); - OnShutdown(&DeleteMapEntryDefaultInstances); -} - -void RegisterMapEntryDefaultInstance(MessageLite* default_instance) { - ::google::protobuf::GoogleOnceInit(&map_entry_default_instances_once_, - &InitMapEntryDefaultInstances); - MutexLock lock(map_entry_default_instances_mutex_); - map_entry_default_instances_->push_back(default_instance); -} - MapFieldBase::~MapFieldBase() { if (repeated_field_ != NULL && arena_ == NULL) delete repeated_field_; } @@ -77,25 +52,26 @@ RepeatedPtrFieldBase* MapFieldBase::MutableRepeatedField() { return repeated_field_; } -int MapFieldBase::SpaceUsedExcludingSelf() const { +size_t MapFieldBase::SpaceUsedExcludingSelfLong() const { mutex_.Lock(); - int size = SpaceUsedExcludingSelfNoLock(); + size_t size = SpaceUsedExcludingSelfNoLock(); mutex_.Unlock(); return size; } -int MapFieldBase::SpaceUsedExcludingSelfNoLock() const { +size_t MapFieldBase::SpaceUsedExcludingSelfNoLock() const { if (repeated_field_ != NULL) { - return repeated_field_->SpaceUsedExcludingSelf(); + return repeated_field_->SpaceUsedExcludingSelfLong(); } else { return 0; } } -void MapFieldBase::InitMetadataOnce() const { - GOOGLE_CHECK(entry_descriptor_ != NULL); - GOOGLE_CHECK(assign_descriptor_callback_ != NULL); - (*assign_descriptor_callback_)(); +bool MapFieldBase::IsMapValid() const { + // "Acquire" insures the operation after SyncRepeatedFieldWithMap won't get + // executed before state_ is checked. + Atomic32 state = google::protobuf::internal::Acquire_Load(&state_); + return state != STATE_MODIFIED_REPEATED; } void MapFieldBase::SetMapDirty() { state_ = STATE_MODIFIED_MAP; } @@ -390,6 +366,13 @@ void DynamicMapField::SyncMapWithRepeatedFieldNoLock() const { GOOGLE_LOG(FATAL) << "Can't get here."; break; } + + // Remove existing map value with same key. + Map::iterator iter = map->find(map_key); + if (iter != map->end()) { + iter->second.DeleteData(); + } + MapValueRef& map_val = (*map)[map_key]; map_val.SetType(val_des->cpp_type()); switch (val_des->cpp_type()) { @@ -421,13 +404,13 @@ void DynamicMapField::SyncMapWithRepeatedFieldNoLock() const { } } -int DynamicMapField::SpaceUsedExcludingSelfNoLock() const { - int size = 0; +size_t DynamicMapField::SpaceUsedExcludingSelfNoLock() const { + size_t size = 0; if (MapFieldBase::repeated_field_ != NULL) { - size += MapFieldBase::repeated_field_->SpaceUsedExcludingSelf(); + size += MapFieldBase::repeated_field_->SpaceUsedExcludingSelfLong(); } size += sizeof(map_); - int map_size = map_.size(); + size_t map_size = map_.size(); if (map_size) { Map::const_iterator it = map_.begin(); size += sizeof(it->first) * map_size; @@ -456,7 +439,7 @@ int DynamicMapField::SpaceUsedExcludingSelfNoLock() const { case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: { while (it != map_.end()) { const Message& message = it->second.GetMessageValue(); - size += message.GetReflection()->SpaceUsed(message); + size += message.GetReflection()->SpaceUsedLong(message); ++it; } break; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map_field.h b/third_party/protobuf/3.2.0/src/google/protobuf/map_field.h index d6af8532d28cf6..9d5a328eb5f8e5 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map_field.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map_field.h @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -62,14 +63,10 @@ class LIBPROTOBUF_EXPORT MapFieldBase { MapFieldBase() : arena_(NULL), repeated_field_(NULL), - entry_descriptor_(NULL), - assign_descriptor_callback_(NULL), state_(STATE_MODIFIED_MAP) {} explicit MapFieldBase(Arena* arena) : arena_(arena), repeated_field_(NULL), - entry_descriptor_(NULL), - assign_descriptor_callback_(NULL), state_(STATE_MODIFIED_MAP) { // Mutex's destructor needs to be called explicitly to release resources // acquired in its constructor. @@ -89,6 +86,8 @@ class LIBPROTOBUF_EXPORT MapFieldBase { virtual bool ContainsMapKey(const MapKey& map_key) const = 0; virtual bool InsertOrLookupMapValue( const MapKey& map_key, MapValueRef* val) = 0; + // Insures operations after won't get executed before calling this. + bool IsMapValid() const; virtual bool DeleteMapValue(const MapKey& map_key) = 0; virtual bool EqualIterator(const MapIterator& a, const MapIterator& b) const = 0; @@ -99,11 +98,15 @@ class LIBPROTOBUF_EXPORT MapFieldBase { // Returns the number of bytes used by the repeated field, excluding // sizeof(*this) - int SpaceUsedExcludingSelf() const; + size_t SpaceUsedExcludingSelfLong() const; + + int SpaceUsedExcludingSelf() const { + return internal::ToIntSize(SpaceUsedExcludingSelfLong()); + } protected: // Gets the size of space used by map field. - virtual int SpaceUsedExcludingSelfNoLock() const; + virtual size_t SpaceUsedExcludingSelfNoLock() const; // Synchronizes the content in Map to RepeatedPtrField if there is any change // to Map after last synchronization. @@ -124,9 +127,6 @@ class LIBPROTOBUF_EXPORT MapFieldBase { // Provides derived class the access to repeated field. void* MutableRepeatedPtrField() const; - // Creates descriptor for only one time. - void InitMetadataOnce() const; - enum State { STATE_MODIFIED_MAP = 0, // map has newly added data that has not been // synchronized to repeated field @@ -137,13 +137,6 @@ class LIBPROTOBUF_EXPORT MapFieldBase { Arena* arena_; mutable RepeatedPtrField* repeated_field_; - // MapEntry can only be created from MapField. To create MapEntry, MapField - // needs to know its descriptor, because MapEntry is not generated class which - // cannot initialize its own descriptor by calling generated - // descriptor-assign-function. Thus, we need to register a callback to - // initialize MapEntry's descriptor. - const Descriptor** entry_descriptor_; - void (*assign_descriptor_callback_)(); mutable Mutex mutex_; // The thread to synchronize map and repeated field // needs to get lock first; @@ -211,27 +204,24 @@ class TypeDefinedMapFieldBase : public MapFieldBase { // This class provides access to map field using generated api. It is used for // internal generated message implentation only. Users should never use this // directly. -template -class MapField : public TypeDefinedMapFieldBase, - public MapFieldLite { + WireFormatLite::FieldType kValueFieldType, int default_enum_value = 0> +class MapField : public TypeDefinedMapFieldBase { // Provide utilities to parse/serialize key/value. Provide utilities to // manipulate internal stored type. typedef MapTypeHandler KeyTypeHandler; typedef MapTypeHandler ValueTypeHandler; // Define message type for internal repeated field. - typedef MapEntry - EntryType; + typedef Derived EntryType; typedef MapEntryLite EntryLiteType; // Define abbreviation for parent MapFieldLite - typedef MapFieldLite MapFieldLiteType; + typedef MapFieldLite + MapFieldLiteType; // Enum needs to be handled differently from other types because it has // different exposed type in google::protobuf::Map's api and repeated field's api. For @@ -241,58 +231,62 @@ class MapField : public TypeDefinedMapFieldBase, typedef typename MapIf::type CastValueType; public: - MapField(); - explicit MapField(Arena* arena); - // MapField doesn't own the default_entry, which means default_entry must - // outlive the lifetime of MapField. - MapField(const Message* default_entry); - // For tests only. - MapField(Arena* arena, const Message* default_entry); - ~MapField(); + MapField() {} + explicit MapField(Arena* arena) + : TypeDefinedMapFieldBase(arena), impl_(arena) {} // Implement MapFieldBase bool ContainsMapKey(const MapKey& map_key) const; bool InsertOrLookupMapValue(const MapKey& map_key, MapValueRef* val); bool DeleteMapValue(const MapKey& map_key); - // Accessors - const Map& GetMap() const; - Map* MutableMap(); + const Map& GetMap() const { + MapFieldBase::SyncMapWithRepeatedField(); + return impl_.GetMap(); + } + + Map* MutableMap() { + MapFieldBase::SyncMapWithRepeatedField(); + Map* result = impl_.MutableMap(); + MapFieldBase::SetMapDirty(); + return result; + } // Convenient methods for generated message implementation. int size() const; void Clear(); - void MergeFrom(const MapFieldLiteType& other); - void Swap(MapFieldLiteType* other); - - // Allocates metadata only if this MapField is part of a generated message. - void SetEntryDescriptor(const Descriptor** descriptor); - void SetAssignDescriptorCallback(void (*callback)()); + void MergeFrom(const MapField& other); + void Swap(MapField* other); + + // Used in the implementation of parsing. Caller should take the ownership iff + // arena_ is NULL. + EntryType* NewEntry() const { return impl_.NewEntry(); } + // Used in the implementation of serializing enum value type. Caller should + // take the ownership iff arena_ is NULL. + EntryType* NewEnumEntryWrapper(const Key& key, const T t) const { + return impl_.NewEnumEntryWrapper(key, t); + } + // Used in the implementation of serializing other value types. Caller should + // take the ownership iff arena_ is NULL. + EntryType* NewEntryWrapper(const Key& key, const T& t) const { + return impl_.NewEntryWrapper(key, t); + } private: + MapFieldLiteType impl_; + typedef void InternalArenaConstructable_; typedef void DestructorSkippable_; - // MapField needs MapEntry's default instance to create new MapEntry. - void InitDefaultEntryOnce() const; - - // Manually set default entry instance. For test only. - void SetDefaultEntryOnce(const EntryType* default_entry) const; - - // Convenient methods to get internal google::protobuf::Map - const Map& GetInternalMap() const; - Map* MutableInternalMap(); - // Implements MapFieldBase void SyncRepeatedFieldWithMapNoLock() const; void SyncMapWithRepeatedFieldNoLock() const; - int SpaceUsedExcludingSelfNoLock() const; + size_t SpaceUsedExcludingSelfNoLock() const; void SetMapIteratorValue(MapIterator* map_iter) const; - mutable const EntryType* default_entry_; - friend class ::google::protobuf::Arena; + friend class MapFieldStateTest; // For testing, it needs raw access to impl_ }; class LIBPROTOBUF_EXPORT DynamicMapField: public TypeDefinedMapFieldBase { @@ -318,12 +312,395 @@ class LIBPROTOBUF_EXPORT DynamicMapField: public TypeDefinedMapFieldBase + friend class internal::TypeDefinedMapFieldBase; + friend class MapIterator; + friend class internal::DynamicMapField; + + union KeyValue { + KeyValue() {} + string* string_value_; + int64 int64_value_; + int32 int32_value_; + uint64 uint64_value_; + uint32 uint32_value_; + bool bool_value_; + } val_; + + void SetType(FieldDescriptor::CppType type) { + if (type_ == type) return; + if (type_ == FieldDescriptor::CPPTYPE_STRING) { + delete val_.string_value_; + } + type_ = type; + if (type_ == FieldDescriptor::CPPTYPE_STRING) { + val_.string_value_ = new string; + } + } + + // type_ is 0 or a valid FieldDescriptor::CppType. + int type_; +}; + +// MapValueRef points to a map value. +class LIBPROTOBUF_EXPORT MapValueRef { + public: + MapValueRef() : data_(NULL), type_(0) {} + + void SetInt64Value(int64 value) { + TYPE_CHECK(FieldDescriptor::CPPTYPE_INT64, + "MapValueRef::SetInt64Value"); + *reinterpret_cast(data_) = value; + } + void SetUInt64Value(uint64 value) { + TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT64, + "MapValueRef::SetUInt64Value"); + *reinterpret_cast(data_) = value; + } + void SetInt32Value(int32 value) { + TYPE_CHECK(FieldDescriptor::CPPTYPE_INT32, + "MapValueRef::SetInt32Value"); + *reinterpret_cast(data_) = value; + } + void SetUInt32Value(uint32 value) { + TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT32, + "MapValueRef::SetUInt32Value"); + *reinterpret_cast(data_) = value; + } + void SetBoolValue(bool value) { + TYPE_CHECK(FieldDescriptor::CPPTYPE_BOOL, + "MapValueRef::SetBoolValue"); + *reinterpret_cast(data_) = value; + } + // TODO(jieluo) - Checks that enum is member. + void SetEnumValue(int value) { + TYPE_CHECK(FieldDescriptor::CPPTYPE_ENUM, + "MapValueRef::SetEnumValue"); + *reinterpret_cast(data_) = value; + } + void SetStringValue(const string& value) { + TYPE_CHECK(FieldDescriptor::CPPTYPE_STRING, + "MapValueRef::SetStringValue"); + *reinterpret_cast(data_) = value; + } + void SetFloatValue(float value) { + TYPE_CHECK(FieldDescriptor::CPPTYPE_FLOAT, + "MapValueRef::SetFloatValue"); + *reinterpret_cast(data_) = value; + } + void SetDoubleValue(double value) { + TYPE_CHECK(FieldDescriptor::CPPTYPE_DOUBLE, + "MapValueRef::SetDoubleValue"); + *reinterpret_cast(data_) = value; + } + + int64 GetInt64Value() const { + TYPE_CHECK(FieldDescriptor::CPPTYPE_INT64, + "MapValueRef::GetInt64Value"); + return *reinterpret_cast(data_); + } + uint64 GetUInt64Value() const { + TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT64, + "MapValueRef::GetUInt64Value"); + return *reinterpret_cast(data_); + } + int32 GetInt32Value() const { + TYPE_CHECK(FieldDescriptor::CPPTYPE_INT32, + "MapValueRef::GetInt32Value"); + return *reinterpret_cast(data_); + } + uint32 GetUInt32Value() const { + TYPE_CHECK(FieldDescriptor::CPPTYPE_UINT32, + "MapValueRef::GetUInt32Value"); + return *reinterpret_cast(data_); + } + bool GetBoolValue() const { + TYPE_CHECK(FieldDescriptor::CPPTYPE_BOOL, + "MapValueRef::GetBoolValue"); + return *reinterpret_cast(data_); + } + int GetEnumValue() const { + TYPE_CHECK(FieldDescriptor::CPPTYPE_ENUM, + "MapValueRef::GetEnumValue"); + return *reinterpret_cast(data_); + } + const string& GetStringValue() const { + TYPE_CHECK(FieldDescriptor::CPPTYPE_STRING, + "MapValueRef::GetStringValue"); + return *reinterpret_cast(data_); + } + float GetFloatValue() const { + TYPE_CHECK(FieldDescriptor::CPPTYPE_FLOAT, + "MapValueRef::GetFloatValue"); + return *reinterpret_cast(data_); + } + double GetDoubleValue() const { + TYPE_CHECK(FieldDescriptor::CPPTYPE_DOUBLE, + "MapValueRef::GetDoubleValue"); + return *reinterpret_cast(data_); + } + + const Message& GetMessageValue() const { + TYPE_CHECK(FieldDescriptor::CPPTYPE_MESSAGE, + "MapValueRef::GetMessageValue"); + return *reinterpret_cast(data_); + } + + Message* MutableMessageValue() { + TYPE_CHECK(FieldDescriptor::CPPTYPE_MESSAGE, + "MapValueRef::MutableMessageValue"); + return reinterpret_cast(data_); + } + + private: + template + friend class internal::MapField; + template + friend class internal::TypeDefinedMapFieldBase; + friend class MapIterator; + friend class internal::GeneratedMessageReflection; + friend class internal::DynamicMapField; + + void SetType(FieldDescriptor::CppType type) { + type_ = type; + } + + FieldDescriptor::CppType type() const { + if (type_ == 0 || data_ == NULL) { + GOOGLE_LOG(FATAL) + << "Protocol Buffer map usage error:\n" + << "MapValueRef::type MapValueRef is not initialized."; + } + return (FieldDescriptor::CppType)type_; + } + void SetValue(const void* val) { + data_ = const_cast(val); + } + void CopyFrom(const MapValueRef& other) { + type_ = other.type_; + data_ = other.data_; + } + // Only used in DynamicMapField + void DeleteData() { + switch (type_) { +#define HANDLE_TYPE(CPPTYPE, TYPE) \ + case google::protobuf::FieldDescriptor::CPPTYPE_##CPPTYPE: { \ + delete reinterpret_cast(data_); \ + break; \ + } + HANDLE_TYPE(INT32, int32); + HANDLE_TYPE(INT64, int64); + HANDLE_TYPE(UINT32, uint32); + HANDLE_TYPE(UINT64, uint64); + HANDLE_TYPE(DOUBLE, double); + HANDLE_TYPE(FLOAT, float); + HANDLE_TYPE(BOOL, bool); + HANDLE_TYPE(STRING, string); + HANDLE_TYPE(ENUM, int32); + HANDLE_TYPE(MESSAGE, Message); +#undef HANDLE_TYPE + } + } + // data_ point to a map value. MapValueRef does not + // own this value. + void* data_; + // type_ is 0 or a valid FieldDescriptor::CppType. + int type_; +}; + +#undef TYPE_CHECK + class LIBPROTOBUF_EXPORT MapIterator { public: MapIterator(Message* message, const FieldDescriptor* field) { @@ -373,7 +750,7 @@ class LIBPROTOBUF_EXPORT MapIterator { template friend class internal::TypeDefinedMapFieldBase; friend class internal::DynamicMapField; - template @@ -392,6 +769,42 @@ class LIBPROTOBUF_EXPORT MapIterator { }; } // namespace protobuf - } // namespace google + +GOOGLE_PROTOBUF_HASH_NAMESPACE_DECLARATION_START +template<> +struct hash { + size_t + operator()(const google::protobuf::MapKey& map_key) const { + switch (map_key.type()) { + case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: + case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: + case google::protobuf::FieldDescriptor::CPPTYPE_ENUM: + case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: + GOOGLE_LOG(FATAL) << "Unsupported"; + break; + case google::protobuf::FieldDescriptor::CPPTYPE_STRING: + return hash()(map_key.GetStringValue()); + case google::protobuf::FieldDescriptor::CPPTYPE_INT64: + return hash< ::google::protobuf::int64>()(map_key.GetInt64Value()); + case google::protobuf::FieldDescriptor::CPPTYPE_INT32: + return hash< ::google::protobuf::int32>()(map_key.GetInt32Value()); + case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: + return hash< ::google::protobuf::uint64>()(map_key.GetUInt64Value()); + case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: + return hash< ::google::protobuf::uint32>()(map_key.GetUInt32Value()); + case google::protobuf::FieldDescriptor::CPPTYPE_BOOL: + return hash()(map_key.GetBoolValue()); + } + GOOGLE_LOG(FATAL) << "Can't get here."; + return 0; + } + bool + operator()(const google::protobuf::MapKey& map_key1, + const google::protobuf::MapKey& map_key2) const { + return map_key1 < map_key2; + } +}; +GOOGLE_PROTOBUF_HASH_NAMESPACE_DECLARATION_END + #endif // GOOGLE_PROTOBUF_MAP_FIELD_H__ diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map_field_inl.h b/third_party/protobuf/3.2.0/src/google/protobuf/map_field_inl.h index 2d84b0a3c2491b..8c5da3c683638c 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map_field_inl.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map_field_inl.h @@ -162,81 +162,32 @@ void TypeDefinedMapFieldBase::CopyIterator( // ---------------------------------------------------------------------- -template -MapField::MapField() - : default_entry_(NULL) {} - -template -MapField::MapField( - Arena* arena) - : TypeDefinedMapFieldBase(arena), - MapFieldLite( - arena), - default_entry_(NULL) {} - -template -MapField::MapField( - const Message* default_entry) - : default_entry_(down_cast(default_entry)) {} - -template -MapField::MapField( - Arena* arena, const Message* default_entry) - : TypeDefinedMapFieldBase(arena), - MapFieldLite( - arena), - default_entry_(down_cast(default_entry)) {} - -template -MapField::~MapField() {} - -template -int -MapField::size() const { + WireFormatLite::FieldType kValueFieldType, int default_enum_value> +int MapField::size() const { MapFieldBase::SyncMapWithRepeatedField(); - return MapFieldLiteType::GetInternalMap().size(); + return impl_.GetMap().size(); } -template -void -MapField::Clear() { + WireFormatLite::FieldType kValueFieldType, int default_enum_value> +void MapField::Clear() { MapFieldBase::SyncMapWithRepeatedField(); - MapFieldLiteType::MutableInternalMap()->clear(); + impl_.MutableMap()->clear(); MapFieldBase::SetMapDirty(); } -template -void MapField::SetMapIteratorValue( - MapIterator* map_iter) const { - const Map& map = GetMap(); + WireFormatLite::FieldType kValueFieldType, int default_enum_value> +void MapField::SetMapIteratorValue(MapIterator* map_iter) + const { + const Map& map = impl_.GetMap(); typename Map::const_iterator iter = TypeDefinedMapFieldBase::InternalGetIterator(map_iter); if (iter == map.end()) return; @@ -244,27 +195,23 @@ void MapFieldvalue_.SetValue(&iter->second); } -template -bool MapField::ContainsMapKey( - const MapKey& map_key) const { - const Map& map = GetMap(); + WireFormatLite::FieldType kValueFieldType, int default_enum_value> +bool MapField::ContainsMapKey(const MapKey& map_key) const { + const Map& map = impl_.GetMap(); const Key& key = UnwrapMapKey(map_key); typename Map::const_iterator iter = map.find(key); return iter != map.end(); } -template -bool MapField::InsertOrLookupMapValue( - const MapKey& map_key, - MapValueRef* val) { + WireFormatLite::FieldType kValueFieldType, int default_enum_value> +bool MapField::InsertOrLookupMapValue(const MapKey& map_key, + MapValueRef* val) { // Always use mutable map because users may change the map value by // MapValueRef. Map* map = MutableMap(); @@ -280,118 +227,41 @@ bool MapField -bool MapField::DeleteMapValue( - const MapKey& map_key) { + WireFormatLite::FieldType kValueFieldType, int default_enum_value> +bool MapField::DeleteMapValue(const MapKey& map_key) { const Key& key = UnwrapMapKey(map_key); return MutableMap()->erase(key); } -template -const Map& -MapField::GetMap() const { - MapFieldBase::SyncMapWithRepeatedField(); - return MapFieldLiteType::GetInternalMap(); -} - -template -Map* -MapField::MutableMap() { - MapFieldBase::SyncMapWithRepeatedField(); - Map* result = MapFieldLiteType::MutableInternalMap(); - MapFieldBase::SetMapDirty(); - return result; -} - -template -void -MapField::MergeFrom( - const MapFieldLiteType& other) { - const MapField& down_other = down_cast(other); + WireFormatLite::FieldType kValueFieldType, int default_enum_value> +void MapField::MergeFrom(const MapField& other) { MapFieldBase::SyncMapWithRepeatedField(); - down_other.SyncMapWithRepeatedField(); - MapFieldLiteType::MergeFrom(other); + other.SyncMapWithRepeatedField(); + impl_.MergeFrom(other.impl_); MapFieldBase::SetMapDirty(); } -template -void -MapField::Swap( - MapFieldLiteType* other) { - MapField* down_other = down_cast(other); - std::swap(this->MapFieldBase::repeated_field_, down_other->repeated_field_); - MapFieldLiteType::Swap(other); - std::swap(this->MapFieldBase::state_, down_other->state_); -} - -template -void -MapField::SetEntryDescriptor( - const Descriptor** descriptor) { - this->MapFieldBase::entry_descriptor_ = descriptor; -} - -template -void -MapField::SetAssignDescriptorCallback(void (*callback)()) { - this->MapFieldBase::assign_descriptor_callback_ = callback; -} - -template -const Map& -MapField::GetInternalMap() const { - return MapFieldLiteType::GetInternalMap(); + WireFormatLite::FieldType kValueFieldType, int default_enum_value> +void MapField::Swap(MapField* other) { + std::swap(MapFieldBase::repeated_field_, other->repeated_field_); + impl_.Swap(&other->impl_); + std::swap(MapFieldBase::state_, other->state_); } -template -Map* -MapField::MutableInternalMap() { - return MapFieldLiteType::MutableInternalMap(); -} - -template -void -MapField::SyncRepeatedFieldWithMapNoLock() const { + WireFormatLite::FieldType kValueFieldType, int default_enum_value> +void MapField::SyncRepeatedFieldWithMapNoLock() const { if (this->MapFieldBase::repeated_field_ == NULL) { if (this->MapFieldBase::arena_ == NULL) { this->MapFieldBase::repeated_field_ = new RepeatedPtrField(); @@ -401,33 +271,35 @@ MapFieldMapFieldBase::arena_); } } - const Map& map = GetInternalMap(); + const Map& map = impl_.GetMap(); RepeatedPtrField* repeated_field = reinterpret_cast*>( this->MapFieldBase::repeated_field_); repeated_field->Clear(); + // The only way we can get at this point is through reflection and the + // only way we can get the reflection object is by having called GetReflection + // on the encompassing field. So that type must have existed and hence we + // know that this MapEntry default_type has also already been constructed. + // So it's safe to just call internal_default_instance(). + const Message* default_entry = Derived::internal_default_instance(); for (typename Map::const_iterator it = map.begin(); it != map.end(); ++it) { - InitDefaultEntryOnce(); - GOOGLE_CHECK(default_entry_ != NULL); EntryType* new_entry = - down_cast(default_entry_->New(this->MapFieldBase::arena_)); + down_cast(default_entry->New(this->MapFieldBase::arena_)); repeated_field->AddAllocated(new_entry); (*new_entry->mutable_key()) = it->first; (*new_entry->mutable_value()) = it->second; } } -template -void -MapField::SyncMapWithRepeatedFieldNoLock() const { - Map* map = const_cast(this)->MutableInternalMap(); + WireFormatLite::FieldType kValueFieldType, int default_enum_value> +void MapField::SyncMapWithRepeatedFieldNoLock() const { + Map* map = const_cast(this)->impl_.MutableMap(); RepeatedPtrField* repeated_field = reinterpret_cast*>( this->MapFieldBase::repeated_field_); @@ -444,44 +316,24 @@ MapField -int -MapField::SpaceUsedExcludingSelfNoLock() const { - int size = 0; + WireFormatLite::FieldType kValueFieldType, int default_enum_value> +size_t MapField::SpaceUsedExcludingSelfNoLock() const { + size_t size = 0; if (this->MapFieldBase::repeated_field_ != NULL) { - size += this->MapFieldBase::repeated_field_->SpaceUsedExcludingSelf(); + size += this->MapFieldBase::repeated_field_->SpaceUsedExcludingSelfLong(); } - Map* map = const_cast(this)->MutableInternalMap(); + Map* map = const_cast(this)->impl_.MutableMap(); size += sizeof(*map); - for (typename Map::iterator it = map->begin(); - it != map->end(); ++it) { - size += KeyTypeHandler::SpaceUsedInMap(it->first); - size += ValueTypeHandler::SpaceUsedInMap(it->second); + for (typename Map::iterator it = map->begin(); it != map->end(); + ++it) { + size += KeyTypeHandler::SpaceUsedInMapLong(it->first); + size += ValueTypeHandler::SpaceUsedInMapLong(it->second); } return size; } - -template -void -MapField::InitDefaultEntryOnce() - const { - if (default_entry_ == NULL) { - MapFieldBase::InitMetadataOnce(); - GOOGLE_CHECK(*this->MapFieldBase::entry_descriptor_ != NULL); - default_entry_ = down_cast( - MessageFactory::generated_factory()->GetPrototype( - *this->MapFieldBase::entry_descriptor_)); - } -} - } // namespace internal } // namespace protobuf diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map_field_lite.h b/third_party/protobuf/3.2.0/src/google/protobuf/map_field_lite.h index cb0a4a450bd450..2d1023925dc8f2 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map_field_lite.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map_field_lite.h @@ -41,223 +41,69 @@ namespace internal { // This class provides access to map field using generated api. It is used for // internal generated message implentation only. Users should never use this // directly. -template + WireFormatLite::FieldType value_wire_type, int default_enum_value = 0> class MapFieldLite { // Define message type for internal repeated field. - typedef MapEntryLite EntryType; + typedef Derived EntryType; public: - MapFieldLite(); - explicit MapFieldLite(Arena* arena); - virtual ~MapFieldLite(); + MapFieldLite() : arena_(NULL) { SetDefaultEnumValue(); } + + explicit MapFieldLite(Arena* arena) : arena_(arena), map_(arena) { + SetDefaultEnumValue(); + } // Accessors - virtual const Map& GetMap() const; - virtual Map* MutableMap(); + const Map& GetMap() const { return map_; } + Map* MutableMap() { return &map_; } // Convenient methods for generated message implementation. - virtual int size() const; - virtual void Clear(); - virtual void MergeFrom(const MapFieldLite& other); - virtual void Swap(MapFieldLite* other); + int size() const { return map_.size(); } + void Clear() { return map_.clear(); } + void MergeFrom(const MapFieldLite& other) { + for (typename Map::const_iterator it = other.map_.begin(); + it != other.map_.end(); ++it) { + map_[it->first] = it->second; + } + } + void Swap(MapFieldLite* other) { map_.swap(other->map_); } // Set default enum value only for proto2 map field whose value is enum type. - void SetDefaultEnumValue(); + void SetDefaultEnumValue() { + MutableMap()->SetDefaultEnumValue(default_enum_value); + } // Used in the implementation of parsing. Caller should take the ownership iff // arena_ is NULL. - EntryType* NewEntry() const; + EntryType* NewEntry() const { + if (arena_ == NULL) { + return new EntryType(); + } else { + return Arena::CreateMessage(arena_); + } + } // Used in the implementation of serializing enum value type. Caller should // take the ownership iff arena_ is NULL. - EntryType* NewEnumEntryWrapper(const Key& key, const T t) const; + EntryType* NewEnumEntryWrapper(const Key& key, const T t) const { + return EntryType::EnumWrap(key, t, arena_); + } // Used in the implementation of serializing other value types. Caller should // take the ownership iff arena_ is NULL. - EntryType* NewEntryWrapper(const Key& key, const T& t) const; - - protected: - // Convenient methods to get internal google::protobuf::Map - virtual const Map& GetInternalMap() const; - virtual Map* MutableInternalMap(); + EntryType* NewEntryWrapper(const Key& key, const T& t) const { + return EntryType::Wrap(key, t, arena_); + } private: typedef void DestructorSkippable_; Arena* arena_; - Map* map_; + Map map_; friend class ::google::protobuf::Arena; }; -template -MapFieldLite::MapFieldLite() - : arena_(NULL) { - map_ = new Map; - SetDefaultEnumValue(); -} - -template -MapFieldLite::MapFieldLite(Arena* arena) - : arena_(arena) { - map_ = Arena::CreateMessage >(arena); - SetDefaultEnumValue(); -} - -template -MapFieldLite::~MapFieldLite() { - delete map_; -} - -template -const Map& -MapFieldLite::GetMap() const { - return *map_; -} - -template -Map* -MapFieldLite::MutableMap() { - return map_; -} - -template -int -MapFieldLite::size() const { - return map_->size(); -} - -template -void -MapFieldLite::Clear() { - map_->clear(); -} - -template -void -MapFieldLite::MergeFrom( - const MapFieldLite& other) { - for (typename Map::const_iterator it = other.map_->begin(); - it != other.map_->end(); ++it) { - (*map_)[it->first] = it->second; - } -} - -template -void -MapFieldLite::Swap( - MapFieldLite* other) { - std::swap(map_, other->map_); -} - -template -void -MapFieldLite::SetDefaultEnumValue() { - MutableInternalMap()->SetDefaultEnumValue(default_enum_value); -} - -template -const Map& -MapFieldLite::GetInternalMap() const { - return *map_; -} - -template -Map* -MapFieldLite::MutableInternalMap() { - return map_; -} - -#define EntryType \ - MapEntryLite - -template -EntryType* -MapFieldLite::NewEntry() const { - if (arena_ == NULL) { - return new EntryType(); - } else { - return Arena::CreateMessage(arena_); - } -} - -template -EntryType* -MapFieldLite::NewEnumEntryWrapper(const Key& key, - const T t) const { - return EntryType::EnumWrap(key, t, arena_); -} - -template -EntryType* -MapFieldLite::NewEntryWrapper(const Key& key, - const T& t) const { - return EntryType::Wrap(key, t, arena_); -} - -#undef EntryType // True if IsInitialized() is true for value field in all elements of t. T is // expected to be message. It's useful to have this helper here to keep the diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map_field_test.cc b/third_party/protobuf/3.2.0/src/google/protobuf/map_field_test.cc index dd5061c4985124..8617a366af30c5 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map_field_test.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map_field_test.cc @@ -101,8 +101,10 @@ class MapFieldBaseStub : public MapFieldBase { class MapFieldBasePrimitiveTest : public ::testing::Test { protected: - typedef MapField MapFieldType; + typedef unittest::TestMap::TestMap_MapInt32Int32Entry EntryType; + typedef MapField + MapFieldType; MapFieldBasePrimitiveTest() { // Get descriptors @@ -113,9 +115,7 @@ class MapFieldBasePrimitiveTest : public ::testing::Test { value_descriptor_ = map_descriptor_->FindFieldByName("value"); // Build map field - default_entry_ = - MessageFactory::generated_factory()->GetPrototype(map_descriptor_); - map_field_.reset(new MapFieldType(default_entry_)); + map_field_.reset(new MapFieldType); map_field_base_ = map_field_.get(); map_ = map_field_->MutableMap(); initial_value_map_[0] = 100; @@ -130,7 +130,6 @@ class MapFieldBasePrimitiveTest : public ::testing::Test { const Descriptor* map_descriptor_; const FieldDescriptor* key_descriptor_; const FieldDescriptor* value_descriptor_; - const Message* default_entry_; std::map initial_value_map_; // copy of initial values inserted }; @@ -177,8 +176,7 @@ TEST_F(MapFieldBasePrimitiveTest, Arena) { // repeated fields are allocated from arenas. // NoHeapChecker no_heap; - MapFieldType* map_field = - Arena::CreateMessage(&arena, default_entry_); + MapFieldType* map_field = Arena::CreateMessage(&arena); // Set content in map (*map_field->MutableMap())[100] = 101; @@ -208,19 +206,13 @@ class MapFieldStateTest : public testing::TestWithParam { public: protected: - typedef MapField MapFieldType; - typedef MapFieldLite MapFieldLiteType; + typedef unittest::TestMap::TestMap_MapInt32Int32Entry EntryType; + typedef MapField + MapFieldType; MapFieldStateTest() : state_(GetParam()) { // Build map field - const Descriptor* map_descriptor = - unittest::TestMap::descriptor() - ->FindFieldByName("map_int32_int32") - ->message_type(); - default_entry_ = - MessageFactory::generated_factory()->GetPrototype(map_descriptor); - map_field_.reset(new MapFieldType(default_entry_)); + map_field_.reset(new MapFieldType()); map_field_base_ = map_field_.get(); Expect(map_field_.get(), MAP_DIRTY, 0, 0, true); @@ -257,8 +249,8 @@ class MapFieldStateTest MakeMapDirty(map_field); MapFieldBase* map_field_base = map_field; map_field_base->MutableRepeatedField(); - Map* map = implicit_cast(map_field) - ->MapFieldLiteType::MutableMap(); + // We use MutableMap on impl_ because we don't want to disturb the syncing + Map* map = map_field->impl_.MutableMap(); map->clear(); Expect(map_field, REPEATED_DIRTY, 0, 1, false); @@ -270,8 +262,8 @@ class MapFieldStateTest MapFieldBaseStub* stub = reinterpret_cast(map_field_base); - Map* map = implicit_cast(map_field) - ->MapFieldLiteType::MutableMap(); + // We use MutableMap on impl_ because we don't want to disturb the syncing + Map* map = map_field->impl_.MutableMap(); RepeatedPtrField* repeated_field = stub->InternalRepeatedField(); switch (state) { @@ -302,7 +294,6 @@ class MapFieldStateTest google::protobuf::scoped_ptr map_field_; MapFieldBase* map_field_base_; State state_; - const Message* default_entry_; }; INSTANTIATE_TEST_CASE_P(MapFieldStateTestInstance, MapFieldStateTest, @@ -327,7 +318,7 @@ TEST_P(MapFieldStateTest, MutableMap) { } TEST_P(MapFieldStateTest, MergeFromClean) { - MapFieldType other(default_entry_); + MapFieldType other; AddOneStillClean(&other); map_field_->MergeFrom(other); @@ -342,7 +333,7 @@ TEST_P(MapFieldStateTest, MergeFromClean) { } TEST_P(MapFieldStateTest, MergeFromMapDirty) { - MapFieldType other(default_entry_); + MapFieldType other; MakeMapDirty(&other); map_field_->MergeFrom(other); @@ -357,7 +348,7 @@ TEST_P(MapFieldStateTest, MergeFromMapDirty) { } TEST_P(MapFieldStateTest, MergeFromRepeatedDirty) { - MapFieldType other(default_entry_); + MapFieldType other; MakeRepeatedDirty(&other); map_field_->MergeFrom(other); @@ -372,7 +363,7 @@ TEST_P(MapFieldStateTest, MergeFromRepeatedDirty) { } TEST_P(MapFieldStateTest, SwapClean) { - MapFieldType other(default_entry_); + MapFieldType other; AddOneStillClean(&other); map_field_->Swap(&other); @@ -395,7 +386,7 @@ TEST_P(MapFieldStateTest, SwapClean) { } TEST_P(MapFieldStateTest, SwapMapDirty) { - MapFieldType other(default_entry_); + MapFieldType other; MakeMapDirty(&other); map_field_->Swap(&other); @@ -418,7 +409,7 @@ TEST_P(MapFieldStateTest, SwapMapDirty) { } TEST_P(MapFieldStateTest, SwapRepeatedDirty) { - MapFieldType other(default_entry_); + MapFieldType other; MakeRepeatedDirty(&other); map_field_->Swap(&other); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map_proto2_unittest.proto b/third_party/protobuf/3.2.0/src/google/protobuf/map_proto2_unittest.proto index e9360a5a687062..20d58f903fbaf0 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map_proto2_unittest.proto +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map_proto2_unittest.proto @@ -84,3 +84,8 @@ message TestMaps { map m_bool = 11; map m_string = 12; } + +// Test maps in submessages. +message TestSubmessageMaps { + optional TestMaps m = 1; +} diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map_test.cc b/third_party/protobuf/3.2.0/src/google/protobuf/map_test.cc index 43fe0f44474551..a06b432aa9e416 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map_test.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map_test.cc @@ -54,10 +54,13 @@ #include #include #include -#include #include +#include #include #include +#include +#include +#include #include #include #include @@ -70,12 +73,8 @@ #include #include #include -#include -#include -#include -#include #include -#include +#include #include #include #include @@ -97,17 +96,15 @@ void MapTestForceDeterministic() { // Map API Test ===================================================== -// Parameterized tests on whether to use old style maps. -class MapImplTest : public testing::TestWithParam { +class MapImplTest : public ::testing::Test { protected: MapImplTest() - : map_ptr_(new Map(GetParam())), + : map_ptr_(new Map()), map_(*map_ptr_), const_map_(*map_ptr_) { EXPECT_TRUE(map_.empty()); EXPECT_EQ(0, map_.size()); } - ~MapImplTest() {} void ExpectSingleElement(int32 key, int32 value) { EXPECT_FALSE(map_.empty()); @@ -178,7 +175,7 @@ class MapImplTest : public testing::TestWithParam { const Map& const_map_; }; -TEST_P(MapImplTest, OperatorBracket) { +TEST_F(MapImplTest, OperatorBracket) { int32 key = 0; int32 value1 = 100; int32 value2 = 101; @@ -192,7 +189,7 @@ TEST_P(MapImplTest, OperatorBracket) { ExpectSingleElement(key, value2); } -TEST_P(MapImplTest, OperatorBracketNonExist) { +TEST_F(MapImplTest, OperatorBracketNonExist) { int32 key = 0; int32 default_value = 0; @@ -200,7 +197,7 @@ TEST_P(MapImplTest, OperatorBracketNonExist) { ExpectSingleElement(key, default_value); } -TEST_P(MapImplTest, MutableAt) { +TEST_F(MapImplTest, MutableAt) { int32 key = 0; int32 value1 = 100; int32 value2 = 101; @@ -214,15 +211,15 @@ TEST_P(MapImplTest, MutableAt) { #ifdef PROTOBUF_HAS_DEATH_TEST -TEST_P(MapImplTest, MutableAtNonExistDeathTest) { +TEST_F(MapImplTest, MutableAtNonExistDeathTest) { EXPECT_DEATH(map_.at(0), ""); } -TEST_P(MapImplTest, ImmutableAtNonExistDeathTest) { +TEST_F(MapImplTest, ImmutableAtNonExistDeathTest) { EXPECT_DEATH(const_map_.at(0), ""); } -TEST_P(MapImplTest, UsageErrors) { +TEST_F(MapImplTest, UsageErrors) { MapKey key; key.SetInt64Value(1); EXPECT_DEATH(key.GetUInt64Value(), @@ -239,23 +236,23 @@ TEST_P(MapImplTest, UsageErrors) { #endif // PROTOBUF_HAS_DEATH_TEST -TEST_P(MapImplTest, CountNonExist) { +TEST_F(MapImplTest, CountNonExist) { EXPECT_EQ(0, map_.count(0)); } -TEST_P(MapImplTest, MutableFindNonExist) { +TEST_F(MapImplTest, MutableFindNonExist) { EXPECT_TRUE(map_.end() == map_.find(0)); } -TEST_P(MapImplTest, ImmutableFindNonExist) { +TEST_F(MapImplTest, ImmutableFindNonExist) { EXPECT_TRUE(const_map_.end() == const_map_.find(0)); } -TEST_P(MapImplTest, ConstEnd) { +TEST_F(MapImplTest, ConstEnd) { EXPECT_TRUE(const_map_.end() == const_map_.cend()); } -TEST_P(MapImplTest, GetReferenceFromIterator) { +TEST_F(MapImplTest, GetReferenceFromIterator) { for (int i = 0; i < 10; i++) { map_[i] = i; } @@ -278,7 +275,7 @@ TEST_P(MapImplTest, GetReferenceFromIterator) { } } -TEST_P(MapImplTest, IteratorBasic) { +TEST_F(MapImplTest, IteratorBasic) { map_[0] = 0; // Default constructible (per forward iterator requirements). @@ -320,10 +317,9 @@ static int k2 = 1321555333; // A naive begin() implementation will cause begin() to get slower and slower // if one erases elements at the "front" of the hash map, and we'd like to // avoid that, as std::unordered_map does. -TEST_P(MapImplTest, BeginIsFast) { - // Disable this test for both new and old implementations. - if (/*GetParam()*/true) return; - Map map(false); // This test uses new-style maps only. +TEST_F(MapImplTest, BeginIsFast) { + if (true) return; // TODO(gpike): make this less flaky and re-enable it. + Map map; const int kTestSize = 250000; // Create a random-looking map of size n. Use non-negative integer keys. uint32 frog = 123983; @@ -371,7 +367,7 @@ TEST_P(MapImplTest, BeginIsFast) { // Try to create kTestSize keys that will land in just a few buckets, and // time the insertions, to get a rough estimate of whether an O(n^2) worst case // was triggered. This test is a hacky, but probably better than nothing. -TEST_P(MapImplTest, HashFlood) { +TEST_F(MapImplTest, HashFlood) { const int kTestSize = 1024; // must be a power of 2 std::set s; for (int i = 0; s.size() < kTestSize; i++) { @@ -404,6 +400,22 @@ TEST_P(MapImplTest, HashFlood) { EXPECT_LE(x1, x0 * 20); } +TEST_F(MapImplTest, CopyIteratorStressTest) { + std::vector::iterator> v; + const int kIters = 1e5; + for (uint32 i = 0; i < kIters; i++) { + int32 key = (3 + i * (5 + i * (-8 + i * (62 + i)))) & 0x77777777; + map_[key] = i; + v.push_back(map_.find(key)); + } + for (std::vector::iterator>::const_iterator it = v.begin(); + it != v.end(); it++) { + Map::iterator i = *it; + ASSERT_EQ(i->first, (*it)->first); + ASSERT_EQ(i->second, (*it)->second); + } +} + template static void TestValidityForAllKeysExcept(int key_to_avoid, const T& check_map, @@ -468,11 +480,11 @@ static void TestOldVersusNewIterator(int skip, Map* m) { } // Create and test an n-element Map, with emphasis on iterator correctness. -static void StressTestIterators(int n, bool test_old_style_proto2_maps) { +static void StressTestIterators(int n) { GOOGLE_LOG(INFO) << "StressTestIterators " << n; GOOGLE_CHECK_GT(n, 0); // Create a random-looking map of size n. Use non-negative integer keys. - Map m(test_old_style_proto2_maps); + Map m; uint32 frog = 123987 + n; int last_key = 0; int counter = 0; @@ -530,10 +542,7 @@ static void StressTestIterators(int n, bool test_old_style_proto2_maps) { } } -TEST_P(MapImplTest, IteratorInvalidation) { - // As multiple underlying hash_map implementations do not follow the - // validation requirement, the test is disabled for old-style maps. - if (GetParam()) return; +TEST_F(MapImplTest, IteratorInvalidation) { // Create a set of pseudo-random sizes to test. #ifndef NDEBUG const int kMaxSizeToTest = 100 * 1000; @@ -555,15 +564,12 @@ TEST_P(MapImplTest, IteratorInvalidation) { s.insert(3); // Now, the real work. for (std::set::iterator i = s.begin(); i != s.end(); ++i) { - StressTestIterators(*i, GetParam()); + StressTestIterators(*i); } } // Test that erase() revalidates iterators. -TEST_P(MapImplTest, EraseRevalidates) { - // As multiple underlying hash_map implementations do not follow the - // validation requirement, the test is disabled for old-style maps. - if (GetParam()) return; +TEST_F(MapImplTest, EraseRevalidates) { map_[3] = map_[13] = map_[20] = 0; const int initial_size = map_.size(); EXPECT_EQ(3, initial_size); @@ -595,7 +601,7 @@ bool IsConstHelper(const T& /*t*/) { return true; } -TEST_P(MapImplTest, IteratorConstness) { +TEST_F(MapImplTest, IteratorConstness) { map_[0] = 0; EXPECT_TRUE(IsConstHelper(*map_.cbegin())); EXPECT_TRUE(IsConstHelper(*const_map_.begin())); @@ -608,14 +614,14 @@ bool IsForwardIteratorHelper(T /*t*/) { return false; } -TEST_P(MapImplTest, IteratorCategory) { +TEST_F(MapImplTest, IteratorCategory) { EXPECT_TRUE(IsForwardIteratorHelper( std::iterator_traits::iterator>::iterator_category())); EXPECT_TRUE(IsForwardIteratorHelper(std::iterator_traits< Map::const_iterator>::iterator_category())); } -TEST_P(MapImplTest, InsertSingle) { +TEST_F(MapImplTest, InsertSingle) { int32 key = 0; int32 value1 = 100; int32 value2 = 101; @@ -640,7 +646,7 @@ TEST_P(MapImplTest, InsertSingle) { EXPECT_FALSE(result2.second); } -TEST_P(MapImplTest, InsertByIterator) { +TEST_F(MapImplTest, InsertByIterator) { int32 key1 = 0; int32 key2 = 1; int32 value1a = 100; @@ -663,7 +669,7 @@ TEST_P(MapImplTest, InsertByIterator) { ExpectElements(map1); } -TEST_P(MapImplTest, EraseSingleByKey) { +TEST_F(MapImplTest, EraseSingleByKey) { int32 key = 0; int32 value = 100; @@ -681,7 +687,7 @@ TEST_P(MapImplTest, EraseSingleByKey) { EXPECT_EQ(0, map_.erase(key)); } -TEST_P(MapImplTest, EraseMutipleByKey) { +TEST_F(MapImplTest, EraseMutipleByKey) { // erase in one specific order to trigger corner cases for (int i = 0; i < 5; i++) { map_[i] = i; @@ -708,7 +714,7 @@ TEST_P(MapImplTest, EraseMutipleByKey) { EXPECT_TRUE(map_.end() == map_.find(2)); } -TEST_P(MapImplTest, EraseSingleByIterator) { +TEST_F(MapImplTest, EraseSingleByIterator) { int32 key = 0; int32 value = 100; @@ -723,7 +729,7 @@ TEST_P(MapImplTest, EraseSingleByIterator) { EXPECT_TRUE(map_.begin() == map_.end()); } -TEST_P(MapImplTest, ValidIteratorAfterErase) { +TEST_F(MapImplTest, ValidIteratorAfterErase) { for (int i = 0; i < 10; i++) { map_[i] = i; } @@ -743,7 +749,7 @@ TEST_P(MapImplTest, ValidIteratorAfterErase) { EXPECT_EQ(5, map_.size()); } -TEST_P(MapImplTest, EraseByIterator) { +TEST_F(MapImplTest, EraseByIterator) { int32 key1 = 0; int32 key2 = 1; int32 value1 = 100; @@ -764,7 +770,7 @@ TEST_P(MapImplTest, EraseByIterator) { EXPECT_TRUE(map_.begin() == map_.end()); } -TEST_P(MapImplTest, Clear) { +TEST_F(MapImplTest, Clear) { int32 key = 0; int32 value = 100; @@ -798,16 +804,16 @@ static void CopyConstructorHelper(Arena* arena, Map* m) { EXPECT_EQ(value2, other.at(key2)); } -TEST_P(MapImplTest, CopyConstructorWithArena) { +TEST_F(MapImplTest, CopyConstructorWithArena) { Arena a; CopyConstructorHelper(&a, &map_); } -TEST_P(MapImplTest, CopyConstructorWithoutArena) { +TEST_F(MapImplTest, CopyConstructorWithoutArena) { CopyConstructorHelper(NULL, &map_); } -TEST_P(MapImplTest, IterConstructor) { +TEST_F(MapImplTest, IterConstructor) { int32 key1 = 0; int32 key2 = 1; int32 value1 = 100; @@ -817,15 +823,14 @@ TEST_P(MapImplTest, IterConstructor) { map[key1] = value1; map[key2] = value2; - Map new_map(map.begin(), map.end(), - GetParam()); + Map new_map(map.begin(), map.end()); EXPECT_EQ(2, new_map.size()); EXPECT_EQ(value1, new_map.at(key1)); EXPECT_EQ(value2, new_map.at(key2)); } -TEST_P(MapImplTest, Assigner) { +TEST_F(MapImplTest, Assigner) { int32 key1 = 0; int32 key2 = 1; int32 value1 = 100; @@ -837,7 +842,7 @@ TEST_P(MapImplTest, Assigner) { map_.insert(map.begin(), map.end()); - Map other(GetParam()); + Map other; int32 key_other = 123; int32 value_other = 321; other[key_other] = value_other; @@ -855,16 +860,9 @@ TEST_P(MapImplTest, Assigner) { EXPECT_EQ(2, other.size()); EXPECT_EQ(value1, other.at(key1)); EXPECT_EQ(value2, other.at(key2)); - - // Try assignment to a map with a different choice of "style." - Map m(!GetParam()); - m = other; - EXPECT_EQ(2, m.size()); - EXPECT_EQ(value1, m.at(key1)); - EXPECT_EQ(value2, m.at(key2)); } -TEST_P(MapImplTest, Rehash) { +TEST_F(MapImplTest, Rehash) { const int test_size = 50; std::map reference_map; for (int i = 0; i < test_size; i++) { @@ -881,7 +879,7 @@ TEST_P(MapImplTest, Rehash) { EXPECT_TRUE(map_.empty()); } -TEST_P(MapImplTest, EqualRange) { +TEST_F(MapImplTest, EqualRange) { int key = 100, key_missing = 101; map_[key] = 100; @@ -905,14 +903,14 @@ TEST_P(MapImplTest, EqualRange) { EXPECT_TRUE(const_map_.end() == const_range.second); } -TEST_P(MapImplTest, ConvertToStdMap) { +TEST_F(MapImplTest, ConvertToStdMap) { map_[100] = 101; std::map std_map(map_.begin(), map_.end()); EXPECT_EQ(1, std_map.size()); EXPECT_EQ(101, std_map[100]); } -TEST_P(MapImplTest, ConvertToStdVectorOfPairs) { +TEST_F(MapImplTest, ConvertToStdVectorOfPairs) { map_[100] = 101; std::vector > std_vec(map_.begin(), map_.end()); EXPECT_EQ(1, std_vec.size()); @@ -920,8 +918,8 @@ TEST_P(MapImplTest, ConvertToStdVectorOfPairs) { EXPECT_EQ(101, std_vec[0].second); } -TEST_P(MapImplTest, SwapSameStyle) { - Map another(GetParam()); // same old_style_ value +TEST_F(MapImplTest, SwapBasic) { + Map another; map_[9398] = 41999; another[9398] = 41999; another[8070] = 42056; @@ -933,23 +931,10 @@ TEST_P(MapImplTest, SwapSameStyle) { testing::Pair(9398, 41999))); } -TEST_P(MapImplTest, SwapDifferentStyle) { - Map another(!GetParam()); // different old_style_ value - map_[9398] = 41999; - another[9398] = 41999; - another[8070] = 42056; - another.swap(map_); - EXPECT_THAT(another, testing::UnorderedElementsAre( - testing::Pair(9398, 41999))); - EXPECT_THAT(map_, testing::UnorderedElementsAre( - testing::Pair(8070, 42056), - testing::Pair(9398, 41999))); -} - -TEST_P(MapImplTest, SwapArena) { +TEST_F(MapImplTest, SwapArena) { Arena arena1, arena2; - Map m1(&arena1, false); - Map m2(&arena2, false); + Map m1(&arena1); + Map m2(&arena2); map_[9398] = 41999; m1[9398] = 41999; m1[8070] = 42056; @@ -969,8 +954,6 @@ TEST_P(MapImplTest, SwapArena) { testing::Pair(9398, 41999))); } -INSTANTIATE_TEST_CASE_P(BoolSequence, MapImplTest, testing::Bool()); - // Map Field Reflection Test ======================================== static int Func(int i, int j) { @@ -992,6 +975,11 @@ static int Int(const string& value) { class MapFieldReflectionTest : public testing::Test { protected: typedef FieldDescriptor FD; + + int MapSize(const Reflection* reflection, const FieldDescriptor* field, + const Message& message) { + return reflection->MapSize(message, field); + } }; TEST_F(MapFieldReflectionTest, RegularFields) { @@ -1799,6 +1787,50 @@ TEST_F(MapFieldReflectionTest, RepeatedFieldRefMergeFromAndSwap) { // TODO(teboring): add test for duplicated key } +TEST_F(MapFieldReflectionTest, MapSizeWithDuplicatedKey) { + // Dynamic Message + { + DynamicMessageFactory factory; + google::protobuf::scoped_ptr message( + factory.GetPrototype(unittest::TestMap::descriptor())->New()); + const Reflection* reflection = message->GetReflection(); + const FieldDescriptor* field = + unittest::TestMap::descriptor()->FindFieldByName("map_int32_int32"); + + Message* entry1 = reflection->AddMessage(message.get(), field); + Message* entry2 = reflection->AddMessage(message.get(), field); + + const Reflection* entry_reflection = entry1->GetReflection(); + const FieldDescriptor* key_field = + entry1->GetDescriptor()->FindFieldByName("key"); + entry_reflection->SetInt32(entry1, key_field, 1); + entry_reflection->SetInt32(entry2, key_field, 1); + + EXPECT_EQ(2, reflection->FieldSize(*message, field)); + EXPECT_EQ(1, MapSize(reflection, field, *message)); + } + + // Generated Message + { + unittest::TestMap message; + const Reflection* reflection = message.GetReflection(); + const FieldDescriptor* field = + message.GetDescriptor()->FindFieldByName("map_int32_int32"); + + Message* entry1 = reflection->AddMessage(&message, field); + Message* entry2 = reflection->AddMessage(&message, field); + + const Reflection* entry_reflection = entry1->GetReflection(); + const FieldDescriptor* key_field = + entry1->GetDescriptor()->FindFieldByName("key"); + entry_reflection->SetInt32(entry1, key_field, 1); + entry_reflection->SetInt32(entry2, key_field, 1); + + EXPECT_EQ(2, reflection->FieldSize(message, field)); + EXPECT_EQ(1, MapSize(reflection, field, message)); + } +} + // Generated Message Test =========================================== TEST(GeneratedMapFieldTest, Accessors) { @@ -2706,6 +2738,69 @@ TEST_F(MapFieldInDynamicMessageTest, RecursiveMap) { ASSERT_TRUE(to->ParseFromString(data)); } +TEST_F(MapFieldInDynamicMessageTest, MapValueReferernceValidAfterSerialize) { + google::protobuf::scoped_ptr message(map_prototype_->New()); + MapReflectionTester reflection_tester(map_descriptor_); + reflection_tester.SetMapFieldsViaMapReflection(message.get()); + + // Get value reference before serialization, so that we know the value is from + // map. + MapKey map_key; + MapValueRef map_val; + map_key.SetInt32Value(0); + reflection_tester.GetMapValueViaMapReflection( + message.get(), "map_int32_foreign_message", map_key, &map_val); + Message* submsg = map_val.MutableMessageValue(); + + // In previous implementation, calling SerializeToString will cause syncing + // from map to repeated field, which will invalidate the submsg we previously + // got. + string data; + message->SerializeToString(&data); + + const Reflection* submsg_reflection = submsg->GetReflection(); + const Descriptor* submsg_desc = submsg->GetDescriptor(); + const FieldDescriptor* submsg_field = submsg_desc->FindFieldByName("c"); + submsg_reflection->SetInt32(submsg, submsg_field, 128); + + message->SerializeToString(&data); + TestMap to; + to.ParseFromString(data); + EXPECT_EQ(128, to.map_int32_foreign_message().at(0).c()); +} + +TEST_F(MapFieldInDynamicMessageTest, MapEntryReferernceValidAfterSerialize) { + google::protobuf::scoped_ptr message(map_prototype_->New()); + MapReflectionTester reflection_tester(map_descriptor_); + reflection_tester.SetMapFieldsViaReflection(message.get()); + + // Get map entry before serialization, so that we know the it is from + // repeated field. + Message* map_entry = reflection_tester.GetMapEntryViaReflection( + message.get(), "map_int32_foreign_message", 0); + const Reflection* map_entry_reflection = map_entry->GetReflection(); + const Descriptor* map_entry_desc = map_entry->GetDescriptor(); + const FieldDescriptor* value_field = map_entry_desc->FindFieldByName("value"); + Message* submsg = + map_entry_reflection->MutableMessage(map_entry, value_field); + + // In previous implementation, calling SerializeToString will cause syncing + // from repeated field to map, which will invalidate the map_entry we + // previously got. + string data; + message->SerializeToString(&data); + + const Reflection* submsg_reflection = submsg->GetReflection(); + const Descriptor* submsg_desc = submsg->GetDescriptor(); + const FieldDescriptor* submsg_field = submsg_desc->FindFieldByName("c"); + submsg_reflection->SetInt32(submsg, submsg_field, 128); + + message->SerializeToString(&data); + TestMap to; + to.ParseFromString(data); + EXPECT_EQ(128, to.map_int32_foreign_message().at(0).c()); +} + // ReflectionOps Test =============================================== TEST(ReflectionOpsForMapFieldTest, MapSanityCheck) { @@ -2768,6 +2863,20 @@ TEST(ReflectionOpsForMapFieldTest, MapDiscardUnknownFields) { GetUnknownFields(message).field_count()); } +TEST(ReflectionOpsForMapFieldTest, IsInitialized) { + unittest::TestRequiredMessageMap map_message; + + // Add an uninitialized message. + (*map_message.mutable_map_field())[0]; + EXPECT_FALSE(ReflectionOps::IsInitialized(map_message)); + + // Initialize uninitialized message + (*map_message.mutable_map_field())[0].set_a(0); + (*map_message.mutable_map_field())[0].set_b(0); + (*map_message.mutable_map_field())[0].set_c(0); + EXPECT_TRUE(ReflectionOps::IsInitialized(map_message)); +} + // Wire Format Test ================================================= TEST(WireFormatForMapFieldTest, ParseMap) { @@ -2828,6 +2937,33 @@ TEST(WireFormatForMapFieldTest, SerializeMap) { EXPECT_TRUE(dynamic_data == generated_data); } +TEST(WireFormatForMapFieldTest, SerializeMapDynamicMessage) { + DynamicMessageFactory factory; + google::protobuf::scoped_ptr dynamic_message; + dynamic_message.reset( + factory.GetPrototype(unittest::TestMap::descriptor())->New()); + MapReflectionTester reflection_tester( + unittest::TestMap::descriptor()); + reflection_tester.SetMapFieldsViaReflection(dynamic_message.get()); + reflection_tester.ExpectMapFieldsSetViaReflection(*dynamic_message); + + unittest::TestMap generated_message; + MapTestUtil::SetMapFields(&generated_message); + MapTestUtil::ExpectMapFieldsSet(generated_message); + + string generated_data; + string dynamic_data; + + // Serialize. + generated_message.SerializeToString(&generated_data); + dynamic_message->SerializeToString(&dynamic_data); + + // Because map serialization doesn't guarantee order, we just compare + // serialized size here. This is enough to tell dynamic message doesn't miss + // anything in serialization. + EXPECT_TRUE(dynamic_data.size() == generated_data.size()); +} + TEST(WireFormatForMapFieldTest, MapParseHelpers) { string data; @@ -2980,6 +3116,27 @@ TEST(MapSerializationTest, Deterministic) { TestDeterministicSerialization(t, "golden_message_maps"); } +TEST(MapSerializationTest, DeterministicSubmessage) { + protobuf_unittest::TestSubmessageMaps p; + protobuf_unittest::TestMaps t; + const string filename = "golden_message_maps"; + string golden; + GOOGLE_CHECK_OK(File::GetContents( + TestSourceDir() + "/google/protobuf/testdata/" + filename, + &golden, true)); + t.ParseFromString(golden); + *(p.mutable_m()) = t; + std::vector v; + // Use multiple attempts to increase the chance of a failure if something is + // buggy. For example, each separate copy of a map might use a different + // randomly-chosen hash function. + const int kAttempts = 10; + for (int i = 0; i < kAttempts; i++) { + protobuf_unittest::TestSubmessageMaps q(p); + ASSERT_EQ(DeterministicSerialization(q), DeterministicSerialization(p)); + } +} + // Text Format Test ================================================= TEST(TextFormatMapTest, SerializeAndParse) { @@ -3058,7 +3215,7 @@ TEST(ArenaTest, ParsingAndSerializingNoHeapAllocation) { } // Use text format parsing and serializing to test reflection api. -TEST(ArenaTest, RelfectionInTextFormat) { +TEST(ArenaTest, ReflectionInTextFormat) { Arena arena; string data; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map_test_util.cc b/third_party/protobuf/3.2.0/src/google/protobuf/map_test_util.cc index 3dd6aae555f287..4d3ad6092f6b26 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map_test_util.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map_test_util.cc @@ -744,6 +744,22 @@ void MapReflectionTester::SetMapFieldsViaMapReflection( sub_foreign_message, foreign_c_, 1); } +void MapReflectionTester::GetMapValueViaMapReflection(Message* message, + const string& field_name, + const MapKey& map_key, + MapValueRef* map_val) { + const Reflection* reflection = message->GetReflection(); + EXPECT_FALSE(reflection->InsertOrLookupMapValue(message, F(field_name), + map_key, map_val)); +} + +Message* MapReflectionTester::GetMapEntryViaReflection(Message* message, + const string& field_name, + int index) { + const Reflection* reflection = message->GetReflection(); + return reflection->MutableRepeatedMessage(message, F(field_name), index); +} + void MapReflectionTester::ClearMapFieldsViaReflection( Message* message) { const Reflection* reflection = message->GetReflection(); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map_test_util.h b/third_party/protobuf/3.2.0/src/google/protobuf/map_test_util.h index deaf0f4f4b4fe4..15c6c2894640b3 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map_test_util.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map_test_util.h @@ -106,6 +106,11 @@ class MapReflectionTester { void ExpectClearViaReflection(const Message& message); void ExpectClearViaReflectionIterator(Message* message); void ExpectMapEntryClearViaReflection(Message* message); + void GetMapValueViaMapReflection(Message* message, + const string& field_name, + const MapKey& map_key, MapValueRef* map_val); + Message* GetMapEntryViaReflection(Message* message, const string& field_name, + int index); private: const FieldDescriptor* F(const string& name); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map_test_util_impl.h b/third_party/protobuf/3.2.0/src/google/protobuf/map_test_util_impl.h index b3ba4e06995286..ad4d1a3dd3691e 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map_test_util_impl.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map_test_util_impl.h @@ -33,14 +33,9 @@ #include #include +#include -#define EXPECT_TRUE GOOGLE_CHECK -#define ASSERT_TRUE GOOGLE_CHECK -#define EXPECT_FALSE(COND) GOOGLE_CHECK(!(COND)) -#define EXPECT_EQ GOOGLE_CHECK_EQ -#define ASSERT_EQ GOOGLE_CHECK_EQ - namespace google { namespace protobuf_unittest {} // forward declaration @@ -265,23 +260,23 @@ void MapTestUtilImpl::ExpectClear(const MapMessage& message) { template void MapTestUtilImpl::ExpectMapFieldsSet(const MapMessage& message) { - EXPECT_EQ(2, message.map_int32_int32().size()); - EXPECT_EQ(2, message.map_int64_int64().size()); - EXPECT_EQ(2, message.map_uint32_uint32().size()); - EXPECT_EQ(2, message.map_uint64_uint64().size()); - EXPECT_EQ(2, message.map_sint32_sint32().size()); - EXPECT_EQ(2, message.map_sint64_sint64().size()); - EXPECT_EQ(2, message.map_fixed32_fixed32().size()); - EXPECT_EQ(2, message.map_fixed64_fixed64().size()); - EXPECT_EQ(2, message.map_sfixed32_sfixed32().size()); - EXPECT_EQ(2, message.map_sfixed64_sfixed64().size()); - EXPECT_EQ(2, message.map_int32_float().size()); - EXPECT_EQ(2, message.map_int32_double().size()); - EXPECT_EQ(2, message.map_bool_bool().size()); - EXPECT_EQ(2, message.map_string_string().size()); - EXPECT_EQ(2, message.map_int32_bytes().size()); - EXPECT_EQ(2, message.map_int32_enum().size()); - EXPECT_EQ(2, message.map_int32_foreign_message().size()); + ASSERT_EQ(2, message.map_int32_int32().size()); + ASSERT_EQ(2, message.map_int64_int64().size()); + ASSERT_EQ(2, message.map_uint32_uint32().size()); + ASSERT_EQ(2, message.map_uint64_uint64().size()); + ASSERT_EQ(2, message.map_sint32_sint32().size()); + ASSERT_EQ(2, message.map_sint64_sint64().size()); + ASSERT_EQ(2, message.map_fixed32_fixed32().size()); + ASSERT_EQ(2, message.map_fixed64_fixed64().size()); + ASSERT_EQ(2, message.map_sfixed32_sfixed32().size()); + ASSERT_EQ(2, message.map_sfixed64_sfixed64().size()); + ASSERT_EQ(2, message.map_int32_float().size()); + ASSERT_EQ(2, message.map_int32_double().size()); + ASSERT_EQ(2, message.map_bool_bool().size()); + ASSERT_EQ(2, message.map_string_string().size()); + ASSERT_EQ(2, message.map_int32_bytes().size()); + ASSERT_EQ(2, message.map_int32_enum().size()); + ASSERT_EQ(2, message.map_int32_foreign_message().size()); EXPECT_EQ(0, message.map_int32_int32().at(0)); EXPECT_EQ(0, message.map_int64_int64().at(0)); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/map_type_handler.h b/third_party/protobuf/3.2.0/src/google/protobuf/map_type_handler.h index ac987cbc1c147d..301b37fed8ae2a 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/map_type_handler.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/map_type_handler.h @@ -186,9 +186,9 @@ class MapTypeHandler { static inline Type* EnsureMutable(Type** value, Arena* arena); // SpaceUsedInMapEntry: Return bytes used by value in MapEntry, excluding // those already calculate in sizeof(MapField). - static inline int SpaceUsedInMapEntry(const Type* value); + static inline size_t SpaceUsedInMapEntryLong(const Type* value); // Return bytes used by value in Map. - static inline int SpaceUsedInMap(const Type& value); + static inline size_t SpaceUsedInMapLong(const Type& value); // Assign default value to given instance. static inline void AssignDefaultValue(Type** value); // Return default instance if value is not initialized when calling const @@ -224,9 +224,7 @@ class MapTypeHandler { static inline void Write(int field, const MapEntryAccessorType& value, \ io::CodedOutputStream* output); \ static inline uint8* InternalWriteToArray( \ - int field, \ - const MapEntryAccessorType& value, \ - bool deterministic, \ + int field, const MapEntryAccessorType& value, bool deterministic, \ uint8* target); \ static inline uint8* WriteToArray(int field, \ const MapEntryAccessorType& value, \ @@ -242,9 +240,9 @@ class MapTypeHandler { static inline void ClearMaybeByDefaultEnum(TypeOnMemory* value, \ Arena* arena, \ int default_enum); \ - static inline int SpaceUsedInMapEntry(const TypeOnMemory& value); \ - static inline int SpaceUsedInMap(const TypeOnMemory& value); \ - static inline int SpaceUsedInMap(const string& value); \ + static inline size_t SpaceUsedInMapEntryLong(const TypeOnMemory& value); \ + static inline size_t SpaceUsedInMapLong(const TypeOnMemory& value); \ + static inline size_t SpaceUsedInMapLong(const string& value); \ static inline void AssignDefaultValue(TypeOnMemory* value); \ static inline const MapEntryAccessorType& DefaultIfNotInitialized( \ const TypeOnMemory& value, const TypeOnMemory& default_value); \ @@ -467,16 +465,15 @@ MapTypeHandler -inline int -MapTypeHandler::SpaceUsedInMapEntry(const Type* value) { - return value->SpaceUsed(); +inline size_t MapTypeHandler::SpaceUsedInMapEntryLong(const Type* value) { + return value->SpaceUsedLong(); } template -int MapTypeHandler::SpaceUsedInMap( +size_t MapTypeHandler::SpaceUsedInMapLong( const Type& value) { - return value.SpaceUsed(); + return value.SpaceUsedLong(); } template @@ -507,7 +504,7 @@ void MapTypeHandler::DeleteNoArena( template inline void MapTypeHandler::AssignDefaultValue(Type** value) { - *value = const_cast(&Type::default_instance()); + *value = const_cast(Type::internal_default_instance()); } template @@ -559,19 +556,21 @@ inline bool MapTypeHandler \ - inline int \ - MapTypeHandler::SpaceUsedInMapEntry( \ - const TypeOnMemory& value) { \ + inline size_t \ + MapTypeHandler::SpaceUsedInMapEntryLong(const TypeOnMemory& value) { \ return sizeof(value); \ } \ template \ - inline int MapTypeHandler::SpaceUsedInMap(const TypeOnMemory& value) { \ + inline size_t \ + MapTypeHandler::SpaceUsedInMapLong( \ + const TypeOnMemory& value) { \ return sizeof(value); \ } \ template \ - inline int MapTypeHandler::SpaceUsedInMap(const string& value) { \ + inline size_t \ + MapTypeHandler::SpaceUsedInMapLong( \ + const string& value) { \ return sizeof(value); \ } \ template \ @@ -647,14 +646,15 @@ STRING_OR_BYTES_HANDLER_FUNCTIONS(BYTES) return value; \ } \ template \ - inline int \ - MapTypeHandler::SpaceUsedInMapEntry( \ - const TypeOnMemory& value) { \ + inline size_t \ + MapTypeHandler::SpaceUsedInMapEntryLong(const TypeOnMemory& value) { \ return 0; \ } \ template \ - inline int MapTypeHandler::SpaceUsedInMap(const TypeOnMemory& value) { \ + inline size_t \ + MapTypeHandler::SpaceUsedInMapLong( \ + const TypeOnMemory& value) { \ return sizeof(Type); \ } \ template \ @@ -663,11 +663,9 @@ STRING_OR_BYTES_HANDLER_FUNCTIONS(BYTES) *value = 0; \ } \ template \ - inline void \ - MapTypeHandler::ClearMaybeByDefaultEnum(TypeOnMemory* value, \ - Arena* arena, \ - int default_enum_value) { \ + inline void MapTypeHandler:: \ + ClearMaybeByDefaultEnum(TypeOnMemory* value, Arena* arena, \ + int default_enum_value) { \ *value = static_cast(default_enum_value); \ } \ template \ @@ -688,11 +686,9 @@ STRING_OR_BYTES_HANDLER_FUNCTIONS(BYTES) *value = 0; \ } \ template \ - inline void \ - MapTypeHandler::InitializeMaybeByDefaultEnum(TypeOnMemory* value, \ - int default_enum_value, \ - Arena* arena) { \ + inline void MapTypeHandler:: \ + InitializeMaybeByDefaultEnum(TypeOnMemory* value, \ + int default_enum_value, Arena* arena) { \ *value = static_cast(default_enum_value); \ } \ template \ diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/message.cc b/third_party/protobuf/3.2.0/src/google/protobuf/message.cc index 6800e4cd55feeb..2134f95f1cb356 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/message.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/message.cc @@ -158,8 +158,8 @@ void Message::SetCachedSize(int /* size */) const { "Must implement one or the other."; } -int Message::SpaceUsed() const { - return GetReflection()->SpaceUsed(*this); +size_t Message::SpaceUsedLong() const { + return GetReflection()->SpaceUsedLong(*this); } bool Message::SerializeToFileDescriptor(int file_descriptor) const { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/message.h b/third_party/protobuf/3.2.0/src/google/protobuf/message.h index 4d14584ddb71c0..68acb5b13e8d9c 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/message.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/message.h @@ -154,6 +154,13 @@ class MapReflectionFriend; // scalar_map_container.h } +namespace internal { +class ReflectionOps; // reflection_ops.h +class MapKeySorter; // wire_format.cc +class WireFormat; // wire_format.h +class MapFieldReflectionTest; // map_test.cc +} + template class RepeatedField; // repeated_field.h @@ -245,7 +252,9 @@ class LIBPROTOBUF_EXPORT Message : public MessageLite { // using reflection (rather than the generated code implementation for // ByteSize()). Like ByteSize(), its CPU time is linear in the number of // fields defined for the proto. - virtual int SpaceUsed() const; + virtual size_t SpaceUsedLong() const; + + int SpaceUsed() const { return internal::ToIntSize(SpaceUsedLong()); } // Debugging & Testing---------------------------------------------- @@ -417,7 +426,11 @@ class LIBPROTOBUF_EXPORT Reflection { virtual UnknownFieldSet* MutableUnknownFields(Message* message) const = 0; // Estimate the amount of memory used by the message object. - virtual int SpaceUsed(const Message& message) const = 0; + virtual size_t SpaceUsedLong(const Message& message) const = 0; + + int SpaceUsed(const Message& message) const { + return internal::ToIntSize(SpaceUsedLong(message)); + } // Check if the given non-repeated field is set. virtual bool HasField(const Message& message, @@ -930,6 +943,10 @@ class LIBPROTOBUF_EXPORT Reflection { template friend class MutableRepeatedFieldRef; friend class ::google::protobuf::python::MapReflectionFriend; + friend class internal::MapFieldReflectionTest; + friend class internal::MapKeySorter; + friend class internal::WireFormat; + friend class internal::ReflectionOps; // Special version for specialized implementations of string. We can't call // MutableRawRepeatedField directly here because we don't have access to diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/message_lite.cc b/third_party/protobuf/3.2.0/src/google/protobuf/message_lite.cc index b8cb3f4c466564..fda84b516f3106 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/message_lite.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/message_lite.cc @@ -222,6 +222,11 @@ bool MessageLite::ParsePartialFromArray(const void* data, int size) { // =================================================================== +uint8* MessageLite::SerializeWithCachedSizesToArray(uint8* target) const { + return InternalSerializeWithCachedSizesToArray( + io::CodedOutputStream::IsDefaultSerializationDeterministic(), target); +} + uint8* MessageLite::InternalSerializeWithCachedSizesToArray( bool deterministic, uint8* target) const { // We only optimize this when using optimize_for = SPEED. In other cases diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/message_lite.h b/third_party/protobuf/3.2.0/src/google/protobuf/message_lite.h index 5e5ed306810a7b..046a736dc3599e 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/message_lite.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/message_lite.h @@ -42,6 +42,7 @@ #include #include #include +#include namespace google { @@ -248,11 +249,7 @@ class LIBPROTOBUF_EXPORT MessageLite { virtual size_t ByteSizeLong() const = 0; // Legacy ByteSize() API. - int ByteSize() const { - size_t result = ByteSizeLong(); - GOOGLE_DCHECK_LE(result, static_cast(INT_MAX)); - return static_cast(result); - } + int ByteSize() const { return internal::ToIntSize(ByteSizeLong()); } // Serializes the message without recomputing the size. The message must not // have changed since the last call to ByteSize(), and the value returned by @@ -260,11 +257,17 @@ class LIBPROTOBUF_EXPORT MessageLite { virtual void SerializeWithCachedSizes( io::CodedOutputStream* output) const = 0; - // A version of SerializeWithCachedSizesToArray, below, that does - // not guarantee deterministic serialization. - virtual uint8* SerializeWithCachedSizesToArray(uint8* target) const { - return InternalSerializeWithCachedSizesToArray(false, target); - } + // Functions below here are not part of the public interface. It isn't + // enforced, but they should be treated as private, and will be private + // at some future time. Unfortunately the implementation of the "friend" + // keyword in GCC is broken at the moment, but we expect it will be fixed. + + // Like SerializeWithCachedSizes, but writes directly to *target, returning + // a pointer to the byte immediately after the last byte written. "target" + // must point at a byte array of at least ByteSize() bytes. Whether to use + // deterministic serialization, e.g., maps in sorted order, is determined by + // CodedOutputStream::IsDefaultSerializationDeterministic(). + virtual uint8* SerializeWithCachedSizesToArray(uint8* target) const; // Returns the result of the last call to ByteSize(). An embedded message's // size is needed both to serialize it (because embedded messages are @@ -279,16 +282,6 @@ class LIBPROTOBUF_EXPORT MessageLite { // method.) virtual int GetCachedSize() const = 0; - // Functions below here are not part of the public interface. It isn't - // enforced, but they should be treated as private, and will be private - // at some future time. Unfortunately the implementation of the "friend" - // keyword in GCC is broken at the moment, but we expect it will be fixed. - - // Like SerializeWithCachedSizes, but writes directly to *target, returning - // a pointer to the byte immediately after the last byte written. "target" - // must point at a byte array of at least ByteSize() bytes. If deterministic - // is true then we use deterministic serialization, e.g., map keys are sorted. - // FOR INTERNAL USE ONLY! virtual uint8* InternalSerializeWithCachedSizesToArray(bool deterministic, uint8* target) const; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/message_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/message_unittest.cc index 2bbfe40a275162..41cb3d65c081a5 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/message_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/message_unittest.cc @@ -37,9 +37,7 @@ #include #include #include -#ifdef _MSC_VER -#include -#else +#ifndef _MSC_VER #include #endif #include @@ -64,6 +62,13 @@ namespace google { namespace protobuf { +#if defined(_WIN32) +// DO NOT include , instead create functions in io_win32.{h,cc} and import +// them like we do below. +using google::protobuf::stubs::close; +using google::protobuf::stubs::open; +#endif + #ifndef O_BINARY #ifdef _O_BINARY #define O_BINARY _O_BINARY @@ -552,6 +557,17 @@ TEST(MessageTest, MergeFrom) { ASSERT_EQ(0, dest.repeated_uint64_size()); } +TEST(MessageTest, IsInitialized) { + protobuf_unittest::TestIsInitialized msg; + EXPECT_TRUE(msg.IsInitialized()); + protobuf_unittest::TestIsInitialized::SubMessage* sub_message = msg.mutable_sub_message(); + EXPECT_TRUE(msg.IsInitialized()); + protobuf_unittest::TestIsInitialized::SubMessage::SubGroup* sub_group = sub_message->mutable_subgroup(); + EXPECT_FALSE(msg.IsInitialized()); + sub_group->set_i(1); + EXPECT_TRUE(msg.IsInitialized()); +} + TEST(MessageFactoryTest, GeneratedFactoryLookup) { EXPECT_EQ( MessageFactory::generated_factory()->GetPrototype( diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/metadata.h b/third_party/protobuf/3.2.0/src/google/protobuf/metadata.h index dca1fa453b6bbf..0a6507c0677df8 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/metadata.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/metadata.h @@ -38,134 +38,13 @@ #ifndef GOOGLE_PROTOBUF_METADATA_H__ #define GOOGLE_PROTOBUF_METADATA_H__ -#include -#include -#include -#include +#include #include namespace google { namespace protobuf { namespace internal { -// This is the representation for messages that support arena allocation. It -// uses a tagged pointer to either store the Arena pointer, if there are no -// unknown fields, or a pointer to a block of memory with both the Arena pointer -// and the UnknownFieldSet, if there are unknown fields. This optimization -// allows for "zero-overhead" storage of the Arena pointer, relative to the -// above baseline implementation. -// -// The tagged pointer uses the LSB to disambiguate cases, and uses bit 0 == 0 to -// indicate an arena pointer and bit 0 == 1 to indicate a UFS+Arena-container -// pointer. -template -class InternalMetadataWithArenaBase { - public: - InternalMetadataWithArenaBase() : ptr_(NULL) {} - explicit InternalMetadataWithArenaBase(Arena* arena) : ptr_(arena) {} - - ~InternalMetadataWithArenaBase() { - if (have_unknown_fields() && arena() == NULL) { - delete PtrValue(); - } - ptr_ = NULL; - } - - GOOGLE_ATTRIBUTE_ALWAYS_INLINE const T& unknown_fields() const { - if (GOOGLE_PREDICT_FALSE(have_unknown_fields())) { - return PtrValue()->unknown_fields; - } else { - return Derived::default_instance(); - } - } - - GOOGLE_ATTRIBUTE_ALWAYS_INLINE T* mutable_unknown_fields() { - if (GOOGLE_PREDICT_TRUE(have_unknown_fields())) { - return &PtrValue()->unknown_fields; - } else { - return mutable_unknown_fields_slow(); - } - } - - GOOGLE_ATTRIBUTE_ALWAYS_INLINE Arena* arena() const { - if (GOOGLE_PREDICT_FALSE(have_unknown_fields())) { - return PtrValue()->arena; - } else { - return PtrValue(); - } - } - - GOOGLE_ATTRIBUTE_ALWAYS_INLINE bool have_unknown_fields() const { - return PtrTag() == kTagContainer; - } - - GOOGLE_ATTRIBUTE_ALWAYS_INLINE void Swap(Derived* other) { - // Semantics here are that we swap only the unknown fields, not the arena - // pointer. We cannot simply swap ptr_ with other->ptr_ because we need to - // maintain our own arena ptr. Also, our ptr_ and other's ptr_ may be in - // different states (direct arena pointer vs. container with UFS) so we - // cannot simply swap ptr_ and then restore the arena pointers. We reuse - // UFS's swap implementation instead. - if (have_unknown_fields() || other->have_unknown_fields()) { - static_cast(this)->DoSwap(other->mutable_unknown_fields()); - } - } - - GOOGLE_ATTRIBUTE_ALWAYS_INLINE void MergeFrom(const Derived& other) { - if (other.have_unknown_fields()) { - static_cast(this)->DoMergeFrom(other.unknown_fields()); - } - } - - GOOGLE_ATTRIBUTE_ALWAYS_INLINE void Clear() { - if (have_unknown_fields()) { - static_cast(this)->DoClear(); - } - } - - GOOGLE_ATTRIBUTE_ALWAYS_INLINE void* raw_arena_ptr() const { - return ptr_; - } - - private: - void* ptr_; - - // Tagged pointer implementation. - enum { - // ptr_ is an Arena*. - kTagArena = 0, - // ptr_ is a Container*. - kTagContainer = 1, - }; - static const intptr_t kPtrTagMask = 1; - static const intptr_t kPtrValueMask = ~kPtrTagMask; - - // Accessors for pointer tag and pointer value. - GOOGLE_ATTRIBUTE_ALWAYS_INLINE int PtrTag() const { - return reinterpret_cast(ptr_) & kPtrTagMask; - } - - template U* PtrValue() const { - return reinterpret_cast( - reinterpret_cast(ptr_) & kPtrValueMask); - } - - // If ptr_'s tag is kTagContainer, it points to an instance of this struct. - struct Container { - T unknown_fields; - Arena* arena; - }; - - GOOGLE_ATTRIBUTE_NOINLINE T* mutable_unknown_fields_slow() { - Arena* my_arena = arena(); - Container* container = Arena::Create(my_arena); - ptr_ = reinterpret_cast( - reinterpret_cast(container) | kTagContainer); - container->arena = my_arena; - return &(container->unknown_fields); - } -}; - class InternalMetadataWithArena : public InternalMetadataWithArenaBase { @@ -192,36 +71,6 @@ class InternalMetadataWithArena } }; -// We store unknown fields as a string right now, because there is currently no -// good interface for reading unknown fields into an ArenaString. We may want -// to revisit this to allow unknown fields to be parsed onto the Arena. -class InternalMetadataWithArenaLite - : public InternalMetadataWithArenaBase { - public: - InternalMetadataWithArenaLite() {} - - explicit InternalMetadataWithArenaLite(Arena* arena) - : InternalMetadataWithArenaBase(arena) {} - - void DoSwap(string* other) { - mutable_unknown_fields()->swap(*other); - } - - void DoMergeFrom(const string& other) { - mutable_unknown_fields()->append(other); - } - - void DoClear() { - mutable_unknown_fields()->clear(); - } - - static const string& default_instance() { - return GetEmptyStringAlreadyInited(); - } -}; - } // namespace internal } // namespace protobuf diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/metadata_lite.h b/third_party/protobuf/3.2.0/src/google/protobuf/metadata_lite.h new file mode 100644 index 00000000000000..840c02e82e237e --- /dev/null +++ b/third_party/protobuf/3.2.0/src/google/protobuf/metadata_lite.h @@ -0,0 +1,193 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef GOOGLE_PROTOBUF_METADATA_LITE_H__ +#define GOOGLE_PROTOBUF_METADATA_LITE_H__ + +#include +#include +#include + +namespace google { +namespace protobuf { +namespace internal { + +// This is the representation for messages that support arena allocation. It +// uses a tagged pointer to either store the Arena pointer, if there are no +// unknown fields, or a pointer to a block of memory with both the Arena pointer +// and the UnknownFieldSet, if there are unknown fields. This optimization +// allows for "zero-overhead" storage of the Arena pointer, relative to the +// above baseline implementation. +// +// The tagged pointer uses the LSB to disambiguate cases, and uses bit 0 == 0 to +// indicate an arena pointer and bit 0 == 1 to indicate a UFS+Arena-container +// pointer. +template +class InternalMetadataWithArenaBase { + public: + InternalMetadataWithArenaBase() : ptr_(NULL) {} + explicit InternalMetadataWithArenaBase(Arena* arena) : ptr_(arena) {} + + ~InternalMetadataWithArenaBase() { + if (have_unknown_fields() && arena() == NULL) { + delete PtrValue(); + } + ptr_ = NULL; + } + + GOOGLE_ATTRIBUTE_ALWAYS_INLINE const T& unknown_fields() const { + if (GOOGLE_PREDICT_FALSE(have_unknown_fields())) { + return PtrValue()->unknown_fields; + } else { + return Derived::default_instance(); + } + } + + GOOGLE_ATTRIBUTE_ALWAYS_INLINE T* mutable_unknown_fields() { + if (GOOGLE_PREDICT_TRUE(have_unknown_fields())) { + return &PtrValue()->unknown_fields; + } else { + return mutable_unknown_fields_slow(); + } + } + + GOOGLE_ATTRIBUTE_ALWAYS_INLINE Arena* arena() const { + if (GOOGLE_PREDICT_FALSE(have_unknown_fields())) { + return PtrValue()->arena; + } else { + return PtrValue(); + } + } + + GOOGLE_ATTRIBUTE_ALWAYS_INLINE bool have_unknown_fields() const { + return PtrTag() == kTagContainer; + } + + GOOGLE_ATTRIBUTE_ALWAYS_INLINE void Swap(Derived* other) { + // Semantics here are that we swap only the unknown fields, not the arena + // pointer. We cannot simply swap ptr_ with other->ptr_ because we need to + // maintain our own arena ptr. Also, our ptr_ and other's ptr_ may be in + // different states (direct arena pointer vs. container with UFS) so we + // cannot simply swap ptr_ and then restore the arena pointers. We reuse + // UFS's swap implementation instead. + if (have_unknown_fields() || other->have_unknown_fields()) { + static_cast(this)->DoSwap(other->mutable_unknown_fields()); + } + } + + GOOGLE_ATTRIBUTE_ALWAYS_INLINE void MergeFrom(const Derived& other) { + if (other.have_unknown_fields()) { + static_cast(this)->DoMergeFrom(other.unknown_fields()); + } + } + + GOOGLE_ATTRIBUTE_ALWAYS_INLINE void Clear() { + if (have_unknown_fields()) { + static_cast(this)->DoClear(); + } + } + + GOOGLE_ATTRIBUTE_ALWAYS_INLINE void* raw_arena_ptr() const { + return ptr_; + } + + private: + void* ptr_; + + // Tagged pointer implementation. + enum { + // ptr_ is an Arena*. + kTagArena = 0, + // ptr_ is a Container*. + kTagContainer = 1, + }; + static const intptr_t kPtrTagMask = 1; + static const intptr_t kPtrValueMask = ~kPtrTagMask; + + // Accessors for pointer tag and pointer value. + GOOGLE_ATTRIBUTE_ALWAYS_INLINE int PtrTag() const { + return reinterpret_cast(ptr_) & kPtrTagMask; + } + + template U* PtrValue() const { + return reinterpret_cast( + reinterpret_cast(ptr_) & kPtrValueMask); + } + + // If ptr_'s tag is kTagContainer, it points to an instance of this struct. + struct Container { + T unknown_fields; + Arena* arena; + }; + + GOOGLE_ATTRIBUTE_NOINLINE T* mutable_unknown_fields_slow() { + Arena* my_arena = arena(); + Container* container = Arena::Create(my_arena); + ptr_ = reinterpret_cast( + reinterpret_cast(container) | kTagContainer); + container->arena = my_arena; + return &(container->unknown_fields); + } +}; + +// We store unknown fields as a string right now, because there is currently no +// good interface for reading unknown fields into an ArenaString. We may want +// to revisit this to allow unknown fields to be parsed onto the Arena. +class InternalMetadataWithArenaLite + : public InternalMetadataWithArenaBase { + public: + InternalMetadataWithArenaLite() {} + + explicit InternalMetadataWithArenaLite(Arena* arena) + : InternalMetadataWithArenaBase(arena) {} + + void DoSwap(string* other) { + mutable_unknown_fields()->swap(*other); + } + + void DoMergeFrom(const string& other) { + mutable_unknown_fields()->append(other); + } + + void DoClear() { + mutable_unknown_fields()->clear(); + } + + static const string& default_instance() { + return GetEmptyStringAlreadyInited(); + } +}; + +} // namespace internal +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_METADATA_LITE_H__ diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/reflection.h b/third_party/protobuf/3.2.0/src/google/protobuf/reflection.h index d5a6653cb9f82c..fcb9a435592385 100755 --- a/third_party/protobuf/3.2.0/src/google/protobuf/reflection.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/reflection.h @@ -570,8 +570,8 @@ struct RefTypeTraits< typedef RepeatedFieldRefIterator iterator; typedef RepeatedFieldAccessor AccessorType; typedef string AccessorValueType; - typedef string IteratorValueType; - typedef string* IteratorPointerType; + typedef const string IteratorValueType; + typedef const string* IteratorPointerType; static const FieldDescriptor::CppType cpp_type = FieldDescriptor::CPPTYPE_STRING; static const Descriptor* GetMessageFieldDescriptor() { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/reflection_ops.cc b/third_party/protobuf/3.2.0/src/google/protobuf/reflection_ops.cc index bb9c7f8bff7846..d1867311848f96 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/reflection_ops.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/reflection_ops.cc @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -158,6 +159,27 @@ bool ReflectionOps::IsInitialized(const Message& message) { const FieldDescriptor* field = fields[i]; if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) { + if (field->is_map()) { + const FieldDescriptor* value_field = field->message_type()->field(1); + if (value_field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) { + MapFieldBase* map_field = + reflection->MapData(const_cast(&message), field); + if (map_field->IsMapValid()) { + MapIterator iter(const_cast(&message), field); + MapIterator end(const_cast(&message), field); + for (map_field->MapBegin(&iter), map_field->MapEnd(&end); + iter != end; ++iter) { + if (!iter.GetValueRef().GetMessageValue().IsInitialized()) { + return false; + } + } + continue; + } + } else { + continue; + } + } + if (field->is_repeated()) { int size = reflection->FieldSize(message, field); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/reflection_ops_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/reflection_ops_unittest.cc index 864531701aedab..9cedb34229fa03 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/reflection_ops_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/reflection_ops_unittest.cc @@ -41,6 +41,7 @@ #include #include #include + #include namespace google { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/repeated_field.h b/third_party/protobuf/3.2.0/src/google/protobuf/repeated_field.h index db5893b50131aa..a1013f6359c10c 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/repeated_field.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/repeated_field.h @@ -51,8 +51,9 @@ #include #endif -#include #include +#include +#include #include #include #include @@ -76,6 +77,8 @@ class Message; namespace internal { +class MergePartialFromCodedStreamHelper; + static const int kMinRepeatedFieldAllocationSize = 4; // A utility function for logging that doesn't need any template types. @@ -155,6 +158,7 @@ class RepeatedField PROTOBUF_FINAL { // The new element is uninitialized if |Element| is a POD type. // Should be called only if Capacity() > Size(). Element* AddAlreadyReserved(); + Element* AddNAlreadyReserved(int elements); int Capacity() const; // Like STL resize. Uses value to fill appended elements. @@ -216,7 +220,11 @@ class RepeatedField PROTOBUF_FINAL { // Returns the number of bytes used by the repeated field, excluding // sizeof(*this) - int SpaceUsedExcludingSelf() const; + size_t SpaceUsedExcludingSelfLong() const; + + int SpaceUsedExcludingSelf() const { + return internal::ToIntSize(SpaceUsedExcludingSelfLong()); + } // Removes the element referenced by position. // @@ -238,6 +246,11 @@ class RepeatedField PROTOBUF_FINAL { return GetArenaNoVirtual(); } + // For internal use only. + // + // This is public due to it being called by generated code. + inline void InternalSwap(RepeatedField* other); + private: static const int kInitialSize = 0; // A note on the representation here (see also comment below for @@ -276,8 +289,6 @@ class RepeatedField PROTOBUF_FINAL { // Copy the elements of |from| into |to|. void CopyArray(Element* to, const Element* from, int size); - inline void InternalSwap(RepeatedField* other); - // Internal helper expected by Arena methods. inline Arena* GetArenaNoVirtual() const { return (rep_ == NULL) ? NULL : rep_->arena; @@ -291,7 +302,7 @@ class RepeatedField PROTOBUF_FINAL { Element* e = &rep->elements[0]; Element* limit = &rep->elements[size]; for (; e < limit; e++) { - e->Element::~Element(); + e->~Element(); } if (rep->arena == NULL) { #if defined(__GXX_DELETE_WITH_SIZE__) || defined(__cpp_sized_deallocation) @@ -303,6 +314,9 @@ class RepeatedField PROTOBUF_FINAL { } } } + + friend class internal::WireFormatLite; + const Element* unsafe_data() const; }; template @@ -321,7 +335,8 @@ namespace internal { // shouldn't be necessary, but our compiler doesn't optimize std::copy very // effectively. template ::value> + bool HasTrivialCopy = + has_trivial_copy::value> struct ElementCopier { void operator()(Element* to, const Element* from, int array_size); }; @@ -335,8 +350,8 @@ namespace internal { // exist on the contained type. In particular, we rely on MergeFrom() existing // as a general proxy for the fact that a copy will work, and we also provide a // specific override for string*. -template -struct TypeImplementsMergeBehavior { +template +struct TypeImplementsMergeBehaviorProbeForMergeFrom { typedef char HasMerge; typedef long HasNoMerge; @@ -360,8 +375,13 @@ struct TypeImplementsMergeBehavior { (sizeof(Check(0)) == sizeof(HasMerge))> type; }; -template<> -struct TypeImplementsMergeBehavior< ::std::string > { +template +struct TypeImplementsMergeBehavior : + TypeImplementsMergeBehaviorProbeForMergeFrom {}; + + +template <> +struct TypeImplementsMergeBehavior< ::std::string> { typedef google::protobuf::internal::true_type type; }; @@ -379,7 +399,7 @@ struct TypeImplementsMergeBehavior< ::std::string > { // static void Merge(const Type& from, Type* to); // // // Only needs to be implemented if SpaceUsedExcludingSelf() is called. -// static int SpaceUsed(const Type&); +// static int SpaceUsedLong(const Type&); // }; class LIBPROTOBUF_EXPORT RepeatedPtrFieldBase { protected: @@ -389,10 +409,10 @@ class LIBPROTOBUF_EXPORT RepeatedPtrFieldBase { friend class GeneratedMessageReflection; // ExtensionSet stores repeated message extensions as - // RepeatedPtrField, but non-lite ExtensionSets need to - // implement SpaceUsed(), and thus need to call SpaceUsedExcludingSelf() - // reinterpreting MessageLite as Message. ExtensionSet also needs to make - // use of AddFromCleared(), which is not part of the public interface. + // RepeatedPtrField, but non-lite ExtensionSets need to implement + // SpaceUsedLong(), and thus need to call SpaceUsedExcludingSelfLong() + // reinterpreting MessageLite as Message. ExtensionSet also needs to make use + // of AddFromCleared(), which is not part of the public interface. friend class ExtensionSet; // The MapFieldBase implementation needs to call protected methods directly, @@ -400,6 +420,10 @@ class LIBPROTOBUF_EXPORT RepeatedPtrFieldBase { // subclass. friend class MapFieldBase; + // The table-driven MergePartialFromCodedStream implementation needs to + // operate on RepeatedPtrField. + friend class MergePartialFromCodedStreamHelper; + // To parse directly into a proto2 generated class, the upb class GMR_Handlers // needs to be able to modify a RepeatedPtrFieldBase directly. friend class upb::google_opensource::GMR_Handlers; @@ -426,7 +450,7 @@ class LIBPROTOBUF_EXPORT RepeatedPtrFieldBase { #if LANG_CXX11 template void Add(typename TypeHandler::Type&& value, - std::enable_if* dummy = NULL); + internal::enable_if* dummy = NULL); #endif template @@ -459,7 +483,7 @@ class LIBPROTOBUF_EXPORT RepeatedPtrFieldBase { void SwapElements(int index1, int index2); template - int SpaceUsedExcludingSelf() const; + size_t SpaceUsedExcludingSelfLong() const; // Advanced memory management -------------------------------------- @@ -583,14 +607,12 @@ class GenericTypeHandler { #if LANG_CXX11 static const bool Moveable = false; #endif + static inline GenericType* New(Arena* arena) { return ::google::protobuf::Arena::CreateMaybeMessage( arena, static_cast(0)); } - // We force NewFromPrototype() to be non-inline to reduce code size: - // else, several other methods get inlined copies of message types' - // constructors. - GOOGLE_ATTRIBUTE_NOINLINE static GenericType* NewFromPrototype( + static inline GenericType* NewFromPrototype( const GenericType* prototype, ::google::protobuf::Arena* arena = NULL); static inline void Delete(GenericType* value, Arena* arena) { if (arena == NULL) { @@ -607,8 +629,8 @@ class GenericTypeHandler { static inline void Clear(GenericType* value) { value->Clear(); } GOOGLE_ATTRIBUTE_NOINLINE static void Merge(const GenericType& from, GenericType* to); - static inline int SpaceUsed(const GenericType& value) { - return value.SpaceUsed(); + static inline size_t SpaceUsedLong(const GenericType& value) { + return value.SpaceUsedLong(); } static inline const Type& default_instance() { return Type::default_instance(); @@ -626,11 +648,9 @@ void GenericTypeHandler::Merge(const GenericType& from, to->MergeFrom(from); } -// NewFromPrototype() and Merge() cannot be defined here; if they're declared -// inline the compiler will complain about not matching GOOGLE_ATTRIBUTE_NOINLINE -// above, and if not, compilation will result in multiple definitions. These -// are therefore declared as specializations here and defined in -// message_lite.cc. +// NewFromPrototype() and Merge() are not defined inline here, as we will need +// to do a virtual function dispatch anyways to go from Message* to call +// New/Merge. template<> MessageLite* GenericTypeHandler::NewFromPrototype( const MessageLite* prototype, google::protobuf::Arena* arena); @@ -708,7 +728,7 @@ class StringTypeHandler { return Arena::Create(arena); } #if LANG_CXX11 - static inline string* New(Arena* arena, std::string&& value) { + static inline string* New(Arena* arena, string&& value) { return Arena::Create(arena, std::move(value)); } #endif @@ -732,12 +752,11 @@ class StringTypeHandler { static inline const Type& default_instance() { return ::google::protobuf::internal::GetEmptyString(); } - static int SpaceUsed(const string& value) { - return static_cast(sizeof(value)) + StringSpaceUsedExcludingSelf(value); + static size_t SpaceUsedLong(const string& value) { + return sizeof(value) + StringSpaceUsedExcludingSelfLong(value); } }; - } // namespace internal // RepeatedPtrField is like RepeatedField, but used for repeated strings or @@ -842,10 +861,11 @@ class RepeatedPtrField PROTOBUF_FINAL : public internal::RepeatedPtrFieldBase { // Custom STL-like iterator that iterates over and returns the underlying // pointers to Element rather than Element itself. - typedef internal::RepeatedPtrOverPtrsIterator - pointer_iterator; - typedef internal::RepeatedPtrOverPtrsIterator - const_pointer_iterator; + typedef internal::RepeatedPtrOverPtrsIterator + pointer_iterator; + typedef internal::RepeatedPtrOverPtrsIterator + const_pointer_iterator; pointer_iterator pointer_begin(); const_pointer_iterator pointer_begin() const; pointer_iterator pointer_end(); @@ -853,7 +873,11 @@ class RepeatedPtrField PROTOBUF_FINAL : public internal::RepeatedPtrFieldBase { // Returns (an estimate of) the number of bytes used by the repeated field, // excluding sizeof(*this). - int SpaceUsedExcludingSelf() const; + size_t SpaceUsedExcludingSelfLong() const; + + int SpaceUsedExcludingSelf() const { + return internal::ToIntSize(SpaceUsedExcludingSelfLong()); + } // Advanced memory management -------------------------------------- // When hardcore memory management becomes necessary -- as it sometimes @@ -970,6 +994,11 @@ class RepeatedPtrField PROTOBUF_FINAL : public internal::RepeatedPtrFieldBase { return GetArenaNoVirtual(); } + // For internal use only. + // + // This is public due to it being called by generated code. + using RepeatedPtrFieldBase::InternalSwap; + private: // Note: RepeatedPtrField SHOULD NOT be subclassed by users. class TypeHandler; @@ -1088,6 +1117,14 @@ inline Element* RepeatedField::AddAlreadyReserved() { return &rep_->elements[current_size_++]; } +template +inline Element* RepeatedField::AddNAlreadyReserved(int elements) { + GOOGLE_DCHECK_LE(current_size_ + elements, total_size_); + Element* ret = &rep_->elements[current_size_]; + current_size_ += elements; + return ret; +} + template inline void RepeatedField::Resize(int new_size, const Element& value) { GOOGLE_DCHECK_GE(new_size, 0); @@ -1208,9 +1245,17 @@ inline const Element* RepeatedField::data() const { return rep_ ? rep_->elements : NULL; } +template +inline const Element* RepeatedField::unsafe_data() const { + GOOGLE_DCHECK(rep_); + return rep_->elements; +} template inline void RepeatedField::InternalSwap(RepeatedField* other) { + GOOGLE_DCHECK(this != other); + GOOGLE_DCHECK(GetArenaNoVirtual() == other->GetArenaNoVirtual()); + std::swap(rep_, other->rep_); std::swap(current_size_, other->current_size_); std::swap(total_size_, other->total_size_); @@ -1219,7 +1264,7 @@ inline void RepeatedField::InternalSwap(RepeatedField* other) { template void RepeatedField::Swap(RepeatedField* other) { if (this == other) return; - if (GetArenaNoVirtual() == other->GetArenaNoVirtual()) { + if (GetArenaNoVirtual() == other->GetArenaNoVirtual()) { InternalSwap(other); } else { RepeatedField temp(other->GetArenaNoVirtual()); @@ -1232,7 +1277,6 @@ void RepeatedField::Swap(RepeatedField* other) { template void RepeatedField::UnsafeArenaSwap(RepeatedField* other) { if (this == other) return; - GOOGLE_DCHECK(GetArenaNoVirtual() == other->GetArenaNoVirtual()); InternalSwap(other); } @@ -1274,9 +1318,8 @@ RepeatedField::cend() const { } template -inline int RepeatedField::SpaceUsedExcludingSelf() const { - return rep_ ? - (total_size_ * sizeof(Element) + kRepHeaderSize) : 0; +inline size_t RepeatedField::SpaceUsedExcludingSelfLong() const { + return rep_ ? (total_size_ * sizeof(Element) + kRepHeaderSize) : 0; } // Avoid inlining of Reserve(): new, copy, and delete[] lead to a significant @@ -1288,9 +1331,9 @@ void RepeatedField::Reserve(int new_size) { Arena* arena = GetArenaNoVirtual(); new_size = std::max(google::protobuf::internal::kMinRepeatedFieldAllocationSize, std::max(total_size_ * 2, new_size)); - GOOGLE_CHECK_LE(static_cast(new_size), - (std::numeric_limits::max() - kRepHeaderSize) / - sizeof(Element)) + GOOGLE_DCHECK_LE( + static_cast(new_size), + (std::numeric_limits::max() - kRepHeaderSize) / sizeof(Element)) << "Requested size is too large to fit into size_t."; size_t bytes = kRepHeaderSize + sizeof(Element) * new_size; if (arena == NULL) { @@ -1476,9 +1519,10 @@ inline typename TypeHandler::Type* RepeatedPtrFieldBase::Add( template inline void RepeatedPtrFieldBase::Add( typename TypeHandler::Type&& value, - std::enable_if*) { + internal::enable_if*) { if (rep_ != NULL && current_size_ < rep_->allocated_size) { - cast(rep_->elements[current_size_++]) = std::move(value); + *cast(rep_->elements[current_size_++]) = std::move(value); + return; } if (!rep_ || rep_->allocated_size == total_size_) { Reserve(total_size_ + 1); @@ -1606,11 +1650,11 @@ inline void RepeatedPtrFieldBase::SwapElements(int index1, int index2) { } template -inline int RepeatedPtrFieldBase::SpaceUsedExcludingSelf() const { - int allocated_bytes = total_size_ * sizeof(void*); +inline size_t RepeatedPtrFieldBase::SpaceUsedExcludingSelfLong() const { + size_t allocated_bytes = total_size_ * sizeof(void*); if (rep_ != NULL) { for (int i = 0; i < rep_->allocated_size; ++i) { - allocated_bytes += TypeHandler::SpaceUsed( + allocated_bytes += TypeHandler::SpaceUsedLong( *cast(rep_->elements[i])); } allocated_bytes += kRepHeaderSize; @@ -1819,7 +1863,6 @@ class RepeatedPtrField::TypeHandler : public internal::StringTypeHandler { }; - template inline RepeatedPtrField::RepeatedPtrField() : RepeatedPtrFieldBase() {} @@ -2036,7 +2079,6 @@ inline void RepeatedPtrField::Swap(RepeatedPtrField* other) { template inline void RepeatedPtrField::UnsafeArenaSwap( RepeatedPtrField* other) { - GOOGLE_DCHECK(GetArenaNoVirtual() == other->GetArenaNoVirtual()); if (this == other) return; RepeatedPtrFieldBase::InternalSwap(other); @@ -2053,8 +2095,8 @@ inline Arena* RepeatedPtrField::GetArenaNoVirtual() const { } template -inline int RepeatedPtrField::SpaceUsedExcludingSelf() const { - return RepeatedPtrFieldBase::SpaceUsedExcludingSelf(); +inline size_t RepeatedPtrField::SpaceUsedExcludingSelfLong() const { + return RepeatedPtrFieldBase::SpaceUsedExcludingSelfLong(); } template @@ -2212,18 +2254,17 @@ class RepeatedPtrIterator // the array. // The VoidPtr template parameter holds the type-agnostic pointer value // referenced by the iterator. It should either be "void *" for a mutable -// iterator, or "const void *" for a constant iterator. -template +// iterator, or "const void* const" for a constant iterator. +template class RepeatedPtrOverPtrsIterator - : public std::iterator { + : public std::iterator { public: typedef RepeatedPtrOverPtrsIterator iterator; - typedef std::iterator< - std::random_access_iterator_tag, Element*> superclass; + typedef std::iterator superclass; // Shadow the value_type in std::iterator<> because const_iterator::value_type // needs to be T, not const T. - typedef typename remove_const::type value_type; + typedef typename remove_const::type value_type; // Let the compiler know that these are type names, so we don't have to // write "typename" in front of them everywhere. @@ -2235,7 +2276,7 @@ class RepeatedPtrOverPtrsIterator explicit RepeatedPtrOverPtrsIterator(VoidPtr* it) : it_(it) {} // dereferenceable - reference operator*() const { return *reinterpret_cast(it_); } + reference operator*() const { return *reinterpret_cast(it_); } pointer operator->() const { return &(operator*()); } // {inc,dec}rementable @@ -2291,6 +2332,9 @@ class RepeatedPtrOverPtrsIterator }; void RepeatedPtrFieldBase::InternalSwap(RepeatedPtrFieldBase* other) { + GOOGLE_DCHECK(this != other); + GOOGLE_DCHECK(GetArenaNoVirtual() == other->GetArenaNoVirtual()); + std::swap(rep_, other->rep_); std::swap(current_size_, other->current_size_); std::swap(total_size_, other->total_size_); @@ -2337,7 +2381,7 @@ RepeatedPtrField::pointer_begin() { template inline typename RepeatedPtrField::const_pointer_iterator RepeatedPtrField::pointer_begin() const { - return const_pointer_iterator(const_cast(raw_mutable_data())); + return const_pointer_iterator(const_cast(raw_data())); } template inline typename RepeatedPtrField::pointer_iterator @@ -2348,7 +2392,7 @@ template inline typename RepeatedPtrField::const_pointer_iterator RepeatedPtrField::pointer_end() const { return const_pointer_iterator( - const_cast(raw_mutable_data() + size())); + const_cast(raw_data() + size())); } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/repeated_field_reflection_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/repeated_field_reflection_unittest.cc index fcebe5ce3383c0..fd46656540186f 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/repeated_field_reflection_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/repeated_field_reflection_unittest.cc @@ -189,8 +189,8 @@ TEST(RepeatedFieldReflectionTest, ExtensionFields) { } } -template -void TestRepeatedFieldRefIterator( +template +void TestRepeatedFieldRefIteratorForPrimitive( const Ref& handle, const MessageType& message, ValueType (MessageType::*GetFunc)(int) const) { int index = 0; @@ -202,6 +202,21 @@ void TestRepeatedFieldRefIterator( EXPECT_EQ(handle.size(), index); } +template +void TestRepeatedFieldRefIteratorForString( + const RepeatedFieldRef& handle, const MessageType& message, + ValueType (MessageType::*GetFunc)(int) const) { + int index = 0; + for (typename RepeatedFieldRef::const_iterator it = handle.begin(); + it != handle.end(); ++it) { + // Test both operator* and operator-> + EXPECT_EQ((message.*GetFunc)(index), *it); + EXPECT_EQ((message.*GetFunc)(index).size(), it->size()); + ++index; + } + EXPECT_EQ(handle.size(), index); +} + TEST(RepeatedFieldReflectionTest, RepeatedFieldRefForRegularFields) { TestAllTypes message; const Reflection* refl = message.GetReflection(); @@ -312,12 +327,12 @@ TEST(RepeatedFieldReflectionTest, RepeatedFieldRefForRegularFields) { } // Test iterators. - TestRepeatedFieldRefIterator(rf_int32, message, - &TestAllTypes::repeated_int32); - TestRepeatedFieldRefIterator(rf_double, message, - &TestAllTypes::repeated_double); - TestRepeatedFieldRefIterator(rf_string, message, - &TestAllTypes::repeated_string); + TestRepeatedFieldRefIteratorForPrimitive(rf_int32, message, + &TestAllTypes::repeated_int32); + TestRepeatedFieldRefIteratorForPrimitive(rf_double, message, + &TestAllTypes::repeated_double); + TestRepeatedFieldRefIteratorForString(rf_string, message, + &TestAllTypes::repeated_string); // Test iterators for message fields. typedef RepeatedFieldRef::iterator MessageIterator; @@ -474,10 +489,10 @@ TEST(RepeatedFieldReflectionTest, RepeatedFieldRefForEnums) { EXPECT_EQ(TestAllTypes::BAZ, message.repeated_nested_enum(i)); } - TestRepeatedFieldRefIterator(enum_ref, message, - &TestAllTypes::repeated_nested_enum); - TestRepeatedFieldRefIterator(int32_ref, message, - &TestAllTypes::repeated_nested_enum); + TestRepeatedFieldRefIteratorForPrimitive(enum_ref, message, + &TestAllTypes::repeated_nested_enum); + TestRepeatedFieldRefIteratorForPrimitive(int32_ref, message, + &TestAllTypes::repeated_nested_enum); // Test Add() mutable_enum_ref.Add(TestAllTypes::FOO); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/repeated_field_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/repeated_field_unittest.cc index ec1074c9cec16d..043cc746d54667 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/repeated_field_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/repeated_field_unittest.cc @@ -45,9 +45,9 @@ #include #include #include -#include #include #include +#include #include namespace google { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/source_context.pb.cc b/third_party/protobuf/3.2.0/src/google/protobuf/source_context.pb.cc index 50e17da16d8866..3244444aa414f0 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/source_context.pb.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/source_context.pb.cc @@ -31,11 +31,26 @@ ::google::protobuf::Metadata file_level_metadata[1]; } // namespace +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField + const TableStruct::entries[] = { + {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0}, +}; + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField + const TableStruct::aux[] = { + ::google::protobuf::internal::AuxillaryParseTableField(), +}; +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const + TableStruct::schema[] = { + { NULL, NULL, 0, -1, -1, false }, +}; + const ::google::protobuf::uint32 TableStruct::offsets[] = { ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SourceContext, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SourceContext, file_name_), }; @@ -165,7 +180,7 @@ void SourceContext::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* SourceContext::descriptor() { protobuf_google_2fprotobuf_2fsource_5fcontext_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fsource_5fcontext_2eproto::file_level_metadata[0].descriptor; + return protobuf_google_2fprotobuf_2fsource_5fcontext_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const SourceContext& SourceContext::default_instance() { @@ -236,6 +251,9 @@ bool SourceContext::MergePartialFromCodedStream( void SourceContext::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.SourceContext) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string file_name = 1; if (this->file_name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -251,8 +269,10 @@ void SourceContext::SerializeWithCachedSizes( ::google::protobuf::uint8* SourceContext::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.SourceContext) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string file_name = 1; if (this->file_name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -305,6 +325,9 @@ void SourceContext::MergeFrom(const SourceContext& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.SourceContext) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.file_name().size() > 0) { file_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.file_name_); @@ -340,7 +363,7 @@ void SourceContext::InternalSwap(SourceContext* other) { ::google::protobuf::Metadata SourceContext::GetMetadata() const { protobuf_google_2fprotobuf_2fsource_5fcontext_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fsource_5fcontext_2eproto::file_level_metadata[0]; + return protobuf_google_2fprotobuf_2fsource_5fcontext_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -368,6 +391,7 @@ void SourceContext::set_file_name(::std::string&& value) { } #endif void SourceContext::set_file_name(const char* value) { + GOOGLE_DCHECK(value != NULL); file_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.SourceContext.file_name) diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/source_context.pb.h b/third_party/protobuf/3.2.0/src/google/protobuf/source_context.pb.h index 10888385a574cd..23cd7f3ec25bc6 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/source_context.pb.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/source_context.pb.h @@ -8,12 +8,12 @@ #include -#if GOOGLE_PROTOBUF_VERSION < 3002000 +#if GOOGLE_PROTOBUF_VERSION < 3003000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3002000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -43,6 +44,9 @@ namespace protobuf { namespace protobuf_google_2fprotobuf_2fsource_5fcontext_2eproto { // Internal implementation detail -- do not call these. struct LIBPROTOBUF_EXPORT TableStruct { + static const ::google::protobuf::internal::ParseTableField entries[]; + static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; + static const ::google::protobuf::internal::ParseTable schema[]; static const ::google::protobuf::uint32 offsets[]; static void InitDefaultsImpl(); static void Shutdown(); @@ -72,6 +76,8 @@ class LIBPROTOBUF_EXPORT SourceContext : public ::google::protobuf::Message /* @ return reinterpret_cast( &_SourceContext_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 0; void Swap(SourceContext* other); @@ -94,11 +100,6 @@ class LIBPROTOBUF_EXPORT SourceContext : public ::google::protobuf::Message /* @ ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -140,7 +141,7 @@ class LIBPROTOBUF_EXPORT SourceContext : public ::google::protobuf::Message /* @ ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; ::google::protobuf::internal::ArenaStringPtr file_name_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fsource_5fcontext_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fsource_5fcontext_2eproto::TableStruct; }; // =================================================================== @@ -172,6 +173,7 @@ inline void SourceContext::set_file_name(::std::string&& value) { } #endif inline void SourceContext::set_file_name(const char* value) { + GOOGLE_DCHECK(value != NULL); file_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); // @@protoc_insertion_point(field_set_char:google.protobuf.SourceContext.file_name) diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/struct.pb.cc b/third_party/protobuf/3.2.0/src/google/protobuf/struct.pb.cc index a1aa51ec0b2621..207e9efed7d645 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/struct.pb.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/struct.pb.cc @@ -19,6 +19,8 @@ namespace google { namespace protobuf { +class Struct_FieldsEntryDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed { +} _Struct_FieldsEntry_default_instance_; class StructDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed { } _Struct_default_instance_; class ValueDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed { @@ -43,37 +45,58 @@ const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[1]; } // namespace +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField + const TableStruct::entries[] = { + {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0}, +}; + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField + const TableStruct::aux[] = { + ::google::protobuf::internal::AuxillaryParseTableField(), +}; +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const + TableStruct::schema[] = { + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, +}; + const ::google::protobuf::uint32 TableStruct::offsets[] = { ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Struct, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Struct, fields_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Value, _internal_metadata_), ~0u, // no _extensions_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Value, _oneof_case_[0]), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET((&_Value_default_instance_), null_value_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET((&_Value_default_instance_), number_value_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET((&_Value_default_instance_), string_value_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET((&_Value_default_instance_), bool_value_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET((&_Value_default_instance_), struct_value_), - PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET((&_Value_default_instance_), list_value_), + ~0u, // no _weak_field_map_ + GOOGLE_PROTOBUF_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET((&_Value_default_instance_), null_value_), + GOOGLE_PROTOBUF_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET((&_Value_default_instance_), number_value_), + GOOGLE_PROTOBUF_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET((&_Value_default_instance_), string_value_), + GOOGLE_PROTOBUF_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET((&_Value_default_instance_), bool_value_), + GOOGLE_PROTOBUF_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET((&_Value_default_instance_), struct_value_), + GOOGLE_PROTOBUF_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET((&_Value_default_instance_), list_value_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Value, kind_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ListValue, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ListValue, values_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] = { { 0, -1, sizeof(Struct)}, - { 5, -1, sizeof(Value)}, - { 16, -1, sizeof(ListValue)}, + { 6, -1, sizeof(Value)}, + { 18, -1, sizeof(ListValue)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { + reinterpret_cast(&_Struct_FieldsEntry_default_instance_), reinterpret_cast(&_Struct_default_instance_), reinterpret_cast(&_Value_default_instance_), reinterpret_cast(&_ListValue_default_instance_), @@ -87,6 +110,7 @@ void protobuf_AssignDescriptors() { AssignDescriptors( "google/protobuf/struct.proto", schemas, file_default_instances, TableStruct::offsets, factory, file_level_metadata, file_level_enum_descriptors, NULL); +file_level_metadata[0].reflection = Struct::Struct_FieldsEntry::CreateReflection(file_level_metadata[0].descriptor, _Struct_FieldsEntry_default_instance_.get_mutable()); } void protobuf_AssignDescriptorsOnce() { @@ -98,16 +122,6 @@ void protobuf_RegisterTypes(const ::std::string&) GOOGLE_ATTRIBUTE_COLD; void protobuf_RegisterTypes(const ::std::string&) { protobuf_AssignDescriptorsOnce(); ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 4); - const ::google::protobuf::Descriptor* Struct_FieldsEntry_descriptor = protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[0].descriptor; - ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( - Struct_FieldsEntry_descriptor, - ::google::protobuf::internal::MapEntry< - ::std::string, - ::google::protobuf::Value, - ::google::protobuf::internal::WireFormatLite::TYPE_STRING, - ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE, - 0>::CreateDefaultInstance( - Struct_FieldsEntry_descriptor)); } } // namespace @@ -119,15 +133,19 @@ void TableStruct::Shutdown() { delete file_level_metadata[2].reflection; _ListValue_default_instance_.Shutdown(); delete file_level_metadata[3].reflection; + delete file_level_metadata[0].reflection; } void TableStruct::InitDefaultsImpl() { GOOGLE_PROTOBUF_VERIFY_VERSION; ::google::protobuf::internal::InitProtobufDefaults(); + _Struct_FieldsEntry_default_instance_.DefaultConstruct(); _Struct_default_instance_.DefaultConstruct(); _Value_default_instance_.DefaultConstruct(); _ListValue_default_instance_.DefaultConstruct(); + _Struct_FieldsEntry_default_instance_.get_mutable()->set_default_instance(_Struct_FieldsEntry_default_instance_.get_mutable()); + _Struct_FieldsEntry_default_instance_.get_mutable()->InitAsDefaultInstance(); _Value_default_instance_.null_value_ = 0; _Value_default_instance_.number_value_ = 0; _Value_default_instance_.string_value_.UnsafeSetDefault( @@ -200,6 +218,20 @@ bool NullValue_IsValid(int value) { // =================================================================== +Struct::Struct_FieldsEntry::Struct_FieldsEntry() {} +Struct::Struct_FieldsEntry::Struct_FieldsEntry(::google::protobuf::Arena* arena) : SuperType(arena) {} +::google::protobuf::Metadata Struct::Struct_FieldsEntry::GetMetadata() const { + protobuf_google_2fprotobuf_2fstruct_2eproto::protobuf_AssignDescriptorsOnce(); + return protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[0]; +} +void Struct::Struct_FieldsEntry::MergeFrom( + const ::google::protobuf::Message& other) { + ::google::protobuf::Message::MergeFrom(other); +} +void Struct::Struct_FieldsEntry::MergeFrom(const Struct_FieldsEntry& other) { + MergeFromInternal(other); +} + #if PROTOBUF_INLINE_NOT_IN_HEADERS #endif // PROTOBUF_INLINE_NOT_IN_HEADERS @@ -233,21 +265,11 @@ Struct::Struct(const Struct& from) _internal_metadata_(NULL), _cached_size_(0) { _internal_metadata_.MergeFrom(from._internal_metadata_); - const ::google::protobuf::Descriptor*& Struct_FieldsEntry_descriptor = protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[0].descriptor; - fields_.SetAssignDescriptorCallback( - protobuf_google_2fprotobuf_2fstruct_2eproto::protobuf_AssignDescriptorsOnce); - fields_.SetEntryDescriptor( - &Struct_FieldsEntry_descriptor); fields_.MergeFrom(from.fields_); // @@protoc_insertion_point(copy_constructor:google.protobuf.Struct) } void Struct::SharedCtor() { - const ::google::protobuf::Descriptor*& Struct_FieldsEntry_descriptor = protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[0].descriptor; - fields_.SetAssignDescriptorCallback( - protobuf_google_2fprotobuf_2fstruct_2eproto::protobuf_AssignDescriptorsOnce); - fields_.SetEntryDescriptor( - &Struct_FieldsEntry_descriptor); _cached_size_ = 0; } @@ -277,7 +299,7 @@ void Struct::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Struct::descriptor() { protobuf_google_2fprotobuf_2fstruct_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[1].descriptor; + return protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Struct& Struct::default_instance() { @@ -308,8 +330,8 @@ bool Struct::MergePartialFromCodedStream( case 1: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(10u)) { - DO_(input->IncrementRecursionDepth()); Struct_FieldsEntry::Parser< ::google::protobuf::internal::MapField< + Struct_FieldsEntry, ::std::string, ::google::protobuf::Value, ::google::protobuf::internal::WireFormatLite::TYPE_STRING, ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE, @@ -324,7 +346,6 @@ bool Struct::MergePartialFromCodedStream( } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -352,6 +373,9 @@ bool Struct::MergePartialFromCodedStream( void Struct::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Struct) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // map fields = 1; if (!this->fields().empty()) { typedef ::google::protobuf::Map< ::std::string, ::google::protobuf::Value >::const_pointer @@ -412,8 +436,10 @@ void Struct::SerializeWithCachedSizes( ::google::protobuf::uint8* Struct::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Struct) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // map fields = 1; if (!this->fields().empty()) { typedef ::google::protobuf::Map< ::std::string, ::google::protobuf::Value >::const_pointer @@ -527,6 +553,9 @@ void Struct::MergeFrom(const Struct& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Struct) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + fields_.MergeFrom(from.fields_); } @@ -574,7 +603,7 @@ void Struct::InternalSwap(Struct* other) { ::google::protobuf::Metadata Struct::GetMetadata() const { protobuf_google_2fprotobuf_2fstruct_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[1]; + return protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -701,7 +730,7 @@ void Value::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Value::descriptor() { protobuf_google_2fprotobuf_2fstruct_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[2].descriptor; + return protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Value& Value::default_instance() { @@ -877,6 +906,9 @@ bool Value::MergePartialFromCodedStream( void Value::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Value) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // .google.protobuf.NullValue null_value = 1; if (has_null_value()) { ::google::protobuf::internal::WireFormatLite::WriteEnum( @@ -920,8 +952,10 @@ void Value::SerializeWithCachedSizes( ::google::protobuf::uint8* Value::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Value) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // .google.protobuf.NullValue null_value = 1; if (has_null_value()) { target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( @@ -953,14 +987,14 @@ ::google::protobuf::uint8* Value::InternalSerializeWithCachedSizesToArray( if (has_struct_value()) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 5, *kind_.struct_value_, false, target); + 5, *kind_.struct_value_, deterministic, target); } // .google.protobuf.ListValue list_value = 6; if (has_list_value()) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 6, *kind_.list_value_, false, target); + 6, *kind_.list_value_, deterministic, target); } // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.Value) @@ -1039,6 +1073,9 @@ void Value::MergeFrom(const Value& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Value) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + switch (from.kind_case()) { case kNullValue: { set_null_value(from.null_value()); @@ -1115,7 +1152,7 @@ void Value::InternalSwap(Value* other) { ::google::protobuf::Metadata Value::GetMetadata() const { protobuf_google_2fprotobuf_2fstruct_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[2]; + return protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -1211,6 +1248,7 @@ void Value::set_string_value(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Value.string_value) } void Value::set_string_value(const char* value) { + GOOGLE_DCHECK(value != NULL); if (!has_string_value()) { clear_kind(); set_has_string_value(); @@ -1568,7 +1606,7 @@ void ListValue::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* ListValue::descriptor() { protobuf_google_2fprotobuf_2fstruct_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[3].descriptor; + return protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const ListValue& ListValue::default_instance() { @@ -1599,13 +1637,11 @@ bool ListValue::MergePartialFromCodedStream( case 1: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(10u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_values())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -1633,6 +1669,9 @@ bool ListValue::MergePartialFromCodedStream( void ListValue::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.ListValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated .google.protobuf.Value values = 1; for (unsigned int i = 0, n = this->values_size(); i < n; i++) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( @@ -1644,13 +1683,15 @@ void ListValue::SerializeWithCachedSizes( ::google::protobuf::uint8* ListValue::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.ListValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // repeated .google.protobuf.Value values = 1; for (unsigned int i = 0, n = this->values_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 1, this->values(i), false, target); + 1, this->values(i), deterministic, target); } // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.ListValue) @@ -1698,6 +1739,9 @@ void ListValue::MergeFrom(const ListValue& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.ListValue) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + values_.MergeFrom(from.values_); } @@ -1739,13 +1783,13 @@ void ListValue::UnsafeArenaSwap(ListValue* other) { InternalSwap(other); } void ListValue::InternalSwap(ListValue* other) { - values_.UnsafeArenaSwap(&other->values_); + values_.InternalSwap(&other->values_); std::swap(_cached_size_, other->_cached_size_); } ::google::protobuf::Metadata ListValue::GetMetadata() const { protobuf_google_2fprotobuf_2fstruct_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[3]; + return protobuf_google_2fprotobuf_2fstruct_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/struct.pb.h b/third_party/protobuf/3.2.0/src/google/protobuf/struct.pb.h index 043f0c32b1b6b7..a37a5652a95cb6 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/struct.pb.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/struct.pb.h @@ -8,12 +8,12 @@ #include -#if GOOGLE_PROTOBUF_VERSION < 3002000 +#if GOOGLE_PROTOBUF_VERSION < 3003000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3002000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -22,12 +22,13 @@ #include #include #include +#include #include #include #include #include // IWYU pragma: export #include // IWYU pragma: export -#include +#include // IWYU pragma: export #include #include #include @@ -40,6 +41,9 @@ LIBPROTOBUF_EXPORT extern ListValueDefaultTypeInternal _ListValue_default_instan class Struct; class StructDefaultTypeInternal; LIBPROTOBUF_EXPORT extern StructDefaultTypeInternal _Struct_default_instance_; +class Struct_FieldsEntry; +class Struct_FieldsEntryDefaultTypeInternal; +LIBPROTOBUF_EXPORT extern Struct_FieldsEntryDefaultTypeInternal _Struct_FieldsEntry_default_instance_; class Value; class ValueDefaultTypeInternal; LIBPROTOBUF_EXPORT extern ValueDefaultTypeInternal _Value_default_instance_; @@ -52,6 +56,9 @@ namespace protobuf { namespace protobuf_google_2fprotobuf_2fstruct_2eproto { // Internal implementation detail -- do not call these. struct LIBPROTOBUF_EXPORT TableStruct { + static const ::google::protobuf::internal::ParseTableField entries[]; + static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; + static const ::google::protobuf::internal::ParseTable schema[]; static const ::google::protobuf::uint32 offsets[]; static void InitDefaultsImpl(); static void Shutdown(); @@ -110,6 +117,8 @@ class LIBPROTOBUF_EXPORT Struct : public ::google::protobuf::Message /* @@protoc return reinterpret_cast( &_Struct_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 1; void UnsafeArenaSwap(Struct* other); void Swap(Struct* other); @@ -133,11 +142,6 @@ class LIBPROTOBUF_EXPORT Struct : public ::google::protobuf::Message /* @@protoc ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -181,19 +185,34 @@ class LIBPROTOBUF_EXPORT Struct : public ::google::protobuf::Message /* @@protoc friend class ::google::protobuf::Arena; typedef void InternalArenaConstructable_; typedef void DestructorSkippable_; - typedef ::google::protobuf::internal::MapEntryLite< + public: + class Struct_FieldsEntry : public ::google::protobuf::internal::MapEntry { + public: + typedef ::google::protobuf::internal::MapEntry - Struct_FieldsEntry; + 0 > SuperType; + Struct_FieldsEntry(); + Struct_FieldsEntry(::google::protobuf::Arena* arena); + void MergeFrom(const ::google::protobuf::Message& other) PROTOBUF_FINAL; + void MergeFrom(const Struct_FieldsEntry& other); + static const Message* internal_default_instance() { return reinterpret_cast(&_Struct_FieldsEntry_default_instance_); } + ::google::protobuf::Metadata GetMetadata() const; + }; ::google::protobuf::internal::MapField< + Struct_FieldsEntry, ::std::string, ::google::protobuf::Value, ::google::protobuf::internal::WireFormatLite::TYPE_STRING, ::google::protobuf::internal::WireFormatLite::TYPE_MESSAGE, 0 > fields_; + private: mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fstruct_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fstruct_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -232,6 +251,8 @@ class LIBPROTOBUF_EXPORT Value : public ::google::protobuf::Message /* @@protoc_ return reinterpret_cast( &_Value_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 2; void UnsafeArenaSwap(Value* other); void Swap(Value* other); @@ -255,11 +276,6 @@ class LIBPROTOBUF_EXPORT Value : public ::google::protobuf::Message /* @@protoc_ ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -396,7 +412,7 @@ class LIBPROTOBUF_EXPORT Value : public ::google::protobuf::Message /* @@protoc_ mutable int _cached_size_; ::google::protobuf::uint32 _oneof_case_[1]; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fstruct_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fstruct_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -425,6 +441,8 @@ class LIBPROTOBUF_EXPORT ListValue : public ::google::protobuf::Message /* @@pro return reinterpret_cast( &_ListValue_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 3; void UnsafeArenaSwap(ListValue* other); void Swap(ListValue* other); @@ -448,11 +466,6 @@ class LIBPROTOBUF_EXPORT ListValue : public ::google::protobuf::Message /* @@pro ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -500,7 +513,7 @@ class LIBPROTOBUF_EXPORT ListValue : public ::google::protobuf::Message /* @@pro typedef void DestructorSkippable_; ::google::protobuf::RepeatedPtrField< ::google::protobuf::Value > values_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fstruct_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fstruct_2eproto::TableStruct; }; // =================================================================== @@ -624,6 +637,7 @@ inline void Value::set_string_value(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Value.string_value) } inline void Value::set_string_value(const char* value) { + GOOGLE_DCHECK(value != NULL); if (!has_string_value()) { clear_kind(); set_has_string_value(); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/stubs/common.h b/third_party/protobuf/3.2.0/src/google/protobuf/stubs/common.h index d2611498039ed8..60874e0917ed9f 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/stubs/common.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/stubs/common.h @@ -35,7 +35,12 @@ #ifndef GOOGLE_PROTOBUF_COMMON_H__ #define GOOGLE_PROTOBUF_COMMON_H__ +#include +#include +#include +#include #include +#include #include #include @@ -96,27 +101,27 @@ namespace internal { // The current version, represented as a single integer to make comparison // easier: major * 10^6 + minor * 10^3 + micro -#define GOOGLE_PROTOBUF_VERSION 3002000 +#define GOOGLE_PROTOBUF_VERSION 3003000 // A suffix string for alpha, beta or rc releases. Empty for stable releases. #define GOOGLE_PROTOBUF_VERSION_SUFFIX "" // The minimum library version which works with the current version of the // headers. -#define GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION 3002000 +#define GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION 3003000 // The minimum header version which works with the current version of // the library. This constant should only be used by protoc's C++ code // generator. -static const int kMinHeaderVersionForLibrary = 3002000; +static const int kMinHeaderVersionForLibrary = 3003000; // The minimum protoc version which works with the current version of the // headers. -#define GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 3002000 +#define GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 3003000 // The minimum header version which works with the current version of // protoc. This constant should only be used in VerifyVersion(). -static const int kMinHeaderVersionForProtoc = 3002000; +static const int kMinHeaderVersionForProtoc = 3003000; // Verifies that the headers and libraries are compatible. Use the macro // below to call this. @@ -220,7 +225,14 @@ class FatalException : public std::exception { // This is at the end of the file instead of the beginning to work around a bug // in some versions of MSVC. -using namespace std; // Don't do this at home, kids. +// TODO(acozzette): remove these using statements +using std::istream; +using std::map; +using std::ostream; +using std::pair; +using std::set; +using std::string; +using std::vector; } // namespace protobuf } // namespace google diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/stubs/int128_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/stubs/int128_unittest.cc index 5d33292ccc89e9..1ec899ad7b75d6 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/stubs/int128_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/stubs/int128_unittest.cc @@ -370,29 +370,29 @@ TEST(Int128, DivideAndMod) { EXPECT_EQ(r, result_r); // Try the other way around. - swap(q, b); + std::swap(q, b); result_q = a / b; result_r = a % b; EXPECT_EQ(q, result_q); EXPECT_EQ(r, result_r); // Restore. - swap(b, q); + std::swap(b, q); // Dividend < divisor; result should be q:0 r:. - swap(a, b); + std::swap(a, b); result_q = a / b; result_r = a % b; EXPECT_EQ(0, result_q); EXPECT_EQ(a, result_r); // Try the other way around. - swap(a, q); + std::swap(a, q); result_q = a / b; result_r = a % b; EXPECT_EQ(0, result_q); EXPECT_EQ(a, result_r); // Restore. - swap(q, a); - swap(b, a); + std::swap(q, a); + std::swap(b, a); // Try a large remainder. b = a / 2 + 1; @@ -501,7 +501,7 @@ TEST(Int128, OStream) { {uint128(12345), std::ios::dec | std::ios::left, 6, '_', "12345_"}, }; for (size_t i = 0; i < GOOGLE_ARRAYSIZE(cases); ++i) { - ostringstream os; + std::ostringstream os; os.flags(cases[i].flags); os.width(cases[i].width); os.fill(cases[i].fill); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/stubs/io_win32.cc b/third_party/protobuf/3.2.0/src/google/protobuf/stubs/io_win32.cc index bffa450a267d7c..310cb1b0c40ca6 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/stubs/io_win32.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/stubs/io_win32.cc @@ -30,21 +30,31 @@ // Author: laszlocsomor@google.com (Laszlo Csomor) // -// Implementation for long-path-aware open/mkdir/access on Windows. +// Implementation for long-path-aware open/mkdir/etc. on Windows. // // These functions convert the input path to an absolute Windows path -// with UNC prefix if necessary, then pass that to -// _wopen/_wmkdir/_waccess (declared in ) respectively. This -// allows working with files/directories whose paths are longer than -// MAX_PATH (260 chars). +// with "\\?\" prefix if necessary, then pass that to _wopen/_wmkdir/etc. +// (declared in ) respectively. This allows working with files/directories +// whose paths are longer than MAX_PATH (260 chars). // // This file is only used on Windows, it's empty on other platforms. #if defined(_WIN32) +// Comment this out to fall back to using the ANSI versions (open, mkdir, ...) +// instead of the Unicode ones (_wopen, _wmkdir, ...). Doing so can be useful to +// debug failing tests if that's caused by the long path support. +#define SUPPORT_LONGPATHS + #include +#include #include +#include +#include +#include +#include #include +#include #include @@ -84,14 +94,14 @@ bool has_drive_letter(const char_type* ch) { } template -bool has_unc_prefix(const std::basic_string& path) { +bool has_longpath_prefix(const std::basic_string& path) { return path.size() > 4 && path[0] == '\\' && path[1] == '\\' && path[2] == '?' && path[3] == '\\'; } template bool is_path_absolute(const std::basic_string& path) { - return (path.size() > 2 && path[1] == ':') || has_unc_prefix(path); + return (path.size() > 2 && path[1] == ':') || has_longpath_prefix(path); } template @@ -104,24 +114,16 @@ bool is_drive_relative(const string& s) { (s.size() == 2 || !is_separator(s[2])); } -void replace_directory_separators(WCHAR* p) { - for (; *p != L'\0'; ++p) { - if (*p == L'/') { - *p = L'\\'; +template +void replace_directory_separators(char_type* p) { + for (; *p; ++p) { + if (*p == '/') { + *p = '\\'; } } } -wstring get_cwd() { - DWORD result = ::GetCurrentDirectoryW(0, NULL); - std::unique_ptr cwd(new WCHAR[result]); - ::GetCurrentDirectoryW(result, cwd.get()); - cwd.get()[result - 1] = 0; - replace_directory_separators(cwd.get()); - return std::move(wstring(cwd.get())); -} - -wstring join_paths(const wstring& path1, const wstring& path2) { +string join_paths(const string& path1, const string& path2) { if (path1.empty() || is_path_absolute(path2)) { return path2; } @@ -134,12 +136,12 @@ wstring join_paths(const wstring& path1, const wstring& path2) { : (path1 + path2); } else { return is_separator(path2.front()) ? (path1 + path2) - : (path1 + L'\\' + path2); + : (path1 + '\\' + path2); } } string normalize(string path) { - if (has_unc_prefix(path)) { + if (has_longpath_prefix(path)) { path = path.substr(4); } @@ -162,10 +164,11 @@ string normalize(string path) { string segment(path, segment_start, i - segment_start); segment_start = -1; if (segment == dotdot) { - if (!segments.empty() && !has_drive_letter(segments[0].c_str())) { + if (!segments.empty() && + (!has_drive_letter(segments[0].c_str()) || segments.size() > 1)) { segments.pop_back(); } - } else if (segment != dot) { + } else if (segment != dot && !segment.empty()) { segments.push_back(segment); } } @@ -191,22 +194,28 @@ string normalize(string path) { first = false; result << s; } + // Preserve trailing separator if the input contained it. + if (is_separator(path.back())) { + result << '\\'; + } return result.str(); } +std::unique_ptr as_wstring(const string& s) { + int len = ::MultiByteToWideChar(CP_UTF8, 0, s.c_str(), s.size(), NULL, 0); + std::unique_ptr result(new WCHAR[len + 1]); + ::MultiByteToWideChar(CP_UTF8, 0, s.c_str(), s.size(), result.get(), len + 1); + result.get()[len] = 0; + return std::move(result); +} + wstring as_wchar_path(const string& path) { - int len = - ::MultiByteToWideChar(CP_UTF8, 0, path.c_str(), path.size(), NULL, 0); - std::unique_ptr wbuf(new WCHAR[len + 1]); - ::MultiByteToWideChar(CP_UTF8, 0, path.c_str(), path.size(), wbuf.get(), - len + 1); - wbuf.get()[len] = 0; + std::unique_ptr wbuf(as_wstring(path)); replace_directory_separators(wbuf.get()); - return std::move(wstring(wbuf.get())); + return wstring(wbuf.get()); } -bool as_windows_path(const string& path, size_t max_path, - wstring* result) { +bool as_windows_path(const string& path, wstring* result) { if (path.empty()) { result->clear(); return true; @@ -215,11 +224,18 @@ bool as_windows_path(const string& path, size_t max_path, return false; } - *result = as_wchar_path(normalize(path)); - if (!is_path_absolute(path)) { - *result = join_paths(get_cwd(), *result); + string mutable_path = path; + if (!is_path_absolute(mutable_path)) { + char cwd[MAX_PATH]; + ::GetCurrentDirectoryA(MAX_PATH, cwd); + mutable_path = join_paths(cwd, mutable_path); } - if (result->size() >= max_path && !has_unc_prefix(*result)) { + *result = as_wchar_path(normalize(mutable_path)); + if (!has_longpath_prefix(*result)) { + // Add the "\\?\" prefix unconditionally. This way we prevent the Win32 API + // from processing the path and "helpfully" removing trailing dots from the + // path for example. + // See https://github.com/bazelbuild/bazel/issues/2935 *result = wstring(L"\\\\?\\") + *result; } return true; @@ -227,41 +243,104 @@ bool as_windows_path(const string& path, size_t max_path, } // namespace -int win32_open(const char* path, int flags, int mode) { +int open(const char* path, int flags, int mode) { +#ifdef SUPPORT_LONGPATHS wstring wpath; - if (!as_windows_path(path, MAX_PATH, &wpath)) { + if (!as_windows_path(path, &wpath)) { errno = ENOENT; return -1; } return ::_wopen(wpath.c_str(), flags, mode); +#else + return ::_open(path, flags, mode); +#endif } -int win32_mkdir(const char* path, int _mode) { - // CreateDirectoryA's limit is 248 chars, see MSDN. - // https://msdn.microsoft.com/en-us/library/windows/desktop/aa363855(v=vs.85).aspx - // This limit presumably includes the null-terminator, because other - // functions that have the MAX_PATH limit, such as CreateFileA, - // actually include it. +int mkdir(const char* path, int _mode) { +#ifdef SUPPORT_LONGPATHS wstring wpath; - if (!as_windows_path(path, 248, &wpath)) { + if (!as_windows_path(path, &wpath)) { errno = ENOENT; return -1; } return ::_wmkdir(wpath.c_str()); +#else // not SUPPORT_LONGPATHS + return ::_mkdir(path); +#endif // not SUPPORT_LONGPATHS } -int win32_access(const char* path, int mode) { +int access(const char* path, int mode) { +#ifdef SUPPORT_LONGPATHS wstring wpath; - if (!as_windows_path(path, MAX_PATH, &wpath)) { + if (!as_windows_path(path, &wpath)) { errno = ENOENT; return -1; } return ::_waccess(wpath.c_str(), mode); +#else + return ::_access(path, mode); +#endif +} + +int chdir(const char* path) { +#ifdef SUPPORT_LONGPATHS + wstring wpath; + if (!as_windows_path(path, &wpath)) { + errno = ENOENT; + return -1; + } + return ::_wchdir(wpath.c_str()); +#else + return ::_chdir(path); +#endif +} + +int stat(const char* path, struct _stat* buffer) { +#ifdef SUPPORT_LONGPATHS + wstring wpath; + if (!as_windows_path(path, &wpath)) { + errno = ENOENT; + return -1; + } + return ::_wstat(wpath.c_str(), buffer); +#else // not SUPPORT_LONGPATHS + return ::_stat(path, buffer); +#endif // not SUPPORT_LONGPATHS +} + +FILE* fopen(const char* path, const char* mode) { +#ifdef SUPPORT_LONGPATHS + wstring wpath; + if (!as_windows_path(path, &wpath)) { + errno = ENOENT; + return NULL; + } + std::unique_ptr wmode(as_wstring(mode)); + return ::_wfopen(wpath.c_str(), wmode.get()); +#else + return ::fopen(path, mode); +#endif +} + +int close(int fd) { return ::close(fd); } + +int dup(int fd) { return ::_dup(fd); } + +int dup2(int fd1, int fd2) { return ::_dup2(fd1, fd2); } + +int read(int fd, void* buffer, size_t size) { + return ::_read(fd, buffer, size); +} + +int setmode(int fd, int mode) { return ::_setmode(fd, mode); } + +int write(int fd, const void* buffer, size_t size) { + return ::_write(fd, buffer, size); } -wstring testonly_path_to_winpath(const string& path, size_t max_path) { +wstring testonly_path_to_winpath(const string& path) { wstring wpath; - as_windows_path(path, max_path, &wpath); + as_windows_path(path, &wpath); return wpath; } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/stubs/io_win32.h b/third_party/protobuf/3.2.0/src/google/protobuf/stubs/io_win32.h index 0716faaa78fd19..e4632f4da937ae 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/stubs/io_win32.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/stubs/io_win32.h @@ -34,11 +34,11 @@ // commonly used POSIX functions such as open(2) and access(2), as well // as macro definitions for flags of these functions. // -// By including this file you'll redefine open/access/mkdir to -// ::google::protobuf::stubs::win32_{open/access/mkdir}. +// By including this file you'll redefine open/access/etc. to +// ::google::protobuf::stubs::win32_{open/access/etc.}. // Make sure you don't include a header that attempts to redeclare or // redefine these functions, that'll lead to confusing compilation -// errors. +// errors. It's best to #include this file as the last one to ensure that. // // This file is only used on Windows, it's empty on other platforms. @@ -47,43 +47,30 @@ #if defined(_WIN32) -#include -#include -#include -#include -#include -#include - #include namespace google { namespace protobuf { namespace stubs { -int win32_open(const char* path, int flags, int mode = 0); -int win32_mkdir(const char* name, int _mode); -int win32_access(const char* pathname, int mode); -std::wstring testonly_path_to_winpath(const std::string& path, size_t max_path); +FILE* fopen(const char* path, const char* mode); +int access(const char* path, int mode); +int chdir(const char* path); +int close(int fd); +int dup(int fd); +int dup2(int fd1, int fd2); +int mkdir(const char* path, int _mode); +int open(const char* path, int flags, int mode = 0); +int read(int fd, void* buffer, size_t size); +int setmode(int fd, int mode); +int stat(const char* path, struct _stat* buffer); +int write(int fd, const void* buffer, size_t size); +std::wstring testonly_path_to_winpath(const std::string& path); } // namespace stubs } // namespace protobuf } // namespace google -#ifdef open -#undef open -#endif -#define open ::google::protobuf::stubs::win32_open - -#ifdef mkdir -#undef mkdir -#endif -#define mkdir ::google::protobuf::stubs::win32_mkdir - -#ifdef access -#undef access -#endif -#define access ::google::protobuf::stubs::win32_access - #ifndef W_OK #define W_OK 02 // not defined by MSVC for whatever reason #endif @@ -104,3 +91,4 @@ std::wstring testonly_path_to_winpath(const std::string& path, size_t max_path); #endif // GOOGLE_PROTOBUF_STUBS_IO_WIN32_H__ + diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/stubs/io_win32_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/stubs/io_win32_unittest.cc index fb3d5f724404c6..ca0f13a72ad916 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/stubs/io_win32_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/stubs/io_win32_unittest.cc @@ -38,13 +38,20 @@ #define WIN32_LEAN_AND_MEAN #include +#include #include +#include +#include +#include +#include #include #include +#include #include #include +#include #include namespace google { @@ -62,7 +69,8 @@ class IoWin32Test : public ::testing::Test { void TearDown() override; protected: - static bool DeleteAllUnder(wstring path); + bool CreateAllUnder(wstring path); + bool DeleteAllUnder(wstring path); string test_tmpdir; wstring wtest_tmpdir; @@ -75,25 +83,64 @@ class IoWin32Test : public ::testing::Test { } void IoWin32Test::SetUp() { - test_tmpdir.clear(); + test_tmpdir = string(TestTempDir()); wtest_tmpdir.clear(); + if (test_tmpdir.empty()) { + const char* test_tmpdir_env = getenv("TEST_TMPDIR"); + if (test_tmpdir_env != nullptr && *test_tmpdir_env) { + test_tmpdir = string(test_tmpdir_env); + } - const char* test_tmpdir_env = getenv("TEST_TMPDIR"); - if (test_tmpdir_env == nullptr || *test_tmpdir_env == 0) { - // Using assertions in SetUp/TearDown seems to confuse the test framework, - // so just leave the member variables empty in case of failure. - return; + // Only Bazel defines TEST_TMPDIR, CMake does not, so look for other + // suitable environment variables. + if (test_tmpdir.empty()) { + for (const char* name : {"TEMP", "TMP"}) { + test_tmpdir_env = getenv(name); + if (test_tmpdir_env != nullptr && *test_tmpdir_env) { + test_tmpdir = string(test_tmpdir_env); + break; + } + } + } + + // No other temp directory was found. Use the current director + if (test_tmpdir.empty()) { + char buffer[MAX_PATH]; + // Use GetCurrentDirectoryA instead of GetCurrentDirectoryW, because the + // current working directory must always be shorter than MAX_PATH, even + // with + // "\\?\" prefix (except on Windows 10 version 1607 and beyond, after + // opting in to long paths by default [1]). + // + // [1] https://msdn.microsoft.com/en-us/library/windows/ \ + // desktop/aa365247(v=vs.85).aspx#maxpath + DWORD result = ::GetCurrentDirectoryA(MAX_PATH, buffer); + if (result > 0) { + test_tmpdir = string(buffer); + } else { + // Using assertions in SetUp/TearDown seems to confuse the test + // framework, so just leave the member variables empty in case of + // failure. + GOOGLE_CHECK_OK(false); + return; + } + } } - test_tmpdir = string(test_tmpdir_env); while (test_tmpdir.back() == '/' || test_tmpdir.back() == '\\') { test_tmpdir.pop_back(); } + test_tmpdir += "\\io_win32_unittest.tmp"; // CreateDirectoryA's limit is 248 chars, see MSDN. // https://msdn.microsoft.com/en-us/library/windows/ \ // desktop/aa363855(v=vs.85).aspx - wtest_tmpdir = testonly_path_to_winpath(test_tmpdir, 248); + wtest_tmpdir = testonly_path_to_winpath(test_tmpdir); + if (!DeleteAllUnder(wtest_tmpdir) || !CreateAllUnder(wtest_tmpdir)) { + GOOGLE_CHECK_OK(false); + test_tmpdir.clear(); + wtest_tmpdir.clear(); + } } void IoWin32Test::TearDown() { @@ -102,6 +149,30 @@ void IoWin32Test::TearDown() { } } +bool IoWin32Test::CreateAllUnder(wstring path) { + // Prepend UNC prefix if the path doesn't have it already. Don't bother + // checking if the path is shorter than MAX_PATH, let's just do it + // unconditionally. + if (path.find(L"\\\\?\\") != 0) { + path = wstring(L"\\\\?\\") + path; + } + if (::CreateDirectoryW(path.c_str(), NULL) || + GetLastError() == ERROR_ALREADY_EXISTS || + GetLastError() == ERROR_ACCESS_DENIED) { + return true; + } + if (GetLastError() == ERROR_PATH_NOT_FOUND) { + size_t pos = path.find_last_of(L'\\'); + if (pos != wstring::npos) { + wstring parent(path, 0, pos); + if (CreateAllUnder(parent) && CreateDirectoryW(path.c_str(), NULL)) { + return true; + } + } + } + return false; +} + bool IoWin32Test::DeleteAllUnder(wstring path) { static const wstring kDot(L"."); static const wstring kDotDot(L".."); @@ -159,8 +230,11 @@ TEST_F(IoWin32Test, AccessTest) { } string file = path + "\\file.txt"; int fd = open(file.c_str(), O_CREAT | O_WRONLY, 0644); - EXPECT_GT(fd, 0); - EXPECT_EQ(close(fd), 0); + if (fd > 0) { + EXPECT_EQ(close(fd), 0); + } else { + EXPECT_TRUE(false); + } EXPECT_EQ(access(test_tmpdir.c_str(), F_OK), 0); EXPECT_EQ(access(path.c_str(), F_OK), 0); @@ -169,20 +243,14 @@ TEST_F(IoWin32Test, AccessTest) { EXPECT_NE(access((file + ".blah").c_str(), F_OK), 0); EXPECT_NE(access((file + ".blah").c_str(), W_OK), 0); - // chdir into the test_tmpdir, because the current working directory must - // always be shorter than MAX_PATH, even with "\\?\" prefix (except on - // Windows 10 version 1607 and beyond, after opting in to long paths by - // default [1]). - // - // [1] https://msdn.microsoft.com/en-us/library/windows/ \ - // desktop/aa365247(v=vs.85).aspx#maxpath - EXPECT_EQ(_chdir(test_tmpdir.c_str()), 0); EXPECT_EQ(access(".", F_OK), 0); EXPECT_EQ(access(".", W_OK), 0); - EXPECT_EQ(access("accesstest", F_OK | W_OK), 0); - ASSERT_EQ(access("./normalize_me/../.././accesstest", F_OK | W_OK), 0); - EXPECT_NE(access("blah", F_OK), 0); - EXPECT_NE(access("blah", W_OK), 0); + EXPECT_EQ(access((test_tmpdir + "/accesstest").c_str(), F_OK | W_OK), 0); + ASSERT_EQ(access((test_tmpdir + "/./normalize_me/.././accesstest").c_str(), + F_OK | W_OK), + 0); + EXPECT_NE(access("io_win32_unittest.AccessTest.nonexistent", F_OK), 0); + EXPECT_NE(access("io_win32_unittest.AccessTest.nonexistent", W_OK), 0); ASSERT_EQ(access("c:bad", F_OK), -1); ASSERT_EQ(errno, ENOENT); @@ -202,26 +270,12 @@ TEST_F(IoWin32Test, OpenTest) { } string file = path + "\\file.txt"; int fd = open(file.c_str(), O_CREAT | O_WRONLY, 0644); - ASSERT_GT(fd, 0); - EXPECT_EQ(write(fd, "hello", 5), 5); - EXPECT_EQ(close(fd), 0); - - // chdir into the test_tmpdir, because the current working directory must - // always be shorter than MAX_PATH, even with "\\?\" prefix (except on - // Windows 10 version 1607 and beyond, after opting in to long paths by - // default [1]). - // - // [1] https://msdn.microsoft.com/en-us/library/windows/ \ - // desktop/aa365247(v=vs.85).aspx#maxpath - EXPECT_EQ(_chdir(test_tmpdir.c_str()), 0); - fd = open("file-relative.txt", O_CREAT | O_WRONLY, 0644); - ASSERT_GT(fd, 0); - EXPECT_EQ(write(fd, "hello", 5), 5); - EXPECT_EQ(close(fd), 0); - - fd = open("./normalize_me/../.././file-relative.txt", O_RDONLY); - ASSERT_GT(fd, 0); - EXPECT_EQ(close(fd), 0); + if (fd > 0) { + EXPECT_EQ(write(fd, "hello", 5), 5); + EXPECT_EQ(close(fd), 0); + } else { + EXPECT_TRUE(false); + } ASSERT_EQ(open("c:bad.txt", O_CREAT | O_WRONLY, 0644), -1); ASSERT_EQ(errno, ENOENT); @@ -240,17 +294,6 @@ TEST_F(IoWin32Test, MkdirTest) { ASSERT_EQ(mkdir(path.c_str(), 0644), 0); } while (path.size() <= MAX_PATH); - // chdir into the test_tmpdir, because the current working directory must - // always be shorter than MAX_PATH, even with "\\?\" prefix (except on - // Windows 10 version 1607 and beyond, after opting in to long paths by - // default [1]). - // - // [1] https://msdn.microsoft.com/en-us/library/windows/ \ - // desktop/aa365247(v=vs.85).aspx#maxpath - EXPECT_EQ(_chdir(test_tmpdir.c_str()), 0); - ASSERT_EQ(mkdir("relative_mkdirtest", 0644), 0); - ASSERT_EQ(mkdir("./normalize_me/../.././blah", 0644), 0); - ASSERT_EQ(mkdir("c:bad", 0644), -1); ASSERT_EQ(errno, ENOENT); ASSERT_EQ(mkdir("/tmp/bad", 0644), -1); @@ -259,6 +302,57 @@ TEST_F(IoWin32Test, MkdirTest) { ASSERT_EQ(errno, ENOENT); } +TEST_F(IoWin32Test, ChdirTest) { + char owd[MAX_PATH]; + EXPECT_GT(::GetCurrentDirectoryA(MAX_PATH, owd), 0); + string path("C:\\"); + EXPECT_EQ(access(path.c_str(), F_OK), 0); + ASSERT_EQ(chdir(path.c_str()), 0); + EXPECT_TRUE(::SetCurrentDirectoryA(owd)); + + // Do not try to chdir into the test_tmpdir, it may already contain directory + // names with trailing dots. + // Instead test here with an obviously dot-trailed path. If the win32_chdir + // function would not convert the path to absolute and prefix with "\\?\" then + // the Win32 API would ignore the trailing dot, but because of the prefixing + // there'll be no path processing done, so we'll actually attempt to chdir + // into "C:\some\path\foo." + path = test_tmpdir + "/foo."; + EXPECT_EQ(mkdir(path.c_str(), 644), 0); + EXPECT_EQ(access(path.c_str(), F_OK), 0); + ASSERT_NE(chdir(path.c_str()), 0); +} + +TEST_F(IoWin32Test, AsWindowsPathTest) { + DWORD size = GetCurrentDirectoryW(0, NULL); + unique_ptr cwd_str(new wchar_t[size]); + EXPECT_GT(GetCurrentDirectoryW(size, cwd_str.get()), 0); + wstring cwd = wstring(L"\\\\?\\") + cwd_str.get(); + + ASSERT_EQ(testonly_path_to_winpath("relative_mkdirtest"), + cwd + L"\\relative_mkdirtest"); + ASSERT_EQ(testonly_path_to_winpath("preserve//\\trailing///"), + cwd + L"\\preserve\\trailing\\"); + ASSERT_EQ(testonly_path_to_winpath("./normalize_me\\/../blah"), + cwd + L"\\blah"); + std::ostringstream relpath; + for (wchar_t* p = cwd_str.get(); *p; ++p) { + if (*p == '/' || *p == '\\') { + relpath << "../"; + } + } + relpath << ".\\/../\\./beyond-toplevel"; + ASSERT_EQ(testonly_path_to_winpath(relpath.str()), + wstring(L"\\\\?\\") + cwd_str.get()[0] + L":\\beyond-toplevel"); + + // Absolute unix paths lack drive letters, driveless absolute windows paths + // do too. Neither can be converted to a drive-specifying absolute Windows + // path. + ASSERT_EQ(testonly_path_to_winpath("/absolute/unix/path"), L""); + // Though valid on Windows, we also don't support UNC paths (\\UNC\\blah). + ASSERT_EQ(testonly_path_to_winpath("\\driveless\\absolute"), L""); +} + } // namespace } // namespace stubs } // namespace protobuf diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/stubs/strutil.cc b/third_party/protobuf/3.2.0/src/google/protobuf/stubs/strutil.cc index 15b6e53f1a648a..336894b52bd2c0 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/stubs/strutil.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/stubs/strutil.cc @@ -227,7 +227,7 @@ void SplitStringToIteratorUsing(const string& full, void SplitStringUsing(const string& full, const char* delim, vector* result) { - back_insert_iterator< vector > it(*result); + std::back_insert_iterator< vector > it(*result); SplitStringToIteratorUsing(full, delim, it); } @@ -265,7 +265,7 @@ void SplitStringToIteratorAllowEmpty(const StringType& full, void SplitStringAllowEmpty(const string& full, const char* delim, vector* result) { - back_insert_iterator > it(*result); + std::back_insert_iterator > it(*result); SplitStringToIteratorAllowEmpty(full, delim, 0, it); } @@ -1262,10 +1262,10 @@ char* DoubleToBuffer(double value, char* buffer) { // this assert. GOOGLE_COMPILE_ASSERT(DBL_DIG < 20, DBL_DIG_is_too_big); - if (value == numeric_limits::infinity()) { + if (value == std::numeric_limits::infinity()) { strcpy(buffer, "inf"); return buffer; - } else if (value == -numeric_limits::infinity()) { + } else if (value == -std::numeric_limits::infinity()) { strcpy(buffer, "-inf"); return buffer; } else if (MathLimits::IsNaN(value)) { @@ -1380,10 +1380,10 @@ char* FloatToBuffer(float value, char* buffer) { // this assert. GOOGLE_COMPILE_ASSERT(FLT_DIG < 10, FLT_DIG_is_too_big); - if (value == numeric_limits::infinity()) { + if (value == std::numeric_limits::infinity()) { strcpy(buffer, "inf"); return buffer; - } else if (value == -numeric_limits::infinity()) { + } else if (value == -std::numeric_limits::infinity()) { strcpy(buffer, "-inf"); return buffer; } else if (MathLimits::IsNaN(value)) { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/test_util_lite.cc b/third_party/protobuf/3.2.0/src/google/protobuf/test_util_lite.cc index 388c0cbde20517..79c5abec6d157f 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/test_util_lite.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/test_util_lite.cc @@ -35,14 +35,9 @@ #include #include #include +#include -#define EXPECT_TRUE GOOGLE_CHECK -#define ASSERT_TRUE GOOGLE_CHECK -#define EXPECT_FALSE(COND) GOOGLE_CHECK(!(COND)) -#define EXPECT_EQ GOOGLE_CHECK_EQ -#define ASSERT_EQ GOOGLE_CHECK_EQ - namespace google { namespace protobuf { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/testing/file.cc b/third_party/protobuf/3.2.0/src/google/protobuf/testing/file.cc index 470512edff2c04..b935488989a409 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/testing/file.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/testing/file.cc @@ -38,24 +38,28 @@ #ifdef _MSC_VER #define WIN32_LEAN_AND_MEAN // yeah, right #include // Find*File(). :( -#include -#include +// #include #else #include #include #endif #include +#include + namespace google { namespace protobuf { #ifdef _WIN32 -#define mkdir(name, mode) mkdir(name) // Windows doesn't have symbolic links. #define lstat stat -#ifndef F_OK -#define F_OK 00 // not defined by MSVC for whatever reason -#endif +// DO NOT include , instead create functions in io_win32.{h,cc} and import +// them like we do below. +using google::protobuf::stubs::access; +using google::protobuf::stubs::chdir; +using google::protobuf::stubs::fopen; +using google::protobuf::stubs::mkdir; +using google::protobuf::stubs::stat; #endif bool File::Exists(const string& name) { @@ -113,6 +117,9 @@ void File::WriteStringToFileOrDie(const string& contents, const string& name) { } bool File::CreateDir(const string& name, int mode) { + if (!name.empty()) { + GOOGLE_CHECK_OK(name.back() != '.'); + } return mkdir(name.c_str(), mode) == 0; } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/testing/googletest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/testing/googletest.cc index d45706b6548539..0dd2476b03ef20 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/testing/googletest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/testing/googletest.cc @@ -33,14 +33,14 @@ #include #include +#include #include #include #include #include #include #ifdef _MSC_VER -#include -#include +// #include #else #include #endif @@ -53,7 +53,13 @@ namespace google { namespace protobuf { #ifdef _WIN32 -#define mkdir(name, mode) mkdir(name) +// DO NOT include , instead create functions in io_win32.{h,cc} and import +// them like we do below. +using google::protobuf::stubs::close; +using google::protobuf::stubs::dup2; +using google::protobuf::stubs::dup; +using google::protobuf::stubs::mkdir; +using google::protobuf::stubs::open; #endif #ifndef O_BINARY @@ -111,14 +117,32 @@ string GetTemporaryDirectoryName() { char b[L_tmpnam + 1]; // HPUX multithread return 0 if s is 0 string result = tmpnam(b); #ifdef _WIN32 + // Avoid a trailing dot by changing it to an underscore. On Win32 the names of + // files and directories can, but should not, end with dot. + // + // In MS-DOS and FAT16 filesystem the filenames were 8dot3 style so it didn't + // make sense to have a name ending in dot without an extension, so the shell + // silently ignored trailing dots. To this day the Win32 API still maintains + // this behavior and silently ignores trailing dots in path arguments of + // functions such as CreateFile{A,W}. Even POSIX API function implementations + // seem to wrap the Win32 API functions (e.g. CreateDirectoryA) and behave + // this way. + // It's possible to avoid this behavior and create files / directories with + // trailing dots (using CreateFileW / CreateDirectoryW and prefixing the path + // with "\\?\") but these will be degenerate in the sense that you cannot + // chdir into such directories (or navigate into them with Windows Explorer) + // nor can you open such files with some programs (e.g. Notepad). + if (result.back() == '.') { + result[result.size() - 1] = '_'; + } // On Win32, tmpnam() returns a file prefixed with '\', but which is supposed // to be used in the current working directory. WTF? if (HasPrefixString(result, "\\")) { result.erase(0, 1); } - // The Win32 API accepts forward slashes as a path delimiter even though - // backslashes are standard. Let's avoid confusion and use only forward - // slashes. + // The Win32 API accepts forward slashes as a path delimiter as long as the + // path doesn't use the "\\?\" prefix. + // Let's avoid confusion and use only forward slashes. result = StringReplace(result, "\\", "/", true); #endif // _WIN32 return result; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/text_format.cc b/third_party/protobuf/3.2.0/src/google/protobuf/text_format.cc index 778b878e79a44f..04c887e088a1d4 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/text_format.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/text_format.cc @@ -74,18 +74,6 @@ inline bool IsOctNumber(const string& str) { (str[1] >= '0' && str[1] < '8')); } -inline bool GetAnyFieldDescriptors(const Message& message, - const FieldDescriptor** type_url_field, - const FieldDescriptor** value_field) { - const Descriptor* descriptor = message.GetDescriptor(); - *type_url_field = descriptor->FindFieldByNumber(1); - *value_field = descriptor->FindFieldByNumber(2); - return (*type_url_field != NULL && - (*type_url_field)->type() == FieldDescriptor::TYPE_STRING && - *value_field != NULL && - (*value_field)->type() == FieldDescriptor::TYPE_BYTES); -} - } // namespace string Message::DebugString() const { @@ -1322,6 +1310,7 @@ bool TextFormat::Parser::ParseFromString(const string& input, return Parse(&input_stream, output); } + bool TextFormat::Parser::Merge(io::ZeroCopyInputStream* input, Message* output) { ParserImpl parser(output->GetDescriptor(), input, error_collector_, @@ -1339,6 +1328,7 @@ bool TextFormat::Parser::MergeFromString(const string& input, return Merge(&input_stream, output); } + bool TextFormat::Parser::MergeUsingImpl(io::ZeroCopyInputStream* /* input */, Message* output, ParserImpl* parser_impl) { @@ -1387,6 +1377,7 @@ bool TextFormat::Parser::ParseFieldValueFromString( return Parser().MergeFromString(input, output); } + // =========================================================================== // The default implementation for FieldValuePrinter. The base class just diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/text_format.h b/third_party/protobuf/3.2.0/src/google/protobuf/text_format.h index 2873d3392b6efe..560fd391bc494f 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/text_format.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/text_format.h @@ -75,8 +75,8 @@ class LIBPROTOBUF_EXPORT TextFormat { io::ZeroCopyOutputStream* output); // Like Print(), but outputs directly to a string. - // Note: output will be cleared before prior to printing, and will - // be left empty even if printing fails. + // Note: output will be cleared prior to printing, and will be left empty + // even if printing fails. static bool PrintToString(const Message& message, string* output); // Like PrintUnknownFields(), but outputs directly to a string. diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/text_format_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/text_format_unittest.cc index e644133953548e..422a86b4ba4e6e 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/text_format_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/text_format_unittest.cc @@ -53,11 +53,11 @@ #include #include #include -#include #include #include #include #include +#include namespace google { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/timestamp.pb.cc b/third_party/protobuf/3.2.0/src/google/protobuf/timestamp.pb.cc index c1865d93e0d870..b2fe28a472f1ff 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/timestamp.pb.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/timestamp.pb.cc @@ -31,11 +31,26 @@ ::google::protobuf::Metadata file_level_metadata[1]; } // namespace +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField + const TableStruct::entries[] = { + {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0}, +}; + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField + const TableStruct::aux[] = { + ::google::protobuf::internal::AuxillaryParseTableField(), +}; +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const + TableStruct::schema[] = { + { NULL, NULL, 0, -1, -1, false }, +}; + const ::google::protobuf::uint32 TableStruct::offsets[] = { ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Timestamp, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Timestamp, seconds_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Timestamp, nanos_), }; @@ -186,7 +201,7 @@ void Timestamp::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Timestamp::descriptor() { protobuf_google_2fprotobuf_2ftimestamp_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ftimestamp_2eproto::file_level_metadata[0].descriptor; + return protobuf_google_2fprotobuf_2ftimestamp_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Timestamp& Timestamp::default_instance() { @@ -266,6 +281,9 @@ bool Timestamp::MergePartialFromCodedStream( void Timestamp::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Timestamp) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // int64 seconds = 1; if (this->seconds() != 0) { ::google::protobuf::internal::WireFormatLite::WriteInt64(1, this->seconds(), output); @@ -281,8 +299,10 @@ void Timestamp::SerializeWithCachedSizes( ::google::protobuf::uint8* Timestamp::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Timestamp) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // int64 seconds = 1; if (this->seconds() != 0) { target = ::google::protobuf::internal::WireFormatLite::WriteInt64ToArray(1, this->seconds(), target); @@ -341,6 +361,9 @@ void Timestamp::MergeFrom(const Timestamp& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Timestamp) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.seconds() != 0) { set_seconds(from.seconds()); } @@ -394,7 +417,7 @@ void Timestamp::InternalSwap(Timestamp* other) { ::google::protobuf::Metadata Timestamp::GetMetadata() const { protobuf_google_2fprotobuf_2ftimestamp_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ftimestamp_2eproto::file_level_metadata[0]; + return protobuf_google_2fprotobuf_2ftimestamp_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/timestamp.pb.h b/third_party/protobuf/3.2.0/src/google/protobuf/timestamp.pb.h index e6fc09a1cc0b58..9847854037e1f6 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/timestamp.pb.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/timestamp.pb.h @@ -8,12 +8,12 @@ #include -#if GOOGLE_PROTOBUF_VERSION < 3002000 +#if GOOGLE_PROTOBUF_VERSION < 3003000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3002000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -43,6 +44,9 @@ namespace protobuf { namespace protobuf_google_2fprotobuf_2ftimestamp_2eproto { // Internal implementation detail -- do not call these. struct LIBPROTOBUF_EXPORT TableStruct { + static const ::google::protobuf::internal::ParseTableField entries[]; + static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; + static const ::google::protobuf::internal::ParseTable schema[]; static const ::google::protobuf::uint32 offsets[]; static void InitDefaultsImpl(); static void Shutdown(); @@ -78,6 +82,8 @@ class LIBPROTOBUF_EXPORT Timestamp : public ::google::protobuf::Message /* @@pro return reinterpret_cast( &_Timestamp_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 0; void UnsafeArenaSwap(Timestamp* other); void Swap(Timestamp* other); @@ -101,11 +107,6 @@ class LIBPROTOBUF_EXPORT Timestamp : public ::google::protobuf::Message /* @@pro ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -154,7 +155,7 @@ class LIBPROTOBUF_EXPORT Timestamp : public ::google::protobuf::Message /* @@pro ::google::protobuf::int64 seconds_; ::google::protobuf::int32 nanos_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2ftimestamp_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2ftimestamp_2eproto::TableStruct; }; // =================================================================== diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/timestamp.proto b/third_party/protobuf/3.2.0/src/google/protobuf/timestamp.proto index 67e2eba4f85361..b7cbd17502f28b 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/timestamp.proto +++ b/third_party/protobuf/3.2.0/src/google/protobuf/timestamp.proto @@ -52,6 +52,8 @@ option objc_class_prefix = "GPB"; // and from RFC 3339 date strings. // See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). // +// # Examples +// // Example 1: Compute Timestamp from POSIX `time()`. // // Timestamp timestamp; @@ -92,6 +94,29 @@ option objc_class_prefix = "GPB"; // timestamp = Timestamp() // timestamp.GetCurrentTime() // +// # JSON Mapping +// +// In JSON format, the Timestamp type is encoded as a string in the +// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the +// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" +// where {year} is always expressed using four digits while {month}, {day}, +// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional +// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), +// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone +// is required, though only UTC (as indicated by "Z") is presently supported. +// +// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past +// 01:30 UTC on January 15, 2017. +// +// In JavaScript, one can convert a Date object to this format using the +// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString] +// method. In Python, a standard `datetime.datetime` object can be converted +// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) +// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one +// can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( +// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()) +// to obtain a formatter capable of generating timestamps in this format. +// // message Timestamp { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/type.pb.cc b/third_party/protobuf/3.2.0/src/google/protobuf/type.pb.cc index 017392c9d9958e..8f017a8921d011 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/type.pb.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/type.pb.cc @@ -40,11 +40,30 @@ const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[3]; } // namespace +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField + const TableStruct::entries[] = { + {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0}, +}; + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField + const TableStruct::aux[] = { + ::google::protobuf::internal::AuxillaryParseTableField(), +}; +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const + TableStruct::schema[] = { + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, +}; + const ::google::protobuf::uint32 TableStruct::offsets[] = { ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Type, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Type, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Type, fields_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Type, oneofs_), @@ -55,6 +74,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Field, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Field, kind_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Field, cardinality_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Field, number_), @@ -69,6 +89,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Enum, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Enum, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Enum, enumvalue_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Enum, options_), @@ -78,6 +99,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumValue, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumValue, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumValue, number_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(EnumValue, options_), @@ -85,16 +107,17 @@ const ::google::protobuf::uint32 TableStruct::offsets[] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Option, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Option, name_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Option, value_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] = { { 0, -1, sizeof(Type)}, - { 10, -1, sizeof(Field)}, - { 24, -1, sizeof(Enum)}, - { 33, -1, sizeof(EnumValue)}, - { 40, -1, sizeof(Option)}, + { 11, -1, sizeof(Field)}, + { 26, -1, sizeof(Enum)}, + { 36, -1, sizeof(EnumValue)}, + { 44, -1, sizeof(Option)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -449,7 +472,7 @@ void Type::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Type::descriptor() { protobuf_google_2fprotobuf_2ftype_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[0].descriptor; + return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Type& Type::default_instance() { @@ -504,13 +527,11 @@ bool Type::MergePartialFromCodedStream( case 2: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(18u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_fields())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -535,13 +556,11 @@ bool Type::MergePartialFromCodedStream( case 4: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(34u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_options())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -596,6 +615,9 @@ bool Type::MergePartialFromCodedStream( void Type::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Type) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -645,8 +667,10 @@ void Type::SerializeWithCachedSizes( ::google::protobuf::uint8* Type::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Type) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -662,7 +686,7 @@ ::google::protobuf::uint8* Type::InternalSerializeWithCachedSizesToArray( for (unsigned int i = 0, n = this->fields_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 2, this->fields(i), false, target); + 2, this->fields(i), deterministic, target); } // repeated string oneofs = 3; @@ -679,14 +703,14 @@ ::google::protobuf::uint8* Type::InternalSerializeWithCachedSizesToArray( for (unsigned int i = 0, n = this->options_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 4, this->options(i), false, target); + 4, this->options(i), deterministic, target); } // .google.protobuf.SourceContext source_context = 5; if (this->has_source_context()) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 5, *this->source_context_, false, target); + 5, *this->source_context_, deterministic, target); } // .google.protobuf.Syntax syntax = 6; @@ -779,6 +803,9 @@ void Type::MergeFrom(const Type& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Type) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + fields_.MergeFrom(from.fields_); oneofs_.MergeFrom(from.oneofs_); options_.MergeFrom(from.options_); @@ -831,9 +858,9 @@ void Type::UnsafeArenaSwap(Type* other) { InternalSwap(other); } void Type::InternalSwap(Type* other) { - fields_.UnsafeArenaSwap(&other->fields_); - oneofs_.UnsafeArenaSwap(&other->oneofs_); - options_.UnsafeArenaSwap(&other->options_); + fields_.InternalSwap(&other->fields_); + oneofs_.InternalSwap(&other->oneofs_); + options_.InternalSwap(&other->options_); name_.Swap(&other->name_); std::swap(source_context_, other->source_context_); std::swap(syntax_, other->syntax_); @@ -842,7 +869,7 @@ void Type::InternalSwap(Type* other) { ::google::protobuf::Metadata Type::GetMetadata() const { protobuf_google_2fprotobuf_2ftype_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[0]; + return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -862,6 +889,7 @@ void Type::set_name(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Type.name) } void Type::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -970,6 +998,7 @@ void Type::set_oneofs(int index, ::std::string&& value) { } #endif void Type::set_oneofs(int index, const char* value) { + GOOGLE_DCHECK(value != NULL); oneofs_.Mutable(index)->assign(value); // @@protoc_insertion_point(field_set_char:google.protobuf.Type.oneofs) } @@ -988,11 +1017,12 @@ void Type::add_oneofs(const ::std::string& value) { } #if LANG_CXX11 void Type::add_oneofs(::std::string&& value) { - oneofs_.Add()->assign(std::move(value)); + oneofs_.Add(std::move(value)); // @@protoc_insertion_point(field_add:google.protobuf.Type.oneofs) } #endif void Type::add_oneofs(const char* value) { + GOOGLE_DCHECK(value != NULL); oneofs_.Add()->assign(value); // @@protoc_insertion_point(field_add_char:google.protobuf.Type.oneofs) } @@ -1214,7 +1244,7 @@ void Field::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Field::descriptor() { protobuf_google_2fprotobuf_2ftype_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[1].descriptor; + return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Field& Field::default_instance() { @@ -1355,13 +1385,11 @@ bool Field::MergePartialFromCodedStream( case 9: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(74u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_options())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -1421,6 +1449,9 @@ bool Field::MergePartialFromCodedStream( void Field::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Field) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // .google.protobuf.Field.Kind kind = 1; if (this->kind() != 0) { ::google::protobuf::internal::WireFormatLite::WriteEnum( @@ -1499,8 +1530,10 @@ void Field::SerializeWithCachedSizes( ::google::protobuf::uint8* Field::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Field) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // .google.protobuf.Field.Kind kind = 1; if (this->kind() != 0) { target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( @@ -1554,7 +1587,7 @@ ::google::protobuf::uint8* Field::InternalSerializeWithCachedSizesToArray( for (unsigned int i = 0, n = this->options_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 9, this->options(i), false, target); + 9, this->options(i), deterministic, target); } // string json_name = 10; @@ -1683,6 +1716,9 @@ void Field::MergeFrom(const Field& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Field) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + options_.MergeFrom(from.options_); if (from.name().size() > 0) { set_name(from.name()); @@ -1751,7 +1787,7 @@ void Field::UnsafeArenaSwap(Field* other) { InternalSwap(other); } void Field::InternalSwap(Field* other) { - options_.UnsafeArenaSwap(&other->options_); + options_.InternalSwap(&other->options_); name_.Swap(&other->name_); type_url_.Swap(&other->type_url_); json_name_.Swap(&other->json_name_); @@ -1766,7 +1802,7 @@ void Field::InternalSwap(Field* other) { ::google::protobuf::Metadata Field::GetMetadata() const { protobuf_google_2fprotobuf_2ftype_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[1]; + return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -1828,6 +1864,7 @@ void Field::set_name(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Field.name) } void Field::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -1894,6 +1931,7 @@ void Field::set_type_url(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Field.type_url) } void Field::set_type_url(const char* value) { + GOOGLE_DCHECK(value != NULL); type_url_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -2018,6 +2056,7 @@ void Field::set_json_name(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Field.json_name) } void Field::set_json_name(const char* value) { + GOOGLE_DCHECK(value != NULL); json_name_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -2084,6 +2123,7 @@ void Field::set_default_value(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Field.default_value) } void Field::set_default_value(const char* value) { + GOOGLE_DCHECK(value != NULL); default_value_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -2259,7 +2299,7 @@ void Enum::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Enum::descriptor() { protobuf_google_2fprotobuf_2ftype_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[2].descriptor; + return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Enum& Enum::default_instance() { @@ -2313,13 +2353,11 @@ bool Enum::MergePartialFromCodedStream( case 2: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(18u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_enumvalue())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -2327,13 +2365,11 @@ bool Enum::MergePartialFromCodedStream( case 3: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(26u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_options())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -2388,6 +2424,9 @@ bool Enum::MergePartialFromCodedStream( void Enum::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Enum) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -2427,8 +2466,10 @@ void Enum::SerializeWithCachedSizes( ::google::protobuf::uint8* Enum::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Enum) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -2444,21 +2485,21 @@ ::google::protobuf::uint8* Enum::InternalSerializeWithCachedSizesToArray( for (unsigned int i = 0, n = this->enumvalue_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 2, this->enumvalue(i), false, target); + 2, this->enumvalue(i), deterministic, target); } // repeated .google.protobuf.Option options = 3; for (unsigned int i = 0, n = this->options_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 3, this->options(i), false, target); + 3, this->options(i), deterministic, target); } // .google.protobuf.SourceContext source_context = 4; if (this->has_source_context()) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 4, *this->source_context_, false, target); + 4, *this->source_context_, deterministic, target); } // .google.protobuf.Syntax syntax = 5; @@ -2543,6 +2584,9 @@ void Enum::MergeFrom(const Enum& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Enum) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + enumvalue_.MergeFrom(from.enumvalue_); options_.MergeFrom(from.options_); if (from.name().size() > 0) { @@ -2594,8 +2638,8 @@ void Enum::UnsafeArenaSwap(Enum* other) { InternalSwap(other); } void Enum::InternalSwap(Enum* other) { - enumvalue_.UnsafeArenaSwap(&other->enumvalue_); - options_.UnsafeArenaSwap(&other->options_); + enumvalue_.InternalSwap(&other->enumvalue_); + options_.InternalSwap(&other->options_); name_.Swap(&other->name_); std::swap(source_context_, other->source_context_); std::swap(syntax_, other->syntax_); @@ -2604,7 +2648,7 @@ void Enum::InternalSwap(Enum* other) { ::google::protobuf::Metadata Enum::GetMetadata() const { protobuf_google_2fprotobuf_2ftype_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[2]; + return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -2624,6 +2668,7 @@ void Enum::set_name(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Enum.name) } void Enum::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -2878,7 +2923,7 @@ void EnumValue::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* EnumValue::descriptor() { protobuf_google_2fprotobuf_2ftype_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[3].descriptor; + return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const EnumValue& EnumValue::default_instance() { @@ -2941,13 +2986,11 @@ bool EnumValue::MergePartialFromCodedStream( case 3: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(26u)) { - DO_(input->IncrementRecursionDepth()); - DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( input, add_options())); } else { goto handle_unusual; } - input->UnsafeDecrementRecursionDepth(); break; } @@ -2975,6 +3018,9 @@ bool EnumValue::MergePartialFromCodedStream( void EnumValue::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.EnumValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -3001,8 +3047,10 @@ void EnumValue::SerializeWithCachedSizes( ::google::protobuf::uint8* EnumValue::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.EnumValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -3023,7 +3071,7 @@ ::google::protobuf::uint8* EnumValue::InternalSerializeWithCachedSizesToArray( for (unsigned int i = 0, n = this->options_size(); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 3, this->options(i), false, target); + 3, this->options(i), deterministic, target); } // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.EnumValue) @@ -3085,6 +3133,9 @@ void EnumValue::MergeFrom(const EnumValue& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.EnumValue) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + options_.MergeFrom(from.options_); if (from.name().size() > 0) { set_name(from.name()); @@ -3132,7 +3183,7 @@ void EnumValue::UnsafeArenaSwap(EnumValue* other) { InternalSwap(other); } void EnumValue::InternalSwap(EnumValue* other) { - options_.UnsafeArenaSwap(&other->options_); + options_.InternalSwap(&other->options_); name_.Swap(&other->name_); std::swap(number_, other->number_); std::swap(_cached_size_, other->_cached_size_); @@ -3140,7 +3191,7 @@ void EnumValue::InternalSwap(EnumValue* other) { ::google::protobuf::Metadata EnumValue::GetMetadata() const { protobuf_google_2fprotobuf_2ftype_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[3]; + return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -3160,6 +3211,7 @@ void EnumValue::set_name(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.EnumValue.name) } void EnumValue::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -3370,7 +3422,7 @@ void Option::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Option::descriptor() { protobuf_google_2fprotobuf_2ftype_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[4].descriptor; + return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Option& Option::default_instance() { @@ -3453,6 +3505,9 @@ bool Option::MergePartialFromCodedStream( void Option::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Option) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -3474,8 +3529,10 @@ void Option::SerializeWithCachedSizes( ::google::protobuf::uint8* Option::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Option) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string name = 1; if (this->name().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -3491,7 +3548,7 @@ ::google::protobuf::uint8* Option::InternalSerializeWithCachedSizesToArray( if (this->has_value()) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageNoVirtualToArray( - 2, *this->value_, false, target); + 2, *this->value_, deterministic, target); } // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.Option) @@ -3542,6 +3599,9 @@ void Option::MergeFrom(const Option& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Option) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.name().size() > 0) { set_name(from.name()); } @@ -3595,7 +3655,7 @@ void Option::InternalSwap(Option* other) { ::google::protobuf::Metadata Option::GetMetadata() const { protobuf_google_2fprotobuf_2ftype_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[4]; + return protobuf_google_2fprotobuf_2ftype_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -3615,6 +3675,7 @@ void Option::set_name(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Option.name) } void Option::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/type.pb.h b/third_party/protobuf/3.2.0/src/google/protobuf/type.pb.h index ae81600885cc84..c1cd41640df0e3 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/type.pb.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/type.pb.h @@ -8,12 +8,12 @@ #include -#if GOOGLE_PROTOBUF_VERSION < 3002000 +#if GOOGLE_PROTOBUF_VERSION < 3003000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3002000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -64,6 +65,9 @@ namespace protobuf { namespace protobuf_google_2fprotobuf_2ftype_2eproto { // Internal implementation detail -- do not call these. struct LIBPROTOBUF_EXPORT TableStruct { + static const ::google::protobuf::internal::ParseTableField entries[]; + static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; + static const ::google::protobuf::internal::ParseTable schema[]; static const ::google::protobuf::uint32 offsets[]; static void InitDefaultsImpl(); static void Shutdown(); @@ -181,6 +185,8 @@ class LIBPROTOBUF_EXPORT Type : public ::google::protobuf::Message /* @@protoc_i return reinterpret_cast( &_Type_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 0; void UnsafeArenaSwap(Type* other); void Swap(Type* other); @@ -204,11 +210,6 @@ class LIBPROTOBUF_EXPORT Type : public ::google::protobuf::Message /* @@protoc_i ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -331,7 +332,7 @@ class LIBPROTOBUF_EXPORT Type : public ::google::protobuf::Message /* @@protoc_i ::google::protobuf::SourceContext* source_context_; int syntax_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2ftype_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2ftype_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -360,6 +361,8 @@ class LIBPROTOBUF_EXPORT Field : public ::google::protobuf::Message /* @@protoc_ return reinterpret_cast( &_Field_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 1; void UnsafeArenaSwap(Field* other); void Swap(Field* other); @@ -383,11 +386,6 @@ class LIBPROTOBUF_EXPORT Field : public ::google::protobuf::Message /* @@protoc_ ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -620,7 +618,7 @@ class LIBPROTOBUF_EXPORT Field : public ::google::protobuf::Message /* @@protoc_ ::google::protobuf::int32 oneof_index_; bool packed_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2ftype_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2ftype_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -649,6 +647,8 @@ class LIBPROTOBUF_EXPORT Enum : public ::google::protobuf::Message /* @@protoc_i return reinterpret_cast( &_Enum_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 2; void UnsafeArenaSwap(Enum* other); void Swap(Enum* other); @@ -672,11 +672,6 @@ class LIBPROTOBUF_EXPORT Enum : public ::google::protobuf::Message /* @@protoc_i ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -776,7 +771,7 @@ class LIBPROTOBUF_EXPORT Enum : public ::google::protobuf::Message /* @@protoc_i ::google::protobuf::SourceContext* source_context_; int syntax_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2ftype_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2ftype_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -805,6 +800,8 @@ class LIBPROTOBUF_EXPORT EnumValue : public ::google::protobuf::Message /* @@pro return reinterpret_cast( &_EnumValue_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 3; void UnsafeArenaSwap(EnumValue* other); void Swap(EnumValue* other); @@ -828,11 +825,6 @@ class LIBPROTOBUF_EXPORT EnumValue : public ::google::protobuf::Message /* @@pro ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -902,7 +894,7 @@ class LIBPROTOBUF_EXPORT EnumValue : public ::google::protobuf::Message /* @@pro ::google::protobuf::internal::ArenaStringPtr name_; ::google::protobuf::int32 number_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2ftype_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2ftype_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -931,6 +923,8 @@ class LIBPROTOBUF_EXPORT Option : public ::google::protobuf::Message /* @@protoc return reinterpret_cast( &_Option_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 4; void UnsafeArenaSwap(Option* other); void Swap(Option* other); @@ -954,11 +948,6 @@ class LIBPROTOBUF_EXPORT Option : public ::google::protobuf::Message /* @@protoc ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -1025,7 +1014,7 @@ class LIBPROTOBUF_EXPORT Option : public ::google::protobuf::Message /* @@protoc ::google::protobuf::internal::ArenaStringPtr name_; ::google::protobuf::Any* value_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2ftype_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2ftype_2eproto::TableStruct; }; // =================================================================== @@ -1049,6 +1038,7 @@ inline void Type::set_name(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Type.name) } inline void Type::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -1157,6 +1147,7 @@ inline void Type::set_oneofs(int index, ::std::string&& value) { } #endif inline void Type::set_oneofs(int index, const char* value) { + GOOGLE_DCHECK(value != NULL); oneofs_.Mutable(index)->assign(value); // @@protoc_insertion_point(field_set_char:google.protobuf.Type.oneofs) } @@ -1175,11 +1166,12 @@ inline void Type::add_oneofs(const ::std::string& value) { } #if LANG_CXX11 inline void Type::add_oneofs(::std::string&& value) { - oneofs_.Add()->assign(std::move(value)); + oneofs_.Add(std::move(value)); // @@protoc_insertion_point(field_add:google.protobuf.Type.oneofs) } #endif inline void Type::add_oneofs(const char* value) { + GOOGLE_DCHECK(value != NULL); oneofs_.Add()->assign(value); // @@protoc_insertion_point(field_add_char:google.protobuf.Type.oneofs) } @@ -1353,6 +1345,7 @@ inline void Field::set_name(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Field.name) } inline void Field::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -1419,6 +1412,7 @@ inline void Field::set_type_url(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Field.type_url) } inline void Field::set_type_url(const char* value) { + GOOGLE_DCHECK(value != NULL); type_url_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -1543,6 +1537,7 @@ inline void Field::set_json_name(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Field.json_name) } inline void Field::set_json_name(const char* value) { + GOOGLE_DCHECK(value != NULL); json_name_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -1609,6 +1604,7 @@ inline void Field::set_default_value(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Field.default_value) } inline void Field::set_default_value(const char* value) { + GOOGLE_DCHECK(value != NULL); default_value_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -1679,6 +1675,7 @@ inline void Enum::set_name(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Enum.name) } inline void Enum::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -1874,6 +1871,7 @@ inline void EnumValue::set_name(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.EnumValue.name) } inline void EnumValue::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -1988,6 +1986,7 @@ inline void Option::set_name(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.Option.name) } inline void Option::set_name(const char* value) { + GOOGLE_DCHECK(value != NULL); name_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/unittest.proto b/third_party/protobuf/3.2.0/src/google/protobuf/unittest.proto index 188a4f478cf156..2040487e83fc65 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/unittest.proto +++ b/third_party/protobuf/3.2.0/src/google/protobuf/unittest.proto @@ -433,7 +433,14 @@ message TestRecursiveMessage { // Test that mutual recursion works. message TestMutualRecursionA { + message SubMessage { + optional TestMutualRecursionB b = 1; + } optional TestMutualRecursionB bb = 1; + optional group SubGroup = 2 { + optional SubMessage sub_message = 3; // Needed because of bug in javatest + optional TestAllTypes not_in_this_scc = 4; + } } message TestMutualRecursionB { @@ -441,6 +448,15 @@ message TestMutualRecursionB { optional int32 optional_int32 = 2; } +message TestIsInitialized { + message SubMessage { + optional group SubGroup = 1 { + required int32 i = 2; + } + } + optional SubMessage sub_message = 1; +} + // Test that groups have disjoint field numbers from their siblings and // parents. This is NOT possible in proto1; only google.protobuf. When attempting // to compile with proto1, this will emit an error; so we only include it diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/unittest_lazy_dependencies.proto b/third_party/protobuf/3.2.0/src/google/protobuf/unittest_lazy_dependencies.proto new file mode 100644 index 00000000000000..2f5efd2aaa5880 --- /dev/null +++ b/third_party/protobuf/3.2.0/src/google/protobuf/unittest_lazy_dependencies.proto @@ -0,0 +1,75 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: trafacz@google.com (Todd Rafacz) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// A proto file we will use for unit testing. + +syntax = "proto2"; + +import "google/protobuf/unittest_lazy_dependencies_custom_option.proto"; + +// Some generic_services option(s) added automatically. +// See: http://go/proto2-generic-services-default +option cc_generic_services = true; // auto-added +option java_generic_services = true; // auto-added +option py_generic_services = true; // auto-added +option cc_enable_arenas = true; + +// We don't put this in a package within proto2 because we need to make sure +// that the generated code doesn't depend on being in the proto2 namespace. +// In test_util.h we do "using namespace unittest = protobuf_unittest". +package protobuf_unittest.lazy_imports; + +// Protos optimized for SPEED use a strict superset of the generated code +// of equivalent ones optimized for CODE_SIZE, so we should optimize all our +// tests for speed unless explicitly testing code size optimization. +option optimize_for = SPEED; + +option java_outer_classname = "UnittestLazyImportsProto"; + +// The following are used to test that the proto file +// with the definition of the following field types is +// not built when this proto file is built. Then test +// that calling message_type() etc will build the correct +// descriptor lazily and return it. + +message ImportedMessage { + optional LazyMessage lazy_message = 1; +} + +message MessageCustomOption { +} + +message MessageCustomOption2 { + option (lazy_enum_option) = LAZY_ENUM_0; +} diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/unittest_lazy_dependencies_custom_option.proto b/third_party/protobuf/3.2.0/src/google/protobuf/unittest_lazy_dependencies_custom_option.proto new file mode 100644 index 00000000000000..22438257d3935e --- /dev/null +++ b/third_party/protobuf/3.2.0/src/google/protobuf/unittest_lazy_dependencies_custom_option.proto @@ -0,0 +1,67 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: trafacz@google.com (Todd Rafacz) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// A proto file we will use for unit testing. + +syntax = "proto2"; + +import "google/protobuf/unittest_lazy_dependencies_enum.proto"; +import "google/protobuf/descriptor.proto"; + +// Some generic_services option(s) added automatically. +// See: http://go/proto2-generic-services-default +option cc_generic_services = true; // auto-added +option java_generic_services = true; // auto-added +option py_generic_services = true; // auto-added +option cc_enable_arenas = true; + +// We don't put this in a package within proto2 because we need to make sure +// that the generated code doesn't depend on being in the proto2 namespace. +// In test_util.h we do "using namespace unittest = protobuf_unittest". +package protobuf_unittest.lazy_imports; + +// Protos optimized for SPEED use a strict superset of the generated code +// of equivalent ones optimized for CODE_SIZE, so we should optimize all our +// tests for speed unless explicitly testing code size optimization. +option optimize_for = SPEED; + +option java_outer_classname = "UnittestLazyImportsCustomOptionProto"; + +message LazyMessage { + optional int32 a = 1; +} + +extend google.protobuf.MessageOptions { + optional LazyEnum lazy_enum_option = 138596335 [default = LAZY_ENUM_1]; +} diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/unittest_lazy_dependencies_enum.proto b/third_party/protobuf/3.2.0/src/google/protobuf/unittest_lazy_dependencies_enum.proto new file mode 100644 index 00000000000000..9be64d85801f02 --- /dev/null +++ b/third_party/protobuf/3.2.0/src/google/protobuf/unittest_lazy_dependencies_enum.proto @@ -0,0 +1,61 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: trafacz@google.com (Todd Rafacz) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// A proto file we will use for unit testing. + +syntax = "proto2"; + +// Some generic_services option(s) added automatically. +// See: http://go/proto2-generic-services-default +option cc_generic_services = true; // auto-added +option java_generic_services = true; // auto-added +option py_generic_services = true; // auto-added +option cc_enable_arenas = true; + +// We don't put this in a package within proto2 because we need to make sure +// that the generated code doesn't depend on being in the proto2 namespace. +// In test_util.h we do "using namespace unittest = protobuf_unittest". +package protobuf_unittest.lazy_imports; + +// Protos optimized for SPEED use a strict superset of the generated code +// of equivalent ones optimized for CODE_SIZE, so we should optimize all our +// tests for speed unless explicitly testing code size optimization. +option optimize_for = SPEED; + +option java_outer_classname = "UnittestLazyImportsEnumProto"; + +enum LazyEnum { + LAZY_ENUM_0 = 0; + LAZY_ENUM_1 = 1; +} diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/unittest_proto3_arena.proto b/third_party/protobuf/3.2.0/src/google/protobuf/unittest_proto3_arena.proto index b835a6ba36ae85..9375d85ae07903 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/unittest_proto3_arena.proto +++ b/third_party/protobuf/3.2.0/src/google/protobuf/unittest_proto3_arena.proto @@ -96,6 +96,8 @@ message TestAllTypes { optional_public_import_message = 26; NestedMessage optional_lazy_message = 27 [lazy=true]; + protobuf_unittest_import.ImportMessage optional_lazy_import_message = 115 + [lazy = true]; // Repeated repeated int32 repeated_int32 = 31; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/unknown_field_set.cc b/third_party/protobuf/3.2.0/src/google/protobuf/unknown_field_set.cc index 9472c4fa5f4c4c..0ada85e5704361 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/unknown_field_set.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/unknown_field_set.cc @@ -123,21 +123,21 @@ void UnknownFieldSet::MergeToInternalMetdata( metadata->mutable_unknown_fields()->MergeFrom(other); } -int UnknownFieldSet::SpaceUsedExcludingSelf() const { +size_t UnknownFieldSet::SpaceUsedExcludingSelfLong() const { if (fields_ == NULL) return 0; - int total_size = sizeof(*fields_) + sizeof(UnknownField) * fields_->size(); + size_t total_size = sizeof(*fields_) + sizeof(UnknownField) * fields_->size(); for (int i = 0; i < fields_->size(); i++) { const UnknownField& field = (*fields_)[i]; switch (field.type()) { case UnknownField::TYPE_LENGTH_DELIMITED: - total_size += sizeof(*field.length_delimited_.string_value_) + - internal::StringSpaceUsedExcludingSelf( - *field.length_delimited_.string_value_); + total_size += sizeof(*field.data_.length_delimited_.string_value_) + + internal::StringSpaceUsedExcludingSelfLong( + *field.data_.length_delimited_.string_value_); break; case UnknownField::TYPE_GROUP: - total_size += field.group_->SpaceUsed(); + total_size += field.data_.group_->SpaceUsedLong(); break; default: break; @@ -146,7 +146,7 @@ int UnknownFieldSet::SpaceUsedExcludingSelf() const { return total_size; } -int UnknownFieldSet::SpaceUsed() const { +size_t UnknownFieldSet::SpaceUsedLong() const { return sizeof(*this) + SpaceUsedExcludingSelf(); } @@ -154,7 +154,7 @@ void UnknownFieldSet::AddVarint(int number, uint64 value) { UnknownField field; field.number_ = number; field.SetType(UnknownField::TYPE_VARINT); - field.varint_ = value; + field.data_.varint_ = value; if (fields_ == NULL) fields_ = new std::vector(); fields_->push_back(field); } @@ -163,7 +163,7 @@ void UnknownFieldSet::AddFixed32(int number, uint32 value) { UnknownField field; field.number_ = number; field.SetType(UnknownField::TYPE_FIXED32); - field.fixed32_ = value; + field.data_.fixed32_ = value; if (fields_ == NULL) fields_ = new std::vector(); fields_->push_back(field); } @@ -172,7 +172,7 @@ void UnknownFieldSet::AddFixed64(int number, uint64 value) { UnknownField field; field.number_ = number; field.SetType(UnknownField::TYPE_FIXED64); - field.fixed64_ = value; + field.data_.fixed64_ = value; if (fields_ == NULL) fields_ = new std::vector(); fields_->push_back(field); } @@ -181,10 +181,10 @@ string* UnknownFieldSet::AddLengthDelimited(int number) { UnknownField field; field.number_ = number; field.SetType(UnknownField::TYPE_LENGTH_DELIMITED); - field.length_delimited_.string_value_ = new string; + field.data_.length_delimited_.string_value_ = new string; if (fields_ == NULL) fields_ = new std::vector(); fields_->push_back(field); - return field.length_delimited_.string_value_; + return field.data_.length_delimited_.string_value_; } @@ -192,10 +192,10 @@ UnknownFieldSet* UnknownFieldSet::AddGroup(int number) { UnknownField field; field.number_ = number; field.SetType(UnknownField::TYPE_GROUP); - field.group_ = new UnknownFieldSet; + field.data_.group_ = new UnknownFieldSet; if (fields_ == NULL) fields_ = new std::vector(); fields_->push_back(field); - return field.group_; + return field.data_.group_; } void UnknownFieldSet::AddField(const UnknownField& field) { @@ -276,10 +276,10 @@ bool UnknownFieldSet::ParseFromArray(const void* data, int size) { void UnknownField::Delete() { switch (type()) { case UnknownField::TYPE_LENGTH_DELIMITED: - delete length_delimited_.string_value_; + delete data_.length_delimited_.string_value_; break; case UnknownField::TYPE_GROUP: - delete group_; + delete data_.group_; break; default: break; @@ -291,10 +291,10 @@ void UnknownField::Delete() { void UnknownField::Reset() { switch (type()) { case UnknownField::TYPE_LENGTH_DELIMITED: - length_delimited_.string_value_ = NULL; + data_.length_delimited_.string_value_ = NULL; break; case UnknownField::TYPE_GROUP: { - group_ = NULL; + data_.group_ = NULL; break; } default: @@ -305,13 +305,13 @@ void UnknownField::Reset() { void UnknownField::DeepCopy(const UnknownField& other) { switch (type()) { case UnknownField::TYPE_LENGTH_DELIMITED: - length_delimited_.string_value_ = new string( - *length_delimited_.string_value_); + data_.length_delimited_.string_value_ = new string( + *data_.length_delimited_.string_value_); break; case UnknownField::TYPE_GROUP: { UnknownFieldSet* group = new UnknownFieldSet(); - group->InternalMergeFrom(*group_); - group_ = group; + group->InternalMergeFrom(*data_.group_); + data_.group_ = group; break; } default: @@ -323,14 +323,14 @@ void UnknownField::DeepCopy(const UnknownField& other) { void UnknownField::SerializeLengthDelimitedNoTag( io::CodedOutputStream* output) const { GOOGLE_DCHECK_EQ(TYPE_LENGTH_DELIMITED, type()); - const string& data = *length_delimited_.string_value_; + const string& data = *data_.length_delimited_.string_value_; output->WriteVarint32(data.size()); output->WriteRawMaybeAliased(data.data(), data.size()); } uint8* UnknownField::SerializeLengthDelimitedNoTagToArray(uint8* target) const { GOOGLE_DCHECK_EQ(TYPE_LENGTH_DELIMITED, type()); - const string& data = *length_delimited_.string_value_; + const string& data = *data_.length_delimited_.string_value_; target = io::CodedOutputStream::WriteVarint32ToArray(data.size(), target); target = io::CodedOutputStream::WriteStringToArray(data, target); return target; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/unknown_field_set.h b/third_party/protobuf/3.2.0/src/google/protobuf/unknown_field_set.h index c2ad89182dcdb8..002ea8e849de34 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/unknown_field_set.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/unknown_field_set.h @@ -43,6 +43,7 @@ #include #include #include +#include namespace google { namespace protobuf { @@ -106,10 +107,18 @@ class LIBPROTOBUF_EXPORT UnknownFieldSet { // Computes (an estimate of) the total number of bytes currently used for // storing the unknown fields in memory. Does NOT include // sizeof(*this) in the calculation. - int SpaceUsedExcludingSelf() const; + size_t SpaceUsedExcludingSelfLong() const; + + int SpaceUsedExcludingSelf() const { + return internal::ToIntSize(SpaceUsedExcludingSelfLong()); + } // Version of SpaceUsed() including sizeof(*this). - int SpaceUsed() const; + size_t SpaceUsedLong() const; + + int SpaceUsed() const { + return internal::ToIntSize(SpaceUsedLong()); + } // Returns the number of fields present in the UnknownFieldSet. inline int field_count() const; @@ -214,8 +223,6 @@ class LIBPROTOBUF_EXPORT UnknownField { inline size_t GetLengthDelimitedSize() const; - private: - friend class UnknownFieldSet; // If this UnknownField contains a pointer, delete it. void Delete(); @@ -243,7 +250,7 @@ class LIBPROTOBUF_EXPORT UnknownField { uint64 fixed64_; mutable union LengthDelimited length_delimited_; UnknownFieldSet* group_; - }; + } data_; }; // =================================================================== @@ -287,6 +294,8 @@ inline void UnknownFieldSet::AddLengthDelimited( } + + inline int UnknownField::number() const { return number_; } inline UnknownField::Type UnknownField::type() const { return static_cast(type_); @@ -294,53 +303,53 @@ inline UnknownField::Type UnknownField::type() const { inline uint64 UnknownField::varint() const { assert(type() == TYPE_VARINT); - return varint_; + return data_.varint_; } inline uint32 UnknownField::fixed32() const { assert(type() == TYPE_FIXED32); - return fixed32_; + return data_.fixed32_; } inline uint64 UnknownField::fixed64() const { assert(type() == TYPE_FIXED64); - return fixed64_; + return data_.fixed64_; } inline const string& UnknownField::length_delimited() const { assert(type() == TYPE_LENGTH_DELIMITED); - return *length_delimited_.string_value_; + return *data_.length_delimited_.string_value_; } inline const UnknownFieldSet& UnknownField::group() const { assert(type() == TYPE_GROUP); - return *group_; + return *data_.group_; } inline void UnknownField::set_varint(uint64 value) { assert(type() == TYPE_VARINT); - varint_ = value; + data_.varint_ = value; } inline void UnknownField::set_fixed32(uint32 value) { assert(type() == TYPE_FIXED32); - fixed32_ = value; + data_.fixed32_ = value; } inline void UnknownField::set_fixed64(uint64 value) { assert(type() == TYPE_FIXED64); - fixed64_ = value; + data_.fixed64_ = value; } inline void UnknownField::set_length_delimited(const string& value) { assert(type() == TYPE_LENGTH_DELIMITED); - length_delimited_.string_value_->assign(value); + data_.length_delimited_.string_value_->assign(value); } inline string* UnknownField::mutable_length_delimited() { assert(type() == TYPE_LENGTH_DELIMITED); - return length_delimited_.string_value_; + return data_.length_delimited_.string_value_; } inline UnknownFieldSet* UnknownField::mutable_group() { assert(type() == TYPE_GROUP); - return group_; + return data_.group_; } inline size_t UnknownField::GetLengthDelimitedSize() const { GOOGLE_DCHECK_EQ(TYPE_LENGTH_DELIMITED, type()); - return length_delimited_.string_value_->size(); + return data_.length_delimited_.string_value_->size(); } inline void UnknownField::SetType(Type type) { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/delimited_message_util_test.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/delimited_message_util_test.cc index b261d43cc9139e..157a84112ccd2a 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/delimited_message_util_test.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/delimited_message_util_test.cc @@ -15,7 +15,7 @@ namespace protobuf { namespace util { TEST(DelimitedMessageUtilTest, DelimitedMessages) { - stringstream stream; + std::stringstream stream; { protobuf_unittest::TestAllTypes message1; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/default_value_objectwriter.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/default_value_objectwriter.cc index b33ad206999fb1..5763d0c6120955 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/default_value_objectwriter.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/default_value_objectwriter.cc @@ -189,6 +189,39 @@ void DefaultValueObjectWriter::RegisterFieldScrubCallBack( field_scrub_callback_.reset(field_scrub_callback.release()); } +DefaultValueObjectWriter::Node* DefaultValueObjectWriter::CreateNewNode( + const string& name, const google::protobuf::Type* type, NodeKind kind, + const DataPiece& data, bool is_placeholder, const std::vector& path, + bool suppress_empty_list, FieldScrubCallBack* field_scrub_callback) { + return new Node(name, type, kind, data, is_placeholder, path, + suppress_empty_list, field_scrub_callback); +} + +DefaultValueObjectWriter::Node* DefaultValueObjectWriter::CreateNewNode( + const string& name, const google::protobuf::Type* type, NodeKind kind, + const DataPiece& data, bool is_placeholder, const std::vector& path, + bool suppress_empty_list, bool preserve_proto_field_names, + FieldScrubCallBack* field_scrub_callback) { + return new Node(name, type, kind, data, is_placeholder, path, + suppress_empty_list, preserve_proto_field_names, + field_scrub_callback); +} + +DefaultValueObjectWriter::Node::Node( + const string& name, const google::protobuf::Type* type, NodeKind kind, + const DataPiece& data, bool is_placeholder, const std::vector& path, + bool suppress_empty_list, FieldScrubCallBack* field_scrub_callback) + : name_(name), + type_(type), + kind_(kind), + is_any_(false), + data_(data), + is_placeholder_(is_placeholder), + path_(path), + suppress_empty_list_(suppress_empty_list), + preserve_proto_field_names_(false), + field_scrub_callback_(field_scrub_callback) {} + DefaultValueObjectWriter::Node::Node( const string& name, const google::protobuf::Type* type, NodeKind kind, const DataPiece& data, bool is_placeholder, const std::vector& path, @@ -473,10 +506,10 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::StartObject( StringPiece name) { if (current_ == NULL) { std::vector path; - root_.reset(new Node(name.ToString(), &type_, OBJECT, DataPiece::NullData(), - false, path, suppress_empty_list_, - preserve_proto_field_names_, - field_scrub_callback_.get())); + root_.reset(CreateNewNode(string(name), &type_, OBJECT, + DataPiece::NullData(), false, path, + suppress_empty_list_, preserve_proto_field_names_, + field_scrub_callback_.get())); root_->PopulateChildren(typeinfo_); current_ = root_.get(); return this; @@ -486,14 +519,15 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::StartObject( if (current_->kind() == LIST || current_->kind() == MAP || child == NULL) { // If current_ is a list or a map node, we should create a new child and use // the type of current_ as the type of the new child. - google::protobuf::scoped_ptr node(new Node( - name.ToString(), ((current_->kind() == LIST || current_->kind() == MAP) - ? current_->type() - : NULL), - OBJECT, DataPiece::NullData(), false, - child == NULL ? current_->path() : child->path(), - suppress_empty_list_, preserve_proto_field_names_, - field_scrub_callback_.get())); + google::protobuf::scoped_ptr node( + CreateNewNode(string(name), + ((current_->kind() == LIST || current_->kind() == MAP) + ? current_->type() + : NULL), + OBJECT, DataPiece::NullData(), false, + child == NULL ? current_->path() : child->path(), + suppress_empty_list_, preserve_proto_field_names_, + field_scrub_callback_.get())); child = node.get(); current_->AddChild(node.release()); } @@ -523,10 +557,10 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::StartList( StringPiece name) { if (current_ == NULL) { std::vector path; - root_.reset(new Node(name.ToString(), &type_, LIST, DataPiece::NullData(), - false, path, suppress_empty_list_, - preserve_proto_field_names_, - field_scrub_callback_.get())); + root_.reset(CreateNewNode(string(name), &type_, LIST, DataPiece::NullData(), + false, path, suppress_empty_list_, + preserve_proto_field_names_, + field_scrub_callback_.get())); current_ = root_.get(); return this; } @@ -534,10 +568,10 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::StartList( Node* child = current_->FindChild(name); if (child == NULL || child->kind() != LIST) { google::protobuf::scoped_ptr node( - new Node(name.ToString(), NULL, LIST, DataPiece::NullData(), false, - child == NULL ? current_->path() : child->path(), - suppress_empty_list_, preserve_proto_field_names_, - field_scrub_callback_.get())); + CreateNewNode(string(name), NULL, LIST, DataPiece::NullData(), false, + child == NULL ? current_->path() : child->path(), + suppress_empty_list_, preserve_proto_field_names_, + field_scrub_callback_.get())); child = node.get(); current_->AddChild(node.release()); } @@ -596,10 +630,10 @@ void DefaultValueObjectWriter::RenderDataPiece(StringPiece name, if (child == NULL || child->kind() != PRIMITIVE) { // No children are found, creates a new child. google::protobuf::scoped_ptr node( - new Node(name.ToString(), NULL, PRIMITIVE, data, false, - child == NULL ? current_->path() : child->path(), - suppress_empty_list_, preserve_proto_field_names_, - field_scrub_callback_.get())); + CreateNewNode(string(name), NULL, PRIMITIVE, data, false, + child == NULL ? current_->path() : child->path(), + suppress_empty_list_, preserve_proto_field_names_, + field_scrub_callback_.get())); current_->AddChild(node.release()); } else { child->set_data(data); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/default_value_objectwriter.h b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/default_value_objectwriter.h index ddf2359408a236..ef2cc98103dd1c 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/default_value_objectwriter.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/default_value_objectwriter.h @@ -127,9 +127,11 @@ class LIBPROTOBUF_EXPORT DefaultValueObjectWriter : public ObjectWriter { void set_suppress_empty_list(bool value) { suppress_empty_list_ = value; } // If set to true, original proto field names are used - void set_preserve_proto_field_names(bool value) { preserve_proto_field_names_ = value; } + void set_preserve_proto_field_names(bool value) { + preserve_proto_field_names_ = value; + } - private: + protected: enum NodeKind { PRIMITIVE = 0, OBJECT = 1, @@ -144,7 +146,12 @@ class LIBPROTOBUF_EXPORT DefaultValueObjectWriter : public ObjectWriter { Node(const string& name, const google::protobuf::Type* type, NodeKind kind, const DataPiece& data, bool is_placeholder, const std::vector& path, bool suppress_empty_list, - bool preserve_proto_field_names, FieldScrubCallBack* field_scrub_callback); + FieldScrubCallBack* field_scrub_callback); + Node(const string& name, const google::protobuf::Type* type, NodeKind kind, + const DataPiece& data, bool is_placeholder, + const std::vector& path, bool suppress_empty_list, + bool preserve_proto_field_names, + FieldScrubCallBack* field_scrub_callback); virtual ~Node() { for (int i = 0; i < children_.size(); ++i) { delete children_[i]; @@ -160,7 +167,7 @@ class LIBPROTOBUF_EXPORT DefaultValueObjectWriter : public ObjectWriter { // Populates children of this Node based on its type. If there are already // children created, they will be merged to the result. Caller should pass // in TypeInfo for looking up types of the children. - void PopulateChildren(const TypeInfo* typeinfo); + virtual void PopulateChildren(const TypeInfo* typeinfo); // If this node is a leaf (has data), writes the current node to the // ObjectWriter; if not, then recursively writes the children to the @@ -190,7 +197,7 @@ class LIBPROTOBUF_EXPORT DefaultValueObjectWriter : public ObjectWriter { is_placeholder_ = is_placeholder; } - private: + protected: // Returns the Value Type of a map given the Type of the map entry and a // TypeInfo instance. const google::protobuf::Type* GetMapValueType( @@ -230,9 +237,32 @@ class LIBPROTOBUF_EXPORT DefaultValueObjectWriter : public ObjectWriter { // or not. This callback is owned by the creator of this node. FieldScrubCallBack* field_scrub_callback_; + private: GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Node); }; + // Creates a new Node and returns it. Caller owns memory of returned object. + virtual Node* CreateNewNode(const string& name, + const google::protobuf::Type* type, NodeKind kind, + const DataPiece& data, bool is_placeholder, + const std::vector& path, + bool suppress_empty_list, + FieldScrubCallBack* field_scrub_callback); + + // Creates a new Node and returns it. Caller owns memory of returned object. + virtual Node* CreateNewNode(const string& name, + const google::protobuf::Type* type, NodeKind kind, + const DataPiece& data, bool is_placeholder, + const std::vector& path, + bool suppress_empty_list, + bool preserve_proto_field_names, + FieldScrubCallBack* field_scrub_callback); + + // Creates a DataPiece containing the default value of the type of the field. + static DataPiece CreateDefaultDataPieceForField( + const google::protobuf::Field& field, const TypeInfo* typeinfo); + + private: // Populates children of "node" if it is an "any" Node and its real type has // been given. void MaybePopulateChildrenOfAny(Node* node); @@ -241,10 +271,6 @@ class LIBPROTOBUF_EXPORT DefaultValueObjectWriter : public ObjectWriter { // NULL. void WriteRoot(); - // Creates a DataPiece containing the default value of the type of the field. - static DataPiece CreateDefaultDataPieceForField( - const google::protobuf::Field& field, const TypeInfo* typeinfo); - // Adds or replaces the data_ of a primitive child node. void RenderDataPiece(StringPiece name, const DataPiece& data); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/field_mask_utility.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/field_mask_utility.cc index 53b90fb05db4d6..38835f67d2d951 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/field_mask_utility.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/field_mask_utility.cc @@ -44,11 +44,6 @@ inline util::Status CallPathSink(PathSinkCallback path_sink, return path_sink->Run(arg); } -util::Status CreatePublicError(util::error::Code code, - const string& message) { - return util::Status(code, message); -} - // Appends a FieldMask path segment to a prefix. string AppendPathSegmentToPrefix(StringPiece prefix, StringPiece segment) { if (prefix.empty()) { @@ -216,7 +211,7 @@ util::Status DecodeCompactFieldMaskPaths(StringPiece paths, StrCat("Invalid FieldMask '", paths, "'. Cannot find matching ')' for all '('.")); } - return util::Status::OK; + return util::Status(); } } // namespace converter diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/json_escaping.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/json_escaping.cc index 47e4dd6df9dc6a..18b7f92363db6d 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/json_escaping.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/json_escaping.cc @@ -84,30 +84,6 @@ static const char kCommonEscapes[160][7] = { "\\u009c", "\\u009d", "\\u009e", "\\u009f" }; -// Determines if the given char value is a unicode high-surrogate code unit. -// Such values do not represent characters by themselves, but are used in the -// representation of supplementary characters in the utf-16 encoding. -inline bool IsHighSurrogate(uint16 c) { - // Optimized form of: - // return c >= kMinHighSurrogate && c <= kMaxHighSurrogate; - // (Reduced from 3 ALU instructions to 2 ALU instructions) - return (c & ~(JsonEscaping::kMaxHighSurrogate - - JsonEscaping::kMinHighSurrogate)) - == JsonEscaping::kMinHighSurrogate; -} - -// Determines if the given char value is a unicode low-surrogate code unit. -// Such values do not represent characters by themselves, but are used in the -// representation of supplementary characters in the utf-16 encoding. -inline bool IsLowSurrogate(uint16 c) { - // Optimized form of: - // return c >= kMinLowSurrogate && c <= kMaxLowSurrogate; - // (Reduced from 3 ALU instructions to 2 ALU instructions) - return (c & ~(JsonEscaping::kMaxLowSurrogate - - JsonEscaping::kMinLowSurrogate)) - == JsonEscaping::kMinLowSurrogate; -} - // Determines if the given char value is a unicode surrogate code unit (either // high-surrogate or low-surrogate). inline bool IsSurrogate(uint32 c) { @@ -117,36 +93,12 @@ inline bool IsSurrogate(uint32 c) { return (c & 0xfffff800) == JsonEscaping::kMinHighSurrogate; } -// Returns true if the given unicode code point cp is -// in the supplementary character range. -inline bool IsSupplementalCodePoint(uint32 cp) { - // Optimized form of: - // return kMinSupplementaryCodePoint <= cp && cp <= kMaxCodePoint; - // (Reduced from 3 ALU instructions to 2 ALU instructions) - return (cp & ~(JsonEscaping::kMinSupplementaryCodePoint - 1)) - < JsonEscaping::kMaxCodePoint; -} - // Returns true if the given unicode code point cp is a valid // unicode code point (i.e. in the range 0 <= cp <= kMaxCodePoint). inline bool IsValidCodePoint(uint32 cp) { return cp <= JsonEscaping::kMaxCodePoint; } -// Converts the specified surrogate pair to its supplementary code point value. -// It is the callers' responsibility to validate the specified surrogate pair. -inline uint32 ToCodePoint(uint16 high, uint16 low) { - // Optimized form of: - // return ((high - kMinHighSurrogate) << 10) - // + (low - kMinLowSurrogate) - // + kMinSupplementaryCodePoint; - // (Reduced from 5 ALU instructions to 3 ALU instructions) - return (high << 10) + low + - (JsonEscaping::kMinSupplementaryCodePoint - - (static_cast(JsonEscaping::kMinHighSurrogate) << 10) - - JsonEscaping::kMinLowSurrogate); -} - // Returns the low surrogate for the given unicode code point. The result is // meaningless if the given code point is not a supplementary character. inline uint16 ToLowSurrogate(uint32 cp) { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/json_stream_parser.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/json_stream_parser.cc index b38030c3c61a68..047c14e1503326 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/json_stream_parser.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/json_stream_parser.cc @@ -130,7 +130,7 @@ util::Status JsonStreamParser::Parse(StringPiece json) { // Don't point chunk to leftover_ because leftover_ will be updated in // ParseChunk(chunk). chunk_storage_.swap(leftover_); - json.AppendToString(&chunk_storage_); + StrAppend(&chunk_storage_, json); chunk = StringPiece(chunk_storage_); } @@ -141,11 +141,11 @@ util::Status JsonStreamParser::Parse(StringPiece json) { // Any leftover characters are stashed in leftover_ for later parsing when // there is more data available. - chunk.substr(n).AppendToString(&leftover_); + StrAppend(&leftover_, chunk.substr(n)); return status; } else { - chunk.CopyToString(&leftover_); - return util::Status::OK; + leftover_.assign(chunk.data(), chunk.size()); + return util::Status(); } } @@ -153,7 +153,7 @@ util::Status JsonStreamParser::FinishParse() { // If we do not expect anything and there is nothing left to parse we're all // done. if (stack_.empty() && leftover_.empty()) { - return util::Status::OK; + return util::Status(); } // Storage for UTF8-coerced string. @@ -184,7 +184,7 @@ util::Status JsonStreamParser::FinishParse() { util::Status JsonStreamParser::ParseChunk(StringPiece chunk) { // Do not do any work if the chunk is empty. - if (chunk.empty()) return util::Status::OK; + if (chunk.empty()) return util::Status(); p_ = json_ = chunk; @@ -206,7 +206,7 @@ util::Status JsonStreamParser::ParseChunk(StringPiece chunk) { // unparsed data left, we save it for later parse. leftover_ = p_.ToString(); } - return util::Status::OK; + return util::Status(); } util::Status JsonStreamParser::RunParser() { @@ -252,15 +252,15 @@ util::Status JsonStreamParser::RunParser() { // If we have a key we still need to render, make sure to save off the // contents in our own storage. if (!key_.empty() && key_storage_.empty()) { - key_.AppendToString(&key_storage_); + StrAppend(&key_storage_, key_); key_ = StringPiece(key_storage_); } - result = util::Status::OK; + result = util::Status(); } return result; } } - return util::Status::OK; + return util::Status(); } util::Status JsonStreamParser::ParseValue(TokenType type) { @@ -386,7 +386,7 @@ util::Status JsonStreamParser::ParseStringHelper() { // start fresh. string_open_ = 0; Advance(); - return util::Status::OK; + return util::Status(); } // Normal character, just advance past it. Advance(); @@ -468,7 +468,7 @@ util::Status JsonStreamParser::ParseUnicodeEscape() { // Advance past the [final] code unit escape. p_.remove_prefix(kUnicodeEscapedLength); parsed_storage_.append(buf, len); - return util::Status::OK; + return util::Status(); } util::Status JsonStreamParser::ParseNumber() { @@ -542,7 +542,7 @@ util::Status JsonStreamParser::ParseNumberHelper(NumberResult* result) { } result->type = NumberResult::DOUBLE; p_.remove_prefix(index); - return util::Status::OK; + return util::Status(); } // Positive non-floating point number, parse as a uint64. @@ -556,7 +556,7 @@ util::Status JsonStreamParser::ParseNumberHelper(NumberResult* result) { } result->type = NumberResult::UINT; p_.remove_prefix(index); - return util::Status::OK; + return util::Status(); } // Octal/Hex numbers are not valid JSON values. @@ -569,7 +569,7 @@ util::Status JsonStreamParser::ParseNumberHelper(NumberResult* result) { } result->type = NumberResult::INT; p_.remove_prefix(index); - return util::Status::OK; + return util::Status(); } util::Status JsonStreamParser::HandleBeginObject() { @@ -578,7 +578,7 @@ util::Status JsonStreamParser::HandleBeginObject() { ow_->StartObject(key_); key_ = StringPiece(); stack_.push(ENTRY); - return util::Status::OK; + return util::Status(); } util::Status JsonStreamParser::ParseObjectMid(TokenType type) { @@ -590,13 +590,13 @@ util::Status JsonStreamParser::ParseObjectMid(TokenType type) { if (type == END_OBJECT) { Advance(); ow_->EndObject(); - return util::Status::OK; + return util::Status(); } // Found a comma, advance past it and get ready for an entry. if (type == VALUE_SEPARATOR) { Advance(); stack_.push(ENTRY); - return util::Status::OK; + return util::Status(); } // Illegal token after key:value pair. return ReportFailure("Expected , or } after key:value pair."); @@ -611,7 +611,7 @@ util::Status JsonStreamParser::ParseEntry(TokenType type) { if (type == END_OBJECT) { ow_->EndObject(); Advance(); - return util::Status::OK; + return util::Status(); } util::Status result; @@ -650,7 +650,7 @@ util::Status JsonStreamParser::ParseEntryMid(TokenType type) { if (type == ENTRY_SEPARATOR) { Advance(); stack_.push(VALUE); - return util::Status::OK; + return util::Status(); } return ReportFailure("Expected : between key:value pair."); } @@ -661,7 +661,7 @@ util::Status JsonStreamParser::HandleBeginArray() { ow_->StartList(key_); key_ = StringPiece(); stack_.push(ARRAY_VALUE); - return util::Status::OK; + return util::Status(); } util::Status JsonStreamParser::ParseArrayValue(TokenType type) { @@ -672,7 +672,7 @@ util::Status JsonStreamParser::ParseArrayValue(TokenType type) { if (type == END_ARRAY) { ow_->EndList(); Advance(); - return util::Status::OK; + return util::Status(); } // The ParseValue call may push something onto the stack so we need to make @@ -696,14 +696,14 @@ util::Status JsonStreamParser::ParseArrayMid(TokenType type) { if (type == END_ARRAY) { ow_->EndList(); Advance(); - return util::Status::OK; + return util::Status(); } // Found a comma, advance past it and expect an array value next. if (type == VALUE_SEPARATOR) { Advance(); stack_.push(ARRAY_VALUE); - return util::Status::OK; + return util::Status(); } // Illegal token after array value. return ReportFailure("Expected , or ] after array value."); @@ -713,27 +713,27 @@ util::Status JsonStreamParser::ParseTrue() { ow_->RenderBool(key_, true); key_ = StringPiece(); p_.remove_prefix(true_len); - return util::Status::OK; + return util::Status(); } util::Status JsonStreamParser::ParseFalse() { ow_->RenderBool(key_, false); key_ = StringPiece(); p_.remove_prefix(false_len); - return util::Status::OK; + return util::Status(); } util::Status JsonStreamParser::ParseNull() { ow_->RenderNull(key_); key_ = StringPiece(); p_.remove_prefix(null_len); - return util::Status::OK; + return util::Status(); } util::Status JsonStreamParser::ParseEmptyNull() { ow_->RenderNull(key_); key_ = StringPiece(); - return util::Status::OK; + return util::Status(); } bool JsonStreamParser::IsEmptyNullAllowed(TokenType type) { @@ -793,7 +793,7 @@ util::Status JsonStreamParser::ParseKey() { } // Since we aren't using the key storage, clear it out. key_storage_.clear(); - return util::Status::OK; + return util::Status(); } JsonStreamParser::TokenType JsonStreamParser::GetNextTokenType() { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/proto_writer.h b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/proto_writer.h index 21dff88d72aa7e..0db8485cb7fd2e 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/proto_writer.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/proto_writer.h @@ -81,32 +81,32 @@ class LIBPROTOBUF_EXPORT ProtoWriter : public StructuredObjectWriter { virtual ~ProtoWriter(); // ObjectWriter methods. - virtual ProtoWriter* StartObject(StringPiece name); - virtual ProtoWriter* EndObject(); - virtual ProtoWriter* StartList(StringPiece name); - virtual ProtoWriter* EndList(); - virtual ProtoWriter* RenderBool(StringPiece name, bool value) { + ProtoWriter* StartObject(StringPiece name); + ProtoWriter* EndObject(); + ProtoWriter* StartList(StringPiece name); + ProtoWriter* EndList(); + ProtoWriter* RenderBool(StringPiece name, bool value) { return RenderDataPiece(name, DataPiece(value)); } - virtual ProtoWriter* RenderInt32(StringPiece name, int32 value) { + ProtoWriter* RenderInt32(StringPiece name, int32 value) { return RenderDataPiece(name, DataPiece(value)); } - virtual ProtoWriter* RenderUint32(StringPiece name, uint32 value) { + ProtoWriter* RenderUint32(StringPiece name, uint32 value) { return RenderDataPiece(name, DataPiece(value)); } - virtual ProtoWriter* RenderInt64(StringPiece name, int64 value) { + ProtoWriter* RenderInt64(StringPiece name, int64 value) { return RenderDataPiece(name, DataPiece(value)); } - virtual ProtoWriter* RenderUint64(StringPiece name, uint64 value) { + ProtoWriter* RenderUint64(StringPiece name, uint64 value) { return RenderDataPiece(name, DataPiece(value)); } - virtual ProtoWriter* RenderDouble(StringPiece name, double value) { + ProtoWriter* RenderDouble(StringPiece name, double value) { return RenderDataPiece(name, DataPiece(value)); } - virtual ProtoWriter* RenderFloat(StringPiece name, float value) { + ProtoWriter* RenderFloat(StringPiece name, float value) { return RenderDataPiece(name, DataPiece(value)); } - virtual ProtoWriter* RenderString(StringPiece name, StringPiece value) { + ProtoWriter* RenderString(StringPiece name, StringPiece value) { return RenderDataPiece(name, DataPiece(value, use_strict_base64_decoding())); } @@ -114,7 +114,7 @@ class LIBPROTOBUF_EXPORT ProtoWriter : public StructuredObjectWriter { return RenderDataPiece( name, DataPiece(value, false, use_strict_base64_decoding())); } - virtual ProtoWriter* RenderNull(StringPiece name) { + ProtoWriter* RenderNull(StringPiece name) { return RenderDataPiece(name, DataPiece::NullData()); } @@ -242,7 +242,7 @@ class LIBPROTOBUF_EXPORT ProtoWriter : public StructuredObjectWriter { ProtoWriter(const TypeInfo* typeinfo, const google::protobuf::Type& type, strings::ByteSink* output, ErrorListener* listener); - virtual ProtoElement* element() { return element_.get(); } + ProtoElement* element() { return element_.get(); } // Helper methods for calling ErrorListener. See error_listener.h. void InvalidName(StringPiece unknown_name, StringPiece message); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectsource.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectsource.cc index 61491af0c2140e..025fbd40917555 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectsource.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectsource.cc @@ -240,7 +240,7 @@ Status ProtoStreamObjectSource::WriteMessage(const google::protobuf::Type& type, if (include_start_and_end) { ow->EndObject(); } - return Status::OK; + return util::Status(); } StatusOr ProtoStreamObjectSource::RenderList( @@ -322,7 +322,7 @@ Status ProtoStreamObjectSource::RenderPacked( RETURN_IF_ERROR(RenderField(field, StringPiece(), ow)); } stream_->PopLimit(old_limit); - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderTimestamp( @@ -346,7 +346,7 @@ Status ProtoStreamObjectSource::RenderTimestamp( ow->RenderString(field_name, ::google::protobuf::internal::FormatTime(seconds, nanos)); - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderDuration( @@ -387,7 +387,7 @@ Status ProtoStreamObjectSource::RenderDuration( FormatNanos(nanos, os->add_trailing_zeros_for_timestamp_and_duration_) .c_str()); ow->RenderString(field_name, formatted_duration); - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderDouble(const ProtoStreamObjectSource* os, @@ -401,7 +401,7 @@ Status ProtoStreamObjectSource::RenderDouble(const ProtoStreamObjectSource* os, os->stream_->ReadTag(); } ow->RenderDouble(field_name, bit_cast(buffer64)); - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderFloat(const ProtoStreamObjectSource* os, @@ -415,7 +415,7 @@ Status ProtoStreamObjectSource::RenderFloat(const ProtoStreamObjectSource* os, os->stream_->ReadTag(); } ow->RenderFloat(field_name, bit_cast(buffer32)); - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderInt64(const ProtoStreamObjectSource* os, @@ -429,7 +429,7 @@ Status ProtoStreamObjectSource::RenderInt64(const ProtoStreamObjectSource* os, os->stream_->ReadTag(); } ow->RenderInt64(field_name, bit_cast(buffer64)); - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderUInt64(const ProtoStreamObjectSource* os, @@ -443,7 +443,7 @@ Status ProtoStreamObjectSource::RenderUInt64(const ProtoStreamObjectSource* os, os->stream_->ReadTag(); } ow->RenderUint64(field_name, bit_cast(buffer64)); - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderInt32(const ProtoStreamObjectSource* os, @@ -457,7 +457,7 @@ Status ProtoStreamObjectSource::RenderInt32(const ProtoStreamObjectSource* os, os->stream_->ReadTag(); } ow->RenderInt32(field_name, bit_cast(buffer32)); - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderUInt32(const ProtoStreamObjectSource* os, @@ -471,7 +471,7 @@ Status ProtoStreamObjectSource::RenderUInt32(const ProtoStreamObjectSource* os, os->stream_->ReadTag(); } ow->RenderUint32(field_name, bit_cast(buffer32)); - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderBool(const ProtoStreamObjectSource* os, @@ -486,7 +486,7 @@ Status ProtoStreamObjectSource::RenderBool(const ProtoStreamObjectSource* os, os->stream_->ReadTag(); } ow->RenderBool(field_name, buffer64 != 0); - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderString(const ProtoStreamObjectSource* os, @@ -502,7 +502,7 @@ Status ProtoStreamObjectSource::RenderString(const ProtoStreamObjectSource* os, os->stream_->ReadTag(); } ow->RenderString(field_name, str); - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderBytes(const ProtoStreamObjectSource* os, @@ -518,7 +518,7 @@ Status ProtoStreamObjectSource::RenderBytes(const ProtoStreamObjectSource* os, os->stream_->ReadTag(); } ow->RenderBytes(field_name, str); - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderStruct(const ProtoStreamObjectSource* os, @@ -537,7 +537,7 @@ Status ProtoStreamObjectSource::RenderStruct(const ProtoStreamObjectSource* os, } } ow->EndObject(); - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderStructValue( @@ -553,7 +553,7 @@ Status ProtoStreamObjectSource::RenderStructValue( } RETURN_IF_ERROR(os->RenderField(field, field_name, ow)); } - return Status::OK; + return util::Status(); } // TODO(skarvaje): Avoid code duplication of for loops and SkipField logic. @@ -566,7 +566,7 @@ Status ProtoStreamObjectSource::RenderStructListValue( if (tag == 0) { ow->StartList(field_name); ow->EndList(); - return Status::OK; + return util::Status(); } while (tag != 0) { @@ -578,7 +578,7 @@ Status ProtoStreamObjectSource::RenderStructListValue( } ASSIGN_OR_RETURN(tag, os->RenderList(field, field_name, tag, ow)); } - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderAny(const ProtoStreamObjectSource* os, @@ -620,7 +620,7 @@ Status ProtoStreamObjectSource::RenderAny(const ProtoStreamObjectSource* os, ow->RenderString("@type", type_url); } ow->EndObject(); - return util::Status::OK; + return util::Status(); } // If there is a value but no type, we cannot render it, so report an error. @@ -685,7 +685,7 @@ Status ProtoStreamObjectSource::RenderFieldMask( combined.append(ConvertFieldMaskPath(str, &ToCamelCase)); } ow->RenderString(field_name, combined); - return Status::OK; + return util::Status(); } @@ -781,7 +781,7 @@ Status ProtoStreamObjectSource::RenderField( // Render all other non-message types. return RenderNonMessageField(field, field_name, ow); } - return Status::OK; + return util::Status(); } Status ProtoStreamObjectSource::RenderNonMessageField( @@ -910,7 +910,7 @@ Status ProtoStreamObjectSource::RenderNonMessageField( default: break; } - return Status::OK; + return util::Status(); } // TODO(skarvaje): Fix this to avoid code duplication. @@ -1079,7 +1079,7 @@ Status ProtoStreamObjectSource::IncrementRecursionDepth( StrCat("Message too deep. Max recursion depth reached for type '", type_name, "', field '", field_name, "'")); } - return Status::OK; + return util::Status(); } namespace { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectsource.h b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectsource.h index 5f443d9d48b99f..58d77c2c7132c7 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectsource.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectsource.h @@ -112,9 +112,7 @@ class LIBPROTOBUF_EXPORT ProtoStreamObjectSource : public ObjectSource { // Sets whether to always output enums as ints, by default this is off, and // enums are rendered as strings. - void set_use_ints_for_enums(bool value) { - use_ints_for_enums_ = value; - } + void set_use_ints_for_enums(bool value) { use_ints_for_enums_ = value; } // Sets whether to use original proto field names void set_preserve_proto_field_names(bool value) { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectsource_test.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectsource_test.cc index e215c4abcdc92d..06c9bb6d4cef8c 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectsource_test.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectsource_test.cc @@ -111,7 +111,7 @@ class ProtostreamObjectSourceTest void DoTest(const Message& msg, const Descriptor* descriptor) { Status status = ExecuteTest(msg, descriptor); - EXPECT_EQ(Status::OK, status); + EXPECT_EQ(util::Status(), status); } Status ExecuteTest(const Message& msg, const Descriptor* descriptor) { @@ -509,9 +509,7 @@ TEST_P(ProtostreamObjectSourceTest, UseIntsForEnumsTest) { UseIntsForEnums(); - ow_.StartObject("") - ->RenderInt32("type", 3) - ->EndObject(); + ow_.StartObject("")->RenderInt32("type", 3)->EndObject(); DoTest(book, Book::descriptor()); } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectwriter.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectwriter.cc index 6c9bc30e751f9c..d4e15bca3f2cb3 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectwriter.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectwriter.cc @@ -173,7 +173,7 @@ Status GetNanosFromStringPiece(StringPiece s_nanos, *nanos = i_nanos * conversion; } - return Status::OK; + return Status(); } } // namespace @@ -409,7 +409,7 @@ void ProtoStreamObjectWriter::AnyWriter::Event::DeepCopy() { // string value stays valid, we make a copy of the string value and update // DataPiece to reference our own copy. if (value_.type() == DataPiece::TYPE_STRING) { - value_.str().AppendToString(&value_storage_); + StrAppend(&value_storage_, value_.str()); value_ = DataPiece(value_storage_, value_.use_strict_base64_decoding()); } else if (value_.type() == DataPiece::TYPE_BYTES) { value_storage_ = value_.ToBytes().ValueOrDie(); @@ -862,7 +862,7 @@ Status ProtoStreamObjectWriter::RenderStructValue(ProtoStreamObjectWriter* ow, ow->ProtoWriter::RenderDataPiece( "string_value", DataPiece(SimpleItoa(int_value.ValueOrDie()), true)); - return Status::OK; + return Status(); } } struct_field_name = "number_value"; @@ -877,13 +877,22 @@ Status ProtoStreamObjectWriter::RenderStructValue(ProtoStreamObjectWriter* ow, ow->ProtoWriter::RenderDataPiece( "string_value", DataPiece(SimpleItoa(int_value.ValueOrDie()), true)); - return Status::OK; + return Status(); } } struct_field_name = "number_value"; break; } case DataPiece::TYPE_DOUBLE: { + if (ow->options_.struct_integers_as_strings) { + StatusOr double_value = data.ToDouble(); + if (double_value.ok()) { + ow->ProtoWriter::RenderDataPiece( + "string_value", + DataPiece(SimpleDtoa(double_value.ValueOrDie()), true)); + return Status(); + } + } struct_field_name = "number_value"; break; } @@ -906,12 +915,12 @@ Status ProtoStreamObjectWriter::RenderStructValue(ProtoStreamObjectWriter* ow, } } ow->ProtoWriter::RenderDataPiece(struct_field_name, data); - return Status::OK; + return Status(); } Status ProtoStreamObjectWriter::RenderTimestamp(ProtoStreamObjectWriter* ow, const DataPiece& data) { - if (data.type() == DataPiece::TYPE_NULL) return Status::OK; + if (data.type() == DataPiece::TYPE_NULL) return Status(); if (data.type() != DataPiece::TYPE_STRING) { return Status(INVALID_ARGUMENT, StrCat("Invalid data type for timestamp, value is ", @@ -930,19 +939,19 @@ Status ProtoStreamObjectWriter::RenderTimestamp(ProtoStreamObjectWriter* ow, ow->ProtoWriter::RenderDataPiece("seconds", DataPiece(seconds)); ow->ProtoWriter::RenderDataPiece("nanos", DataPiece(nanos)); - return Status::OK; + return Status(); } static inline util::Status RenderOneFieldPath(ProtoStreamObjectWriter* ow, StringPiece path) { ow->ProtoWriter::RenderDataPiece( "paths", DataPiece(ConvertFieldMaskPath(path, &ToSnakeCase), true)); - return Status::OK; + return Status(); } Status ProtoStreamObjectWriter::RenderFieldMask(ProtoStreamObjectWriter* ow, const DataPiece& data) { - if (data.type() == DataPiece::TYPE_NULL) return Status::OK; + if (data.type() == DataPiece::TYPE_NULL) return Status(); if (data.type() != DataPiece::TYPE_STRING) { return Status(INVALID_ARGUMENT, StrCat("Invalid data type for field mask, value is ", @@ -959,7 +968,7 @@ Status ProtoStreamObjectWriter::RenderFieldMask(ProtoStreamObjectWriter* ow, Status ProtoStreamObjectWriter::RenderDuration(ProtoStreamObjectWriter* ow, const DataPiece& data) { - if (data.type() == DataPiece::TYPE_NULL) return Status::OK; + if (data.type() == DataPiece::TYPE_NULL) return Status(); if (data.type() != DataPiece::TYPE_STRING) { return Status(INVALID_ARGUMENT, StrCat("Invalid data type for duration, value is ", @@ -1004,14 +1013,14 @@ Status ProtoStreamObjectWriter::RenderDuration(ProtoStreamObjectWriter* ow, ow->ProtoWriter::RenderDataPiece("seconds", DataPiece(seconds)); ow->ProtoWriter::RenderDataPiece("nanos", DataPiece(nanos)); - return Status::OK; + return Status(); } Status ProtoStreamObjectWriter::RenderWrapperType(ProtoStreamObjectWriter* ow, const DataPiece& data) { - if (data.type() == DataPiece::TYPE_NULL) return Status::OK; + if (data.type() == DataPiece::TYPE_NULL) return Status(); ow->ProtoWriter::RenderDataPiece("value", data); - return Status::OK; + return Status(); } ProtoStreamObjectWriter* ProtoStreamObjectWriter::RenderDataPiece( diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectwriter.h b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectwriter.h index 732971e1b74ad3..ab534912e69931 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectwriter.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectwriter.h @@ -76,11 +76,14 @@ class LIBPROTOBUF_EXPORT ProtoStreamObjectWriter : public ProtoWriter { public: // Options that control ProtoStreamObjectWriter class's behavior. struct Options { - // Treats integer inputs in google.protobuf.Struct as strings. Normally, - // integer values are returned in double field "number_value" of + // Treats numeric inputs in google.protobuf.Struct as strings. Normally, + // numeric values are returned in double field "number_value" of // google.protobuf.Struct. However, this can cause precision loss for - // int64/uint64 inputs. This option is provided for cases that want to - // preserve integer precision. + // int64/uint64/double inputs. This option is provided for cases that want + // to preserve number precision. + // + // TODO(skarvaje): Rename to struct_numbers_as_strings as it covers double + // as well. bool struct_integers_as_strings; // Not treat unknown fields as an error. If there is an unknown fields, diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectwriter_test.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectwriter_test.cc index 97ef8fff8b5f2b..87d35b08bc5b89 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectwriter_test.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/protostream_objectwriter_test.cc @@ -279,17 +279,13 @@ TEST_P(ProtoStreamObjectWriterTest, ConflictingJsonName) { ResetTypeInfo(TestJsonName1::descriptor()); TestJsonName1 message1; message1.set_one_value(12345); - ow_->StartObject("") - ->RenderInt32("value", 12345) - ->EndObject(); + ow_->StartObject("")->RenderInt32("value", 12345)->EndObject(); CheckOutput(message1); ResetTypeInfo(TestJsonName2::descriptor()); TestJsonName2 message2; message2.set_another_value(12345); - ow_->StartObject("") - ->RenderInt32("value", 12345) - ->EndObject(); + ow_->StartObject("")->RenderInt32("value", 12345)->EndObject(); CheckOutput(message2); } @@ -1615,7 +1611,7 @@ TEST_P(ProtoStreamObjectWriterStructTest, RepeatedStructMapObjectKeyTest) { TEST_P(ProtoStreamObjectWriterStructTest, OptionStructIntAsStringsTest) { StructType struct_type; google::protobuf::Struct* s = struct_type.mutable_object(); - s->mutable_fields()->operator[]("k1").set_number_value(123); + s->mutable_fields()->operator[]("k1").set_string_value("123"); s->mutable_fields()->operator[]("k2").set_bool_value(true); s->mutable_fields()->operator[]("k3").set_string_value("-222222222"); s->mutable_fields()->operator[]("k4").set_string_value("33333333"); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/type_info.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/type_info.cc index a5d903f146675d..85d0d5c9456e3f 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/type_info.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/type_info.cc @@ -107,10 +107,12 @@ class TypeInfoForTypeResolver : public TypeInfo { virtual const google::protobuf::Field* FindField( const google::protobuf::Type* type, StringPiece camel_case_name) const { - std::map::const_iterator it = indexed_types_.find(type); - const CamelCaseNameTable& camel_case_name_table = (it == indexed_types_.end()) - ? PopulateNameLookupTable(type, &indexed_types_[type]) : it->second; + std::map::const_iterator + it = indexed_types_.find(type); + const CamelCaseNameTable& camel_case_name_table = + (it == indexed_types_.end()) + ? PopulateNameLookupTable(type, &indexed_types_[type]) + : it->second; StringPiece name = FindWithDefault(camel_case_name_table, camel_case_name, StringPiece()); if (name.empty()) { @@ -142,8 +144,8 @@ class TypeInfoForTypeResolver : public TypeInfo { const google::protobuf::Field& field = type->fields(i); StringPiece name = field.name(); StringPiece camel_case_name = field.json_name(); - const StringPiece* existing = InsertOrReturnExisting( - camel_case_name_table, camel_case_name, name); + const StringPiece* existing = + InsertOrReturnExisting(camel_case_name_table, camel_case_name, name); if (existing && *existing != name) { GOOGLE_LOG(WARNING) << "Field '" << name << "' and '" << *existing << "' map to the same camel case name '" << camel_case_name @@ -162,8 +164,8 @@ class TypeInfoForTypeResolver : public TypeInfo { mutable std::map cached_types_; mutable std::map cached_enums_; - mutable std::map indexed_types_; + mutable std::map + indexed_types_; }; } // namespace diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/utility.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/utility.cc index 6daf24eb56d9de..8cf42e491efa1b 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/utility.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/internal/utility.cc @@ -48,16 +48,6 @@ namespace protobuf { namespace util { namespace converter { -namespace { -const StringPiece SkipWhiteSpace(StringPiece str) { - StringPiece::size_type i; - for (i = 0; i < str.size() && isspace(str[i]); ++i) { - } - GOOGLE_DCHECK(i == str.size() || !isspace(str[i])); - return str.substr(i); -} -} // namespace - bool GetBoolOptionOrDefault( const google::protobuf::RepeatedPtrField& options, const string& option_name, bool default_value) { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/json_util.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/json_util.cc index 8595a8813d2308..c85f18994c3569 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/json_util.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/json_util.cc @@ -84,7 +84,7 @@ util::Status BinaryToJsonStream(TypeResolver* resolver, converter::ProtoStreamObjectSource proto_source(&in_stream, resolver, type); proto_source.set_use_ints_for_enums(options.always_print_enums_as_ints); proto_source.set_preserve_proto_field_names( - options.preserve_proto_field_names); + options.preserve_proto_field_names); io::CodedOutputStream out_stream(json_output); converter::JsonObjectWriter json_writer(options.add_whitespace ? " " : "", &out_stream); @@ -92,7 +92,7 @@ util::Status BinaryToJsonStream(TypeResolver* resolver, converter::DefaultValueObjectWriter default_value_writer( resolver, type, &json_writer); default_value_writer.set_preserve_proto_field_names( - options.preserve_proto_field_names); + options.preserve_proto_field_names); return proto_source.WriteTo(&default_value_writer); } else { return proto_source.WriteTo(&json_writer); @@ -113,7 +113,7 @@ util::Status BinaryToJsonString(TypeResolver* resolver, namespace { class StatusErrorListener : public converter::ErrorListener { public: - StatusErrorListener() : status_(util::Status::OK) {} + StatusErrorListener() {} virtual ~StatusErrorListener() {} util::Status GetStatus() { return status_; } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/json_util.h b/third_party/protobuf/3.2.0/src/google/protobuf/util/json_util.h index dd9a736f24bd42..f4f4380a7362ea 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/json_util.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/json_util.h @@ -67,11 +67,11 @@ struct JsonPrintOptions { // Whether to preserve proto field names bool preserve_proto_field_names; - JsonPrintOptions() : add_whitespace(false), - always_print_primitive_fields(false), - always_print_enums_as_ints(false), - preserve_proto_field_names(false) { - } + JsonPrintOptions() + : add_whitespace(false), + always_print_primitive_fields(false), + always_print_enums_as_ints(false), + preserve_proto_field_names(false) {} }; // DEPRECATED. Use JsonPrintOptions instead. diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/json_util_test.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/json_util_test.cc index 7c03d674b65f24..25c7e96c0ddfc2 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/json_util_test.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/json_util_test.cc @@ -52,14 +52,10 @@ using proto3::BAR; using proto3::TestMessage; using proto3::TestMap; using proto3::TestOneof; -using testing::MapIn; +using google::protobuf::testing::MapIn; static const char kTypeUrlPrefix[] = "type.googleapis.com"; -static string GetTypeUrl(const Descriptor* message) { - return string(kTypeUrlPrefix) + "/" + message->full_name(); -} - // As functions defined in json_util.h are just thin wrappers around the // JSON conversion code in //net/proto2/util/converter, in this test we // only cover some very basic cases to make sure the wrappers have forwarded @@ -207,8 +203,7 @@ TEST_F(JsonUtilTest, TestAlwaysPrintEnumsAsInts) { JsonPrintOptions print_options; print_options.always_print_enums_as_ints = true; - string expected_json = - "{\"enumValue\":1,\"repeatedEnumValue\":[0,1]}"; + string expected_json = "{\"enumValue\":1,\"repeatedEnumValue\":[0,1]}"; EXPECT_EQ(expected_json, ToJson(orig, print_options)); TestMessage parsed; @@ -264,7 +259,8 @@ TEST_F(JsonUtilTest, ParsePrimitiveMapIn) { JsonPrintOptions print_options; print_options.always_print_primitive_fields = true; JsonParseOptions parse_options; - EXPECT_EQ("{\"other\":\"\",\"things\":[],\"mapInput\":{}}", ToJson(message, print_options)); + EXPECT_EQ("{\"other\":\"\",\"things\":[],\"mapInput\":{}}", + ToJson(message, print_options)); MapIn other; ASSERT_TRUE(FromJson(ToJson(message, print_options), &other, parse_options)); EXPECT_EQ(message.DebugString(), other.DebugString()); @@ -275,14 +271,10 @@ TEST_F(JsonUtilTest, PrintPrimitiveOneof) { JsonPrintOptions options; options.always_print_primitive_fields = true; message.mutable_oneof_message_value(); - EXPECT_EQ( - "{\"oneofMessageValue\":{\"value\":0}}", - ToJson(message, options)); + EXPECT_EQ("{\"oneofMessageValue\":{\"value\":0}}", ToJson(message, options)); message.set_oneof_int32_value(1); - EXPECT_EQ( - "{\"oneofInt32Value\":1}", - ToJson(message, options)); + EXPECT_EQ("{\"oneofInt32Value\":1}", ToJson(message, options)); } TEST_F(JsonUtilTest, TestParseIgnoreUnknownFields) { diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/message_differencer.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/message_differencer.cc index 203d8388708f02..830850be243ed9 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/message_differencer.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/message_differencer.cc @@ -467,6 +467,10 @@ bool MessageDifferencer::Compare( google::protobuf::scoped_ptr data1; google::protobuf::scoped_ptr data2; if (UnpackAny(message1, &data1) && UnpackAny(message2, &data2)) { + // Avoid DFATAL for different descriptors in google.protobuf.Any payloads. + if (data1->GetDescriptor() != data2->GetDescriptor()) { + return false; + } return Compare(*data1, *data2, parent_fields); } } @@ -849,7 +853,8 @@ bool MessageDifferencer::CompareRepeatedField( parent_fields->pop_back(); fieldDifferent = true; } else if (reporter_ != NULL && - specific_field.index != specific_field.new_index) { + specific_field.index != specific_field.new_index && + !specific_field.field->is_map()) { parent_fields->push_back(specific_field); reporter_->ReportMoved(message1, message2, *parent_fields); parent_fields->pop_back(); @@ -1503,6 +1508,10 @@ void MessageDifferencer::StreamReporter::PrintPath( } else { printer_->PrintRaw(specific_field.field->name()); } + if (specific_field.field->is_map()) { + // Don't print index in a map field; they are semantically unordered. + continue; + } } else { printer_->PrintRaw(SimpleItoa(specific_field.unknown_field_number)); } diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/message_differencer_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/message_differencer_unittest.cc index 30b27dbaadeeee..850b3977052b13 100755 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/message_differencer_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/message_differencer_unittest.cc @@ -38,6 +38,7 @@ #include #include +#include #include #include @@ -54,7 +55,6 @@ #include #include -#include #include #include @@ -2042,6 +2042,9 @@ class ComparisonTest : public testing::Test { unittest::TestEmptyMessage empty1_; unittest::TestEmptyMessage empty2_; + unittest::TestMap map_proto1_; + unittest::TestMap map_proto2_; + UnknownFieldSet* unknown1_; UnknownFieldSet* unknown2_; @@ -2802,6 +2805,24 @@ TEST_F(ComparisonTest, EquivalentIgnoresUnknown) { EXPECT_TRUE(util::MessageDifferencer::Equivalent(message1, message2)); } +TEST_F(ComparisonTest, MapTest) { + repeated_field_as_set(); + + Map& map1 = *map_proto1_.mutable_map_string_string(); + map1["1"] = "1"; + map1["2"] = "2"; + map1["3"] = "3"; + Map& map2 = *map_proto2_.mutable_map_string_string(); + map2["3"] = "0"; + map2["2"] = "2"; + map2["1"] = "1"; + + EXPECT_EQ( + "added: map_string_string: { key: \"3\" value: \"0\" }\n" + "deleted: map_string_string: { key: \"3\" value: \"3\" }\n", + Run(map_proto1_, map_proto2_)); +} + class MatchingTest : public testing::Test { public: typedef util::MessageDifferencer MessageDifferencer; @@ -3146,6 +3167,24 @@ TEST(Anytest, TreatAsSet) { EXPECT_TRUE(message_differencer.Compare(m1, m2)); } +TEST(Anytest, TreatAsSet_DifferentType) { + protobuf_unittest::TestField value1; + value1.set_a(20); + value1.set_b(30); + protobuf_unittest::TestDiffMessage value2; + value2.add_rv(40); + + protobuf_unittest::TestAny m1, m2; + m1.add_repeated_any_value()->PackFrom(value1); + m1.add_repeated_any_value()->PackFrom(value2); + m2.add_repeated_any_value()->PackFrom(value2); + m2.add_repeated_any_value()->PackFrom(value1); + + util::MessageDifferencer message_differencer; + message_differencer.TreatAsSet(GetFieldDescriptor(m1, "repeated_any_value")); + EXPECT_TRUE(message_differencer.Compare(m1, m2)); +} + } // namespace } // namespace protobuf diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/util/time_util.cc b/third_party/protobuf/3.2.0/src/google/protobuf/util/time_util.cc index 82f1f4fb48eefe..46a6f5a8a59c1c 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/util/time_util.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/util/time_util.cc @@ -374,19 +374,6 @@ namespace { using google::protobuf::util::kNanosPerSecond; using google::protobuf::util::CreateNormalized; -// Convert a Timestamp to uint128. -void ToUint128(const Timestamp& value, uint128* result, bool* negative) { - if (value.seconds() < 0) { - *negative = true; - *result = static_cast(-value.seconds()); - *result = *result * kNanosPerSecond - static_cast(value.nanos()); - } else { - *negative = false; - *result = static_cast(value.seconds()); - *result = *result * kNanosPerSecond + static_cast(value.nanos()); - } -} - // Convert a Duration to uint128. void ToUint128(const Duration& value, uint128* result, bool* negative) { if (value.seconds() < 0 || value.nanos() < 0) { @@ -400,21 +387,6 @@ void ToUint128(const Duration& value, uint128* result, bool* negative) { } } -void ToTimestamp(const uint128& value, bool negative, Timestamp* timestamp) { - int64 seconds = static_cast(Uint128Low64(value / kNanosPerSecond)); - int32 nanos = static_cast(Uint128Low64(value % kNanosPerSecond)); - if (negative) { - seconds = -seconds; - nanos = -nanos; - if (nanos < 0) { - nanos += kNanosPerSecond; - seconds -= 1; - } - } - timestamp->set_seconds(seconds); - timestamp->set_nanos(nanos); -} - void ToDuration(const uint128& value, bool negative, Duration* duration) { int64 seconds = static_cast(Uint128Low64(value / kNanosPerSecond)); int32 nanos = static_cast(Uint128Low64(value % kNanosPerSecond)); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/wire_format.cc b/third_party/protobuf/3.2.0/src/google/protobuf/wire_format.cc index bd5b248916fccc..01704c9470a027 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/wire_format.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/wire_format.cc @@ -54,9 +54,17 @@ namespace google { +const size_t kMapEntryTagByteSize = 2; + namespace protobuf { namespace internal { +// Forward declare static functions +static size_t MapKeyDataOnlyByteSize(const FieldDescriptor* field, + const MapKey& value); +static size_t MapValueRefDataOnlyByteSize(const FieldDescriptor* field, + const MapValueRef& value); + // =================================================================== bool UnknownFieldSetFieldSkipper::SkipField( @@ -76,6 +84,8 @@ void UnknownFieldSetFieldSkipper::SkipUnknownEnum( bool WireFormat::SkipField(io::CodedInputStream* input, uint32 tag, UnknownFieldSet* unknown_fields) { int number = WireFormatLite::GetTagFieldNumber(tag); + // Field number 0 is illegal. + if (number == 0) return false; switch (WireFormatLite::GetTagWireType(tag)) { case WireFormatLite::WIRETYPE_VARINT: { @@ -795,7 +805,16 @@ void WireFormat::SerializeWithCachedSizes( int expected_endpoint = output->ByteCount() + size; std::vector fields; - message_reflection->ListFields(message, &fields); + + // Fields of map entry should always be serialized. + if (descriptor->options().map_entry()) { + for (int i = 0; i < descriptor->field_count(); i++) { + fields.push_back(descriptor->field(i)); + } + } else { + message_reflection->ListFields(message, &fields); + } + for (int i = 0; i < fields.size(); i++) { SerializeFieldWithCachedSizes(fields[i], message, output); } @@ -814,6 +833,129 @@ void WireFormat::SerializeWithCachedSizes( "during serialization?"; } +static void SerializeMapKeyWithCachedSizes(const FieldDescriptor* field, + const MapKey& value, + io::CodedOutputStream* output) { + switch (field->type()) { + case FieldDescriptor::TYPE_DOUBLE: + case FieldDescriptor::TYPE_FLOAT: + case FieldDescriptor::TYPE_GROUP: + case FieldDescriptor::TYPE_MESSAGE: + case FieldDescriptor::TYPE_BYTES: + case FieldDescriptor::TYPE_ENUM: + GOOGLE_LOG(FATAL) << "Unsupported"; + break; +#define CASE_TYPE(FieldType, CamelFieldType, CamelCppType) \ + case FieldDescriptor::TYPE_##FieldType: \ + WireFormatLite::Write##CamelFieldType(1, value.Get##CamelCppType##Value(), \ + output); \ + break; + CASE_TYPE(INT64, Int64, Int64) + CASE_TYPE(UINT64, UInt64, UInt64) + CASE_TYPE(INT32, Int32, Int32) + CASE_TYPE(FIXED64, Fixed64, UInt64) + CASE_TYPE(FIXED32, Fixed32, UInt32) + CASE_TYPE(BOOL, Bool, Bool) + CASE_TYPE(UINT32, UInt32, UInt32) + CASE_TYPE(SFIXED32, SFixed32, Int32) + CASE_TYPE(SFIXED64, SFixed64, Int64) + CASE_TYPE(SINT32, SInt32, Int32) + CASE_TYPE(SINT64, SInt64, Int64) + CASE_TYPE(STRING, String, String) +#undef CASE_TYPE + } +} + +static void SerializeMapValueRefWithCachedSizes(const FieldDescriptor* field, + const MapValueRef& value, + io::CodedOutputStream* output) { + switch (field->type()) { +#define CASE_TYPE(FieldType, CamelFieldType, CamelCppType) \ + case FieldDescriptor::TYPE_##FieldType: \ + WireFormatLite::Write##CamelFieldType(2, value.Get##CamelCppType##Value(), \ + output); \ + break; + CASE_TYPE(INT64, Int64, Int64) + CASE_TYPE(UINT64, UInt64, UInt64) + CASE_TYPE(INT32, Int32, Int32) + CASE_TYPE(FIXED64, Fixed64, UInt64) + CASE_TYPE(FIXED32, Fixed32, UInt32) + CASE_TYPE(BOOL, Bool, Bool) + CASE_TYPE(UINT32, UInt32, UInt32) + CASE_TYPE(SFIXED32, SFixed32, Int32) + CASE_TYPE(SFIXED64, SFixed64, Int64) + CASE_TYPE(SINT32, SInt32, Int32) + CASE_TYPE(SINT64, SInt64, Int64) + CASE_TYPE(ENUM, Enum, Enum) + CASE_TYPE(DOUBLE, Double, Double) + CASE_TYPE(FLOAT, Float, Float) + CASE_TYPE(STRING, String, String) + CASE_TYPE(BYTES, Bytes, String) + CASE_TYPE(MESSAGE, Message, Message) + CASE_TYPE(GROUP, Group, Message) +#undef CASE_TYPE + } +} + +class MapKeySorter { + public: + static std::vector SortKey(const Message& message, + const Reflection* reflection, + const FieldDescriptor* field) { + std::vector sorted_key_list; + for (MapIterator it = + reflection->MapBegin(const_cast(&message), field); + it != reflection->MapEnd(const_cast(&message), field); + ++it) { + sorted_key_list.push_back(it.GetKey()); + } + MapKeyComparator comparator; + std::sort(sorted_key_list.begin(), sorted_key_list.end(), comparator); + return sorted_key_list; + } + + private: + class MapKeyComparator { + public: + bool operator()(const MapKey& a, const MapKey& b) const { + GOOGLE_DCHECK(a.type() == b.type()); + switch (a.type()) { +#define CASE_TYPE(CppType, CamelCppType) \ + case FieldDescriptor::CPPTYPE_##CppType: { \ + return a.Get##CamelCppType##Value() < b.Get##CamelCppType##Value(); \ + } + CASE_TYPE(STRING, String) + CASE_TYPE(INT64, Int64) + CASE_TYPE(INT32, Int32) + CASE_TYPE(UINT64, UInt64) + CASE_TYPE(UINT32, UInt32) + CASE_TYPE(BOOL, Bool) +#undef CASE_TYPE + + default: + GOOGLE_LOG(DFATAL) << "Invalid key for map field."; + return true; + } + } + }; +}; + +static void SerializeMapEntry(const FieldDescriptor* field, const MapKey& key, + const MapValueRef& value, + io::CodedOutputStream* output) { + const FieldDescriptor* key_field = field->message_type()->field(0); + const FieldDescriptor* value_field = field->message_type()->field(1); + + WireFormatLite::WriteTag(field->number(), + WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output); + size_t size = kMapEntryTagByteSize; + size += MapKeyDataOnlyByteSize(key_field, key); + size += MapValueRefDataOnlyByteSize(value_field, value); + output->WriteVarint32(size); + SerializeMapKeyWithCachedSizes(key_field, key, output); + SerializeMapValueRefWithCachedSizes(value_field, value, output); +} + void WireFormat::SerializeFieldWithCachedSizes( const FieldDescriptor* field, const Message& message, @@ -828,10 +970,55 @@ void WireFormat::SerializeFieldWithCachedSizes( return; } + // For map fields, we can use either repeated field reflection or map + // reflection. Our choice has some subtle effects. If we use repeated field + // reflection here, then the repeated field representation becomes + // authoritative for this field: any existing references that came from map + // reflection remain valid for reading, but mutations to them are lost and + // will be overwritten next time we call map reflection! + // + // So far this mainly affects Python, which keeps long-term references to map + // values around, and always uses map reflection. See: b/35918691 + // + // Here we choose to use map reflection API as long as the internal + // map is valid. In this way, the serialization doesn't change map field's + // internal state and existing references that came from map reflection remain + // valid for both reading and writing. + if (field->is_map()) { + MapFieldBase* map_field = + message_reflection->MapData(const_cast(&message), field); + if (map_field->IsMapValid()) { + if (output->IsSerializationDeterministic()) { + std::vector sorted_key_list = + MapKeySorter::SortKey(message, message_reflection, field); + for (std::vector::iterator it = sorted_key_list.begin(); + it != sorted_key_list.end(); ++it) { + MapValueRef map_value; + message_reflection->InsertOrLookupMapValue( + const_cast(&message), field, *it, &map_value); + SerializeMapEntry(field, *it, map_value, output); + } + } else { + for (MapIterator it = message_reflection->MapBegin( + const_cast(&message), field); + it != + message_reflection->MapEnd(const_cast(&message), field); + ++it) { + SerializeMapEntry(field, it.GetKey(), it.GetValueRef(), output); + } + } + + return; + } + } + int count = 0; if (field->is_repeated()) { count = message_reflection->FieldSize(message, field); + } else if (field->containing_type()->options().map_entry()) { + // Map entry fields always need to be serialized. + count = 1; } else if (message_reflection->HasField(message, field)) { count = 1; } @@ -982,7 +1169,16 @@ size_t WireFormat::ByteSize(const Message& message) { size_t our_size = 0; std::vector fields; - message_reflection->ListFields(message, &fields); + + // Fields of map entry should always be serialized. + if (descriptor->options().map_entry()) { + for (int i = 0; i < descriptor->field_count(); i++) { + fields.push_back(descriptor->field(i)); + } + } else { + message_reflection->ListFields(message, &fields); + } + for (int i = 0; i < fields.size(); i++) { our_size += FieldByteSize(fields[i], message); } @@ -1013,6 +1209,9 @@ size_t WireFormat::FieldByteSize( size_t count = 0; if (field->is_repeated()) { count = FromIntSize(message_reflection->FieldSize(message, field)); + } else if (field->containing_type()->options().map_entry()) { + // Map entry fields always need to be serialized. + count = 1; } else if (message_reflection->HasField(message, field)) { count = 1; } @@ -1033,20 +1232,124 @@ size_t WireFormat::FieldByteSize( return our_size; } +static size_t MapKeyDataOnlyByteSize(const FieldDescriptor* field, + const MapKey& value) { + GOOGLE_DCHECK_EQ(FieldDescriptor::TypeToCppType(field->type()), value.type()); + switch (field->type()) { + case FieldDescriptor::TYPE_DOUBLE: + case FieldDescriptor::TYPE_FLOAT: + case FieldDescriptor::TYPE_GROUP: + case FieldDescriptor::TYPE_MESSAGE: + case FieldDescriptor::TYPE_BYTES: + case FieldDescriptor::TYPE_ENUM: + GOOGLE_LOG(FATAL) << "Unsupported"; + return 0; +#define CASE_TYPE(FieldType, CamelFieldType, CamelCppType) \ + case FieldDescriptor::TYPE_##FieldType: \ + return WireFormatLite::CamelFieldType##Size( \ + value.Get##CamelCppType##Value()); + +#define FIXED_CASE_TYPE(FieldType, CamelFieldType) \ + case FieldDescriptor::TYPE_##FieldType: \ + return WireFormatLite::k##CamelFieldType##Size; + + CASE_TYPE(INT32, Int32, Int32); + CASE_TYPE(INT64, Int64, Int64); + CASE_TYPE(UINT32, UInt32, UInt32); + CASE_TYPE(UINT64, UInt64, UInt64); + CASE_TYPE(SINT32, SInt32, Int32); + CASE_TYPE(SINT64, SInt64, Int64); + CASE_TYPE(STRING, String, String); + FIXED_CASE_TYPE(FIXED32, Fixed32); + FIXED_CASE_TYPE(FIXED64, Fixed64); + FIXED_CASE_TYPE(SFIXED32, SFixed32); + FIXED_CASE_TYPE(SFIXED64, SFixed64); + FIXED_CASE_TYPE(BOOL, Bool); + +#undef CASE_TYPE +#undef FIXED_CASE_TYPE + } + GOOGLE_LOG(FATAL) << "Cannot get here"; + return 0; +} + +static size_t MapValueRefDataOnlyByteSize(const FieldDescriptor* field, + const MapValueRef& value) { + switch (field->type()) { + case FieldDescriptor::TYPE_GROUP: + GOOGLE_LOG(FATAL) << "Unsupported"; + return 0; +#define CASE_TYPE(FieldType, CamelFieldType, CamelCppType) \ + case FieldDescriptor::TYPE_##FieldType: \ + return WireFormatLite::CamelFieldType##Size( \ + value.Get##CamelCppType##Value()); + +#define FIXED_CASE_TYPE(FieldType, CamelFieldType) \ + case FieldDescriptor::TYPE_##FieldType: \ + return WireFormatLite::k##CamelFieldType##Size; + + CASE_TYPE(INT32, Int32, Int32); + CASE_TYPE(INT64, Int64, Int64); + CASE_TYPE(UINT32, UInt32, UInt32); + CASE_TYPE(UINT64, UInt64, UInt64); + CASE_TYPE(SINT32, SInt32, Int32); + CASE_TYPE(SINT64, SInt64, Int64); + CASE_TYPE(STRING, String, String); + CASE_TYPE(BYTES, Bytes, String); + CASE_TYPE(ENUM, Enum, Enum); + CASE_TYPE(MESSAGE, Message, Message); + FIXED_CASE_TYPE(FIXED32, Fixed32); + FIXED_CASE_TYPE(FIXED64, Fixed64); + FIXED_CASE_TYPE(SFIXED32, SFixed32); + FIXED_CASE_TYPE(SFIXED64, SFixed64); + FIXED_CASE_TYPE(DOUBLE, Double); + FIXED_CASE_TYPE(FLOAT, Float); + FIXED_CASE_TYPE(BOOL, Bool); + +#undef CASE_TYPE +#undef FIXED_CASE_TYPE + } + GOOGLE_LOG(FATAL) << "Cannot get here"; + return 0; +} + size_t WireFormat::FieldDataOnlyByteSize( const FieldDescriptor* field, const Message& message) { const Reflection* message_reflection = message.GetReflection(); + size_t data_size = 0; + + if (field->is_map()) { + MapFieldBase* map_field = + message_reflection->MapData(const_cast(&message), field); + if (map_field->IsMapValid()) { + MapIterator iter(const_cast(&message), field); + MapIterator end(const_cast(&message), field); + const FieldDescriptor* key_field = field->message_type()->field(0); + const FieldDescriptor* value_field = field->message_type()->field(1); + for (map_field->MapBegin(&iter), map_field->MapEnd(&end); iter != end; + ++iter) { + size_t size = kMapEntryTagByteSize; + size += MapKeyDataOnlyByteSize(key_field, iter.GetKey()); + size += MapValueRefDataOnlyByteSize(value_field, iter.GetValueRef()); + data_size += WireFormatLite::LengthDelimitedSize(size); + } + return data_size; + } + } + size_t count = 0; if (field->is_repeated()) { count = internal::FromIntSize(message_reflection->FieldSize(message, field)); + } else if (field->containing_type()->options().map_entry()) { + // Map entry fields always need to be serialized. + count = 1; } else if (message_reflection->HasField(message, field)) { count = 1; } - size_t data_size = 0; switch (field->type()) { #define HANDLE_TYPE(TYPE, TYPE_METHOD, CPPTYPE_METHOD) \ case FieldDescriptor::TYPE_##TYPE: \ diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_lite.cc b/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_lite.cc index e46ac40010b369..7987f7c4adcaad 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_lite.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_lite.cc @@ -47,8 +47,8 @@ #include #include - namespace google { + namespace protobuf { namespace internal { @@ -123,6 +123,8 @@ WireFormatLite::kWireTypeForFieldType[MAX_FIELD_TYPE + 1] = { bool WireFormatLite::SkipField( io::CodedInputStream* input, uint32 tag) { + // Field number 0 is illegal. + if (WireFormatLite::GetTagFieldNumber(tag) == 0) return false; switch (WireFormatLite::GetTagWireType(tag)) { case WireFormatLite::WIRETYPE_VARINT: { uint64 value; @@ -168,6 +170,8 @@ bool WireFormatLite::SkipField( bool WireFormatLite::SkipField( io::CodedInputStream* input, uint32 tag, io::CodedOutputStream* output) { + // Field number 0 is illegal. + if (WireFormatLite::GetTagFieldNumber(tag) == 0) return false; switch (WireFormatLite::GetTagWireType(tag)) { case WireFormatLite::WIRETYPE_VARINT: { uint64 value; @@ -340,6 +344,8 @@ bool WireFormatLite::ReadPackedEnumPreserveUnknowns( return true; } +#if !defined(PROTOBUF_LITTLE_ENDIAN) + namespace { void EncodeFixedSizeValue(float v, uint8* dest) { WireFormatLite::WriteFloatNoTagToArray(v, dest); @@ -370,6 +376,8 @@ void EncodeFixedSizeValue(bool v, uint8* dest) { } } // anonymous namespace +#endif // !defined(PROTOBUF_LITTLE_ENDIAN) + template static void WriteArray(const CType* a, int n, io::CodedOutputStream* output) { #if defined(PROTOBUF_LITTLE_ENDIAN) @@ -378,7 +386,7 @@ static void WriteArray(const CType* a, int n, io::CodedOutputStream* output) { const int kAtATime = 128; uint8 buf[sizeof(CType) * kAtATime]; for (int i = 0; i < n; i += kAtATime) { - int to_do = min(kAtATime, n - i); + int to_do = std::min(kAtATime, n - i); uint8* ptr = buf; for (int j = 0; j < to_do; j++) { EncodeFixedSizeValue(a[i+j], ptr); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_lite.h b/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_lite.h index 60355144a58627..18b38eae7cc07f 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_lite.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_lite.h @@ -250,10 +250,6 @@ class LIBPROTOBUF_EXPORT WireFormatLite { // of these methods are defined in wire_format_lite_inl.h; you must #include // that file to use these. -// Avoid ugly line wrapping -#define input io::CodedInputStream* input_arg -#define output io::CodedOutputStream* output_arg -#define field_number int field_number_arg #ifdef NDEBUG #define INL GOOGLE_ATTRIBUTE_ALWAYS_INLINE #else @@ -270,24 +266,22 @@ class LIBPROTOBUF_EXPORT WireFormatLite { // For primitive fields, we just use a templatized routine parameterized by // the represented type and the FieldType. These are specialized with the // appropriate definition for each declared type. - template INL - static bool ReadPrimitive(input, CType* value); + template + INL static bool ReadPrimitive(io::CodedInputStream* input, CType* value); // Reads repeated primitive values, with optimizations for repeats. // tag_size and tag should both be compile-time constants provided by the // protocol compiler. - template INL - static bool ReadRepeatedPrimitive(int tag_size, - uint32 tag, - input, - RepeatedField* value); + template + INL static bool ReadRepeatedPrimitive(int tag_size, uint32 tag, + io::CodedInputStream* input, + RepeatedField* value); // Identical to ReadRepeatedPrimitive, except will not inline the // implementation. template - static bool ReadRepeatedPrimitiveNoInline(int tag_size, - uint32 tag, - input, + static bool ReadRepeatedPrimitiveNoInline(int tag_size, uint32 tag, + io::CodedInputStream* input, RepeatedField* value); // Reads a primitive value directly from the provided buffer. It returns a @@ -301,39 +295,39 @@ class LIBPROTOBUF_EXPORT WireFormatLite { // Reads a primitive packed field. // // This is only implemented for packable types. - template INL - static bool ReadPackedPrimitive(input, RepeatedField* value); + template + INL static bool ReadPackedPrimitive(io::CodedInputStream* input, + RepeatedField* value); // Identical to ReadPackedPrimitive, except will not inline the // implementation. template - static bool ReadPackedPrimitiveNoInline(input, RepeatedField* value); + static bool ReadPackedPrimitiveNoInline(io::CodedInputStream* input, + RepeatedField* value); // Read a packed enum field. If the is_valid function is not NULL, values for // which is_valid(value) returns false are silently dropped. - static bool ReadPackedEnumNoInline(input, + static bool ReadPackedEnumNoInline(io::CodedInputStream* input, bool (*is_valid)(int), RepeatedField* values); // Read a packed enum field. If the is_valid function is not NULL, values for // which is_valid(value) returns false are appended to unknown_fields_stream. static bool ReadPackedEnumPreserveUnknowns( - input, - field_number, - bool (*is_valid)(int), - io::CodedOutputStream* unknown_fields_stream, - RepeatedField* values); + io::CodedInputStream* input, int field_number, bool (*is_valid)(int), + io::CodedOutputStream* unknown_fields_stream, RepeatedField* values); // Read a string. ReadString(..., string* value) requires an existing string. - static inline bool ReadString(input, string* value); + static inline bool ReadString(io::CodedInputStream* input, string* value); // ReadString(..., string** p) is internal-only, and should only be called // from generated code. It starts by setting *p to "new string" // if *p == &GetEmptyStringAlreadyInited(). It then invokes - // ReadString(input, *p). This is useful for reducing code size. - static inline bool ReadString(input, string** p); + // ReadString(io::CodedInputStream* input, *p). This is useful for reducing + // code size. + static inline bool ReadString(io::CodedInputStream* input, string** p); // Analogous to ReadString(). - static bool ReadBytes(input, string* value); - static bool ReadBytes(input, string** p); + static bool ReadBytes(io::CodedInputStream* input, string* value); + static bool ReadBytes(io::CodedInputStream* input, string** p); enum Operation { @@ -346,195 +340,322 @@ class LIBPROTOBUF_EXPORT WireFormatLite { Operation op, const char* field_name); - static inline bool ReadGroup (field_number, input, MessageLite* value); - static inline bool ReadMessage(input, MessageLite* value); + static inline bool ReadGroup(int field_number, io::CodedInputStream* input, + MessageLite* value); + static inline bool ReadMessage(io::CodedInputStream* input, + MessageLite* value); // Like above, but de-virtualize the call to MergePartialFromCodedStream(). // The pointer must point at an instance of MessageType, *not* a subclass (or // the subclass must not override MergePartialFromCodedStream()). - template - static inline bool ReadGroupNoVirtual(field_number, input, + template + static inline bool ReadGroupNoVirtual(int field_number, + io::CodedInputStream* input, MessageType* value); template - static inline bool ReadMessageNoVirtual(input, MessageType* value); + static inline bool ReadMessageNoVirtual(io::CodedInputStream* input, + MessageType* value); // The same, but do not modify input's recursion depth. This is useful // when reading a bunch of groups or messages in a loop, because then the // recursion depth can be incremented before the loop and decremented after. template - static inline bool ReadGroupNoVirtualNoRecursionDepth(field_number, input, - MessageType* value); + static inline bool ReadGroupNoVirtualNoRecursionDepth( + int field_number, io::CodedInputStream* input, MessageType* value); template - static inline bool ReadMessageNoVirtualNoRecursionDepth(input, - MessageType* value); + static inline bool ReadMessageNoVirtualNoRecursionDepth( + io::CodedInputStream* input, MessageType* value); // Write a tag. The Write*() functions typically include the tag, so // normally there's no need to call this unless using the Write*NoTag() // variants. - INL static void WriteTag(field_number, WireType type, output); + INL static void WriteTag(int field_number, WireType type, + io::CodedOutputStream* output); // Write fields, without tags. - INL static void WriteInt32NoTag (int32 value, output); - INL static void WriteInt64NoTag (int64 value, output); - INL static void WriteUInt32NoTag (uint32 value, output); - INL static void WriteUInt64NoTag (uint64 value, output); - INL static void WriteSInt32NoTag (int32 value, output); - INL static void WriteSInt64NoTag (int64 value, output); - INL static void WriteFixed32NoTag (uint32 value, output); - INL static void WriteFixed64NoTag (uint64 value, output); - INL static void WriteSFixed32NoTag(int32 value, output); - INL static void WriteSFixed64NoTag(int64 value, output); - INL static void WriteFloatNoTag (float value, output); - INL static void WriteDoubleNoTag (double value, output); - INL static void WriteBoolNoTag (bool value, output); - INL static void WriteEnumNoTag (int value, output); + INL static void WriteInt32NoTag(int32 value, io::CodedOutputStream* output); + INL static void WriteInt64NoTag(int64 value, io::CodedOutputStream* output); + INL static void WriteUInt32NoTag(uint32 value, io::CodedOutputStream* output); + INL static void WriteUInt64NoTag(uint64 value, io::CodedOutputStream* output); + INL static void WriteSInt32NoTag(int32 value, io::CodedOutputStream* output); + INL static void WriteSInt64NoTag(int64 value, io::CodedOutputStream* output); + INL static void WriteFixed32NoTag(uint32 value, + io::CodedOutputStream* output); + INL static void WriteFixed64NoTag(uint64 value, + io::CodedOutputStream* output); + INL static void WriteSFixed32NoTag(int32 value, + io::CodedOutputStream* output); + INL static void WriteSFixed64NoTag(int64 value, + io::CodedOutputStream* output); + INL static void WriteFloatNoTag(float value, io::CodedOutputStream* output); + INL static void WriteDoubleNoTag(double value, io::CodedOutputStream* output); + INL static void WriteBoolNoTag(bool value, io::CodedOutputStream* output); + INL static void WriteEnumNoTag(int value, io::CodedOutputStream* output); // Write array of primitive fields, without tags - static void WriteFloatArray (const float* a, int n, output); - static void WriteDoubleArray (const double* a, int n, output); - static void WriteFixed32Array (const uint32* a, int n, output); - static void WriteFixed64Array (const uint64* a, int n, output); - static void WriteSFixed32Array(const int32* a, int n, output); - static void WriteSFixed64Array(const int64* a, int n, output); - static void WriteBoolArray (const bool* a, int n, output); + static void WriteFloatArray(const float* a, int n, + io::CodedOutputStream* output); + static void WriteDoubleArray(const double* a, int n, + io::CodedOutputStream* output); + static void WriteFixed32Array(const uint32* a, int n, + io::CodedOutputStream* output); + static void WriteFixed64Array(const uint64* a, int n, + io::CodedOutputStream* output); + static void WriteSFixed32Array(const int32* a, int n, + io::CodedOutputStream* output); + static void WriteSFixed64Array(const int64* a, int n, + io::CodedOutputStream* output); + static void WriteBoolArray(const bool* a, int n, + io::CodedOutputStream* output); // Write fields, including tags. - static void WriteInt32 (field_number, int32 value, output); - static void WriteInt64 (field_number, int64 value, output); - static void WriteUInt32 (field_number, uint32 value, output); - static void WriteUInt64 (field_number, uint64 value, output); - static void WriteSInt32 (field_number, int32 value, output); - static void WriteSInt64 (field_number, int64 value, output); - static void WriteFixed32 (field_number, uint32 value, output); - static void WriteFixed64 (field_number, uint64 value, output); - static void WriteSFixed32(field_number, int32 value, output); - static void WriteSFixed64(field_number, int64 value, output); - static void WriteFloat (field_number, float value, output); - static void WriteDouble (field_number, double value, output); - static void WriteBool (field_number, bool value, output); - static void WriteEnum (field_number, int value, output); - - static void WriteString(field_number, const string& value, output); - static void WriteBytes (field_number, const string& value, output); - static void WriteStringMaybeAliased( - field_number, const string& value, output); - static void WriteBytesMaybeAliased( - field_number, const string& value, output); - - static void WriteGroup( - field_number, const MessageLite& value, output); - static void WriteMessage( - field_number, const MessageLite& value, output); + static void WriteInt32(int field_number, int32 value, + io::CodedOutputStream* output); + static void WriteInt64(int field_number, int64 value, + io::CodedOutputStream* output); + static void WriteUInt32(int field_number, uint32 value, + io::CodedOutputStream* output); + static void WriteUInt64(int field_number, uint64 value, + io::CodedOutputStream* output); + static void WriteSInt32(int field_number, int32 value, + io::CodedOutputStream* output); + static void WriteSInt64(int field_number, int64 value, + io::CodedOutputStream* output); + static void WriteFixed32(int field_number, uint32 value, + io::CodedOutputStream* output); + static void WriteFixed64(int field_number, uint64 value, + io::CodedOutputStream* output); + static void WriteSFixed32(int field_number, int32 value, + io::CodedOutputStream* output); + static void WriteSFixed64(int field_number, int64 value, + io::CodedOutputStream* output); + static void WriteFloat(int field_number, float value, + io::CodedOutputStream* output); + static void WriteDouble(int field_number, double value, + io::CodedOutputStream* output); + static void WriteBool(int field_number, bool value, + io::CodedOutputStream* output); + static void WriteEnum(int field_number, int value, + io::CodedOutputStream* output); + + static void WriteString(int field_number, const string& value, + io::CodedOutputStream* output); + static void WriteBytes(int field_number, const string& value, + io::CodedOutputStream* output); + static void WriteStringMaybeAliased(int field_number, const string& value, + io::CodedOutputStream* output); + static void WriteBytesMaybeAliased(int field_number, const string& value, + io::CodedOutputStream* output); + + static void WriteGroup(int field_number, const MessageLite& value, + io::CodedOutputStream* output); + static void WriteMessage(int field_number, const MessageLite& value, + io::CodedOutputStream* output); // Like above, but these will check if the output stream has enough // space to write directly to a flat array. - static void WriteGroupMaybeToArray( - field_number, const MessageLite& value, output); - static void WriteMessageMaybeToArray( - field_number, const MessageLite& value, output); + static void WriteGroupMaybeToArray(int field_number, const MessageLite& value, + io::CodedOutputStream* output); + static void WriteMessageMaybeToArray(int field_number, + const MessageLite& value, + io::CodedOutputStream* output); // Like above, but de-virtualize the call to SerializeWithCachedSizes(). The // pointer must point at an instance of MessageType, *not* a subclass (or // the subclass must not override SerializeWithCachedSizes()). - template - static inline void WriteGroupNoVirtual( - field_number, const MessageType& value, output); - template - static inline void WriteMessageNoVirtual( - field_number, const MessageType& value, output); - -#undef output -#define output uint8* target + template + static inline void WriteGroupNoVirtual(int field_number, + const MessageType& value, + io::CodedOutputStream* output); + template + static inline void WriteMessageNoVirtual(int field_number, + const MessageType& value, + io::CodedOutputStream* output); // Like above, but use only *ToArray methods of CodedOutputStream. - INL static uint8* WriteTagToArray(field_number, WireType type, output); + INL static uint8* WriteTagToArray(int field_number, WireType type, + uint8* target); // Write fields, without tags. - INL static uint8* WriteInt32NoTagToArray (int32 value, output); - INL static uint8* WriteInt64NoTagToArray (int64 value, output); - INL static uint8* WriteUInt32NoTagToArray (uint32 value, output); - INL static uint8* WriteUInt64NoTagToArray (uint64 value, output); - INL static uint8* WriteSInt32NoTagToArray (int32 value, output); - INL static uint8* WriteSInt64NoTagToArray (int64 value, output); - INL static uint8* WriteFixed32NoTagToArray (uint32 value, output); - INL static uint8* WriteFixed64NoTagToArray (uint64 value, output); - INL static uint8* WriteSFixed32NoTagToArray(int32 value, output); - INL static uint8* WriteSFixed64NoTagToArray(int64 value, output); - INL static uint8* WriteFloatNoTagToArray (float value, output); - INL static uint8* WriteDoubleNoTagToArray (double value, output); - INL static uint8* WriteBoolNoTagToArray (bool value, output); - INL static uint8* WriteEnumNoTagToArray (int value, output); + INL static uint8* WriteInt32NoTagToArray(int32 value, uint8* target); + INL static uint8* WriteInt64NoTagToArray(int64 value, uint8* target); + INL static uint8* WriteUInt32NoTagToArray(uint32 value, uint8* target); + INL static uint8* WriteUInt64NoTagToArray(uint64 value, uint8* target); + INL static uint8* WriteSInt32NoTagToArray(int32 value, uint8* target); + INL static uint8* WriteSInt64NoTagToArray(int64 value, uint8* target); + INL static uint8* WriteFixed32NoTagToArray(uint32 value, uint8* target); + INL static uint8* WriteFixed64NoTagToArray(uint64 value, uint8* target); + INL static uint8* WriteSFixed32NoTagToArray(int32 value, uint8* target); + INL static uint8* WriteSFixed64NoTagToArray(int64 value, uint8* target); + INL static uint8* WriteFloatNoTagToArray(float value, uint8* target); + INL static uint8* WriteDoubleNoTagToArray(double value, uint8* target); + INL static uint8* WriteBoolNoTagToArray(bool value, uint8* target); + INL static uint8* WriteEnumNoTagToArray(int value, uint8* target); + + // Write fields, without tags. These require that value.size() > 0. + template + INL static uint8* WritePrimitiveNoTagToArray( + const RepeatedField& value, + uint8* (*Writer)(T, uint8*), uint8* target); + template + INL static uint8* WriteFixedNoTagToArray( + const RepeatedField& value, + uint8* (*Writer)(T, uint8*), uint8* target); + + INL static uint8* WriteInt32NoTagToArray( + const RepeatedField< int32>& value, uint8* output); + INL static uint8* WriteInt64NoTagToArray( + const RepeatedField< int64>& value, uint8* output); + INL static uint8* WriteUInt32NoTagToArray( + const RepeatedField& value, uint8* output); + INL static uint8* WriteUInt64NoTagToArray( + const RepeatedField& value, uint8* output); + INL static uint8* WriteSInt32NoTagToArray( + const RepeatedField< int32>& value, uint8* output); + INL static uint8* WriteSInt64NoTagToArray( + const RepeatedField< int64>& value, uint8* output); + INL static uint8* WriteFixed32NoTagToArray( + const RepeatedField& value, uint8* output); + INL static uint8* WriteFixed64NoTagToArray( + const RepeatedField& value, uint8* output); + INL static uint8* WriteSFixed32NoTagToArray( + const RepeatedField< int32>& value, uint8* output); + INL static uint8* WriteSFixed64NoTagToArray( + const RepeatedField< int64>& value, uint8* output); + INL static uint8* WriteFloatNoTagToArray( + const RepeatedField< float>& value, uint8* output); + INL static uint8* WriteDoubleNoTagToArray( + const RepeatedField& value, uint8* output); + INL static uint8* WriteBoolNoTagToArray( + const RepeatedField< bool>& value, uint8* output); + INL static uint8* WriteEnumNoTagToArray( + const RepeatedField< int>& value, uint8* output); // Write fields, including tags. - INL static uint8* WriteInt32ToArray(field_number, int32 value, output); - INL static uint8* WriteInt64ToArray(field_number, int64 value, output); - INL static uint8* WriteUInt32ToArray(field_number, uint32 value, output); - INL static uint8* WriteUInt64ToArray(field_number, uint64 value, output); - INL static uint8* WriteSInt32ToArray(field_number, int32 value, output); - INL static uint8* WriteSInt64ToArray(field_number, int64 value, output); - INL static uint8* WriteFixed32ToArray(field_number, uint32 value, output); - INL static uint8* WriteFixed64ToArray(field_number, uint64 value, output); - INL static uint8* WriteSFixed32ToArray(field_number, int32 value, output); - INL static uint8* WriteSFixed64ToArray(field_number, int64 value, output); - INL static uint8* WriteFloatToArray(field_number, float value, output); - INL static uint8* WriteDoubleToArray(field_number, double value, output); - INL static uint8* WriteBoolToArray(field_number, bool value, output); - INL static uint8* WriteEnumToArray(field_number, int value, output); - - INL static uint8* WriteStringToArray( - field_number, const string& value, output); - INL static uint8* WriteBytesToArray( - field_number, const string& value, output); + INL static uint8* WriteInt32ToArray(int field_number, int32 value, + uint8* target); + INL static uint8* WriteInt64ToArray(int field_number, int64 value, + uint8* target); + INL static uint8* WriteUInt32ToArray(int field_number, uint32 value, + uint8* target); + INL static uint8* WriteUInt64ToArray(int field_number, uint64 value, + uint8* target); + INL static uint8* WriteSInt32ToArray(int field_number, int32 value, + uint8* target); + INL static uint8* WriteSInt64ToArray(int field_number, int64 value, + uint8* target); + INL static uint8* WriteFixed32ToArray(int field_number, uint32 value, + uint8* target); + INL static uint8* WriteFixed64ToArray(int field_number, uint64 value, + uint8* target); + INL static uint8* WriteSFixed32ToArray(int field_number, int32 value, + uint8* target); + INL static uint8* WriteSFixed64ToArray(int field_number, int64 value, + uint8* target); + INL static uint8* WriteFloatToArray(int field_number, float value, + uint8* target); + INL static uint8* WriteDoubleToArray(int field_number, double value, + uint8* target); + INL static uint8* WriteBoolToArray(int field_number, bool value, + uint8* target); + INL static uint8* WriteEnumToArray(int field_number, int value, + uint8* target); + + template + INL static uint8* WritePrimitiveToArray( + int field_number, + const RepeatedField& value, + uint8* (*Writer)(int, T, uint8*), uint8* target); + + INL static uint8* WriteInt32ToArray( + int field_number, const RepeatedField< int32>& value, uint8* output); + INL static uint8* WriteInt64ToArray( + int field_number, const RepeatedField< int64>& value, uint8* output); + INL static uint8* WriteUInt32ToArray( + int field_number, const RepeatedField& value, uint8* output); + INL static uint8* WriteUInt64ToArray( + int field_number, const RepeatedField& value, uint8* output); + INL static uint8* WriteSInt32ToArray( + int field_number, const RepeatedField< int32>& value, uint8* output); + INL static uint8* WriteSInt64ToArray( + int field_number, const RepeatedField< int64>& value, uint8* output); + INL static uint8* WriteFixed32ToArray( + int field_number, const RepeatedField& value, uint8* output); + INL static uint8* WriteFixed64ToArray( + int field_number, const RepeatedField& value, uint8* output); + INL static uint8* WriteSFixed32ToArray( + int field_number, const RepeatedField< int32>& value, uint8* output); + INL static uint8* WriteSFixed64ToArray( + int field_number, const RepeatedField< int64>& value, uint8* output); + INL static uint8* WriteFloatToArray( + int field_number, const RepeatedField< float>& value, uint8* output); + INL static uint8* WriteDoubleToArray( + int field_number, const RepeatedField& value, uint8* output); + INL static uint8* WriteBoolToArray( + int field_number, const RepeatedField< bool>& value, uint8* output); + INL static uint8* WriteEnumToArray( + int field_number, const RepeatedField< int>& value, uint8* output); + + INL static uint8* WriteStringToArray(int field_number, const string& value, + uint8* target); + INL static uint8* WriteBytesToArray(int field_number, const string& value, + uint8* target); // Whether to serialize deterministically (e.g., map keys are // sorted) is a property of a CodedOutputStream, and in the process // of serialization, the "ToArray" variants may be invoked. But they don't // have a CodedOutputStream available, so they get an additional parameter // telling them whether to serialize deterministically. - INL static uint8* InternalWriteGroupToArray( - field_number, const MessageLite& value, bool deterministic, output); - INL static uint8* InternalWriteMessageToArray( - field_number, const MessageLite& value, bool deterministic, output); + INL static uint8* InternalWriteGroupToArray(int field_number, + const MessageLite& value, + bool deterministic, + uint8* target); + INL static uint8* InternalWriteMessageToArray(int field_number, + const MessageLite& value, + bool deterministic, + uint8* target); // Like above, but de-virtualize the call to SerializeWithCachedSizes(). The // pointer must point at an instance of MessageType, *not* a subclass (or // the subclass must not override SerializeWithCachedSizes()). - template - INL static uint8* InternalWriteGroupNoVirtualToArray( - field_number, const MessageType& value, bool deterministic, output); - template + template + INL static uint8* InternalWriteGroupNoVirtualToArray(int field_number, + const MessageType& value, + bool deterministic, + uint8* target); + template INL static uint8* InternalWriteMessageNoVirtualToArray( - field_number, const MessageType& value, bool deterministic, output); + int field_number, const MessageType& value, bool deterministic, + uint8* target); // For backward-compatibility, the last four methods also have versions // that are non-deterministic always. - INL static uint8* WriteGroupToArray( - field_number, const MessageLite& value, output) { - return InternalWriteGroupToArray(field_number_arg, value, false, target); + INL static uint8* WriteGroupToArray(int field_number, + const MessageLite& value, uint8* target) { + return InternalWriteGroupToArray(field_number, value, false, target); } - INL static uint8* WriteMessageToArray( - field_number, const MessageLite& value, output) { - return InternalWriteMessageToArray(field_number_arg, value, false, target); + INL static uint8* WriteMessageToArray(int field_number, + const MessageLite& value, + uint8* target) { + return InternalWriteMessageToArray(field_number, value, false, target); } - template - INL static uint8* WriteGroupNoVirtualToArray( - field_number, const MessageType& value, output) { - return InternalWriteGroupNoVirtualToArray(field_number_arg, value, false, + template + INL static uint8* WriteGroupNoVirtualToArray(int field_number, + const MessageType& value, + uint8* target) { + return InternalWriteGroupNoVirtualToArray(field_number, value, false, target); } - template - INL static uint8* WriteMessageNoVirtualToArray( - field_number, const MessageType& value, output) { - return InternalWriteMessageNoVirtualToArray(field_number_arg, value, false, + template + INL static uint8* WriteMessageNoVirtualToArray(int field_number, + const MessageType& value, + uint8* target) { + return InternalWriteMessageNoVirtualToArray(field_number, value, false, target); } -#undef output -#undef input #undef INL -#undef field_number - // Compute the byte size of a field. The XxSize() functions do NOT include // the tag, so you must also call TagSize(). (This is because, for repeated // fields, you should only call TagSize() once and multiply it by the element @@ -594,9 +715,9 @@ class LIBPROTOBUF_EXPORT WireFormatLite { RepeatedField* value); // Like ReadRepeatedFixedSizePrimitive but for packed primitive fields. - template GOOGLE_ATTRIBUTE_ALWAYS_INLINE - static bool ReadPackedFixedSizePrimitive(google::protobuf::io::CodedInputStream* input, - RepeatedField* value); + template + GOOGLE_ATTRIBUTE_ALWAYS_INLINE static bool ReadPackedFixedSizePrimitive( + google::protobuf::io::CodedInputStream* input, RepeatedField* value); static const CppType kFieldTypeToCppTypeMap[]; static const WireFormatLite::WireType kWireTypeForFieldType[]; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_lite_inl.h b/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_lite_inl.h index aa3bb3a6e9c6c3..05049017c7c8a4 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_lite_inl.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_lite_inl.h @@ -36,11 +36,7 @@ #ifndef GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_INL_H__ #define GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_INL_H__ -#ifdef _MSC_VER -// This is required for min/max on VS2013 only. #include -#endif - #include #include #include @@ -452,7 +448,7 @@ inline bool WireFormatLite::ReadMessage(io::CodedInputStream* input, if (p.second < 0 || !value->MergePartialFromCodedStream(input)) return false; // Make sure that parsing stopped when the limit was hit, not at an endgroup // tag. - return input->DecrementRecursionDepthAndPopLimit(p.first); + return input->DecrementRecursionDepthAndPopLimit(p.first); } // We name the template parameter something long and extremely unlikely to occur @@ -502,6 +498,7 @@ inline bool WireFormatLite::ReadMessageNoVirtual( // tag. return input->DecrementRecursionDepthAndPopLimit(p.first); } + template inline bool WireFormatLite::ReadMessageNoVirtualNoRecursionDepth( io::CodedInputStream* input, MessageType_WorkAroundCppLookupDefect* value) { @@ -671,6 +668,98 @@ inline uint8* WireFormatLite::WriteEnumNoTagToArray(int value, return io::CodedOutputStream::WriteVarint32SignExtendedToArray(value, target); } +template +inline uint8* WireFormatLite::WritePrimitiveNoTagToArray( + const RepeatedField& value, + uint8* (*Writer)(T, uint8*), uint8* target) { + const int n = value.size(); + GOOGLE_DCHECK_GT(n, 0); + + const T* ii = value.unsafe_data(); + int i = 0; + do { + target = Writer(ii[i], target); + } while (++i < n); + + return target; +} + +template +inline uint8* WireFormatLite::WriteFixedNoTagToArray( + const RepeatedField& value, + uint8* (*Writer)(T, uint8*), uint8* target) { +#if defined(PROTOBUF_LITTLE_ENDIAN) + (void) Writer; + + const int n = value.size(); + GOOGLE_DCHECK_GT(n, 0); + + const T* ii = value.unsafe_data(); + const int bytes = n * sizeof(ii[0]); + memcpy(target, ii, bytes); + return target + bytes; +#else + return WritePrimitiveNoTagToArray(value, Writer, target); +#endif +} + +inline uint8* WireFormatLite::WriteInt32NoTagToArray( + const RepeatedField< int32>& value, uint8* target) { + return WritePrimitiveNoTagToArray(value, WriteInt32NoTagToArray, target); +} +inline uint8* WireFormatLite::WriteInt64NoTagToArray( + const RepeatedField< int64>& value, uint8* target) { + return WritePrimitiveNoTagToArray(value, WriteInt64NoTagToArray, target); +} +inline uint8* WireFormatLite::WriteUInt32NoTagToArray( + const RepeatedField& value, uint8* target) { + return WritePrimitiveNoTagToArray(value, WriteUInt32NoTagToArray, target); +} +inline uint8* WireFormatLite::WriteUInt64NoTagToArray( + const RepeatedField& value, uint8* target) { + return WritePrimitiveNoTagToArray(value, WriteUInt64NoTagToArray, target); +} +inline uint8* WireFormatLite::WriteSInt32NoTagToArray( + const RepeatedField< int32>& value, uint8* target) { + return WritePrimitiveNoTagToArray(value, WriteSInt32NoTagToArray, target); +} +inline uint8* WireFormatLite::WriteSInt64NoTagToArray( + const RepeatedField< int64>& value, uint8* target) { + return WritePrimitiveNoTagToArray(value, WriteSInt64NoTagToArray, target); +} +inline uint8* WireFormatLite::WriteFixed32NoTagToArray( + const RepeatedField& value, uint8* target) { + return WriteFixedNoTagToArray(value, WriteFixed32NoTagToArray, target); +} +inline uint8* WireFormatLite::WriteFixed64NoTagToArray( + const RepeatedField& value, uint8* target) { + return WriteFixedNoTagToArray(value, WriteFixed64NoTagToArray, target); +} +inline uint8* WireFormatLite::WriteSFixed32NoTagToArray( + const RepeatedField< int32>& value, uint8* target) { + return WriteFixedNoTagToArray(value, WriteSFixed32NoTagToArray, target); +} +inline uint8* WireFormatLite::WriteSFixed64NoTagToArray( + const RepeatedField< int64>& value, uint8* target) { + return WriteFixedNoTagToArray(value, WriteSFixed64NoTagToArray, target); +} +inline uint8* WireFormatLite::WriteFloatNoTagToArray( + const RepeatedField< float>& value, uint8* target) { + return WriteFixedNoTagToArray(value, WriteFloatNoTagToArray, target); +} +inline uint8* WireFormatLite::WriteDoubleNoTagToArray( + const RepeatedField& value, uint8* target) { + return WriteFixedNoTagToArray(value, WriteDoubleNoTagToArray, target); +} +inline uint8* WireFormatLite::WriteBoolNoTagToArray( + const RepeatedField< bool>& value, uint8* target) { + return WritePrimitiveNoTagToArray(value, WriteBoolNoTagToArray, target); +} +inline uint8* WireFormatLite::WriteEnumNoTagToArray( + const RepeatedField< int>& value, uint8* target) { + return WritePrimitiveNoTagToArray(value, WriteEnumNoTagToArray, target); +} + inline uint8* WireFormatLite::WriteInt32ToArray(int field_number, int32 value, uint8* target) { @@ -756,6 +845,85 @@ inline uint8* WireFormatLite::WriteEnumToArray(int field_number, return WriteEnumNoTagToArray(value, target); } +template +inline uint8* WireFormatLite::WritePrimitiveToArray( + int field_number, + const RepeatedField& value, + uint8* (*Writer)(int, T, uint8*), uint8* target) { + const int n = value.size(); + if (n == 0) { + return target; + } + + const T* ii = value.unsafe_data(); + int i = 0; + do { + target = Writer(field_number, ii[i], target); + } while (++i < n); + + return target; +} + +inline uint8* WireFormatLite::WriteInt32ToArray( + int field_number, const RepeatedField< int32>& value, uint8* target) { + return WritePrimitiveToArray(field_number, value, WriteInt32ToArray, target); +} +inline uint8* WireFormatLite::WriteInt64ToArray( + int field_number, const RepeatedField< int64>& value, uint8* target) { + return WritePrimitiveToArray(field_number, value, WriteInt64ToArray, target); +} +inline uint8* WireFormatLite::WriteUInt32ToArray( + int field_number, const RepeatedField& value, uint8* target) { + return WritePrimitiveToArray(field_number, value, WriteUInt32ToArray, target); +} +inline uint8* WireFormatLite::WriteUInt64ToArray( + int field_number, const RepeatedField& value, uint8* target) { + return WritePrimitiveToArray(field_number, value, WriteUInt64ToArray, target); +} +inline uint8* WireFormatLite::WriteSInt32ToArray( + int field_number, const RepeatedField< int32>& value, uint8* target) { + return WritePrimitiveToArray(field_number, value, WriteSInt32ToArray, target); +} +inline uint8* WireFormatLite::WriteSInt64ToArray( + int field_number, const RepeatedField< int64>& value, uint8* target) { + return WritePrimitiveToArray(field_number, value, WriteSInt64ToArray, target); +} +inline uint8* WireFormatLite::WriteFixed32ToArray( + int field_number, const RepeatedField& value, uint8* target) { + return WritePrimitiveToArray( + field_number, value, WriteFixed32ToArray, target); +} +inline uint8* WireFormatLite::WriteFixed64ToArray( + int field_number, const RepeatedField& value, uint8* target) { + return WritePrimitiveToArray( + field_number, value, WriteFixed64ToArray, target); +} +inline uint8* WireFormatLite::WriteSFixed32ToArray( + int field_number, const RepeatedField< int32>& value, uint8* target) { + return WritePrimitiveToArray( + field_number, value, WriteSFixed32ToArray, target); +} +inline uint8* WireFormatLite::WriteSFixed64ToArray( + int field_number, const RepeatedField< int64>& value, uint8* target) { + return WritePrimitiveToArray( + field_number, value, WriteSFixed64ToArray, target); +} +inline uint8* WireFormatLite::WriteFloatToArray( + int field_number, const RepeatedField< float>& value, uint8* target) { + return WritePrimitiveToArray(field_number, value, WriteFloatToArray, target); +} +inline uint8* WireFormatLite::WriteDoubleToArray( + int field_number, const RepeatedField& value, uint8* target) { + return WritePrimitiveToArray(field_number, value, WriteDoubleToArray, target); +} +inline uint8* WireFormatLite::WriteBoolToArray( + int field_number, const RepeatedField< bool>& value, uint8* target) { + return WritePrimitiveToArray(field_number, value, WriteBoolToArray, target); +} +inline uint8* WireFormatLite::WriteEnumToArray( + int field_number, const RepeatedField< int>& value, uint8* target) { + return WritePrimitiveToArray(field_number, value, WriteEnumToArray, target); +} inline uint8* WireFormatLite::WriteStringToArray(int field_number, const string& value, uint8* target) { @@ -797,7 +965,8 @@ inline uint8* WireFormatLite::InternalWriteGroupNoVirtualToArray( int field_number, const MessageType_WorkAroundCppLookupDefect& value, bool deterministic, uint8* target) { target = WriteTagToArray(field_number, WIRETYPE_START_GROUP, target); - target = value.InternalSerializeWithCachedSizesToArray(deterministic, target); + target = value.MessageType_WorkAroundCppLookupDefect:: + InternalSerializeWithCachedSizesToArray(deterministic, target); return WriteTagToArray(field_number, WIRETYPE_END_GROUP, target); } template @@ -807,7 +976,8 @@ inline uint8* WireFormatLite::InternalWriteMessageNoVirtualToArray( target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target); target = io::CodedOutputStream::WriteVarint32ToArray( value.MessageType_WorkAroundCppLookupDefect::GetCachedSize(), target); - return value.InternalSerializeWithCachedSizesToArray(deterministic, target); + return value.MessageType_WorkAroundCppLookupDefect:: + InternalSerializeWithCachedSizesToArray(deterministic, target); } // =================================================================== diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_unittest.cc b/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_unittest.cc index 897fec00c7f837..cafe9a48f9b733 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_unittest.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/wire_format_unittest.cc @@ -1029,6 +1029,29 @@ TEST_F(WireFormatInvalidInputTest, InvalidSubMessage) { EXPECT_FALSE(message.ParseFromString(MakeInvalidEmbeddedMessage("\017", 1))); } +TEST_F(WireFormatInvalidInputTest, InvalidMessageWithExtraZero) { + string data; + { + // Serialize a valid proto + unittest::TestAllTypes message; + message.set_optional_int32(1); + message.SerializeToString(&data); + data.push_back(0); // Append invalid zero tag + } + + // Control case. + { + io::ArrayInputStream ais(data.data(), data.size()); + io::CodedInputStream is(&ais); + unittest::TestAllTypes message; + // It should fail but currently passes. + EXPECT_TRUE(message.MergePartialFromCodedStream(&is)); + // Parsing from the string should fail. + EXPECT_FALSE(message.ParseFromString(data)); + } +} + + TEST_F(WireFormatInvalidInputTest, InvalidGroup) { unittest::TestAllTypes message; diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/wrappers.pb.cc b/third_party/protobuf/3.2.0/src/google/protobuf/wrappers.pb.cc index d614de9dc92aad..12c04fd5f01a02 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/wrappers.pb.cc +++ b/third_party/protobuf/3.2.0/src/google/protobuf/wrappers.pb.cc @@ -47,64 +47,95 @@ ::google::protobuf::Metadata file_level_metadata[9]; } // namespace +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField + const TableStruct::entries[] = { + {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0}, +}; + +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField + const TableStruct::aux[] = { + ::google::protobuf::internal::AuxillaryParseTableField(), +}; +PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const + TableStruct::schema[] = { + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, + { NULL, NULL, 0, -1, -1, false }, +}; + const ::google::protobuf::uint32 TableStruct::offsets[] = { ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DoubleValue, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(DoubleValue, value_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FloatValue, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(FloatValue, value_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Int64Value, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Int64Value, value_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(UInt64Value, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(UInt64Value, value_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Int32Value, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Int32Value, value_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(UInt32Value, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(UInt32Value, value_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(BoolValue, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(BoolValue, value_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(StringValue, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(StringValue, value_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(BytesValue, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(BytesValue, value_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] = { { 0, -1, sizeof(DoubleValue)}, - { 5, -1, sizeof(FloatValue)}, - { 10, -1, sizeof(Int64Value)}, - { 15, -1, sizeof(UInt64Value)}, - { 20, -1, sizeof(Int32Value)}, - { 25, -1, sizeof(UInt32Value)}, - { 30, -1, sizeof(BoolValue)}, - { 35, -1, sizeof(StringValue)}, - { 40, -1, sizeof(BytesValue)}, + { 6, -1, sizeof(FloatValue)}, + { 12, -1, sizeof(Int64Value)}, + { 18, -1, sizeof(UInt64Value)}, + { 24, -1, sizeof(Int32Value)}, + { 30, -1, sizeof(UInt32Value)}, + { 36, -1, sizeof(BoolValue)}, + { 42, -1, sizeof(StringValue)}, + { 48, -1, sizeof(BytesValue)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -283,7 +314,7 @@ void DoubleValue::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* DoubleValue::descriptor() { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[0].descriptor; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const DoubleValue& DoubleValue::default_instance() { @@ -348,6 +379,9 @@ bool DoubleValue::MergePartialFromCodedStream( void DoubleValue::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.DoubleValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // double value = 1; if (this->value() != 0) { ::google::protobuf::internal::WireFormatLite::WriteDouble(1, this->value(), output); @@ -358,8 +392,10 @@ void DoubleValue::SerializeWithCachedSizes( ::google::protobuf::uint8* DoubleValue::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.DoubleValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // double value = 1; if (this->value() != 0) { target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(1, this->value(), target); @@ -404,6 +440,9 @@ void DoubleValue::MergeFrom(const DoubleValue& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.DoubleValue) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.value() != 0) { set_value(from.value()); } @@ -453,7 +492,7 @@ void DoubleValue::InternalSwap(DoubleValue* other) { ::google::protobuf::Metadata DoubleValue::GetMetadata() const { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[0]; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -539,7 +578,7 @@ void FloatValue::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* FloatValue::descriptor() { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[1].descriptor; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const FloatValue& FloatValue::default_instance() { @@ -604,6 +643,9 @@ bool FloatValue::MergePartialFromCodedStream( void FloatValue::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.FloatValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // float value = 1; if (this->value() != 0) { ::google::protobuf::internal::WireFormatLite::WriteFloat(1, this->value(), output); @@ -614,8 +656,10 @@ void FloatValue::SerializeWithCachedSizes( ::google::protobuf::uint8* FloatValue::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FloatValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // float value = 1; if (this->value() != 0) { target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(1, this->value(), target); @@ -660,6 +704,9 @@ void FloatValue::MergeFrom(const FloatValue& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.FloatValue) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.value() != 0) { set_value(from.value()); } @@ -709,7 +756,7 @@ void FloatValue::InternalSwap(FloatValue* other) { ::google::protobuf::Metadata FloatValue::GetMetadata() const { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[1]; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -795,7 +842,7 @@ void Int64Value::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Int64Value::descriptor() { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[2].descriptor; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Int64Value& Int64Value::default_instance() { @@ -860,6 +907,9 @@ bool Int64Value::MergePartialFromCodedStream( void Int64Value::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Int64Value) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // int64 value = 1; if (this->value() != 0) { ::google::protobuf::internal::WireFormatLite::WriteInt64(1, this->value(), output); @@ -870,8 +920,10 @@ void Int64Value::SerializeWithCachedSizes( ::google::protobuf::uint8* Int64Value::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Int64Value) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // int64 value = 1; if (this->value() != 0) { target = ::google::protobuf::internal::WireFormatLite::WriteInt64ToArray(1, this->value(), target); @@ -918,6 +970,9 @@ void Int64Value::MergeFrom(const Int64Value& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Int64Value) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.value() != 0) { set_value(from.value()); } @@ -967,7 +1022,7 @@ void Int64Value::InternalSwap(Int64Value* other) { ::google::protobuf::Metadata Int64Value::GetMetadata() const { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[2]; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -1053,7 +1108,7 @@ void UInt64Value::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* UInt64Value::descriptor() { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[3].descriptor; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const UInt64Value& UInt64Value::default_instance() { @@ -1118,6 +1173,9 @@ bool UInt64Value::MergePartialFromCodedStream( void UInt64Value::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.UInt64Value) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // uint64 value = 1; if (this->value() != 0) { ::google::protobuf::internal::WireFormatLite::WriteUInt64(1, this->value(), output); @@ -1128,8 +1186,10 @@ void UInt64Value::SerializeWithCachedSizes( ::google::protobuf::uint8* UInt64Value::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.UInt64Value) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // uint64 value = 1; if (this->value() != 0) { target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(1, this->value(), target); @@ -1176,6 +1236,9 @@ void UInt64Value::MergeFrom(const UInt64Value& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.UInt64Value) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.value() != 0) { set_value(from.value()); } @@ -1225,7 +1288,7 @@ void UInt64Value::InternalSwap(UInt64Value* other) { ::google::protobuf::Metadata UInt64Value::GetMetadata() const { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[3]; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -1311,7 +1374,7 @@ void Int32Value::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* Int32Value::descriptor() { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[4].descriptor; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const Int32Value& Int32Value::default_instance() { @@ -1376,6 +1439,9 @@ bool Int32Value::MergePartialFromCodedStream( void Int32Value::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.Int32Value) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // int32 value = 1; if (this->value() != 0) { ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->value(), output); @@ -1386,8 +1452,10 @@ void Int32Value::SerializeWithCachedSizes( ::google::protobuf::uint8* Int32Value::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.Int32Value) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // int32 value = 1; if (this->value() != 0) { target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->value(), target); @@ -1434,6 +1502,9 @@ void Int32Value::MergeFrom(const Int32Value& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.Int32Value) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.value() != 0) { set_value(from.value()); } @@ -1483,7 +1554,7 @@ void Int32Value::InternalSwap(Int32Value* other) { ::google::protobuf::Metadata Int32Value::GetMetadata() const { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[4]; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -1569,7 +1640,7 @@ void UInt32Value::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* UInt32Value::descriptor() { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[5].descriptor; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const UInt32Value& UInt32Value::default_instance() { @@ -1634,6 +1705,9 @@ bool UInt32Value::MergePartialFromCodedStream( void UInt32Value::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.UInt32Value) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // uint32 value = 1; if (this->value() != 0) { ::google::protobuf::internal::WireFormatLite::WriteUInt32(1, this->value(), output); @@ -1644,8 +1718,10 @@ void UInt32Value::SerializeWithCachedSizes( ::google::protobuf::uint8* UInt32Value::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.UInt32Value) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // uint32 value = 1; if (this->value() != 0) { target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(1, this->value(), target); @@ -1692,6 +1768,9 @@ void UInt32Value::MergeFrom(const UInt32Value& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.UInt32Value) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.value() != 0) { set_value(from.value()); } @@ -1741,7 +1820,7 @@ void UInt32Value::InternalSwap(UInt32Value* other) { ::google::protobuf::Metadata UInt32Value::GetMetadata() const { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[5]; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -1827,7 +1906,7 @@ void BoolValue::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* BoolValue::descriptor() { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[6].descriptor; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const BoolValue& BoolValue::default_instance() { @@ -1892,6 +1971,9 @@ bool BoolValue::MergePartialFromCodedStream( void BoolValue::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.BoolValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // bool value = 1; if (this->value() != 0) { ::google::protobuf::internal::WireFormatLite::WriteBool(1, this->value(), output); @@ -1902,8 +1984,10 @@ void BoolValue::SerializeWithCachedSizes( ::google::protobuf::uint8* BoolValue::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.BoolValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // bool value = 1; if (this->value() != 0) { target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(1, this->value(), target); @@ -1948,6 +2032,9 @@ void BoolValue::MergeFrom(const BoolValue& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.BoolValue) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.value() != 0) { set_value(from.value()); } @@ -1997,7 +2084,7 @@ void BoolValue::InternalSwap(BoolValue* other) { ::google::protobuf::Metadata BoolValue::GetMetadata() const { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[6]; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -2088,7 +2175,7 @@ void StringValue::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* StringValue::descriptor() { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[7].descriptor; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const StringValue& StringValue::default_instance() { @@ -2155,6 +2242,9 @@ bool StringValue::MergePartialFromCodedStream( void StringValue::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.StringValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string value = 1; if (this->value().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -2170,8 +2260,10 @@ void StringValue::SerializeWithCachedSizes( ::google::protobuf::uint8* StringValue::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.StringValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // string value = 1; if (this->value().size() > 0) { ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( @@ -2224,6 +2316,9 @@ void StringValue::MergeFrom(const StringValue& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.StringValue) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.value().size() > 0) { set_value(from.value()); } @@ -2273,7 +2368,7 @@ void StringValue::InternalSwap(StringValue* other) { ::google::protobuf::Metadata StringValue::GetMetadata() const { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[7]; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -2293,6 +2388,7 @@ void StringValue::set_value(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.StringValue.value) } void StringValue::set_value(const char* value) { + GOOGLE_DCHECK(value != NULL); value_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -2416,7 +2512,7 @@ void BytesValue::SetCachedSize(int size) const { } const ::google::protobuf::Descriptor* BytesValue::descriptor() { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[8].descriptor; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } const BytesValue& BytesValue::default_instance() { @@ -2479,6 +2575,9 @@ bool BytesValue::MergePartialFromCodedStream( void BytesValue::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { // @@protoc_insertion_point(serialize_start:google.protobuf.BytesValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // bytes value = 1; if (this->value().size() > 0) { ::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased( @@ -2490,8 +2589,10 @@ void BytesValue::SerializeWithCachedSizes( ::google::protobuf::uint8* BytesValue::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { - (void)deterministic; // Unused // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.BytesValue) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + // bytes value = 1; if (this->value().size() > 0) { target = @@ -2540,6 +2641,9 @@ void BytesValue::MergeFrom(const BytesValue& from) { // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.BytesValue) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + if (from.value().size() > 0) { set_value(from.value()); } @@ -2589,7 +2693,7 @@ void BytesValue::InternalSwap(BytesValue* other) { ::google::protobuf::Metadata BytesValue::GetMetadata() const { protobuf_google_2fprotobuf_2fwrappers_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[8]; + return protobuf_google_2fprotobuf_2fwrappers_2eproto::file_level_metadata[kIndexInFileMessages]; } #if PROTOBUF_INLINE_NOT_IN_HEADERS @@ -2609,6 +2713,7 @@ void BytesValue::set_value(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.BytesValue.value) } void BytesValue::set_value(const char* value) { + GOOGLE_DCHECK(value != NULL); value_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); diff --git a/third_party/protobuf/3.2.0/src/google/protobuf/wrappers.pb.h b/third_party/protobuf/3.2.0/src/google/protobuf/wrappers.pb.h index 61b0510dca314c..4202541b6c67a3 100644 --- a/third_party/protobuf/3.2.0/src/google/protobuf/wrappers.pb.h +++ b/third_party/protobuf/3.2.0/src/google/protobuf/wrappers.pb.h @@ -8,12 +8,12 @@ #include -#if GOOGLE_PROTOBUF_VERSION < 3002000 +#if GOOGLE_PROTOBUF_VERSION < 3003000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3002000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -67,6 +68,9 @@ namespace protobuf { namespace protobuf_google_2fprotobuf_2fwrappers_2eproto { // Internal implementation detail -- do not call these. struct LIBPROTOBUF_EXPORT TableStruct { + static const ::google::protobuf::internal::ParseTableField entries[]; + static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; + static const ::google::protobuf::internal::ParseTable schema[]; static const ::google::protobuf::uint32 offsets[]; static void InitDefaultsImpl(); static void Shutdown(); @@ -102,6 +106,8 @@ class LIBPROTOBUF_EXPORT DoubleValue : public ::google::protobuf::Message /* @@p return reinterpret_cast( &_DoubleValue_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 0; void UnsafeArenaSwap(DoubleValue* other); void Swap(DoubleValue* other); @@ -125,11 +131,6 @@ class LIBPROTOBUF_EXPORT DoubleValue : public ::google::protobuf::Message /* @@p ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -171,7 +172,7 @@ class LIBPROTOBUF_EXPORT DoubleValue : public ::google::protobuf::Message /* @@p typedef void DestructorSkippable_; double value_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -200,6 +201,8 @@ class LIBPROTOBUF_EXPORT FloatValue : public ::google::protobuf::Message /* @@pr return reinterpret_cast( &_FloatValue_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 1; void UnsafeArenaSwap(FloatValue* other); void Swap(FloatValue* other); @@ -223,11 +226,6 @@ class LIBPROTOBUF_EXPORT FloatValue : public ::google::protobuf::Message /* @@pr ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -269,7 +267,7 @@ class LIBPROTOBUF_EXPORT FloatValue : public ::google::protobuf::Message /* @@pr typedef void DestructorSkippable_; float value_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -298,6 +296,8 @@ class LIBPROTOBUF_EXPORT Int64Value : public ::google::protobuf::Message /* @@pr return reinterpret_cast( &_Int64Value_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 2; void UnsafeArenaSwap(Int64Value* other); void Swap(Int64Value* other); @@ -321,11 +321,6 @@ class LIBPROTOBUF_EXPORT Int64Value : public ::google::protobuf::Message /* @@pr ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -367,7 +362,7 @@ class LIBPROTOBUF_EXPORT Int64Value : public ::google::protobuf::Message /* @@pr typedef void DestructorSkippable_; ::google::protobuf::int64 value_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -396,6 +391,8 @@ class LIBPROTOBUF_EXPORT UInt64Value : public ::google::protobuf::Message /* @@p return reinterpret_cast( &_UInt64Value_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 3; void UnsafeArenaSwap(UInt64Value* other); void Swap(UInt64Value* other); @@ -419,11 +416,6 @@ class LIBPROTOBUF_EXPORT UInt64Value : public ::google::protobuf::Message /* @@p ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -465,7 +457,7 @@ class LIBPROTOBUF_EXPORT UInt64Value : public ::google::protobuf::Message /* @@p typedef void DestructorSkippable_; ::google::protobuf::uint64 value_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -494,6 +486,8 @@ class LIBPROTOBUF_EXPORT Int32Value : public ::google::protobuf::Message /* @@pr return reinterpret_cast( &_Int32Value_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 4; void UnsafeArenaSwap(Int32Value* other); void Swap(Int32Value* other); @@ -517,11 +511,6 @@ class LIBPROTOBUF_EXPORT Int32Value : public ::google::protobuf::Message /* @@pr ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -563,7 +552,7 @@ class LIBPROTOBUF_EXPORT Int32Value : public ::google::protobuf::Message /* @@pr typedef void DestructorSkippable_; ::google::protobuf::int32 value_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -592,6 +581,8 @@ class LIBPROTOBUF_EXPORT UInt32Value : public ::google::protobuf::Message /* @@p return reinterpret_cast( &_UInt32Value_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 5; void UnsafeArenaSwap(UInt32Value* other); void Swap(UInt32Value* other); @@ -615,11 +606,6 @@ class LIBPROTOBUF_EXPORT UInt32Value : public ::google::protobuf::Message /* @@p ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -661,7 +647,7 @@ class LIBPROTOBUF_EXPORT UInt32Value : public ::google::protobuf::Message /* @@p typedef void DestructorSkippable_; ::google::protobuf::uint32 value_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -690,6 +676,8 @@ class LIBPROTOBUF_EXPORT BoolValue : public ::google::protobuf::Message /* @@pro return reinterpret_cast( &_BoolValue_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 6; void UnsafeArenaSwap(BoolValue* other); void Swap(BoolValue* other); @@ -713,11 +701,6 @@ class LIBPROTOBUF_EXPORT BoolValue : public ::google::protobuf::Message /* @@pro ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -759,7 +742,7 @@ class LIBPROTOBUF_EXPORT BoolValue : public ::google::protobuf::Message /* @@pro typedef void DestructorSkippable_; bool value_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -788,6 +771,8 @@ class LIBPROTOBUF_EXPORT StringValue : public ::google::protobuf::Message /* @@p return reinterpret_cast( &_StringValue_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 7; void UnsafeArenaSwap(StringValue* other); void Swap(StringValue* other); @@ -811,11 +796,6 @@ class LIBPROTOBUF_EXPORT StringValue : public ::google::protobuf::Message /* @@p ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -865,7 +845,7 @@ class LIBPROTOBUF_EXPORT StringValue : public ::google::protobuf::Message /* @@p typedef void DestructorSkippable_; ::google::protobuf::internal::ArenaStringPtr value_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; }; // ------------------------------------------------------------------- @@ -894,6 +874,8 @@ class LIBPROTOBUF_EXPORT BytesValue : public ::google::protobuf::Message /* @@pr return reinterpret_cast( &_BytesValue_default_instance_); } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 8; void UnsafeArenaSwap(BytesValue* other); void Swap(BytesValue* other); @@ -917,11 +899,6 @@ class LIBPROTOBUF_EXPORT BytesValue : public ::google::protobuf::Message /* @@pr ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; - ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) - const PROTOBUF_FINAL { - return InternalSerializeWithCachedSizesToArray( - ::google::protobuf::io::CodedOutputStream::IsDefaultSerializationDeterministic(), output); - } int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } private: void SharedCtor(); @@ -971,7 +948,7 @@ class LIBPROTOBUF_EXPORT BytesValue : public ::google::protobuf::Message /* @@pr typedef void DestructorSkippable_; ::google::protobuf::internal::ArenaStringPtr value_; mutable int _cached_size_; - friend struct LIBPROTOBUF_EXPORT protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; + friend struct protobuf_google_2fprotobuf_2fwrappers_2eproto::TableStruct; }; // =================================================================== @@ -1121,6 +1098,7 @@ inline void StringValue::set_value(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.StringValue.value) } inline void StringValue::set_value(const char* value) { + GOOGLE_DCHECK(value != NULL); value_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); @@ -1191,6 +1169,7 @@ inline void BytesValue::set_value(const ::std::string& value) { // @@protoc_insertion_point(field_set:google.protobuf.BytesValue.value) } inline void BytesValue::set_value(const char* value) { + GOOGLE_DCHECK(value != NULL); value_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value), GetArenaNoVirtual()); diff --git a/third_party/protobuf/3.2.0/tests.sh b/third_party/protobuf/3.2.0/tests.sh index 68ba7cc7b25982..edb37da7ac3480 100755 --- a/third_party/protobuf/3.2.0/tests.sh +++ b/third_party/protobuf/3.2.0/tests.sh @@ -362,6 +362,7 @@ generate_php_test_proto() { ../../src/protoc --php_out=generated proto/test.proto proto/test_include.proto proto/test_no_namespace.proto proto/test_prefix.proto pushd ../../src ./protoc --php_out=../php/tests/generated google/protobuf/empty.proto + ./protoc --php_out=../php/tests/generated -I../php/tests -I. ../php/tests/proto/test_import_descriptor_proto.proto popd popd } @@ -371,12 +372,9 @@ use_php() { PHP=`which php` PHP_CONFIG=`which php-config` PHPIZE=`which phpize` - rm $PHP - rm $PHP_CONFIG - rm $PHPIZE - cp "/usr/bin/php$VERSION" $PHP - cp "/usr/bin/php-config$VERSION" $PHP_CONFIG - cp "/usr/bin/phpize$VERSION" $PHPIZE + ln -sfn "/usr/local/php-${VERSION}/bin/php" $PHP + ln -sfn "/usr/local/php-${VERSION}/bin/php-config" $PHP_CONFIG + ln -sfn "/usr/local/php-${VERSION}/bin/phpize" $PHPIZE generate_php_test_proto } @@ -403,18 +401,13 @@ use_php_bc() { } build_php5.5() { - PHP=`which php` - PHP_CONFIG=`which php-config` - PHPIZE=`which phpize` - ln -sfn "/usr/local/php-5.5/bin/php" $PHP - ln -sfn "/usr/local/php-5.5/bin/php-config" $PHP_CONFIG - ln -sfn "/usr/local/php-5.5/bin/phpize" $PHPIZE - generate_php_test_proto + use_php 5.5 pushd php rm -rf vendor cp -r /usr/local/vendor-5.5 vendor - ./vendor/bin/phpunit + wget https://phar.phpunit.de/phpunit-4.8.0.phar -O /usr/bin/phpunit + phpunit popd pushd conformance # TODO(teboring): Add it back @@ -423,51 +416,21 @@ build_php5.5() { } build_php5.5_c() { - PHP=`which php` - PHP_CONFIG=`which php-config` - PHPIZE=`which phpize` - ln -sfn "/usr/local/php-5.5/bin/php" $PHP - ln -sfn "/usr/local/php-5.5/bin/php-config" $PHP_CONFIG - ln -sfn "/usr/local/php-5.5/bin/phpize" $PHPIZE - generate_php_test_proto - wget https://phar.phpunit.de/phpunit-old.phar -O /usr/bin/phpunit - + use_php 5.5 + wget https://phar.phpunit.de/phpunit-4.8.0.phar -O /usr/bin/phpunit cd php/tests && /bin/bash ./test.sh && cd ../.. pushd conformance - make test_php_c + # make test_php_c popd } build_php5.5_zts_c() { use_php_zts 5.5 - wget https://phar.phpunit.de/phpunit-old.phar -O /usr/bin/phpunit + wget https://phar.phpunit.de/phpunit-4.8.0.phar -O /usr/bin/phpunit cd php/tests && /bin/bash ./test.sh && cd ../.. pushd conformance - make test_php_c - popd -} - -build_php5.5_32() { - use_php_bc 5.5 - pushd php - rm -rf vendor - cp -r /usr/local/vendor-5.5 vendor - ./vendor/bin/phpunit - popd - # TODO(teboring): Add conformance test. - # pushd conformance - # make test_php - # popd -} - -build_php5.5_c_32() { - use_php_bc 5.5 - wget https://phar.phpunit.de/phpunit-old.phar -O /usr/bin/phpunit - cd php/tests && /bin/bash ./test.sh && cd ../.. - # TODO(teboring): Add conformance test. - # pushd conformance # make test_php_c - # popd + popd } build_php5.6() { @@ -475,7 +438,8 @@ build_php5.6() { pushd php rm -rf vendor cp -r /usr/local/vendor-5.6 vendor - ./vendor/bin/phpunit + wget https://phar.phpunit.de/phpunit-5.7.0.phar -O /usr/bin/phpunit + phpunit popd pushd conformance # TODO(teboring): Add it back @@ -485,9 +449,19 @@ build_php5.6() { build_php5.6_c() { use_php 5.6 + wget https://phar.phpunit.de/phpunit-5.7.0.phar -O /usr/bin/phpunit cd php/tests && /bin/bash ./test.sh && cd ../.. pushd conformance - make test_php_c + # make test_php_c + popd +} + +build_php5.6_zts_c() { + use_php_zts 5.6 + wget https://phar.phpunit.de/phpunit-5.7.0.phar -O /usr/bin/phpunit + cd php/tests && /bin/bash ./test.sh && cd ../.. + pushd conformance + # make test_php_c popd } @@ -511,7 +485,7 @@ build_php5.6_mac() { # Test cd php/tests && /bin/bash ./test.sh && cd ../.. pushd conformance - make test_php_c + # make test_php_c popd } @@ -520,7 +494,8 @@ build_php7.0() { pushd php rm -rf vendor cp -r /usr/local/vendor-7.0 vendor - ./vendor/bin/phpunit + wget https://phar.phpunit.de/phpunit-5.6.0.phar -O /usr/bin/phpunit + phpunit popd pushd conformance # TODO(teboring): Add it back @@ -530,9 +505,43 @@ build_php7.0() { build_php7.0_c() { use_php 7.0 + wget https://phar.phpunit.de/phpunit-5.6.0.phar -O /usr/bin/phpunit cd php/tests && /bin/bash ./test.sh && cd ../.. pushd conformance - make test_php_c + # make test_php_c + popd +} + +build_php7.0_zts_c() { + use_php_zts 7.0 + wget https://phar.phpunit.de/phpunit-5.6.0.phar -O /usr/bin/phpunit + cd php/tests && /bin/bash ./test.sh && cd ../.. + pushd conformance + # make test_php_c + popd +} + +build_php7.0_mac() { + generate_php_test_proto + # Install PHP + curl -s https://php-osx.liip.ch/install.sh | bash -s 7.0 + PHP_FOLDER=`find /usr/local -type d -name "php7-7.0*"` # The folder name may change upon time + export PATH="$PHP_FOLDER/bin:$PATH" + + # Install phpunit + curl https://phar.phpunit.de/phpunit-5.6.0.phar -L -o phpunit.phar + chmod +x phpunit.phar + sudo mv phpunit.phar /usr/local/bin/phpunit + + # Install valgrind + echo "#! /bin/bash" > valgrind + chmod ug+x valgrind + sudo mv valgrind /usr/local/bin/valgrind + + # Test + cd php/tests && /bin/bash ./test.sh && cd ../.. + pushd conformance + # make test_php_c popd } @@ -542,13 +551,10 @@ build_php_all() { build_php7.0 build_php5.5_c build_php5.6_c - # build_php7.0_c + build_php7.0_c build_php5.5_zts_c -} - -build_php_all_32() { - build_php5.5_32 - build_php5.5_c_32 + build_php5.6_zts_c + build_php7.0_zts_c } # Note: travis currently does not support testing more than one language so the diff --git a/third_party/protobuf/3.2.0/update_file_lists.sh b/third_party/protobuf/3.2.0/update_file_lists.sh index d76a1610a3d88d..9c0fbdc58660f7 100755 --- a/third_party/protobuf/3.2.0/update_file_lists.sh +++ b/third_party/protobuf/3.2.0/update_file_lists.sh @@ -135,7 +135,7 @@ for HEADER in $PUBLIC_HEADERS; do done | sort | uniq | sed "s/^/mkdir include\\\\/" >> $EXTRACT_INCLUDES_BAT for HEADER in $PUBLIC_HEADERS; do WINPATH=$(echo $HEADER | sed 's;/;\\;g') - echo "copy \${PROTOBUF_SOURCE_WIN32_PATH}\\..\\src\\$WINPATH include\\$WINPATH" >> $EXTRACT_INCLUDES_BAT + echo "copy \"\${PROTOBUF_SOURCE_WIN32_PATH}\\..\\src\\$WINPATH\" include\\$WINPATH" >> $EXTRACT_INCLUDES_BAT done ################################################################################ diff --git a/third_party/protobuf/3.2.0/util/python/BUILD b/third_party/protobuf/3.2.0/util/python/BUILD index d86a84757bf915..ea9fa641e2f04d 100644 --- a/third_party/protobuf/3.2.0/util/python/BUILD +++ b/third_party/protobuf/3.2.0/util/python/BUILD @@ -12,7 +12,6 @@ # name = "python", # path = __workspace_dir__ + "/util/python", # ) - licenses(["notice"]) filegroup( diff --git a/third_party/protobuf/README.md b/third_party/protobuf/README.md index 367d542d066f5f..159719d5e327e4 100644 --- a/third_party/protobuf/README.md +++ b/third_party/protobuf/README.md @@ -1,28 +1,37 @@ -### Updating the jar binary +# Updating protobuf -1. Go to http://search.maven.org/ -2. Search for g:"com.google.protobuf" -3. Download the "jar" link from protobuf-java and put them in `/third_party/protobuf/` -* * * -### Updating `protobuf.bzl` and the `src/` directory: +1) Fetch the desired protobuf version and copy it in a folder `new_proto` under +`third_party/protobuf`. +2) Bazel uses upstream protobuf from source, except for java, as we currently don't +build protobuf java when bootstrapping bazel. So instead we use already build jars. +So build the java proto library from source and in case you cloned an upstream version +of protobuf, remove the .git folders: +``` +cd new_proto +bazel build :protobuf_java :protobuf_java_util +cp bazel-bin/libprotobuf_java.jar . +cp bazel-bin/libprotobuf_java_util.jar . +bazel clean --expunge +rm -rf .git .gitignore .gitmodules +``` +3) Modify protobuf's `BUILD` file to not build java from source, but to use + the jars instead. To do that, in the BUILD file delete the rules listed + under `Java support`. Then, from the `third_party/protobuf//BUILD file` + copy the rules under "Modifications made by bazel" to the new BUILD file. + The java rules in there should have the same names as the ones you just deleted under "Java support". + You might need to update the names of the jars in the rules sources to the ones you just build. +4) Copy `third_party/protobuf/com_google_protobuf_java.BUILD` to the new + directory. +5) Name the `new_proto` directory according to the protobuf version number. +5) In `third_party/protobuf/BUILD` update PROTOBUF_VERSION to the name of the +directory you just created. +6) Update this file if you found the :instructions to be wrong or incomplete. -1. `git clone http://github.com/google/protobuf.git` -2. `git checkout ` (e.g. `v3.0.0` or `e8ae137`) -3. `mkdir -p third_party/protobuf//src/google` in the root of the Bazel tree. -4. `cp -R /src/google/protobuf third_party/protobuf/src/google` -5. Update the rules in `third_party/protobuf/BUILD` with the rules in the protobuf repository. +# Current protobuf version -Finally, update the rules: - -1. Add a BUILD file to `third_party/protobuf//`. Use the BUILD file - for the previous version as a template. Update the `cc_library` rules to - match the rules in the BUILD file in the protobuf repository. Also copy - `protobuf.bzl` from the protobuf repository into - `third_party/protobuf//`. -2. Modify `third_party/protobuf/BUILD` to point to the new rules. -3. Delete the old version of protobuf. - -* * * -### Updating anything else in the directory -Follow usual procedure as described on https://www.bazel.build/contributing.html +The current version of protobuf was obtained from @laszlocsomor's protobuf fork +`https://github.com/laszlocsomor/protobuf` at commit `a80186eb10e027`. Once +`https://github.com/google/protobuf/pull/2969` is merged into upstream +protobuf, we no longer need to use @laszlocsomor's fork but can directly clone +upstream.

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 z zqyIHaGzr9CT@x8^CK~j35l?6yz%}8_WSoRt3|lY!gcyDyHT8u7UNec6e+G`1n9(Z9h;cOq& z{ny14c9D(k;Lm-oQ)1SLy5~3er&wNYBYuXo?U_@9WM`__)qNMk9$6a z@k=ot@jdul+0ljdrjtAX;ENh~BuQIAhdE)>4uj>TP-v~#59oLljre-({_X#hZN{o= z0}GlJFPj~tnQgPYIvaUvCpTRy-+Q9{Lvc*>?6?yBeS_An7n3gR#BNF@8iRU7R{a!* zdW2T}G;76=A>=D0WA-Pgwbtbp2HFn6Go|Sk@u&_%&Co8}Szxq>%ur6GF z1#aVl#@`VZ_vBr!^SSbcfpx2BDrQ+5z&sAow@aw& zxZb>-v$i3NsFTgOKMhUGq<0y5VBfHh(UwLg4li&n|9*P1&mz{d6}9-Toi&Oll3D&l zIzKF@Qok()F;_2GTF)a?KY0XHK2P#14cXU=FOc9&^wf8pLUSA1cy*3gFsX>l z^a7}x^SnMR`37fKRouN?vBA2C2?|3D!1s|B0czQy=lp@%(vp0YVH3u22Gfj1N{@-t zWxQGI@AtcsL|-f{1lPrLmh(+bG0RM?Rh~Gi5DB znRSbqxSHEIn%LX8{~u~goZ9~~2?SDN^0;Xfz|ch}>lAEI$@RU(>S&2=%cN=e(U1KP z?SXY$+moJ&?_`m4zp#Y)??C*}O|Q6BF_tFNJ*_-na@m@jFNFdFKOyg6=Lpd6#|K~u z`Kb4z;wm^f9a^AQdV#dO#7CQXBt`RVW-{6Y)C{|Gvr?>Y)RKZy7hs1lfz+TF4U5Jk zyc$JuR-v*=;AUlE4aIVzfCd1(PcO6>4k|C$TyB?|S$VHJ6DV5Ng8cy@&3S^JmUmr- zZzv!Ncvy62^{{>1{X?{EdyaYlG+j|=sjW$jn!we#ko0GWqLCDCnhef9LtoOe7}eLoLNbAO5yts@}C*l;-Oj}Ic? zG)MXTyeU?3rX3cqjCP|^t0|nF^m`} zOf;;Y9Q2$h9rZFM^^qSv^AJ;v?Ko_KEbsiD?oqeQU}2fO;Oryot91iF(=F5N1qA#2 zvNYwoV~(o7>z*`YyKi&3R0!#LquXa}ZFEf2F@r;>`S{-q3Wvk$@Yz3h3(9}BOZ?wp z1OJ~R^q=rap4J~Pv{j5ROL9B&pZ1Lih@SGwk*HIk^v;;l3efRb%B1vW>*b^hxlR0- zU=OimaoX8sGrhM8%@sDf*5@|9u|<%BHdAwdN_>277n?aaNm0&ne>&ad`1ZYSA2Yn) z2MT>a2{X;E4kh?OyESs~mzxNNGV)J_Kp>0|Zy~d%Y762NpP={Uot(gP^_`sXIOd-= zFoib4Fgdn9bHDcUc2cj5aBMPDw2D^!xB;gG6OlBiNT_6>tJw!ejVSW1OusIBpxuZr!~Zc3AwvIHlg z(cRU_R9j6EEaFC4E26`FLL{>cC59@Ddn~#vgSxTQh*(cJKH^FF%`;At)2F~-O*KL? z62nmv7)Kfe9ggjX7%=1^&a)9-S27Fy*~NtKl;|P_b=)*B6@UA}wv7LF5spetygTb{g)du%kKeW35BTo_du#~zWre>c#R{2HbfD^8) zu$YIk&V3HkSs&Ms#?fB0?o;yUZ^hf{3IVT~5&<0L24ud$rgS2v3*y)8q9G@K1Jk(m zJYvUun!gR~W^-GjF-4v?TMu#TB{*sdXNIawhq^8E23Z?cj!F59JEuI#jeT2q3v$p` zh8Ze%WqANcX6}igKt?sCuPv=e67yv zT*5W>;%fRa_z8L#(g9i#f#J32{N6bO&{qKasqKorcv?A%q_g}|oZ@1*o0*d`#$`?f zd0%+!?iX<_4gBMb+7uyk%oxd8b8*J67ByP)8Iza{1?gYUcP+e-f9(C_$12`>!spPp z^cJspQQ!2(6z#Pd0fRzGb2&U@yGG+_C-R#Fym=g_KQ(C1aG0+cx#VpSy2hp(8PZkO zvJmh*+sz9a^VB@oN*5Z}+}1{`I?zhjmY&anrX8M>Aw+|d$gM~e0v+^?28;TD=wX81Uh zwuGlTS*>i}+p|2X<~N)s^Dr~K93nRri~w#H0IJZArj2_x9YHF}UpJ|pW()3OM z5g)lVwi6rP=4uB%{F2#%$*V5|cc|;)7#;MuzneefK$dP3{S&SZfA3BRY&69u;3){8d`F z^vKi#Z2@!P@rF5^_CO2(`6?fk5egbB`vMD{!7RcIyn?-`AL=7MdAtxJu|(08K0tn+ z!4{Dv#Sd5Vvx{LMbw-R^Ews=L&QST@U84y7n)Ol$S`immQk!2|wAL(mENnGV7r$zp z*T{w#VDYhd6+Cfbc^ zn|DJJFnF@p3+-);l=R6y(`hTDuk{9sj4SU7Yx|?2JTr(dw>25~L-8$p3Hbd(Z@$Qi z8LUYO6}y7>kz-}bR>-FXqFk<0o||R8z=yq42T)81k)|yBK+MQlM==yV({fg}$H&=` zJ=R6Y)WkZmVp z-F_=}MtSnh_-LlfMo_0wY*ht7#mPn%Z%>#yQS3RS>Q{aXOMg-+c!1=6e?iMEH`QG7#Lgu5(o#o15_+Eix(?K{*xQeGwBAg%F|%t6(olSm0AH z5JyQB#lHB<=EA7tE5Z6(=zn~N3Grq2cmKeP63G8ei~UP_{xEZLV6t*@va+{ea&~oc zcQW;`WctrVDre*Pe_X9`ss>J|BIp7c2?lGbaw;{_br_YPl#b6cEjCN#3Xv^>OLx|+ z{f&8+e2erkQQy_QmG=WgdkMDPU{fKK5S&>(RyVnBH`954+#WBveyw`%lf*C})p#F} zgg9U+8K@g9!OZ?sV1mS@cr%P7Zq|^=jVmg;`SDD?tncJLBv!Hni&!RF;*+x}=9Ge3 zWLR_9{>nbW)GdJY1rusXG9FTOK7Y4!s8R5urv_5AoE`5oB03zz3r*!ffRr{7>qWFP z{cd1hI{6ar^$92g9YNlF)%5`niPvyceDqJNx=r{E-t;6)6aP_*f{!fNmdG&_I4#RR zXf6_OTOG(op+v9*Z$!RWzlm-cPA4xuC7`(XfIC?@QvN?{?fH5p4&?Nb8}_7M#n@DN zxs&cYaM1TiwS>XSKvz^q?U^nZir&6&4A^1fER^<&CDyWy!W)}Y3A}z<7q5Rh&MqQP zwyg{^_U+QY-TX1B`01?Xoo;pHMjpSuf;7(sN#p(DWuNTWIM~ii;Y{yJzBwlT5pFhF zuMt4%@!631sM*azL2epzb3j=67Vkhv&e=8HL|>utC;sUnmBa2Jy5YEKoq~>*lOEAZtdO%(mZOlP0CXfuy*}YI=#| zg{6gsw#A??Bt|MKegg4_ZHY$ehm!Csq`rN{i-v`EoxQSup#;b6-1VAW4?LO9Vq-ha z&GMb=^1b~rPYN5oH_AxlX_kP6<=ZqD!TFJk=k$7jh~V|UHxe)kBZI+vEDNsFn0Ai{ndY!Fnwd@nYjKr{WW|AVi{=pf|Y;PASge!`?ec0 z^2YbIKO*G678CgAj+yZOK!xbyE;D>gM{uAd-+Zh9hGUdMkr@@Uviyl0r(=mYUoXpwdP zXF{9O%o5sDBBQ159FYmpiyjURT=ZT&(9MW;IfFe13P{5T@N_nK91P96syn=Q1CKtA zgdo_iE8+wx5Qh^Zcyii6`36D(T?xS*{B-9Tn;blfVYKjvFwzz3}rDnN@y`L~JwbuTA&!HJMcc4EiNlX(zbFY8Bd_!9UFCI^JBl9PvfFx=p1_ zwEcBus}!4jML(4sf1GT)oIU0-pq=O#uE=y^#HhsfEc{ddd*5I-4NnXXhefWVd5C9F z>5GznQ(mvBlz-`E?H3l4%C8okkk6vf83fR{5=$jzgj%;VRYD92RDaEBLirrfA{L}v z-*#|;BzfP`!&E3WO+vu}IHgkv81GBh68_&|(L*io;VjtBb4t&^x8KTxtV1E6b~El; z_72GmvU~)W;FhZqiZOYFc8a65y(f`*irW5exQI^cM6x44hZbQtD{DLJwEHIfZ=0ok zH>@^vu)tw2@Tjr2U*5s%O36*f4)CnMQ7YP3Rs)Pvye`Xnp?o;~N z+&?|M7zM&NQvW;c6+rk3;&$r6>QMq;Dno0N>^C&1-g!9;l)@{=dr+xa!Qv!6w(9WK8EhR&pbnmHiV9U2nP$2#1HrlsS)6j;Vw9-bBtV($kp z#aBIw`h})Mu{k48xnlL3CjL>{mYIMHi;|ne4=9T^S8<3MplDEgXwiKzQUjVI=%-7N zbC(^z%&lW=yK`vFYV$IZ{0Q_9`7F0+bBN6W%jE%8cr;sa=M$#FZd}a)kt>%a1~4Kw zgNCd?(s_hqFjsL9%gLm~>)mz6JDL6)>^P^z6DzJXW$Hxg@HI0xBU;L3GFYrk&=1ze z=x{X?T25s$SYcYU2CvIn)@1r)7_Hu;*)O<2JDt68ar)j95qyv27upKPM+RB6%~lkkgdgZ`IyPs{&F z6cFpdrsEV5FL%!{3EVHDV)lva4ts=4m6z5Rq%j=*ArKv+axOvtJ%*1Y@mn{>W zv6q#yl^h*<&RTQL-lZkZxRe;k3#`YKN^J*!;_OR{WS4kqu9^*J7$wMSvKa&gQ*hI7g}igtZ-x5R4OSrWW)JlRy3fRW#}hi|vB!k+ z^&6}}>dg=83)Z%s8TBiC7z?%heQ?gae)_4me&08w;F0FkvD$n)GsWtF7c9?RUbfA4RviJ4w3 z{G!3(7;y@jdKJQTvFcfLHan`f-<8!@Q3_B^Mt)t0m=k%2^zJtSz-o;{cc@-OyPof9 zJY~#qrNGi*tXxUnL+=iYA<~7d`wt);y$4ph*Pkd+^^X4DiPp4ml$*h zMH@*QHHxBv5=WIStgfIg=8mqyupnM6qc^frL~u30tvf)bO+h$Pb-?lzJ=SE%A5`j% z3U)xVc3@+VKDTFoPd|$>x9@k)&xp*lM|w}nh{0r%;*FCLqvc%YjiD8@>YV3Iz!fbP zFR)eolBi?~O1nE+9sK%jEfg4PcaHz&ZL87U(Ps7#DUIe-wbm1VaO|^jZr`0-NLp{o z1+mkP@W?nhkxl7>rvCR{4uR;b}5q+ zIO^zUPbFwr=$9#Iic+tN6USAf@=3dfH-7Dt{p^Eri@>_$RlMNA(VYtA?#_nYdZg44 zO^ROca@SFymS}ayzU9k7@^U zx3x%O>dI9iXp946q}~Q-o2Fk}k2&}K<_@=1WgilLy_RHEKz`T$){Ok(@Tex^T?qH zv4{-0u5=brln?bQnF=fv8R|0iHg?H>Yx^1M{LBB};6Un}&?jB=OJj1A%cTanT@HO8gmy|P(iR_8 zEmV&^QkF$+DGHM%hISIIJ7RI*>ezdXti?T?#^|Hrw<&QNRg-I7@43)%fJ>Eq%RLN0bjgb;kG|~a z2>P=#KBIu>(k!+$c(!XXn8(;8w>8P$#sXORBuwz1rPkL;XX?%_v9Shzm1?mgr_jHAk%CqSEbNU(a_?k&Qs z(`%^cPNG;hwROLrQscwH(OS4zKABu#kg6<+INg&$wM3kHY$ml|{Yv3#ulJ zjXTJ&ZCg|^4Z7;!b#>9z8sgg?aEyjOjBH$C`5Nc)C1QSS0C9b6)|0*uz6 z$cjVGHO&Y~oREKM>=;8A*SfF%=pI)b73xliJ*l_TR?*<<(^O76)@Oem5@$`dC9m4qPrTd7HDAjmrjBu0H zpD5~vwPz7o2W3Gr-v8v|2O5VZo13K`}r5(PL?0 zxUvZo&_&+tALQ6}MQ#gZ%k8$ndCdX4Ue3E*^$h{&<@EUUlaRZg^a^Kn?ZCJF)eaCr zd*>88;&wXl15bM~JIJ(>vdR=FTF4!0#vPQFl@rKer&?G!(853P(ynh(l25YaTp)CXK)TKJbRnw2!8KF@Dk7G@ zD|TbvUYMc=Z@!-~afGckBJM52_VHsjdSu$<2Sl9AfZ-uWybCuUcn^uWkVuKo&~p0x zz@DS7W?WM9VNoz;8No&jgQ_MUQ9}% zSC3eC5nU?J!=|z=#3)J(WjoTD=9wJ>(7e{{&LpBHp}ygrJl$rh(y|563HtoZFbqfh zLBUG)n5~l!e&tbyk7}k*#GafZIGAg0xl&Y_B2~rF3T9@13dQ?rVgT`+1dXS2)w-hJ zL*rpxjcrd-PeFC#Aw8%3CCsp4Cdc1R0fO3;%oH%-We-DoS_=(L zE0Z#K$v4ylKNh9)hO7>PkUiO!0+WPGq8`%PwYPvbPwW=aq8I*}tEj|BKFy@K1N!@Q z4O9WI5GdRpmzJ@90s}awYdw;B+oar~riX^)Iw;Xbwv>dD@Tj>q}(T??i(7gYko-SydT5L{nZQH9LN0{5QkAK^* zrRO%jzZ-wb@a+-zdBvb?!8Oj4#KGbgc(O#5fojES&R4A@UmiZi6{z{5t(ZH9gN?%F zJ`x-#l){xHD70sw?PYy#n_YzZr&5@uuuM;z;YrM|3C5-1O~pB0e{9B1ASqe>5Nk)K z^B0F5KI5@;)D7KHWaZiDoXAw!rIt@$^*%)oToS$I#vSSBtfE_HAx2pw*%?&i5@3~z zhfOQkk{$JbC7jQ%cfYRGx5M|nDr zB|M*I_Of)Xpe6W6Qv+5zqndC}O@ETRS$Q_FHXM(5{R$EUFb{q3h8ai2OYx4W@nEpYqL zDi(a>dCJvU->Sz@X1)&>wnBy(9gE<~2i|55(@7 zG(K{qvR1xrf6)q}5=o6lGeHZx-$#l0RY%VapH{ymyn&wcltn|t-FOJ7js%XNX!y~@ zS0B*%z$wArFY;-_q9*u820h`aYM>~m6;pF+n2WeYt6v2xO8ZX=!`=*`h-mMXPD(KgCzW_oMj>6IDmc7F5foC)WX`wg@VZh#Q`gH#95~lWSn{phNSjAcy2q z`6-MvVB2wu;Wg4kkHIx)RKu%C@xsgcOah*q90f-|&d}iH3Q**W8WW`RKb>CySmzkI zo*GG0tO?3#Nt4uR@r|;QbY}RI+8ReRhwV6XGvJPt)v`^jQ8}m@G{+UH0koQwZf?c2 zqtPt1pP2#0(Jt{SnJ6kD+>Bkn4cmDCD*Fxm5M$FO6MsrK?x6ZihK zjHP$^+RtM1sb6))!K2REUUQ(2Z}~W z;0i+N1nFW~>7>1=t%_@A&n|PJVA}Lxvq&v%V!S>0`%j+suuh9pgz09K>JBb15e~YV z&d*CY8)uv5=JYyOCm2F0Ml0`pCj3-FouB)#)071T&-%^yRGvojU98<-!JOJmHlvn*?1-ukxT4qZ?HY)4Dj?J*&!4=&b^R^@yj@?W@-9R#G-AB`cs(jM zqBn>ojC9mY!y^yR+N@#@J8R}zdP*zwrO)g>b&5y~t@KKdpn_Y`Bt(epj=_^;VVjcp z1cSXNk_2rm!JCyhy-g$N{3(C6a0RQJ$ZFf5IqZ>Rww=@)UHMtfo!oH(*;WH!7O zJ7j(}Xcc(cpFHS(`Up;!QlE`17cZxIOxc~TGS#{@)Ya|(*3&J1qy3GGc-B+_mA8Sv z))GfY;^XDx;_Bay1TfH}qYCj$A2KDXz1TIp#9Uo&sF!O3lBc~VvbA&;=L=npICAk_ z7(YTCQ%hxp+mvEOFsV=3!0U*ENwo^lDB@3WNVbhkSZj#m3kZqi0^rp+wAnq!u)2Ja z3@Ky$c$cR#z(hj!0aX{s4xQX_N7zm+Rp$+mIK=+CytRdEvX)-4Y;pw0-RZkWxK8j3 zPZ|En1tZbpfx0chywkiC=PU?n&OvEqcRnB8g4V3&9;1PD_`73FVd=gL7XM}pK13I- zn1UPLewQtnWa!q%Ix$!ppA6%=cjJq+ay9<@oNBg8I*XCDx&BPsqm$&Df9D>&>*hZo zSb9Tq*iDqa+hF}`pGM8wFSuh}@HGyu?jZHz5->}EsTi@%@6~3tPtTKU52cp6w`%xS zvG>-r3dJ+z)^HffgUcYK{05O-g-#C*VP~ZJSa^4G@^^AB2A2IyTmyY!m#|;~WiVe3 z)hEDU$i7kVZ^XS-+`CKpyGxgCde$VjUIpcM|o0667ITPyeaPK@9ds%GcQP7%w{e zg=9TMAXyO6g&;6m#mFNa(y}0H4@Dh=mzD!U(a`}lUItKvGQ|Q%Gn>aB*w4bByJBp^5+;q|;tQue+r>)^b5YIGP2Z zbF?8=X=JeFK+WpHYj%PtE6U_?`cM;!-~htlKj_}x9Kp?yAlh(!&LOL$!$YdxngXA> z=?jNT!gKSoKKYshj&|p-?v$TFxaS7CQh^ng@1f4o#0}$xnk>II#2IhICa9t-4Pq(# zGNnOOL`75-O;}QRN9;FfX>B63rLm%q-IKH>u*^I+hqK%nE!zxQ=6?<)niJ1w_B^WMf9F(+9n1Ah%*!nf4hVXp zWT_7!9HOU?oE=?cDiRSFB{$kThw(`!gHlpjSd7escflB42k8-l3zejOg9Te7c%p+6 zI4v}S+anwpzFuEnXZ+}he)!!-{6X^v4*w}<5&y}rC&cg#R;2)k?10D^2q$hNB98<0 zRfpNaEkGjBE!}{~b3Pkl7A3b_%2# z?ONPGp%d+Z0;YlHyE=O4qP@Yky9d>_e?`+;2$1J8Ew z8ldz^g?3jat4yfm!FNI4AbN?TuKq}zd>GBlG~rj)M0(Wmf=u;{M2I~t#@au&2WO(> zx@!xHTtDE)VXxG8KeR;Q-h7iyltIQ|yv2EeGnT(k7J2+UF;q{&7t~V`$u>oyMYam% zxvNemVYRj{D~_qc%8`7k1GYIH;<}`AyaW01x};i>1N;$Q#RMm8`_KNr8I*XhWT+Sv zvg)OBPfl|FJd0;jS)~oIKYb_bMSsM z1ovW!8Oaqj@Q$}#VLv}NmAP3`a#z$X0C|Lplo%ojqK2>2hYJ=?M-k`bbCViVnjD&m zS6&^yL9SwYSvtrmQocbw$*V)oANzh38FIc(m6=i9{=Zg5-(@FUbV<8;J$GvKC4>2tv{y1JE=>GRMEp)d#Rmc6 z5S;%ii6W!(8}Kkb08^y2SDGp&ZSm1##G8kS*BOz~RLB@gB((pMHgkk}>UUCXaQ+kQ z@5wUnJ_xKmh*<$h{yi}MpC}LA5dJ-%fM<)grHmF}M$5|T-^6RM@fVV(XQs1Dva?IG z@z-;fb35eL;3Vz=*v65pwQb^4x`tx!@^%$CGN_9$Yq<-blVpkLtg&KBQ^ln*X47j_C+euvKmkFs#GY9*R>lXG=pSuD=nEV1Wj8HI3}|D{ zBza;xo%^KX3qxGV1!$!f*<9g!$j#_(j@d=HlX%v^nWUO0rUt{VdmV%Iag`H=n7y18 zXHm5G;c$h#o!wV?36VLHRYqdM4dP8H;pk#g`Nj=f#x!kORXvlIxS}fRYS=evy2k5o zC)~N|(+o;=sw1|3iQA_cn6KF;K`zyCG*X+^N#L?vK_pr-<>@wK3ulk`Sl@R}dgsJZ z%QosDG3aPj>0CcoE(<$pD-ijLfZMLc6>rz@R=>A0gd5jM`-qCnG;hvN$r8Ta0hN~mNHDTMS zFk5jurQ4~+SV-8BNI3S$21Mv$EN(kO^-*Fhn==<6NNUO(%u~k)JT6#QeoC3!)QmRk zVprqahKWHQAD^CFwB~0PB>1*sTWh~r2#CS{>sQSQA<(e~GP=3~EYAta3uNSuyZ5E# z><=f}JyXC=t!!d`X#80AHs)F;XYN+qP}Hx^Vly_qp-LeIw33H}1z7v0{E0 zE9b}@IiCDIe!@R=e(r_~H^x`!-gT<)O;JTKssnd(!QnOBd63Y>SL8-6xp#oE=}80b zu~jH$f~&C0bgBbvcvZ+V^jAy=EucY*&|P)q)yLJ^1)Jw^=f(Nsu}^*4;_%|H9y2d< z)eCdB<9@yi*yb19XP$EPYyTeIOA?7r&VxSFWrSeR)Bf@w7^5BDYf6Q}IZsgu1uo%G zg<1ZBYUKX}m={80pNJK>*TgOL{O+3W1sZMPZoQi^HR(hv=LLp z&d>s1E%>1dZjA9GRUMoo|3~Vx3~n;=02ePH!Y{lui|Jh!qjL>jD?A{|tlZZJUO$q;0TC3xWS%Q$zq=Wqa1}=tFGS zj5x?I0rCl46=M3ppdLx;Bhf_?dNH!@z~)hDi;zy3I8RPp@*Yw432Jll>y`=XGrBh$ z#c-S{gw>fU0GGyx*PFyHcjhRnxabagU?2F5myrXjMgt46))SOdG<%fY zb+{oioD8X2$uX2CbDE6wlHiDLp_@$_MgNF>g)nssAwZY)G53l&P4|q@vR?CU!)7}U z>%(1q927OK7f{-iJC*GJ#h|C4m`ZXANeN<8hw?ab=WqF;1gT|gpKSxd^_%l0mOZ*k zjVhL(l=5X5RU;c=KqfzW1p|&9V;LjAJiU~+aoeAmt*3s2q|(y^{RPMPwXJAUrqaX9FrtVmPJT2rw}`VryAc`Zp}4jSI46;;1r= zF*3J0VHuJ!{zvBFGUjJbDkoad4OwY&^7B8mj$mWCEHuH4KS8KK zY?6$W>KiqwvZ5AKw~9n7)IYqWF9@P6PS!ZTbg?XfY#}WetT)3FYcY>R3mZySmafz* zHgK*OHkX9LUHel}P(+C__Qg~#ooB7>o1{yhOe$)9zf$@dy0rHD)meHUMKDgHQ-?(Z zq2zW)WFIwokkX4S&b>&(L@=|T8YxU&J36x;87XY0mPF3rQ)Hi2LpovkY;Y;1zEP%q zS;OUG4_C>pVQe&dxvWt{Jgivh8Tsl@^pgM9RwpJo1wOMoz0dUEs2vo zAHHjYC>OFV=?ses=XvRURu4?~n*47p)NsRf8Zwho!{Aq7n<@M71arQf?|GR)k$MQaj-k5|b zV{VrQWK%QgPxbd9e}Dd7eA4Z;U;;uGsP%_z>8t zU>FZi(`?j5JF$X6=SVa!jf}AJUl@o(N}_h61V#n?&4q|f<4;l&;(A)9!6&|I83vj% z>V~CXK_p-;K6?>yc|ogv%3yc=&)&l`ZRqzDx7&}?fp(?WQPD6&wn(y36*DB<=ZL^B zvK!B0_>-KS!W}8mQjPRj^V`8gW9!h`*|v(j_rj$oqh$?#P>?Nqc01uF^~MXQ7um z9RiFo*FL66SIr!m>@8?k^<4vr-ioMytcli7;t}RqJ0|2OSHHrhy)5avhFz9WhLaR& z^!P_nR<=YY{dGatZk5G!8=X-+w0#SO+Qdd*E$CFak#l*0c3e2@xo{djL?*(zDR~8V zPhA&xv@09G3F7=`^+xwRz=iR5vH1t1I@&EU6g?~lY|4De%g!IBObNTLBGb&tK zO*Yo7+gENjl&0ReM(+E zMKQnN=&L{Yoq$&e0!3;=`By5b?J<|U4NL0xVk%xRcYSF|vR3x=z`o=2(DlvT{j&Yi zZKnq~c$@jDAwNI}a%W@FtsLDmyd&|@Le*WdepOPaS8ccFc4z(%KIWfadG505_!1Ak^B)T7D@6d| z;*U^IkYWNuEhYCzulWaQdIEZX)Iy~+sUyP5!dMnmDht9ui)5Kh+9{kQsw2%JB^L;* zJKQ%$_4ITEy&?c%d6D+viI-nh!m*kKnnZ&_y68MjvS}ELbWvG~X&TE!kwxq=n}u3w zqf(I=S|@q(8Zz^KmsJNO3L!|y)1*MUFN?ECf-vppn6dAsIi?&b^H{d^FX<2;*Fxrm zaME{f!!sFb1GS#GHJieMvQ>MsG$qQ()Po*KEs{6}B^w9cEVlVT)+pKP)&r8W;5)v9 zKO6B~Ui^kb``B5vL-#eS!FRI;nmGk)m_NIDp}oQ$72CDS@?ijV+s5- z#%B^`#Q_gg1AvhSkE`0uU_4}U3v+=u_{;e~G9%DjYhD9vdbq~=6cj7+W@sBO9;Rt2 zms6|!%rJAD2v-4le(-0t50iT^>>~s?oA9^>}(d`IEOKl7ha#j2P_QIJVYy zTqo`MCvP_EU>7vVZYZ0&vpn4A;9}C>5sB!9ufVuVWeeDi#Y--mb3bpqDHWPj6eW7J z$rHg+V>1q87;GfD=O@gvXJ$ns4JI?&J`Ik3D7$^+ z@<=ZO$SLL7aM)39p>?@e9geca{CO=pc@?dZpXL!MY8JfYreI^mk-$o*BJ-XNX*$s> z9E=%8N?-{6qKPvn11nZWmQ&DzUs!IA|{qt@26{(hRH+{xSA1w{#- zamFviVSOU^&ix|#kk4(>yO~QCGNj%!<8sFK8RTBi(#$OuUqpv3OG&t8fl@J`HTw`$Wz% zC0JB&D@udCLzHsc6fac6LPfHoOOMUJgM@P00g}0~YrC?MA40Yxwu>Gz(CgZf=t4Pw z2BNaqr*R^>UmQ-7XK6e}FV6XOvwJrroe#2Xp_BHd>pEIXoof^1Ia69TWIXTRi3|^i zTf4LqM~X`J)gO{Z6Vg)jPe zMZ3U@#LC9COGbcJZzRm;5}Y6>Gp3AiEKftF*_q~&Nym)IGS%q^GcONrbSR8?)%> zGjYj?vz*6oD{>XjJ4DINcIo_({miYN^L{NCvn%++xsue4x|1e#M!eshFWVwUerFKn ze7*-P@}($IK*1-a!Nb>0KQYo%2&lQ*-I5L#^IoLKf-OZ^I7NXSAI%L``WrF$&uH#>1FH(U;5?mPS^KIkCU+grq=@74s4y=36glS8U$@wlC8roTX-c%gKe{g zx=NM&*-7C4R7#Bz{oITHidd~04DNHqRX`w zU2Oo4@>V>TGkcVwShAR;)`VjtZzgIn(p2v z?U2a#!!^mQ#N>HgY(=;Ox+^9{X;!!R0jt`zi;KSgSXb1QA;mk4Qw%)vbhq^|?lDeg zC(F?zF*3x_D__0zhAD`<9sc?8 z{Nr0|RQ~Ox2V_Uo2MNv*J5kYu|AQltczJT_HqD8euJ0FaDV$!g$6O$)KLURqPH;Jn zAo};Rqp}0a$P}j+N}aw42|yhaPgL_2X`DX*!Hqh*uC6?dHWB%j`j>E!BmFVO3nv3L zZt9D6D!44GU%CAQMI%x!IikLT?3`lRV`^>_rx3J?#}>y}Z8(l4&Fj?%%JMnsWc!bt z-|skDFGQt}+$1WrwRlc=e?2Y)T56xQ)hdndO!0A%SwC=&Rl4tH%^1kN808N!BD}&y z@djz7Hv5XE_xm-6^(I-9bB!X(IM5!h;Iw*VC%^-})~QP;OQzcA;Z_^lEg1A|Uzy6e z(&-D{B@R$6TjK}8eeOP#=ARmx3BlyC!j+EgJCR^U7Mmp}0)mUo5lE^wnXj}_; zNEWy`m#O%p1zw5VlJ!J+@A7(B(SbL6de_ACWFmt~7-Mi9(k90hY1IiF=JdbtQ&=X` zh1xGJddXtLu@t-@`QY9=U%M^w*LEA|S2zC6K_DnW892DBN$*9mp?H;xIu zXmT1-HBE!OSN^OPAbKt!p*rAwp6!92zu0`TY`^mrVm~Bk=8rmo%uW-amH> z#U0iIGqrwR#eQnN-^8ZZ>UTd;`78EMCO1p=PvA>mcP}o-KHQ@$eEKE_1AiTUfqE8% zryK1aO_=nT)G~O%?j6(*7nmnM@zdGi9seEv8*;3Eb&>Pg*&Te5eGahWgxO(mVAqDb ztAf{rVb`)kuYa)dLGfPsiCVvMn{sR5_Lr&XMgQ7O-A{i&32l&q>eK*g(5G6dwhF#{ zIB^FYVmIBKV$_^QEaD%tTY$C=2VK+OZ>4yjbPtN7KfTBd_Dub%3VkU^Jw>Da#6(qX zaCN6x*};eA3cYHy@~1Kv8@^S0sLVU*_D^~4+j0K9dO%P&K;yi^rLfS1ZN~)d*O|#3 zqZRUg6H>+}7N2cceEnm&ohxF|8xX?GGF^x{VRV#deV z*tdmOfB3Rqgm2SrBinuy07h2*vC1qMJ9Y1B(mo+Tv1zI_-RieI(|d{aOl+LI(+&G% z(Yx&RXL8rwb%SN~8{N?|hOhY8Q3rIn9eKHThr)%GllzX>#vi(UOlZ%+`SLys)#;KJ zZki5B!R+h^&gi|35szy#-oHA^5QT$_LBkybng?8m(@p)0&EDazLl)blO(<v}2% z(#)HR5nTOn*kXGF=d>O5v8Ve&jF*)D(#wYR=frJD^s0lWl(*X< zU4XtVtZpF#L-FJJaf;o4C(UnzL`Tz;?dxWWLPNKV7yRPH46TxWhC##ESFG zdd5HGcCj%!2BwnSe^$#SndyW%scxsj%>N<#lA*)HIMzm+w9P)42->9>#U*!>f?Vei z9OkqLI?7?rCpZj$>goNJKGU-=q&uC4#Z?OFsTd;X1t0Q;X-pY?_rUk{*_<0};PdVJ z<(-^!vunm3ga43n;MCaX^+mT8ZPe%Jm3GaLQ=?SH`Q@SKk1 zuK(1HBL1JcQU9fd)`a#_QBV8!eP|!EM;0QOB@8tC&5##pwl47d7!(qgF#bnSb1-3> zvJj1DO5){g3n>gx9Ps-o&Yv)=r=S4wxj z*PEMZGS?)?Q}IzK_3D={tWr<0CWDWB#iC z^x5L|!TlwS`dzly!}8IB4}ajh_?T0+@5}n3SW@Qe!}X0*`&)fB(6C z`Z&6pmR7bZO4p{Nd4>H7MIs_Mmk=wATqthvdbYQA?^sEJd`E#|4*v!zvBgy!yy887 zuKQl*m6bWtq|;$LsWr@_HT)2KTwYC= ztyzeYLG;1mvqGc}Cw&j`CORZ(uu-u70f({``EIM^T_vn?i){KNYGs){$*Se-abDnD z!&c~su=nsa>(R2mwMMh{u0`mxLTp*pUg#Vfk9%*ZOE4TvZAmNZx-4>#IYo1ooP0k2 zWYPj$B+c3Q*geW54y>26If&O3Nu6cDILK0hs&*XZ)D~(v%{ent2T=&o+yLT2@mqXlm8eVv@y_IM#LZCu_S2=6=utgU_Kk~4{cNaFVu%lm14T|w1epn(*brBfpw z%oct*7KG?~dAyIT&$UQtOvEg5)T~Z@48P9`SAL7gb;-y}V}+}mbFNQo%StFK?ipJ! zl5yFyc)TEo)>1uj*ABLtKXme8ak_qbTv=$YBNCSKO5a|fqhB@fUZBNR(&jNJZkWPL z-c=sq0=J4rA|QRzjKcWVcyrPCXF(P%r>t6Uku}TyR^6=v5!Qk+;)t?MUpUQ0dO9+_ z{1Ti=QgI4%{&Cc!;}*46GUprGO4kTSJeYzn%ir-CEN znzeb}rUAxkdoz`@*sUyA7;>dA<9FZGI9khRNA_b03Gu>1TvL5@Cge`Hv ztk{X6rcoY~Me7YaAfuz^VHQoQ)|Xor^NG-g)K;XhNa2}{?K0eUQV*3;?i zUo=hisLNx#nGoU!lg%Aq;zS} zxXNV;#;A1F4j6TpN40d9{o*ULz3%g*n>NW(uVZ}`^xAY2uymIvz;rE5i0$?cw4`e} zN_tBt$kr+kTIWCD%8Wq9JAp5hV&Ko_30&G)q!Q?~XDcVvESB#ewo4=ONhTubwHQEwE6+x8kG0nbr5{OOw$uQ>y4`D5G-)*>OyL1_{T z&(G6cnz_t)RH-3z+q_xlR|Nb%6grtOsddzIo*nvPK}OlF z_WKCqI8=+mU<*?%Nqy$>tt(y^Yq)H13s?1-PDcH=m3^~>1Fj+N6S+?^0(1LNttoMg z+jbdxwIiG=CHM`~mE>MDZAJZeO(H`U;-0G=qk)Atk)0&YcZLZNZf>NI?P3t^*8bJm zEN;4dZ7<>Ln{AI=9IX#+i5CS!Jah~8lNhXQ@3OhnynAfF{MaMU+&$sRulbIyFzInz zpR4uQl-3w-I;?MC=7>vDXHbZ@u${ci%^lqNbA?Zd;b+FoLefBpqd;rk*Yl6noV|R_ z$B>dox}PGs`r;2SvG%sCd!$idVtlrAG7mP6FE7!(-ksp+vEis=N$1+<$f3aDn5Wbs zL;Tvux&=A(CmE0ndG|zowGa>*xvfl0q!ZlBB(@&$Q+W)3_Rk!T$`wg z*rDtjhrR{VJ=x_RD8_!NrwM#-*=e{Pw|;eix-qsgb>wQ7u~*%QLD++@t$xV3JZr{$ zPQ8R_M(wDwF5_JAN6$^$^f!xhgS%!vHXdrkz)PO#6E1#x1xDEeBsd^>r4PAddCZyl zRqv`t0qBUn8>0@G|LDmSJZUsa<$e`@RX3?H#(1k!#O`#B>0VLZWeWHn0c6UalihPv zsixU2;(Z(59v;+>%APX^hsTj_0H@@&%huHdntdL>(oO_t4k+OC#P+tKQ>CuPdEjlJ zx*^{AKRESd;WK#jH0Vj%HNURsUKjABw_4IDqBF{X5v!PSd ztgY5cfz~I?O7r0zc*4()UyLXid&nto3tltdWUDV3Cr#c!r+X$be--Ba+PCb9#C%1< zJ*3tc;3>gUuf_Z&jQo{Y{S13Km=pJ$p>x&KOVAxe=oPYBgLJ`qY+7^h*(yc1GZb>i z>-a@&3fLJjy9IXiPAXflI=tuV4riYPZ41G<88i%Zi2X3D^$wlBGPx0iLD&*TfkhP2 zd)tfQ{O)>{wK9bbVrd!I+*HD$$o9r7q8xe3n0`jS|FTGbh`!`d1k{2m zn{alkzX=teeDg%DS|Kw_H;1lh4Sp38Pa)dgDnjf_3Eyr&+>C(J1bR@rqEH3SOH(+_ zc^;dN5_)K@QZ%O2AmFnUq|KV}8SmLN8z~~$WkaXwH`EX2lB}|LOxB901WoC;;kax#Inbl)wjQaDP*sA4l(t&C9>S}EUMq8?R z?bvqj+O9eA(4uhi6D>_)A?T9VZ-nMkE68`UxC&Z{?s#LEUQdu>Kv|ZY`m0^;pZR0&r%$%l6DI7Ci)$W= zUQpRjAGgf3&rTk=bRS!w=nY?XIsR-SXLKp#0=kf6ov8 zd(-Hhd^?!T{^Gpw8t${{8=g=z`t_tEh^Csa-MA}Fpbk*AyICUBWg=gqhbSxyx2iQ7 zsjHBO(T&6FDIdyTRj`_7@~aQdeQYLq7w(I!2lX;u8;S3ZH$!LkVs_xn$oFynI^Xa+ z5Ofo(@7L^b+!0UK4kHzxSA_RG7`*MubgIgOn?~=hl@(sZ@pFE!2 zbaWqY>~*WEY944mSK2;8CzvLa(A#F&0Fk;kW-B9+*I4(88MZIMod-->it90{Y03kU zrXcDk-}wGyO;H@t`h>R6sv~6)j_<(tc|ow+VGnxy*(|VyfA7u@!_WnnI~_P~gkd9) zK#mVTCe#`73E%LE{h_z}k}p4^o`%Wtc7G?Xl-Jz@^iRJbZ-;#Z|1SZG_^+|~e{X9_ z^FQ?)KtQ0UKhPTCtTt(G#xcd)LQ#P9CkwX=*{YeUiZ!>ATnH*oqX{fD&ldPI6^C><@im!LcclEQZDw<=_Y7_~oka$bzPn z!j4MkHt(ZxEfW%7r{xV%_kGkJCtOpuR-Ndkym)jY+9^k}@su`fP@ClWEtQPYukPIT z^t|sC>u!y)Og;Oi8SVrV%EV1hZ5S9>F4^~U3d2x)fl|>@zf^l{T%uBjXf`)=-hGT{ z_V5J!f7bQNfrRht@2VC3r6v9M>q_-Mt*gR6ysiH&Evov9IYnkf;9V$ObA>EK&t=hp zG6C(9*qU7-LZGTbp#%jf4Hdr`w$|0@sK*8I1(hejd;P%&#n=%=kpxAG1mAJMneAlC zW90jN_k{i1g@p0E70C$h0dXC%TC7#fd{bR42t06o{+=$c+u~3B>^UWI4h$UAnO?XI zGt)vt+iXXF**w1gQ*8-P-Wsb|yDV*I%H{Ui(K7*UC2gY&d=@MlcBf=Z(&8uX-VPsi z+~GEuK{{kPLrl?378lI&8w7M9^oG=gQS7b9naa?P`saz^AptH&QPR<^?MW(t+y?8awVCI>4(>mX;G)!BAgyegk zykCVf+0r2V(W05&iLQlPt4VSN%lZ|Bd}@C5fN>M56w;fuF{IhN30DcdX-P#D)swo1fKdWRDv3H*o3%&aF`=&fF{|Becis!K7@UclPXv4 z6n7JqBM|LoFUqlIMbJgmSk6DOQKurRIruj&p8g|6i{k$(HvZk{t5VZd#x_Cm*(Nbg zxQf>|r!Gn&8fFV*%lnOwVNI%l0BK_#o9-C5Mq<~ZouX^%Hup^Ke)5Xk`6x9JnVZFh zOZP|k12g($i{_0<>hzHa!2is1!gJ#Evb5v-0jUqRp$Kz;jA<5^V9`Rbw*X-))k;bn znHeaGiFi0vKw78G7qFobS4*XzBmGL`?}F)oG6)dv$AxsmOk`a+e2&lKf^)+-c3wDY zF2h0{QPu5Io1>9tb~jmR)~RTJsjbg*EL(f8wpxR^cih<1$}_z(#_qjj zWY~zekFWBMHpuf$fFH80Q#*(@TFbCp+Jy;A!b@q(Mp5HzD{t@Y7OXEHZZS>x216!p z+iF@3x4m_JDVBGxK^BA>I4ro{HijrBYrznbR?CtYhHf9bxx7*VETs6WDo4>SEf1~r zz_i6UkIU4TteIMe?+43dHMA9Tqs)p9w0;gA6&Gle^)Z)azZQ@3!khBbp3==g#v^X@ z7^HH6CK7Iykj{)R@tI(Pv0gWq7?807-bF^sQ_c?`A7O->*yp|#Z?VvT<%=nkp;-rN zerr@TC#$NPU~JRzsP(8e1Y26J#amqzi`7Cr6;vy>Nl`FGR=?5CD|Mann`!WqmL2+1 zBO_92db&nILpWT})I<`L?;;JO=nS{|Q@4&YEXwBW(E~a&VpiIdaFvqou95D7MUFKL z4OODqrbxk#{B)PR4u^r_PM-?PUC4o!=p6JuPMXzIZqx#^8*1?bt@ zmY+{c1niqq`QJGin%8F)ACH({+6*c)mfenz7j&;x2D0-tEyoi)ng0I2DT}@((((SD z6qK#O7f@_>NrAMWFL$gi>fa5jeSk;_3g*e4XBJ}&ig2FLKz;@LpXiuma<1(KRM%?w z59t%N&%@`5d-ss-7{k%OsNZfVx~9vY(jeaj*%Z2_sm~QmdT*E{K)U9KaX+d6P*XEX-2|n4M2px{S0zPLoK)PAL zLUkGem!Fg8G1?MngB^|SFNBx*)4Nu@Bn+ahpQc6-j1bI4Q^F&yI2YUPFTIUS@Cb8> zJ|i*l8k7gYlx-yBnC=|DVc*`l6Kg|`W!r#Eriqvf0eZ*5!><4XQgSp49XQ@MC}8o) z*?$Bq5#)ReN~9bTiYN31Yv$i047p1R_JZgc?f!;o$Y)yW{JZ5j&isv2Olzn|hENh= z1<}wm&fgK&Nuz%RujGM*+9TsQ)5xZzQJ|x5R=- zwKgg!Nl+{n#en3M3nl^C1fZ;gZ?oMEuh(mecN5%O{TsgBsTVJ>5DM<;HEcGWS!d?^ z_5KCi`x6f5lFNN>mvkVUeji@R6J3YY-=JH|iiv~mtk*bM)l4H>f??4#TwbAU z1gR{G^fMZQdB?0%o>!{Seyqn)-QlX^iX(Bo#%!TDu)u)FD)jNGluVp8Cm7fPk1F_y zu@g-X&Bs(?<7f+lyN-Ixjw(bBPZn8 z;~R8qT0SGw^tIgHD2vftK6Mtb=5GxrZ3hxYri^_cL(L;qcrTK==Iy;Sbq({R*mS3w zNi?C5Wn)hxm>~#sQy^gW&C2h02`?cIAot)=tkbQX=f{+uYziQ`3^ytZRc7g6v209% zlYn-(T9!?ni9xSeYD3X|7fG^kDIp4Pr58(r(_^%r=3{~3{%(4OIkEyoz`!^;Pc2x` z)6PN;!~WhUawMbE?(}y-en8t1>Ki1IBHM0$jUK{Ic0)HozS-k*0SM?G-^SjOHOqX( z9r0$n_sG6NQjzr-x#VbVnW3pG%WS5%@sA)40r7IK4onR&sZmzrCj0*TGAq}R6zQ+{ zb@V@qU;iU6QrX1$f0sW+$y@R`su&@@^c@qIbkb`|jfu2dWy0ryq6_Jqqji<;#*a4mpMdcC>-9bOPxzyQ zc>DYG{nl4tAd!HG_c!Q^@K?bg#z<EhnH)RbVLFh00?t zwoNDX<}9charUHbHr|j!yACAQ$U(xPO`w=sXSx&X_wWD`AI_nj%U z(1_U34d`k&L7SX6@vo`!j^D*^L~rY+vq6ir2H5o3->>@*u|8R7uT)A-F%G#=SuMpE z*W4#oKMW)Fm+QJZ6I-;uY?Y}LIJ*YrB!|eNI8V@}2NgvsYBi&y%2209?V@&K2~x|6 zGK9QAu+Si+7fNr=LrLFNRwX}~xK#!otjdA3vuLAW_*eLo_SN^IR6?kMChN;8Agubk z^jQIkD-3q}$McMefyj>qSQ}FNTLI}Zkh|;ZLvACWfL5#$Wgg)xmC==ik(_ds zJpTZ0(@D>Oi8&z~eib9jEB_q$pjfi>;Yq?h)&^d93v6f3bcQVde%z*PZz$t#+45g} zMP3Vo$$R2YKKyh6?b=WCzTCC7+J?fHmo(=WfcNDhk5D##3;UwU6HDf7={V($Nn=-P zO#8*h=yRtkihYCtoLLpWYmy6lm09w02f<4R$ouKXMXuOo%x>$`x~B*pwYyEU^t>bqCSdp_N|Y0I-oPRPDc>TfQ%G4A5u@$HGc0T zUwjNh*nK4>tPimPAjGtT1;aynWrrjBH1|F&bfG`Jn*(l;ye0?w4Ab? zm^sIEAKrPpr^8!gsCq^77h`PoVsg%Vx!k${Zz)4f6E%R>f1@XWW2WJ=T=T6mbBvsw zT!9zATJCexW`=^j?f7GMZj$rgF;l$Y{=xpItoBwWoX7dQ)1*QCr>w^IpUUcgcAI~Z zjYUkHj2tcOo$VZDESydLU1TSz{M%(>A<=pZ+Qy;{MQVanft;3gzb-mIT&OU&kN^oX ztVOn7gRa}chWPHka@-|XDM5(^e&s=0meaAj+2OAq-w%*msN`NFKXM>>$l!wbg++WS z+0xV}ID;@|U3SHQn>Zx*VNx4)zyS>jjhnx~8M6FvT{tATX%{z?_XMQyh_YJY00~a< zuS)r9wJU``Ol6;>8-Ytg?^z#YGe^6zRjD3sY_^EuLa?WGK(B9UujL7uK_sT zQ%GxOov=#ZoiSr!G~?|r#w=R^a*0H^LiG-XsjkTG3lJtr){e$%K^r!$NjzASbsJPURyp)6eF&EwtE zQWaAAn+n77@B8!szpZ-hE#~alqp{w)ZTOi*iaL5@IU)XdEx4}y^pI6}WnLwlm4jhw zE>x+XM{+4#H$bHNC-2cm?IHVYuyDFa(ZV933X6!Jqm+1eZG3 z4p6@P5w+X{5=jE72POT!NR0BSBe1{g!iR8D?3qVYE00?Bc4;?FmvK#}_UJ}lZh!Ak ziyjlYI&KE_t?JAAVWCCC(lA%!*ckwOu2y2L3gNzBLdMkUvVQ$7jKCp!*A7o^{+`qp z|6>9p`X55-zs_jfknSo=ZQs7vByLQ9xgN2xfgt`MlBQ&psFVcUem@{3`m0At(nyFC zWHM!bQ(U)NE!m=VXg0}J)a|4BYY6Ums%o=WYFTMlX|1e0FR4`#CBA&0WVgM@F(E3v zWjf99PWXO#bFzQE^TYE3{ZJlc=ds7m&i;AUIv(JnG1Ik#XSsaZnw;Zk`xlo8=)9b?u_YefyfqZqPDV?b%SSiKr{;$?uFIXJ`R%Dx$fcJ7=7=HuZ-rn)7v z_3wN&4EBYj??}wZ+SEB7o&dZ;>A4g|s{?jboOYHrbqb-IIcED=?&@IAyIXh~VLiLsyq(7E>@WB6e_Gpi0^oN8FhR;wJU!i; zV>~_EUJwr2V&LD4!O`{xc2P0fx*nOq8cJN~8fxuZ=eR6@DtA@ zXqG@oE?WX5E#RyP;1gGA3%KU%>M^ZIi`zhPPu-61eTT1aYMcR6(enago%e2QOszY$FzepBuX zlPqIJ5=Fjw4R#{YDut;jhdNuc+StN~ubLCJFY_}iZ|g0iN1AWHlH%%3)g96k;jP#qr( zLFy%mT;s{_o36H(8IgD431levjz=aW7nc&MR%gQawSCi@$Yh{AyAFhFo&0&X&lgvCb@U6RKP7=R;gswu46Jbdh`g>%D+;;IN=a_=-7$oGQVcMs zJT9+uw&n#ruADupY^%fq+I1cwAb*5H1;$CYq~%uP^0iNI?*ru~dOshqr;p8vdLHMi zhj(7MjSxcO9*A<`1!8BZq8#ufaqz)Zufg0(V@?%gTt~Hv2&3>L*$PdhJvEfxS>J}*`sv@77f&}W>A!@oPw0< zRFFen9}Z)TJUJr5K@!DlF@Rd=_B1S8-EyJp6E;}HJ!{|ew1Bii&?tAV z3CU(KRG_}a%DugzMvpT zM;s|!Sfa!ywis_t|B3*6@L2lgS3rz05DL=IlIL`s<|I$BU8rQ?UoiqiOIC{rEU%FM zN!sv3?hM6R+4;V;hN6IMSGtFa)j)q>Lb=rg_ggrezk;!n&O5(BDfAjzH>(hCzCl?O zTVA)2dR>Ah@vm~C7TLY%XUCo%@O3a=c`GarRqt<(kICQSyLy59Gr|+UfA#W$ZG!TG z@j%63-g595^a|I`AV}~M2AV>k(+Q_K=PzOs!KPr|!oT(+oC&Q2ZTxoI)y3s!6am9w z2n0_VyYSmYSvKgEmYL7lRTaDbO~(Xl5K0pmuVSvz0&p%KWfO_U5OR2QQcrfMSuf9m zJ*glJ4mW5YCG8I13my#sh9F-fDuW9Np!K`$G?zx#4o4jw+aW#QyAPiq7VxwvnH-xsRs0Wpt|AJX;>sNV#N)mPjL#O{5G%xa7IUH2Pb` z0f{G=VVtkFnHonA6S66R2G=YK)g&0>?;w2sCIV{YfdYASoj&x)leMQcrvonG2wo|a zIFL@o1~D|TE|a&bKstVy0`7KpV`RQ`s6mueQOpBn9vk{;e*^>F5|$YKIvzxViE~pL z`lW3L_dAA5j2|b*AOaubHiD0$WDU(p;^->g76S6XFrOj&QdfY6?_(Cf2i6buStfv}XuIDh*R+Gof7XX3de^p z(BR8TSh9f6afLEvPeAGdtce@{)WyL^W`gEC?}!+&_jYqVhrS2IYYa&sw(8n0t~kNM zIF{xNr5{Ho-gq*~p;l8Xl|`xO&mWljFwe06qY;`_P`CXmo&k)r!C3hzr4hZ$=UJEu zQArl394e|*!P%8J>s~)3n&bBoAgcifCth3GN3(=x9Yat``da=}zXZB}8$-MoB=|fR zO%SXG$mwe+N4lCsfyI&OTx!Z2Xdu#3NT;EFNeZUoGfn(jLZN z%_v%S&(I=Q7TNU4DPS$aHI&lCCB=%Zttk~z%al~p460#*(3FM>n*eQW+%$>iJ!Tj+pNPV#33JH`=Sm|8jdJ&n8svaazKtxHK= zsuBoisYD(uJw-^SF@^qjXSjkVEaM$+RyQ$x1|N6VkARo%chv>>GbBnp>B3QN$aQ<~ z!{rc)2;sBo;R71=g@iEkGzD>eA@s-25$z@(Oq+WaVQ4H%o5gWkgYd+BaixX&bNbc zsx4)TF3)@xKg7^>H?4d;amtK;wpF^V%9C3PvVxCcG%RcQ*wbo9Iwv`4JyKbES0Vi!|J_FW3)C@>10(qfi-yb+-k}xPOGjjA?3~|HrEW6#@kZQj z(yVSa{P3z}JE3tqO3t{5B`;haCU(vb6so;z@s*M>6cPeh5}S(a z`U|+uQ=eeB{#Bv4lDAhuh89hOjaj<8L^?JyDx7o20( z+#yOjy?o+@K4ucip5NdFyx^9O(p^knG)T}E41q8ZJ76MfqzSO;LJ1u>3w=X*dY8d0 zCTwB9FuvGv)5R^m5MrSslPGr>p-G)@)LGi}^N3x_J{&!S3Of}Puh}|np2)wnAOJVO zAzieC`7#nXLoNBD&U*MJv}0QbO zUuTae9{_Jcgu>B2jE6)I&O9z+59tAe>_c(=hXpl3bikHvqYE_QWRt_dj0wmdIr7}mbpV*b`XPDk$1m$Kv?GO_?tOo0B7vdAn)&;tvPu)?C{Y4aUU z;-*1tZR;x1LX;@ox)@ETIOdAYrnwNeg`judDvL%>>uL>@aXfhNv`!Qqf{r+WZus5- zVTQ|ZSX@00Fh5g4`o*Gj8W=8JO@*|HNuhHxo3#X5`Oa*LFYsLdc;S9cP_P_Rs5ke! zCgeMw!5G|)(CHi9c>-MBq>{&;-jJGCfkf0xZOV}>`{XO#`;@b=u@f(mGakbkm z+aB)@40e291sfPotU{=e3b_b##6Oxxw9(_`vE}BZp6OT*;;u)AtBAzxONO#0B{L?R zG9Bp#NBtC}%UH-Ml#?_X2z}{+0g$c@p|l!{O!B%g6Z7xJ@?%dMsw^HOVQpNJW!X(|Pg%y6;t9_uiR8?IYNK4Jz zDrHEY1ui|5_l({Ek`m|98@JvqCHCU;DU#>CWH9}}#9?{u)G3GxC(ouw{K|RHc(T3l zAJsD*N#!fPDIf2`7*-Z*{1|Qit0P_pKmKAtD$T#t^OA77S=Sx1(O%Ihx3eOa8A_=FrNi{7#B=smqxL?2 zZ$6S7z9NDLM$~@tI07XTfNIIzB*D)(U>H**iUu|s=eH6NCoDLLV(8(|!W;iS=rOJt zl8;&+E);wn84k6bTFes@@oQi_GNivPX`yZ-1{HV>DLdc5vdb}MREKz-p%~Ucro_3C z7QRdrzHf0;SgIcUyXA1n-b`m;g3SHvph-C8G}#IeYC<3uW-3h7ys%aZRH{Wk^7KFG zYZz+==%oXs&2S;&FaU9shXX>q-&4aNa|(Gp#2?xHUtx16_8+2NCJc8Co$bPo@gDXM zN5}Ay5nOmW`0%G9Vug~Se<|20cp&OxWd~<^vV|)6)E)!lD?B#O9W+10I0Pa zM6Nh8Cuu^AF#+H>R|@08P&)vSDNRcPjSGRKn^J+pM@ks{fH`zIw?!1Ef}s>A;cmSo zHzAIEwi+67stV=LtEEZ_tql^?-z8V1fawoC~#OaIjSfpe13oo!^RvzKRB4 z!z^%w7bc@EjIcC}^cFwpi-6nT#%Rf~ZB30IKJDv3MS1@8ohl-DulM%Hp#v{DWGNzK zLuAm0$dE9x0df>zL|uXC6CEO%<|Y$V%ruXx)NO9W0>PL}V?+i=U{)atD=7Fuj><@1 zUBPJ1V6GSW=V$YcHmB#}Rpj-4JI{O}@FBI8sBtU=wifK_)XQ%YZ%S z1eVB&9_vhlbxMKNX}+i-lCw}lkW_zyygZ93U|T0!8(ksWoFiRV)W(*%nJH6yjY>m^ zPAShkL@HZ8KQc=Qk4d9^0yDCvIVjnket=;>jf78huq9D}^gH?#@m?__Bv-@-gJ$?z zA=pf?KXQj;oa}%vg{Z!DUD3L+Sk3ZUP7{?4baM5&DT@{z*WJeV`gl2akCJjprHCmq>2DzDXf zXGUI(1?P#GltEtTl`fU(5&#tJD30F6Z#==2kY`7tHUon7+DY8&U58~~By%2kVJ3$=#K&}TfPY{3D7z4aKAQwLW zkp(M*bmO5V1yjjjPae2PTveVl!5k-yvtr6$b5m!zCQM22h@VA)@{K#{$91zNQB6zd z==eq=6OBH-bziPz`OVebs(U*fGN4z)O6TyIe040o_q>Vse1eAUDwO7*;Kb>4;E*nR)X- z7$@T`o;Jm`PHojQlRk04sYrhar?Ll>>x+so<0jd%HU<{;sk0y%HC=@&Dm~M)ADYcU z@+tq2VPsoHTT-hDCM*e@UYQ!YB~Pl7S;b`Q&w)X5CMb{G%RLzG6NzW@UcZk|l*SWF z4Jy0s08V8 z5MQY4na7WsEW6a2^WB%ys`CdNR@_vV>I3n;R@^HJsWo7JqSWt;dFqUm$opS@NJn6^&B!=&_`qe5u@-ITTrgr&$F9jACphP=U2q0jD^v)Z! zNH{NN2s@CVqX-T~zLG9q`llOv;dJR?ChOG4kkN=cQp;WwgGlCttl20x!-Y@>Ni`Ey z$o}5ps^63P1xrn%Mi%2Bre&Cwq)++E@hF#$8Pv|;i?Ey>$mI7F|8PKsB!P{4qI=C@ z(4jN3SkI23_J)bBd1W=pYhoTN2L7QX_nu4uFS~0=EeDFmKmdCeLGzocsZiiZpz`-G zG$IVLNPt7sc<_c1SPmg{fh?*}I7QIoutbLz>QHPESTD7hpiWF+*NEi2^qj8|4G-Dq zz>*OU5BVfO70^oOH(Q_-k?b3HJ*D#OO+2l{YxIY-b&V$3UorDb!Q+>7?eHwi-!+<0 zpBbjV7`UVQ@R;HS%QZ;|!jU$-N}}?7V4C5DIb!ew97WqI>x?P+IU<=omNkNCRu9qc zfq>^7h|3RyZ@U|teYqxeMCSq06Tvi%vk32Zjj%%!zxPG{acl#gjVSLDUri3ZD3Hb+ zKeUwIY_E)Z9?|B<5A*H*Xuij+*)<64(o+x0W83+4)O4Sh(YFP48`p$F`DH}HRtA}x z0H4MrmBL?SQCu2?7lnc~VFen-?>9bGQ?m3#1xlW2Xsf>g_K_`^zGv1JzO5(#iBw$X5^7fy{A_O*Khtqw&26xm!&h~Z_2K)Dq^`*F2g_-s6*aOhxbeVC+)#^55@uxUcsJysUeWhFCR(>4Z%L;^LB}}!T{j_gi zjJ78sjySr{T3UGg$E`0ti`!5MoZZ$_u7kTMUUzs^;4ifmm<7GFm?7dXF`c*(fZxh> z)X?0Q%Jfx`4W8yAjP~K3?hV~dsI6m%S-%OpJE#3w=(Xdz5&oL&bJDk)9gf<1L@q|S z=gW2+hfM3~Z2S;MUrmOSr^C5kM}Y0qV25W_=dqABOp$^N(+8ssdb>c^8`KqIyAn+| zTras@IQOtT0N4>?q>p2yH-7+scn)Cei18)+)K7kZk)nAcCc7Pu=g5B&3DKx>HPBdu zKpx%0AbZyAIIr0CM-Mq{n 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⪻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

fZ2H3#IM+afaopZe=xe+S@UpnM>MSwW_n2 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%0A!)x>MYm<_j2cjMy){~ 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