aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Jon Skeet <skeet@pobox.com>2015-06-17 15:03:47 +0100
committerGravatar Jon Skeet <skeet@pobox.com>2015-06-17 15:03:47 +0100
commite2acd854250b449a3fdeef2ad52402c4c5d78259 (patch)
treea08126762b6c76d56fde8ce443f8dff36408b6e0
parentd9dc05e500807a6f0cd10d4637c599acc9a6aecf (diff)
parentb36395b2bac88f70070544c325bc09234cb1f1a6 (diff)
Merged master
-rw-r--r--.gitignore1
-rw-r--r--.travis.yml30
-rw-r--r--Makefile.am88
-rw-r--r--Protobuf.podspec12
-rw-r--r--README.md4
-rw-r--r--appveyor.yml33
-rw-r--r--cmake/CMakeLists.txt22
-rw-r--r--cmake/README.md36
-rw-r--r--cmake/config.h.in4
-rw-r--r--cmake/extract_includes.bat.in105
-rw-r--r--cmake/find_hash_map.cmake119
-rw-r--r--cmake/pbconfig.h.in9
-rw-r--r--cmake/tests.cmake1
-rwxr-xr-x[-rw-r--r--]cmake/update_file_lists.sh27
-rw-r--r--config.h.include7
-rw-r--r--configure.ac6
-rw-r--r--conformance/Makefile.am2
-rw-r--r--conformance/conformance_test.cc167
-rw-r--r--conformance/conformance_test.h42
-rw-r--r--conformance/conformance_test_runner.cc63
-rw-r--r--conformance/failure_list_cpp.txt21
-rw-r--r--javanano/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java22
-rwxr-xr-xobjectivec/DevTools/compile_testing_protos.sh113
-rwxr-xr-xobjectivec/DevTools/full_mac_build.sh2
-rw-r--r--objectivec/GPBArray.h2
-rw-r--r--objectivec/GPBCodedInputStream.h2
-rw-r--r--objectivec/GPBCodedInputStream.m26
-rw-r--r--objectivec/GPBCodedInputStream_PackagePrivate.h4
-rw-r--r--objectivec/GPBCodedOutputStream.h118
-rw-r--r--objectivec/GPBCodedOutputStream.m126
-rw-r--r--objectivec/GPBDescriptor.h14
-rw-r--r--objectivec/GPBDescriptor.m307
-rw-r--r--objectivec/GPBDescriptor_PackagePrivate.h50
-rw-r--r--objectivec/GPBDictionary.h2
-rw-r--r--objectivec/GPBDictionary.m1750
-rw-r--r--objectivec/GPBDictionary_PackagePrivate.h31
-rw-r--r--objectivec/GPBExtensionField.m525
-rw-r--r--objectivec/GPBExtensionField_PackagePrivate.h51
-rw-r--r--objectivec/GPBExtensionInternals.h (renamed from objectivec/GPBExtensionField.h)23
-rw-r--r--objectivec/GPBExtensionInternals.m380
-rw-r--r--objectivec/GPBExtensionRegistry.h8
-rw-r--r--objectivec/GPBExtensionRegistry.m32
-rw-r--r--objectivec/GPBMessage.h14
-rw-r--r--objectivec/GPBMessage.m4045
-rw-r--r--objectivec/GPBMessage_PackagePrivate.h4
-rw-r--r--objectivec/GPBProtocolBuffers.h3
-rw-r--r--objectivec/GPBProtocolBuffers.m17
-rw-r--r--objectivec/GPBProtocolBuffers_RuntimeSupport.h3
-rw-r--r--objectivec/GPBRootObject.m7
-rw-r--r--objectivec/GPBRootObject_PackagePrivate.h4
-rw-r--r--objectivec/GPBRuntimeTypes.h (renamed from objectivec/GPBTypes.h)48
-rw-r--r--objectivec/GPBUnknownField.h (renamed from objectivec/GPBField.h)6
-rw-r--r--objectivec/GPBUnknownField.m (renamed from objectivec/GPBField.m)28
-rw-r--r--objectivec/GPBUnknownFieldSet.h6
-rw-r--r--objectivec/GPBUnknownFieldSet.m55
-rw-r--r--objectivec/GPBUnknownField_PackagePrivate.h (renamed from objectivec/GPBField_PackagePrivate.h)6
-rw-r--r--objectivec/GPBUtilities.h263
-rw-r--r--objectivec/GPBUtilities.m598
-rw-r--r--objectivec/GPBUtilities_PackagePrivate.h145
-rw-r--r--objectivec/GPBWireFormat.h4
-rw-r--r--objectivec/GPBWireFormat.m40
-rw-r--r--objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj276
-rw-r--r--objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme219
-rw-r--r--objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme2
-rw-r--r--objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj285
-rw-r--r--objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme222
-rw-r--r--objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme2
-rw-r--r--objectivec/README.md93
-rw-r--r--objectivec/Tests/Filter2.txt35
-rw-r--r--objectivec/Tests/GPBARCUnittestProtos.m3
-rw-r--r--objectivec/Tests/GPBCodedInputStreamTests.m2
-rw-r--r--objectivec/Tests/GPBConcurrencyTests.m3
-rw-r--r--objectivec/Tests/GPBFilteredMessageTests.m98
-rw-r--r--objectivec/Tests/GPBMessageTests+Runtime.m142
-rw-r--r--objectivec/Tests/GPBMessageTests+Serialization.m136
-rw-r--r--objectivec/Tests/GPBMessageTests.m49
-rw-r--r--objectivec/Tests/GPBTestUtilities.h6
-rw-r--r--objectivec/Tests/GPBTestUtilities.m386
-rw-r--r--objectivec/Tests/GPBUnittestProtos.m3
-rw-r--r--objectivec/Tests/GPBUnknownFieldSetTest.m47
-rw-r--r--objectivec/Tests/GPBUtilitiesTests.m190
-rw-r--r--objectivec/Tests/GPBWireFormatTests.m12
-rw-r--r--objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/Contents.json12
-rw-r--r--objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad6_2x.png (renamed from objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad6@2x.png)bin17744 -> 17744 bytes
-rw-r--r--objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad7_2x.png (renamed from objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad7@2x.png)bin18788 -> 18788 bytes
-rw-r--r--objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone6_2x.png (renamed from objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone6@2x.png)bin13348 -> 13348 bytes
-rw-r--r--objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7_2x.png (renamed from objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7@2x.png)bin11128 -> 11128 bytes
-rw-r--r--objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7_3x.png (renamed from objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7@3x.png)bin21792 -> 21792 bytes
-rw-r--r--objectivec/Tests/unittest_filter.proto71
-rw-r--r--objectivec/Tests/unittest_name_mangling.proto37
-rw-r--r--objectivec/Tests/unittest_objc_startup.proto (renamed from objectivec/Tests/Filter1.txt)25
-rw-r--r--objectivec/google/protobuf/Any.pbobjc.m52
-rw-r--r--objectivec/google/protobuf/Api.pbobjc.h3
-rw-r--r--objectivec/google/protobuf/Api.pbobjc.m151
-rw-r--r--objectivec/google/protobuf/Descriptor.pbobjc.h30
-rw-r--r--objectivec/google/protobuf/Descriptor.pbobjc.m1451
-rw-r--r--objectivec/google/protobuf/Duration.pbobjc.m50
-rw-r--r--objectivec/google/protobuf/Empty.pbobjc.m40
-rw-r--r--objectivec/google/protobuf/FieldMask.pbobjc.h1
-rw-r--r--objectivec/google/protobuf/FieldMask.pbobjc.m46
-rw-r--r--objectivec/google/protobuf/SourceContext.pbobjc.m44
-rw-r--r--objectivec/google/protobuf/Struct.pbobjc.h2
-rw-r--r--objectivec/google/protobuf/Struct.pbobjc.m162
-rw-r--r--objectivec/google/protobuf/Timestamp.pbobjc.m50
-rw-r--r--objectivec/google/protobuf/Type.pbobjc.h7
-rw-r--r--objectivec/google/protobuf/Type.pbobjc.m334
-rw-r--r--objectivec/google/protobuf/Wrappers.pbobjc.m372
-rw-r--r--ruby/ext/google/protobuf_c/defs.c15
-rw-r--r--ruby/ext/google/protobuf_c/extconf.rb4
-rw-r--r--ruby/ext/google/protobuf_c/map.c2
-rw-r--r--ruby/ext/google/protobuf_c/upb.c4894
-rw-r--r--ruby/ext/google/protobuf_c/upb.h6422
-rw-r--r--src/Makefile.am41
-rwxr-xr-xsrc/google/protobuf/arena.cc2
-rw-r--r--src/google/protobuf/arena.h3
-rw-r--r--src/google/protobuf/compiler/cpp/cpp_file.cc58
-rw-r--r--src/google/protobuf/compiler/cpp/cpp_message.cc2
-rw-r--r--src/google/protobuf/compiler/cpp/cpp_unittest.cc12
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc12
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_extension.cc39
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_extension.h6
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_field.cc91
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_file.cc293
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_file.h4
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_generator.cc4
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_helpers.cc63
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_helpers.h5
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc8
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_message.cc369
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_message.h11
-rw-r--r--src/google/protobuf/compiler/objectivec/objectivec_message_field.cc2
-rw-r--r--src/google/protobuf/compiler/plugin.pb.cc2
-rw-r--r--src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc4
-rw-r--r--src/google/protobuf/descriptor.pb.cc41
-rw-r--r--src/google/protobuf/descriptor.proto1
-rw-r--r--src/google/protobuf/io/gzip_stream.cc2
-rw-r--r--src/google/protobuf/io/zero_copy_stream_unittest.cc2
-rw-r--r--src/google/protobuf/stubs/atomicops.h1
-rw-r--r--src/google/protobuf/stubs/common.cc2
-rw-r--r--src/google/protobuf/stubs/common.h10
-rw-r--r--src/google/protobuf/stubs/common_unittest.cc2
-rw-r--r--src/google/protobuf/stubs/pbconfig.h142
-rw-r--r--src/google/protobuf/stubs/platform_macros.h10
-rw-r--r--src/google/protobuf/testing/zcgunzip.cc2
-rw-r--r--src/google/protobuf/testing/zcgzip.cc2
-rwxr-xr-xtravis.sh14
-rwxr-xr-xvsprojects/config.h20
-rwxr-xr-xvsprojects/convert2008to2005.sh20
-rwxr-xr-xvsprojects/extract_includes.bat102
-rwxr-xr-xvsprojects/google/protobuf/stubs/pbconfig.h49
-rw-r--r--vsprojects/libprotobuf-lite.vcproj208
-rw-r--r--vsprojects/libprotobuf.vcproj266
-rw-r--r--vsprojects/libprotoc.vcproj338
-rw-r--r--vsprojects/lite-test.vcproj332
-rw-r--r--vsprojects/protobuf.sln92
-rw-r--r--vsprojects/protoc.vcproj192
-rw-r--r--vsprojects/readme.txt121
-rwxr-xr-xvsprojects/test_plugin.vcproj209
-rw-r--r--vsprojects/tests.vcproj964
159 files changed, 13554 insertions, 16792 deletions
diff --git a/.gitignore b/.gitignore
index 8ea85af0..52c92dfb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,7 +27,6 @@ src/Makefile
/config.h
config.log
config.status
-pbconfig.h
libtool
protobuf-lite.pc
diff --git a/.travis.yml b/.travis.yml
index 9dc99b4e..4edf3b30 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,4 +1,8 @@
sudo: required
+# 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:
- linux
@@ -22,5 +26,31 @@ env:
- CONFIG=ruby21
- CONFIG=ruby22
- CONFIG=jruby
+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_jdk6
+ - os: osx
+ env: CONFIG=java_jdk7
+ - os: osx
+ env: CONFIG=java_oracle7
+ - os: osx
+ env: CONFIG=javanano_jdk6
+ - os: osx
+ env: CONFIG=javanano_jdk7
+ - os: osx
+ env: CONFIG=javanano_oracle7
+ # Requires installing mono, currently travis.sh is doing that with apt-get
+ # which doesn't work on OS X.
+ - os: osx
+ env: CONFIG=csharp
+ 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
notifications:
email: false
diff --git a/Makefile.am b/Makefile.am
index 084fca6b..8d7bb563 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -506,14 +506,10 @@ objectivec_EXTRA_DIST= \
objectivec/GPBDictionary.h \
objectivec/GPBDictionary.m \
objectivec/GPBDictionary_PackagePrivate.h \
- objectivec/GPBExtensionField.h \
- objectivec/GPBExtensionField.m \
- objectivec/GPBExtensionField_PackagePrivate.h \
+ objectivec/GPBExtensionInternals.h \
+ objectivec/GPBExtensionInternals.m \
objectivec/GPBExtensionRegistry.h \
objectivec/GPBExtensionRegistry.m \
- objectivec/GPBField.h \
- objectivec/GPBField.m \
- objectivec/GPBField_PackagePrivate.h \
objectivec/GPBMessage.h \
objectivec/GPBMessage.m \
objectivec/GPBMessage_PackagePrivate.h \
@@ -523,7 +519,10 @@ objectivec_EXTRA_DIST= \
objectivec/GPBRootObject.h \
objectivec/GPBRootObject.m \
objectivec/GPBRootObject_PackagePrivate.h \
- objectivec/GPBTypes.h \
+ objectivec/GPBRuntimeTypes.h \
+ objectivec/GPBUnknownField.h \
+ objectivec/GPBUnknownField.m \
+ objectivec/GPBUnknownField_PackagePrivate.h \
objectivec/GPBUnknownFieldSet.h \
objectivec/GPBUnknownFieldSet.m \
objectivec/GPBUnknownFieldSet_PackagePrivate.h \
@@ -547,8 +546,6 @@ objectivec_EXTRA_DIST= \
objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme \
objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme \
objectivec/README.md \
- objectivec/Tests/Filter1.txt \
- objectivec/Tests/Filter2.txt \
objectivec/Tests/golden_message \
objectivec/Tests/golden_packed_fields_message \
objectivec/Tests/GPBARCUnittestProtos.m \
@@ -564,7 +561,6 @@ objectivec_EXTRA_DIST= \
objectivec/Tests/GPBDictionaryTests+UInt32.m \
objectivec/Tests/GPBDictionaryTests+UInt64.m \
objectivec/Tests/GPBDictionaryTests.pddm \
- objectivec/Tests/GPBFilteredMessageTests.m \
objectivec/Tests/GPBMessageTests+Merge.m \
objectivec/Tests/GPBMessageTests+Runtime.m \
objectivec/Tests/GPBMessageTests+Serialization.m \
@@ -583,21 +579,19 @@ objectivec_EXTRA_DIST= \
objectivec/Tests/iOSTestHarness/en.lproj/InfoPlist.strings \
objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/Contents.json \
objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad6.png \
- objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad6@2x.png \
+ objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad6_2x.png \
objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad7.png \
- objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad7@2x.png \
+ objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad7_2x.png \
objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone6.png \
- objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone6@2x.png \
- objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7@2x.png \
- objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7@3x.png \
+ objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone6_2x.png \
+ objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7_2x.png \
+ objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7_3x.png \
objectivec/Tests/iOSTestHarness/Images.xcassets/LaunchImage.launchimage/Contents.json \
objectivec/Tests/iOSTestHarness/Info.plist \
objectivec/Tests/iOSTestHarness/LaunchScreen.xib \
objectivec/Tests/text_format_map_unittest_data.txt \
objectivec/Tests/text_format_unittest_data.txt \
objectivec/Tests/unittest_cycle.proto \
- objectivec/Tests/unittest_filter.proto \
- objectivec/Tests/unittest_name_mangling.proto \
objectivec/Tests/unittest_objc.proto \
objectivec/Tests/unittest_runtime_proto2.proto \
objectivec/Tests/unittest_runtime_proto3.proto \
@@ -741,39 +735,33 @@ ruby_EXTRA_DIST= \
all_EXTRA_DIST=$(csharp_EXTRA_DIST) $(java_EXTRA_DIST) $(javanano_EXTRA_DIST) $(objectivec_EXTRA_DIST) $(python_EXTRA_DIST) $(ruby_EXTRA_DIST)
-EXTRA_DIST = $(@DIST_LANG@_EXTRA_DIST) \
- autogen.sh \
- generate_descriptor_proto.sh \
- README.md \
- INSTALL.txt \
- LICENSE \
- CONTRIBUTORS.txt \
- CHANGES.txt \
- config.h.include \
- editors/README.txt \
- editors/proto.vim \
- editors/protobuf-mode.el \
- vsprojects/config.h \
- vsprojects/google/protobuf/stubs/pbconfig.h \
- vsprojects/extract_includes.bat \
- vsprojects/libprotobuf.vcproj \
- vsprojects/libprotobuf-lite.vcproj \
- vsprojects/libprotoc.vcproj \
- vsprojects/protobuf.sln \
- vsprojects/protoc.vcproj \
- vsprojects/readme.txt \
- vsprojects/test_plugin.vcproj \
- vsprojects/tests.vcproj \
- vsprojects/lite-test.vcproj \
- vsprojects/convert2008to2005.sh \
- examples/README.txt \
- examples/Makefile \
- examples/addressbook.proto \
- examples/add_person.cc \
- examples/list_people.cc \
- examples/AddPerson.java \
- examples/ListPeople.java \
- examples/add_person.py \
+EXTRA_DIST = $(@DIST_LANG@_EXTRA_DIST) \
+ autogen.sh \
+ generate_descriptor_proto.sh \
+ README.md \
+ INSTALL.txt \
+ LICENSE \
+ CONTRIBUTORS.txt \
+ CHANGES.txt \
+ cmake/CMakeLists.txt \
+ cmake/libprotobuf.cmake \
+ cmake/libprotobuf-lite.cmake \
+ cmake/libprotoc.cmake \
+ cmake/protoc.cmake \
+ cmake/README.md \
+ cmake/tests.cmake \
+ cmake/update_file_lists.sh \
+ editors/README.txt \
+ editors/proto.vim \
+ editors/protobuf-mode.el \
+ examples/README.txt \
+ examples/Makefile \
+ examples/addressbook.proto \
+ examples/add_person.cc \
+ examples/list_people.cc \
+ examples/AddPerson.java \
+ examples/ListPeople.java \
+ examples/add_person.py \
examples/list_people.py
# Deletes all the files generated by autogen.sh.
diff --git a/Protobuf.podspec b/Protobuf.podspec
index 6fe77f88..b6b831c2 100644
--- a/Protobuf.podspec
+++ b/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.0.0'
+ s.version = '3.0.0-alpha-4-pre'
s.summary = 'Protocol Buffers v.3 runtime library for Objective-C.'
s.homepage = 'https://github.com/google/protobuf'
s.license = 'New BSD'
@@ -13,23 +13,23 @@ Pod::Spec.new do |s|
s.source_files = 'objectivec/*.{h,m}',
'objectivec/google/protobuf/Any.pbobjc.{h,m}',
+ 'objectivec/google/protobuf/Api.pbobjc.{h,m}',
'objectivec/google/protobuf/Descriptor.pbobjc.{h,m}',
'objectivec/google/protobuf/Duration.pbobjc.h',
'objectivec/google/protobuf/Empty.pbobjc.{h,m}',
'objectivec/google/protobuf/FieldMask.pbobjc.{h,m}',
'objectivec/google/protobuf/SourceContext.pbobjc.{h,m}',
+ 'objectivec/google/protobuf/Struct.pbobjc.{h,m}',
'objectivec/google/protobuf/Timestamp.pbobjc.h',
+ 'objectivec/google/protobuf/Type.pbobjc.{h,m}'
'objectivec/google/protobuf/Wrappers.pbobjc.{h,m}'
# Timestamp.pbobjc.m and Duration.pbobjc.m are #imported by GPBWellKnownTypes.m. So we can't
# compile them (duplicate symbols), but we need them available for the importing:
s.preserve_paths = 'objectivec/google/protobuf/Duration.pbobjc.m',
'objectivec/google/protobuf/Timestamp.pbobjc.m'
# The following would cause duplicate symbol definitions. GPBProtocolBuffers is expected to be
- # left out, as it's an umbrella implementation file. For Api, Struct and Type, see issue #449.
- s.exclude_files = 'objectivec/GPBProtocolBuffers.m',
- 'objectivec/google/protobuf/Api.pbobjc.{h,m}',
- 'objectivec/google/protobuf/Struct.pbobjc.{h,m}',
- 'objectivec/google/protobuf/Type.pbobjc.{h,m}'
+ # left out, as it's an umbrella implementation file.
+ s.exclude_files = 'objectivec/GPBProtocolBuffers.m'
s.header_mappings_dir = 'objectivec'
s.ios.deployment_target = '6.0'
diff --git a/README.md b/README.md
index 5ea6aff6..51377ad7 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
Protocol Buffers - Google's data interchange format
===================================================
-[![Build Status](https://travis-ci.org/google/protobuf.svg?branch=master)](https://travis-ci.org/google/protobuf)
+[![Build Status](https://travis-ci.org/google/protobuf.svg?branch=master)](https://travis-ci.org/google/protobuf) [![Build status](https://ci.appveyor.com/api/projects/status/73ctee6ua4w2ruin?svg=true)](https://ci.appveyor.com/project/protobuf/protobuf)
Copyright 2008 Google Inc.
@@ -156,7 +156,7 @@ For advanced usage information on configure and make, see INSTALL.txt.
C++ Installation - Windows
--------------------------
-If you are using Microsoft Visual C++, see vsprojects/readme.txt.
+If you are using Microsoft Visual C++, see cmake/README.md.
If you are using Cygwin or MinGW, follow the Unix installation
instructions, above.
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 00000000..91862230
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,33 @@
+# Only test one combination: "Visual Studio 12 + Win64 + Debug + DLL". We can
+# test more combinations but AppVeyor just takes too long to finish (each
+# combination takes ~15mins).
+platform:
+ - Win64
+
+configuration:
+ - Debug
+
+environment:
+ matrix:
+ - BUILD_DLL: ON
+
+install:
+ - ps: Start-FileDownload https://googletest.googlecode.com/files/gtest-1.7.0.zip
+ - 7z x gtest-1.7.0.zip
+ - rename gtest-1.7.0 gtest
+
+before_build:
+ - if %platform%==Win32 set generator=Visual Studio 12
+ - if %platform%==Win64 set generator=Visual Studio 12 Win64
+ - if %platform%==Win32 set vcplatform=Win32
+ - if %platform%==Win64 set vcplatform=x64
+
+build_script:
+ - mkdir build
+ - cd build
+ - cmake -G "%generator%" -DBUILD_SHARED_LIBS=%BUILD_DLL% ../cmake
+ - msbuild protobuf.sln /p:Platform=%vcplatform% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
+ - cd %configuration%
+ - tests.exe
+
+
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
index 02bba4c9..d36292df 100644
--- a/cmake/CMakeLists.txt
+++ b/cmake/CMakeLists.txt
@@ -8,11 +8,11 @@ if (MSVC)
option(ZLIB "Build with zlib support" OFF)
endif (MSVC)
+add_definitions(-DGOOGLE_PROTOBUF_CMAKE_BUILD)
+
find_package(Threads REQUIRED)
if (CMAKE_USE_PTHREADS_INIT)
- set(HAVE_PTHREAD 1)
-else (CMAKE_USE_PTHREADS_INIT)
- set(HAVE_PTHREAD 0)
+ add_definitions(-DHAVE_PTHREAD)
endif (CMAKE_USE_PTHREADS_INIT)
if (MSVC)
@@ -36,6 +36,10 @@ else (MSVC)
endif (ZLIB_FOUND)
endif (MSVC)
+if (HAVE_ZLIB)
+ add_definitions(-DHAVE_ZLIB)
+endif (HAVE_ZLIB)
+
if (MSVC)
if (BUILD_SHARED_LIBS)
add_definitions(-DPROTOBUF_USE_DLLS)
@@ -43,10 +47,11 @@ if (MSVC)
add_definitions(/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305)
endif (MSVC)
-include(find_hash_map.cmake)
-
-configure_file(config.h.in config.h)
-configure_file(pbconfig.h.in google/protobuf/stubs/pbconfig.h)
+if (MSVC)
+ string(REPLACE "/" "\\" PROTOBUF_SOURCE_WIN32_PATH ${protobuf_SOURCE_DIR})
+ string(REPLACE "/" "\\" PROTOBUF_BINARY_WIN32_PATH ${protobuf_BINARY_DIR})
+ configure_file(extract_includes.bat.in extract_includes.bat)
+endif (MSVC)
get_filename_component(protobuf_source_dir ${protobuf_SOURCE_DIR} PATH)
@@ -67,6 +72,7 @@ endif (MSVC)
include(libprotobuf-lite.cmake)
include(libprotobuf.cmake)
include(libprotoc.cmake)
+include(protoc.cmake)
if (BUILD_TESTING)
- include(protoc.cmake)
+ include(tests.cmake)
endif (BUILD_TESTING)
diff --git a/cmake/README.md b/cmake/README.md
index 02798b63..1d5c8bc1 100644
--- a/cmake/README.md
+++ b/cmake/README.md
@@ -5,15 +5,21 @@ on your computer before proceeding.
Compiling and Installing
========================
-1. Check whether a gtest directory exists in the upper level directory. If
- you checkout the code from github via "git clone", this gtest directory
- won't exist and you won't be able to build the tests described below. To
- avoid this problem consider downloading one of the release tar balls which
- contains gtest already and copying the gest directory from there to your
- protobuf directory:
+1. Check whether a gtest directory exists in the upper level directory. If you
+ checkout the code from github via "git clone", this gtest directory won't
+ exist and you won't be able to build protobuf unit-tests. Consider using one
+ of the release tar balls instead:
https://github.com/google/protobuf/releases
+ These release tar balls are more stable versions of protobuf and already
+ have the gtest directory included.
+
+ You can also download gtest by yourself and put it in the right place.
+
+ If you absolutely don't want to build and run protobuf unit-tests, skip
+ this step and use protobuf at your own risk.
+
2. Use cmake to generate MSVC project files. Running the following commands
in a command shell will generate project files for Visual Studio 2008 in
a sub-directory named "build".
@@ -23,21 +29,27 @@ Compiling and Installing
$ cd build
$ cmake -G "Visual Studio 9 2008" ..
+ If you don't have gtest, skip the build of tests by turning off the
+ BUILD_TESTING option:
+
+ $ cmake -G "Visutal Studio 9 2008" -DBUILD_TESTING=OFF ..
+
3. Open the generated protobuf.sln file in Microsoft Visual Studio.
4. Choose "Debug" or "Release" configuration as desired.
5. From the Build menu, choose "Build Solution". Wait for compiling to finish.
-6. From a command shell, run tests.exe and lite-test.exe and check that all
- tests pass. Make sure you have changed the working directory to the output
- directory because tests.exe will try to find and run test_plugin.exe
- in the working directory.
+6. If you have built tests, run tests.exe and lite-test.exe from a command
+ shell and check that all tests pass. Make sure you have changed the working
+ directory to the output directory because tests.exe will try to find and run
+ test_plugin.exe in the working directory.
7. Run extract_includes.bat to copy all the public headers into a separate
- "include" directory (under the top-level package directory).
+ "include" directory. This batch script can be found along with the generated
+ protobuf.sln file in the same directory.
8. Copy the contents of the include directory to wherever you want to put
headers.
9. Copy protoc.exe wherever you put build tools (probably somewhere in your
PATH).
10. Copy libprotobuf.lib, libprotobuf-lite.lib, and libprotoc.lib wherever you
- put libraries.
+ put libraries.
To avoid conflicts between the MSVC debug and release runtime libraries, when
compiling a debug build of your application, you may need to link against a
diff --git a/cmake/config.h.in b/cmake/config.h.in
deleted file mode 100644
index bca1cbba..00000000
--- a/cmake/config.h.in
+++ /dev/null
@@ -1,4 +0,0 @@
-#define GOOGLE_PROTOBUF_CMAKE_BUILD
-
-#define HAVE_PTHREAD ${HAVE_PTHREAD}
-#define HAVE_ZLIB ${HAVE_ZLIB}
diff --git a/cmake/extract_includes.bat.in b/cmake/extract_includes.bat.in
new file mode 100644
index 00000000..b2e9444d
--- /dev/null
+++ b/cmake/extract_includes.bat.in
@@ -0,0 +1,105 @@
+mkdir include
+mkdir include\google
+mkdir include\google\protobuf
+mkdir include\google\protobuf\compiler
+mkdir include\google\protobuf\compiler\cpp
+mkdir include\google\protobuf\compiler\csharp
+mkdir include\google\protobuf\compiler\java
+mkdir include\google\protobuf\compiler\javanano
+mkdir include\google\protobuf\compiler\objectivec
+mkdir include\google\protobuf\compiler\python
+mkdir include\google\protobuf\compiler\ruby
+mkdir include\google\protobuf\io
+mkdir include\google\protobuf\stubs
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\any.h include\google\protobuf\any.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\any.pb.h include\google\protobuf\any.pb.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\api.pb.h include\google\protobuf\api.pb.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\arena.h include\google\protobuf\arena.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\arenastring.h include\google\protobuf\arenastring.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\code_generator.h include\google\protobuf\compiler\code_generator.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\command_line_interface.h include\google\protobuf\compiler\command_line_interface.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\cpp\cpp_generator.h include\google\protobuf\compiler\cpp\cpp_generator.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\csharp\csharp_generator.h include\google\protobuf\compiler\csharp\csharp_generator.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\importer.h include\google\protobuf\compiler\importer.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\java\java_generator.h include\google\protobuf\compiler\java\java_generator.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\java\java_names.h include\google\protobuf\compiler\java\java_names.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\javanano\javanano_generator.h include\google\protobuf\compiler\javanano\javanano_generator.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\objectivec\objectivec_generator.h include\google\protobuf\compiler\objectivec\objectivec_generator.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\objectivec\objectivec_helpers.h include\google\protobuf\compiler\objectivec\objectivec_helpers.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\parser.h include\google\protobuf\compiler\parser.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\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
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\descriptor.pb.h include\google\protobuf\descriptor.pb.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\descriptor_database.h include\google\protobuf\descriptor_database.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\duration.pb.h include\google\protobuf\duration.pb.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\dynamic_message.h include\google\protobuf\dynamic_message.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\empty.pb.h include\google\protobuf\empty.pb.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\extension_set.h include\google\protobuf\extension_set.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\field_mask.pb.h include\google\protobuf\field_mask.pb.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_enum_reflection.h include\google\protobuf\generated_enum_reflection.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_enum_util.h include\google\protobuf\generated_enum_util.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_message_reflection.h include\google\protobuf\generated_message_reflection.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_message_util.h include\google\protobuf\generated_message_util.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\coded_stream.h include\google\protobuf\io\coded_stream.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\gzip_stream.h include\google\protobuf\io\gzip_stream.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\printer.h include\google\protobuf\io\printer.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\strtod.h include\google\protobuf\io\strtod.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\tokenizer.h include\google\protobuf\io\tokenizer.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\zero_copy_stream.h include\google\protobuf\io\zero_copy_stream.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\zero_copy_stream_impl.h include\google\protobuf\io\zero_copy_stream_impl.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\zero_copy_stream_impl_lite.h include\google\protobuf\io\zero_copy_stream_impl_lite.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map.h include\google\protobuf\map.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_entry.h include\google\protobuf\map_entry.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_entry_lite.h include\google\protobuf\map_entry_lite.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_field.h include\google\protobuf\map_field.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_field_inl.h include\google\protobuf\map_field_inl.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_field_lite.h include\google\protobuf\map_field_lite.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_type_handler.h include\google\protobuf\map_type_handler.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\message.h include\google\protobuf\message.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\message_lite.h include\google\protobuf\message_lite.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\metadata.h include\google\protobuf\metadata.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\reflection.h include\google\protobuf\reflection.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\reflection_ops.h include\google\protobuf\reflection_ops.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\repeated_field.h include\google\protobuf\repeated_field.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\repeated_field_reflection.h include\google\protobuf\repeated_field_reflection.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\service.h include\google\protobuf\service.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\source_context.pb.h include\google\protobuf\source_context.pb.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\struct.pb.h include\google\protobuf\struct.pb.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomic_sequence_num.h include\google\protobuf\stubs\atomic_sequence_num.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops.h include\google\protobuf\stubs\atomicops.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_aix.h include\google\protobuf\stubs\atomicops_internals_aix.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_arm64_gcc.h include\google\protobuf\stubs\atomicops_internals_arm64_gcc.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_arm_gcc.h include\google\protobuf\stubs\atomicops_internals_arm_gcc.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_arm_qnx.h include\google\protobuf\stubs\atomicops_internals_arm_qnx.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_atomicword_compat.h include\google\protobuf\stubs\atomicops_internals_atomicword_compat.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_generic_gcc.h include\google\protobuf\stubs\atomicops_internals_generic_gcc.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_macosx.h include\google\protobuf\stubs\atomicops_internals_macosx.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_mips_gcc.h include\google\protobuf\stubs\atomicops_internals_mips_gcc.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_pnacl.h include\google\protobuf\stubs\atomicops_internals_pnacl.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_solaris.h include\google\protobuf\stubs\atomicops_internals_solaris.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_tsan.h include\google\protobuf\stubs\atomicops_internals_tsan.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_x86_gcc.h include\google\protobuf\stubs\atomicops_internals_x86_gcc.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h include\google\protobuf\stubs\atomicops_internals_x86_msvc.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\casts.h include\google\protobuf\stubs\casts.h
+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\once.h include\google\protobuf\stubs\once.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\platform_macros.h include\google\protobuf\stubs\platform_macros.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\shared_ptr.h include\google\protobuf\stubs\shared_ptr.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\singleton.h include\google\protobuf\stubs\singleton.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\stl_util.h include\google\protobuf\stubs\stl_util.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\template_util.h include\google\protobuf\stubs\template_util.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\type_traits.h include\google\protobuf\stubs\type_traits.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\text_format.h include\google\protobuf\text_format.h
+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\wire_format.h include\google\protobuf\wire_format.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\wire_format_lite.h include\google\protobuf\wire_format_lite.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\wire_format_lite_inl.h include\google\protobuf\wire_format_lite_inl.h
+copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\wrappers.pb.h include\google\protobuf\wrappers.pb.h
+copy ${PROTOBUF_BINARY_WIN32_PATH}\google\protobuf\stubs\pbconfig.h include\google\protobuf\stubs\pbconfig.h
diff --git a/cmake/find_hash_map.cmake b/cmake/find_hash_map.cmake
deleted file mode 100644
index 22796fb8..00000000
--- a/cmake/find_hash_map.cmake
+++ /dev/null
@@ -1,119 +0,0 @@
-include(CheckCXXSourceCompiles)
-
-function(find_hash_map)
- set(HAVE_HASH_MAP 1 PARENT_SCOPE)
- set(HAVE_HASH_SET 1 PARENT_SCOPE)
- # Search for hash_map in the following order:
- # 1. <unordered_map> ::std::unordered_map
- # 2. <tr1/unordered_map> ::std::tr1::unordered_map
- # 3. <hash_map> ::hash_map
- # 4. <hash_map> ::stdext::hash_map
- # 5. <ext/hash_map> ::std::hash_map
- # 6. <ext/hash_map> ::__gnu_cxx::hash_map
- check_cxx_source_compiles("
- #include <unordered_map>
- int main() { ::std::unordered_map<int, int> v; return v[0]; }
- " HAS_STD_UNORDERED_MAP)
- if (HAS_STD_UNORDERED_MAP)
- set(HASH_NAMESPACE ::std PARENT_SCOPE)
- set(HASH_MAP_H <unordered_map> PARENT_SCOPE)
- set(HASH_MAP_CLASS unordered_map PARENT_SCOPE)
- set(HASH_SET_H <unordered_set> PARENT_SCOPE)
- set(HASH_SET_CLASS unordered_set PARENT_SCOPE)
- return()
- endif (HAS_STD_UNORDERED_MAP)
-
- check_cxx_source_compiles("
- #include <tr1/unordered_map>
- int main() { ::std::tr1::unordered_map<int, int> v; return v[0]; }
- " HAS_STD_TR1_UNORDERED_MAP)
- if (HAS_STD_TR1_UNORDERED_MAP)
- set(HASH_NAMESPACE ::std::tr1 PARENT_SCOPE)
- set(HASH_MAP_H <tr1/unordered_map> PARENT_SCOPE)
- set(HASH_MAP_CLASS unordered_map PARENT_SCOPE)
- set(HASH_SET_H <tr1/unordered_set> PARENT_SCOPE)
- set(HASH_SET_CLASS unordered_set PARENT_SCOPE)
- return()
- endif (HAS_STD_TR1_UNORDERED_MAP)
-
- check_cxx_source_compiles("
- #include <hash_map>
- int main() { ::hash_map<int, int> v; return v[0]; }
- " HAS_HASH_MAP)
- if (HAS_HASH_MAP)
- set(HASH_NAMESPACE :: PARENT_SCOPE)
- set(HASH_MAP_H <hash_map> PARENT_SCOPE)
- set(HASH_MAP_CLASS hash_map PARENT_SCOPE)
- set(HASH_SET_H <hash_set> PARENT_SCOPE)
- set(HASH_SET_CLASS hash_set PARENT_SCOPE)
- return()
- endif (HAS_HASH_MAP)
-
- check_cxx_source_compiles("
- #include <hash_map>
- int main() { ::stdext::hash_map<int, int> v; return v[0]; }
- " HAS_STDEXT_HASH_MAP)
- if (HAS_STDEXT_HASH_MAP)
- set(HASH_NAMESPACE ::stdext PARENT_SCOPE)
- set(HASH_MAP_H <hash_map> PARENT_SCOPE)
- set(HASH_MAP_CLASS hash_map PARENT_SCOPE)
- set(HASH_SET_H <hash_set> PARENT_SCOPE)
- set(HASH_SET_CLASS hash_set PARENT_SCOPE)
- return()
- endif (HAS_STDEXT_HASH_MAP)
-
- check_cxx_source_compiles("
- #include <ext/hash_map>
- int main() { ::std::hash_map<int, int> v; return v[0]; }
- " HAS_STD_HASH_MAP)
- if (HAS_STD_HASH_MAP)
- set(HASH_NAMESPACE ::std PARENT_SCOPE)
- set(HASH_MAP_H <ext/hash_map> PARENT_SCOPE)
- set(HASH_MAP_CLASS hash_map PARENT_SCOPE)
- set(HASH_SET_H <ext/hash_set> PARENT_SCOPE)
- set(HASH_SET_CLASS hash_set PARENT_SCOPE)
- return()
- endif (HAS_STD_HASH_MAP)
-
- check_cxx_source_compiles("
- #include <ext/hash_map>
- int main() { ::__gnu_cxx::hash_map<int, int> v; return v[0]; }
- " HAS_GNU_CXX_HASH_MAP)
- if (HAS_GNU_CXX_HASH_MAP)
- set(HASH_NAMESPACE ::gnu_cxx PARENT_SCOPE)
- set(HASH_MAP_H <ext/hash_map> PARENT_SCOPE)
- set(HASH_MAP_CLASS hash_map PARENT_SCOPE)
- set(HASH_SET_H <ext/hash_set> PARENT_SCOPE)
- set(HASH_SET_CLASS hash_set PARENT_SCOPE)
- return()
- endif (HAS_GNU_CXX_HASH_MAP)
-
- set(HAVE_HASH_MAP 0 PARENT_SCOPE)
- set(HAVE_HASH_SET 0 PARENT_SCOPE)
-endfunction()
-
-function(find_hash_compare)
- if (MSVC)
- check_cxx_source_compiles("
- #include ${HASH_MAP_H}
- int main() { ::std::hash_compare<int> cp; return cp(0); }
- " HAS_STD_HASH_COMPARE)
- if (HAS_STD_HASH_COMPARE)
- set(HASH_COMPARE ::std::hash_compare PARENT_SCOPE)
- return()
- endif (HAS_STD_HASH_COMPARE)
-
- check_cxx_source_compiles("
- #include ${HASH_MAP_H}
- int main() { ::stdext::hash_compare<int> cp; return cp(0); }
- " HAS_STDEXT_HASH_COMPARE)
- if (HAS_STDEXT_HASH_COMPARE)
- set(HASH_COMPARE ::stdext::hash_compare PARENT_SCOPE)
- return()
- endif (HAS_STDEXT_HASH_COMPARE)
- endif (MSVC)
- set(HASH_COMPARE PARENT_SCOPE)
-endfunction()
-
-find_hash_map()
-find_hash_compare()
diff --git a/cmake/pbconfig.h.in b/cmake/pbconfig.h.in
deleted file mode 100644
index fdc59686..00000000
--- a/cmake/pbconfig.h.in
+++ /dev/null
@@ -1,9 +0,0 @@
-#define GOOGLE_PROTOBUF_HAVE_HASH_MAP ${HAVE_HASH_MAP}
-#define GOOGLE_PROTOBUF_HAVE_HASH_SET ${HAVE_HASH_MAP}
-
-#define GOOGLE_PROTOBUF_HASH_NAMESPACE ${HASH_NAMESPACE}
-#define GOOGLE_PROTOBUF_HASH_MAP_H ${HASH_MAP_H}
-#define GOOGLE_PROTOBUF_HASH_MAP_CLASS ${HASH_MAP_CLASS}
-#define GOOGLE_PROTOBUF_HASH_SET_H ${HASH_SET_H}
-#define GOOGLE_PROTOBUF_HASH_SET_CLASS ${HASH_SET_CLASS}
-#define GOOGLE_PROTOBUF_HASH_COMPARE ${HASH_COMPARE}
diff --git a/cmake/tests.cmake b/cmake/tests.cmake
index 24891521..8fb5eef1 100644
--- a/cmake/tests.cmake
+++ b/cmake/tests.cmake
@@ -25,6 +25,7 @@ set(tests_protos
google/protobuf/unittest_drop_unknown_fields.proto
google/protobuf/unittest_embed_optimize_for.proto
google/protobuf/unittest_empty.proto
+ google/protobuf/unittest_enormous_descriptor.proto
google/protobuf/unittest_import.proto
google/protobuf/unittest_import_public.proto
google/protobuf/unittest_lite_imports_nonlite.proto
diff --git a/cmake/update_file_lists.sh b/cmake/update_file_lists.sh
index d64eb4ae..4466c021 100644..100755
--- a/cmake/update_file_lists.sh
+++ b/cmake/update_file_lists.sh
@@ -39,8 +39,8 @@ set_variable_value() {
/^set\\($VARNAME/ {
start = 1;
print \$0;
- split(values, vlist, \" \");
- for (i = 1; i <= length(vlist); ++i) {
+ len = split(values, vlist, \" \");
+ for (i = 1; i <= len; ++i) {
printf(\" %s%s\\n\", prefix, vlist[i]);
}
next;
@@ -58,12 +58,12 @@ set_variable_value() {
sort_files() {
for FILE in $@; do
echo $FILE
- done | sort | uniq
+ done | LC_ALL=C sort | uniq
}
MAKEFILE=../src/Makefile.am
CMAKE_DIR=.
-EXTRACT_INCLUDES_BAT=../vsprojects/extract_includes.bat
+EXTRACT_INCLUDES_BAT=extract_includes.bat.in
[ -f "$MAKEFILE" ] || {
echo "Cannot find: $MAKEFILE"
@@ -105,10 +105,17 @@ set_variable_value $CMAKE_DIR/tests.cmake tests_files $COMMON_PREFIX $TEST_SOURC
set_variable_value $CMAKE_DIR/tests.cmake lite_test_files $COMMON_PREFIX $LITE_TEST_SOURCES
# Generate extract_includes.bat
-for HEADER in $HEADERS; do
- echo $(dirname $HEADER) | sed "s/\\//\\\\/g"
-done | sort | uniq | sed "s/^/mkdir include\\\\/" > $EXTRACT_INCLUDES_BAT
-for HEADER in $HEADERS; do
- WINPATH=$(echo $HEADER | sed 's;/;\\\\;g')
- echo "copy ..\\src\\$WINPATH include\\$WINPATH" >> $EXTRACT_INCLUDES_BAT
+echo "mkdir include" > $EXTRACT_INCLUDES_BAT
+for HEADER in $PUBLIC_HEADERS; do
+ HEADER_DIR=$(dirname $HEADER)
+ while [ ! "$HEADER_DIR" = "." ]; do
+ echo $HEADER_DIR | sed "s/\\//\\\\/g"
+ HEADER_DIR=$(dirname $HEADER_DIR)
+ done
+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
done
+# Add pbconfig.h.
+echo "copy \${PROTOBUF_BINARY_WIN32_PATH}\\google\\protobuf\\stubs\\pbconfig.h include\\google\\protobuf\\stubs\\pbconfig.h" >> $EXTRACT_INCLUDES_BAT
diff --git a/config.h.include b/config.h.include
deleted file mode 100644
index 0c557fbe..00000000
--- a/config.h.include
+++ /dev/null
@@ -1,7 +0,0 @@
-HASH_MAP_CLASS
-HASH_MAP_H
-HASH_NAMESPACE
-HASH_SET_CLASS
-HASH_SET_H
-HAVE_HASH_MAP
-HAVE_HASH_SET
diff --git a/configure.ac b/configure.ac
index 8018cc75..b36fa0c0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -17,6 +17,9 @@ AC_INIT([Protocol Buffers],[3.0.0-alpha-4-pre],[protobuf@googlegroups.com],[prot
AM_MAINTAINER_MODE([enable])
AC_CONFIG_SRCDIR(src/google/protobuf/message.cc)
+# The config file is generated but not used by the source code, since we only
+# need very few of them, e.g. HAVE_PTHREAD and HAVE_ZLIB. Those macros are
+# passed down in CXXFLAGS manually in src/Makefile.am
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
@@ -146,6 +149,9 @@ AS_IF([test "$with_protoc" != "no"], [
AM_CONDITIONAL([USE_EXTERNAL_PROTOC], [test "$with_protoc" != "no"])
ACX_PTHREAD
+AM_CONDITIONAL([HAVE_PTHREAD], [test "x$acx_pthread_ok" = "xyes"])
+
+# We still keep this for improving pbconfig.h for unsupported platforms.
AC_CXX_STL_HASH
case "$target_os" in
diff --git a/conformance/Makefile.am b/conformance/Makefile.am
index 95343f14..cccbac9e 100644
--- a/conformance/Makefile.am
+++ b/conformance/Makefile.am
@@ -57,7 +57,7 @@ conformance-java: javac_middleman
# Targets for actually running tests.
test_cpp: protoc_middleman conformance-test-runner conformance-cpp
- ./conformance-test-runner ./conformance-cpp
+ ./conformance-test-runner --failure_list failure_list_cpp.txt ./conformance-cpp
test_java: protoc_middleman conformance-test-runner conformance-java
./conformance-test-runner ./conformance-java
diff --git a/conformance/conformance_test.cc b/conformance/conformance_test.cc
index 857f2152..7a7fc6f5 100644
--- a/conformance/conformance_test.cc
+++ b/conformance/conformance_test.cc
@@ -126,12 +126,11 @@ string submsg(uint32_t fn, const string& buf) {
#define UNKNOWN_FIELD 666
-uint32_t GetFieldNumberForType(WireFormatLite::FieldType type, bool repeated) {
+uint32_t GetFieldNumberForType(FieldDescriptor::Type type, bool repeated) {
const Descriptor* d = TestAllTypes().GetDescriptor();
for (int i = 0; i < d->field_count(); i++) {
const FieldDescriptor* f = d->field(i);
- if (static_cast<WireFormatLite::FieldType>(f->type()) == type &&
- f->is_repeated() == repeated) {
+ if (f->type() == type && f->is_repeated() == repeated) {
return f->number();
}
}
@@ -139,16 +138,37 @@ uint32_t GetFieldNumberForType(WireFormatLite::FieldType type, bool repeated) {
return 0;
}
+string UpperCase(string str) {
+ for (int i = 0; i < str.size(); i++) {
+ str[i] = toupper(str[i]);
+ }
+ return str;
+}
+
} // anonymous namespace
namespace google {
namespace protobuf {
-void ConformanceTestSuite::ReportSuccess() {
+void ConformanceTestSuite::ReportSuccess(const string& test_name) {
+ if (expected_to_fail_.erase(test_name) != 0) {
+ StringAppendF(&output_,
+ "ERROR: test %s is in the failure list, but test succeeded. "
+ "Remove it from the failure list.\n",
+ test_name.c_str());
+ unexpected_succeeding_tests_.insert(test_name);
+ }
successes_++;
}
-void ConformanceTestSuite::ReportFailure(const char *fmt, ...) {
+void ConformanceTestSuite::ReportFailure(const string& test_name,
+ const char* fmt, ...) {
+ if (expected_to_fail_.erase(test_name) == 1) {
+ StringAppendF(&output_, "FAILED AS EXPECTED, test=%s: ", test_name.c_str());
+ } else {
+ StringAppendF(&output_, "ERROR, test=%s: ", test_name.c_str());
+ unexpected_failing_tests_.insert(test_name);
+ }
va_list args;
va_start(args, fmt);
StringAppendV(&output_, fmt, args);
@@ -156,8 +176,13 @@ void ConformanceTestSuite::ReportFailure(const char *fmt, ...) {
failures_++;
}
-void ConformanceTestSuite::RunTest(const ConformanceRequest& request,
+void ConformanceTestSuite::RunTest(const string& test_name,
+ const ConformanceRequest& request,
ConformanceResponse* response) {
+ if (test_names_.insert(test_name).second == false) {
+ GOOGLE_LOG(FATAL) << "Duplicated test name: " << test_name;
+ }
+
string serialized_request;
string serialized_response;
request.SerializeToString(&serialized_request);
@@ -170,14 +195,16 @@ void ConformanceTestSuite::RunTest(const ConformanceRequest& request,
}
if (verbose_) {
- StringAppendF(&output_, "conformance test: request=%s, response=%s\n",
+ StringAppendF(&output_, "conformance test: name=%s, request=%s, response=%s\n",
+ test_name.c_str(),
request.ShortDebugString().c_str(),
response->ShortDebugString().c_str());
}
}
-void ConformanceTestSuite::DoExpectParseFailureForProto(const string& proto,
- int line) {
+// Expect that this precise protobuf will cause a parse error.
+void ConformanceTestSuite::ExpectParseFailureForProto(
+ const string& proto, const string& test_name) {
ConformanceRequest request;
ConformanceResponse response;
request.set_protobuf_payload(proto);
@@ -186,31 +213,29 @@ void ConformanceTestSuite::DoExpectParseFailureForProto(const string& proto,
// we let it send its response as this. We must not leave it unspecified.
request.set_requested_output(ConformanceRequest::PROTOBUF);
- RunTest(request, &response);
+ RunTest(test_name, request, &response);
if (response.result_case() == ConformanceResponse::kParseError) {
- ReportSuccess();
+ ReportSuccess(test_name);
} else {
- ReportFailure("Should have failed, but didn't. Line: %d, Request: %s, "
+ ReportFailure(test_name,
+ "Should have failed to parse, but didn't. Request: %s, "
"response: %s\n",
- line,
request.ShortDebugString().c_str(),
response.ShortDebugString().c_str());
}
}
-// Expect that this precise protobuf will cause a parse error.
-#define ExpectParseFailureForProto(proto) DoExpectParseFailureForProto(proto, __LINE__)
-
// Expect that this protobuf will cause a parse error, even if it is followed
// by valid protobuf data. We can try running this twice: once with this
// data verbatim and once with this data followed by some valid data.
//
// TODO(haberman): implement the second of these.
-#define ExpectHardParseFailureForProto(proto) DoExpectParseFailureForProto(proto, __LINE__)
-
+void ConformanceTestSuite::ExpectHardParseFailureForProto(
+ const string& proto, const string& test_name) {
+ return ExpectParseFailureForProto(proto, test_name);
+}
-void ConformanceTestSuite::TestPrematureEOFForType(
- WireFormatLite::FieldType type) {
+void ConformanceTestSuite::TestPrematureEOFForType(FieldDescriptor::Type type) {
// Incomplete values for each wire type.
static const string incompletes[6] = {
string("\x80"), // VARINT
@@ -223,45 +248,51 @@ void ConformanceTestSuite::TestPrematureEOFForType(
uint32_t fieldnum = GetFieldNumberForType(type, false);
uint32_t rep_fieldnum = GetFieldNumberForType(type, true);
- WireFormatLite::WireType wire_type =
- WireFormatLite::WireTypeForFieldType(type);
+ WireFormatLite::WireType wire_type = WireFormatLite::WireTypeForFieldType(
+ static_cast<WireFormatLite::FieldType>(type));
const string& incomplete = incompletes[wire_type];
+ const string type_name =
+ UpperCase(string(".") + FieldDescriptor::TypeName(type));
- // EOF before a known non-repeated value.
- ExpectParseFailureForProto(tag(fieldnum, wire_type));
+ ExpectParseFailureForProto(
+ tag(fieldnum, wire_type),
+ "PrematureEofBeforeKnownNonRepeatedValue" + type_name);
- // EOF before a known repeated value.
- ExpectParseFailureForProto(tag(rep_fieldnum, wire_type));
+ ExpectParseFailureForProto(
+ tag(rep_fieldnum, wire_type),
+ "PrematureEofBeforeKnownRepeatedValue" + type_name);
- // EOF before an unknown value.
- ExpectParseFailureForProto(tag(UNKNOWN_FIELD, wire_type));
+ ExpectParseFailureForProto(
+ tag(UNKNOWN_FIELD, wire_type),
+ "PrematureEofBeforeUnknownValue" + type_name);
- // EOF inside a known non-repeated value.
ExpectParseFailureForProto(
- cat( tag(fieldnum, wire_type), incomplete ));
+ cat( tag(fieldnum, wire_type), incomplete ),
+ "PrematureEofInsideKnownNonRepeatedValue" + type_name);
- // EOF inside a known repeated value.
ExpectParseFailureForProto(
- cat( tag(rep_fieldnum, wire_type), incomplete ));
+ cat( tag(rep_fieldnum, wire_type), incomplete ),
+ "PrematureEofInsideKnownRepeatedValue" + type_name);
- // EOF inside an unknown value.
ExpectParseFailureForProto(
- cat( tag(UNKNOWN_FIELD, wire_type), incomplete ));
+ cat( tag(UNKNOWN_FIELD, wire_type), incomplete ),
+ "PrematureEofInsideUnknownValue" + type_name);
if (wire_type == WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
- // EOF in the middle of delimited data for known non-repeated value.
ExpectParseFailureForProto(
- cat( tag(fieldnum, wire_type), varint(1) ));
+ cat( tag(fieldnum, wire_type), varint(1) ),
+ "PrematureEofInDelimitedDataForKnownNonRepeatedValue" + type_name);
- // EOF in the middle of delimited data for known repeated value.
ExpectParseFailureForProto(
- cat( tag(rep_fieldnum, wire_type), varint(1) ));
+ cat( tag(rep_fieldnum, wire_type), varint(1) ),
+ "PrematureEofInDelimitedDataForKnownRepeatedValue" + type_name);
// EOF in the middle of delimited data for unknown value.
ExpectParseFailureForProto(
- cat( tag(UNKNOWN_FIELD, wire_type), varint(1) ));
+ cat( tag(UNKNOWN_FIELD, wire_type), varint(1) ),
+ "PrematureEofInDelimitedDataForUnknownValue" + type_name);
- if (type == WireFormatLite::TYPE_MESSAGE) {
+ if (type == FieldDescriptor::TYPE_MESSAGE) {
// Submessage ends in the middle of a value.
string incomplete_submsg =
cat( tag(WireFormatLite::TYPE_INT32, WireFormatLite::WIRETYPE_VARINT),
@@ -269,42 +300,86 @@ void ConformanceTestSuite::TestPrematureEOFForType(
ExpectHardParseFailureForProto(
cat( tag(fieldnum, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
varint(incomplete_submsg.size()),
- incomplete_submsg ));
+ incomplete_submsg ),
+ "PrematureEofInSubmessageValue" + type_name);
}
- } else if (type != WireFormatLite::TYPE_GROUP) {
+ } else if (type != FieldDescriptor::TYPE_GROUP) {
// Non-delimited, non-group: eligible for packing.
// Packed region ends in the middle of a value.
ExpectHardParseFailureForProto(
cat( tag(rep_fieldnum, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
varint(incomplete.size()),
- incomplete ));
+ incomplete ),
+ "PrematureEofInPackedFieldValue" + type_name);
// EOF in the middle of packed region.
ExpectParseFailureForProto(
cat( tag(rep_fieldnum, WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
- varint(1) ));
+ varint(1) ),
+ "PrematureEofInPackedField" + type_name);
}
}
-void ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
+void ConformanceTestSuite::SetFailureList(const vector<string>& failure_list) {
+ expected_to_fail_.clear();
+ std::copy(failure_list.begin(), failure_list.end(),
+ std::inserter(expected_to_fail_, expected_to_fail_.end()));
+}
+
+bool ConformanceTestSuite::CheckSetEmpty(const set<string>& set_to_check,
+ const char* msg) {
+ if (set_to_check.empty()) {
+ return true;
+ } else {
+ StringAppendF(&output_, "\n");
+ StringAppendF(&output_, "ERROR: %s:\n", msg);
+ for (set<string>::const_iterator iter = set_to_check.begin();
+ iter != set_to_check.end(); ++iter) {
+ StringAppendF(&output_, "%s\n", iter->c_str());
+ }
+ return false;
+ }
+}
+
+bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
std::string* output) {
runner_ = runner;
output_.clear();
successes_ = 0;
failures_ = 0;
+ test_names_.clear();
+ unexpected_failing_tests_.clear();
+ unexpected_succeeding_tests_.clear();
for (int i = 1; i <= FieldDescriptor::MAX_TYPE; i++) {
if (i == FieldDescriptor::TYPE_GROUP) continue;
- TestPrematureEOFForType(static_cast<WireFormatLite::FieldType>(i));
+ TestPrematureEOFForType(static_cast<FieldDescriptor::Type>(i));
}
+ StringAppendF(&output_, "\n");
StringAppendF(&output_,
"CONFORMANCE SUITE FINISHED: completed %d tests, %d successes, "
"%d failures.\n",
successes_ + failures_, successes_, failures_);
+ bool ok =
+ CheckSetEmpty(expected_to_fail_,
+ "These tests were listed in the failure list, but they "
+ "don't exist. Remove them from the failure list") &&
+
+ CheckSetEmpty(unexpected_failing_tests_,
+ "These tests failed. If they can't be fixed right now, "
+ "you can add them to the failure list so the overall "
+ "suite can succeed") &&
+
+ CheckSetEmpty(unexpected_succeeding_tests_,
+ "These tests succeeded, even though they were listed in "
+ "the failure list. Remove them from the failure list");
+
output->assign(output_);
+
+ return ok;
}
} // namespace protobuf
diff --git a/conformance/conformance_test.h b/conformance/conformance_test.h
index c16f9c0b..764a8d33 100644
--- a/conformance/conformance_test.h
+++ b/conformance/conformance_test.h
@@ -83,24 +83,50 @@ class ConformanceTestSuite {
public:
ConformanceTestSuite() : verbose_(false) {}
+ // Sets the list of tests that are expected to fail when RunSuite() is called.
+ // RunSuite() will fail unless the set of failing tests is exactly the same
+ // as this list.
+ void SetFailureList(const std::vector<std::string>& failure_list);
+
// Run all the conformance tests against the given test runner.
// Test output will be stored in "output".
- void RunSuite(ConformanceTestRunner* runner, std::string* output);
+ //
+ // Returns true if the set of failing tests was exactly the same as the
+ // failure list. If SetFailureList() was not called, returns true if all
+ // tests passed.
+ bool RunSuite(ConformanceTestRunner* runner, std::string* output);
private:
- void ReportSuccess();
- void ReportFailure(const char* fmt, ...);
- void RunTest(const conformance::ConformanceRequest& request,
+ void ReportSuccess(const std::string& test_name);
+ void ReportFailure(const std::string& test_name, const char* fmt, ...);
+ void RunTest(const std::string& test_name,
+ const conformance::ConformanceRequest& request,
conformance::ConformanceResponse* response);
- void DoExpectParseFailureForProto(const std::string& proto, int line);
- void TestPrematureEOFForType(
- google::protobuf::internal::WireFormatLite::FieldType type);
-
+ void ExpectParseFailureForProto(const std::string& proto,
+ const std::string& test_name);
+ void ExpectHardParseFailureForProto(const std::string& proto,
+ const std::string& test_name);
+ void TestPrematureEOFForType(google::protobuf::FieldDescriptor::Type type);
+ bool CheckSetEmpty(const set<string>& set_to_check, const char* msg);
ConformanceTestRunner* runner_;
int successes_;
int failures_;
bool verbose_;
std::string output_;
+
+ // The set of test names that are expected to fail in this run, but haven't
+ // failed yet.
+ std::set<std::string> expected_to_fail_;
+
+ // The set of test names that have been run. Used to ensure that there are no
+ // duplicate names in the suite.
+ std::set<std::string> test_names_;
+
+ // The set of tests that failed, but weren't expected to.
+ std::set<std::string> unexpected_failing_tests_;
+
+ // The set of tests that succeeded, but weren't expected to.
+ std::set<std::string> unexpected_succeeding_tests_;
};
} // namespace protobuf
diff --git a/conformance/conformance_test_runner.cc b/conformance/conformance_test_runner.cc
index e0bb50a5..b56e19cf 100644
--- a/conformance/conformance_test_runner.cc
+++ b/conformance/conformance_test_runner.cc
@@ -55,6 +55,8 @@
#include <errno.h>
#include <unistd.h>
+#include <fstream>
+#include <vector>
#include "conformance.pb.h"
#include "conformance_test.h"
@@ -62,6 +64,8 @@
using conformance::ConformanceRequest;
using conformance::ConformanceResponse;
using google::protobuf::internal::scoped_array;
+using std::string;
+using std::vector;
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
@@ -180,18 +184,67 @@ class ForkPipeRunner : public google::protobuf::ConformanceTestRunner {
std::string executable_;
};
+void UsageError() {
+ fprintf(stderr,
+ "Usage: conformance-test-runner [options] <test-program>\n");
+ fprintf(stderr, "\n");
+ fprintf(stderr, "Options:\n");
+ fprintf(stderr,
+ " --failure_list <filename> Use to specify list of tests\n");
+ fprintf(stderr,
+ " that are expected to fail. File\n");
+ fprintf(stderr,
+ " should contain one test name per\n");
+ fprintf(stderr,
+ " line. Use '#' for comments.\n");
+ exit(1);
+}
+
+void ParseFailureList(const char *filename, vector<string>* failure_list) {
+ std::ifstream infile(filename);
+ for (string line; getline(infile, line);) {
+ // Remove whitespace.
+ line.erase(std::remove_if(line.begin(), line.end(), ::isspace),
+ line.end());
+
+ // Remove comments.
+ line = line.substr(0, line.find("#"));
+
+ if (!line.empty()) {
+ failure_list->push_back(line);
+ }
+ }
+}
int main(int argc, char *argv[]) {
- if (argc < 2) {
- fprintf(stderr, "Usage: conformance-test-runner <test-program>\n");
- exit(1);
+ int arg = 1;
+ char *program;
+ vector<string> failure_list;
+
+ for (int arg = 1; arg < argc; ++arg) {
+ if (strcmp(argv[arg], "--failure_list") == 0) {
+ if (++arg == argc) UsageError();
+ ParseFailureList(argv[arg], &failure_list);
+ } else if (argv[arg][0] == '-') {
+ fprintf(stderr, "Unknown option: %s\n", argv[arg]);
+ UsageError();
+ } else {
+ if (arg != argc - 1) {
+ fprintf(stderr, "Too many arguments.\n");
+ UsageError();
+ }
+ program = argv[arg];
+ }
}
- ForkPipeRunner runner(argv[1]);
+ ForkPipeRunner runner(program);
google::protobuf::ConformanceTestSuite suite;
+ suite.SetFailureList(failure_list);
std::string output;
- suite.RunSuite(&runner, &output);
+ bool ok = suite.RunSuite(&runner, &output);
fwrite(output.c_str(), 1, output.size(), stderr);
+
+ return ok ? EXIT_SUCCESS : EXIT_FAILURE;
}
diff --git a/conformance/failure_list_cpp.txt b/conformance/failure_list_cpp.txt
new file mode 100644
index 00000000..d792eddd
--- /dev/null
+++ b/conformance/failure_list_cpp.txt
@@ -0,0 +1,21 @@
+# This is the list of conformance tests that are known to fail for the C++
+# implementation right now. These should be fixed.
+#
+# By listing them here we can keep tabs on which ones are failing and be sure
+# that we don't introduce regressions in other tests.
+#
+# TODO(haberman): insert links to corresponding bugs tracking the issue.
+# Should we use GitHub issues or the Google-internal bug tracker?
+
+PrematureEofBeforeKnownRepeatedValue.MESSAGE
+PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE
+PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE
+PrematureEofInPackedField.BOOL
+PrematureEofInPackedField.ENUM
+PrematureEofInPackedField.INT32
+PrematureEofInPackedField.INT64
+PrematureEofInPackedField.SINT32
+PrematureEofInPackedField.SINT64
+PrematureEofInPackedField.UINT32
+PrematureEofInPackedField.UINT64
+PrematureEofInsideKnownRepeatedValue.MESSAGE
diff --git a/javanano/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java b/javanano/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java
index b1b0c53a..322ada8e 100644
--- a/javanano/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java
+++ b/javanano/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java
@@ -33,6 +33,7 @@ package com.google.protobuf.nano;
import java.io.IOException;
import java.nio.BufferOverflowException;
import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
import java.nio.ReadOnlyBufferException;
/**
@@ -61,6 +62,7 @@ public final class CodedOutputByteBufferNano {
private CodedOutputByteBufferNano(final ByteBuffer buffer) {
this.buffer = buffer;
+ this.buffer.order(ByteOrder.LITTLE_ENDIAN);
}
/**
@@ -1038,24 +1040,20 @@ public final class CodedOutputByteBufferNano {
/** Write a little-endian 32-bit integer. */
public void writeRawLittleEndian32(final int value) throws IOException {
- writeRawByte((value ) & 0xFF);
- writeRawByte((value >> 8) & 0xFF);
- writeRawByte((value >> 16) & 0xFF);
- writeRawByte((value >> 24) & 0xFF);
+ if (buffer.remaining() < 4) {
+ throw new OutOfSpaceException(buffer.position(), buffer.limit());
+ }
+ buffer.putInt(value);
}
public static final int LITTLE_ENDIAN_32_SIZE = 4;
/** Write a little-endian 64-bit integer. */
public void writeRawLittleEndian64(final long value) throws IOException {
- writeRawByte((int)(value ) & 0xFF);
- writeRawByte((int)(value >> 8) & 0xFF);
- writeRawByte((int)(value >> 16) & 0xFF);
- writeRawByte((int)(value >> 24) & 0xFF);
- writeRawByte((int)(value >> 32) & 0xFF);
- writeRawByte((int)(value >> 40) & 0xFF);
- writeRawByte((int)(value >> 48) & 0xFF);
- writeRawByte((int)(value >> 56) & 0xFF);
+ if (buffer.remaining() < 8) {
+ throw new OutOfSpaceException(buffer.position(), buffer.limit());
+ }
+ buffer.putLong(value);
}
public static final int LITTLE_ENDIAN_64_SIZE = 8;
diff --git a/objectivec/DevTools/compile_testing_protos.sh b/objectivec/DevTools/compile_testing_protos.sh
new file mode 100755
index 00000000..f414bd87
--- /dev/null
+++ b/objectivec/DevTools/compile_testing_protos.sh
@@ -0,0 +1,113 @@
+#!/bin/bash
+
+# Invoked by the Xcode projects to build the protos needed for the unittests.
+
+set -eu
+
+readonly OUTPUT_DIR="${PROJECT_DERIVED_FILE_DIR}/protos"
+
+# Helper for bailing.
+die() {
+ echo "Error: $1"
+ exit 2
+}
+
+# What to do.
+case "${ACTION}" in
+ "")
+ # Build, fall thru
+ ;;
+ "clean")
+ rm -rf "${OUTPUT_DIR}"
+ exit 0
+ ;;
+ *)
+ die "Unknown action requested: ${ACTION}"
+ ;;
+esac
+
+# Move to the top of the protobuf directories.
+cd "${SRCROOT}/.."
+
+[[ -x src/protoc ]] || \
+ die "Could not find the protoc binary; make sure you have built it (objectivec/DevTools/full_mac_build.sh -h)."
+
+RUN_PROTOC=no
+if [[ ! -d "${OUTPUT_DIR}" ]] ; then
+ RUN_PROTOC=yes
+else
+ # Find the newest input file (protos, compiler, and this script).
+ # (these patterns catch some extra stuff, but better to over sample than
+ # under)
+ readonly NewestInput=$(find \
+ src/google/protobuf/*.proto \
+ objectivec/Tests/*.proto \
+ src/.libs src/*.la src/protoc \
+ objectivec/DevTools/compile_testing_protos.sh \
+ -type f -print0 \
+ | xargs -0 stat -f "%m %N" \
+ | sort -n | tail -n1 | cut -f2- -d" ")
+ # Find the oldest output file.
+ readonly OldestOutput=$(find \
+ "${OUTPUT_DIR}" \
+ -type f -print0 \
+ | xargs -0 stat -f "%m %N" \
+ | sort -n -r | tail -n1 | cut -f2- -d" ")
+ # If the newest input is newer than the oldest output, regenerate.
+ if [[ "${NewestInput}" -nt "${OldestOutput}" ]] ; then
+ RUN_PROTOC=yes
+ fi
+fi
+
+if [[ "${RUN_PROTOC}" != "yes" ]] ; then
+ # Up to date.
+ exit 0
+fi
+
+# Ensure the output dir exists
+mkdir -p "${OUTPUT_DIR}/google/protobuf"
+
+CORE_PROTO_FILES=( \
+ src/google/protobuf/unittest_custom_options.proto \
+ src/google/protobuf/unittest_enormous_descriptor.proto \
+ src/google/protobuf/unittest_embed_optimize_for.proto \
+ src/google/protobuf/unittest_empty.proto \
+ src/google/protobuf/unittest_import.proto \
+ src/google/protobuf/unittest_import_lite.proto \
+ src/google/protobuf/unittest_lite.proto \
+ src/google/protobuf/unittest_mset.proto \
+ src/google/protobuf/unittest_no_generic_services.proto \
+ src/google/protobuf/unittest_optimize_for.proto \
+ src/google/protobuf/unittest.proto \
+ src/google/protobuf/unittest_import_public.proto \
+ src/google/protobuf/unittest_import_public_lite.proto \
+ src/google/protobuf/unittest_drop_unknown_fields.proto \
+ src/google/protobuf/unittest_preserve_unknown_enum.proto \
+ src/google/protobuf/map_lite_unittest.proto \
+ src/google/protobuf/map_proto2_unittest.proto \
+ src/google/protobuf/map_unittest.proto \
+)
+
+compile_proto() {
+ src/protoc \
+ --objc_out="${OUTPUT_DIR}/google/protobuf" \
+ --proto_path=src/google/protobuf/ \
+ --proto_path=src \
+ $*
+}
+
+for a_proto in "${CORE_PROTO_FILES[@]}" ; do
+ compile_proto "${a_proto}"
+done
+
+OBJC_PROTO_FILES=( \
+ objectivec/Tests/unittest_cycle.proto \
+ objectivec/Tests/unittest_runtime_proto2.proto \
+ objectivec/Tests/unittest_runtime_proto3.proto \
+ objectivec/Tests/unittest_objc.proto \
+ objectivec/Tests/unittest_objc_startup.proto \
+)
+
+for a_proto in "${OBJC_PROTO_FILES[@]}" ; do
+ compile_proto --proto_path="objectivec/Tests" "${a_proto}"
+done
diff --git a/objectivec/DevTools/full_mac_build.sh b/objectivec/DevTools/full_mac_build.sh
index 57c4f438..2192b760 100755
--- a/objectivec/DevTools/full_mac_build.sh
+++ b/objectivec/DevTools/full_mac_build.sh
@@ -162,7 +162,7 @@ wrapped_make -j "${NUM_MAKE_JOBS}" all
wrapped_make -j "${NUM_MAKE_JOBS}" check
header "Ensuring the ObjC descriptors are current."
-# Find the newest input file (protos, compiler, and this script).
+# Find the newest input file (protos, compiler, and the generator script).
# (these patterns catch some extra stuff, but better to over sample than under)
readonly NewestInput=$(find \
src/google/protobuf/*.proto \
diff --git a/objectivec/GPBArray.h b/objectivec/GPBArray.h
index 3fcba7af..b486f27b 100644
--- a/objectivec/GPBArray.h
+++ b/objectivec/GPBArray.h
@@ -30,7 +30,7 @@
#import <Foundation/Foundation.h>
-#import "GPBTypes.h"
+#import "GPBRuntimeTypes.h"
// These classes are used for repeated fields of basic data types. They are used because
// they perform better than boxing into NSNumbers in NSArrays.
diff --git a/objectivec/GPBCodedInputStream.h b/objectivec/GPBCodedInputStream.h
index e9b27e22..b71ee871 100644
--- a/objectivec/GPBCodedInputStream.h
+++ b/objectivec/GPBCodedInputStream.h
@@ -60,7 +60,7 @@
- (int64_t)readSInt64;
- (BOOL)readBool;
- (NSString *)readString;
-- (NSData *)readData;
+- (NSData *)readBytes;
// Read an embedded message field value from the stream.
- (void)readMessage:(GPBMessage *)message
diff --git a/objectivec/GPBCodedInputStream.m b/objectivec/GPBCodedInputStream.m
index 79d31fc7..71758baa 100644
--- a/objectivec/GPBCodedInputStream.m
+++ b/objectivec/GPBCodedInputStream.m
@@ -38,7 +38,7 @@
static const NSUInteger kDefaultRecursionLimit = 64;
-static inline void CheckSize(GPBCodedInputStreamState *state, size_t size) {
+static void CheckSize(GPBCodedInputStreamState *state, size_t size) {
size_t newSize = state->bufferPos + size;
if (newSize > state->bufferSize) {
[NSException raise:NSParseErrorException format:@""];
@@ -50,26 +50,26 @@ static inline void CheckSize(GPBCodedInputStreamState *state, size_t size) {
}
}
-static inline int8_t ReadRawByte(GPBCodedInputStreamState *state) {
+static int8_t ReadRawByte(GPBCodedInputStreamState *state) {
CheckSize(state, sizeof(int8_t));
return ((int8_t *)state->bytes)[state->bufferPos++];
}
-static inline int32_t ReadRawLittleEndian32(GPBCodedInputStreamState *state) {
+static int32_t ReadRawLittleEndian32(GPBCodedInputStreamState *state) {
CheckSize(state, sizeof(int32_t));
int32_t value = OSReadLittleInt32(state->bytes, state->bufferPos);
state->bufferPos += sizeof(int32_t);
return value;
}
-static inline int64_t ReadRawLittleEndian64(GPBCodedInputStreamState *state) {
+static int64_t ReadRawLittleEndian64(GPBCodedInputStreamState *state) {
CheckSize(state, sizeof(int64_t));
int64_t value = OSReadLittleInt64(state->bytes, state->bufferPos);
state->bufferPos += sizeof(int64_t);
return value;
}
-static inline int32_t ReadRawVarint32(GPBCodedInputStreamState *state) {
+static int32_t ReadRawVarint32(GPBCodedInputStreamState *state) {
int8_t tmp = ReadRawByte(state);
if (tmp >= 0) {
return tmp;
@@ -104,7 +104,7 @@ static inline int32_t ReadRawVarint32(GPBCodedInputStreamState *state) {
return result;
}
-static inline int64_t ReadRawVarint64(GPBCodedInputStreamState *state) {
+static int64_t ReadRawVarint64(GPBCodedInputStreamState *state) {
int32_t shift = 0;
int64_t result = 0;
while (shift < 64) {
@@ -119,7 +119,7 @@ static inline int64_t ReadRawVarint64(GPBCodedInputStreamState *state) {
return 0;
}
-static inline void SkipRawData(GPBCodedInputStreamState *state, size_t size) {
+static void SkipRawData(GPBCodedInputStreamState *state, size_t size) {
CheckSize(state, size);
state->bufferPos += size;
}
@@ -222,7 +222,7 @@ NSString *GPBCodedInputStreamReadRetainedString(
return result;
}
-NSData *GPBCodedInputStreamReadRetainedData(GPBCodedInputStreamState *state) {
+NSData *GPBCodedInputStreamReadRetainedBytes(GPBCodedInputStreamState *state) {
int32_t size = ReadRawVarint32(state);
if (size < 0) return nil;
CheckSize(state, size);
@@ -232,7 +232,7 @@ NSData *GPBCodedInputStreamReadRetainedData(GPBCodedInputStreamState *state) {
return result;
}
-NSData *GPBCodedInputStreamReadRetainedDataNoCopy(
+NSData *GPBCodedInputStreamReadRetainedBytesNoCopy(
GPBCodedInputStreamState *state) {
int32_t size = ReadRawVarint32(state);
if (size < 0) return nil;
@@ -453,8 +453,8 @@ void GPBCodedInputStreamCheckLastTagWas(GPBCodedInputStreamState *state,
GPBCodedInputStreamPopLimit(&state_, oldLimit);
}
-- (NSData *)readData {
- return [GPBCodedInputStreamReadRetainedData(&state_) autorelease];
+- (NSData *)readBytes {
+ return [GPBCodedInputStreamReadRetainedBytes(&state_) autorelease];
}
- (uint32_t)readUInt32 {
@@ -499,7 +499,7 @@ void GPBCodedInputStreamCheckLastTagWas(GPBCodedInputStreamState *state,
// Returns true if the passed in bytes are 7 bit ascii.
// This routine needs to be fast.
-static inline bool AreBytesIn7BitASCII(const uint8_t *bytes, NSUInteger len) {
+static bool AreBytesIn7BitASCII(const uint8_t *bytes, NSUInteger len) {
// In the loops below, it's more efficient to collect rather than do
// conditional at every step.
#if __LP64__
@@ -587,7 +587,7 @@ static inline bool AreBytesIn7BitASCII(const uint8_t *bytes, NSUInteger len) {
return true;
}
-static inline void GPBStringInitStringValue(GPBString *string) {
+static void GPBStringInitStringValue(GPBString *string) {
OSSpinLockLock(&string->lock_);
GPBStringInitStringValueAlreadyLocked(string);
OSSpinLockUnlock(&string->lock_);
diff --git a/objectivec/GPBCodedInputStream_PackagePrivate.h b/objectivec/GPBCodedInputStream_PackagePrivate.h
index ba6471ef..e482b4c9 100644
--- a/objectivec/GPBCodedInputStream_PackagePrivate.h
+++ b/objectivec/GPBCodedInputStream_PackagePrivate.h
@@ -114,9 +114,9 @@ int64_t GPBCodedInputStreamReadSInt64(GPBCodedInputStreamState *state);
BOOL GPBCodedInputStreamReadBool(GPBCodedInputStreamState *state);
NSString *GPBCodedInputStreamReadRetainedString(GPBCodedInputStreamState *state)
__attribute((ns_returns_retained));
-NSData *GPBCodedInputStreamReadRetainedData(GPBCodedInputStreamState *state)
+NSData *GPBCodedInputStreamReadRetainedBytes(GPBCodedInputStreamState *state)
__attribute((ns_returns_retained));
-NSData *GPBCodedInputStreamReadRetainedDataNoCopy(
+NSData *GPBCodedInputStreamReadRetainedBytesNoCopy(
GPBCodedInputStreamState *state) __attribute((ns_returns_retained));
size_t GPBCodedInputStreamPushLimit(GPBCodedInputStreamState *state,
diff --git a/objectivec/GPBCodedOutputStream.h b/objectivec/GPBCodedOutputStream.h
index 1f1eb38a..9a237b6e 100644
--- a/objectivec/GPBCodedOutputStream.h
+++ b/objectivec/GPBCodedOutputStream.h
@@ -30,7 +30,7 @@
#import <Foundation/Foundation.h>
-#import "GPBTypes.h"
+#import "GPBRuntimeTypes.h"
#import "GPBWireFormat.h"
@class GPBBoolArray;
@@ -84,110 +84,110 @@
// This block of code is generated, do not edit it directly.
- (void)writeDouble:(int32_t)fieldNumber value:(double)value;
-- (void)writeDoubles:(int32_t)fieldNumber
- values:(GPBDoubleArray *)values
- tag:(uint32_t)tag;
+- (void)writeDoubleArray:(int32_t)fieldNumber
+ values:(GPBDoubleArray *)values
+ tag:(uint32_t)tag;
- (void)writeDoubleNoTag:(double)value;
- (void)writeFloat:(int32_t)fieldNumber value:(float)value;
-- (void)writeFloats:(int32_t)fieldNumber
- values:(GPBFloatArray *)values
- tag:(uint32_t)tag;
+- (void)writeFloatArray:(int32_t)fieldNumber
+ values:(GPBFloatArray *)values
+ tag:(uint32_t)tag;
- (void)writeFloatNoTag:(float)value;
- (void)writeUInt64:(int32_t)fieldNumber value:(uint64_t)value;
-- (void)writeUInt64s:(int32_t)fieldNumber
- values:(GPBUInt64Array *)values
- tag:(uint32_t)tag;
+- (void)writeUInt64Array:(int32_t)fieldNumber
+ values:(GPBUInt64Array *)values
+ tag:(uint32_t)tag;
- (void)writeUInt64NoTag:(uint64_t)value;
- (void)writeInt64:(int32_t)fieldNumber value:(int64_t)value;
-- (void)writeInt64s:(int32_t)fieldNumber
- values:(GPBInt64Array *)values
- tag:(uint32_t)tag;
+- (void)writeInt64Array:(int32_t)fieldNumber
+ values:(GPBInt64Array *)values
+ tag:(uint32_t)tag;
- (void)writeInt64NoTag:(int64_t)value;
- (void)writeInt32:(int32_t)fieldNumber value:(int32_t)value;
-- (void)writeInt32s:(int32_t)fieldNumber
- values:(GPBInt32Array *)values
- tag:(uint32_t)tag;
+- (void)writeInt32Array:(int32_t)fieldNumber
+ values:(GPBInt32Array *)values
+ tag:(uint32_t)tag;
- (void)writeInt32NoTag:(int32_t)value;
- (void)writeUInt32:(int32_t)fieldNumber value:(uint32_t)value;
-- (void)writeUInt32s:(int32_t)fieldNumber
- values:(GPBUInt32Array *)values
- tag:(uint32_t)tag;
+- (void)writeUInt32Array:(int32_t)fieldNumber
+ values:(GPBUInt32Array *)values
+ tag:(uint32_t)tag;
- (void)writeUInt32NoTag:(uint32_t)value;
- (void)writeFixed64:(int32_t)fieldNumber value:(uint64_t)value;
-- (void)writeFixed64s:(int32_t)fieldNumber
- values:(GPBUInt64Array *)values
- tag:(uint32_t)tag;
+- (void)writeFixed64Array:(int32_t)fieldNumber
+ values:(GPBUInt64Array *)values
+ tag:(uint32_t)tag;
- (void)writeFixed64NoTag:(uint64_t)value;
- (void)writeFixed32:(int32_t)fieldNumber value:(uint32_t)value;
-- (void)writeFixed32s:(int32_t)fieldNumber
- values:(GPBUInt32Array *)values
- tag:(uint32_t)tag;
+- (void)writeFixed32Array:(int32_t)fieldNumber
+ values:(GPBUInt32Array *)values
+ tag:(uint32_t)tag;
- (void)writeFixed32NoTag:(uint32_t)value;
- (void)writeSInt32:(int32_t)fieldNumber value:(int32_t)value;
-- (void)writeSInt32s:(int32_t)fieldNumber
- values:(GPBInt32Array *)values
- tag:(uint32_t)tag;
+- (void)writeSInt32Array:(int32_t)fieldNumber
+ values:(GPBInt32Array *)values
+ tag:(uint32_t)tag;
- (void)writeSInt32NoTag:(int32_t)value;
- (void)writeSInt64:(int32_t)fieldNumber value:(int64_t)value;
-- (void)writeSInt64s:(int32_t)fieldNumber
- values:(GPBInt64Array *)values
- tag:(uint32_t)tag;
+- (void)writeSInt64Array:(int32_t)fieldNumber
+ values:(GPBInt64Array *)values
+ tag:(uint32_t)tag;
- (void)writeSInt64NoTag:(int64_t)value;
- (void)writeSFixed64:(int32_t)fieldNumber value:(int64_t)value;
-- (void)writeSFixed64s:(int32_t)fieldNumber
- values:(GPBInt64Array *)values
- tag:(uint32_t)tag;
+- (void)writeSFixed64Array:(int32_t)fieldNumber
+ values:(GPBInt64Array *)values
+ tag:(uint32_t)tag;
- (void)writeSFixed64NoTag:(int64_t)value;
- (void)writeSFixed32:(int32_t)fieldNumber value:(int32_t)value;
-- (void)writeSFixed32s:(int32_t)fieldNumber
- values:(GPBInt32Array *)values
- tag:(uint32_t)tag;
+- (void)writeSFixed32Array:(int32_t)fieldNumber
+ values:(GPBInt32Array *)values
+ tag:(uint32_t)tag;
- (void)writeSFixed32NoTag:(int32_t)value;
- (void)writeBool:(int32_t)fieldNumber value:(BOOL)value;
-- (void)writeBools:(int32_t)fieldNumber
- values:(GPBBoolArray *)values
- tag:(uint32_t)tag;
+- (void)writeBoolArray:(int32_t)fieldNumber
+ values:(GPBBoolArray *)values
+ tag:(uint32_t)tag;
- (void)writeBoolNoTag:(BOOL)value;
- (void)writeEnum:(int32_t)fieldNumber value:(int32_t)value;
-- (void)writeEnums:(int32_t)fieldNumber
- values:(GPBEnumArray *)values
- tag:(uint32_t)tag;
+- (void)writeEnumArray:(int32_t)fieldNumber
+ values:(GPBEnumArray *)values
+ tag:(uint32_t)tag;
- (void)writeEnumNoTag:(int32_t)value;
- (void)writeString:(int32_t)fieldNumber value:(NSString *)value;
-- (void)writeStrings:(int32_t)fieldNumber values:(NSArray *)values;
+- (void)writeStringArray:(int32_t)fieldNumber values:(NSArray *)values;
- (void)writeStringNoTag:(NSString *)value;
- (void)writeMessage:(int32_t)fieldNumber value:(GPBMessage *)value;
-- (void)writeMessages:(int32_t)fieldNumber values:(NSArray *)values;
+- (void)writeMessageArray:(int32_t)fieldNumber values:(NSArray *)values;
- (void)writeMessageNoTag:(GPBMessage *)value;
-- (void)writeData:(int32_t)fieldNumber value:(NSData *)value;
-- (void)writeDatas:(int32_t)fieldNumber values:(NSArray *)values;
-- (void)writeDataNoTag:(NSData *)value;
+- (void)writeBytes:(int32_t)fieldNumber value:(NSData *)value;
+- (void)writeBytesArray:(int32_t)fieldNumber values:(NSArray *)values;
+- (void)writeBytesNoTag:(NSData *)value;
- (void)writeGroup:(int32_t)fieldNumber
value:(GPBMessage *)value;
-- (void)writeGroups:(int32_t)fieldNumber values:(NSArray *)values;
+- (void)writeGroupArray:(int32_t)fieldNumber values:(NSArray *)values;
- (void)writeGroupNoTag:(int32_t)fieldNumber
value:(GPBMessage *)value;
- (void)writeUnknownGroup:(int32_t)fieldNumber
value:(GPBUnknownFieldSet *)value;
-- (void)writeUnknownGroups:(int32_t)fieldNumber values:(NSArray *)values;
+- (void)writeUnknownGroupArray:(int32_t)fieldNumber values:(NSArray *)values;
- (void)writeUnknownGroupNoTag:(int32_t)fieldNumber
value:(GPBUnknownFieldSet *)value;
@@ -230,7 +230,7 @@ size_t GPBComputeUnknownGroupSize(int32_t fieldNumber,
__attribute__((const));
size_t GPBComputeMessageSize(int32_t fieldNumber, GPBMessage *value)
__attribute__((const));
-size_t GPBComputeDataSize(int32_t fieldNumber, NSData *value)
+size_t GPBComputeBytesSize(int32_t fieldNumber, NSData *value)
__attribute__((const));
size_t GPBComputeUInt32Size(int32_t fieldNumber, uint32_t value)
__attribute__((const));
@@ -243,7 +243,7 @@ size_t GPBComputeSInt32Size(int32_t fieldNumber, int32_t value)
size_t GPBComputeSInt64Size(int32_t fieldNumber, int64_t value)
__attribute__((const));
size_t GPBComputeTagSize(int32_t fieldNumber) __attribute__((const));
-size_t GPBComputeWireFormatTagSize(int field_number, GPBType type)
+size_t GPBComputeWireFormatTagSize(int field_number, GPBDataType dataType)
__attribute__((const));
size_t GPBComputeDoubleSizeNoTag(double value) __attribute__((const));
@@ -259,7 +259,7 @@ size_t GPBComputeGroupSizeNoTag(GPBMessage *value) __attribute__((const));
size_t GPBComputeUnknownGroupSizeNoTag(GPBUnknownFieldSet *value)
__attribute__((const));
size_t GPBComputeMessageSizeNoTag(GPBMessage *value) __attribute__((const));
-size_t GPBComputeDataSizeNoTag(NSData *value) __attribute__((const));
+size_t GPBComputeBytesSizeNoTag(NSData *value) __attribute__((const));
size_t GPBComputeUInt32SizeNoTag(int32_t value) __attribute__((const));
size_t GPBComputeEnumSizeNoTag(int32_t value) __attribute__((const));
size_t GPBComputeSFixed32SizeNoTag(int32_t value) __attribute__((const));
@@ -297,22 +297,22 @@ CF_EXTERN_C_END
// Write methods for types that can be in packed arrays.
//%PDDM-DEFINE _WRITE_PACKABLE_DECLS(NAME, ARRAY_TYPE, TYPE)
//%- (void)write##NAME:(int32_t)fieldNumber value:(TYPE)value;
-//%- (void)write##NAME##s:(int32_t)fieldNumber
-//% NAME$S values:(GPB##ARRAY_TYPE##Array *)values
-//% NAME$S tag:(uint32_t)tag;
+//%- (void)write##NAME##Array:(int32_t)fieldNumber
+//% NAME$S values:(GPB##ARRAY_TYPE##Array *)values
+//% NAME$S tag:(uint32_t)tag;
//%- (void)write##NAME##NoTag:(TYPE)value;
//%
// Write methods for types that aren't in packed arrays.
//%PDDM-DEFINE _WRITE_UNPACKABLE_DECLS(NAME, TYPE)
//%- (void)write##NAME:(int32_t)fieldNumber value:(TYPE)value;
-//%- (void)write##NAME##s:(int32_t)fieldNumber values:(NSArray *)values;
+//%- (void)write##NAME##Array:(int32_t)fieldNumber values:(NSArray *)values;
//%- (void)write##NAME##NoTag:(TYPE)value;
//%
// Special write methods for Groups.
//%PDDM-DEFINE _WRITE_GROUP_DECLS(NAME, TYPE)
//%- (void)write##NAME:(int32_t)fieldNumber
//% NAME$S value:(TYPE)value;
-//%- (void)write##NAME##s:(int32_t)fieldNumber values:(NSArray *)values;
+//%- (void)write##NAME##Array:(int32_t)fieldNumber values:(NSArray *)values;
//%- (void)write##NAME##NoTag:(int32_t)fieldNumber
//% NAME$S value:(TYPE)value;
//%
@@ -335,6 +335,6 @@ CF_EXTERN_C_END
//%_WRITE_PACKABLE_DECLS(Enum, Enum, int32_t)
//%_WRITE_UNPACKABLE_DECLS(String, NSString *)
//%_WRITE_UNPACKABLE_DECLS(Message, GPBMessage *)
-//%_WRITE_UNPACKABLE_DECLS(Data, NSData *)
+//%_WRITE_UNPACKABLE_DECLS(Bytes, NSData *)
//%_WRITE_GROUP_DECLS(Group, GPBMessage *)
//%_WRITE_GROUP_DECLS(UnknownGroup, GPBUnknownFieldSet *)
diff --git a/objectivec/GPBCodedOutputStream.m b/objectivec/GPBCodedOutputStream.m
index 9604c128..eb4900f6 100644
--- a/objectivec/GPBCodedOutputStream.m
+++ b/objectivec/GPBCodedOutputStream.m
@@ -372,14 +372,14 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
[self writeMessageNoTag:value];
}
-- (void)writeDataNoTag:(NSData *)value {
+- (void)writeBytesNoTag:(NSData *)value {
GPBWriteRawVarint32(&state_, (int32_t)[value length]);
[self writeRawData:value];
}
-- (void)writeData:(int32_t)fieldNumber value:(NSData *)value {
+- (void)writeBytes:(int32_t)fieldNumber value:(NSData *)value {
GPBWriteTagWithFormat(&state_, fieldNumber, GPBWireFormatLengthDelimited);
- [self writeDataNoTag:value];
+ [self writeBytesNoTag:value];
}
- (void)writeUInt32NoTag:(uint32_t)value {
@@ -436,9 +436,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
}
//%PDDM-DEFINE WRITE_PACKABLE_DEFNS(NAME, ARRAY_TYPE, TYPE, ACCESSOR_NAME)
-//%- (void)write##NAME##s:(int32_t)fieldNumber
-//% NAME$S values:(GPB##ARRAY_TYPE##Array *)values
-//% NAME$S tag:(uint32_t)tag {
+//%- (void)write##NAME##Array:(int32_t)fieldNumber
+//% NAME$S values:(GPB##ARRAY_TYPE##Array *)values
+//% NAME$S tag:(uint32_t)tag {
//% if (tag != 0) {
//% if (values.count == 0) return;
//% __block size_t dataSize = 0;
@@ -461,7 +461,7 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%}
//%
//%PDDM-DEFINE WRITE_UNPACKABLE_DEFNS(NAME, TYPE)
-//%- (void)write##NAME##s:(int32_t)fieldNumber values:(NSArray *)values {
+//%- (void)write##NAME##Array:(int32_t)fieldNumber values:(NSArray *)values {
//% for (TYPE *value in values) {
//% [self write##NAME:fieldNumber value:value];
//% }
@@ -470,9 +470,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Double, Double, double, )
// This block of code is generated, do not edit it directly.
-- (void)writeDoubles:(int32_t)fieldNumber
- values:(GPBDoubleArray *)values
- tag:(uint32_t)tag {
+- (void)writeDoubleArray:(int32_t)fieldNumber
+ values:(GPBDoubleArray *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -497,9 +497,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Float, Float, float, )
// This block of code is generated, do not edit it directly.
-- (void)writeFloats:(int32_t)fieldNumber
- values:(GPBFloatArray *)values
- tag:(uint32_t)tag {
+- (void)writeFloatArray:(int32_t)fieldNumber
+ values:(GPBFloatArray *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -524,9 +524,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(UInt64, UInt64, uint64_t, )
// This block of code is generated, do not edit it directly.
-- (void)writeUInt64s:(int32_t)fieldNumber
- values:(GPBUInt64Array *)values
- tag:(uint32_t)tag {
+- (void)writeUInt64Array:(int32_t)fieldNumber
+ values:(GPBUInt64Array *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -551,9 +551,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Int64, Int64, int64_t, )
// This block of code is generated, do not edit it directly.
-- (void)writeInt64s:(int32_t)fieldNumber
- values:(GPBInt64Array *)values
- tag:(uint32_t)tag {
+- (void)writeInt64Array:(int32_t)fieldNumber
+ values:(GPBInt64Array *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -578,9 +578,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Int32, Int32, int32_t, )
// This block of code is generated, do not edit it directly.
-- (void)writeInt32s:(int32_t)fieldNumber
- values:(GPBInt32Array *)values
- tag:(uint32_t)tag {
+- (void)writeInt32Array:(int32_t)fieldNumber
+ values:(GPBInt32Array *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -605,9 +605,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(UInt32, UInt32, uint32_t, )
// This block of code is generated, do not edit it directly.
-- (void)writeUInt32s:(int32_t)fieldNumber
- values:(GPBUInt32Array *)values
- tag:(uint32_t)tag {
+- (void)writeUInt32Array:(int32_t)fieldNumber
+ values:(GPBUInt32Array *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -632,9 +632,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Fixed64, UInt64, uint64_t, )
// This block of code is generated, do not edit it directly.
-- (void)writeFixed64s:(int32_t)fieldNumber
- values:(GPBUInt64Array *)values
- tag:(uint32_t)tag {
+- (void)writeFixed64Array:(int32_t)fieldNumber
+ values:(GPBUInt64Array *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -659,9 +659,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Fixed32, UInt32, uint32_t, )
// This block of code is generated, do not edit it directly.
-- (void)writeFixed32s:(int32_t)fieldNumber
- values:(GPBUInt32Array *)values
- tag:(uint32_t)tag {
+- (void)writeFixed32Array:(int32_t)fieldNumber
+ values:(GPBUInt32Array *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -686,9 +686,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SInt32, Int32, int32_t, )
// This block of code is generated, do not edit it directly.
-- (void)writeSInt32s:(int32_t)fieldNumber
- values:(GPBInt32Array *)values
- tag:(uint32_t)tag {
+- (void)writeSInt32Array:(int32_t)fieldNumber
+ values:(GPBInt32Array *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -713,9 +713,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SInt64, Int64, int64_t, )
// This block of code is generated, do not edit it directly.
-- (void)writeSInt64s:(int32_t)fieldNumber
- values:(GPBInt64Array *)values
- tag:(uint32_t)tag {
+- (void)writeSInt64Array:(int32_t)fieldNumber
+ values:(GPBInt64Array *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -740,9 +740,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SFixed64, Int64, int64_t, )
// This block of code is generated, do not edit it directly.
-- (void)writeSFixed64s:(int32_t)fieldNumber
- values:(GPBInt64Array *)values
- tag:(uint32_t)tag {
+- (void)writeSFixed64Array:(int32_t)fieldNumber
+ values:(GPBInt64Array *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -767,9 +767,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(SFixed32, Int32, int32_t, )
// This block of code is generated, do not edit it directly.
-- (void)writeSFixed32s:(int32_t)fieldNumber
- values:(GPBInt32Array *)values
- tag:(uint32_t)tag {
+- (void)writeSFixed32Array:(int32_t)fieldNumber
+ values:(GPBInt32Array *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -794,9 +794,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Bool, Bool, BOOL, )
// This block of code is generated, do not edit it directly.
-- (void)writeBools:(int32_t)fieldNumber
- values:(GPBBoolArray *)values
- tag:(uint32_t)tag {
+- (void)writeBoolArray:(int32_t)fieldNumber
+ values:(GPBBoolArray *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -821,9 +821,9 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_PACKABLE_DEFNS(Enum, Enum, int32_t, Raw)
// This block of code is generated, do not edit it directly.
-- (void)writeEnums:(int32_t)fieldNumber
- values:(GPBEnumArray *)values
- tag:(uint32_t)tag {
+- (void)writeEnumArray:(int32_t)fieldNumber
+ values:(GPBEnumArray *)values
+ tag:(uint32_t)tag {
if (tag != 0) {
if (values.count == 0) return;
__block size_t dataSize = 0;
@@ -848,7 +848,7 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(String, NSString)
// This block of code is generated, do not edit it directly.
-- (void)writeStrings:(int32_t)fieldNumber values:(NSArray *)values {
+- (void)writeStringArray:(int32_t)fieldNumber values:(NSArray *)values {
for (NSString *value in values) {
[self writeString:fieldNumber value:value];
}
@@ -857,25 +857,25 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Message, GPBMessage)
// This block of code is generated, do not edit it directly.
-- (void)writeMessages:(int32_t)fieldNumber values:(NSArray *)values {
+- (void)writeMessageArray:(int32_t)fieldNumber values:(NSArray *)values {
for (GPBMessage *value in values) {
[self writeMessage:fieldNumber value:value];
}
}
-//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Data, NSData)
+//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Bytes, NSData)
// This block of code is generated, do not edit it directly.
-- (void)writeDatas:(int32_t)fieldNumber values:(NSArray *)values {
+- (void)writeBytesArray:(int32_t)fieldNumber values:(NSArray *)values {
for (NSData *value in values) {
- [self writeData:fieldNumber value:value];
+ [self writeBytes:fieldNumber value:value];
}
}
//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(Group, GPBMessage)
// This block of code is generated, do not edit it directly.
-- (void)writeGroups:(int32_t)fieldNumber values:(NSArray *)values {
+- (void)writeGroupArray:(int32_t)fieldNumber values:(NSArray *)values {
for (GPBMessage *value in values) {
[self writeGroup:fieldNumber value:value];
}
@@ -884,7 +884,7 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
//%PDDM-EXPAND WRITE_UNPACKABLE_DEFNS(UnknownGroup, GPBUnknownFieldSet)
// This block of code is generated, do not edit it directly.
-- (void)writeUnknownGroups:(int32_t)fieldNumber values:(NSArray *)values {
+- (void)writeUnknownGroupArray:(int32_t)fieldNumber values:(NSArray *)values {
for (GPBUnknownFieldSet *value in values) {
[self writeUnknownGroup:fieldNumber value:value];
}
@@ -906,7 +906,7 @@ static void GPBWriteRawLittleEndian64(GPBOutputBufferState *state,
GPBWriteTagWithFormat(&state_, GPBWireFormatMessageSetItem,
GPBWireFormatStartGroup);
GPBWriteUInt32(&state_, GPBWireFormatMessageSetTypeId, fieldNumber);
- [self writeData:GPBWireFormatMessageSetMessage value:value];
+ [self writeBytes:GPBWireFormatMessageSetMessage value:value];
GPBWriteTagWithFormat(&state_, GPBWireFormatMessageSetItem,
GPBWireFormatEndGroup);
}
@@ -1062,7 +1062,7 @@ size_t GPBComputeMessageSizeNoTag(GPBMessage *value) {
return GPBComputeRawVarint32SizeForInteger(size) + size;
}
-size_t GPBComputeDataSizeNoTag(NSData *value) {
+size_t GPBComputeBytesSizeNoTag(NSData *value) {
NSUInteger valueLength = [value length];
return GPBComputeRawVarint32SizeForInteger(valueLength) + valueLength;
}
@@ -1143,8 +1143,8 @@ size_t GPBComputeMessageSize(int32_t fieldNumber, GPBMessage *value) {
return GPBComputeTagSize(fieldNumber) + GPBComputeMessageSizeNoTag(value);
}
-size_t GPBComputeDataSize(int32_t fieldNumber, NSData *value) {
- return GPBComputeTagSize(fieldNumber) + GPBComputeDataSizeNoTag(value);
+size_t GPBComputeBytesSize(int32_t fieldNumber, NSData *value) {
+ return GPBComputeTagSize(fieldNumber) + GPBComputeBytesSizeNoTag(value);
}
size_t GPBComputeUInt32Size(int32_t fieldNumber, uint32_t value) {
@@ -1183,7 +1183,7 @@ size_t GPBComputeRawMessageSetExtensionSize(int32_t fieldNumber,
NSData *value) {
return GPBComputeTagSize(GPBWireFormatMessageSetItem) * 2 +
GPBComputeUInt32Size(GPBWireFormatMessageSetTypeId, fieldNumber) +
- GPBComputeDataSize(GPBWireFormatMessageSetMessage, value);
+ GPBComputeBytesSize(GPBWireFormatMessageSetMessage, value);
}
size_t GPBComputeTagSize(int32_t fieldNumber) {
@@ -1191,9 +1191,9 @@ size_t GPBComputeTagSize(int32_t fieldNumber) {
GPBWireFormatMakeTag(fieldNumber, GPBWireFormatVarint));
}
-size_t GPBComputeWireFormatTagSize(int field_number, GPBType type) {
+size_t GPBComputeWireFormatTagSize(int field_number, GPBDataType dataType) {
size_t result = GPBComputeTagSize(field_number);
- if (type == GPBTypeGroup) {
+ if (dataType == GPBDataTypeGroup) {
// Groups have both a start and an end tag.
return result * 2;
} else {
diff --git a/objectivec/GPBDescriptor.h b/objectivec/GPBDescriptor.h
index 97b46b3c..aeac9029 100644
--- a/objectivec/GPBDescriptor.h
+++ b/objectivec/GPBDescriptor.h
@@ -30,7 +30,7 @@
#import <Foundation/Foundation.h>
-#import "GPBTypes.h"
+#import "GPBRuntimeTypes.h"
@class GPBEnumDescriptor;
@class GPBFieldDescriptor;
@@ -89,14 +89,14 @@ typedef NS_ENUM(NSInteger, GPBFieldType) {
@property(nonatomic, readonly, copy) NSString *name;
@property(nonatomic, readonly) uint32_t number;
-@property(nonatomic, readonly) GPBType type;
+@property(nonatomic, readonly) GPBDataType dataType;
@property(nonatomic, readonly) BOOL hasDefaultValue;
-@property(nonatomic, readonly) GPBValue defaultValue;
+@property(nonatomic, readonly) GPBGenericValue defaultValue;
@property(nonatomic, readonly, getter=isRequired) BOOL required;
@property(nonatomic, readonly, getter=isOptional) BOOL optional;
@property(nonatomic, readonly) GPBFieldType fieldType;
// If it is a map, the value type is in -type.
-@property(nonatomic, readonly) GPBType mapKeyType;
+@property(nonatomic, readonly) GPBDataType mapKeyDataType;
@property(nonatomic, readonly, getter=isPackable) BOOL packable;
@property(nonatomic, readonly, assign) GPBOneofDescriptor *containingOneof;
@@ -129,12 +129,14 @@ typedef NS_ENUM(NSInteger, GPBFieldType) {
@end
-@interface GPBExtensionDescriptor : NSObject
+@interface GPBExtensionDescriptor : NSObject<NSCopying>
@property(nonatomic, readonly) uint32_t fieldNumber;
-@property(nonatomic, readonly) GPBType type;
+@property(nonatomic, readonly) Class containingMessageClass;
+@property(nonatomic, readonly) GPBDataType dataType;
@property(nonatomic, readonly, getter=isRepeated) BOOL repeated;
@property(nonatomic, readonly, getter=isPackable) BOOL packable;
@property(nonatomic, readonly, assign) Class msgClass;
@property(nonatomic, readonly) NSString *singletonName;
@property(nonatomic, readonly, strong) GPBEnumDescriptor *enumDescriptor;
+@property(nonatomic, readonly) id defaultValue;
@end
diff --git a/objectivec/GPBDescriptor.m b/objectivec/GPBDescriptor.m
index b955018c..bae9187e 100644
--- a/objectivec/GPBDescriptor.m
+++ b/objectivec/GPBDescriptor.m
@@ -369,16 +369,26 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
GPBWireFormat format;
if ((description->flags & GPBFieldMapKeyMask) != 0) {
// Maps are repeated messages on the wire.
- format = GPBWireFormatForType(GPBTypeMessage, NO);
+ format = GPBWireFormatForType(GPBDataTypeMessage, NO);
} else {
- format = GPBWireFormatForType(description->type,
- description->flags & GPBFieldPacked);
+ format = GPBWireFormatForType(description->dataType,
+ ((description->flags & GPBFieldPacked) != 0));
}
return GPBWireFormatMakeTag(description->number, format);
}
+uint32_t GPBFieldAlternateTag(GPBFieldDescriptor *self) {
+ GPBMessageFieldDescription *description = self->description_;
+ NSCAssert((description->flags & GPBFieldRepeated) != 0,
+ @"Only valid on repeated fields");
+ GPBWireFormat format =
+ GPBWireFormatForType(description->dataType,
+ ((description->flags & GPBFieldPacked) == 0));
+ return GPBWireFormatMakeTag(description->number, format);
+}
+
@implementation GPBFieldDescriptor {
- GPBValue defaultValue_;
+ GPBGenericValue defaultValue_;
GPBFieldOptions *fieldOptions_;
// Message ivars
@@ -416,12 +426,66 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
getSel_ = sel_getUid(description->name);
setSel_ = SelFromStrings("set", description->name, NULL, YES);
+ GPBDataType dataType = description->dataType;
+ BOOL isMessage = GPBDataTypeIsMessage(dataType);
+ BOOL isMapOrArray = GPBFieldIsMapOrArray(self);
+
+ if (isMapOrArray) {
+ // map<>/repeated fields get a *Count property (inplace of a has*) to
+ // support checking if there are any entries without triggering
+ // autocreation.
+ hasOrCountSel_ = SelFromStrings(NULL, description->name, "_Count", NO);
+ } else {
+ // If there is a positive hasIndex, then:
+ // - All fields types for proto2 messages get has* selectors.
+ // - Only message fields for proto3 messages get has* selectors.
+ // Note: the positive check is to handle oneOfs, we can't check
+ // containingOneof_ because it isn't set until after initialization.
+ if ((description->hasIndex >= 0) &&
+ (description->hasIndex != GPBNoHasBit) &&
+ ((syntax != GPBFileSyntaxProto3) || isMessage)) {
+ hasOrCountSel_ = SelFromStrings("has", description->name, NULL, NO);
+ setHasSel_ = SelFromStrings("setHas", description->name, NULL, YES);
+ }
+ }
+
+ // Extra type specific data.
+ if (isMessage) {
+ const char *className = description->dataTypeSpecific.className;
+ msgClass_ = objc_getClass(className);
+ NSAssert(msgClass_, @"Class %s not defined", className);
+ } else if (dataType == GPBDataTypeEnum) {
+ if ((description_->flags & GPBFieldHasEnumDescriptor) != 0) {
+ enumHandling_.enumDescriptor_ =
+ description->dataTypeSpecific.enumDescFunc();
+ } else {
+ enumHandling_.enumVerifier_ =
+ description->dataTypeSpecific.enumVerifier;
+ }
+ }
+
+ // Non map<>/repeated fields can have defaults.
+ if (!isMapOrArray) {
+ defaultValue_ = description->defaultValue;
+ if (dataType == GPBDataTypeBytes) {
+ // Data stored as a length prefixed (network byte order) c-string in
+ // descriptor structure.
+ const uint8_t *bytes = (const uint8_t *)defaultValue_.valueData;
+ if (bytes) {
+ uint32_t length = *((uint32_t *)bytes);
+ length = ntohl(length);
+ bytes += sizeof(length);
+ defaultValue_.valueData =
+ [[NSData alloc] initWithBytes:bytes length:length];
+ }
+ }
+ }
+
+ // FieldOptions stored as a length prefixed (network byte order) c-escaped
+ // string in descriptor records.
if (description->fieldOptions) {
- // FieldOptions stored as a length prefixed c-escaped string in descriptor
- // records.
uint8_t *optionsBytes = (uint8_t *)description->fieldOptions;
uint32_t optionsLength = *((uint32_t *)optionsBytes);
- // The length is stored in network byte order.
optionsLength = ntohl(optionsLength);
if (optionsLength > 0) {
optionsBytes += sizeof(optionsLength);
@@ -434,69 +498,20 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
error:NULL] retain];
}
}
-
- GPBType type = description->type;
- BOOL isMessage = GPBTypeIsMessage(type);
- if (isMessage) {
- // No has* for repeated/map or something in a oneof (we can't check
- // containingOneof_ because it isn't set until after initialization).
- if ((description->hasIndex >= 0) &&
- (description->hasIndex != GPBNoHasBit)) {
- hasSel_ = SelFromStrings("has", description->name, NULL, NO);
- setHasSel_ = SelFromStrings("setHas", description->name, NULL, YES);
- }
- const char *className = description->typeSpecific.className;
- msgClass_ = objc_getClass(className);
- NSAssert1(msgClass_, @"Class %s not defined", className);
- // The defaultValue_ is fetched directly in -defaultValue to avoid
- // initialization order issues.
- } else {
- if (!GPBFieldIsMapOrArray(self)) {
- defaultValue_ = description->defaultValue;
- if (type == GPBTypeData) {
- // Data stored as a length prefixed c-string in descriptor records.
- const uint8_t *bytes = (const uint8_t *)defaultValue_.valueData;
- if (bytes) {
- uint32_t length = *((uint32_t *)bytes);
- // The length is stored in network byte order.
- length = ntohl(length);
- bytes += sizeof(length);
- defaultValue_.valueData =
- [[NSData alloc] initWithBytes:bytes length:length];
- }
- }
- // No has* methods for proto3 or if our hasIndex is < 0 because it
- // means the field is in a oneof (we can't check containingOneof_
- // because it isn't set until after initialization).
- if ((syntax != GPBFileSyntaxProto3) && (description->hasIndex >= 0) &&
- (description->hasIndex != GPBNoHasBit)) {
- hasSel_ = SelFromStrings("has", description->name, NULL, NO);
- setHasSel_ = SelFromStrings("setHas", description->name, NULL, YES);
- }
- }
- if (GPBTypeIsEnum(type)) {
- if (description_->flags & GPBFieldHasEnumDescriptor) {
- enumHandling_.enumDescriptor_ =
- description->typeSpecific.enumDescFunc();
- } else {
- enumHandling_.enumVerifier_ = description->typeSpecific.enumVerifier;
- }
- }
- }
}
return self;
}
- (void)dealloc {
- if (description_->type == GPBTypeData &&
+ if (description_->dataType == GPBDataTypeBytes &&
!(description_->flags & GPBFieldRepeated)) {
[defaultValue_.valueData release];
}
[super dealloc];
}
-- (GPBType)type {
- return description_->type;
+- (GPBDataType)dataType {
+ return description_->dataType;
}
- (BOOL)hasDefaultValue {
@@ -530,36 +545,36 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
}
}
-- (GPBType)mapKeyType {
+- (GPBDataType)mapKeyDataType {
switch (description_->flags & GPBFieldMapKeyMask) {
case GPBFieldMapKeyInt32:
- return GPBTypeInt32;
+ return GPBDataTypeInt32;
case GPBFieldMapKeyInt64:
- return GPBTypeInt64;
+ return GPBDataTypeInt64;
case GPBFieldMapKeyUInt32:
- return GPBTypeUInt32;
+ return GPBDataTypeUInt32;
case GPBFieldMapKeyUInt64:
- return GPBTypeUInt64;
+ return GPBDataTypeUInt64;
case GPBFieldMapKeySInt32:
- return GPBTypeSInt32;
+ return GPBDataTypeSInt32;
case GPBFieldMapKeySInt64:
- return GPBTypeSInt64;
+ return GPBDataTypeSInt64;
case GPBFieldMapKeyFixed32:
- return GPBTypeFixed32;
+ return GPBDataTypeFixed32;
case GPBFieldMapKeyFixed64:
- return GPBTypeFixed64;
+ return GPBDataTypeFixed64;
case GPBFieldMapKeySFixed32:
- return GPBTypeSFixed32;
+ return GPBDataTypeSFixed32;
case GPBFieldMapKeySFixed64:
- return GPBTypeSFixed64;
+ return GPBDataTypeSFixed64;
case GPBFieldMapKeyBool:
- return GPBTypeBool;
+ return GPBDataTypeBool;
case GPBFieldMapKeyString:
- return GPBTypeString;
+ return GPBDataTypeString;
default:
NSAssert(0, @"Not a map type");
- return GPBTypeInt32; // For lack of anything better.
+ return GPBDataTypeInt32; // For lack of anything better.
}
}
@@ -568,8 +583,8 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
}
- (BOOL)isValidEnumValue:(int32_t)value {
- NSAssert(description_->type == GPBTypeEnum,
- @"Field Must be of type GPBTypeEnum");
+ NSAssert(description_->dataType == GPBDataTypeEnum,
+ @"Field Must be of type GPBDataTypeEnum");
if (description_->flags & GPBFieldHasEnumDescriptor) {
return enumHandling_.enumDescriptor_.enumVerifier(value);
} else {
@@ -585,18 +600,18 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
}
}
-- (GPBValue)defaultValue {
+- (GPBGenericValue)defaultValue {
// Depends on the fact that defaultValue_ is initialized either to "0/nil" or
// to an actual defaultValue in our initializer.
- GPBValue value = defaultValue_;
+ GPBGenericValue value = defaultValue_;
if (!(description_->flags & GPBFieldRepeated)) {
// We special handle data and strings. If they are nil, we replace them
// with empty string/empty data.
- GPBType type = description_->type;
- if (type == GPBTypeData && value.valueData == nil) {
+ GPBDataType type = description_->dataType;
+ if (type == GPBDataTypeBytes && value.valueData == nil) {
value.valueData = GPBEmptyNSData();
- } else if (type == GPBTypeString && value.valueString == nil) {
+ } else if (type == GPBDataTypeString && value.valueString == nil) {
value.valueString = @"";
}
}
@@ -635,7 +650,7 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
}
// Groups vs. other fields.
- if (description_->type == GPBTypeGroup) {
+ if (description_->dataType == GPBDataTypeGroup) {
// Just capitalize the first letter.
unichar firstChar = [name characterAtIndex:0];
if (firstChar >= 'a' && firstChar <= 'z') {
@@ -811,16 +826,70 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
@end
-@implementation GPBExtensionDescriptor
+@implementation GPBExtensionDescriptor {
+ GPBGenericValue defaultValue_;
+}
+
+@synthesize containingMessageClass = containingMessageClass_;
- (instancetype)initWithExtensionDescription:
(GPBExtensionDescription *)description {
if ((self = [super init])) {
description_ = description;
+
+#if DEBUG
+ const char *className = description->messageOrGroupClassName;
+ if (className) {
+ NSAssert(objc_lookUpClass(className) != Nil,
+ @"Class %s not defined", className);
+ }
+#endif
+
+ if (description->extendedClass) {
+ Class containingClass = objc_lookUpClass(description->extendedClass);
+ NSAssert(containingClass, @"Class %s not defined",
+ description->extendedClass);
+ containingMessageClass_ = containingClass;
+ }
+
+ GPBDataType type = description_->dataType;
+ if (type == GPBDataTypeBytes) {
+ // Data stored as a length prefixed c-string in descriptor records.
+ const uint8_t *bytes =
+ (const uint8_t *)description->defaultValue.valueData;
+ if (bytes) {
+ uint32_t length = *((uint32_t *)bytes);
+ // The length is stored in network byte order.
+ length = ntohl(length);
+ bytes += sizeof(length);
+ defaultValue_.valueData =
+ [[NSData alloc] initWithBytes:bytes length:length];
+ }
+ } else if (type == GPBDataTypeMessage || type == GPBDataTypeGroup) {
+ // The default is looked up in -defaultValue instead since extensions
+ // aren't common, we avoid the hit startup hit and it avoid initialization
+ // order issues.
+ } else {
+ defaultValue_ = description->defaultValue;
+ }
}
return self;
}
+- (void)dealloc {
+ if ((description_->dataType == GPBDataTypeBytes) &&
+ !GPBExtensionIsRepeated(description_)) {
+ [defaultValue_.valueData release];
+ }
+ [super dealloc];
+}
+
+- (instancetype)copyWithZone:(NSZone *)zone {
+#pragma unused(zone)
+ // Immutable.
+ return [self retain];
+}
+
- (NSString *)singletonName {
return @(description_->singletonName);
}
@@ -833,12 +902,24 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
return description_->fieldNumber;
}
-- (GPBType)type {
- return description_->type;
+- (GPBDataType)dataType {
+ return description_->dataType;
+}
+
+- (GPBWireFormat)wireType {
+ return GPBWireFormatForType(description_->dataType,
+ GPBExtensionIsPacked(description_));
+}
+
+- (GPBWireFormat)alternateWireType {
+ NSAssert(GPBExtensionIsRepeated(description_),
+ @"Only valid on repeated extensions");
+ return GPBWireFormatForType(description_->dataType,
+ !GPBExtensionIsPacked(description_));
}
- (BOOL)isRepeated {
- return (description_->options & GPBExtensionRepeated) != 0;
+ return GPBExtensionIsRepeated(description_);
}
- (BOOL)isMap {
@@ -846,7 +927,7 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
}
- (BOOL)isPackable {
- return (description_->options & GPBExtensionPacked) != 0;
+ return GPBExtensionIsPacked(description_);
}
- (Class)msgClass {
@@ -854,11 +935,63 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self) {
}
- (GPBEnumDescriptor *)enumDescriptor {
- if (GPBTypeIsEnum(description_->type)) {
+ if (description_->dataType == GPBDataTypeEnum) {
GPBEnumDescriptor *enumDescriptor = description_->enumDescriptorFunc();
return enumDescriptor;
}
return nil;
}
+- (id)defaultValue {
+ if (GPBExtensionIsRepeated(description_)) {
+ return nil;
+ }
+
+ switch (description_->dataType) {
+ case GPBDataTypeBool:
+ return @(defaultValue_.valueBool);
+ case GPBDataTypeFloat:
+ return @(defaultValue_.valueFloat);
+ case GPBDataTypeDouble:
+ return @(defaultValue_.valueDouble);
+ case GPBDataTypeInt32:
+ case GPBDataTypeSInt32:
+ case GPBDataTypeEnum:
+ case GPBDataTypeSFixed32:
+ return @(defaultValue_.valueInt32);
+ case GPBDataTypeInt64:
+ case GPBDataTypeSInt64:
+ case GPBDataTypeSFixed64:
+ return @(defaultValue_.valueInt64);
+ case GPBDataTypeUInt32:
+ case GPBDataTypeFixed32:
+ return @(defaultValue_.valueUInt32);
+ case GPBDataTypeUInt64:
+ case GPBDataTypeFixed64:
+ return @(defaultValue_.valueUInt64);
+ case GPBDataTypeBytes:
+ // Like message fields, the default is zero length data.
+ return (defaultValue_.valueData ? defaultValue_.valueData
+ : GPBEmptyNSData());
+ case GPBDataTypeString:
+ // Like message fields, the default is zero length string.
+ return (defaultValue_.valueString ? defaultValue_.valueString : @"");
+ case GPBDataTypeGroup:
+ case GPBDataTypeMessage:
+ return nil;
+ }
+}
+
+- (NSComparisonResult)compareByFieldNumber:(GPBExtensionDescriptor *)other {
+ int32_t selfNumber = description_->fieldNumber;
+ int32_t otherNumber = other->description_->fieldNumber;
+ if (selfNumber < otherNumber) {
+ return NSOrderedAscending;
+ } else if (selfNumber == otherNumber) {
+ return NSOrderedSame;
+ } else {
+ return NSOrderedDescending;
+ }
+}
+
@end
diff --git a/objectivec/GPBDescriptor_PackagePrivate.h b/objectivec/GPBDescriptor_PackagePrivate.h
index b289a48b..7987d928 100644
--- a/objectivec/GPBDescriptor_PackagePrivate.h
+++ b/objectivec/GPBDescriptor_PackagePrivate.h
@@ -33,6 +33,7 @@
// subject to change at any time without notice.
#import "GPBDescriptor.h"
+#import "GPBWireFormat.h"
// Describes attributes of the field.
typedef NS_OPTIONS(uint32_t, GPBFieldFlags) {
@@ -66,8 +67,6 @@ typedef NS_OPTIONS(uint32_t, GPBFieldFlags) {
// set, the name can be derived from the ObjC name.
GPBFieldTextFormatNameCustom = 1 << 16,
// Indicates the field has an enum descriptor.
- // TODO(thomasvl): Output the CPP check to use descFunc or validator based
- // on final compile. This will then get added based on that.
GPBFieldHasEnumDescriptor = 1 << 17,
};
@@ -84,21 +83,21 @@ typedef struct GPBMessageFieldDescription {
int32_t hasIndex;
// Field flags. Use accessor functions below.
GPBFieldFlags flags;
- // Type of the ivar.
- GPBType type;
+ // Data type of the ivar.
+ GPBDataType dataType;
// Offset of the variable into it's structure struct.
size_t offset;
// FieldOptions protobuf, serialized as string.
const char *fieldOptions;
- GPBValue defaultValue; // Default value for the ivar.
+ GPBGenericValue defaultValue; // Default value for the ivar.
union {
const char *className; // Name for message class.
// For enums only: If EnumDescriptors are compiled in, it will be that,
// otherwise it will be the verifier.
GPBEnumDescriptorFunc enumDescFunc;
GPBEnumValidationFunc enumVerifier;
- } typeSpecific;
+ } dataTypeSpecific;
} GPBMessageFieldDescription;
// Describes a oneof.
@@ -133,10 +132,10 @@ typedef NS_OPTIONS(uint32_t, GPBExtensionOptions) {
// An extension
typedef struct GPBExtensionDescription {
const char *singletonName;
- GPBType type;
+ GPBDataType dataType;
const char *extendedClass;
int32_t fieldNumber;
- GPBValue defaultValue;
+ GPBGenericValue defaultValue;
const char *messageOrGroupClassName;
GPBExtensionOptions options;
GPBEnumDescriptorFunc enumDescriptorFunc;
@@ -217,7 +216,7 @@ typedef struct GPBExtensionDescription {
SEL getSel_;
SEL setSel_;
- SEL hasSel_;
+ SEL hasOrCountSel_; // *Count for map<>/repeated fields, has* otherwise.
SEL setHasSel_;
}
@@ -254,10 +253,18 @@ typedef struct GPBExtensionDescription {
@package
GPBExtensionDescription *description_;
}
+@property(nonatomic, readonly) GPBWireFormat wireType;
+
+// For repeated extensions, alternateWireType is the wireType with the opposite
+// value for the packable property. i.e. - if the extension was marked packed
+// it would be the wire type for unpacked; if the extension was marked unpacked,
+// it would be the wire type for packed.
+@property(nonatomic, readonly) GPBWireFormat alternateWireType;
// description has to be long lived, it is held as a raw pointer.
- (instancetype)initWithExtensionDescription:
- (GPBExtensionDescription *)description;
+ (GPBExtensionDescription *)description;
+- (NSComparisonResult)compareByFieldNumber:(GPBExtensionDescriptor *)other;
@end
CF_EXTERN_C_BEGIN
@@ -267,8 +274,8 @@ GPB_INLINE BOOL GPBFieldIsMapOrArray(GPBFieldDescriptor *field) {
(GPBFieldRepeated | GPBFieldMapKeyMask)) != 0;
}
-GPB_INLINE GPBType GPBGetFieldType(GPBFieldDescriptor *field) {
- return field->description_->type;
+GPB_INLINE GPBDataType GPBGetFieldDataType(GPBFieldDescriptor *field) {
+ return field->description_->dataType;
}
GPB_INLINE int32_t GPBFieldHasIndex(GPBFieldDescriptor *field) {
@@ -281,6 +288,12 @@ GPB_INLINE uint32_t GPBFieldNumber(GPBFieldDescriptor *field) {
uint32_t GPBFieldTag(GPBFieldDescriptor *self);
+// For repeated fields, alternateWireType is the wireType with the opposite
+// value for the packable property. i.e. - if the field was marked packed it
+// would be the wire type for unpacked; if the field was marked unpacked, it
+// would be the wire type for packed.
+uint32_t GPBFieldAlternateTag(GPBFieldDescriptor *self);
+
GPB_INLINE BOOL GPBPreserveUnknownFields(GPBFileSyntax syntax) {
return syntax != GPBFileSyntaxProto3;
}
@@ -289,4 +302,17 @@ GPB_INLINE BOOL GPBHasPreservingUnknownEnumSemantics(GPBFileSyntax syntax) {
return syntax == GPBFileSyntaxProto3;
}
+GPB_INLINE BOOL GPBExtensionIsRepeated(GPBExtensionDescription *description) {
+ return (description->options & GPBExtensionRepeated) != 0;
+}
+
+GPB_INLINE BOOL GPBExtensionIsPacked(GPBExtensionDescription *description) {
+ return (description->options & GPBExtensionPacked) != 0;
+}
+
+GPB_INLINE BOOL GPBExtensionIsWireFormat(GPBExtensionDescription *description) {
+ return (description->options & GPBExtensionSetWireFormat) != 0;
+}
+
+
CF_EXTERN_C_END
diff --git a/objectivec/GPBDictionary.h b/objectivec/GPBDictionary.h
index 72873ad2..e5bd4750 100644
--- a/objectivec/GPBDictionary.h
+++ b/objectivec/GPBDictionary.h
@@ -30,7 +30,7 @@
#import <Foundation/Foundation.h>
-#import "GPBTypes.h"
+#import "GPBRuntimeTypes.h"
// These classes are used for map fields of basic data types. They are used because
// they perform better than boxing into NSNumbers in NSDictionaries.
diff --git a/objectivec/GPBDictionary.m b/objectivec/GPBDictionary.m
index 3769c697..df634279 100644
--- a/objectivec/GPBDictionary.m
+++ b/objectivec/GPBDictionary.m
@@ -55,64 +55,64 @@ static BOOL DictDefault_IsValidValue(int32_t value) {
return (value != kGPBUnrecognizedEnumeratorValue);
}
-//%PDDM-DEFINE SERIALIZE_SUPPORT_2_TYPE(VALUE_NAME, VALUE_TYPE, GPBTYPE_NAME1, GPBTYPE_NAME2)
-//%GPB_INLINE size_t ComputeDict##VALUE_NAME##FieldSize(VALUE_TYPE value, uint32_t fieldNum, GPBType wireType) {
-//% if (wireType == GPBType##GPBTYPE_NAME1) {
-//% return GPBCompute##GPBTYPE_NAME1##Size(fieldNum, value);
-//% } else if (wireType == GPBType##GPBTYPE_NAME2) {
-//% return GPBCompute##GPBTYPE_NAME2##Size(fieldNum, value);
+//%PDDM-DEFINE SERIALIZE_SUPPORT_2_TYPE(VALUE_NAME, VALUE_TYPE, GPBDATATYPE_NAME1, GPBDATATYPE_NAME2)
+//%static size_t ComputeDict##VALUE_NAME##FieldSize(VALUE_TYPE value, uint32_t fieldNum, GPBDataType dataType) {
+//% if (dataType == GPBDataType##GPBDATATYPE_NAME1) {
+//% return GPBCompute##GPBDATATYPE_NAME1##Size(fieldNum, value);
+//% } else if (dataType == GPBDataType##GPBDATATYPE_NAME2) {
+//% return GPBCompute##GPBDATATYPE_NAME2##Size(fieldNum, value);
//% } else {
-//% NSCAssert(NO, @"Unexpected type %d", wireType);
+//% NSCAssert(NO, @"Unexpected type %d", dataType);
//% return 0;
//% }
//%}
//%
-//%GPB_INLINE void WriteDict##VALUE_NAME##Field(GPBCodedOutputStream *stream, VALUE_TYPE value, uint32_t fieldNum, GPBType wireType) {
-//% if (wireType == GPBType##GPBTYPE_NAME1) {
-//% [stream write##GPBTYPE_NAME1##:fieldNum value:value];
-//% } else if (wireType == GPBType##GPBTYPE_NAME2) {
-//% [stream write##GPBTYPE_NAME2##:fieldNum value:value];
+//%static void WriteDict##VALUE_NAME##Field(GPBCodedOutputStream *stream, VALUE_TYPE value, uint32_t fieldNum, GPBDataType dataType) {
+//% if (dataType == GPBDataType##GPBDATATYPE_NAME1) {
+//% [stream write##GPBDATATYPE_NAME1##:fieldNum value:value];
+//% } else if (dataType == GPBDataType##GPBDATATYPE_NAME2) {
+//% [stream write##GPBDATATYPE_NAME2##:fieldNum value:value];
//% } else {
-//% NSCAssert(NO, @"Unexpected type %d", wireType);
+//% NSCAssert(NO, @"Unexpected type %d", dataType);
//% }
//%}
//%
-//%PDDM-DEFINE SERIALIZE_SUPPORT_3_TYPE(VALUE_NAME, VALUE_TYPE, GPBTYPE_NAME1, GPBTYPE_NAME2, GPBTYPE_NAME3)
-//%GPB_INLINE size_t ComputeDict##VALUE_NAME##FieldSize(VALUE_TYPE value, uint32_t fieldNum, GPBType wireType) {
-//% if (wireType == GPBType##GPBTYPE_NAME1) {
-//% return GPBCompute##GPBTYPE_NAME1##Size(fieldNum, value);
-//% } else if (wireType == GPBType##GPBTYPE_NAME2) {
-//% return GPBCompute##GPBTYPE_NAME2##Size(fieldNum, value);
-//% } else if (wireType == GPBType##GPBTYPE_NAME3) {
-//% return GPBCompute##GPBTYPE_NAME3##Size(fieldNum, value);
+//%PDDM-DEFINE SERIALIZE_SUPPORT_3_TYPE(VALUE_NAME, VALUE_TYPE, GPBDATATYPE_NAME1, GPBDATATYPE_NAME2, GPBDATATYPE_NAME3)
+//%static size_t ComputeDict##VALUE_NAME##FieldSize(VALUE_TYPE value, uint32_t fieldNum, GPBDataType dataType) {
+//% if (dataType == GPBDataType##GPBDATATYPE_NAME1) {
+//% return GPBCompute##GPBDATATYPE_NAME1##Size(fieldNum, value);
+//% } else if (dataType == GPBDataType##GPBDATATYPE_NAME2) {
+//% return GPBCompute##GPBDATATYPE_NAME2##Size(fieldNum, value);
+//% } else if (dataType == GPBDataType##GPBDATATYPE_NAME3) {
+//% return GPBCompute##GPBDATATYPE_NAME3##Size(fieldNum, value);
//% } else {
-//% NSCAssert(NO, @"Unexpected type %d", wireType);
+//% NSCAssert(NO, @"Unexpected type %d", dataType);
//% return 0;
//% }
//%}
//%
-//%GPB_INLINE void WriteDict##VALUE_NAME##Field(GPBCodedOutputStream *stream, VALUE_TYPE value, uint32_t fieldNum, GPBType wireType) {
-//% if (wireType == GPBType##GPBTYPE_NAME1) {
-//% [stream write##GPBTYPE_NAME1##:fieldNum value:value];
-//% } else if (wireType == GPBType##GPBTYPE_NAME2) {
-//% [stream write##GPBTYPE_NAME2##:fieldNum value:value];
-//% } else if (wireType == GPBType##GPBTYPE_NAME3) {
-//% [stream write##GPBTYPE_NAME3##:fieldNum value:value];
+//%static void WriteDict##VALUE_NAME##Field(GPBCodedOutputStream *stream, VALUE_TYPE value, uint32_t fieldNum, GPBDataType dataType) {
+//% if (dataType == GPBDataType##GPBDATATYPE_NAME1) {
+//% [stream write##GPBDATATYPE_NAME1##:fieldNum value:value];
+//% } else if (dataType == GPBDataType##GPBDATATYPE_NAME2) {
+//% [stream write##GPBDATATYPE_NAME2##:fieldNum value:value];
+//% } else if (dataType == GPBDataType##GPBDATATYPE_NAME3) {
+//% [stream write##GPBDATATYPE_NAME3##:fieldNum value:value];
//% } else {
-//% NSCAssert(NO, @"Unexpected type %d", wireType);
+//% NSCAssert(NO, @"Unexpected type %d", dataType);
//% }
//%}
//%
//%PDDM-DEFINE SIMPLE_SERIALIZE_SUPPORT(VALUE_NAME, VALUE_TYPE, VisP)
-//%GPB_INLINE size_t ComputeDict##VALUE_NAME##FieldSize(VALUE_TYPE VisP##value, uint32_t fieldNum, GPBType wireType) {
-//% NSCAssert(wireType == GPBType##VALUE_NAME, @"bad type: %d", wireType);
-//% #pragma unused(wireType) // For when asserts are off in release.
+//%static size_t ComputeDict##VALUE_NAME##FieldSize(VALUE_TYPE VisP##value, uint32_t fieldNum, GPBDataType dataType) {
+//% NSCAssert(dataType == GPBDataType##VALUE_NAME, @"bad type: %d", dataType);
+//% #pragma unused(dataType) // For when asserts are off in release.
//% return GPBCompute##VALUE_NAME##Size(fieldNum, value);
//%}
//%
-//%GPB_INLINE void WriteDict##VALUE_NAME##Field(GPBCodedOutputStream *stream, VALUE_TYPE VisP##value, uint32_t fieldNum, GPBType wireType) {
-//% NSCAssert(wireType == GPBType##VALUE_NAME, @"bad type: %d", wireType);
-//% #pragma unused(wireType) // For when asserts are off in release.
+//%static void WriteDict##VALUE_NAME##Field(GPBCodedOutputStream *stream, VALUE_TYPE VisP##value, uint32_t fieldNum, GPBDataType dataType) {
+//% NSCAssert(dataType == GPBDataType##VALUE_NAME, @"bad type: %d", dataType);
+//% #pragma unused(dataType) // For when asserts are off in release.
//% [stream write##VALUE_NAME##:fieldNum value:value];
//%}
//%
@@ -126,191 +126,191 @@ static BOOL DictDefault_IsValidValue(int32_t value) {
//%SIMPLE_SERIALIZE_SUPPORT(Float, float, )
//%SIMPLE_SERIALIZE_SUPPORT(Double, double, )
//%SIMPLE_SERIALIZE_SUPPORT(String, NSString, *)
-//%SERIALIZE_SUPPORT_3_TYPE(Object, id, Message, String, Data)
+//%SERIALIZE_SUPPORT_3_TYPE(Object, id, Message, String, Bytes)
//%PDDM-EXPAND SERIALIZE_SUPPORT_HELPERS()
// This block of code is generated, do not edit it directly.
-GPB_INLINE size_t ComputeDictInt32FieldSize(int32_t value, uint32_t fieldNum, GPBType wireType) {
- if (wireType == GPBTypeInt32) {
+static size_t ComputeDictInt32FieldSize(int32_t value, uint32_t fieldNum, GPBDataType dataType) {
+ if (dataType == GPBDataTypeInt32) {
return GPBComputeInt32Size(fieldNum, value);
- } else if (wireType == GPBTypeSInt32) {
+ } else if (dataType == GPBDataTypeSInt32) {
return GPBComputeSInt32Size(fieldNum, value);
- } else if (wireType == GPBTypeSFixed32) {
+ } else if (dataType == GPBDataTypeSFixed32) {
return GPBComputeSFixed32Size(fieldNum, value);
} else {
- NSCAssert(NO, @"Unexpected type %d", wireType);
+ NSCAssert(NO, @"Unexpected type %d", dataType);
return 0;
}
}
-GPB_INLINE void WriteDictInt32Field(GPBCodedOutputStream *stream, int32_t value, uint32_t fieldNum, GPBType wireType) {
- if (wireType == GPBTypeInt32) {
+static void WriteDictInt32Field(GPBCodedOutputStream *stream, int32_t value, uint32_t fieldNum, GPBDataType dataType) {
+ if (dataType == GPBDataTypeInt32) {
[stream writeInt32:fieldNum value:value];
- } else if (wireType == GPBTypeSInt32) {
+ } else if (dataType == GPBDataTypeSInt32) {
[stream writeSInt32:fieldNum value:value];
- } else if (wireType == GPBTypeSFixed32) {
+ } else if (dataType == GPBDataTypeSFixed32) {
[stream writeSFixed32:fieldNum value:value];
} else {
- NSCAssert(NO, @"Unexpected type %d", wireType);
+ NSCAssert(NO, @"Unexpected type %d", dataType);
}
}
-GPB_INLINE size_t ComputeDictUInt32FieldSize(uint32_t value, uint32_t fieldNum, GPBType wireType) {
- if (wireType == GPBTypeUInt32) {
+static size_t ComputeDictUInt32FieldSize(uint32_t value, uint32_t fieldNum, GPBDataType dataType) {
+ if (dataType == GPBDataTypeUInt32) {
return GPBComputeUInt32Size(fieldNum, value);
- } else if (wireType == GPBTypeFixed32) {
+ } else if (dataType == GPBDataTypeFixed32) {
return GPBComputeFixed32Size(fieldNum, value);
} else {
- NSCAssert(NO, @"Unexpected type %d", wireType);
+ NSCAssert(NO, @"Unexpected type %d", dataType);
return 0;
}
}
-GPB_INLINE void WriteDictUInt32Field(GPBCodedOutputStream *stream, uint32_t value, uint32_t fieldNum, GPBType wireType) {
- if (wireType == GPBTypeUInt32) {
+static void WriteDictUInt32Field(GPBCodedOutputStream *stream, uint32_t value, uint32_t fieldNum, GPBDataType dataType) {
+ if (dataType == GPBDataTypeUInt32) {
[stream writeUInt32:fieldNum value:value];
- } else if (wireType == GPBTypeFixed32) {
+ } else if (dataType == GPBDataTypeFixed32) {
[stream writeFixed32:fieldNum value:value];
} else {
- NSCAssert(NO, @"Unexpected type %d", wireType);
+ NSCAssert(NO, @"Unexpected type %d", dataType);
}
}
-GPB_INLINE size_t ComputeDictInt64FieldSize(int64_t value, uint32_t fieldNum, GPBType wireType) {
- if (wireType == GPBTypeInt64) {
+static size_t ComputeDictInt64FieldSize(int64_t value, uint32_t fieldNum, GPBDataType dataType) {
+ if (dataType == GPBDataTypeInt64) {
return GPBComputeInt64Size(fieldNum, value);
- } else if (wireType == GPBTypeSInt64) {
+ } else if (dataType == GPBDataTypeSInt64) {
return GPBComputeSInt64Size(fieldNum, value);
- } else if (wireType == GPBTypeSFixed64) {
+ } else if (dataType == GPBDataTypeSFixed64) {
return GPBComputeSFixed64Size(fieldNum, value);
} else {
- NSCAssert(NO, @"Unexpected type %d", wireType);
+ NSCAssert(NO, @"Unexpected type %d", dataType);
return 0;
}
}
-GPB_INLINE void WriteDictInt64Field(GPBCodedOutputStream *stream, int64_t value, uint32_t fieldNum, GPBType wireType) {
- if (wireType == GPBTypeInt64) {
+static void WriteDictInt64Field(GPBCodedOutputStream *stream, int64_t value, uint32_t fieldNum, GPBDataType dataType) {
+ if (dataType == GPBDataTypeInt64) {
[stream writeInt64:fieldNum value:value];
- } else if (wireType == GPBTypeSInt64) {
+ } else if (dataType == GPBDataTypeSInt64) {
[stream writeSInt64:fieldNum value:value];
- } else if (wireType == GPBTypeSFixed64) {
+ } else if (dataType == GPBDataTypeSFixed64) {
[stream writeSFixed64:fieldNum value:value];
} else {
- NSCAssert(NO, @"Unexpected type %d", wireType);
+ NSCAssert(NO, @"Unexpected type %d", dataType);
}
}
-GPB_INLINE size_t ComputeDictUInt64FieldSize(uint64_t value, uint32_t fieldNum, GPBType wireType) {
- if (wireType == GPBTypeUInt64) {
+static size_t ComputeDictUInt64FieldSize(uint64_t value, uint32_t fieldNum, GPBDataType dataType) {
+ if (dataType == GPBDataTypeUInt64) {
return GPBComputeUInt64Size(fieldNum, value);
- } else if (wireType == GPBTypeFixed64) {
+ } else if (dataType == GPBDataTypeFixed64) {
return GPBComputeFixed64Size(fieldNum, value);
} else {
- NSCAssert(NO, @"Unexpected type %d", wireType);
+ NSCAssert(NO, @"Unexpected type %d", dataType);
return 0;
}
}
-GPB_INLINE void WriteDictUInt64Field(GPBCodedOutputStream *stream, uint64_t value, uint32_t fieldNum, GPBType wireType) {
- if (wireType == GPBTypeUInt64) {
+static void WriteDictUInt64Field(GPBCodedOutputStream *stream, uint64_t value, uint32_t fieldNum, GPBDataType dataType) {
+ if (dataType == GPBDataTypeUInt64) {
[stream writeUInt64:fieldNum value:value];
- } else if (wireType == GPBTypeFixed64) {
+ } else if (dataType == GPBDataTypeFixed64) {
[stream writeFixed64:fieldNum value:value];
} else {
- NSCAssert(NO, @"Unexpected type %d", wireType);
+ NSCAssert(NO, @"Unexpected type %d", dataType);
}
}
-GPB_INLINE size_t ComputeDictBoolFieldSize(BOOL value, uint32_t fieldNum, GPBType wireType) {
- NSCAssert(wireType == GPBTypeBool, @"bad type: %d", wireType);
- #pragma unused(wireType) // For when asserts are off in release.
+static size_t ComputeDictBoolFieldSize(BOOL value, uint32_t fieldNum, GPBDataType dataType) {
+ NSCAssert(dataType == GPBDataTypeBool, @"bad type: %d", dataType);
+ #pragma unused(dataType) // For when asserts are off in release.
return GPBComputeBoolSize(fieldNum, value);
}
-GPB_INLINE void WriteDictBoolField(GPBCodedOutputStream *stream, BOOL value, uint32_t fieldNum, GPBType wireType) {
- NSCAssert(wireType == GPBTypeBool, @"bad type: %d", wireType);
- #pragma unused(wireType) // For when asserts are off in release.
+static void WriteDictBoolField(GPBCodedOutputStream *stream, BOOL value, uint32_t fieldNum, GPBDataType dataType) {
+ NSCAssert(dataType == GPBDataTypeBool, @"bad type: %d", dataType);
+ #pragma unused(dataType) // For when asserts are off in release.
[stream writeBool:fieldNum value:value];
}
-GPB_INLINE size_t ComputeDictEnumFieldSize(int32_t value, uint32_t fieldNum, GPBType wireType) {
- NSCAssert(wireType == GPBTypeEnum, @"bad type: %d", wireType);
- #pragma unused(wireType) // For when asserts are off in release.
+static size_t ComputeDictEnumFieldSize(int32_t value, uint32_t fieldNum, GPBDataType dataType) {
+ NSCAssert(dataType == GPBDataTypeEnum, @"bad type: %d", dataType);
+ #pragma unused(dataType) // For when asserts are off in release.
return GPBComputeEnumSize(fieldNum, value);
}
-GPB_INLINE void WriteDictEnumField(GPBCodedOutputStream *stream, int32_t value, uint32_t fieldNum, GPBType wireType) {
- NSCAssert(wireType == GPBTypeEnum, @"bad type: %d", wireType);
- #pragma unused(wireType) // For when asserts are off in release.
+static void WriteDictEnumField(GPBCodedOutputStream *stream, int32_t value, uint32_t fieldNum, GPBDataType dataType) {
+ NSCAssert(dataType == GPBDataTypeEnum, @"bad type: %d", dataType);
+ #pragma unused(dataType) // For when asserts are off in release.
[stream writeEnum:fieldNum value:value];
}
-GPB_INLINE size_t ComputeDictFloatFieldSize(float value, uint32_t fieldNum, GPBType wireType) {
- NSCAssert(wireType == GPBTypeFloat, @"bad type: %d", wireType);
- #pragma unused(wireType) // For when asserts are off in release.
+static size_t ComputeDictFloatFieldSize(float value, uint32_t fieldNum, GPBDataType dataType) {
+ NSCAssert(dataType == GPBDataTypeFloat, @"bad type: %d", dataType);
+ #pragma unused(dataType) // For when asserts are off in release.
return GPBComputeFloatSize(fieldNum, value);
}
-GPB_INLINE void WriteDictFloatField(GPBCodedOutputStream *stream, float value, uint32_t fieldNum, GPBType wireType) {
- NSCAssert(wireType == GPBTypeFloat, @"bad type: %d", wireType);
- #pragma unused(wireType) // For when asserts are off in release.
+static void WriteDictFloatField(GPBCodedOutputStream *stream, float value, uint32_t fieldNum, GPBDataType dataType) {
+ NSCAssert(dataType == GPBDataTypeFloat, @"bad type: %d", dataType);
+ #pragma unused(dataType) // For when asserts are off in release.
[stream writeFloat:fieldNum value:value];
}
-GPB_INLINE size_t ComputeDictDoubleFieldSize(double value, uint32_t fieldNum, GPBType wireType) {
- NSCAssert(wireType == GPBTypeDouble, @"bad type: %d", wireType);
- #pragma unused(wireType) // For when asserts are off in release.
+static size_t ComputeDictDoubleFieldSize(double value, uint32_t fieldNum, GPBDataType dataType) {
+ NSCAssert(dataType == GPBDataTypeDouble, @"bad type: %d", dataType);
+ #pragma unused(dataType) // For when asserts are off in release.
return GPBComputeDoubleSize(fieldNum, value);
}
-GPB_INLINE void WriteDictDoubleField(GPBCodedOutputStream *stream, double value, uint32_t fieldNum, GPBType wireType) {
- NSCAssert(wireType == GPBTypeDouble, @"bad type: %d", wireType);
- #pragma unused(wireType) // For when asserts are off in release.
+static void WriteDictDoubleField(GPBCodedOutputStream *stream, double value, uint32_t fieldNum, GPBDataType dataType) {
+ NSCAssert(dataType == GPBDataTypeDouble, @"bad type: %d", dataType);
+ #pragma unused(dataType) // For when asserts are off in release.
[stream writeDouble:fieldNum value:value];
}
-GPB_INLINE size_t ComputeDictStringFieldSize(NSString *value, uint32_t fieldNum, GPBType wireType) {
- NSCAssert(wireType == GPBTypeString, @"bad type: %d", wireType);
- #pragma unused(wireType) // For when asserts are off in release.
+static size_t ComputeDictStringFieldSize(NSString *value, uint32_t fieldNum, GPBDataType dataType) {
+ NSCAssert(dataType == GPBDataTypeString, @"bad type: %d", dataType);
+ #pragma unused(dataType) // For when asserts are off in release.
return GPBComputeStringSize(fieldNum, value);
}
-GPB_INLINE void WriteDictStringField(GPBCodedOutputStream *stream, NSString *value, uint32_t fieldNum, GPBType wireType) {
- NSCAssert(wireType == GPBTypeString, @"bad type: %d", wireType);
- #pragma unused(wireType) // For when asserts are off in release.
+static void WriteDictStringField(GPBCodedOutputStream *stream, NSString *value, uint32_t fieldNum, GPBDataType dataType) {
+ NSCAssert(dataType == GPBDataTypeString, @"bad type: %d", dataType);
+ #pragma unused(dataType) // For when asserts are off in release.
[stream writeString:fieldNum value:value];
}
-GPB_INLINE size_t ComputeDictObjectFieldSize(id value, uint32_t fieldNum, GPBType wireType) {
- if (wireType == GPBTypeMessage) {
+static size_t ComputeDictObjectFieldSize(id value, uint32_t fieldNum, GPBDataType dataType) {
+ if (dataType == GPBDataTypeMessage) {
return GPBComputeMessageSize(fieldNum, value);
- } else if (wireType == GPBTypeString) {
+ } else if (dataType == GPBDataTypeString) {
return GPBComputeStringSize(fieldNum, value);
- } else if (wireType == GPBTypeData) {
- return GPBComputeDataSize(fieldNum, value);
+ } else if (dataType == GPBDataTypeBytes) {
+ return GPBComputeBytesSize(fieldNum, value);
} else {
- NSCAssert(NO, @"Unexpected type %d", wireType);
+ NSCAssert(NO, @"Unexpected type %d", dataType);
return 0;
}
}
-GPB_INLINE void WriteDictObjectField(GPBCodedOutputStream *stream, id value, uint32_t fieldNum, GPBType wireType) {
- if (wireType == GPBTypeMessage) {
+static void WriteDictObjectField(GPBCodedOutputStream *stream, id value, uint32_t fieldNum, GPBDataType dataType) {
+ if (dataType == GPBDataTypeMessage) {
[stream writeMessage:fieldNum value:value];
- } else if (wireType == GPBTypeString) {
+ } else if (dataType == GPBDataTypeString) {
[stream writeString:fieldNum value:value];
- } else if (wireType == GPBTypeData) {
- [stream writeData:fieldNum value:value];
+ } else if (dataType == GPBDataTypeBytes) {
+ [stream writeBytes:fieldNum value:value];
} else {
- NSCAssert(NO, @"Unexpected type %d", wireType);
+ NSCAssert(NO, @"Unexpected type %d", dataType);
}
}
//%PDDM-EXPAND-END SERIALIZE_SUPPORT_HELPERS()
size_t GPBDictionaryComputeSizeInternalHelper(NSDictionary *dict, GPBFieldDescriptor *field) {
- GPBType mapValueType = GPBGetFieldType(field);
+ GPBDataType mapValueType = GPBGetFieldDataType(field);
__block size_t result = 0;
[dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) {
#pragma unused(stop)
@@ -318,7 +318,7 @@ size_t GPBDictionaryComputeSizeInternalHelper(NSDictionary *dict, GPBFieldDescri
msgSize += ComputeDictObjectFieldSize(obj, kMapValueFieldNumber, mapValueType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * dict.count;
return result;
}
@@ -326,8 +326,8 @@ size_t GPBDictionaryComputeSizeInternalHelper(NSDictionary *dict, GPBFieldDescri
void GPBDictionaryWriteToStreamInternalHelper(GPBCodedOutputStream *outputStream,
NSDictionary *dict,
GPBFieldDescriptor *field) {
- NSCAssert(field.mapKeyType == GPBTypeString, @"Unexpected key type");
- GPBType mapValueType = GPBGetFieldType(field);
+ NSCAssert(field.mapKeyDataType == GPBDataTypeString, @"Unexpected key type");
+ GPBDataType mapValueType = GPBGetFieldDataType(field);
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) {
#pragma unused(stop)
@@ -345,8 +345,8 @@ void GPBDictionaryWriteToStreamInternalHelper(GPBCodedOutputStream *outputStream
}
BOOL GPBDictionaryIsInitializedInternalHelper(NSDictionary *dict, GPBFieldDescriptor *field) {
- NSCAssert(field.mapKeyType == GPBTypeString, @"Unexpected key type");
- NSCAssert(GPBGetFieldType(field) == GPBTypeMessage, @"Unexpected value type");
+ NSCAssert(field.mapKeyDataType == GPBDataTypeString, @"Unexpected key type");
+ NSCAssert(GPBGetFieldDataType(field) == GPBDataTypeMessage, @"Unexpected value type");
#pragma unused(field) // For when asserts are off in release.
for (GPBMessage *msg in [dict objectEnumerator]) {
if (!msg.initialized) {
@@ -358,69 +358,69 @@ BOOL GPBDictionaryIsInitializedInternalHelper(NSDictionary *dict, GPBFieldDescri
// Note: if the type is an object, it the retain pass back to the caller.
static void ReadValue(GPBCodedInputStream *stream,
- GPBValue *valueToFill,
- GPBType type,
+ GPBGenericValue *valueToFill,
+ GPBDataType type,
GPBExtensionRegistry *registry,
GPBFieldDescriptor *field) {
switch (type) {
- case GPBTypeBool:
+ case GPBDataTypeBool:
valueToFill->valueBool = GPBCodedInputStreamReadBool(&stream->state_);
break;
- case GPBTypeFixed32:
+ case GPBDataTypeFixed32:
valueToFill->valueUInt32 = GPBCodedInputStreamReadFixed32(&stream->state_);
break;
- case GPBTypeSFixed32:
+ case GPBDataTypeSFixed32:
valueToFill->valueInt32 = GPBCodedInputStreamReadSFixed32(&stream->state_);
break;
- case GPBTypeFloat:
+ case GPBDataTypeFloat:
valueToFill->valueFloat = GPBCodedInputStreamReadFloat(&stream->state_);
break;
- case GPBTypeFixed64:
+ case GPBDataTypeFixed64:
valueToFill->valueUInt64 = GPBCodedInputStreamReadFixed64(&stream->state_);
break;
- case GPBTypeSFixed64:
+ case GPBDataTypeSFixed64:
valueToFill->valueInt64 = GPBCodedInputStreamReadSFixed64(&stream->state_);
break;
- case GPBTypeDouble:
+ case GPBDataTypeDouble:
valueToFill->valueDouble = GPBCodedInputStreamReadDouble(&stream->state_);
break;
- case GPBTypeInt32:
+ case GPBDataTypeInt32:
valueToFill->valueInt32 = GPBCodedInputStreamReadInt32(&stream->state_);
break;
- case GPBTypeInt64:
+ case GPBDataTypeInt64:
valueToFill->valueInt64 = GPBCodedInputStreamReadInt32(&stream->state_);
break;
- case GPBTypeSInt32:
+ case GPBDataTypeSInt32:
valueToFill->valueInt32 = GPBCodedInputStreamReadSInt32(&stream->state_);
break;
- case GPBTypeSInt64:
+ case GPBDataTypeSInt64:
valueToFill->valueInt64 = GPBCodedInputStreamReadSInt64(&stream->state_);
break;
- case GPBTypeUInt32:
+ case GPBDataTypeUInt32:
valueToFill->valueUInt32 = GPBCodedInputStreamReadUInt32(&stream->state_);
break;
- case GPBTypeUInt64:
+ case GPBDataTypeUInt64:
valueToFill->valueUInt64 = GPBCodedInputStreamReadUInt64(&stream->state_);
break;
- case GPBTypeData:
+ case GPBDataTypeBytes:
[valueToFill->valueData release];
- valueToFill->valueData = GPBCodedInputStreamReadRetainedData(&stream->state_);
+ valueToFill->valueData = GPBCodedInputStreamReadRetainedBytes(&stream->state_);
break;
- case GPBTypeString:
+ case GPBDataTypeString:
[valueToFill->valueString release];
valueToFill->valueString = GPBCodedInputStreamReadRetainedString(&stream->state_);
break;
- case GPBTypeMessage: {
+ case GPBDataTypeMessage: {
GPBMessage *message = [[field.msgClass alloc] init];
[stream readMessage:message extensionRegistry:registry];
[valueToFill->valueMessage release];
valueToFill->valueMessage = message;
break;
}
- case GPBTypeGroup:
+ case GPBDataTypeGroup:
NSCAssert(NO, @"Can't happen");
break;
- case GPBTypeEnum:
+ case GPBDataTypeEnum:
valueToFill->valueEnum = GPBCodedInputStreamReadEnum(&stream->state_);
break;
}
@@ -431,30 +431,30 @@ void GPBDictionaryReadEntry(id mapDictionary,
GPBExtensionRegistry *registry,
GPBFieldDescriptor *field,
GPBMessage *parentMessage) {
- GPBType keyType = field.mapKeyType;
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
- GPBValue key;
- GPBValue value;
+ GPBGenericValue key;
+ GPBGenericValue value;
// Zero them (but pick up any enum default for proto2).
key.valueString = value.valueString = nil;
- if (valueType == GPBTypeEnum) {
+ if (valueDataType == GPBDataTypeEnum) {
value = field.defaultValue;
}
GPBCodedInputStreamState *state = &stream->state_;
uint32_t keyTag =
- GPBWireFormatMakeTag(kMapKeyFieldNumber, GPBWireFormatForType(keyType, NO));
+ GPBWireFormatMakeTag(kMapKeyFieldNumber, GPBWireFormatForType(keyDataType, NO));
uint32_t valueTag =
- GPBWireFormatMakeTag(kMapValueFieldNumber, GPBWireFormatForType(valueType, NO));
+ GPBWireFormatMakeTag(kMapValueFieldNumber, GPBWireFormatForType(valueDataType, NO));
BOOL hitError = NO;
while (YES) {
uint32_t tag = GPBCodedInputStreamReadTag(state);
if (tag == keyTag) {
- ReadValue(stream, &key, keyType, registry, field);
+ ReadValue(stream, &key, keyDataType, registry, field);
} else if (tag == valueTag) {
- ReadValue(stream, &value, valueType, registry, field);
+ ReadValue(stream, &value, valueDataType, registry, field);
} else if (tag == 0) {
// zero signals EOF / limit reached
break;
@@ -468,18 +468,18 @@ void GPBDictionaryReadEntry(id mapDictionary,
if (!hitError) {
// Handle the special defaults and/or missing key/value.
- if ((keyType == GPBTypeString) && (key.valueString == nil)) {
+ if ((keyDataType == GPBDataTypeString) && (key.valueString == nil)) {
key.valueString = [@"" retain];
}
- if (GPBTypeIsObject(valueType) && value.valueString == nil) {
- switch (valueType) {
- case GPBTypeString:
+ if (GPBDataTypeIsObject(valueDataType) && value.valueString == nil) {
+ switch (valueDataType) {
+ case GPBDataTypeString:
value.valueString = [@"" retain];
break;
- case GPBTypeData:
+ case GPBDataTypeBytes:
value.valueData = [GPBEmptyNSData() retain];
break;
- case GPBTypeMessage: {
+ case GPBDataTypeMessage: {
value.valueMessage = [[field.msgClass alloc] init];
break;
}
@@ -489,30 +489,30 @@ void GPBDictionaryReadEntry(id mapDictionary,
}
}
- if ((keyType == GPBTypeString) && GPBTypeIsObject(valueType)) {
+ if ((keyDataType == GPBDataTypeString) && GPBDataTypeIsObject(valueDataType)) {
// mapDictionary is an NSMutableDictionary
[mapDictionary setObject:value.valueString forKey:key.valueString];
} else {
- if (valueType == GPBTypeEnum) {
+ if (valueDataType == GPBDataTypeEnum) {
if (GPBHasPreservingUnknownEnumSemantics([parentMessage descriptor].file.syntax) ||
[field isValidEnumValue:value.valueEnum]) {
- [mapDictionary setGPBValue:&value forGPBValueKey:&key];
+ [mapDictionary setGPBGenericValue:&value forGPBGenericValueKey:&key];
} else {
NSData *data = [mapDictionary serializedDataForUnknownValue:value.valueEnum
forKey:&key
- keyType:keyType];
+ keyDataType:keyDataType];
[parentMessage addUnknownMapEntry:GPBFieldNumber(field) value:data];
}
} else {
- [mapDictionary setGPBValue:&value forGPBValueKey:&key];
+ [mapDictionary setGPBGenericValue:&value forGPBGenericValueKey:&key];
}
}
}
- if (GPBTypeIsObject(keyType)) {
+ if (GPBDataTypeIsObject(keyDataType)) {
[key.valueString release];
}
- if (GPBTypeIsObject(valueType)) {
+ if (GPBDataTypeIsObject(valueDataType)) {
[value.valueString release];
}
}
@@ -834,26 +834,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
//% return 0;
//% }
//%
-//% GPBType valueType = GPBGetFieldType(field);
-//% GPBType keyType = field.mapKeyType;
+//% GPBDataType valueDataType = GPBGetFieldDataType(field);
+//% GPBDataType keyDataType = field.mapKeyDataType;
//% __block size_t result = 0;
//% [_dictionary enumerateKeysAndObjectsUsingBlock:^(ENUM_TYPE##KHELPER(KEY_TYPE)##aKey,
//% ENUM_TYPE##VHELPER(VALUE_TYPE)##aValue,
//% BOOL *stop) {
//% #pragma unused(stop)
-//% size_t msgSize = ComputeDict##KEY_NAME##FieldSize(UNWRAP##KEY_NAME(aKey), kMapKeyFieldNumber, keyType);
-//% msgSize += ComputeDict##VALUE_NAME##FieldSize(UNWRAP##VALUE_NAME(aValue), kMapValueFieldNumber, valueType);
+//% size_t msgSize = ComputeDict##KEY_NAME##FieldSize(UNWRAP##KEY_NAME(aKey), kMapKeyFieldNumber, keyDataType);
+//% msgSize += ComputeDict##VALUE_NAME##FieldSize(UNWRAP##VALUE_NAME(aValue), kMapValueFieldNumber, valueDataType);
//% result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
//% }];
-//% size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+//% size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
//% result += tagSize * count;
//% return result;
//%}
//%
//%- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
//% asField:(GPBFieldDescriptor *)field {
-//% GPBType valueType = GPBGetFieldType(field);
-//% GPBType keyType = field.mapKeyType;
+//% GPBDataType valueDataType = GPBGetFieldDataType(field);
+//% GPBDataType keyDataType = field.mapKeyDataType;
//% uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
//% [_dictionary enumerateKeysAndObjectsUsingBlock:^(ENUM_TYPE##KHELPER(KEY_TYPE)##aKey,
//% ENUM_TYPE##VHELPER(VALUE_TYPE)##aValue,
@@ -862,16 +862,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
//% // Write the tag.
//% [outputStream writeInt32NoTag:tag];
//% // Write the size of the message.
-//% size_t msgSize = ComputeDict##KEY_NAME##FieldSize(UNWRAP##KEY_NAME(aKey), kMapKeyFieldNumber, keyType);
-//% msgSize += ComputeDict##VALUE_NAME##FieldSize(UNWRAP##VALUE_NAME(aValue), kMapValueFieldNumber, valueType);
+//% size_t msgSize = ComputeDict##KEY_NAME##FieldSize(UNWRAP##KEY_NAME(aKey), kMapKeyFieldNumber, keyDataType);
+//% msgSize += ComputeDict##VALUE_NAME##FieldSize(UNWRAP##VALUE_NAME(aValue), kMapValueFieldNumber, valueDataType);
//% [outputStream writeInt32NoTag:(int32_t)msgSize];
//% // Write the fields.
-//% WriteDict##KEY_NAME##Field(outputStream, UNWRAP##KEY_NAME(aKey), kMapKeyFieldNumber, keyType);
-//% WriteDict##VALUE_NAME##Field(outputStream, UNWRAP##VALUE_NAME(aValue), kMapValueFieldNumber, valueType);
+//% WriteDict##KEY_NAME##Field(outputStream, UNWRAP##KEY_NAME(aKey), kMapKeyFieldNumber, keyDataType);
+//% WriteDict##VALUE_NAME##Field(outputStream, UNWRAP##VALUE_NAME(aValue), kMapValueFieldNumber, valueDataType);
//% }];
//%}
//%
-//%SERIAL_DATA_FOR_ENTRY_##VHELPER(KEY_NAME, VALUE_NAME)- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+//%SERIAL_DATA_FOR_ENTRY_##VHELPER(KEY_NAME, VALUE_NAME)- (void)setGPBGenericValue:(GPBGenericValue *)value
+//% forGPBGenericValueKey:(GPBGenericValue *)key {
//% [_dictionary setObject:WRAPPED##VHELPER(value->##GPBVALUE_##VHELPER(VALUE_NAME)##) forKey:WRAPPED##KHELPER(key->value##KEY_NAME)];
//%}
//%
@@ -1036,37 +1037,37 @@ void GPBDictionaryReadEntry(id mapDictionary,
//%}
//%
//%BOOL_EXTRA_METHODS_##HELPER(Bool, VALUE_NAME)- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field {
-//% GPBType valueType = GPBGetFieldType(field);
+//% GPBDataType valueDataType = GPBGetFieldDataType(field);
//% NSUInteger count = 0;
//% size_t result = 0;
//% for (int i = 0; i < 2; ++i) {
//% if (BOOL_DICT_HAS##HELPER(i, )) {
//% ++count;
-//% size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
-//% msgSize += ComputeDict##VALUE_NAME##FieldSize(_values[i], kMapValueFieldNumber, valueType);
+//% size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+//% msgSize += ComputeDict##VALUE_NAME##FieldSize(_values[i], kMapValueFieldNumber, valueDataType);
//% result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
//% }
//% }
-//% size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+//% size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
//% result += tagSize * count;
//% return result;
//%}
//%
//%- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
//% asField:(GPBFieldDescriptor *)field {
-//% GPBType valueType = GPBGetFieldType(field);
+//% GPBDataType valueDataType = GPBGetFieldDataType(field);
//% uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
//% for (int i = 0; i < 2; ++i) {
//% if (BOOL_DICT_HAS##HELPER(i, )) {
//% // Write the tag.
//% [outputStream writeInt32NoTag:tag];
//% // Write the size of the message.
-//% size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
-//% msgSize += ComputeDict##VALUE_NAME##FieldSize(_values[i], kMapValueFieldNumber, valueType);
+//% size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+//% msgSize += ComputeDict##VALUE_NAME##FieldSize(_values[i], kMapValueFieldNumber, valueDataType);
//% [outputStream writeInt32NoTag:(int32_t)msgSize];
//% // Write the fields.
-//% WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBTypeBool);
-//% WriteDict##VALUE_NAME##Field(outputStream, _values[i], kMapValueFieldNumber, valueType);
+//% WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+//% WriteDict##VALUE_NAME##Field(outputStream, _values[i], kMapValueFieldNumber, valueDataType);
//% }
//% }
//%}
@@ -1149,14 +1150,14 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Empty
//%PDDM-DEFINE SERIAL_DATA_FOR_ENTRY_POD_Enum(KEY_NAME)
//%- (NSData *)serializedDataForUnknownValue:(int32_t)value
-//% forKey:(GPBValue *)key
-//% keyType:(GPBType)keyType {
-//% size_t msgSize = ComputeDict##KEY_NAME##FieldSize(key->value##KEY_NAME, kMapKeyFieldNumber, keyType);
-//% msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBTypeEnum);
+//% forKey:(GPBGenericValue *)key
+//% keyDataType:(GPBDataType)keyDataType {
+//% size_t msgSize = ComputeDict##KEY_NAME##FieldSize(key->value##KEY_NAME, kMapKeyFieldNumber, keyDataType);
+//% msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum);
//% NSMutableData *data = [NSMutableData dataWithLength:msgSize];
//% GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data];
-//% WriteDict##KEY_NAME##Field(outputStream, key->value##KEY_NAME, kMapKeyFieldNumber, keyType);
-//% WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBTypeEnum);
+//% WriteDict##KEY_NAME##Field(outputStream, key->value##KEY_NAME, kMapKeyFieldNumber, keyDataType);
+//% WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum);
//% [outputStream release];
//% return data;
//%}
@@ -1221,7 +1222,8 @@ void GPBDictionaryReadEntry(id mapDictionary,
//% return NO;
//%}
//%PDDM-DEFINE BOOL_SET_GPBVALUE_FOR_KEY_POD(VALUE_NAME, VALUE_TYPE, VisP)
-//%- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+//%- (void)setGPBGenericValue:(GPBGenericValue *)value
+//% forGPBGenericValueKey:(GPBGenericValue *)key {
//% int idx = (key->valueBool ? 1 : 0);
//% _values[idx] = value->value##VALUE_NAME;
//% _valueSet[idx] = YES;
@@ -1401,7 +1403,8 @@ void GPBDictionaryReadEntry(id mapDictionary,
//% return _values[key ? 1 : 0];
//%}
//%PDDM-DEFINE BOOL_SET_GPBVALUE_FOR_KEY_OBJECT(VALUE_NAME, VALUE_TYPE, VisP)
-//%- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+//%- (void)setGPBGenericValue:(GPBGenericValue *)value
+//% forGPBGenericValueKey:(GPBGenericValue *)key {
//% int idx = (key->valueBool ? 1 : 0);
//% [_values[idx] release];
//% _values[idx] = [value->valueString retain];
@@ -1573,26 +1576,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -1601,16 +1604,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueUInt32) forKey:@(key->valueUInt32)];
}
@@ -1778,26 +1782,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -1806,16 +1810,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueInt32) forKey:@(key->valueUInt32)];
}
@@ -1983,26 +1988,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -2011,16 +2016,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueUInt64) forKey:@(key->valueUInt32)];
}
@@ -2188,26 +2194,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -2216,16 +2222,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueInt64) forKey:@(key->valueUInt32)];
}
@@ -2393,26 +2400,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -2421,16 +2428,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueBool) forKey:@(key->valueUInt32)];
}
@@ -2598,26 +2606,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -2626,16 +2634,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueFloat) forKey:@(key->valueUInt32)];
}
@@ -2803,26 +2812,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -2831,16 +2840,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueDouble) forKey:@(key->valueUInt32)];
}
@@ -3036,26 +3046,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -3064,28 +3074,29 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType);
}];
}
- (NSData *)serializedDataForUnknownValue:(int32_t)value
- forKey:(GPBValue *)key
- keyType:(GPBType)keyType {
- size_t msgSize = ComputeDictUInt32FieldSize(key->valueUInt32, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBTypeEnum);
+ forKey:(GPBGenericValue *)key
+ keyDataType:(GPBDataType)keyDataType {
+ size_t msgSize = ComputeDictUInt32FieldSize(key->valueUInt32, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum);
NSMutableData *data = [NSMutableData dataWithLength:msgSize];
GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data];
- WriteDictUInt32Field(outputStream, key->valueUInt32, kMapKeyFieldNumber, keyType);
- WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBTypeEnum);
+ WriteDictUInt32Field(outputStream, key->valueUInt32, kMapKeyFieldNumber, keyDataType);
+ WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum);
[outputStream release];
return data;
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueEnum) forKey:@(key->valueUInt32)];
}
@@ -3315,26 +3326,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
id aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
id aValue,
@@ -3343,16 +3354,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt32FieldSize([aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyType);
- WriteDictObjectField(outputStream, aValue, kMapValueFieldNumber, valueType);
+ WriteDictUInt32Field(outputStream, [aKey unsignedIntValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictObjectField(outputStream, aValue, kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:value->valueString forKey:@(key->valueUInt32)];
}
@@ -3520,26 +3532,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -3548,16 +3560,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyType);
- WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueUInt32) forKey:@(key->valueInt32)];
}
@@ -3725,26 +3738,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -3753,16 +3766,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyType);
- WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueType);
+ WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueInt32) forKey:@(key->valueInt32)];
}
@@ -3930,26 +3944,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -3958,16 +3972,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyType);
- WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueUInt64) forKey:@(key->valueInt32)];
}
@@ -4135,26 +4150,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -4163,16 +4178,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyType);
- WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueType);
+ WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueInt64) forKey:@(key->valueInt32)];
}
@@ -4340,26 +4356,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -4368,16 +4384,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyType);
- WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueType);
+ WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueBool) forKey:@(key->valueInt32)];
}
@@ -4545,26 +4562,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -4573,16 +4590,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyType);
- WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueType);
+ WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueFloat) forKey:@(key->valueInt32)];
}
@@ -4750,26 +4768,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -4778,16 +4796,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyType);
- WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueType);
+ WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueDouble) forKey:@(key->valueInt32)];
}
@@ -4983,26 +5002,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -5011,28 +5030,29 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyType);
- WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueType);
+ WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType);
}];
}
- (NSData *)serializedDataForUnknownValue:(int32_t)value
- forKey:(GPBValue *)key
- keyType:(GPBType)keyType {
- size_t msgSize = ComputeDictInt32FieldSize(key->valueInt32, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBTypeEnum);
+ forKey:(GPBGenericValue *)key
+ keyDataType:(GPBDataType)keyDataType {
+ size_t msgSize = ComputeDictInt32FieldSize(key->valueInt32, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum);
NSMutableData *data = [NSMutableData dataWithLength:msgSize];
GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data];
- WriteDictInt32Field(outputStream, key->valueInt32, kMapKeyFieldNumber, keyType);
- WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBTypeEnum);
+ WriteDictInt32Field(outputStream, key->valueInt32, kMapKeyFieldNumber, keyDataType);
+ WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum);
[outputStream release];
return data;
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueEnum) forKey:@(key->valueInt32)];
}
@@ -5262,26 +5282,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
id aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
id aValue,
@@ -5290,16 +5310,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt32FieldSize([aKey intValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyType);
- WriteDictObjectField(outputStream, aValue, kMapValueFieldNumber, valueType);
+ WriteDictInt32Field(outputStream, [aKey intValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictObjectField(outputStream, aValue, kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:value->valueString forKey:@(key->valueInt32)];
}
@@ -5467,26 +5488,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -5495,16 +5516,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueUInt32) forKey:@(key->valueUInt64)];
}
@@ -5672,26 +5694,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -5700,16 +5722,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueInt32) forKey:@(key->valueUInt64)];
}
@@ -5877,26 +5900,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -5905,16 +5928,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueUInt64) forKey:@(key->valueUInt64)];
}
@@ -6082,26 +6106,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -6110,16 +6134,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueInt64) forKey:@(key->valueUInt64)];
}
@@ -6287,26 +6312,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -6315,16 +6340,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueBool) forKey:@(key->valueUInt64)];
}
@@ -6492,26 +6518,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -6520,16 +6546,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueFloat) forKey:@(key->valueUInt64)];
}
@@ -6697,26 +6724,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -6725,16 +6752,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueDouble) forKey:@(key->valueUInt64)];
}
@@ -6930,26 +6958,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -6958,28 +6986,29 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueType);
+ WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType);
}];
}
- (NSData *)serializedDataForUnknownValue:(int32_t)value
- forKey:(GPBValue *)key
- keyType:(GPBType)keyType {
- size_t msgSize = ComputeDictUInt64FieldSize(key->valueUInt64, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBTypeEnum);
+ forKey:(GPBGenericValue *)key
+ keyDataType:(GPBDataType)keyDataType {
+ size_t msgSize = ComputeDictUInt64FieldSize(key->valueUInt64, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum);
NSMutableData *data = [NSMutableData dataWithLength:msgSize];
GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data];
- WriteDictUInt64Field(outputStream, key->valueUInt64, kMapKeyFieldNumber, keyType);
- WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBTypeEnum);
+ WriteDictUInt64Field(outputStream, key->valueUInt64, kMapKeyFieldNumber, keyDataType);
+ WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum);
[outputStream release];
return data;
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueEnum) forKey:@(key->valueUInt64)];
}
@@ -7209,26 +7238,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
id aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
id aValue,
@@ -7237,16 +7266,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictUInt64FieldSize([aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyType);
- WriteDictObjectField(outputStream, aValue, kMapValueFieldNumber, valueType);
+ WriteDictUInt64Field(outputStream, [aKey unsignedLongLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictObjectField(outputStream, aValue, kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:value->valueString forKey:@(key->valueUInt64)];
}
@@ -7414,26 +7444,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -7442,16 +7472,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyType);
- WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueUInt32) forKey:@(key->valueInt64)];
}
@@ -7619,26 +7650,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -7647,16 +7678,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyType);
- WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueType);
+ WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueInt32) forKey:@(key->valueInt64)];
}
@@ -7824,26 +7856,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -7852,16 +7884,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyType);
- WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueUInt64) forKey:@(key->valueInt64)];
}
@@ -8029,26 +8062,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -8057,16 +8090,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyType);
- WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueType);
+ WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueInt64) forKey:@(key->valueInt64)];
}
@@ -8234,26 +8268,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -8262,16 +8296,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyType);
- WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueType);
+ WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueBool) forKey:@(key->valueInt64)];
}
@@ -8439,26 +8474,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -8467,16 +8502,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyType);
- WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueType);
+ WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueFloat) forKey:@(key->valueInt64)];
}
@@ -8644,26 +8680,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -8672,16 +8708,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyType);
- WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueType);
+ WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueDouble) forKey:@(key->valueInt64)];
}
@@ -8877,26 +8914,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
NSNumber *aValue,
@@ -8905,28 +8942,29 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyType);
- WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueType);
+ WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType);
}];
}
- (NSData *)serializedDataForUnknownValue:(int32_t)value
- forKey:(GPBValue *)key
- keyType:(GPBType)keyType {
- size_t msgSize = ComputeDictInt64FieldSize(key->valueInt64, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBTypeEnum);
+ forKey:(GPBGenericValue *)key
+ keyDataType:(GPBDataType)keyDataType {
+ size_t msgSize = ComputeDictInt64FieldSize(key->valueInt64, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum);
NSMutableData *data = [NSMutableData dataWithLength:msgSize];
GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data];
- WriteDictInt64Field(outputStream, key->valueInt64, kMapKeyFieldNumber, keyType);
- WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBTypeEnum);
+ WriteDictInt64Field(outputStream, key->valueInt64, kMapKeyFieldNumber, keyDataType);
+ WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum);
[outputStream release];
return data;
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueEnum) forKey:@(key->valueInt64)];
}
@@ -9156,26 +9194,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
id aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *aKey,
id aValue,
@@ -9184,16 +9222,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictInt64FieldSize([aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictObjectFieldSize(aValue, kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyType);
- WriteDictObjectField(outputStream, aValue, kMapValueFieldNumber, valueType);
+ WriteDictInt64Field(outputStream, [aKey longLongValue], kMapKeyFieldNumber, keyDataType);
+ WriteDictObjectField(outputStream, aValue, kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:value->valueString forKey:@(key->valueInt64)];
}
@@ -9361,26 +9400,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
@@ -9389,16 +9428,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt32FieldSize([aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyType);
- WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueType);
+ WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType);
+ WriteDictUInt32Field(outputStream, [aValue unsignedIntValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueUInt32) forKey:key->valueString];
}
@@ -9566,26 +9606,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
@@ -9594,16 +9634,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt32FieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyType);
- WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueType);
+ WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType);
+ WriteDictInt32Field(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueInt32) forKey:key->valueString];
}
@@ -9771,26 +9812,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
@@ -9799,16 +9840,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictUInt64FieldSize([aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyType);
- WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueType);
+ WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType);
+ WriteDictUInt64Field(outputStream, [aValue unsignedLongLongValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueUInt64) forKey:key->valueString];
}
@@ -9976,26 +10018,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
@@ -10004,16 +10046,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictInt64FieldSize([aValue longLongValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyType);
- WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueType);
+ WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType);
+ WriteDictInt64Field(outputStream, [aValue longLongValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueInt64) forKey:key->valueString];
}
@@ -10181,26 +10224,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
@@ -10209,16 +10252,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictBoolFieldSize([aValue boolValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyType);
- WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueType);
+ WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType);
+ WriteDictBoolField(outputStream, [aValue boolValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueBool) forKey:key->valueString];
}
@@ -10386,26 +10430,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
@@ -10414,16 +10458,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictFloatFieldSize([aValue floatValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyType);
- WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueType);
+ WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType);
+ WriteDictFloatField(outputStream, [aValue floatValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueFloat) forKey:key->valueString];
}
@@ -10591,26 +10636,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
@@ -10619,16 +10664,17 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictDoubleFieldSize([aValue doubleValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyType);
- WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueType);
+ WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType);
+ WriteDictDoubleField(outputStream, [aValue doubleValue], kMapValueFieldNumber, valueDataType);
}];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueDouble) forKey:key->valueString];
}
@@ -10824,26 +10870,26 @@ void GPBDictionaryReadEntry(id mapDictionary,
return 0;
}
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
__block size_t result = 0;
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
BOOL *stop) {
#pragma unused(stop)
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}];
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
- GPBType keyType = field.mapKeyType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ GPBDataType keyDataType = field.mapKeyDataType;
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
[_dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *aKey,
NSNumber *aValue,
@@ -10852,28 +10898,29 @@ void GPBDictionaryReadEntry(id mapDictionary,
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictStringFieldSize(aKey, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize([aValue intValue], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyType);
- WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueType);
+ WriteDictStringField(outputStream, aKey, kMapKeyFieldNumber, keyDataType);
+ WriteDictEnumField(outputStream, [aValue intValue], kMapValueFieldNumber, valueDataType);
}];
}
- (NSData *)serializedDataForUnknownValue:(int32_t)value
- forKey:(GPBValue *)key
- keyType:(GPBType)keyType {
- size_t msgSize = ComputeDictStringFieldSize(key->valueString, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBTypeEnum);
+ forKey:(GPBGenericValue *)key
+ keyDataType:(GPBDataType)keyDataType {
+ size_t msgSize = ComputeDictStringFieldSize(key->valueString, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum);
NSMutableData *data = [NSMutableData dataWithLength:msgSize];
GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data];
- WriteDictStringField(outputStream, key->valueString, kMapKeyFieldNumber, keyType);
- WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBTypeEnum);
+ WriteDictStringField(outputStream, key->valueString, kMapKeyFieldNumber, keyDataType);
+ WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum);
[outputStream release];
return data;
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
[_dictionary setObject:@(value->valueEnum) forKey:key->valueString];
}
@@ -11104,7 +11151,8 @@ void GPBDictionaryReadEntry(id mapDictionary,
return NO;
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
int idx = (key->valueBool ? 1 : 0);
_values[idx] = value->valueUInt32;
_valueSet[idx] = YES;
@@ -11131,37 +11179,37 @@ void GPBDictionaryReadEntry(id mapDictionary,
}
- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
NSUInteger count = 0;
size_t result = 0;
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
++count;
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictUInt32FieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictUInt32FieldSize(_values[i], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}
}
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictUInt32FieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictUInt32FieldSize(_values[i], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBTypeBool);
- WriteDictUInt32Field(outputStream, _values[i], kMapValueFieldNumber, valueType);
+ WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ WriteDictUInt32Field(outputStream, _values[i], kMapValueFieldNumber, valueDataType);
}
}
}
@@ -11344,7 +11392,8 @@ void GPBDictionaryReadEntry(id mapDictionary,
return NO;
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
int idx = (key->valueBool ? 1 : 0);
_values[idx] = value->valueInt32;
_valueSet[idx] = YES;
@@ -11371,37 +11420,37 @@ void GPBDictionaryReadEntry(id mapDictionary,
}
- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
NSUInteger count = 0;
size_t result = 0;
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
++count;
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictInt32FieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictInt32FieldSize(_values[i], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}
}
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictInt32FieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictInt32FieldSize(_values[i], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBTypeBool);
- WriteDictInt32Field(outputStream, _values[i], kMapValueFieldNumber, valueType);
+ WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ WriteDictInt32Field(outputStream, _values[i], kMapValueFieldNumber, valueDataType);
}
}
}
@@ -11584,7 +11633,8 @@ void GPBDictionaryReadEntry(id mapDictionary,
return NO;
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
int idx = (key->valueBool ? 1 : 0);
_values[idx] = value->valueUInt64;
_valueSet[idx] = YES;
@@ -11611,37 +11661,37 @@ void GPBDictionaryReadEntry(id mapDictionary,
}
- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
NSUInteger count = 0;
size_t result = 0;
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
++count;
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictUInt64FieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictUInt64FieldSize(_values[i], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}
}
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictUInt64FieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictUInt64FieldSize(_values[i], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBTypeBool);
- WriteDictUInt64Field(outputStream, _values[i], kMapValueFieldNumber, valueType);
+ WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ WriteDictUInt64Field(outputStream, _values[i], kMapValueFieldNumber, valueDataType);
}
}
}
@@ -11824,7 +11874,8 @@ void GPBDictionaryReadEntry(id mapDictionary,
return NO;
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
int idx = (key->valueBool ? 1 : 0);
_values[idx] = value->valueInt64;
_valueSet[idx] = YES;
@@ -11851,37 +11902,37 @@ void GPBDictionaryReadEntry(id mapDictionary,
}
- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
NSUInteger count = 0;
size_t result = 0;
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
++count;
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictInt64FieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictInt64FieldSize(_values[i], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}
}
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictInt64FieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictInt64FieldSize(_values[i], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBTypeBool);
- WriteDictInt64Field(outputStream, _values[i], kMapValueFieldNumber, valueType);
+ WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ WriteDictInt64Field(outputStream, _values[i], kMapValueFieldNumber, valueDataType);
}
}
}
@@ -12064,7 +12115,8 @@ void GPBDictionaryReadEntry(id mapDictionary,
return NO;
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
int idx = (key->valueBool ? 1 : 0);
_values[idx] = value->valueBool;
_valueSet[idx] = YES;
@@ -12091,37 +12143,37 @@ void GPBDictionaryReadEntry(id mapDictionary,
}
- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
NSUInteger count = 0;
size_t result = 0;
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
++count;
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictBoolFieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictBoolFieldSize(_values[i], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}
}
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictBoolFieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictBoolFieldSize(_values[i], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBTypeBool);
- WriteDictBoolField(outputStream, _values[i], kMapValueFieldNumber, valueType);
+ WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ WriteDictBoolField(outputStream, _values[i], kMapValueFieldNumber, valueDataType);
}
}
}
@@ -12304,7 +12356,8 @@ void GPBDictionaryReadEntry(id mapDictionary,
return NO;
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
int idx = (key->valueBool ? 1 : 0);
_values[idx] = value->valueFloat;
_valueSet[idx] = YES;
@@ -12331,37 +12384,37 @@ void GPBDictionaryReadEntry(id mapDictionary,
}
- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
NSUInteger count = 0;
size_t result = 0;
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
++count;
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictFloatFieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictFloatFieldSize(_values[i], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}
}
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictFloatFieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictFloatFieldSize(_values[i], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBTypeBool);
- WriteDictFloatField(outputStream, _values[i], kMapValueFieldNumber, valueType);
+ WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ WriteDictFloatField(outputStream, _values[i], kMapValueFieldNumber, valueDataType);
}
}
}
@@ -12544,7 +12597,8 @@ void GPBDictionaryReadEntry(id mapDictionary,
return NO;
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
int idx = (key->valueBool ? 1 : 0);
_values[idx] = value->valueDouble;
_valueSet[idx] = YES;
@@ -12571,37 +12625,37 @@ void GPBDictionaryReadEntry(id mapDictionary,
}
- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
NSUInteger count = 0;
size_t result = 0;
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
++count;
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictDoubleFieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictDoubleFieldSize(_values[i], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}
}
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictDoubleFieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictDoubleFieldSize(_values[i], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBTypeBool);
- WriteDictDoubleField(outputStream, _values[i], kMapValueFieldNumber, valueType);
+ WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ WriteDictDoubleField(outputStream, _values[i], kMapValueFieldNumber, valueDataType);
}
}
}
@@ -12772,7 +12826,8 @@ void GPBDictionaryReadEntry(id mapDictionary,
return _values[key ? 1 : 0];
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
int idx = (key->valueBool ? 1 : 0);
[_values[idx] release];
_values[idx] = [value->valueString retain];
@@ -12820,37 +12875,37 @@ void GPBDictionaryReadEntry(id mapDictionary,
}
- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
NSUInteger count = 0;
size_t result = 0;
for (int i = 0; i < 2; ++i) {
if (_values[i] != nil) {
++count;
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictObjectFieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictObjectFieldSize(_values[i], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}
}
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
for (int i = 0; i < 2; ++i) {
if (_values[i] != nil) {
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictObjectFieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictObjectFieldSize(_values[i], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBTypeBool);
- WriteDictObjectField(outputStream, _values[i], kMapValueFieldNumber, valueType);
+ WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ WriteDictObjectField(outputStream, _values[i], kMapValueFieldNumber, valueDataType);
}
}
}
@@ -13115,14 +13170,14 @@ void GPBDictionaryReadEntry(id mapDictionary,
// This block of code is generated, do not edit it directly.
- (NSData *)serializedDataForUnknownValue:(int32_t)value
- forKey:(GPBValue *)key
- keyType:(GPBType)keyType {
- size_t msgSize = ComputeDictBoolFieldSize(key->valueBool, kMapKeyFieldNumber, keyType);
- msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBTypeEnum);
+ forKey:(GPBGenericValue *)key
+ keyDataType:(GPBDataType)keyDataType {
+ size_t msgSize = ComputeDictBoolFieldSize(key->valueBool, kMapKeyFieldNumber, keyDataType);
+ msgSize += ComputeDictEnumFieldSize(value, kMapValueFieldNumber, GPBDataTypeEnum);
NSMutableData *data = [NSMutableData dataWithLength:msgSize];
GPBCodedOutputStream *outputStream = [[GPBCodedOutputStream alloc] initWithData:data];
- WriteDictBoolField(outputStream, key->valueBool, kMapKeyFieldNumber, keyType);
- WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBTypeEnum);
+ WriteDictBoolField(outputStream, key->valueBool, kMapKeyFieldNumber, keyDataType);
+ WriteDictEnumField(outputStream, value, kMapValueFieldNumber, GPBDataTypeEnum);
[outputStream release];
return data;
}
@@ -13130,37 +13185,37 @@ void GPBDictionaryReadEntry(id mapDictionary,
//%PDDM-EXPAND-END SERIAL_DATA_FOR_ENTRY_POD_Enum(Bool)
- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
NSUInteger count = 0;
size_t result = 0;
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
++count;
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictInt32FieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictInt32FieldSize(_values[i], kMapValueFieldNumber, valueDataType);
result += GPBComputeRawVarint32SizeForInteger(msgSize) + msgSize;
}
}
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBTypeMessage);
+ size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field), GPBDataTypeMessage);
result += tagSize * count;
return result;
}
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field {
- GPBType valueType = GPBGetFieldType(field);
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
uint32_t tag = GPBWireFormatMakeTag(GPBFieldNumber(field), GPBWireFormatLengthDelimited);
for (int i = 0; i < 2; ++i) {
if (_valueSet[i]) {
// Write the tag.
[outputStream writeInt32NoTag:tag];
// Write the size of the message.
- size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBTypeBool);
- msgSize += ComputeDictInt32FieldSize(_values[i], kMapValueFieldNumber, valueType);
+ size_t msgSize = ComputeDictBoolFieldSize((i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ msgSize += ComputeDictInt32FieldSize(_values[i], kMapValueFieldNumber, valueDataType);
[outputStream writeInt32NoTag:(int32_t)msgSize];
// Write the fields.
- WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBTypeBool);
- WriteDictInt32Field(outputStream, _values[i], kMapValueFieldNumber, valueType);
+ WriteDictBoolField(outputStream, (i == 1), kMapKeyFieldNumber, GPBDataTypeBool);
+ WriteDictInt32Field(outputStream, _values[i], kMapValueFieldNumber, valueDataType);
}
}
}
@@ -13174,7 +13229,8 @@ void GPBDictionaryReadEntry(id mapDictionary,
}
}
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key {
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key {
int idx = (key->valueBool ? 1 : 0);
_values[idx] = value->valueInt32;
_valueSet[idx] = YES;
diff --git a/objectivec/GPBDictionary_PackagePrivate.h b/objectivec/GPBDictionary_PackagePrivate.h
index 9c3c5915..7b921e8e 100644
--- a/objectivec/GPBDictionary_PackagePrivate.h
+++ b/objectivec/GPBDictionary_PackagePrivate.h
@@ -41,7 +41,8 @@
- (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field;
- (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
asField:(GPBFieldDescriptor *)field;
-- (void)setGPBValue:(GPBValue *)value forGPBValueKey:(GPBValue *)key;
+- (void)setGPBGenericValue:(GPBGenericValue *)value
+ forGPBGenericValueKey:(GPBGenericValue *)key;
- (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block;
@end
@@ -75,8 +76,8 @@
//%
//%PDDM-DEFINE EXTRA_DICTIONARY_PRIVATE_INTERFACES_Enum()
//%- (NSData *)serializedDataForUnknownValue:(int32_t)value
-//% forKey:(GPBValue *)key
-//% keyType:(GPBType)keyType;
+//% forKey:(GPBGenericValue *)key
+//% keyDataType:(GPBDataType)keyDataType;
//%
//%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(UInt32)
@@ -129,8 +130,8 @@
GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
}
- (NSData *)serializedDataForUnknownValue:(int32_t)value
- forKey:(GPBValue *)key
- keyType:(GPBType)keyType;
+ forKey:(GPBGenericValue *)key
+ keyDataType:(GPBDataType)keyDataType;
@end
@interface GPBUInt32ObjectDictionary () <GPBDictionaryInternalsProtocol> {
@@ -192,8 +193,8 @@
GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
}
- (NSData *)serializedDataForUnknownValue:(int32_t)value
- forKey:(GPBValue *)key
- keyType:(GPBType)keyType;
+ forKey:(GPBGenericValue *)key
+ keyDataType:(GPBDataType)keyDataType;
@end
@interface GPBInt32ObjectDictionary () <GPBDictionaryInternalsProtocol> {
@@ -255,8 +256,8 @@
GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
}
- (NSData *)serializedDataForUnknownValue:(int32_t)value
- forKey:(GPBValue *)key
- keyType:(GPBType)keyType;
+ forKey:(GPBGenericValue *)key
+ keyDataType:(GPBDataType)keyDataType;
@end
@interface GPBUInt64ObjectDictionary () <GPBDictionaryInternalsProtocol> {
@@ -318,8 +319,8 @@
GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
}
- (NSData *)serializedDataForUnknownValue:(int32_t)value
- forKey:(GPBValue *)key
- keyType:(GPBType)keyType;
+ forKey:(GPBGenericValue *)key
+ keyDataType:(GPBDataType)keyDataType;
@end
@interface GPBInt64ObjectDictionary () <GPBDictionaryInternalsProtocol> {
@@ -381,8 +382,8 @@
GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
}
- (NSData *)serializedDataForUnknownValue:(int32_t)value
- forKey:(GPBValue *)key
- keyType:(GPBType)keyType;
+ forKey:(GPBGenericValue *)key
+ keyDataType:(GPBDataType)keyDataType;
@end
@interface GPBBoolObjectDictionary () <GPBDictionaryInternalsProtocol> {
@@ -444,8 +445,8 @@
GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
}
- (NSData *)serializedDataForUnknownValue:(int32_t)value
- forKey:(GPBValue *)key
- keyType:(GPBType)keyType;
+ forKey:(GPBGenericValue *)key
+ keyDataType:(GPBDataType)keyDataType;
@end
//%PDDM-EXPAND-END (6 expansions)
diff --git a/objectivec/GPBExtensionField.m b/objectivec/GPBExtensionField.m
deleted file mode 100644
index bbb36d7f..00000000
--- a/objectivec/GPBExtensionField.m
+++ /dev/null
@@ -1,525 +0,0 @@
-// 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.
-
-#import "GPBExtensionField_PackagePrivate.h"
-
-#import <objc/runtime.h>
-
-#import "GPBCodedInputStream_PackagePrivate.h"
-#import "GPBCodedOutputStream.h"
-#import "GPBDescriptor_PackagePrivate.h"
-#import "GPBMessage_PackagePrivate.h"
-#import "GPBUtilities_PackagePrivate.h"
-
-GPB_INLINE size_t TypeSize(GPBType type) {
- switch (type) {
- case GPBTypeBool:
- return 1;
- case GPBTypeFixed32:
- case GPBTypeSFixed32:
- case GPBTypeFloat:
- return 4;
- case GPBTypeFixed64:
- case GPBTypeSFixed64:
- case GPBTypeDouble:
- return 8;
- default:
- return 0;
- }
-}
-
-GPB_INLINE BOOL ExtensionIsRepeated(GPBExtensionDescription *description) {
- return (description->options & GPBExtensionRepeated) != 0;
-}
-
-GPB_INLINE BOOL ExtensionIsPacked(GPBExtensionDescription *description) {
- return (description->options & GPBExtensionPacked) != 0;
-}
-
-GPB_INLINE BOOL ExtensionIsWireFormat(GPBExtensionDescription *description) {
- return (description->options & GPBExtensionSetWireFormat) != 0;
-}
-
-static size_t ComputePBSerializedSizeNoTagOfObject(GPBType type, id object) {
-#define FIELD_CASE(TYPE, ACCESSOR) \
- case GPBType##TYPE: \
- return GPBCompute##TYPE##SizeNoTag([(NSNumber *)object ACCESSOR]);
-#define FIELD_CASE2(TYPE) \
- case GPBType##TYPE: \
- return GPBCompute##TYPE##SizeNoTag(object);
- switch (type) {
- FIELD_CASE(Bool, boolValue)
- FIELD_CASE(Float, floatValue)
- FIELD_CASE(Double, doubleValue)
- FIELD_CASE(Int32, intValue)
- FIELD_CASE(SFixed32, intValue)
- FIELD_CASE(SInt32, intValue)
- FIELD_CASE(Enum, intValue)
- FIELD_CASE(Int64, longLongValue)
- FIELD_CASE(SInt64, longLongValue)
- FIELD_CASE(SFixed64, longLongValue)
- FIELD_CASE(UInt32, unsignedIntValue)
- FIELD_CASE(Fixed32, unsignedIntValue)
- FIELD_CASE(UInt64, unsignedLongLongValue)
- FIELD_CASE(Fixed64, unsignedLongLongValue)
- FIELD_CASE2(Data)
- FIELD_CASE2(String)
- FIELD_CASE2(Message)
- FIELD_CASE2(Group)
- }
-#undef FIELD_CASE
-#undef FIELD_CASE2
-}
-
-static size_t ComputeSerializedSizeIncludingTagOfObject(
- GPBExtensionDescription *description, id object) {
-#define FIELD_CASE(TYPE, ACCESSOR) \
- case GPBType##TYPE: \
- return GPBCompute##TYPE##Size(description->fieldNumber, \
- [(NSNumber *)object ACCESSOR]);
-#define FIELD_CASE2(TYPE) \
- case GPBType##TYPE: \
- return GPBCompute##TYPE##Size(description->fieldNumber, object);
- switch (description->type) {
- FIELD_CASE(Bool, boolValue)
- FIELD_CASE(Float, floatValue)
- FIELD_CASE(Double, doubleValue)
- FIELD_CASE(Int32, intValue)
- FIELD_CASE(SFixed32, intValue)
- FIELD_CASE(SInt32, intValue)
- FIELD_CASE(Enum, intValue)
- FIELD_CASE(Int64, longLongValue)
- FIELD_CASE(SInt64, longLongValue)
- FIELD_CASE(SFixed64, longLongValue)
- FIELD_CASE(UInt32, unsignedIntValue)
- FIELD_CASE(Fixed32, unsignedIntValue)
- FIELD_CASE(UInt64, unsignedLongLongValue)
- FIELD_CASE(Fixed64, unsignedLongLongValue)
- FIELD_CASE2(Data)
- FIELD_CASE2(String)
- FIELD_CASE2(Group)
- case GPBTypeMessage:
- if (ExtensionIsWireFormat(description)) {
- return GPBComputeMessageSetExtensionSize(description->fieldNumber,
- object);
- } else {
- return GPBComputeMessageSize(description->fieldNumber, object);
- }
- }
-#undef FIELD_CASE
-#undef FIELD_CASE2
-}
-
-static size_t ComputeSerializedSizeIncludingTagOfArray(
- GPBExtensionDescription *description, NSArray *values) {
- if (ExtensionIsPacked(description)) {
- size_t size = 0;
- size_t typeSize = TypeSize(description->type);
- if (typeSize != 0) {
- size = values.count * typeSize;
- } else {
- for (id value in values) {
- size += ComputePBSerializedSizeNoTagOfObject(description->type, value);
- }
- }
- return size + GPBComputeTagSize(description->fieldNumber) +
- GPBComputeRawVarint32SizeForInteger(size);
- } else {
- size_t size = 0;
- for (id value in values) {
- size += ComputeSerializedSizeIncludingTagOfObject(description, value);
- }
- return size;
- }
-}
-
-static void WriteObjectIncludingTagToCodedOutputStream(
- id object, GPBExtensionDescription *description,
- GPBCodedOutputStream *output) {
-#define FIELD_CASE(TYPE, ACCESSOR) \
- case GPBType##TYPE: \
- [output write##TYPE:description->fieldNumber \
- value:[(NSNumber *)object ACCESSOR]]; \
- return;
-#define FIELD_CASE2(TYPE) \
- case GPBType##TYPE: \
- [output write##TYPE:description->fieldNumber value:object]; \
- return;
- switch (description->type) {
- FIELD_CASE(Bool, boolValue)
- FIELD_CASE(Float, floatValue)
- FIELD_CASE(Double, doubleValue)
- FIELD_CASE(Int32, intValue)
- FIELD_CASE(SFixed32, intValue)
- FIELD_CASE(SInt32, intValue)
- FIELD_CASE(Enum, intValue)
- FIELD_CASE(Int64, longLongValue)
- FIELD_CASE(SInt64, longLongValue)
- FIELD_CASE(SFixed64, longLongValue)
- FIELD_CASE(UInt32, unsignedIntValue)
- FIELD_CASE(Fixed32, unsignedIntValue)
- FIELD_CASE(UInt64, unsignedLongLongValue)
- FIELD_CASE(Fixed64, unsignedLongLongValue)
- FIELD_CASE2(Data)
- FIELD_CASE2(String)
- FIELD_CASE2(Group)
- case GPBTypeMessage:
- if (ExtensionIsWireFormat(description)) {
- [output writeMessageSetExtension:description->fieldNumber value:object];
- } else {
- [output writeMessage:description->fieldNumber value:object];
- }
- return;
- }
-#undef FIELD_CASE
-#undef FIELD_CASE2
-}
-
-static void WriteObjectNoTagToCodedOutputStream(
- id object, GPBExtensionDescription *description,
- GPBCodedOutputStream *output) {
-#define FIELD_CASE(TYPE, ACCESSOR) \
- case GPBType##TYPE: \
- [output write##TYPE##NoTag:[(NSNumber *)object ACCESSOR]]; \
- return;
-#define FIELD_CASE2(TYPE) \
- case GPBType##TYPE: \
- [output write##TYPE##NoTag:object]; \
- return;
- switch (description->type) {
- FIELD_CASE(Bool, boolValue)
- FIELD_CASE(Float, floatValue)
- FIELD_CASE(Double, doubleValue)
- FIELD_CASE(Int32, intValue)
- FIELD_CASE(SFixed32, intValue)
- FIELD_CASE(SInt32, intValue)
- FIELD_CASE(Enum, intValue)
- FIELD_CASE(Int64, longLongValue)
- FIELD_CASE(SInt64, longLongValue)
- FIELD_CASE(SFixed64, longLongValue)
- FIELD_CASE(UInt32, unsignedIntValue)
- FIELD_CASE(Fixed32, unsignedIntValue)
- FIELD_CASE(UInt64, unsignedLongLongValue)
- FIELD_CASE(Fixed64, unsignedLongLongValue)
- FIELD_CASE2(Data)
- FIELD_CASE2(String)
- FIELD_CASE2(Message)
- case GPBTypeGroup:
- [output writeGroupNoTag:description->fieldNumber value:object];
- return;
- }
-#undef FIELD_CASE
-#undef FIELD_CASE2
-}
-
-static void WriteArrayIncludingTagsToCodedOutputStream(
- NSArray *values, GPBExtensionDescription *description,
- GPBCodedOutputStream *output) {
- if (ExtensionIsPacked(description)) {
- [output writeTag:description->fieldNumber
- format:GPBWireFormatLengthDelimited];
- size_t dataSize = 0;
- size_t typeSize = TypeSize(description->type);
- if (typeSize != 0) {
- dataSize = values.count * typeSize;
- } else {
- for (id value in values) {
- dataSize +=
- ComputePBSerializedSizeNoTagOfObject(description->type, value);
- }
- }
- [output writeRawVarintSizeTAs32:dataSize];
- for (id value in values) {
- WriteObjectNoTagToCodedOutputStream(value, description, output);
- }
- } else {
- for (id value in values) {
- WriteObjectIncludingTagToCodedOutputStream(value, description, output);
- }
- }
-}
-
-@implementation GPBExtensionField {
- GPBExtensionDescription *description_;
- GPBExtensionDescriptor *descriptor_;
- GPBValue defaultValue_;
-}
-
-@synthesize containingType = containingType_;
-@synthesize descriptor = descriptor_;
-
-- (instancetype)init {
- // Throw an exception if people attempt to not use the designated initializer.
- self = [super init];
- if (self != nil) {
- [self doesNotRecognizeSelector:_cmd];
- self = nil;
- }
- return self;
-}
-
-- (instancetype)initWithDescription:(GPBExtensionDescription *)description {
- if ((self = [super init])) {
- description_ = description;
- if (description->extendedClass) {
- Class containingClass = objc_lookUpClass(description->extendedClass);
- NSAssert1(containingClass, @"Class %s not defined",
- description->extendedClass);
- containingType_ = [containingClass descriptor];
- }
-#if DEBUG
- const char *className = description->messageOrGroupClassName;
- if (className) {
- NSAssert1(objc_lookUpClass(className) != Nil, @"Class %s not defined",
- className);
- }
-#endif
- descriptor_ = [[GPBExtensionDescriptor alloc]
- initWithExtensionDescription:description];
- GPBType type = description_->type;
- if (type == GPBTypeData) {
- // Data stored as a length prefixed c-string in descriptor records.
- const uint8_t *bytes =
- (const uint8_t *)description->defaultValue.valueData;
- if (bytes) {
- uint32_t length = *((uint32_t *)bytes);
- // The length is stored in network byte order.
- length = ntohl(length);
- bytes += sizeof(length);
- defaultValue_.valueData =
- [[NSData alloc] initWithBytes:bytes length:length];
- }
- } else if (type == GPBTypeMessage || type == GPBTypeGroup) {
- // The default is looked up in -defaultValue instead since extensions
- // aren't
- // common, we avoid the hit startup hit and it avoid initialization order
- // issues.
- } else {
- defaultValue_ = description->defaultValue;
- }
- }
- return self;
-}
-
-- (void)dealloc {
- if ((description_->type == GPBTypeData) &&
- !ExtensionIsRepeated(description_)) {
- [defaultValue_.valueData release];
- }
- [descriptor_ release];
- [super dealloc];
-}
-
-- (NSString *)description {
- return [NSString stringWithFormat:@"<%@ %p> FieldNumber:%d ContainingType:%@",
- [self class], self, self.fieldNumber,
- self.containingType];
-}
-
-- (id)copyWithZone:(NSZone *)__unused zone {
- return [self retain];
-}
-
-#pragma mark Properties
-
-- (int32_t)fieldNumber {
- return description_->fieldNumber;
-}
-
-- (GPBWireFormat)wireType {
- return GPBWireFormatForType(description_->type,
- ExtensionIsPacked(description_));
-}
-
-- (BOOL)isRepeated {
- return ExtensionIsRepeated(description_);
-}
-
-- (id)defaultValue {
- if (ExtensionIsRepeated(description_)) {
- return nil;
- }
-
- switch (description_->type) {
- case GPBTypeBool:
- return @(defaultValue_.valueBool);
- case GPBTypeFloat:
- return @(defaultValue_.valueFloat);
- case GPBTypeDouble:
- return @(defaultValue_.valueDouble);
- case GPBTypeInt32:
- case GPBTypeSInt32:
- case GPBTypeEnum:
- case GPBTypeSFixed32:
- return @(defaultValue_.valueInt32);
- case GPBTypeInt64:
- case GPBTypeSInt64:
- case GPBTypeSFixed64:
- return @(defaultValue_.valueInt64);
- case GPBTypeUInt32:
- case GPBTypeFixed32:
- return @(defaultValue_.valueUInt32);
- case GPBTypeUInt64:
- case GPBTypeFixed64:
- return @(defaultValue_.valueUInt64);
- case GPBTypeData:
- // Like message fields, the default is zero length data.
- return (defaultValue_.valueData ? defaultValue_.valueData
- : GPBEmptyNSData());
- case GPBTypeString:
- // Like message fields, the default is zero length string.
- return (defaultValue_.valueString ? defaultValue_.valueString : @"");
- case GPBTypeGroup:
- case GPBTypeMessage:
- NSAssert(0, @"Shouldn't get here");
- return nil;
- }
-}
-
-#pragma mark Internals
-
-- (void)mergeFromCodedInputStream:(GPBCodedInputStream *)input
- extensionRegistry:(GPBExtensionRegistry *)extensionRegistry
- message:(GPBMessage *)message {
- GPBCodedInputStreamState *state = &input->state_;
- if (ExtensionIsPacked(description_)) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- id value = [self newSingleValueFromCodedInputStream:input
- extensionRegistry:extensionRegistry
- existingValue:nil];
- [message addExtension:self value:value];
- [value release];
- }
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- id existingValue = nil;
- BOOL isRepeated = ExtensionIsRepeated(description_);
- if (!isRepeated && GPBTypeIsMessage(description_->type)) {
- existingValue = [message getExistingExtension:self];
- }
- id value = [self newSingleValueFromCodedInputStream:input
- extensionRegistry:extensionRegistry
- existingValue:existingValue];
- if (isRepeated) {
- [message addExtension:self value:value];
- } else {
- [message setExtension:self value:value];
- }
- [value release];
- }
-}
-
-- (void)writeValue:(id)value
- includingTagToCodedOutputStream:(GPBCodedOutputStream *)output {
- if (ExtensionIsRepeated(description_)) {
- WriteArrayIncludingTagsToCodedOutputStream(value, description_, output);
- } else {
- WriteObjectIncludingTagToCodedOutputStream(value, description_, output);
- }
-}
-
-- (size_t)computeSerializedSizeIncludingTag:(id)value {
- if (ExtensionIsRepeated(description_)) {
- return ComputeSerializedSizeIncludingTagOfArray(description_, value);
- } else {
- return ComputeSerializedSizeIncludingTagOfObject(description_, value);
- }
-}
-
-// Note that this returns a retained value intentionally.
-- (id)newSingleValueFromCodedInputStream:(GPBCodedInputStream *)input
- extensionRegistry:(GPBExtensionRegistry *)extensionRegistry
- existingValue:(GPBMessage *)existingValue {
- GPBCodedInputStreamState *state = &input->state_;
- switch (description_->type) {
- case GPBTypeBool: return [[NSNumber alloc] initWithBool:GPBCodedInputStreamReadBool(state)];
- case GPBTypeFixed32: return [[NSNumber alloc] initWithUnsignedInt:GPBCodedInputStreamReadFixed32(state)];
- case GPBTypeSFixed32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadSFixed32(state)];
- case GPBTypeFloat: return [[NSNumber alloc] initWithFloat:GPBCodedInputStreamReadFloat(state)];
- case GPBTypeFixed64: return [[NSNumber alloc] initWithUnsignedLongLong:GPBCodedInputStreamReadFixed64(state)];
- case GPBTypeSFixed64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadSFixed64(state)];
- case GPBTypeDouble: return [[NSNumber alloc] initWithDouble:GPBCodedInputStreamReadDouble(state)];
- case GPBTypeInt32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadInt32(state)];
- case GPBTypeInt64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadInt64(state)];
- case GPBTypeSInt32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadSInt32(state)];
- case GPBTypeSInt64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadSInt64(state)];
- case GPBTypeUInt32: return [[NSNumber alloc] initWithUnsignedInt:GPBCodedInputStreamReadUInt32(state)];
- case GPBTypeUInt64: return [[NSNumber alloc] initWithUnsignedLongLong:GPBCodedInputStreamReadUInt64(state)];
- case GPBTypeData: return GPBCodedInputStreamReadRetainedData(state);
- case GPBTypeString: return GPBCodedInputStreamReadRetainedString(state);
- case GPBTypeEnum: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadEnum(state)];
- case GPBTypeGroup:
- case GPBTypeMessage: {
- GPBMessage *message;
- if (existingValue) {
- message = [existingValue retain];
- } else {
- GPBDescriptor *decriptor = [descriptor_.msgClass descriptor];
- message = [[decriptor.messageClass alloc] init];
- }
-
- if (description_->type == GPBTypeGroup) {
- [input readGroup:description_->fieldNumber
- message:message
- extensionRegistry:extensionRegistry];
- } else {
- // description_->type == GPBTypeMessage
- if (ExtensionIsWireFormat(description_)) {
- // For MessageSet fields the message length will have already been
- // read.
- [message mergeFromCodedInputStream:input
- extensionRegistry:extensionRegistry];
- } else {
- [input readMessage:message extensionRegistry:extensionRegistry];
- }
- }
-
- return message;
- }
- }
-
- return nil;
-}
-
-- (NSComparisonResult)compareByFieldNumber:(GPBExtensionField *)other {
- int32_t selfNumber = description_->fieldNumber;
- int32_t otherNumber = other->description_->fieldNumber;
- if (selfNumber < otherNumber) {
- return NSOrderedAscending;
- } else if (selfNumber == otherNumber) {
- return NSOrderedSame;
- } else {
- return NSOrderedDescending;
- }
-}
-
-@end
diff --git a/objectivec/GPBExtensionField_PackagePrivate.h b/objectivec/GPBExtensionField_PackagePrivate.h
deleted file mode 100644
index 6256b9a7..00000000
--- a/objectivec/GPBExtensionField_PackagePrivate.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// 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.
-
-#import <Foundation/Foundation.h>
-
-#import "GPBExtensionField.h"
-
-struct GPBExtensionDescription;
-
-@interface GPBExtensionField ()
-
-- (void)mergeFromCodedInputStream:(GPBCodedInputStream *)input
- extensionRegistry:(GPBExtensionRegistry *)extensionRegistry
- message:(GPBMessage *)message;
-
-- (instancetype)initWithDescription:(struct GPBExtensionDescription *)description;
-
-- (size_t)computeSerializedSizeIncludingTag:(id)value;
-- (void)writeValue:(id)value
- includingTagToCodedOutputStream:(GPBCodedOutputStream *)output;
-
-- (NSComparisonResult)compareByFieldNumber:(GPBExtensionField *)other;
-
-@end
diff --git a/objectivec/GPBExtensionField.h b/objectivec/GPBExtensionInternals.h
index e5ba1561..2b980aef 100644
--- a/objectivec/GPBExtensionField.h
+++ b/objectivec/GPBExtensionInternals.h
@@ -30,22 +30,21 @@
#import <Foundation/Foundation.h>
-#import "GPBWireFormat.h"
-#import "GPBTypes.h"
+#import "GPBDescriptor.h"
@class GPBCodedInputStream;
@class GPBCodedOutputStream;
@class GPBExtensionRegistry;
-@class GPBDescriptor;
-@class GPBExtensionDescriptor;
-@interface GPBExtensionField : NSObject<NSCopying>
+void GPBExtensionMergeFromInputStream(GPBExtensionDescriptor *extension,
+ BOOL isPackedOnStream,
+ GPBCodedInputStream *input,
+ GPBExtensionRegistry *extensionRegistry,
+ GPBMessage *message);
-@property(nonatomic, readonly) int32_t fieldNumber;
-@property(nonatomic, readonly) GPBWireFormat wireType;
-@property(nonatomic, readonly) BOOL isRepeated;
-@property(nonatomic, readonly) GPBDescriptor *containingType;
-@property(nonatomic, readonly) id defaultValue;
-@property(nonatomic, readonly) GPBExtensionDescriptor *descriptor;
+size_t GPBComputeExtensionSerializedSizeIncludingTag(
+ GPBExtensionDescriptor *extension, id value);
-@end
+void GPBWriteExtensionValueToOutputStream(GPBExtensionDescriptor *extension,
+ id value,
+ GPBCodedOutputStream *output);
diff --git a/objectivec/GPBExtensionInternals.m b/objectivec/GPBExtensionInternals.m
new file mode 100644
index 00000000..634c3369
--- /dev/null
+++ b/objectivec/GPBExtensionInternals.m
@@ -0,0 +1,380 @@
+// 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.
+
+#import "GPBExtensionInternals.h"
+
+#import <objc/runtime.h>
+
+#import "GPBCodedInputStream_PackagePrivate.h"
+#import "GPBCodedOutputStream.h"
+#import "GPBDescriptor_PackagePrivate.h"
+#import "GPBMessage_PackagePrivate.h"
+#import "GPBUtilities_PackagePrivate.h"
+
+static id NewSingleValueFromInputStream(GPBExtensionDescriptor *extension,
+ GPBCodedInputStream *input,
+ GPBExtensionRegistry *extensionRegistry,
+ GPBMessage *existingValue)
+ __attribute__((ns_returns_retained));
+
+GPB_INLINE size_t DataTypeSize(GPBDataType dataType) {
+ switch (dataType) {
+ case GPBDataTypeBool:
+ return 1;
+ case GPBDataTypeFixed32:
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeFloat:
+ return 4;
+ case GPBDataTypeFixed64:
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeDouble:
+ return 8;
+ default:
+ return 0;
+ }
+}
+
+static size_t ComputePBSerializedSizeNoTagOfObject(GPBDataType dataType, id object) {
+#define FIELD_CASE(TYPE, ACCESSOR) \
+ case GPBDataType##TYPE: \
+ return GPBCompute##TYPE##SizeNoTag([(NSNumber *)object ACCESSOR]);
+#define FIELD_CASE2(TYPE) \
+ case GPBDataType##TYPE: \
+ return GPBCompute##TYPE##SizeNoTag(object);
+ switch (dataType) {
+ FIELD_CASE(Bool, boolValue)
+ FIELD_CASE(Float, floatValue)
+ FIELD_CASE(Double, doubleValue)
+ FIELD_CASE(Int32, intValue)
+ FIELD_CASE(SFixed32, intValue)
+ FIELD_CASE(SInt32, intValue)
+ FIELD_CASE(Enum, intValue)
+ FIELD_CASE(Int64, longLongValue)
+ FIELD_CASE(SInt64, longLongValue)
+ FIELD_CASE(SFixed64, longLongValue)
+ FIELD_CASE(UInt32, unsignedIntValue)
+ FIELD_CASE(Fixed32, unsignedIntValue)
+ FIELD_CASE(UInt64, unsignedLongLongValue)
+ FIELD_CASE(Fixed64, unsignedLongLongValue)
+ FIELD_CASE2(Bytes)
+ FIELD_CASE2(String)
+ FIELD_CASE2(Message)
+ FIELD_CASE2(Group)
+ }
+#undef FIELD_CASE
+#undef FIELD_CASE2
+}
+
+static size_t ComputeSerializedSizeIncludingTagOfObject(
+ GPBExtensionDescription *description, id object) {
+#define FIELD_CASE(TYPE, ACCESSOR) \
+ case GPBDataType##TYPE: \
+ return GPBCompute##TYPE##Size(description->fieldNumber, \
+ [(NSNumber *)object ACCESSOR]);
+#define FIELD_CASE2(TYPE) \
+ case GPBDataType##TYPE: \
+ return GPBCompute##TYPE##Size(description->fieldNumber, object);
+ switch (description->dataType) {
+ FIELD_CASE(Bool, boolValue)
+ FIELD_CASE(Float, floatValue)
+ FIELD_CASE(Double, doubleValue)
+ FIELD_CASE(Int32, intValue)
+ FIELD_CASE(SFixed32, intValue)
+ FIELD_CASE(SInt32, intValue)
+ FIELD_CASE(Enum, intValue)
+ FIELD_CASE(Int64, longLongValue)
+ FIELD_CASE(SInt64, longLongValue)
+ FIELD_CASE(SFixed64, longLongValue)
+ FIELD_CASE(UInt32, unsignedIntValue)
+ FIELD_CASE(Fixed32, unsignedIntValue)
+ FIELD_CASE(UInt64, unsignedLongLongValue)
+ FIELD_CASE(Fixed64, unsignedLongLongValue)
+ FIELD_CASE2(Bytes)
+ FIELD_CASE2(String)
+ FIELD_CASE2(Group)
+ case GPBDataTypeMessage:
+ if (GPBExtensionIsWireFormat(description)) {
+ return GPBComputeMessageSetExtensionSize(description->fieldNumber,
+ object);
+ } else {
+ return GPBComputeMessageSize(description->fieldNumber, object);
+ }
+ }
+#undef FIELD_CASE
+#undef FIELD_CASE2
+}
+
+static size_t ComputeSerializedSizeIncludingTagOfArray(
+ GPBExtensionDescription *description, NSArray *values) {
+ if (GPBExtensionIsPacked(description)) {
+ size_t size = 0;
+ size_t typeSize = DataTypeSize(description->dataType);
+ if (typeSize != 0) {
+ size = values.count * typeSize;
+ } else {
+ for (id value in values) {
+ size +=
+ ComputePBSerializedSizeNoTagOfObject(description->dataType, value);
+ }
+ }
+ return size + GPBComputeTagSize(description->fieldNumber) +
+ GPBComputeRawVarint32SizeForInteger(size);
+ } else {
+ size_t size = 0;
+ for (id value in values) {
+ size += ComputeSerializedSizeIncludingTagOfObject(description, value);
+ }
+ return size;
+ }
+}
+
+static void WriteObjectIncludingTagToCodedOutputStream(
+ id object, GPBExtensionDescription *description,
+ GPBCodedOutputStream *output) {
+#define FIELD_CASE(TYPE, ACCESSOR) \
+ case GPBDataType##TYPE: \
+ [output write##TYPE:description->fieldNumber \
+ value:[(NSNumber *)object ACCESSOR]]; \
+ return;
+#define FIELD_CASE2(TYPE) \
+ case GPBDataType##TYPE: \
+ [output write##TYPE:description->fieldNumber value:object]; \
+ return;
+ switch (description->dataType) {
+ FIELD_CASE(Bool, boolValue)
+ FIELD_CASE(Float, floatValue)
+ FIELD_CASE(Double, doubleValue)
+ FIELD_CASE(Int32, intValue)
+ FIELD_CASE(SFixed32, intValue)
+ FIELD_CASE(SInt32, intValue)
+ FIELD_CASE(Enum, intValue)
+ FIELD_CASE(Int64, longLongValue)
+ FIELD_CASE(SInt64, longLongValue)
+ FIELD_CASE(SFixed64, longLongValue)
+ FIELD_CASE(UInt32, unsignedIntValue)
+ FIELD_CASE(Fixed32, unsignedIntValue)
+ FIELD_CASE(UInt64, unsignedLongLongValue)
+ FIELD_CASE(Fixed64, unsignedLongLongValue)
+ FIELD_CASE2(Bytes)
+ FIELD_CASE2(String)
+ FIELD_CASE2(Group)
+ case GPBDataTypeMessage:
+ if (GPBExtensionIsWireFormat(description)) {
+ [output writeMessageSetExtension:description->fieldNumber value:object];
+ } else {
+ [output writeMessage:description->fieldNumber value:object];
+ }
+ return;
+ }
+#undef FIELD_CASE
+#undef FIELD_CASE2
+}
+
+static void WriteObjectNoTagToCodedOutputStream(
+ id object, GPBExtensionDescription *description,
+ GPBCodedOutputStream *output) {
+#define FIELD_CASE(TYPE, ACCESSOR) \
+ case GPBDataType##TYPE: \
+ [output write##TYPE##NoTag:[(NSNumber *)object ACCESSOR]]; \
+ return;
+#define FIELD_CASE2(TYPE) \
+ case GPBDataType##TYPE: \
+ [output write##TYPE##NoTag:object]; \
+ return;
+ switch (description->dataType) {
+ FIELD_CASE(Bool, boolValue)
+ FIELD_CASE(Float, floatValue)
+ FIELD_CASE(Double, doubleValue)
+ FIELD_CASE(Int32, intValue)
+ FIELD_CASE(SFixed32, intValue)
+ FIELD_CASE(SInt32, intValue)
+ FIELD_CASE(Enum, intValue)
+ FIELD_CASE(Int64, longLongValue)
+ FIELD_CASE(SInt64, longLongValue)
+ FIELD_CASE(SFixed64, longLongValue)
+ FIELD_CASE(UInt32, unsignedIntValue)
+ FIELD_CASE(Fixed32, unsignedIntValue)
+ FIELD_CASE(UInt64, unsignedLongLongValue)
+ FIELD_CASE(Fixed64, unsignedLongLongValue)
+ FIELD_CASE2(Bytes)
+ FIELD_CASE2(String)
+ FIELD_CASE2(Message)
+ case GPBDataTypeGroup:
+ [output writeGroupNoTag:description->fieldNumber value:object];
+ return;
+ }
+#undef FIELD_CASE
+#undef FIELD_CASE2
+}
+
+static void WriteArrayIncludingTagsToCodedOutputStream(
+ NSArray *values, GPBExtensionDescription *description,
+ GPBCodedOutputStream *output) {
+ if (GPBExtensionIsPacked(description)) {
+ [output writeTag:description->fieldNumber
+ format:GPBWireFormatLengthDelimited];
+ size_t dataSize = 0;
+ size_t typeSize = DataTypeSize(description->dataType);
+ if (typeSize != 0) {
+ dataSize = values.count * typeSize;
+ } else {
+ for (id value in values) {
+ dataSize +=
+ ComputePBSerializedSizeNoTagOfObject(description->dataType, value);
+ }
+ }
+ [output writeRawVarintSizeTAs32:dataSize];
+ for (id value in values) {
+ WriteObjectNoTagToCodedOutputStream(value, description, output);
+ }
+ } else {
+ for (id value in values) {
+ WriteObjectIncludingTagToCodedOutputStream(value, description, output);
+ }
+ }
+}
+
+void GPBExtensionMergeFromInputStream(GPBExtensionDescriptor *extension,
+ BOOL isPackedOnStream,
+ GPBCodedInputStream *input,
+ GPBExtensionRegistry *extensionRegistry,
+ GPBMessage *message) {
+ GPBExtensionDescription *description = extension->description_;
+ GPBCodedInputStreamState *state = &input->state_;
+ if (isPackedOnStream) {
+ NSCAssert(GPBExtensionIsRepeated(description),
+ @"How was it packed if it isn't repeated?");
+ int32_t length = GPBCodedInputStreamReadInt32(state);
+ size_t limit = GPBCodedInputStreamPushLimit(state, length);
+ while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
+ id value = NewSingleValueFromInputStream(extension,
+ input,
+ extensionRegistry,
+ nil);
+ [message addExtension:extension value:value];
+ [value release];
+ }
+ GPBCodedInputStreamPopLimit(state, limit);
+ } else {
+ id existingValue = nil;
+ BOOL isRepeated = GPBExtensionIsRepeated(description);
+ if (!isRepeated && GPBDataTypeIsMessage(description->dataType)) {
+ existingValue = [message getExistingExtension:extension];
+ }
+ id value = NewSingleValueFromInputStream(extension,
+ input,
+ extensionRegistry,
+ existingValue);
+ if (isRepeated) {
+ [message addExtension:extension value:value];
+ } else {
+ [message setExtension:extension value:value];
+ }
+ [value release];
+ }
+}
+
+void GPBWriteExtensionValueToOutputStream(GPBExtensionDescriptor *extension,
+ id value,
+ GPBCodedOutputStream *output) {
+ GPBExtensionDescription *description = extension->description_;
+ if (GPBExtensionIsRepeated(description)) {
+ WriteArrayIncludingTagsToCodedOutputStream(value, description, output);
+ } else {
+ WriteObjectIncludingTagToCodedOutputStream(value, description, output);
+ }
+}
+
+size_t GPBComputeExtensionSerializedSizeIncludingTag(
+ GPBExtensionDescriptor *extension, id value) {
+ GPBExtensionDescription *description = extension->description_;
+ if (GPBExtensionIsRepeated(description)) {
+ return ComputeSerializedSizeIncludingTagOfArray(description, value);
+ } else {
+ return ComputeSerializedSizeIncludingTagOfObject(description, value);
+ }
+}
+
+// Note that this returns a retained value intentionally.
+static id NewSingleValueFromInputStream(GPBExtensionDescriptor *extension,
+ GPBCodedInputStream *input,
+ GPBExtensionRegistry *extensionRegistry,
+ GPBMessage *existingValue) {
+ GPBExtensionDescription *description = extension->description_;
+ GPBCodedInputStreamState *state = &input->state_;
+ switch (description->dataType) {
+ case GPBDataTypeBool: return [[NSNumber alloc] initWithBool:GPBCodedInputStreamReadBool(state)];
+ case GPBDataTypeFixed32: return [[NSNumber alloc] initWithUnsignedInt:GPBCodedInputStreamReadFixed32(state)];
+ case GPBDataTypeSFixed32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadSFixed32(state)];
+ case GPBDataTypeFloat: return [[NSNumber alloc] initWithFloat:GPBCodedInputStreamReadFloat(state)];
+ case GPBDataTypeFixed64: return [[NSNumber alloc] initWithUnsignedLongLong:GPBCodedInputStreamReadFixed64(state)];
+ case GPBDataTypeSFixed64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadSFixed64(state)];
+ case GPBDataTypeDouble: return [[NSNumber alloc] initWithDouble:GPBCodedInputStreamReadDouble(state)];
+ case GPBDataTypeInt32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadInt32(state)];
+ case GPBDataTypeInt64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadInt64(state)];
+ case GPBDataTypeSInt32: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadSInt32(state)];
+ case GPBDataTypeSInt64: return [[NSNumber alloc] initWithLongLong:GPBCodedInputStreamReadSInt64(state)];
+ case GPBDataTypeUInt32: return [[NSNumber alloc] initWithUnsignedInt:GPBCodedInputStreamReadUInt32(state)];
+ case GPBDataTypeUInt64: return [[NSNumber alloc] initWithUnsignedLongLong:GPBCodedInputStreamReadUInt64(state)];
+ case GPBDataTypeBytes: return GPBCodedInputStreamReadRetainedBytes(state);
+ case GPBDataTypeString: return GPBCodedInputStreamReadRetainedString(state);
+ case GPBDataTypeEnum: return [[NSNumber alloc] initWithInt:GPBCodedInputStreamReadEnum(state)];
+ case GPBDataTypeGroup:
+ case GPBDataTypeMessage: {
+ GPBMessage *message;
+ if (existingValue) {
+ message = [existingValue retain];
+ } else {
+ GPBDescriptor *decriptor = [extension.msgClass descriptor];
+ message = [[decriptor.messageClass alloc] init];
+ }
+
+ if (description->dataType == GPBDataTypeGroup) {
+ [input readGroup:description->fieldNumber
+ message:message
+ extensionRegistry:extensionRegistry];
+ } else {
+ // description->dataType == GPBDataTypeMessage
+ if (GPBExtensionIsWireFormat(description)) {
+ // For MessageSet fields the message length will have already been
+ // read.
+ [message mergeFromCodedInputStream:input
+ extensionRegistry:extensionRegistry];
+ } else {
+ [input readMessage:message extensionRegistry:extensionRegistry];
+ }
+ }
+
+ return message;
+ }
+ }
+
+ return nil;
+}
diff --git a/objectivec/GPBExtensionRegistry.h b/objectivec/GPBExtensionRegistry.h
index e382971c..07a99e42 100644
--- a/objectivec/GPBExtensionRegistry.h
+++ b/objectivec/GPBExtensionRegistry.h
@@ -31,7 +31,7 @@
#import <Foundation/Foundation.h>
@class GPBDescriptor;
-@class GPBExtensionField;
+@class GPBExtensionDescriptor;
// A table of known extensions, searchable by name or field number. When
// parsing a protocol message that might have extensions, you must provide an
@@ -54,10 +54,10 @@
//
@interface GPBExtensionRegistry : NSObject<NSCopying>
-- (void)addExtension:(GPBExtensionField *)extension;
+- (void)addExtension:(GPBExtensionDescriptor *)extension;
- (void)addExtensions:(GPBExtensionRegistry *)registry;
-- (GPBExtensionField *)getExtension:(GPBDescriptor *)containingType
- fieldNumber:(NSInteger)fieldNumber;
+- (GPBExtensionDescriptor *)extensionForDescriptor:(GPBDescriptor *)descriptor
+ fieldNumber:(NSInteger)fieldNumber;
@end
diff --git a/objectivec/GPBExtensionRegistry.m b/objectivec/GPBExtensionRegistry.m
index 4f234f55..df61a17b 100644
--- a/objectivec/GPBExtensionRegistry.m
+++ b/objectivec/GPBExtensionRegistry.m
@@ -32,7 +32,6 @@
#import "GPBBootstrap.h"
#import "GPBDescriptor.h"
-#import "GPBExtensionField.h"
@implementation GPBExtensionRegistry {
// TODO(dmaclach): Reimplement with CFDictionaries that don't use
@@ -60,31 +59,34 @@
return result;
}
-- (NSMutableDictionary *)extensionMapForContainingType:
- (GPBDescriptor *)containingType {
+- (NSMutableDictionary *)extensionMapForContainingMessageClass:
+ (Class)containingMessageClass {
NSMutableDictionary *extensionMap =
- [mutableClassMap_ objectForKey:containingType];
+ [mutableClassMap_ objectForKey:containingMessageClass];
if (extensionMap == nil) {
extensionMap = [NSMutableDictionary dictionary];
- [mutableClassMap_ setObject:extensionMap forKey:containingType];
+ [mutableClassMap_ setObject:extensionMap
+ forKey:(id<NSCopying>)containingMessageClass];
}
return extensionMap;
}
-- (void)addExtension:(GPBExtensionField *)extension {
+- (void)addExtension:(GPBExtensionDescriptor *)extension {
if (extension == nil) {
return;
}
- GPBDescriptor *containingType = [extension containingType];
+ Class containingMessageClass = extension.containingMessageClass;
NSMutableDictionary *extensionMap =
- [self extensionMapForContainingType:containingType];
- [extensionMap setObject:extension forKey:@([extension fieldNumber])];
+ [self extensionMapForContainingMessageClass:containingMessageClass];
+ [extensionMap setObject:extension forKey:@(extension.fieldNumber)];
}
-- (GPBExtensionField *)getExtension:(GPBDescriptor *)containingType
- fieldNumber:(NSInteger)fieldNumber {
- NSDictionary *extensionMap = [mutableClassMap_ objectForKey:containingType];
+- (GPBExtensionDescriptor *)extensionForDescriptor:(GPBDescriptor *)descriptor
+ fieldNumber:(NSInteger)fieldNumber {
+ Class messageClass = descriptor.messageClass;
+ NSDictionary *extensionMap =
+ [mutableClassMap_ objectForKey:messageClass];
return [extensionMap objectForKey:@(fieldNumber)];
}
@@ -94,11 +96,11 @@
return;
}
NSMutableDictionary *otherClassMap = registry->mutableClassMap_;
- for (GPBDescriptor *containingType in otherClassMap) {
+ for (Class containingMessageClass in otherClassMap) {
NSMutableDictionary *extensionMap =
- [self extensionMapForContainingType:containingType];
+ [self extensionMapForContainingMessageClass:containingMessageClass];
NSMutableDictionary *otherExtensionMap =
- [registry extensionMapForContainingType:containingType];
+ [registry extensionMapForContainingMessageClass:containingMessageClass];
[extensionMap addEntriesFromDictionary:otherExtensionMap];
}
}
diff --git a/objectivec/GPBMessage.h b/objectivec/GPBMessage.h
index 1c6c091d..64d3ba1e 100644
--- a/objectivec/GPBMessage.h
+++ b/objectivec/GPBMessage.h
@@ -35,7 +35,7 @@
@class GPBDescriptor;
@class GPBCodedInputStream;
@class GPBCodedOutputStream;
-@class GPBExtensionField;
+@class GPBExtensionDescriptor;
@class GPBExtensionRegistry;
@class GPBFieldDescriptor;
@class GPBUnknownFieldSet;
@@ -148,14 +148,14 @@ CF_EXTERN_C_END
// Extensions use boxed values (NSNumbers) for PODs, NSMutableArrays for
// repeated. If the extension is a Message one will be auto created for you
// and returned similar to fields.
-- (BOOL)hasExtension:(GPBExtensionField *)extension;
-- (id)getExtension:(GPBExtensionField *)extension;
-- (void)setExtension:(GPBExtensionField *)extension value:(id)value;
-- (void)addExtension:(GPBExtensionField *)extension value:(id)value;
-- (void)setExtension:(GPBExtensionField *)extension
+- (BOOL)hasExtension:(GPBExtensionDescriptor *)extension;
+- (id)getExtension:(GPBExtensionDescriptor *)extension;
+- (void)setExtension:(GPBExtensionDescriptor *)extension value:(id)value;
+- (void)addExtension:(GPBExtensionDescriptor *)extension value:(id)value;
+- (void)setExtension:(GPBExtensionDescriptor *)extension
index:(NSUInteger)index
value:(id)value;
-- (void)clearExtension:(GPBExtensionField *)extension;
+- (void)clearExtension:(GPBExtensionDescriptor *)extension;
- (void)setUnknownFields:(GPBUnknownFieldSet *)unknownFields;
diff --git a/objectivec/GPBMessage.m b/objectivec/GPBMessage.m
index bd3235f1..c655edd3 100644
--- a/objectivec/GPBMessage.m
+++ b/objectivec/GPBMessage.m
@@ -38,7 +38,7 @@
#import "GPBCodedOutputStream.h"
#import "GPBDescriptor_PackagePrivate.h"
#import "GPBDictionary_PackagePrivate.h"
-#import "GPBExtensionField_PackagePrivate.h"
+#import "GPBExtensionInternals.h"
#import "GPBExtensionRegistry.h"
#import "GPBRootObject_PackagePrivate.h"
#import "GPBUnknownFieldSet_PackagePrivate.h"
@@ -54,6 +54,13 @@ NSString *const GPBExceptionMessageKey =
static NSString *const kGPBDataCoderKey = @"GPBData";
+#ifndef _GPBCompileAssert
+#define _GPBCompileAssertSymbolInner(line, msg) _GPBCompileAssert ## line ## __ ## msg
+#define _GPBCompileAssertSymbol(line, msg) _GPBCompileAssertSymbolInner(line, msg)
+#define _GPBCompileAssert(test, msg) \
+ typedef char _GPBCompileAssertSymbol(__LINE__, msg) [ ((test) ? 1 : -1) ]
+#endif // _GPBCompileAssert
+
//
// PLEASE REMEMBER:
//
@@ -73,7 +80,7 @@ static NSString *const kGPBDataCoderKey = @"GPBData";
// mutated, we can inform the creator to make our field visible.
GPBMessage *autocreator_;
GPBFieldDescriptor *autocreatorField_;
- GPBExtensionField *autocreatorExtension_;
+ GPBExtensionDescriptor *autocreatorExtension_;
}
@end
@@ -110,13 +117,14 @@ static NSError *MessageErrorWithReason(NSInteger code, NSString *reason) {
}
-static void CheckExtension(GPBMessage *self, GPBExtensionField *extension) {
- if ([[self class] descriptor] != [extension containingType]) {
+static void CheckExtension(GPBMessage *self,
+ GPBExtensionDescriptor *extension) {
+ if ([self class] != extension.containingMessageClass) {
[NSException
raise:NSInvalidArgumentException
format:@"Extension %@ used on wrong class (%@ instead of %@)",
- extension.descriptor.singletonName,
- [[self class] descriptor].name, [extension containingType].name];
+ extension.singletonName,
+ [self class], extension.containingMessageClass];
}
}
@@ -128,12 +136,11 @@ static NSMutableDictionary *CloneExtensionMap(NSDictionary *extensionMap,
NSMutableDictionary *result = [[NSMutableDictionary allocWithZone:zone]
initWithCapacity:extensionMap.count];
- for (GPBExtensionField *field in extensionMap) {
- id value = [extensionMap objectForKey:field];
- GPBExtensionDescriptor *fieldDescriptor = field.descriptor;
- BOOL isMessageExtension = GPBExtensionIsMessage(fieldDescriptor);
+ for (GPBExtensionDescriptor *extension in extensionMap) {
+ id value = [extensionMap objectForKey:extension];
+ BOOL isMessageExtension = GPBExtensionIsMessage(extension);
- if ([field isRepeated]) {
+ if (extension.repeated) {
if (isMessageExtension) {
NSMutableArray *list =
[[NSMutableArray alloc] initWithCapacity:[value count]];
@@ -142,20 +149,20 @@ static NSMutableDictionary *CloneExtensionMap(NSDictionary *extensionMap,
[list addObject:copiedValue];
[copiedValue release];
}
- [result setObject:list forKey:field];
+ [result setObject:list forKey:extension];
[list release];
} else {
NSMutableArray *copiedValue = [value mutableCopyWithZone:zone];
- [result setObject:copiedValue forKey:field];
+ [result setObject:copiedValue forKey:extension];
[copiedValue release];
}
} else {
if (isMessageExtension) {
GPBMessage *copiedValue = [value copyWithZone:zone];
- [result setObject:copiedValue forKey:field];
+ [result setObject:copiedValue forKey:extension];
[copiedValue release];
} else {
- [result setObject:value forKey:field];
+ [result setObject:value forKey:extension];
}
}
}
@@ -166,45 +173,45 @@ static NSMutableDictionary *CloneExtensionMap(NSDictionary *extensionMap,
static id CreateArrayForField(GPBFieldDescriptor *field,
GPBMessage *autocreator) {
id result;
- GPBType fieldDataType = GPBGetFieldType(field);
+ GPBDataType fieldDataType = GPBGetFieldDataType(field);
switch (fieldDataType) {
- case GPBTypeBool:
+ case GPBDataTypeBool:
result = [[GPBBoolArray alloc] init];
break;
- case GPBTypeFixed32:
- case GPBTypeUInt32:
+ case GPBDataTypeFixed32:
+ case GPBDataTypeUInt32:
result = [[GPBUInt32Array alloc] init];
break;
- case GPBTypeInt32:
- case GPBTypeSFixed32:
- case GPBTypeSInt32:
+ case GPBDataTypeInt32:
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeSInt32:
result = [[GPBInt32Array alloc] init];
break;
- case GPBTypeFixed64:
- case GPBTypeUInt64:
+ case GPBDataTypeFixed64:
+ case GPBDataTypeUInt64:
result = [[GPBUInt64Array alloc] init];
break;
- case GPBTypeInt64:
- case GPBTypeSFixed64:
- case GPBTypeSInt64:
+ case GPBDataTypeInt64:
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeSInt64:
result = [[GPBInt64Array alloc] init];
break;
- case GPBTypeFloat:
+ case GPBDataTypeFloat:
result = [[GPBFloatArray alloc] init];
break;
- case GPBTypeDouble:
+ case GPBDataTypeDouble:
result = [[GPBDoubleArray alloc] init];
break;
- case GPBTypeEnum:
+ case GPBDataTypeEnum:
result = [[GPBEnumArray alloc]
initWithValidationFunction:field.enumDescriptor.enumVerifier];
break;
- case GPBTypeData:
- case GPBTypeGroup:
- case GPBTypeMessage:
- case GPBTypeString:
+ case GPBDataTypeBytes:
+ case GPBDataTypeGroup:
+ case GPBDataTypeMessage:
+ case GPBDataTypeString:
if (autocreator) {
result = [[GPBAutocreatedArray alloc] init];
} else {
@@ -214,7 +221,7 @@ static id CreateArrayForField(GPBFieldDescriptor *field,
}
if (autocreator) {
- if (GPBTypeIsObject(fieldDataType)) {
+ if (GPBDataTypeIsObject(fieldDataType)) {
GPBAutocreatedArray *autoArray = result;
autoArray->_autocreator = autocreator;
} else {
@@ -229,290 +236,291 @@ static id CreateArrayForField(GPBFieldDescriptor *field,
static id CreateMapForField(GPBFieldDescriptor *field,
GPBMessage *autocreator) {
id result;
- GPBType keyType = field.mapKeyType;
- GPBType valueType = GPBGetFieldType(field);
- switch (keyType) {
- case GPBTypeBool:
- switch (valueType) {
- case GPBTypeBool:
+ GPBDataType keyDataType = field.mapKeyDataType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ switch (keyDataType) {
+ case GPBDataTypeBool:
+ switch (valueDataType) {
+ case GPBDataTypeBool:
result = [[GPBBoolBoolDictionary alloc] init];
break;
- case GPBTypeFixed32:
- case GPBTypeUInt32:
+ case GPBDataTypeFixed32:
+ case GPBDataTypeUInt32:
result = [[GPBBoolUInt32Dictionary alloc] init];
break;
- case GPBTypeInt32:
- case GPBTypeSFixed32:
- case GPBTypeSInt32:
+ case GPBDataTypeInt32:
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeSInt32:
result = [[GPBBoolInt32Dictionary alloc] init];
break;
- case GPBTypeFixed64:
- case GPBTypeUInt64:
+ case GPBDataTypeFixed64:
+ case GPBDataTypeUInt64:
result = [[GPBBoolUInt64Dictionary alloc] init];
break;
- case GPBTypeInt64:
- case GPBTypeSFixed64:
- case GPBTypeSInt64:
+ case GPBDataTypeInt64:
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeSInt64:
result = [[GPBBoolInt64Dictionary alloc] init];
break;
- case GPBTypeFloat:
+ case GPBDataTypeFloat:
result = [[GPBBoolFloatDictionary alloc] init];
break;
- case GPBTypeDouble:
+ case GPBDataTypeDouble:
result = [[GPBBoolDoubleDictionary alloc] init];
break;
- case GPBTypeEnum:
+ case GPBDataTypeEnum:
result = [[GPBBoolEnumDictionary alloc]
initWithValidationFunction:field.enumDescriptor.enumVerifier];
break;
- case GPBTypeData:
- case GPBTypeMessage:
- case GPBTypeString:
+ case GPBDataTypeBytes:
+ case GPBDataTypeMessage:
+ case GPBDataTypeString:
result = [[GPBBoolObjectDictionary alloc] init];
break;
- case GPBTypeGroup:
+ case GPBDataTypeGroup:
NSCAssert(NO, @"shouldn't happen");
return nil;
}
break;
- case GPBTypeFixed32:
- case GPBTypeUInt32:
- switch (valueType) {
- case GPBTypeBool:
+ case GPBDataTypeFixed32:
+ case GPBDataTypeUInt32:
+ switch (valueDataType) {
+ case GPBDataTypeBool:
result = [[GPBUInt32BoolDictionary alloc] init];
break;
- case GPBTypeFixed32:
- case GPBTypeUInt32:
+ case GPBDataTypeFixed32:
+ case GPBDataTypeUInt32:
result = [[GPBUInt32UInt32Dictionary alloc] init];
break;
- case GPBTypeInt32:
- case GPBTypeSFixed32:
- case GPBTypeSInt32:
+ case GPBDataTypeInt32:
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeSInt32:
result = [[GPBUInt32Int32Dictionary alloc] init];
break;
- case GPBTypeFixed64:
- case GPBTypeUInt64:
+ case GPBDataTypeFixed64:
+ case GPBDataTypeUInt64:
result = [[GPBUInt32UInt64Dictionary alloc] init];
break;
- case GPBTypeInt64:
- case GPBTypeSFixed64:
- case GPBTypeSInt64:
+ case GPBDataTypeInt64:
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeSInt64:
result = [[GPBUInt32Int64Dictionary alloc] init];
break;
- case GPBTypeFloat:
+ case GPBDataTypeFloat:
result = [[GPBUInt32FloatDictionary alloc] init];
break;
- case GPBTypeDouble:
+ case GPBDataTypeDouble:
result = [[GPBUInt32DoubleDictionary alloc] init];
break;
- case GPBTypeEnum:
+ case GPBDataTypeEnum:
result = [[GPBUInt32EnumDictionary alloc]
initWithValidationFunction:field.enumDescriptor.enumVerifier];
break;
- case GPBTypeData:
- case GPBTypeMessage:
- case GPBTypeString:
+ case GPBDataTypeBytes:
+ case GPBDataTypeMessage:
+ case GPBDataTypeString:
result = [[GPBUInt32ObjectDictionary alloc] init];
break;
- case GPBTypeGroup:
+ case GPBDataTypeGroup:
NSCAssert(NO, @"shouldn't happen");
return nil;
}
break;
- case GPBTypeInt32:
- case GPBTypeSFixed32:
- case GPBTypeSInt32:
- switch (valueType) {
- case GPBTypeBool:
+ case GPBDataTypeInt32:
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeSInt32:
+ switch (valueDataType) {
+ case GPBDataTypeBool:
result = [[GPBInt32BoolDictionary alloc] init];
break;
- case GPBTypeFixed32:
- case GPBTypeUInt32:
+ case GPBDataTypeFixed32:
+ case GPBDataTypeUInt32:
result = [[GPBInt32UInt32Dictionary alloc] init];
break;
- case GPBTypeInt32:
- case GPBTypeSFixed32:
- case GPBTypeSInt32:
+ case GPBDataTypeInt32:
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeSInt32:
result = [[GPBInt32Int32Dictionary alloc] init];
break;
- case GPBTypeFixed64:
- case GPBTypeUInt64:
+ case GPBDataTypeFixed64:
+ case GPBDataTypeUInt64:
result = [[GPBInt32UInt64Dictionary alloc] init];
break;
- case GPBTypeInt64:
- case GPBTypeSFixed64:
- case GPBTypeSInt64:
+ case GPBDataTypeInt64:
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeSInt64:
result = [[GPBInt32Int64Dictionary alloc] init];
break;
- case GPBTypeFloat:
+ case GPBDataTypeFloat:
result = [[GPBInt32FloatDictionary alloc] init];
break;
- case GPBTypeDouble:
+ case GPBDataTypeDouble:
result = [[GPBInt32DoubleDictionary alloc] init];
break;
- case GPBTypeEnum:
+ case GPBDataTypeEnum:
result = [[GPBInt32EnumDictionary alloc]
initWithValidationFunction:field.enumDescriptor.enumVerifier];
break;
- case GPBTypeData:
- case GPBTypeMessage:
- case GPBTypeString:
+ case GPBDataTypeBytes:
+ case GPBDataTypeMessage:
+ case GPBDataTypeString:
result = [[GPBInt32ObjectDictionary alloc] init];
break;
- case GPBTypeGroup:
+ case GPBDataTypeGroup:
NSCAssert(NO, @"shouldn't happen");
return nil;
}
break;
- case GPBTypeFixed64:
- case GPBTypeUInt64:
- switch (valueType) {
- case GPBTypeBool:
+ case GPBDataTypeFixed64:
+ case GPBDataTypeUInt64:
+ switch (valueDataType) {
+ case GPBDataTypeBool:
result = [[GPBUInt64BoolDictionary alloc] init];
break;
- case GPBTypeFixed32:
- case GPBTypeUInt32:
+ case GPBDataTypeFixed32:
+ case GPBDataTypeUInt32:
result = [[GPBUInt64UInt32Dictionary alloc] init];
break;
- case GPBTypeInt32:
- case GPBTypeSFixed32:
- case GPBTypeSInt32:
+ case GPBDataTypeInt32:
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeSInt32:
result = [[GPBUInt64Int32Dictionary alloc] init];
break;
- case GPBTypeFixed64:
- case GPBTypeUInt64:
+ case GPBDataTypeFixed64:
+ case GPBDataTypeUInt64:
result = [[GPBUInt64UInt64Dictionary alloc] init];
break;
- case GPBTypeInt64:
- case GPBTypeSFixed64:
- case GPBTypeSInt64:
+ case GPBDataTypeInt64:
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeSInt64:
result = [[GPBUInt64Int64Dictionary alloc] init];
break;
- case GPBTypeFloat:
+ case GPBDataTypeFloat:
result = [[GPBUInt64FloatDictionary alloc] init];
break;
- case GPBTypeDouble:
+ case GPBDataTypeDouble:
result = [[GPBUInt64DoubleDictionary alloc] init];
break;
- case GPBTypeEnum:
+ case GPBDataTypeEnum:
result = [[GPBUInt64EnumDictionary alloc]
initWithValidationFunction:field.enumDescriptor.enumVerifier];
break;
- case GPBTypeData:
- case GPBTypeMessage:
- case GPBTypeString:
+ case GPBDataTypeBytes:
+ case GPBDataTypeMessage:
+ case GPBDataTypeString:
result = [[GPBUInt64ObjectDictionary alloc] init];
break;
- case GPBTypeGroup:
+ case GPBDataTypeGroup:
NSCAssert(NO, @"shouldn't happen");
return nil;
}
break;
- case GPBTypeInt64:
- case GPBTypeSFixed64:
- case GPBTypeSInt64:
- switch (valueType) {
- case GPBTypeBool:
+ case GPBDataTypeInt64:
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeSInt64:
+ switch (valueDataType) {
+ case GPBDataTypeBool:
result = [[GPBInt64BoolDictionary alloc] init];
break;
- case GPBTypeFixed32:
- case GPBTypeUInt32:
+ case GPBDataTypeFixed32:
+ case GPBDataTypeUInt32:
result = [[GPBInt64UInt32Dictionary alloc] init];
break;
- case GPBTypeInt32:
- case GPBTypeSFixed32:
- case GPBTypeSInt32:
+ case GPBDataTypeInt32:
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeSInt32:
result = [[GPBInt64Int32Dictionary alloc] init];
break;
- case GPBTypeFixed64:
- case GPBTypeUInt64:
+ case GPBDataTypeFixed64:
+ case GPBDataTypeUInt64:
result = [[GPBInt64UInt64Dictionary alloc] init];
break;
- case GPBTypeInt64:
- case GPBTypeSFixed64:
- case GPBTypeSInt64:
+ case GPBDataTypeInt64:
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeSInt64:
result = [[GPBInt64Int64Dictionary alloc] init];
break;
- case GPBTypeFloat:
+ case GPBDataTypeFloat:
result = [[GPBInt64FloatDictionary alloc] init];
break;
- case GPBTypeDouble:
+ case GPBDataTypeDouble:
result = [[GPBInt64DoubleDictionary alloc] init];
break;
- case GPBTypeEnum:
+ case GPBDataTypeEnum:
result = [[GPBInt64EnumDictionary alloc]
initWithValidationFunction:field.enumDescriptor.enumVerifier];
break;
- case GPBTypeData:
- case GPBTypeMessage:
- case GPBTypeString:
+ case GPBDataTypeBytes:
+ case GPBDataTypeMessage:
+ case GPBDataTypeString:
result = [[GPBInt64ObjectDictionary alloc] init];
break;
- case GPBTypeGroup:
+ case GPBDataTypeGroup:
NSCAssert(NO, @"shouldn't happen");
return nil;
}
break;
- case GPBTypeString:
- switch (valueType) {
- case GPBTypeBool:
+ case GPBDataTypeString:
+ switch (valueDataType) {
+ case GPBDataTypeBool:
result = [[GPBStringBoolDictionary alloc] init];
break;
- case GPBTypeFixed32:
- case GPBTypeUInt32:
+ case GPBDataTypeFixed32:
+ case GPBDataTypeUInt32:
result = [[GPBStringUInt32Dictionary alloc] init];
break;
- case GPBTypeInt32:
- case GPBTypeSFixed32:
- case GPBTypeSInt32:
+ case GPBDataTypeInt32:
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeSInt32:
result = [[GPBStringInt32Dictionary alloc] init];
break;
- case GPBTypeFixed64:
- case GPBTypeUInt64:
+ case GPBDataTypeFixed64:
+ case GPBDataTypeUInt64:
result = [[GPBStringUInt64Dictionary alloc] init];
break;
- case GPBTypeInt64:
- case GPBTypeSFixed64:
- case GPBTypeSInt64:
+ case GPBDataTypeInt64:
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeSInt64:
result = [[GPBStringInt64Dictionary alloc] init];
break;
- case GPBTypeFloat:
+ case GPBDataTypeFloat:
result = [[GPBStringFloatDictionary alloc] init];
break;
- case GPBTypeDouble:
+ case GPBDataTypeDouble:
result = [[GPBStringDoubleDictionary alloc] init];
break;
- case GPBTypeEnum:
+ case GPBDataTypeEnum:
result = [[GPBStringEnumDictionary alloc]
initWithValidationFunction:field.enumDescriptor.enumVerifier];
break;
- case GPBTypeData:
- case GPBTypeMessage:
- case GPBTypeString:
+ case GPBDataTypeBytes:
+ case GPBDataTypeMessage:
+ case GPBDataTypeString:
if (autocreator) {
result = [[GPBAutocreatedDictionary alloc] init];
} else {
result = [[NSMutableDictionary alloc] init];
}
break;
- case GPBTypeGroup:
+ case GPBDataTypeGroup:
NSCAssert(NO, @"shouldn't happen");
return nil;
}
break;
- case GPBTypeFloat:
- case GPBTypeDouble:
- case GPBTypeEnum:
- case GPBTypeData:
- case GPBTypeGroup:
- case GPBTypeMessage:
+ case GPBDataTypeFloat:
+ case GPBDataTypeDouble:
+ case GPBDataTypeEnum:
+ case GPBDataTypeBytes:
+ case GPBDataTypeGroup:
+ case GPBDataTypeMessage:
NSCAssert(NO, @"shouldn't happen");
return nil;
}
if (autocreator) {
- if ((keyType == GPBTypeString) && GPBTypeIsObject(valueType)) {
+ if ((keyDataType == GPBDataTypeString) &&
+ GPBDataTypeIsObject(valueDataType)) {
GPBAutocreatedDictionary *autoDict = result;
autoDict->_autocreator = autocreator;
} else {
@@ -608,11 +616,12 @@ GPBMessage *GPBCreateMessageWithAutocreator(Class msgClass,
}
static GPBMessage *CreateMessageWithAutocreatorForExtension(
- Class msgClass, GPBMessage *autocreator, GPBExtensionField *extension)
+ Class msgClass, GPBMessage *autocreator, GPBExtensionDescriptor *extension)
__attribute__((ns_returns_retained));
static GPBMessage *CreateMessageWithAutocreatorForExtension(
- Class msgClass, GPBMessage *autocreator, GPBExtensionField *extension) {
+ Class msgClass, GPBMessage *autocreator,
+ GPBExtensionDescriptor *extension) {
GPBMessage *message = [[msgClass alloc] init];
message->autocreator_ = autocreator;
message->autocreatorExtension_ = [extension retain];
@@ -647,7 +656,7 @@ void GPBAutocreatedArrayModified(GPBMessage *self, id array) {
if (field.fieldType == GPBFieldTypeRepeated) {
id curArray = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
if (curArray == array) {
- if (GPBFieldTypeIsObject(field)) {
+ if (GPBFieldDataTypeIsObject(field)) {
GPBAutocreatedArray *autoArray = array;
autoArray->_autocreator = nil;
} else {
@@ -669,8 +678,8 @@ void GPBAutocreatedDictionaryModified(GPBMessage *self, id dictionary) {
if (field.fieldType == GPBFieldTypeMap) {
id curDict = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
if (curDict == dictionary) {
- if ((field.mapKeyType == GPBTypeString) &&
- GPBFieldTypeIsObject(field)) {
+ if ((field.mapKeyDataType == GPBDataTypeString) &&
+ GPBFieldDataTypeIsObject(field)) {
GPBAutocreatedDictionary *autoDict = dictionary;
autoDict->_autocreator = nil;
} else {
@@ -812,6 +821,9 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
if ((self = [self init])) {
@try {
[self mergeFromData:data extensionRegistry:extensionRegistry];
+ if (errorPtr) {
+ *errorPtr = nil;
+ }
}
@catch (NSException *exception) {
[self release];
@@ -841,6 +853,9 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
if ((self = [self init])) {
@try {
[self mergeFromCodedInputStream:input extensionRegistry:extensionRegistry];
+ if (errorPtr) {
+ *errorPtr = nil;
+ }
}
@catch (NSException *exception) {
[self release];
@@ -885,7 +900,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
// We need to copy the array/map, but the catch is for message fields,
// we also need to ensure all the messages as those need copying also.
id newValue;
- if (GPBFieldTypeIsMessage(field)) {
+ if (GPBFieldDataTypeIsMessage(field)) {
if (field.fieldType == GPBFieldTypeRepeated) {
NSArray *existingArray = (NSArray *)value;
NSMutableArray *newArray =
@@ -897,7 +912,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
[copiedMsg release];
}
} else {
- if (field.mapKeyType == GPBTypeString) {
+ if (field.mapKeyDataType == GPBDataTypeString) {
// Map is an NSDictionary.
NSDictionary *existingDict = value;
NSMutableDictionary *newDict = [[NSMutableDictionary alloc]
@@ -921,7 +936,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
} else {
// Not messages (but is a map/array)...
if (field.fieldType == GPBFieldTypeRepeated) {
- if (GPBFieldTypeIsObject(field)) {
+ if (GPBFieldDataTypeIsObject(field)) {
// NSArray
newValue = [value mutableCopyWithZone:zone];
} else {
@@ -929,7 +944,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
newValue = [value copyWithZone:zone];
}
} else {
- if (field.mapKeyType == GPBTypeString) {
+ if (field.mapKeyDataType == GPBDataTypeString) {
// NSDictionary
newValue = [value mutableCopyWithZone:zone];
} else {
@@ -946,7 +961,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
GPBSetRetainedObjectIvarWithFieldInternal(message, field, newValue,
syntax);
}
- } else if (GPBFieldTypeIsMessage(field)) {
+ } else if (GPBFieldDataTypeIsMessage(field)) {
// For object types, if we have a value, copy it. If we don't,
// zero it to remove the pointer to something that was autocreated
// (and the ptr just got memcpyed).
@@ -963,7 +978,8 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
id *typePtr = (id *)&storage[field->description_->offset];
*typePtr = NULL;
}
- } else if (GPBFieldTypeIsObject(field) && GPBGetHasIvarField(self, field)) {
+ } else if (GPBFieldDataTypeIsObject(field) &&
+ GPBGetHasIvarField(self, field)) {
// A set string/data value (message picked off above), copy it.
id value = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
id newValue = [value copyWithZone:zone];
@@ -973,7 +989,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
GPBSetRetainedObjectIvarWithFieldInternal(message, field, newValue,
syntax);
} else {
- // memcpy took care of the rest of the primative fields if they were set.
+ // memcpy took care of the rest of the primitive fields if they were set.
}
} // for (field in descriptor->fields_)
}
@@ -1000,7 +1016,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
id arrayOrMap = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
if (arrayOrMap) {
if (field.fieldType == GPBFieldTypeRepeated) {
- if (GPBFieldTypeIsObject(field)) {
+ if (GPBFieldDataTypeIsObject(field)) {
GPBAutocreatedArray *autoArray = arrayOrMap;
if (autoArray->_autocreator == self) {
autoArray->_autocreator = nil;
@@ -1013,8 +1029,8 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
}
}
} else {
- if ((field.mapKeyType == GPBTypeString) &&
- GPBFieldTypeIsObject(field)) {
+ if ((field.mapKeyDataType == GPBDataTypeString) &&
+ GPBFieldDataTypeIsObject(field)) {
GPBAutocreatedDictionary *autoDict = arrayOrMap;
if (autoDict->_autocreator == self) {
autoDict->_autocreator = nil;
@@ -1029,11 +1045,12 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
}
[arrayOrMap release];
}
- } else if (GPBFieldTypeIsMessage(field)) {
+ } else if (GPBFieldDataTypeIsMessage(field)) {
GPBClearAutocreatedMessageIvarWithField(self, field);
GPBMessage *value = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
[value release];
- } else if (GPBFieldTypeIsObject(field) && GPBGetHasIvarField(self, field)) {
+ } else if (GPBFieldDataTypeIsObject(field) &&
+ GPBGetHasIvarField(self, field)) {
id value = GPBGetObjectIvarWithField(self, field);
[value release];
}
@@ -1076,11 +1093,11 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
return NO;
}
}
- if (GPBFieldTypeIsMessage(field)) {
+ if (GPBFieldDataTypeIsMessage(field)) {
GPBFieldType fieldType = field.fieldType;
if (fieldType == GPBFieldTypeSingle) {
if (field.isRequired) {
- GPBMessage *message = GPBGetMessageIvarWithField(self, field);
+ GPBMessage *message = GPBGetMessageMessageField(self, field);
if (!message.initialized) {
return NO;
}
@@ -1089,7 +1106,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
@"%@: Single message field %@ not required or optional?",
[self class], field.name);
if (GPBGetHasIvarField(self, field)) {
- GPBMessage *message = GPBGetMessageIvarWithField(self, field);
+ GPBMessage *message = GPBGetMessageMessageField(self, field);
if (!message.initialized) {
return NO;
}
@@ -1103,7 +1120,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
}
}
} else { // fieldType == GPBFieldTypeMap
- if (field.mapKeyType == GPBTypeString) {
+ if (field.mapKeyDataType == GPBDataTypeString) {
NSDictionary *map =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
if (map && !GPBDictionaryIsInitializedInternalHelper(map, field)) {
@@ -1123,11 +1140,11 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
__block BOOL result = YES;
[extensionMap_
- enumerateKeysAndObjectsUsingBlock:^(GPBExtensionField *extension, id obj,
+ enumerateKeysAndObjectsUsingBlock:^(GPBExtensionDescriptor *extension,
+ id obj,
BOOL *stop) {
- GPBExtensionDescriptor *extDesc = extension.descriptor;
- if (GPBExtensionIsMessage(extDesc)) {
- if (extDesc.isRepeated) {
+ if (GPBExtensionIsMessage(extension)) {
+ if (extension.isRepeated) {
for (GPBMessage *msg in obj) {
if (!msg.initialized) {
result = NO;
@@ -1259,15 +1276,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-DEFINE FIELD_CASE(TYPE, REAL_TYPE)
//%FIELD_CASE_FULL(TYPE, REAL_TYPE, REAL_TYPE)
//%PDDM-DEFINE FIELD_CASE_FULL(TYPE, REAL_TYPE, ARRAY_TYPE)
-//% case GPBType##TYPE:
+//% case GPBDataType##TYPE:
//% if (fieldType == GPBFieldTypeRepeated) {
//% uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
//% GPB##ARRAY_TYPE##Array *array =
//% GPBGetObjectIvarWithFieldNoAutocreate(self, field);
-//% [output write##TYPE##s:fieldNumber values:array tag:tag];
+//% [output write##TYPE##Array:fieldNumber values:array tag:tag];
//% } else if (fieldType == GPBFieldTypeSingle) {
//% [output write##TYPE:fieldNumber
-//% TYPE$S value:GPBGet##REAL_TYPE##IvarWithField(self, field)];
+//% TYPE$S value:GPBGetMessage##REAL_TYPE##Field(self, field)];
//% } else { // fieldType == GPBFieldTypeMap
//% // Exact type here doesn't matter.
//% GPBInt32##ARRAY_TYPE##Dictionary *dict =
@@ -1277,10 +1294,10 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//% break;
//%
//%PDDM-DEFINE FIELD_CASE2(TYPE)
-//% case GPBType##TYPE:
+//% case GPBDataType##TYPE:
//% if (fieldType == GPBFieldTypeRepeated) {
//% NSArray *array = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
-//% [output write##TYPE##s:fieldNumber values:array];
+//% [output write##TYPE##Array:fieldNumber values:array];
//% } else if (fieldType == GPBFieldTypeSingle) {
//% // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check
//% // again.
@@ -1289,8 +1306,8 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//% } else { // fieldType == GPBFieldTypeMap
//% // Exact type here doesn't matter.
//% id dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
-//% GPBType mapKeyType = field.mapKeyType;
-//% if (mapKeyType == GPBTypeString) {
+//% GPBDataType mapKeyDataType = field.mapKeyDataType;
+//% if (mapKeyDataType == GPBDataTypeString) {
//% GPBDictionaryWriteToStreamInternalHelper(output, dict, field);
//% } else {
//% [dict writeToCodedOutputStream:output asField:field];
@@ -1299,20 +1316,20 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//% break;
//%
- switch (GPBGetFieldType(field)) {
+ switch (GPBGetFieldDataType(field)) {
//%PDDM-EXPAND FIELD_CASE(Bool, Bool)
// This block of code is generated, do not edit it directly.
- case GPBTypeBool:
+ case GPBDataTypeBool:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBBoolArray *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeBools:fieldNumber values:array tag:tag];
+ [output writeBoolArray:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeBool:fieldNumber
- value:GPBGetBoolIvarWithField(self, field)];
+ value:GPBGetMessageBoolField(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32BoolDictionary *dict =
@@ -1324,15 +1341,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE(Fixed32, UInt32)
// This block of code is generated, do not edit it directly.
- case GPBTypeFixed32:
+ case GPBDataTypeFixed32:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBUInt32Array *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeFixed32s:fieldNumber values:array tag:tag];
+ [output writeFixed32Array:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeFixed32:fieldNumber
- value:GPBGetUInt32IvarWithField(self, field)];
+ value:GPBGetMessageUInt32Field(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32UInt32Dictionary *dict =
@@ -1344,15 +1361,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE(SFixed32, Int32)
// This block of code is generated, do not edit it directly.
- case GPBTypeSFixed32:
+ case GPBDataTypeSFixed32:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBInt32Array *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeSFixed32s:fieldNumber values:array tag:tag];
+ [output writeSFixed32Array:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeSFixed32:fieldNumber
- value:GPBGetInt32IvarWithField(self, field)];
+ value:GPBGetMessageInt32Field(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32Int32Dictionary *dict =
@@ -1364,15 +1381,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE(Float, Float)
// This block of code is generated, do not edit it directly.
- case GPBTypeFloat:
+ case GPBDataTypeFloat:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBFloatArray *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeFloats:fieldNumber values:array tag:tag];
+ [output writeFloatArray:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeFloat:fieldNumber
- value:GPBGetFloatIvarWithField(self, field)];
+ value:GPBGetMessageFloatField(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32FloatDictionary *dict =
@@ -1384,15 +1401,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE(Fixed64, UInt64)
// This block of code is generated, do not edit it directly.
- case GPBTypeFixed64:
+ case GPBDataTypeFixed64:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBUInt64Array *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeFixed64s:fieldNumber values:array tag:tag];
+ [output writeFixed64Array:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeFixed64:fieldNumber
- value:GPBGetUInt64IvarWithField(self, field)];
+ value:GPBGetMessageUInt64Field(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32UInt64Dictionary *dict =
@@ -1404,15 +1421,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE(SFixed64, Int64)
// This block of code is generated, do not edit it directly.
- case GPBTypeSFixed64:
+ case GPBDataTypeSFixed64:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBInt64Array *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeSFixed64s:fieldNumber values:array tag:tag];
+ [output writeSFixed64Array:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeSFixed64:fieldNumber
- value:GPBGetInt64IvarWithField(self, field)];
+ value:GPBGetMessageInt64Field(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32Int64Dictionary *dict =
@@ -1424,15 +1441,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE(Double, Double)
// This block of code is generated, do not edit it directly.
- case GPBTypeDouble:
+ case GPBDataTypeDouble:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBDoubleArray *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeDoubles:fieldNumber values:array tag:tag];
+ [output writeDoubleArray:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeDouble:fieldNumber
- value:GPBGetDoubleIvarWithField(self, field)];
+ value:GPBGetMessageDoubleField(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32DoubleDictionary *dict =
@@ -1444,15 +1461,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE(Int32, Int32)
// This block of code is generated, do not edit it directly.
- case GPBTypeInt32:
+ case GPBDataTypeInt32:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBInt32Array *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeInt32s:fieldNumber values:array tag:tag];
+ [output writeInt32Array:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeInt32:fieldNumber
- value:GPBGetInt32IvarWithField(self, field)];
+ value:GPBGetMessageInt32Field(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32Int32Dictionary *dict =
@@ -1464,15 +1481,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE(Int64, Int64)
// This block of code is generated, do not edit it directly.
- case GPBTypeInt64:
+ case GPBDataTypeInt64:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBInt64Array *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeInt64s:fieldNumber values:array tag:tag];
+ [output writeInt64Array:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeInt64:fieldNumber
- value:GPBGetInt64IvarWithField(self, field)];
+ value:GPBGetMessageInt64Field(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32Int64Dictionary *dict =
@@ -1484,15 +1501,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE(SInt32, Int32)
// This block of code is generated, do not edit it directly.
- case GPBTypeSInt32:
+ case GPBDataTypeSInt32:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBInt32Array *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeSInt32s:fieldNumber values:array tag:tag];
+ [output writeSInt32Array:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeSInt32:fieldNumber
- value:GPBGetInt32IvarWithField(self, field)];
+ value:GPBGetMessageInt32Field(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32Int32Dictionary *dict =
@@ -1504,15 +1521,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE(SInt64, Int64)
// This block of code is generated, do not edit it directly.
- case GPBTypeSInt64:
+ case GPBDataTypeSInt64:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBInt64Array *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeSInt64s:fieldNumber values:array tag:tag];
+ [output writeSInt64Array:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeSInt64:fieldNumber
- value:GPBGetInt64IvarWithField(self, field)];
+ value:GPBGetMessageInt64Field(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32Int64Dictionary *dict =
@@ -1524,15 +1541,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE(UInt32, UInt32)
// This block of code is generated, do not edit it directly.
- case GPBTypeUInt32:
+ case GPBDataTypeUInt32:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBUInt32Array *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeUInt32s:fieldNumber values:array tag:tag];
+ [output writeUInt32Array:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeUInt32:fieldNumber
- value:GPBGetUInt32IvarWithField(self, field)];
+ value:GPBGetMessageUInt32Field(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32UInt32Dictionary *dict =
@@ -1544,15 +1561,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE(UInt64, UInt64)
// This block of code is generated, do not edit it directly.
- case GPBTypeUInt64:
+ case GPBDataTypeUInt64:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBUInt64Array *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeUInt64s:fieldNumber values:array tag:tag];
+ [output writeUInt64Array:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeUInt64:fieldNumber
- value:GPBGetUInt64IvarWithField(self, field)];
+ value:GPBGetMessageUInt64Field(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32UInt64Dictionary *dict =
@@ -1564,15 +1581,15 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE_FULL(Enum, Int32, Enum)
// This block of code is generated, do not edit it directly.
- case GPBTypeEnum:
+ case GPBDataTypeEnum:
if (fieldType == GPBFieldTypeRepeated) {
uint32_t tag = field.isPackable ? GPBFieldTag(field) : 0;
GPBEnumArray *array =
GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeEnums:fieldNumber values:array tag:tag];
+ [output writeEnumArray:fieldNumber values:array tag:tag];
} else if (fieldType == GPBFieldTypeSingle) {
[output writeEnum:fieldNumber
- value:GPBGetInt32IvarWithField(self, field)];
+ value:GPBGetMessageInt32Field(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
GPBInt32EnumDictionary *dict =
@@ -1581,23 +1598,23 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
}
break;
-//%PDDM-EXPAND FIELD_CASE2(Data)
+//%PDDM-EXPAND FIELD_CASE2(Bytes)
// This block of code is generated, do not edit it directly.
- case GPBTypeData:
+ case GPBDataTypeBytes:
if (fieldType == GPBFieldTypeRepeated) {
NSArray *array = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeDatas:fieldNumber values:array];
+ [output writeBytesArray:fieldNumber values:array];
} else if (fieldType == GPBFieldTypeSingle) {
// GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check
// again.
- [output writeData:fieldNumber
- value:GPBGetObjectIvarWithFieldNoAutocreate(self, field)];
+ [output writeBytes:fieldNumber
+ value:GPBGetObjectIvarWithFieldNoAutocreate(self, field)];
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
id dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- GPBType mapKeyType = field.mapKeyType;
- if (mapKeyType == GPBTypeString) {
+ GPBDataType mapKeyDataType = field.mapKeyDataType;
+ if (mapKeyDataType == GPBDataTypeString) {
GPBDictionaryWriteToStreamInternalHelper(output, dict, field);
} else {
[dict writeToCodedOutputStream:output asField:field];
@@ -1608,10 +1625,10 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE2(String)
// This block of code is generated, do not edit it directly.
- case GPBTypeString:
+ case GPBDataTypeString:
if (fieldType == GPBFieldTypeRepeated) {
NSArray *array = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeStrings:fieldNumber values:array];
+ [output writeStringArray:fieldNumber values:array];
} else if (fieldType == GPBFieldTypeSingle) {
// GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check
// again.
@@ -1620,8 +1637,8 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
id dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- GPBType mapKeyType = field.mapKeyType;
- if (mapKeyType == GPBTypeString) {
+ GPBDataType mapKeyDataType = field.mapKeyDataType;
+ if (mapKeyDataType == GPBDataTypeString) {
GPBDictionaryWriteToStreamInternalHelper(output, dict, field);
} else {
[dict writeToCodedOutputStream:output asField:field];
@@ -1632,10 +1649,10 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE2(Message)
// This block of code is generated, do not edit it directly.
- case GPBTypeMessage:
+ case GPBDataTypeMessage:
if (fieldType == GPBFieldTypeRepeated) {
NSArray *array = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeMessages:fieldNumber values:array];
+ [output writeMessageArray:fieldNumber values:array];
} else if (fieldType == GPBFieldTypeSingle) {
// GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check
// again.
@@ -1644,8 +1661,8 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
id dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- GPBType mapKeyType = field.mapKeyType;
- if (mapKeyType == GPBTypeString) {
+ GPBDataType mapKeyDataType = field.mapKeyDataType;
+ if (mapKeyDataType == GPBDataTypeString) {
GPBDictionaryWriteToStreamInternalHelper(output, dict, field);
} else {
[dict writeToCodedOutputStream:output asField:field];
@@ -1656,10 +1673,10 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
//%PDDM-EXPAND FIELD_CASE2(Group)
// This block of code is generated, do not edit it directly.
- case GPBTypeGroup:
+ case GPBDataTypeGroup:
if (fieldType == GPBFieldTypeRepeated) {
NSArray *array = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- [output writeGroups:fieldNumber values:array];
+ [output writeGroupArray:fieldNumber values:array];
} else if (fieldType == GPBFieldTypeSingle) {
// GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check
// again.
@@ -1668,8 +1685,8 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
} else { // fieldType == GPBFieldTypeMap
// Exact type here doesn't matter.
id dict = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- GPBType mapKeyType = field.mapKeyType;
- if (mapKeyType == GPBTypeString) {
+ GPBDataType mapKeyDataType = field.mapKeyDataType;
+ if (mapKeyDataType == GPBDataTypeString) {
GPBDictionaryWriteToStreamInternalHelper(output, dict, field);
} else {
[dict writeToCodedOutputStream:output asField:field];
@@ -1683,22 +1700,20 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
#pragma mark - Extensions
-- (id)getExtension:(GPBExtensionField *)extension {
+- (id)getExtension:(GPBExtensionDescriptor *)extension {
CheckExtension(self, extension);
id value = [extensionMap_ objectForKey:extension];
if (value != nil) {
return value;
}
- GPBExtensionDescriptor *extDesc = extension.descriptor;
-
// No default for repeated.
- if (extDesc.isRepeated) {
+ if (extension.isRepeated) {
return nil;
}
// Non messages get their default.
- if (!GPBExtensionIsMessage(extDesc)) {
- return [extension defaultValue];
+ if (!GPBExtensionIsMessage(extension)) {
+ return extension.defaultValue;
}
// Check for an autocreated value.
@@ -1706,7 +1721,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
value = [autocreatedExtensionMap_ objectForKey:extension];
if (!value) {
// Auto create the message extensions to match normal fields.
- value = CreateMessageWithAutocreatorForExtension(extDesc.msgClass, self,
+ value = CreateMessageWithAutocreatorForExtension(extension.msgClass, self,
extension);
if (autocreatedExtensionMap_ == nil) {
@@ -1723,12 +1738,12 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
return value;
}
-- (id)getExistingExtension:(GPBExtensionField *)extension {
+- (id)getExistingExtension:(GPBExtensionDescriptor *)extension {
// This is an internal method so we don't need to call CheckExtension().
return [extensionMap_ objectForKey:extension];
}
-- (BOOL)hasExtension:(GPBExtensionField *)extension {
+- (BOOL)hasExtension:(GPBExtensionDescriptor *)extension {
#if DEBUG
CheckExtension(self, extension);
#endif // DEBUG
@@ -1745,11 +1760,11 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
sortedArrayUsingSelector:@selector(compareByFieldNumber:)];
uint32_t start = range.start;
uint32_t end = range.end;
- for (GPBExtensionField *extension in sortedExtensions) {
- uint32_t fieldNumber = [extension fieldNumber];
+ for (GPBExtensionDescriptor *extension in sortedExtensions) {
+ uint32_t fieldNumber = extension.fieldNumber;
if (fieldNumber >= start && fieldNumber < end) {
id value = [extensionMap_ objectForKey:extension];
- [extension writeValue:value includingTagToCodedOutputStream:output];
+ GPBWriteExtensionValueToOutputStream(extension, value, output);
}
}
}
@@ -1759,7 +1774,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
sortedArrayUsingSelector:@selector(compareByFieldNumber:)];
}
-- (void)setExtension:(GPBExtensionField *)extension value:(id)value {
+- (void)setExtension:(GPBExtensionDescriptor *)extension value:(id)value {
if (!value) {
[self clearExtension:extension];
return;
@@ -1767,7 +1782,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
CheckExtension(self, extension);
- if ([extension isRepeated]) {
+ if (extension.repeated) {
[NSException raise:NSInvalidArgumentException
format:@"Must call addExtension() for repeated types."];
}
@@ -1778,7 +1793,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
[extensionMap_ setObject:value forKey:extension];
- GPBExtensionDescriptor *descriptor = extension.descriptor;
+ GPBExtensionDescriptor *descriptor = extension;
if (GPBExtensionIsMessage(descriptor) && !descriptor.isRepeated) {
GPBMessage *autocreatedValue =
@@ -1793,10 +1808,10 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
GPBBecomeVisibleToAutocreator(self);
}
-- (void)addExtension:(GPBExtensionField *)extension value:(id)value {
+- (void)addExtension:(GPBExtensionDescriptor *)extension value:(id)value {
CheckExtension(self, extension);
- if (![extension isRepeated]) {
+ if (!extension.repeated) {
[NSException raise:NSInvalidArgumentException
format:@"Must call setExtension() for singular types."];
}
@@ -1814,12 +1829,12 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
GPBBecomeVisibleToAutocreator(self);
}
-- (void)setExtension:(GPBExtensionField *)extension
+- (void)setExtension:(GPBExtensionDescriptor *)extension
index:(NSUInteger)idx
value:(id)value {
CheckExtension(self, extension);
- if (![extension isRepeated]) {
+ if (!extension.repeated) {
[NSException raise:NSInvalidArgumentException
format:@"Must call setExtension() for singular types."];
}
@@ -1834,7 +1849,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
GPBBecomeVisibleToAutocreator(self);
}
-- (void)clearExtension:(GPBExtensionField *)extension {
+- (void)clearExtension:(GPBExtensionDescriptor *)extension {
CheckExtension(self, extension);
// Only become visible if there was actually a value to clear.
@@ -1862,7 +1877,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
if (GPBCodedInputStreamIsAtEnd(state)) {
return;
}
- NSData *data = GPBCodedInputStreamReadRetainedDataNoCopy(state);
+ NSData *data = GPBCodedInputStreamReadRetainedBytesNoCopy(state);
if (data == nil) {
return;
}
@@ -1903,6 +1918,9 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
@try {
[message mergeDelimitedFromCodedInputStream:input
extensionRegistry:extensionRegistry];
+ if (errorPtr) {
+ *errorPtr = nil;
+ }
}
@catch (NSException *exception) {
[message release];
@@ -1942,7 +1960,7 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
extensionRegistry:(GPBExtensionRegistry *)extensionRegistry {
uint32_t typeId = 0;
NSData *rawBytes = nil;
- GPBExtensionField *extension = nil;
+ GPBExtensionDescriptor *extension = nil;
GPBCodedInputStreamState *state = &input->state_;
while (true) {
uint32_t tag = GPBCodedInputStreamReadTag(state);
@@ -1953,11 +1971,12 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
if (tag == GPBWireFormatMessageSetTypeIdTag) {
typeId = GPBCodedInputStreamReadUInt32(state);
if (typeId != 0) {
- extension = [extensionRegistry getExtension:[self descriptor]
- fieldNumber:typeId];
+ extension = [extensionRegistry extensionForDescriptor:[self descriptor]
+ fieldNumber:typeId];
}
} else if (tag == GPBWireFormatMessageSetMessageTag) {
- rawBytes = [GPBCodedInputStreamReadRetainedDataNoCopy(state) autorelease];
+ rawBytes =
+ [GPBCodedInputStreamReadRetainedBytesNoCopy(state) autorelease];
} else {
if (![input skipField:tag]) {
break;
@@ -1971,9 +1990,11 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
if (extension != nil) {
GPBCodedInputStream *newInput =
[[GPBCodedInputStream alloc] initWithData:rawBytes];
- [extension mergeFromCodedInputStream:newInput
- extensionRegistry:extensionRegistry
- message:self];
+ GPBExtensionMergeFromInputStream(extension,
+ extension.packable,
+ newInput,
+ extensionRegistry,
+ self);
[newInput release];
} else {
GPBUnknownFieldSet *unknownFields = GetOrMakeUnknownFields(self);
@@ -1989,19 +2010,33 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
int32_t fieldNumber = GPBWireFormatGetTagFieldNumber(tag);
GPBDescriptor *descriptor = [self descriptor];
- GPBExtensionField *extension =
- [extensionRegistry getExtension:descriptor fieldNumber:fieldNumber];
-
+ GPBExtensionDescriptor *extension =
+ [extensionRegistry extensionForDescriptor:descriptor
+ fieldNumber:fieldNumber];
if (extension == nil) {
if (descriptor.wireFormat && GPBWireFormatMessageSetItemTag == tag) {
[self parseMessageSet:input extensionRegistry:extensionRegistry];
return YES;
}
} else {
- if ([extension wireType] == wireType) {
- [extension mergeFromCodedInputStream:input
- extensionRegistry:extensionRegistry
- message:self];
+ if (extension.wireType == wireType) {
+ GPBExtensionMergeFromInputStream(extension,
+ extension.packable,
+ input,
+ extensionRegistry,
+ self);
+ return YES;
+ }
+ // Primitive, repeated types can be packed on unpacked on the wire, and are
+ // parsed either way.
+ if ([extension isRepeated] &&
+ !GPBDataTypeIsObject(extension->description_->dataType) &&
+ (extension.alternateWireType == wireType)) {
+ GPBExtensionMergeFromInputStream(extension,
+ !extension.packable,
+ input,
+ extensionRegistry,
+ self);
return YES;
}
}
@@ -2020,1052 +2055,311 @@ static GPBUnknownFieldSet *GetOrMakeUnknownFields(GPBMessage *self) {
#pragma mark - MergeFromCodedInputStream Support
-typedef struct MergeFromCodedInputStreamContext {
- GPBMessage *self;
- GPBCodedInputStream *stream;
- GPBMessage *result;
- GPBExtensionRegistry *registry;
- uint32_t tag;
- GPBFileSyntax syntax;
-} MergeFromCodedInputStreamContext;
-
-//%PDDM-DEFINE MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(NAME, TYPE, ARRAY_TYPE)
-//%static BOOL DynamicMergeFromCodedInputStream##NAME(GPBFieldDescriptor *field,
-//% NAME$S void *voidContext) {
-//% MergeFromCodedInputStreamContext *context =
-//% (MergeFromCodedInputStreamContext *)voidContext;
-//% GPBCodedInputStreamState *state = &context->stream->state_;
-//% GPBFieldType fieldType = field.fieldType;
-//% if (fieldType == GPBFieldTypeRepeated) {
-//% GPB##ARRAY_TYPE##Array *array =
-//% GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
-//% if (field.isPackable) {
-//% int32_t length = GPBCodedInputStreamReadInt32(state);
-//% size_t limit = GPBCodedInputStreamPushLimit(state, length);
-//% while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
-//% TYPE val = GPBCodedInputStreamRead##NAME(state);
-//% [array addValue:val];
-//% }
-//% GPBCodedInputStreamPopLimit(state, limit);
-//% } else {
-//% TYPE val = GPBCodedInputStreamRead##NAME(state);
-//% [array addValue:val];
-//% }
-//% } else if (fieldType == GPBFieldTypeSingle) {
-//% TYPE val = GPBCodedInputStreamRead##NAME(state);
-//% GPBSet##ARRAY_TYPE##IvarWithFieldInternal(context->result, field, val,
-//% ARRAY_TYPE$S context->syntax);
-//% } else { // fieldType == GPBFieldTypeMap
-//% // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
-//% GPBInt32Int32Dictionary *map =
-//% GetOrCreateMapIvarWithField(context->result, field, context->syntax);
-//% [context->stream readMapEntry:map
-//% extensionRegistry:nil
-//% field:field
-//% parentMessage:context->result];
-//% }
-//% return NO;
-//%}
-//%
-//%PDDM-DEFINE MERGE_FROM_CODED_INPUT_STREAM_OBJ_FUNC(NAME)
-//%static BOOL DynamicMergeFromCodedInputStream##NAME(GPBFieldDescriptor *field,
-//% NAME$S void *voidContext) {
-//% MergeFromCodedInputStreamContext *context = voidContext;
-//% GPBCodedInputStreamState *state = &context->stream->state_;
-//% GPBFieldType fieldType = field.fieldType;
-//% if (fieldType == GPBFieldTypeMap) {
-//% // GPB*Dictionary or NSDictionary, exact type doesn't matter at this point.
-//% id map =
-//% GetOrCreateMapIvarWithField(context->result, field, context->syntax);
-//% [context->stream readMapEntry:map
-//% extensionRegistry:nil
-//% field:field
-//% parentMessage:context->result];
-//% } else {
-//% id val = GPBCodedInputStreamReadRetained##NAME(state);
-//% if (fieldType == GPBFieldTypeRepeated) {
-//% NSMutableArray *array =
-//% GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
-//% [array addObject:val];
-//% [val release];
-//% } else { // fieldType == GPBFieldTypeSingle
-//% GPBSetRetainedObjectIvarWithFieldInternal(context->result, field, val,
-//% context->syntax);
-//% }
-//% }
-//% return NO;
-//%}
-//%
-
-static BOOL DynamicMergeFromCodedInputStreamGroup(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- int number = GPBFieldNumber(field);
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBMessage *message = [[field.msgClass alloc] init];
- NSMutableArray *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- [context->stream readGroup:number
- message:message
- extensionRegistry:context->registry];
- [array addObject:message];
- [message release];
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL has = GPBGetHasIvarField(context->result, field);
- if (has) {
- // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check
- // again.
- GPBMessage *message =
- GPBGetObjectIvarWithFieldNoAutocreate(context->result, field);
- [context->stream readGroup:number
- message:message
- extensionRegistry:context->registry];
- } else {
- GPBMessage *message = [[field.msgClass alloc] init];
- [context->stream readGroup:number
- message:message
- extensionRegistry:context->registry];
- GPBSetRetainedObjectIvarWithFieldInternal(context->result, field, message,
- context->syntax);
- }
- } else { // fieldType == GPBFieldTypeMap
- NSCAssert(NO, @"Shouldn't happen");
- return YES;
- }
- return NO;
-}
-
-static BOOL DynamicMergeFromCodedInputStreamMessage(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBMessage *message = [[field.msgClass alloc] init];
- NSMutableArray *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- [context->stream readMessage:message extensionRegistry:context->registry];
- [array addObject:message];
- [message release];
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL has = GPBGetHasIvarField(context->result, field);
- if (has) {
- // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check
- // again.
- GPBMessage *message =
- GPBGetObjectIvarWithFieldNoAutocreate(context->result, field);
- [context->stream readMessage:message extensionRegistry:context->registry];
- } else {
- GPBMessage *message = [[field.msgClass alloc] init];
- [context->stream readMessage:message extensionRegistry:context->registry];
- GPBSetRetainedObjectIvarWithFieldInternal(context->result, field, message,
- context->syntax);
- }
- } else { // fieldType == GPBFieldTypeMap
- // GPB*Dictionary or NSDictionary, exact type doesn't matter.
- id map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:context->registry
- field:field
- parentMessage:context->result];
- }
- return NO;
-}
-
-static BOOL DynamicMergeFromCodedInputStreamEnum(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- int number = GPBFieldNumber(field);
- BOOL hasPreservingUnknownEnumSemantics =
- GPBHasPreservingUnknownEnumSemantics(context->syntax);
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBEnumArray *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- int32_t val = GPBCodedInputStreamReadEnum(state);
- if (hasPreservingUnknownEnumSemantics || [field isValidEnumValue:val]) {
- [array addRawValue:val];
- } else {
- GPBUnknownFieldSet *unknownFields =
- GetOrMakeUnknownFields(context->self);
- [unknownFields mergeVarintField:number value:val];
- }
- }
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- int32_t val = GPBCodedInputStreamReadEnum(state);
- if (hasPreservingUnknownEnumSemantics || [field isValidEnumValue:val]) {
- [array addRawValue:val];
+static void MergeSingleFieldFromCodedInputStream(
+ GPBMessage *self, GPBFieldDescriptor *field, GPBFileSyntax syntax,
+ GPBCodedInputStream *input, GPBExtensionRegistry *extensionRegistry) {
+ GPBDataType fieldDataType = GPBGetFieldDataType(field);
+ switch (fieldDataType) {
+#define CASE_SINGLE_POD(NAME, TYPE, FUNC_TYPE) \
+ case GPBDataType##NAME: { \
+ TYPE val = GPBCodedInputStreamRead##NAME(&input->state_); \
+ GPBSet##FUNC_TYPE##IvarWithFieldInternal(self, field, val, syntax); \
+ break; \
+ }
+#define CASE_SINGLE_OBJECT(NAME) \
+ case GPBDataType##NAME: { \
+ id val = GPBCodedInputStreamReadRetained##NAME(&input->state_); \
+ GPBSetRetainedObjectIvarWithFieldInternal(self, field, val, syntax); \
+ break; \
+ }
+ CASE_SINGLE_POD(Bool, BOOL, Bool)
+ CASE_SINGLE_POD(Fixed32, uint32_t, UInt32)
+ CASE_SINGLE_POD(SFixed32, int32_t, Int32)
+ CASE_SINGLE_POD(Float, float, Float)
+ CASE_SINGLE_POD(Fixed64, uint64_t, UInt64)
+ CASE_SINGLE_POD(SFixed64, int64_t, Int64)
+ CASE_SINGLE_POD(Double, double, Double)
+ CASE_SINGLE_POD(Int32, int32_t, Int32)
+ CASE_SINGLE_POD(Int64, int64_t, Int64)
+ CASE_SINGLE_POD(SInt32, int32_t, Int32)
+ CASE_SINGLE_POD(SInt64, int64_t, Int64)
+ CASE_SINGLE_POD(UInt32, uint32_t, UInt32)
+ CASE_SINGLE_POD(UInt64, uint64_t, UInt64)
+ CASE_SINGLE_OBJECT(Bytes)
+ CASE_SINGLE_OBJECT(String)
+#undef CASE_SINGLE_POD
+#undef CASE_SINGLE_OBJECT
+
+ case GPBDataTypeMessage: {
+ if (GPBGetHasIvarField(self, field)) {
+ // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has
+ // check again.
+ GPBMessage *message =
+ GPBGetObjectIvarWithFieldNoAutocreate(self, field);
+ [input readMessage:message extensionRegistry:extensionRegistry];
} else {
- GPBUnknownFieldSet *unknownFields =
- GetOrMakeUnknownFields(context->self);
- [unknownFields mergeVarintField:number value:val];
- }
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- int32_t val = GPBCodedInputStreamReadEnum(state);
- if (hasPreservingUnknownEnumSemantics || [field isValidEnumValue:val]) {
- GPBSetInt32IvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else {
- GPBUnknownFieldSet *unknownFields = GetOrMakeUnknownFields(context->self);
- [unknownFields mergeVarintField:number value:val];
- }
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a
- // GPB*EnumDictionary.
- GPBInt32EnumDictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:context->registry
- field:field
- parentMessage:context->result];
- }
- return NO;
-}
-
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(Bool, BOOL, Bool)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicMergeFromCodedInputStreamBool(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBBoolArray *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- BOOL val = GPBCodedInputStreamReadBool(state);
- [array addValue:val];
- }
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- BOOL val = GPBCodedInputStreamReadBool(state);
- [array addValue:val];
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL val = GPBCodedInputStreamReadBool(state);
- GPBSetBoolIvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
- GPBInt32Int32Dictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- }
- return NO;
-}
-
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(Int32, int32_t, Int32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicMergeFromCodedInputStreamInt32(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBInt32Array *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- int32_t val = GPBCodedInputStreamReadInt32(state);
- [array addValue:val];
- }
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- int32_t val = GPBCodedInputStreamReadInt32(state);
- [array addValue:val];
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- int32_t val = GPBCodedInputStreamReadInt32(state);
- GPBSetInt32IvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
- GPBInt32Int32Dictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- }
- return NO;
-}
-
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(SInt32, int32_t, Int32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicMergeFromCodedInputStreamSInt32(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBInt32Array *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- int32_t val = GPBCodedInputStreamReadSInt32(state);
- [array addValue:val];
- }
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- int32_t val = GPBCodedInputStreamReadSInt32(state);
- [array addValue:val];
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- int32_t val = GPBCodedInputStreamReadSInt32(state);
- GPBSetInt32IvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
- GPBInt32Int32Dictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- }
- return NO;
-}
-
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(SFixed32, int32_t, Int32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicMergeFromCodedInputStreamSFixed32(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBInt32Array *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- int32_t val = GPBCodedInputStreamReadSFixed32(state);
- [array addValue:val];
- }
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- int32_t val = GPBCodedInputStreamReadSFixed32(state);
- [array addValue:val];
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- int32_t val = GPBCodedInputStreamReadSFixed32(state);
- GPBSetInt32IvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
- GPBInt32Int32Dictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- }
- return NO;
-}
-
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(UInt32, uint32_t, UInt32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicMergeFromCodedInputStreamUInt32(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBUInt32Array *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- uint32_t val = GPBCodedInputStreamReadUInt32(state);
- [array addValue:val];
- }
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- uint32_t val = GPBCodedInputStreamReadUInt32(state);
- [array addValue:val];
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- uint32_t val = GPBCodedInputStreamReadUInt32(state);
- GPBSetUInt32IvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
- GPBInt32Int32Dictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- }
- return NO;
-}
-
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(Fixed32, uint32_t, UInt32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicMergeFromCodedInputStreamFixed32(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBUInt32Array *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- uint32_t val = GPBCodedInputStreamReadFixed32(state);
- [array addValue:val];
+ GPBMessage *message = [[field.msgClass alloc] init];
+ [input readMessage:message extensionRegistry:extensionRegistry];
+ GPBSetRetainedObjectIvarWithFieldInternal(self, field, message, syntax);
}
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- uint32_t val = GPBCodedInputStreamReadFixed32(state);
- [array addValue:val];
+ break;
}
- } else if (fieldType == GPBFieldTypeSingle) {
- uint32_t val = GPBCodedInputStreamReadFixed32(state);
- GPBSetUInt32IvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
- GPBInt32Int32Dictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- }
- return NO;
-}
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(Int64, int64_t, Int64)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicMergeFromCodedInputStreamInt64(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBInt64Array *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- int64_t val = GPBCodedInputStreamReadInt64(state);
- [array addValue:val];
+ case GPBDataTypeGroup: {
+ if (GPBGetHasIvarField(self, field)) {
+ // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has
+ // check again.
+ GPBMessage *message =
+ GPBGetObjectIvarWithFieldNoAutocreate(self, field);
+ [input readGroup:GPBFieldNumber(field)
+ message:message
+ extensionRegistry:extensionRegistry];
+ } else {
+ GPBMessage *message = [[field.msgClass alloc] init];
+ [input readGroup:GPBFieldNumber(field)
+ message:message
+ extensionRegistry:extensionRegistry];
+ GPBSetRetainedObjectIvarWithFieldInternal(self, field, message, syntax);
}
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- int64_t val = GPBCodedInputStreamReadInt64(state);
- [array addValue:val];
+ break;
}
- } else if (fieldType == GPBFieldTypeSingle) {
- int64_t val = GPBCodedInputStreamReadInt64(state);
- GPBSetInt64IvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
- GPBInt32Int32Dictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- }
- return NO;
-}
-
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(SFixed64, int64_t, Int64)
-// This block of code is generated, do not edit it directly.
-static BOOL DynamicMergeFromCodedInputStreamSFixed64(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBInt64Array *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- int64_t val = GPBCodedInputStreamReadSFixed64(state);
- [array addValue:val];
+ case GPBDataTypeEnum: {
+ int32_t val = GPBCodedInputStreamReadEnum(&input->state_);
+ if (GPBHasPreservingUnknownEnumSemantics(syntax) ||
+ [field isValidEnumValue:val]) {
+ GPBSetInt32IvarWithFieldInternal(self, field, val, syntax);
+ } else {
+ GPBUnknownFieldSet *unknownFields = GetOrMakeUnknownFields(self);
+ [unknownFields mergeVarintField:GPBFieldNumber(field) value:val];
}
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- int64_t val = GPBCodedInputStreamReadSFixed64(state);
- [array addValue:val];
}
- } else if (fieldType == GPBFieldTypeSingle) {
- int64_t val = GPBCodedInputStreamReadSFixed64(state);
- GPBSetInt64IvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
- GPBInt32Int32Dictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- }
- return NO;
+ } // switch
}
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(SInt64, int64_t, Int64)
-// This block of code is generated, do not edit it directly.
+static void MergeRepeatedPackedFieldFromCodedInputStream(
+ GPBMessage *self, GPBFieldDescriptor *field, GPBFileSyntax syntax,
+ GPBCodedInputStream *input) {
+ GPBDataType fieldDataType = GPBGetFieldDataType(field);
+ GPBCodedInputStreamState *state = &input->state_;
+ id genericArray = GetOrCreateArrayIvarWithField(self, field, syntax);
+ int32_t length = GPBCodedInputStreamReadInt32(state);
+ size_t limit = GPBCodedInputStreamPushLimit(state, length);
+ while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
+ switch (fieldDataType) {
+#define CASE_REPEATED_PACKED_POD(NAME, TYPE, ARRAY_TYPE) \
+ case GPBDataType##NAME: { \
+ TYPE val = GPBCodedInputStreamRead##NAME(state); \
+ [(GPB##ARRAY_TYPE##Array *)genericArray addValue:val]; \
+ break; \
+ }
+ CASE_REPEATED_PACKED_POD(Bool, BOOL, Bool)
+ CASE_REPEATED_PACKED_POD(Fixed32, uint32_t, UInt32)
+ CASE_REPEATED_PACKED_POD(SFixed32, int32_t, Int32)
+ CASE_REPEATED_PACKED_POD(Float, float, Float)
+ CASE_REPEATED_PACKED_POD(Fixed64, uint64_t, UInt64)
+ CASE_REPEATED_PACKED_POD(SFixed64, int64_t, Int64)
+ CASE_REPEATED_PACKED_POD(Double, double, Double)
+ CASE_REPEATED_PACKED_POD(Int32, int32_t, Int32)
+ CASE_REPEATED_PACKED_POD(Int64, int64_t, Int64)
+ CASE_REPEATED_PACKED_POD(SInt32, int32_t, Int32)
+ CASE_REPEATED_PACKED_POD(SInt64, int64_t, Int64)
+ CASE_REPEATED_PACKED_POD(UInt32, uint32_t, UInt32)
+ CASE_REPEATED_PACKED_POD(UInt64, uint64_t, UInt64)
+#undef CASE_REPEATED_PACKED_POD
+
+ case GPBDataTypeBytes:
+ case GPBDataTypeString:
+ case GPBDataTypeMessage:
+ case GPBDataTypeGroup:
+ NSCAssert(NO, @"Non primitive types can't be packed");
+ break;
-static BOOL DynamicMergeFromCodedInputStreamSInt64(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBInt64Array *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- int64_t val = GPBCodedInputStreamReadSInt64(state);
- [array addValue:val];
+ case GPBDataTypeEnum: {
+ int32_t val = GPBCodedInputStreamReadEnum(state);
+ if (GPBHasPreservingUnknownEnumSemantics(syntax) ||
+ [field isValidEnumValue:val]) {
+ [(GPBEnumArray*)genericArray addRawValue:val];
+ } else {
+ GPBUnknownFieldSet *unknownFields = GetOrMakeUnknownFields(self);
+ [unknownFields mergeVarintField:GPBFieldNumber(field) value:val];
+ }
+ break;
}
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- int64_t val = GPBCodedInputStreamReadSInt64(state);
- [array addValue:val];
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- int64_t val = GPBCodedInputStreamReadSInt64(state);
- GPBSetInt64IvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
- GPBInt32Int32Dictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- }
- return NO;
+ } // switch
+ } // while(BytesUntilLimit() > 0)
+ GPBCodedInputStreamPopLimit(state, limit);
}
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(UInt64, uint64_t, UInt64)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicMergeFromCodedInputStreamUInt64(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBUInt64Array *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- uint64_t val = GPBCodedInputStreamReadUInt64(state);
- [array addValue:val];
- }
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- uint64_t val = GPBCodedInputStreamReadUInt64(state);
- [array addValue:val];
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- uint64_t val = GPBCodedInputStreamReadUInt64(state);
- GPBSetUInt64IvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
- GPBInt32Int32Dictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- }
- return NO;
-}
-
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(Fixed64, uint64_t, UInt64)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicMergeFromCodedInputStreamFixed64(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBUInt64Array *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- uint64_t val = GPBCodedInputStreamReadFixed64(state);
- [array addValue:val];
- }
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- uint64_t val = GPBCodedInputStreamReadFixed64(state);
- [array addValue:val];
+static void MergeRepeatedNotPackedFieldFromCodedInputStream(
+ GPBMessage *self, GPBFieldDescriptor *field, GPBFileSyntax syntax,
+ GPBCodedInputStream *input, GPBExtensionRegistry *extensionRegistry) {
+ GPBCodedInputStreamState *state = &input->state_;
+ id genericArray = GetOrCreateArrayIvarWithField(self, field, syntax);
+ switch (GPBGetFieldDataType(field)) {
+#define CASE_REPEATED_NOT_PACKED_POD(NAME, TYPE, ARRAY_TYPE) \
+ case GPBDataType##NAME: { \
+ TYPE val = GPBCodedInputStreamRead##NAME(state); \
+ [(GPB##ARRAY_TYPE##Array *)genericArray addValue:val]; \
+ break; \
+ }
+#define CASE_REPEATED_NOT_PACKED_OBJECT(NAME) \
+ case GPBDataType##NAME: { \
+ id val = GPBCodedInputStreamReadRetained##NAME(state); \
+ [(NSMutableArray*)genericArray addObject:val]; \
+ [val release]; \
+ break; \
+ }
+ CASE_REPEATED_NOT_PACKED_POD(Bool, BOOL, Bool)
+ CASE_REPEATED_NOT_PACKED_POD(Fixed32, uint32_t, UInt32)
+ CASE_REPEATED_NOT_PACKED_POD(SFixed32, int32_t, Int32)
+ CASE_REPEATED_NOT_PACKED_POD(Float, float, Float)
+ CASE_REPEATED_NOT_PACKED_POD(Fixed64, uint64_t, UInt64)
+ CASE_REPEATED_NOT_PACKED_POD(SFixed64, int64_t, Int64)
+ CASE_REPEATED_NOT_PACKED_POD(Double, double, Double)
+ CASE_REPEATED_NOT_PACKED_POD(Int32, int32_t, Int32)
+ CASE_REPEATED_NOT_PACKED_POD(Int64, int64_t, Int64)
+ CASE_REPEATED_NOT_PACKED_POD(SInt32, int32_t, Int32)
+ CASE_REPEATED_NOT_PACKED_POD(SInt64, int64_t, Int64)
+ CASE_REPEATED_NOT_PACKED_POD(UInt32, uint32_t, UInt32)
+ CASE_REPEATED_NOT_PACKED_POD(UInt64, uint64_t, UInt64)
+ CASE_REPEATED_NOT_PACKED_OBJECT(Bytes)
+ CASE_REPEATED_NOT_PACKED_OBJECT(String)
+#undef CASE_REPEATED_NOT_PACKED_POD
+#undef CASE_NOT_PACKED_OBJECT
+ case GPBDataTypeMessage: {
+ GPBMessage *message = [[field.msgClass alloc] init];
+ [input readMessage:message extensionRegistry:extensionRegistry];
+ [(NSMutableArray*)genericArray addObject:message];
+ [message release];
+ break;
}
- } else if (fieldType == GPBFieldTypeSingle) {
- uint64_t val = GPBCodedInputStreamReadFixed64(state);
- GPBSetUInt64IvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
- GPBInt32Int32Dictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- }
- return NO;
-}
-
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(Float, float, Float)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicMergeFromCodedInputStreamFloat(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBFloatArray *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- float val = GPBCodedInputStreamReadFloat(state);
- [array addValue:val];
- }
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- float val = GPBCodedInputStreamReadFloat(state);
- [array addValue:val];
+ case GPBDataTypeGroup: {
+ GPBMessage *message = [[field.msgClass alloc] init];
+ [input readGroup:GPBFieldNumber(field)
+ message:message
+ extensionRegistry:extensionRegistry];
+ [(NSMutableArray*)genericArray addObject:message];
+ [message release];
+ break;
}
- } else if (fieldType == GPBFieldTypeSingle) {
- float val = GPBCodedInputStreamReadFloat(state);
- GPBSetFloatIvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
- GPBInt32Int32Dictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- }
- return NO;
-}
-
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_POD_FUNC(Double, double, Double)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicMergeFromCodedInputStreamDouble(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context =
- (MergeFromCodedInputStreamContext *)voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBDoubleArray *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- if (field.isPackable) {
- int32_t length = GPBCodedInputStreamReadInt32(state);
- size_t limit = GPBCodedInputStreamPushLimit(state, length);
- while (GPBCodedInputStreamBytesUntilLimit(state) > 0) {
- double val = GPBCodedInputStreamReadDouble(state);
- [array addValue:val];
+ case GPBDataTypeEnum: {
+ int32_t val = GPBCodedInputStreamReadEnum(state);
+ if (GPBHasPreservingUnknownEnumSemantics(syntax) ||
+ [field isValidEnumValue:val]) {
+ [(GPBEnumArray*)genericArray addRawValue:val];
+ } else {
+ GPBUnknownFieldSet *unknownFields = GetOrMakeUnknownFields(self);
+ [unknownFields mergeVarintField:GPBFieldNumber(field) value:val];
}
- GPBCodedInputStreamPopLimit(state, limit);
- } else {
- double val = GPBCodedInputStreamReadDouble(state);
- [array addValue:val];
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- double val = GPBCodedInputStreamReadDouble(state);
- GPBSetDoubleIvarWithFieldInternal(context->result, field, val,
- context->syntax);
- } else { // fieldType == GPBFieldTypeMap
- // The exact type doesn't matter, just need to know it is a GPB*Dictionary.
- GPBInt32Int32Dictionary *map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- }
- return NO;
-}
-
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_OBJ_FUNC(String)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicMergeFromCodedInputStreamString(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context = voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeMap) {
- // GPB*Dictionary or NSDictionary, exact type doesn't matter at this point.
- id map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- } else {
- id val = GPBCodedInputStreamReadRetainedString(state);
- if (fieldType == GPBFieldTypeRepeated) {
- NSMutableArray *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- [array addObject:val];
- [val release];
- } else { // fieldType == GPBFieldTypeSingle
- GPBSetRetainedObjectIvarWithFieldInternal(context->result, field, val,
- context->syntax);
- }
- }
- return NO;
-}
-
-//%PDDM-EXPAND MERGE_FROM_CODED_INPUT_STREAM_OBJ_FUNC(Data)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicMergeFromCodedInputStreamData(GPBFieldDescriptor *field,
- void *voidContext) {
- MergeFromCodedInputStreamContext *context = voidContext;
- GPBCodedInputStreamState *state = &context->stream->state_;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeMap) {
- // GPB*Dictionary or NSDictionary, exact type doesn't matter at this point.
- id map =
- GetOrCreateMapIvarWithField(context->result, field, context->syntax);
- [context->stream readMapEntry:map
- extensionRegistry:nil
- field:field
- parentMessage:context->result];
- } else {
- id val = GPBCodedInputStreamReadRetainedData(state);
- if (fieldType == GPBFieldTypeRepeated) {
- NSMutableArray *array =
- GetOrCreateArrayIvarWithField(context->result, field, context->syntax);
- [array addObject:val];
- [val release];
- } else { // fieldType == GPBFieldTypeSingle
- GPBSetRetainedObjectIvarWithFieldInternal(context->result, field, val,
- context->syntax);
+ break;
}
- }
- return NO;
+ } // switch
}
-//%PDDM-EXPAND-END (15 expansions)
-
- (void)mergeFromCodedInputStream:(GPBCodedInputStream *)input
extensionRegistry:(GPBExtensionRegistry *)extensionRegistry {
GPBDescriptor *descriptor = [self descriptor];
GPBFileSyntax syntax = descriptor.file.syntax;
- MergeFromCodedInputStreamContext context = {
- self, input, self, extensionRegistry, 0, syntax
- };
- GPBApplyStrictFunctions funcs =
- GPBAPPLY_STRICT_FUNCTIONS_INIT(DynamicMergeFromCodedInputStream);
+ GPBCodedInputStreamState *state = &input->state_;
+ uint32_t tag = 0;
NSUInteger startingIndex = 0;
NSArray *fields = descriptor->fields_;
- NSUInteger count = fields.count;
+ NSUInteger numFields = fields.count;
while (YES) {
BOOL merged = NO;
- context.tag = GPBCodedInputStreamReadTag(&input->state_);
- for (NSUInteger i = 0; i < count; ++i) {
- if (startingIndex >= count) startingIndex = 0;
+ tag = GPBCodedInputStreamReadTag(state);
+ for (NSUInteger i = 0; i < numFields; ++i) {
+ if (startingIndex >= numFields) startingIndex = 0;
GPBFieldDescriptor *fieldDescriptor = fields[startingIndex];
- if (GPBFieldTag(fieldDescriptor) == context.tag) {
- GPBApplyFunction function = funcs[GPBGetFieldType(fieldDescriptor)];
- function(fieldDescriptor, &context);
+ if (GPBFieldTag(fieldDescriptor) == tag) {
+ GPBFieldType fieldType = fieldDescriptor.fieldType;
+ if (fieldType == GPBFieldTypeSingle) {
+ MergeSingleFieldFromCodedInputStream(self, fieldDescriptor, syntax,
+ input, extensionRegistry);
+ // Well formed protos will only have a single field once, advance
+ // the starting index to the next field.
+ startingIndex += 1;
+ } else if (fieldType == GPBFieldTypeRepeated) {
+ if (fieldDescriptor.isPackable) {
+ MergeRepeatedPackedFieldFromCodedInputStream(
+ self, fieldDescriptor, syntax, input);
+ // Well formed protos will only have a repeated field that is
+ // packed once, advance the starting index to the next field.
+ startingIndex += 1;
+ } else {
+ MergeRepeatedNotPackedFieldFromCodedInputStream(
+ self, fieldDescriptor, syntax, input, extensionRegistry);
+ }
+ } else { // fieldType == GPBFieldTypeMap
+ // GPB*Dictionary or NSDictionary, exact type doesn't matter at this
+ // point.
+ id map = GetOrCreateMapIvarWithField(self, fieldDescriptor, syntax);
+ [input readMapEntry:map
+ extensionRegistry:extensionRegistry
+ field:fieldDescriptor
+ parentMessage:self];
+ }
merged = YES;
break;
} else {
startingIndex += 1;
}
+ } // for(i < numFields)
+
+ if (!merged) {
+ // Primitive, repeated types can be packed on unpacked on the wire, and
+ // are parsed either way. The above loop covered tag in the preferred
+ // for, so this need to check the alternate form.
+ for (NSUInteger i = 0; i < numFields; ++i) {
+ if (startingIndex >= numFields) startingIndex = 0;
+ GPBFieldDescriptor *fieldDescriptor = fields[startingIndex];
+ if ((fieldDescriptor.fieldType == GPBFieldTypeRepeated) &&
+ !GPBFieldDataTypeIsObject(fieldDescriptor) &&
+ (GPBFieldAlternateTag(fieldDescriptor) == tag)) {
+ BOOL alternateIsPacked = !fieldDescriptor.isPackable;
+ if (alternateIsPacked) {
+ MergeRepeatedPackedFieldFromCodedInputStream(
+ self, fieldDescriptor, syntax, input);
+ // Well formed protos will only have a repeated field that is
+ // packed once, advance the starting index to the next field.
+ startingIndex += 1;
+ } else {
+ MergeRepeatedNotPackedFieldFromCodedInputStream(
+ self, fieldDescriptor, syntax, input, extensionRegistry);
+ }
+ merged = YES;
+ break;
+ } else {
+ startingIndex += 1;
+ }
+ }
}
+
if (!merged) {
- if (context.tag == 0) {
+ if (tag == 0) {
// zero signals EOF / limit reached
return;
} else {
if (GPBPreserveUnknownFields(syntax)) {
if (![self parseUnknownField:input
extensionRegistry:extensionRegistry
- tag:context.tag]) {
+ tag:tag]) {
// it's an endgroup tag
return;
}
} else {
- if (![input skipField:context.tag]) {
+ if (![input skipField:tag]) {
return;
}
}
}
- }
- }
-}
-
-#pragma mark - MergeFrom Support
-
-typedef struct MergeFromContext {
- GPBMessage *other;
- GPBMessage *result;
- GPBFileSyntax syntax;
-} MergeFromContext;
-
-//%PDDM-DEFINE GPB_MERGE_FROM_FUNC(NAME)
-//%static BOOL MergeFrom##NAME(GPBFieldDescriptor *field, void *voidContext) {
-//% MergeFromContext *context = (MergeFromContext *)voidContext;
-//% BOOL otherHas = GPBGetHasIvarField(context->other, field);
-//% if (otherHas) {
-//% GPBSet##NAME##IvarWithFieldInternal(
-//% context->result, field, GPBGet##NAME##IvarWithField(context->other, field),
-//% context->syntax);
-//% }
-//% return YES;
-//%}
-//%
-//%PDDM-EXPAND GPB_MERGE_FROM_FUNC(Bool)
-// This block of code is generated, do not edit it directly.
+ } // if(!merged)
-static BOOL MergeFromBool(GPBFieldDescriptor *field, void *voidContext) {
- MergeFromContext *context = (MergeFromContext *)voidContext;
- BOOL otherHas = GPBGetHasIvarField(context->other, field);
- if (otherHas) {
- GPBSetBoolIvarWithFieldInternal(
- context->result, field, GPBGetBoolIvarWithField(context->other, field),
- context->syntax);
- }
- return YES;
+ } // while(YES)
}
-//%PDDM-EXPAND GPB_MERGE_FROM_FUNC(Int32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL MergeFromInt32(GPBFieldDescriptor *field, void *voidContext) {
- MergeFromContext *context = (MergeFromContext *)voidContext;
- BOOL otherHas = GPBGetHasIvarField(context->other, field);
- if (otherHas) {
- GPBSetInt32IvarWithFieldInternal(
- context->result, field, GPBGetInt32IvarWithField(context->other, field),
- context->syntax);
- }
- return YES;
-}
-
-//%PDDM-EXPAND GPB_MERGE_FROM_FUNC(UInt32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL MergeFromUInt32(GPBFieldDescriptor *field, void *voidContext) {
- MergeFromContext *context = (MergeFromContext *)voidContext;
- BOOL otherHas = GPBGetHasIvarField(context->other, field);
- if (otherHas) {
- GPBSetUInt32IvarWithFieldInternal(
- context->result, field, GPBGetUInt32IvarWithField(context->other, field),
- context->syntax);
- }
- return YES;
-}
-
-//%PDDM-EXPAND GPB_MERGE_FROM_FUNC(Int64)
-// This block of code is generated, do not edit it directly.
-
-static BOOL MergeFromInt64(GPBFieldDescriptor *field, void *voidContext) {
- MergeFromContext *context = (MergeFromContext *)voidContext;
- BOOL otherHas = GPBGetHasIvarField(context->other, field);
- if (otherHas) {
- GPBSetInt64IvarWithFieldInternal(
- context->result, field, GPBGetInt64IvarWithField(context->other, field),
- context->syntax);
- }
- return YES;
-}
-
-//%PDDM-EXPAND GPB_MERGE_FROM_FUNC(UInt64)
-// This block of code is generated, do not edit it directly.
-
-static BOOL MergeFromUInt64(GPBFieldDescriptor *field, void *voidContext) {
- MergeFromContext *context = (MergeFromContext *)voidContext;
- BOOL otherHas = GPBGetHasIvarField(context->other, field);
- if (otherHas) {
- GPBSetUInt64IvarWithFieldInternal(
- context->result, field, GPBGetUInt64IvarWithField(context->other, field),
- context->syntax);
- }
- return YES;
-}
-
-//%PDDM-EXPAND GPB_MERGE_FROM_FUNC(Float)
-// This block of code is generated, do not edit it directly.
-
-static BOOL MergeFromFloat(GPBFieldDescriptor *field, void *voidContext) {
- MergeFromContext *context = (MergeFromContext *)voidContext;
- BOOL otherHas = GPBGetHasIvarField(context->other, field);
- if (otherHas) {
- GPBSetFloatIvarWithFieldInternal(
- context->result, field, GPBGetFloatIvarWithField(context->other, field),
- context->syntax);
- }
- return YES;
-}
-
-//%PDDM-EXPAND GPB_MERGE_FROM_FUNC(Double)
-// This block of code is generated, do not edit it directly.
-
-static BOOL MergeFromDouble(GPBFieldDescriptor *field, void *voidContext) {
- MergeFromContext *context = (MergeFromContext *)voidContext;
- BOOL otherHas = GPBGetHasIvarField(context->other, field);
- if (otherHas) {
- GPBSetDoubleIvarWithFieldInternal(
- context->result, field, GPBGetDoubleIvarWithField(context->other, field),
- context->syntax);
- }
- return YES;
-}
-
-//%PDDM-EXPAND-END (7 expansions)
-
-static BOOL MergeFromObject(GPBFieldDescriptor *field, void *voidContext) {
- MergeFromContext *context = (MergeFromContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- // In the case of a list, they need to be appended, and there is no
- // _hasIvar to worry about setting.
- id otherArray =
- GPBGetObjectIvarWithFieldNoAutocreate(context->other, field);
- if (otherArray) {
- GPBType fieldDataType = field->description_->type;
- if (GPBTypeIsObject(fieldDataType)) {
- NSMutableArray *resultArray = GetOrCreateArrayIvarWithField(
- context->result, field, context->syntax);
- [resultArray addObjectsFromArray:otherArray];
- } else if (fieldDataType == GPBTypeEnum) {
- GPBEnumArray *resultArray = GetOrCreateArrayIvarWithField(
- context->result, field, context->syntax);
- [resultArray addRawValuesFromArray:otherArray];
- } else {
- // The array type doesn't matter, that all implment
- // -addValuesFromArray:.
- GPBInt32Array *resultArray = GetOrCreateArrayIvarWithField(
- context->result, field, context->syntax);
- [resultArray addValuesFromArray:otherArray];
- }
- }
- return YES;
- }
- if (fieldType == GPBFieldTypeMap) {
- // In the case of a map, they need to be merged, and there is no
- // _hasIvar to worry about setting.
- id otherDict = GPBGetObjectIvarWithFieldNoAutocreate(context->other, field);
- if (otherDict) {
- GPBType keyType = field.mapKeyType;
- GPBType valueType = field->description_->type;
- if (GPBTypeIsObject(keyType) && GPBTypeIsObject(valueType)) {
- NSMutableDictionary *resultDict = GetOrCreateMapIvarWithField(
- context->result, field, context->syntax);
- [resultDict addEntriesFromDictionary:otherDict];
- } else if (valueType == GPBTypeEnum) {
- // The exact type doesn't matter, just need to know it is a
- // GPB*EnumDictionary.
- GPBInt32EnumDictionary *resultDict = GetOrCreateMapIvarWithField(
- context->result, field, context->syntax);
- [resultDict addRawEntriesFromDictionary:otherDict];
- } else {
- // The exact type doesn't matter, they all implement
- // -addEntriesFromDictionary:.
- GPBInt32Int32Dictionary *resultDict = GetOrCreateMapIvarWithField(
- context->result, field, context->syntax);
- [resultDict addEntriesFromDictionary:otherDict];
- }
- }
- return YES;
- }
-
- int32_t hasIndex = GPBFieldHasIndex(field);
- uint32_t fieldNumber = GPBFieldNumber(field);
- BOOL otherHas = GPBGetHasIvar(context->other, hasIndex, fieldNumber);
- if (!otherHas) {
- return YES;
- }
- // GPBGetObjectIvarWithFieldNoAutocreate skips the has check, faster.
- id otherVal = GPBGetObjectIvarWithFieldNoAutocreate(context->other, field);
- if (GPBFieldTypeIsMessage(field)) {
- if (GPBGetHasIvar(context->result, hasIndex, fieldNumber)) {
- GPBMessage *message =
- GPBGetObjectIvarWithFieldNoAutocreate(context->result, field);
- [message mergeFrom:otherVal];
- } else {
- GPBMessage *message = [otherVal copy];
- GPBSetRetainedObjectIvarWithFieldInternal(context->result, field, message,
- context->syntax);
- }
- } else {
- GPBSetObjectIvarWithFieldInternal(context->result, field, otherVal,
- context->syntax);
- }
- return YES;
-}
+#pragma mark - MergeFrom Support
- (void)mergeFrom:(GPBMessage *)other {
Class selfClass = [self class];
@@ -3076,21 +2370,140 @@ static BOOL MergeFromObject(GPBFieldDescriptor *field, void *voidContext) {
format:@"Classes must match %@ != %@", selfClass, otherClass];
}
- GPBApplyFunctions funcs = GPBAPPLY_FUNCTIONS_INIT(MergeFrom);
- GPBFileSyntax syntax = [self descriptor].file.syntax;
- MergeFromContext context = {other, self, syntax};
- GPBApplyFunctionsToMessageFields(&funcs, self, &context);
-
- // We assume someting got done, and become visible.
+ // We assume something will be done and become visible.
GPBBecomeVisibleToAutocreator(self);
+ GPBDescriptor *descriptor = [[self class] descriptor];
+ GPBFileSyntax syntax = descriptor.file.syntax;
+
+ for (GPBFieldDescriptor *field in descriptor->fields_) {
+ GPBFieldType fieldType = field.fieldType;
+ if (fieldType == GPBFieldTypeSingle) {
+ int32_t hasIndex = GPBFieldHasIndex(field);
+ uint32_t fieldNumber = GPBFieldNumber(field);
+ if (!GPBGetHasIvar(other, hasIndex, fieldNumber)) {
+ // Other doesn't have the field set, on to the next.
+ continue;
+ }
+ GPBDataType fieldDataType = GPBGetFieldDataType(field);
+ switch (fieldDataType) {
+ case GPBDataTypeBool:
+ GPBSetBoolIvarWithFieldInternal(
+ self, field, GPBGetMessageBoolField(other, field), syntax);
+ break;
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeEnum:
+ case GPBDataTypeInt32:
+ case GPBDataTypeSInt32:
+ GPBSetInt32IvarWithFieldInternal(
+ self, field, GPBGetMessageInt32Field(other, field), syntax);
+ break;
+ case GPBDataTypeFixed32:
+ case GPBDataTypeUInt32:
+ GPBSetUInt32IvarWithFieldInternal(
+ self, field, GPBGetMessageUInt32Field(other, field), syntax);
+ break;
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeInt64:
+ case GPBDataTypeSInt64:
+ GPBSetInt64IvarWithFieldInternal(
+ self, field, GPBGetMessageInt64Field(other, field), syntax);
+ break;
+ case GPBDataTypeFixed64:
+ case GPBDataTypeUInt64:
+ GPBSetUInt64IvarWithFieldInternal(
+ self, field, GPBGetMessageUInt64Field(other, field), syntax);
+ break;
+ case GPBDataTypeFloat:
+ GPBSetFloatIvarWithFieldInternal(
+ self, field, GPBGetMessageFloatField(other, field), syntax);
+ break;
+ case GPBDataTypeDouble:
+ GPBSetDoubleIvarWithFieldInternal(
+ self, field, GPBGetMessageDoubleField(other, field), syntax);
+ break;
+ case GPBDataTypeBytes:
+ case GPBDataTypeString: {
+ id otherVal = GPBGetObjectIvarWithFieldNoAutocreate(other, field);
+ GPBSetObjectIvarWithFieldInternal(self, field, otherVal, syntax);
+ break;
+ }
+ case GPBDataTypeMessage:
+ case GPBDataTypeGroup: {
+ id otherVal = GPBGetObjectIvarWithFieldNoAutocreate(other, field);
+ if (GPBGetHasIvar(self, hasIndex, fieldNumber)) {
+ GPBMessage *message =
+ GPBGetObjectIvarWithFieldNoAutocreate(self, field);
+ [message mergeFrom:otherVal];
+ } else {
+ GPBMessage *message = [otherVal copy];
+ GPBSetRetainedObjectIvarWithFieldInternal(self, field, message,
+ syntax);
+ }
+ break;
+ }
+ } // switch()
+ } else if (fieldType == GPBFieldTypeRepeated) {
+ // In the case of a list, they need to be appended, and there is no
+ // _hasIvar to worry about setting.
+ id otherArray =
+ GPBGetObjectIvarWithFieldNoAutocreate(other, field);
+ if (otherArray) {
+ GPBDataType fieldDataType = field->description_->dataType;
+ if (GPBDataTypeIsObject(fieldDataType)) {
+ NSMutableArray *resultArray =
+ GetOrCreateArrayIvarWithField(self, field, syntax);
+ [resultArray addObjectsFromArray:otherArray];
+ } else if (fieldDataType == GPBDataTypeEnum) {
+ GPBEnumArray *resultArray =
+ GetOrCreateArrayIvarWithField(self, field, syntax);
+ [resultArray addRawValuesFromArray:otherArray];
+ } else {
+ // The array type doesn't matter, that all implment
+ // -addValuesFromArray:.
+ GPBInt32Array *resultArray =
+ GetOrCreateArrayIvarWithField(self, field, syntax);
+ [resultArray addValuesFromArray:otherArray];
+ }
+ }
+ } else { // fieldType = GPBFieldTypeMap
+ // In the case of a map, they need to be merged, and there is no
+ // _hasIvar to worry about setting.
+ id otherDict = GPBGetObjectIvarWithFieldNoAutocreate(other, field);
+ if (otherDict) {
+ GPBDataType keyDataType = field.mapKeyDataType;
+ GPBDataType valueDataType = field->description_->dataType;
+ if (GPBDataTypeIsObject(keyDataType) &&
+ GPBDataTypeIsObject(valueDataType)) {
+ NSMutableDictionary *resultDict =
+ GetOrCreateMapIvarWithField(self, field, syntax);
+ [resultDict addEntriesFromDictionary:otherDict];
+ } else if (valueDataType == GPBDataTypeEnum) {
+ // The exact type doesn't matter, just need to know it is a
+ // GPB*EnumDictionary.
+ GPBInt32EnumDictionary *resultDict =
+ GetOrCreateMapIvarWithField(self, field, syntax);
+ [resultDict addRawEntriesFromDictionary:otherDict];
+ } else {
+ // The exact type doesn't matter, they all implement
+ // -addEntriesFromDictionary:.
+ GPBInt32Int32Dictionary *resultDict =
+ GetOrCreateMapIvarWithField(self, field, syntax);
+ [resultDict addEntriesFromDictionary:otherDict];
+ }
+ }
+ } // if (fieldType)..else if...else
+ } // for(fields)
+
// Unknown fields.
if (!unknownFields_) {
- [self setUnknownFields:context.other.unknownFields];
+ [self setUnknownFields:other.unknownFields];
} else {
- [unknownFields_ mergeUnknownFields:context.other.unknownFields];
+ [unknownFields_ mergeUnknownFields:other.unknownFields];
}
+ // Extensions
+
if (other->extensionMap_.count == 0) {
return;
}
@@ -3099,17 +2512,16 @@ static BOOL MergeFromObject(GPBFieldDescriptor *field, void *voidContext) {
extensionMap_ =
CloneExtensionMap(other->extensionMap_, NSZoneFromPointer(self));
} else {
- for (GPBExtensionField *thisField in other->extensionMap_) {
- id otherValue = [other->extensionMap_ objectForKey:thisField];
- id value = [extensionMap_ objectForKey:thisField];
- GPBExtensionDescriptor *thisFieldDescriptor = thisField.descriptor;
- BOOL isMessageExtension = GPBExtensionIsMessage(thisFieldDescriptor);
+ for (GPBExtensionDescriptor *extension in other->extensionMap_) {
+ id otherValue = [other->extensionMap_ objectForKey:extension];
+ id value = [extensionMap_ objectForKey:extension];
+ BOOL isMessageExtension = GPBExtensionIsMessage(extension);
- if ([thisField isRepeated]) {
+ if (extension.repeated) {
NSMutableArray *list = value;
if (list == nil) {
list = [[NSMutableArray alloc] init];
- [extensionMap_ setObject:list forKey:thisField];
+ [extensionMap_ setObject:list forKey:extension];
[list release];
}
if (isMessageExtension) {
@@ -3127,20 +2539,20 @@ static BOOL MergeFromObject(GPBFieldDescriptor *field, void *voidContext) {
[(GPBMessage *)value mergeFrom:(GPBMessage *)otherValue];
} else {
GPBMessage *copiedValue = [otherValue copy];
- [extensionMap_ setObject:copiedValue forKey:thisField];
+ [extensionMap_ setObject:copiedValue forKey:extension];
[copiedValue release];
}
} else {
- [extensionMap_ setObject:otherValue forKey:thisField];
+ [extensionMap_ setObject:otherValue forKey:extension];
}
}
- if (isMessageExtension && !thisFieldDescriptor.isRepeated) {
+ if (isMessageExtension && !extension.isRepeated) {
GPBMessage *autocreatedValue =
- [[autocreatedExtensionMap_ objectForKey:thisField] retain];
+ [[autocreatedExtensionMap_ objectForKey:extension] retain];
// Must remove from the map before calling GPBClearMessageAutocreator()
// so that GPBClearMessageAutocreator() knows its safe to clear.
- [autocreatedExtensionMap_ removeObjectForKey:thisField];
+ [autocreatedExtensionMap_ removeObjectForKey:extension];
GPBClearMessageAutocreator(autocreatedValue);
[autocreatedValue release];
}
@@ -3148,259 +2560,7 @@ static BOOL MergeFromObject(GPBFieldDescriptor *field, void *voidContext) {
}
}
-#pragma mark - IsEqual Support
-
-typedef struct IsEqualContext {
- GPBMessage *other;
- GPBMessage *self;
- BOOL outIsEqual;
-} IsEqualContext;
-
-// If both self and other "has" a value then compare.
-//%PDDM-DEFINE IS_EQUAL_FUNC(NAME, TYPE)
-//%static BOOL IsEqual##NAME(GPBFieldDescriptor *field, void *voidContext) {
-//% IsEqualContext *context = (IsEqualContext *)voidContext;
-//% int32_t hasIndex = GPBFieldHasIndex(field);
-//% uint32_t fieldNum = GPBFieldNumber(field);
-//% BOOL selfHas = GPBGetHasIvar(context->self, hasIndex, fieldNum);
-//% BOOL otherHas = GPBGetHasIvar(context->other, hasIndex, fieldNum);
-//% if (selfHas != otherHas) {
-//% context->outIsEqual = NO;
-//% return NO;
-//% }
-//% if (!selfHas) {
-//% return YES;
-//% }
-//% TYPE selfVal = GPBGet##NAME##IvarWithField(context->self, field);
-//% TYPE otherVal = GPBGet##NAME##IvarWithField(context->other, field);
-//% if (selfVal != otherVal) {
-//% context->outIsEqual = NO;
-//% return NO;
-//% }
-//% return YES;
-//%}
-//%
-//%PDDM-EXPAND IS_EQUAL_FUNC(Bool, BOOL)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IsEqualBool(GPBFieldDescriptor *field, void *voidContext) {
- IsEqualContext *context = (IsEqualContext *)voidContext;
- int32_t hasIndex = GPBFieldHasIndex(field);
- uint32_t fieldNum = GPBFieldNumber(field);
- BOOL selfHas = GPBGetHasIvar(context->self, hasIndex, fieldNum);
- BOOL otherHas = GPBGetHasIvar(context->other, hasIndex, fieldNum);
- if (selfHas != otherHas) {
- context->outIsEqual = NO;
- return NO;
- }
- if (!selfHas) {
- return YES;
- }
- BOOL selfVal = GPBGetBoolIvarWithField(context->self, field);
- BOOL otherVal = GPBGetBoolIvarWithField(context->other, field);
- if (selfVal != otherVal) {
- context->outIsEqual = NO;
- return NO;
- }
- return YES;
-}
-
-//%PDDM-EXPAND IS_EQUAL_FUNC(Int32, int32_t)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IsEqualInt32(GPBFieldDescriptor *field, void *voidContext) {
- IsEqualContext *context = (IsEqualContext *)voidContext;
- int32_t hasIndex = GPBFieldHasIndex(field);
- uint32_t fieldNum = GPBFieldNumber(field);
- BOOL selfHas = GPBGetHasIvar(context->self, hasIndex, fieldNum);
- BOOL otherHas = GPBGetHasIvar(context->other, hasIndex, fieldNum);
- if (selfHas != otherHas) {
- context->outIsEqual = NO;
- return NO;
- }
- if (!selfHas) {
- return YES;
- }
- int32_t selfVal = GPBGetInt32IvarWithField(context->self, field);
- int32_t otherVal = GPBGetInt32IvarWithField(context->other, field);
- if (selfVal != otherVal) {
- context->outIsEqual = NO;
- return NO;
- }
- return YES;
-}
-
-//%PDDM-EXPAND IS_EQUAL_FUNC(UInt32, uint32_t)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IsEqualUInt32(GPBFieldDescriptor *field, void *voidContext) {
- IsEqualContext *context = (IsEqualContext *)voidContext;
- int32_t hasIndex = GPBFieldHasIndex(field);
- uint32_t fieldNum = GPBFieldNumber(field);
- BOOL selfHas = GPBGetHasIvar(context->self, hasIndex, fieldNum);
- BOOL otherHas = GPBGetHasIvar(context->other, hasIndex, fieldNum);
- if (selfHas != otherHas) {
- context->outIsEqual = NO;
- return NO;
- }
- if (!selfHas) {
- return YES;
- }
- uint32_t selfVal = GPBGetUInt32IvarWithField(context->self, field);
- uint32_t otherVal = GPBGetUInt32IvarWithField(context->other, field);
- if (selfVal != otherVal) {
- context->outIsEqual = NO;
- return NO;
- }
- return YES;
-}
-
-//%PDDM-EXPAND IS_EQUAL_FUNC(Int64, int64_t)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IsEqualInt64(GPBFieldDescriptor *field, void *voidContext) {
- IsEqualContext *context = (IsEqualContext *)voidContext;
- int32_t hasIndex = GPBFieldHasIndex(field);
- uint32_t fieldNum = GPBFieldNumber(field);
- BOOL selfHas = GPBGetHasIvar(context->self, hasIndex, fieldNum);
- BOOL otherHas = GPBGetHasIvar(context->other, hasIndex, fieldNum);
- if (selfHas != otherHas) {
- context->outIsEqual = NO;
- return NO;
- }
- if (!selfHas) {
- return YES;
- }
- int64_t selfVal = GPBGetInt64IvarWithField(context->self, field);
- int64_t otherVal = GPBGetInt64IvarWithField(context->other, field);
- if (selfVal != otherVal) {
- context->outIsEqual = NO;
- return NO;
- }
- return YES;
-}
-
-//%PDDM-EXPAND IS_EQUAL_FUNC(UInt64, uint64_t)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IsEqualUInt64(GPBFieldDescriptor *field, void *voidContext) {
- IsEqualContext *context = (IsEqualContext *)voidContext;
- int32_t hasIndex = GPBFieldHasIndex(field);
- uint32_t fieldNum = GPBFieldNumber(field);
- BOOL selfHas = GPBGetHasIvar(context->self, hasIndex, fieldNum);
- BOOL otherHas = GPBGetHasIvar(context->other, hasIndex, fieldNum);
- if (selfHas != otherHas) {
- context->outIsEqual = NO;
- return NO;
- }
- if (!selfHas) {
- return YES;
- }
- uint64_t selfVal = GPBGetUInt64IvarWithField(context->self, field);
- uint64_t otherVal = GPBGetUInt64IvarWithField(context->other, field);
- if (selfVal != otherVal) {
- context->outIsEqual = NO;
- return NO;
- }
- return YES;
-}
-
-//%PDDM-EXPAND IS_EQUAL_FUNC(Float, float)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IsEqualFloat(GPBFieldDescriptor *field, void *voidContext) {
- IsEqualContext *context = (IsEqualContext *)voidContext;
- int32_t hasIndex = GPBFieldHasIndex(field);
- uint32_t fieldNum = GPBFieldNumber(field);
- BOOL selfHas = GPBGetHasIvar(context->self, hasIndex, fieldNum);
- BOOL otherHas = GPBGetHasIvar(context->other, hasIndex, fieldNum);
- if (selfHas != otherHas) {
- context->outIsEqual = NO;
- return NO;
- }
- if (!selfHas) {
- return YES;
- }
- float selfVal = GPBGetFloatIvarWithField(context->self, field);
- float otherVal = GPBGetFloatIvarWithField(context->other, field);
- if (selfVal != otherVal) {
- context->outIsEqual = NO;
- return NO;
- }
- return YES;
-}
-
-//%PDDM-EXPAND IS_EQUAL_FUNC(Double, double)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IsEqualDouble(GPBFieldDescriptor *field, void *voidContext) {
- IsEqualContext *context = (IsEqualContext *)voidContext;
- int32_t hasIndex = GPBFieldHasIndex(field);
- uint32_t fieldNum = GPBFieldNumber(field);
- BOOL selfHas = GPBGetHasIvar(context->self, hasIndex, fieldNum);
- BOOL otherHas = GPBGetHasIvar(context->other, hasIndex, fieldNum);
- if (selfHas != otherHas) {
- context->outIsEqual = NO;
- return NO;
- }
- if (!selfHas) {
- return YES;
- }
- double selfVal = GPBGetDoubleIvarWithField(context->self, field);
- double otherVal = GPBGetDoubleIvarWithField(context->other, field);
- if (selfVal != otherVal) {
- context->outIsEqual = NO;
- return NO;
- }
- return YES;
-}
-
-//%PDDM-EXPAND-END (7 expansions)
-
-static BOOL IsEqualObject(GPBFieldDescriptor *field, void *voidContext) {
- IsEqualContext *context = (IsEqualContext *)voidContext;
- if (GPBFieldIsMapOrArray(field)) {
- // In the case of a list/map, there is no _hasIvar to worry about checking.
- // NOTE: These are NSArray/GPB*Array/NSDictionary/GPB*Dictionary, but the
- // type doesn't really matter as the object just has to support
- // -count/-isEqual:.
- NSArray *resultMapOrArray =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSArray *otherMapOrArray =
- GPBGetObjectIvarWithFieldNoAutocreate(context->other, field);
- context->outIsEqual =
- (resultMapOrArray.count == 0 && otherMapOrArray.count == 0) ||
- [resultMapOrArray isEqual:otherMapOrArray];
- return context->outIsEqual;
- }
- int32_t hasIndex = GPBFieldHasIndex(field);
- uint32_t fieldNum = GPBFieldNumber(field);
- BOOL selfHas = GPBGetHasIvar(context->self, hasIndex, fieldNum);
- BOOL otherHas = GPBGetHasIvar(context->other, hasIndex, fieldNum);
- if (selfHas != otherHas) {
- context->outIsEqual = NO;
- return NO;
- }
- if (!selfHas) {
- return YES;
- }
- // GPBGetObjectIvarWithFieldNoAutocreate skips the has check, faster.
- NSObject *selfVal =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSObject *otherVal =
- GPBGetObjectIvarWithFieldNoAutocreate(context->other, field);
-
- // This covers case where selfVal is set to nil, as well as shortcuts the call
- // to isEqual: in common cases.
- if (selfVal == otherVal) {
- return YES;
- }
- if (![selfVal isEqual:otherVal]) {
- context->outIsEqual = NO;
- return NO;
- }
- return YES;
-}
+#pragma mark - isEqual: & hash Support
- (BOOL)isEqual:(GPBMessage *)other {
if (other == self) {
@@ -3410,12 +2570,97 @@ static BOOL IsEqualObject(GPBFieldDescriptor *field, void *voidContext) {
![self isKindOfClass:[other class]]) {
return NO;
}
- GPBApplyFunctions funcs = GPBAPPLY_FUNCTIONS_INIT(IsEqual);
- IsEqualContext context = {other, self, YES};
- GPBApplyFunctionsToMessageFields(&funcs, self, &context);
- if (!context.outIsEqual) {
- return NO;
- }
+
+ GPBDescriptor *descriptor = [[self class] descriptor];
+ uint8_t *selfStorage = (uint8_t *)messageStorage_;
+ uint8_t *otherStorage = (uint8_t *)other->messageStorage_;
+
+ for (GPBFieldDescriptor *field in descriptor->fields_) {
+ if (GPBFieldIsMapOrArray(field)) {
+ // In the case of a list or map, there is no _hasIvar to worry about.
+ // NOTE: These are NSArray/GPB*Array or NSDictionary/GPB*Dictionary, but
+ // the type doesn't really matter as the objects all support -count and
+ // -isEqual:.
+ NSArray *resultMapOrArray =
+ GPBGetObjectIvarWithFieldNoAutocreate(self, field);
+ NSArray *otherMapOrArray =
+ GPBGetObjectIvarWithFieldNoAutocreate(other, field);
+ // nil and empty are equal
+ if (resultMapOrArray.count != 0 || otherMapOrArray.count != 0) {
+ if (![resultMapOrArray isEqual:otherMapOrArray]) {
+ return NO;
+ }
+ }
+ } else { // Single field
+ int32_t hasIndex = GPBFieldHasIndex(field);
+ uint32_t fieldNum = GPBFieldNumber(field);
+ BOOL selfHas = GPBGetHasIvar(self, hasIndex, fieldNum);
+ BOOL otherHas = GPBGetHasIvar(other, hasIndex, fieldNum);
+ if (selfHas != otherHas) {
+ return NO; // Differing has values, not equal.
+ }
+ if (!selfHas) {
+ // Same has values, was no, nothing else to check for this field.
+ continue;
+ }
+ // Now compare the values.
+ GPBDataType fieldDataType = GPBGetFieldDataType(field);
+ size_t fieldOffset = field->description_->offset;
+ switch (fieldDataType) {
+ case GPBDataTypeBool: {
+ BOOL *selfValPtr = (BOOL *)&selfStorage[fieldOffset];
+ BOOL *otherValPtr = (BOOL *)&otherStorage[fieldOffset];
+ if (*selfValPtr != *otherValPtr) {
+ return NO;
+ }
+ break;
+ }
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeInt32:
+ case GPBDataTypeSInt32:
+ case GPBDataTypeEnum:
+ case GPBDataTypeFixed32:
+ case GPBDataTypeUInt32:
+ case GPBDataTypeFloat: {
+ _GPBCompileAssert(sizeof(float) == sizeof(uint32_t), float_not_32_bits);
+ // These are all 32bit, signed/unsigned doesn't matter for equality.
+ uint32_t *selfValPtr = (uint32_t *)&selfStorage[fieldOffset];
+ uint32_t *otherValPtr = (uint32_t *)&otherStorage[fieldOffset];
+ if (*selfValPtr != *otherValPtr) {
+ return NO;
+ }
+ break;
+ }
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeInt64:
+ case GPBDataTypeSInt64:
+ case GPBDataTypeFixed64:
+ case GPBDataTypeUInt64:
+ case GPBDataTypeDouble: {
+ _GPBCompileAssert(sizeof(double) == sizeof(uint64_t), double_not_64_bits);
+ // These are all 64bit, signed/unsigned doesn't matter for equality.
+ uint64_t *selfValPtr = (uint64_t *)&selfStorage[fieldOffset];
+ uint64_t *otherValPtr = (uint64_t *)&otherStorage[fieldOffset];
+ if (*selfValPtr != *otherValPtr) {
+ return NO;
+ }
+ break;
+ }
+ case GPBDataTypeBytes:
+ case GPBDataTypeString:
+ case GPBDataTypeMessage:
+ case GPBDataTypeGroup: {
+ // Type doesn't matter here, they all implement -isEqual:.
+ id *selfValPtr = (id *)&selfStorage[fieldOffset];
+ id *otherValPtr = (id *)&otherStorage[fieldOffset];
+ if (![*selfValPtr isEqual:*otherValPtr]) {
+ return NO;
+ }
+ break;
+ }
+ } // switch()
+ } // if(mapOrArray)...else
+ } // for(fields)
// nil and empty are equal
if (extensionMap_.count != 0 || other->extensionMap_.count != 0) {
@@ -3425,13 +2670,14 @@ static BOOL IsEqualObject(GPBFieldDescriptor *field, void *voidContext) {
}
// nil and empty are equal
- GPBUnknownFieldSet *otherUnknowns = other.unknownFields;
+ GPBUnknownFieldSet *otherUnknowns = other->unknownFields_;
if ([unknownFields_ countOfFields] != 0 ||
[otherUnknowns countOfFields] != 0) {
if (![unknownFields_ isEqual:otherUnknowns]) {
return NO;
}
}
+
return YES;
}
@@ -3449,22 +2695,88 @@ static BOOL IsEqualObject(GPBFieldDescriptor *field, void *voidContext) {
- (NSUInteger)hash {
GPBDescriptor *descriptor = [[self class] descriptor];
const NSUInteger prime = 19;
+ uint8_t *storage = (uint8_t *)messageStorage_;
- // Start with the descriptor and then mix it with the field numbers that
- // are set. Hopefully that will give a spread based on classes and what
- // fields are set.
+ // Start with the descriptor and then mix it with some instance info.
+ // Hopefully that will give a spread based on classes and what fields are set.
NSUInteger result = (NSUInteger)descriptor;
+
for (GPBFieldDescriptor *field in descriptor->fields_) {
if (GPBFieldIsMapOrArray(field)) {
// Exact type doesn't matter, just check if there are any elements.
NSArray *mapOrArray = GPBGetObjectIvarWithFieldNoAutocreate(self, field);
- if (mapOrArray.count) {
+ NSUInteger count = mapOrArray.count;
+ if (count) {
+ // NSArray/NSDictionary use count, use the field number and the count.
result = prime * result + GPBFieldNumber(field);
+ result = prime * result + count;
}
} else if (GPBGetHasIvarField(self, field)) {
- result = prime * result + GPBFieldNumber(field);
+ // Just using the field number seemed simple/fast, but then a small
+ // message class where all the same fields are always set (to different
+ // things would end up all with the same hash, so pull in some data).
+ GPBDataType fieldDataType = GPBGetFieldDataType(field);
+ size_t fieldOffset = field->description_->offset;
+ switch (fieldDataType) {
+ case GPBDataTypeBool: {
+ BOOL *valPtr = (BOOL *)&storage[fieldOffset];
+ result = prime * result + *valPtr;
+ break;
+ }
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeInt32:
+ case GPBDataTypeSInt32:
+ case GPBDataTypeEnum:
+ case GPBDataTypeFixed32:
+ case GPBDataTypeUInt32:
+ case GPBDataTypeFloat: {
+ _GPBCompileAssert(sizeof(float) == sizeof(uint32_t), float_not_32_bits);
+ // These are all 32bit, just mix it in.
+ uint32_t *valPtr = (uint32_t *)&storage[fieldOffset];
+ result = prime * result + *valPtr;
+ break;
+ }
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeInt64:
+ case GPBDataTypeSInt64:
+ case GPBDataTypeFixed64:
+ case GPBDataTypeUInt64:
+ case GPBDataTypeDouble: {
+ _GPBCompileAssert(sizeof(double) == sizeof(uint64_t), double_not_64_bits);
+ // These are all 64bit, just mix what fits into an NSUInteger in.
+ uint64_t *valPtr = (uint64_t *)&storage[fieldOffset];
+ result = prime * result + (NSUInteger)(*valPtr);
+ break;
+ }
+ case GPBDataTypeBytes:
+ case GPBDataTypeString: {
+ // Type doesn't matter here, they both implement -hash:.
+ id *valPtr = (id *)&storage[fieldOffset];
+ result = prime * result + [*valPtr hash];
+ break;
+ }
+
+ case GPBDataTypeMessage:
+ case GPBDataTypeGroup: {
+ GPBMessage **valPtr = (GPBMessage **)&storage[fieldOffset];
+ // Could call -hash on the sub message, but that could recurse pretty
+ // deep; follow the lead of NSArray/NSDictionary and don't really
+ // recurse for hash, instead use the field number and the descriptor
+ // of the sub message. Yes, this could suck for a bunch of messages
+ // where they all only differ in the sub messages, but if you are
+ // using a message with sub messages for something that needs -hash,
+ // odds are you are also copying them as keys, and that deep copy
+ // will also suck.
+ result = prime * result + GPBFieldNumber(field);
+ result = prime * result + (NSUInteger)[[*valPtr class] descriptor];
+ break;
+ }
+ } // switch()
}
}
+
+ // Unknowns and extensions are not included.
+
return result;
}
@@ -3487,1325 +2799,245 @@ static BOOL IsEqualObject(GPBFieldDescriptor *field, void *voidContext) {
#endif // DEBUG
-#pragma mark - SerializedSize Support
-
-// Serialized size is only calculated once, and then is stored into
-// memoizedSerializedSize.
-
-typedef struct SerializedSizeContext {
- GPBMessage *self;
- size_t outSize;
-} SerializedSizeContext;
-
-//%PDDM-DEFINE SERIALIZED_SIZE_POD_FUNC(NAME, TYPE, REAL_TYPE)
-//%SERIALIZED_SIZE_POD_FUNC_FULL(NAME, TYPE, REAL_TYPE, REAL_TYPE, )
-//%PDDM-DEFINE SERIALIZED_SIZE_POD_FUNC_FULL(NAME, TYPE, REAL_TYPE, ARRAY_TYPE, ARRAY_ACCESSOR_NAME)
-//%static BOOL DynamicSerializedSize##NAME(GPBFieldDescriptor *field,
-//% NAME$S void *voidContext) {
-//% SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
-//% GPBFieldType fieldType = field.fieldType;
-//% if (fieldType == GPBFieldTypeRepeated) {
-//% GPB##ARRAY_TYPE##Array *array =
-//% GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
-//% NSUInteger count = array.count;
-//% if (count == 0) return YES;
-//% __block size_t dataSize = 0;
-//% [array enumerate##ARRAY_ACCESSOR_NAME##ValuesWithBlock:^(TYPE value, NSUInteger idx, BOOL *stop) {
-//% #pragma unused(idx, stop)
-//% dataSize += GPBCompute##NAME##SizeNoTag(value);
-//% }];
-//% context->outSize += dataSize;
-//% size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
-//% if (field.isPackable) {
-//% context->outSize += tagSize;
-//% context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
-//% } else {
-//% context->outSize += count * tagSize;
-//% }
-//% } else if (fieldType == GPBFieldTypeSingle) {
-//% BOOL selfHas = GPBGetHasIvarField(context->self, field);
-//% if (selfHas) {
-//% TYPE selfVal = GPBGet##REAL_TYPE##IvarWithField(context->self, field);
-//% context->outSize += GPBCompute##NAME##Size(GPBFieldNumber(field), selfVal);
-//% }
-//% } else { // fieldType == GPBFieldTypeMap
-//% // Type will be GPB*##REAL_TYPE##Dictionary, exact type doesn't matter.
-//% GPBInt32##REAL_TYPE##Dictionary *map =
-//% GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
-//% context->outSize += [map computeSerializedSizeAsField:field];
-//% }
-//% return YES;
-//%}
-//%
-//%PDDM-DEFINE SERIALIZED_SIZE_OBJECT_FUNC(NAME)
-//%static BOOL DynamicSerializedSize##NAME(GPBFieldDescriptor *field,
-//% NAME$S void *voidContext) {
-//% SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
-//% GPBFieldType fieldType = field.fieldType;
-//% if (fieldType == GPBFieldTypeRepeated) {
-//% NSArray *array =
-//% GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
-//% for (id value in array) {
-//% context->outSize += GPBCompute##NAME##SizeNoTag(value);
-//% }
-//% size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field),
-//% GPBGetFieldType(field));
-//% context->outSize += array.count * tagSize;
-//% } else if (fieldType == GPBFieldTypeSingle) {
-//% BOOL selfHas = GPBGetHasIvarField(context->self, field);
-//% if (selfHas) {
-//% // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check
-//% // again.
-//% id selfVal = GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
-//% context->outSize += GPBCompute##NAME##Size(GPBFieldNumber(field), selfVal);
-//% }
-//% } else { // fieldType == GPBFieldTypeMap
-//% GPBType mapKeyType = field.mapKeyType;
-//% if (mapKeyType == GPBTypeString) {
-//% // If key type was string, then the map is an NSDictionary.
-//% NSDictionary *map =
-//% GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
-//% context->outSize += GPBDictionaryComputeSizeInternalHelper(map, field);
-//% } else {
-//% // Type will be GPB*##NAME##Dictionary, exact type doesn't matter.
-//% GPBInt32ObjectDictionary *map =
-//% GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
-//% context->outSize += [map computeSerializedSizeAsField:field];
-//% }
-//% }
-//% return YES;
-//%}
-//%
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC(Bool, BOOL, Bool)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeBool(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBBoolArray *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateValuesWithBlock:^(BOOL value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeBoolSizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- BOOL selfVal = GPBGetBoolIvarWithField(context->self, field);
- context->outSize += GPBComputeBoolSize(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*BoolDictionary, exact type doesn't matter.
- GPBInt32BoolDictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC(Int32, int32_t, Int32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeInt32(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBInt32Array *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeInt32SizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- int32_t selfVal = GPBGetInt32IvarWithField(context->self, field);
- context->outSize += GPBComputeInt32Size(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*Int32Dictionary, exact type doesn't matter.
- GPBInt32Int32Dictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC(SInt32, int32_t, Int32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeSInt32(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBInt32Array *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeSInt32SizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- int32_t selfVal = GPBGetInt32IvarWithField(context->self, field);
- context->outSize += GPBComputeSInt32Size(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*Int32Dictionary, exact type doesn't matter.
- GPBInt32Int32Dictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC(SFixed32, int32_t, Int32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeSFixed32(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBInt32Array *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeSFixed32SizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- int32_t selfVal = GPBGetInt32IvarWithField(context->self, field);
- context->outSize += GPBComputeSFixed32Size(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*Int32Dictionary, exact type doesn't matter.
- GPBInt32Int32Dictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC_FULL(Enum, int32_t, Int32, Enum, Raw)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeEnum(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBEnumArray *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateRawValuesWithBlock:^(int32_t value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeEnumSizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- int32_t selfVal = GPBGetInt32IvarWithField(context->self, field);
- context->outSize += GPBComputeEnumSize(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*Int32Dictionary, exact type doesn't matter.
- GPBInt32Int32Dictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC(UInt32, uint32_t, UInt32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeUInt32(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBUInt32Array *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeUInt32SizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- uint32_t selfVal = GPBGetUInt32IvarWithField(context->self, field);
- context->outSize += GPBComputeUInt32Size(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*UInt32Dictionary, exact type doesn't matter.
- GPBInt32UInt32Dictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC(Fixed32, uint32_t, UInt32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeFixed32(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBUInt32Array *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateValuesWithBlock:^(uint32_t value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeFixed32SizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- uint32_t selfVal = GPBGetUInt32IvarWithField(context->self, field);
- context->outSize += GPBComputeFixed32Size(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*UInt32Dictionary, exact type doesn't matter.
- GPBInt32UInt32Dictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC(Int64, int64_t, Int64)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeInt64(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBInt64Array *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeInt64SizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- int64_t selfVal = GPBGetInt64IvarWithField(context->self, field);
- context->outSize += GPBComputeInt64Size(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*Int64Dictionary, exact type doesn't matter.
- GPBInt32Int64Dictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC(SFixed64, int64_t, Int64)
-// This block of code is generated, do not edit it directly.
+#pragma mark - SerializedSize
-static BOOL DynamicSerializedSizeSFixed64(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBInt64Array *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeSFixed64SizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- int64_t selfVal = GPBGetInt64IvarWithField(context->self, field);
- context->outSize += GPBComputeSFixed64Size(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*Int64Dictionary, exact type doesn't matter.
- GPBInt32Int64Dictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC(SInt64, int64_t, Int64)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeSInt64(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBInt64Array *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateValuesWithBlock:^(int64_t value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeSInt64SizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- int64_t selfVal = GPBGetInt64IvarWithField(context->self, field);
- context->outSize += GPBComputeSInt64Size(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*Int64Dictionary, exact type doesn't matter.
- GPBInt32Int64Dictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC(UInt64, uint64_t, UInt64)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeUInt64(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBUInt64Array *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeUInt64SizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- uint64_t selfVal = GPBGetUInt64IvarWithField(context->self, field);
- context->outSize += GPBComputeUInt64Size(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*UInt64Dictionary, exact type doesn't matter.
- GPBInt32UInt64Dictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC(Fixed64, uint64_t, UInt64)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeFixed64(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBUInt64Array *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateValuesWithBlock:^(uint64_t value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeFixed64SizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- uint64_t selfVal = GPBGetUInt64IvarWithField(context->self, field);
- context->outSize += GPBComputeFixed64Size(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*UInt64Dictionary, exact type doesn't matter.
- GPBInt32UInt64Dictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC(Float, float, Float)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeFloat(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBFloatArray *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateValuesWithBlock:^(float value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeFloatSizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- float selfVal = GPBGetFloatIvarWithField(context->self, field);
- context->outSize += GPBComputeFloatSize(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*FloatDictionary, exact type doesn't matter.
- GPBInt32FloatDictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_POD_FUNC(Double, double, Double)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeDouble(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- GPBDoubleArray *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- NSUInteger count = array.count;
- if (count == 0) return YES;
- __block size_t dataSize = 0;
- [array enumerateValuesWithBlock:^(double value, NSUInteger idx, BOOL *stop) {
- #pragma unused(idx, stop)
- dataSize += GPBComputeDoubleSizeNoTag(value);
- }];
- context->outSize += dataSize;
- size_t tagSize = GPBComputeTagSize(GPBFieldNumber(field));
- if (field.isPackable) {
- context->outSize += tagSize;
- context->outSize += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
- } else {
- context->outSize += count * tagSize;
- }
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- double selfVal = GPBGetDoubleIvarWithField(context->self, field);
- context->outSize += GPBComputeDoubleSize(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- // Type will be GPB*DoubleDictionary, exact type doesn't matter.
- GPBInt32DoubleDictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_OBJECT_FUNC(String)
-// This block of code is generated, do not edit it directly.
-
-static BOOL DynamicSerializedSizeString(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- NSArray *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- for (id value in array) {
- context->outSize += GPBComputeStringSizeNoTag(value);
- }
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field),
- GPBGetFieldType(field));
- context->outSize += array.count * tagSize;
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check
- // again.
- id selfVal = GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += GPBComputeStringSize(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- GPBType mapKeyType = field.mapKeyType;
- if (mapKeyType == GPBTypeString) {
- // If key type was string, then the map is an NSDictionary.
- NSDictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += GPBDictionaryComputeSizeInternalHelper(map, field);
- } else {
- // Type will be GPB*StringDictionary, exact type doesn't matter.
- GPBInt32ObjectDictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- }
- return YES;
-}
-
-//%PDDM-EXPAND SERIALIZED_SIZE_OBJECT_FUNC(Data)
-// This block of code is generated, do not edit it directly.
+- (size_t)serializedSize {
+ GPBDescriptor *descriptor = [[self class] descriptor];
+ size_t result = 0;
-static BOOL DynamicSerializedSizeData(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- NSArray *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- for (id value in array) {
- context->outSize += GPBComputeDataSizeNoTag(value);
- }
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field),
- GPBGetFieldType(field));
- context->outSize += array.count * tagSize;
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check
- // again.
- id selfVal = GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += GPBComputeDataSize(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- GPBType mapKeyType = field.mapKeyType;
- if (mapKeyType == GPBTypeString) {
- // If key type was string, then the map is an NSDictionary.
- NSDictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += GPBDictionaryComputeSizeInternalHelper(map, field);
- } else {
- // Type will be GPB*DataDictionary, exact type doesn't matter.
- GPBInt32ObjectDictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- }
- return YES;
-}
+ // Has check is done explicitly, so GPBGetObjectIvarWithFieldNoAutocreate()
+ // avoids doing the has check again.
-//%PDDM-EXPAND SERIALIZED_SIZE_OBJECT_FUNC(Message)
-// This block of code is generated, do not edit it directly.
+ // Fields.
+ for (GPBFieldDescriptor *fieldDescriptor in descriptor->fields_) {
+ GPBFieldType fieldType = fieldDescriptor.fieldType;
+ GPBDataType fieldDataType = GPBGetFieldDataType(fieldDescriptor);
-static BOOL DynamicSerializedSizeMessage(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- NSArray *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- for (id value in array) {
- context->outSize += GPBComputeMessageSizeNoTag(value);
- }
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field),
- GPBGetFieldType(field));
- context->outSize += array.count * tagSize;
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check
- // again.
- id selfVal = GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += GPBComputeMessageSize(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- GPBType mapKeyType = field.mapKeyType;
- if (mapKeyType == GPBTypeString) {
- // If key type was string, then the map is an NSDictionary.
- NSDictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += GPBDictionaryComputeSizeInternalHelper(map, field);
- } else {
- // Type will be GPB*MessageDictionary, exact type doesn't matter.
- GPBInt32ObjectDictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
- }
- }
- return YES;
-}
+ // Single Fields
+ if (fieldType == GPBFieldTypeSingle) {
+ BOOL selfHas = GPBGetHasIvarField(self, fieldDescriptor);
+ if (!selfHas) {
+ continue; // Nothing to do.
+ }
-//%PDDM-EXPAND SERIALIZED_SIZE_OBJECT_FUNC(Group)
-// This block of code is generated, do not edit it directly.
+ uint32_t fieldNumber = GPBFieldNumber(fieldDescriptor);
-static BOOL DynamicSerializedSizeGroup(GPBFieldDescriptor *field,
- void *voidContext) {
- SerializedSizeContext *context = (SerializedSizeContext *)voidContext;
- GPBFieldType fieldType = field.fieldType;
- if (fieldType == GPBFieldTypeRepeated) {
- NSArray *array =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- for (id value in array) {
- context->outSize += GPBComputeGroupSizeNoTag(value);
- }
- size_t tagSize = GPBComputeWireFormatTagSize(GPBFieldNumber(field),
- GPBGetFieldType(field));
- context->outSize += array.count * tagSize;
- } else if (fieldType == GPBFieldTypeSingle) {
- BOOL selfHas = GPBGetHasIvarField(context->self, field);
- if (selfHas) {
- // GPBGetObjectIvarWithFieldNoAutocreate() avoids doing the has check
- // again.
- id selfVal = GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += GPBComputeGroupSize(GPBFieldNumber(field), selfVal);
- }
- } else { // fieldType == GPBFieldTypeMap
- GPBType mapKeyType = field.mapKeyType;
- if (mapKeyType == GPBTypeString) {
- // If key type was string, then the map is an NSDictionary.
- NSDictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += GPBDictionaryComputeSizeInternalHelper(map, field);
- } else {
- // Type will be GPB*GroupDictionary, exact type doesn't matter.
- GPBInt32ObjectDictionary *map =
- GPBGetObjectIvarWithFieldNoAutocreate(context->self, field);
- context->outSize += [map computeSerializedSizeAsField:field];
+ switch (fieldDataType) {
+#define CASE_SINGLE_POD(NAME, TYPE, FUNC_TYPE) \
+ case GPBDataType##NAME: { \
+ TYPE fieldVal = GPBGetMessage##FUNC_TYPE##Field(self, fieldDescriptor); \
+ result += GPBCompute##NAME##Size(fieldNumber, fieldVal); \
+ break; \
+ }
+#define CASE_SINGLE_OBJECT(NAME) \
+ case GPBDataType##NAME: { \
+ id fieldVal = GPBGetObjectIvarWithFieldNoAutocreate(self, fieldDescriptor); \
+ result += GPBCompute##NAME##Size(fieldNumber, fieldVal); \
+ break; \
+ }
+ CASE_SINGLE_POD(Bool, BOOL, Bool)
+ CASE_SINGLE_POD(Fixed32, uint32_t, UInt32)
+ CASE_SINGLE_POD(SFixed32, int32_t, Int32)
+ CASE_SINGLE_POD(Float, float, Float)
+ CASE_SINGLE_POD(Fixed64, uint64_t, UInt64)
+ CASE_SINGLE_POD(SFixed64, int64_t, Int64)
+ CASE_SINGLE_POD(Double, double, Double)
+ CASE_SINGLE_POD(Int32, int32_t, Int32)
+ CASE_SINGLE_POD(Int64, int64_t, Int64)
+ CASE_SINGLE_POD(SInt32, int32_t, Int32)
+ CASE_SINGLE_POD(SInt64, int64_t, Int64)
+ CASE_SINGLE_POD(UInt32, uint32_t, UInt32)
+ CASE_SINGLE_POD(UInt64, uint64_t, UInt64)
+ CASE_SINGLE_OBJECT(Bytes)
+ CASE_SINGLE_OBJECT(String)
+ CASE_SINGLE_OBJECT(Message)
+ CASE_SINGLE_OBJECT(Group)
+ CASE_SINGLE_POD(Enum, int32_t, Int32)
+#undef CASE_SINGLE_POD
+#undef CASE_SINGLE_OBJECT
+ }
+
+ // Repeated Fields
+ } else if (fieldType == GPBFieldTypeRepeated) {
+ id genericArray =
+ GPBGetObjectIvarWithFieldNoAutocreate(self, fieldDescriptor);
+ NSUInteger count = [genericArray count];
+ if (count == 0) {
+ continue; // Nothing to add.
+ }
+ __block size_t dataSize = 0;
+
+ switch (fieldDataType) {
+#define CASE_REPEATED_POD(NAME, TYPE, ARRAY_TYPE) \
+ CASE_REPEATED_POD_EXTRA(NAME, TYPE, ARRAY_TYPE, )
+#define CASE_REPEATED_POD_EXTRA(NAME, TYPE, ARRAY_TYPE, ARRAY_ACCESSOR_NAME) \
+ case GPBDataType##NAME: { \
+ GPB##ARRAY_TYPE##Array *array = genericArray; \
+ [array enumerate##ARRAY_ACCESSOR_NAME##ValuesWithBlock:^(TYPE value, NSUInteger idx, BOOL *stop) { \
+ _Pragma("unused(idx, stop)"); \
+ dataSize += GPBCompute##NAME##SizeNoTag(value); \
+ }]; \
+ break; \
+ }
+#define CASE_REPEATED_OBJECT(NAME) \
+ case GPBDataType##NAME: { \
+ for (id value in genericArray) { \
+ dataSize += GPBCompute##NAME##SizeNoTag(value); \
+ } \
+ break; \
+ }
+ CASE_REPEATED_POD(Bool, BOOL, Bool)
+ CASE_REPEATED_POD(Fixed32, uint32_t, UInt32)
+ CASE_REPEATED_POD(SFixed32, int32_t, Int32)
+ CASE_REPEATED_POD(Float, float, Float)
+ CASE_REPEATED_POD(Fixed64, uint64_t, UInt64)
+ CASE_REPEATED_POD(SFixed64, int64_t, Int64)
+ CASE_REPEATED_POD(Double, double, Double)
+ CASE_REPEATED_POD(Int32, int32_t, Int32)
+ CASE_REPEATED_POD(Int64, int64_t, Int64)
+ CASE_REPEATED_POD(SInt32, int32_t, Int32)
+ CASE_REPEATED_POD(SInt64, int64_t, Int64)
+ CASE_REPEATED_POD(UInt32, uint32_t, UInt32)
+ CASE_REPEATED_POD(UInt64, uint64_t, UInt64)
+ CASE_REPEATED_OBJECT(Bytes)
+ CASE_REPEATED_OBJECT(String)
+ CASE_REPEATED_OBJECT(Message)
+ CASE_REPEATED_OBJECT(Group)
+ CASE_REPEATED_POD_EXTRA(Enum, int32_t, Enum, Raw)
+#undef CASE_REPEATED_POD
+#undef CASE_REPEATED_POD_EXTRA
+#undef CASE_REPEATED_OBJECT
+ } // switch
+ result += dataSize;
+ size_t tagSize = GPBComputeTagSize(GPBFieldNumber(fieldDescriptor));
+ if (fieldDataType == GPBDataTypeGroup) {
+ // Groups have both a start and an end tag.
+ tagSize *= 2;
+ }
+ if (fieldDescriptor.isPackable) {
+ result += tagSize;
+ result += GPBComputeSizeTSizeAsInt32NoTag(dataSize);
+ } else {
+ result += count * tagSize;
+ }
+
+ // Map<> Fields
+ } else { // fieldType == GPBFieldTypeMap
+ if (GPBDataTypeIsObject(fieldDataType) &&
+ (fieldDescriptor.mapKeyDataType == GPBDataTypeString)) {
+ // If key type was string, then the map is an NSDictionary.
+ NSDictionary *map =
+ GPBGetObjectIvarWithFieldNoAutocreate(self, fieldDescriptor);
+ if (map) {
+ result += GPBDictionaryComputeSizeInternalHelper(map, fieldDescriptor);
+ }
+ } else {
+ // Type will be GPB*GroupDictionary, exact type doesn't matter.
+ GPBInt32Int32Dictionary *map =
+ GPBGetObjectIvarWithFieldNoAutocreate(self, fieldDescriptor);
+ result += [map computeSerializedSizeAsField:fieldDescriptor];
+ }
}
- }
- return YES;
-}
+ } // for(fields)
-//%PDDM-EXPAND-END (18 expansions)
-
-- (size_t)serializedSize {
- // Fields.
- SerializedSizeContext context = {self, 0};
- GPBApplyStrictFunctions funcs =
- GPBAPPLY_STRICT_FUNCTIONS_INIT(DynamicSerializedSize);
- GPBApplyStrictFunctionsToMessageFields(&funcs, self, &context);
// Add any unknown fields.
- const GPBDescriptor *descriptor = [self descriptor];
if (descriptor.wireFormat) {
- context.outSize += [unknownFields_ serializedSizeAsMessageSet];
+ result += [unknownFields_ serializedSizeAsMessageSet];
} else {
- context.outSize += [unknownFields_ serializedSize];
+ result += [unknownFields_ serializedSize];
}
+
// Add any extensions.
- for (GPBExtensionField *extension in extensionMap_) {
+ for (GPBExtensionDescriptor *extension in extensionMap_) {
id value = [extensionMap_ objectForKey:extension];
- context.outSize += [extension computeSerializedSizeIncludingTag:value];
+ result += GPBComputeExtensionSerializedSizeIncludingTag(extension, value);
}
- return context.outSize;
+ return result;
}
#pragma mark - Resolve Methods Support
-typedef struct IvarAccessorMethodContext {
- GPBFileSyntax syntax;
+typedef struct ResolveIvarAccessorMethodResult {
IMP impToAdd;
SEL encodingSelector;
-} IvarAccessorMethodContext;
-
-//%PDDM-DEFINE IVAR_ACCESSOR_FUNC_COMMON(NAME, TYPE, TRUE_NAME)
-//%static BOOL IvarGet##NAME(GPBFieldDescriptor *field, void *voidContext) {
-//% IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
-//% context->impToAdd = imp_implementationWithBlock(^(id obj) {
-//% return GPBGet##TRUE_NAME##IvarWithField(obj, field);
-//% });
-//% context->encodingSelector = @selector(get##NAME);
-//% return NO;
-//%}
-//%
-//%PDDM-DEFINE IVAR_ACCESSOR_FUNC_OBJECT(NAME, TYPE)
-//%IVAR_ACCESSOR_FUNC_COMMON(NAME, TYPE, Object)
-//%static BOOL IvarSet##NAME(GPBFieldDescriptor *field, void *voidContext) {
-//% IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
-//% // Local for syntax so the block doesn't capture context and use random
-//% // memory in the future.
-//% const GPBFileSyntax syntax = context->syntax;
-//% context->impToAdd = imp_implementationWithBlock(^(id obj, TYPE value) {
-//% return GPBSetObjectIvarWithFieldInternal(obj, field, value, syntax);
-//% });
-//% context->encodingSelector = @selector(set##NAME:);
-//% return NO;
-//%}
-//%
-//%PDDM-DEFINE IVAR_ACCESSOR_FUNC_PER_VERSION(NAME, TYPE)
-//%IVAR_ACCESSOR_FUNC_PER_VERSION_ALIASED(NAME, TYPE, NAME)
-//%PDDM-DEFINE IVAR_ACCESSOR_FUNC_PER_VERSION_ALIASED(NAME, TYPE, TRUE_NAME)
-//%IVAR_ACCESSOR_FUNC_COMMON(NAME, TYPE, TRUE_NAME)
-//%static BOOL IvarSet##NAME(GPBFieldDescriptor *field, void *voidContext) {
-//% IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
-//% // Local for syntax so the block doesn't capture context and use random
-//% // memory in the future.
-//% const GPBFileSyntax syntax = context->syntax;
-//% context->impToAdd = imp_implementationWithBlock(^(id obj, TYPE value) {
-//% return GPBSet##TRUE_NAME##IvarWithFieldInternal(obj, field, value, syntax);
-//% });
-//% context->encodingSelector = @selector(set##NAME:);
-//% return NO;
-//%}
-//%
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_PER_VERSION(Bool, BOOL)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetBool(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetBoolIvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getBool);
- return NO;
-}
-
-static BOOL IvarSetBool(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, BOOL value) {
- return GPBSetBoolIvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setBool:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_PER_VERSION(Int32, int32_t)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetInt32(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetInt32IvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getInt32);
- return NO;
-}
-
-static BOOL IvarSetInt32(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, int32_t value) {
- return GPBSetInt32IvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setInt32:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_PER_VERSION_ALIASED(SInt32, int32_t, Int32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetSInt32(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetInt32IvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getSInt32);
- return NO;
-}
-
-static BOOL IvarSetSInt32(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, int32_t value) {
- return GPBSetInt32IvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setSInt32:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_PER_VERSION_ALIASED(SFixed32, int32_t, Int32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetSFixed32(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetInt32IvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getSFixed32);
- return NO;
-}
-
-static BOOL IvarSetSFixed32(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, int32_t value) {
- return GPBSetInt32IvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setSFixed32:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_PER_VERSION(UInt32, uint32_t)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetUInt32(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetUInt32IvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getUInt32);
- return NO;
-}
-
-static BOOL IvarSetUInt32(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, uint32_t value) {
- return GPBSetUInt32IvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setUInt32:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_PER_VERSION_ALIASED(Fixed32, uint32_t, UInt32)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetFixed32(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetUInt32IvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getFixed32);
- return NO;
-}
-
-static BOOL IvarSetFixed32(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, uint32_t value) {
- return GPBSetUInt32IvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setFixed32:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_PER_VERSION(Int64, int64_t)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetInt64(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetInt64IvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getInt64);
- return NO;
-}
+} ResolveIvarAccessorMethodResult;
-static BOOL IvarSetInt64(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, int64_t value) {
- return GPBSetInt64IvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setInt64:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_PER_VERSION_ALIASED(SFixed64, int64_t, Int64)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetSFixed64(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetInt64IvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getSFixed64);
- return NO;
-}
-
-static BOOL IvarSetSFixed64(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, int64_t value) {
- return GPBSetInt64IvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setSFixed64:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_PER_VERSION_ALIASED(SInt64, int64_t, Int64)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetSInt64(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetInt64IvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getSInt64);
- return NO;
-}
-
-static BOOL IvarSetSInt64(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, int64_t value) {
- return GPBSetInt64IvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setSInt64:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_PER_VERSION(UInt64, uint64_t)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetUInt64(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetUInt64IvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getUInt64);
- return NO;
-}
-
-static BOOL IvarSetUInt64(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, uint64_t value) {
- return GPBSetUInt64IvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setUInt64:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_PER_VERSION_ALIASED(Fixed64, uint64_t, UInt64)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetFixed64(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetUInt64IvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getFixed64);
- return NO;
-}
-
-static BOOL IvarSetFixed64(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, uint64_t value) {
- return GPBSetUInt64IvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setFixed64:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_PER_VERSION(Float, float)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetFloat(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetFloatIvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getFloat);
- return NO;
-}
-
-static BOOL IvarSetFloat(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, float value) {
- return GPBSetFloatIvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setFloat:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_PER_VERSION(Double, double)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetDouble(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetDoubleIvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getDouble);
- return NO;
-}
-
-static BOOL IvarSetDouble(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, double value) {
- return GPBSetDoubleIvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setDouble:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_OBJECT(String, id)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetString(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetObjectIvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getString);
- return NO;
-}
-
-static BOOL IvarSetString(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, id value) {
- return GPBSetObjectIvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setString:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_OBJECT(Data, id)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetData(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetObjectIvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getData);
- return NO;
-}
-
-static BOOL IvarSetData(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, id value) {
- return GPBSetObjectIvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setData:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_OBJECT(Message, id)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetMessage(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetObjectIvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getMessage);
- return NO;
-}
-
-static BOOL IvarSetMessage(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, id value) {
- return GPBSetObjectIvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setMessage:);
- return NO;
-}
-
-//%PDDM-EXPAND IVAR_ACCESSOR_FUNC_OBJECT(Group, id)
-// This block of code is generated, do not edit it directly.
-
-static BOOL IvarGetGroup(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetObjectIvarWithField(obj, field);
- });
- context->encodingSelector = @selector(getGroup);
- return NO;
-}
-
-static BOOL IvarSetGroup(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, id value) {
- return GPBSetObjectIvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setGroup:);
- return NO;
-}
-
-//%PDDM-EXPAND-END (17 expansions)
-
-// Enum gets custom hooks because get needs the syntax to Get.
-
-static BOOL IvarGetEnum(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj) {
- return GPBGetEnumIvarWithFieldInternal(obj, field, syntax);
- });
- context->encodingSelector = @selector(getEnum);
- return NO;
-}
-
-static BOOL IvarSetEnum(GPBFieldDescriptor *field, void *voidContext) {
- IvarAccessorMethodContext *context = (IvarAccessorMethodContext *)voidContext;
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context->syntax;
- context->impToAdd = imp_implementationWithBlock(^(id obj, int32_t value) {
- return GPBSetEnumIvarWithFieldInternal(obj, field, value, syntax);
- });
- context->encodingSelector = @selector(setEnum:);
- return NO;
+static void ResolveIvarGet(GPBFieldDescriptor *field,
+ ResolveIvarAccessorMethodResult *result) {
+ GPBDataType fieldDataType = GPBGetFieldDataType(field);
+ switch (fieldDataType) {
+#define CASE_GET(NAME, TYPE, TRUE_NAME) \
+ case GPBDataType##NAME: { \
+ result->impToAdd = imp_implementationWithBlock(^(id obj) { \
+ return GPBGetMessage##TRUE_NAME##Field(obj, field); \
+ }); \
+ result->encodingSelector = @selector(get##NAME); \
+ break; \
+ }
+#define CASE_GET_OBJECT(NAME, TYPE, TRUE_NAME) \
+ case GPBDataType##NAME: { \
+ result->impToAdd = imp_implementationWithBlock(^(id obj) { \
+ return GPBGetObjectIvarWithField(obj, field); \
+ }); \
+ result->encodingSelector = @selector(get##NAME); \
+ break; \
+ }
+ CASE_GET(Bool, BOOL, Bool)
+ CASE_GET(Fixed32, uint32_t, UInt32)
+ CASE_GET(SFixed32, int32_t, Int32)
+ CASE_GET(Float, float, Float)
+ CASE_GET(Fixed64, uint64_t, UInt64)
+ CASE_GET(SFixed64, int64_t, Int64)
+ CASE_GET(Double, double, Double)
+ CASE_GET(Int32, int32_t, Int32)
+ CASE_GET(Int64, int64_t, Int64)
+ CASE_GET(SInt32, int32_t, Int32)
+ CASE_GET(SInt64, int64_t, Int64)
+ CASE_GET(UInt32, uint32_t, UInt32)
+ CASE_GET(UInt64, uint64_t, UInt64)
+ CASE_GET_OBJECT(Bytes, id, Object)
+ CASE_GET_OBJECT(String, id, Object)
+ CASE_GET_OBJECT(Message, id, Object)
+ CASE_GET_OBJECT(Group, id, Object)
+ CASE_GET(Enum, int32_t, Enum)
+#undef CASE_GET
+ }
+}
+
+static void ResolveIvarSet(GPBFieldDescriptor *field,
+ GPBFileSyntax syntax,
+ ResolveIvarAccessorMethodResult *result) {
+ GPBDataType fieldDataType = GPBGetFieldDataType(field);
+ switch (fieldDataType) {
+#define CASE_SET(NAME, TYPE, TRUE_NAME) \
+ case GPBDataType##NAME: { \
+ result->impToAdd = imp_implementationWithBlock(^(id obj, TYPE value) { \
+ return GPBSet##TRUE_NAME##IvarWithFieldInternal(obj, field, value, syntax); \
+ }); \
+ result->encodingSelector = @selector(set##NAME:); \
+ break; \
+ }
+ CASE_SET(Bool, BOOL, Bool)
+ CASE_SET(Fixed32, uint32_t, UInt32)
+ CASE_SET(SFixed32, int32_t, Int32)
+ CASE_SET(Float, float, Float)
+ CASE_SET(Fixed64, uint64_t, UInt64)
+ CASE_SET(SFixed64, int64_t, Int64)
+ CASE_SET(Double, double, Double)
+ CASE_SET(Int32, int32_t, Int32)
+ CASE_SET(Int64, int64_t, Int64)
+ CASE_SET(SInt32, int32_t, Int32)
+ CASE_SET(SInt64, int64_t, Int64)
+ CASE_SET(UInt32, uint32_t, UInt32)
+ CASE_SET(UInt64, uint64_t, UInt64)
+ CASE_SET(Bytes, id, Object)
+ CASE_SET(String, id, Object)
+ CASE_SET(Message, id, Object)
+ CASE_SET(Group, id, Object)
+ CASE_SET(Enum, int32_t, Enum)
+#undef CASE_SET
+ }
}
+ (BOOL)resolveInstanceMethod:(SEL)sel {
@@ -4814,29 +3046,31 @@ static BOOL IvarSetEnum(GPBFieldDescriptor *field, void *voidContext) {
return NO;
}
- // NOTE: hasSel_/setHasSel_ will be NULL if the field for the given message
- // should not have has support (done in GPBDescriptor.m), so there is no need
- // for checks here to see if has*/setHas* are allowed.
+ // NOTE: hasOrCountSel_/setHasSel_ will be NULL if the field for the given
+ // message should not have has support (done in GPBDescriptor.m), so there is
+ // no need for checks here to see if has*/setHas* are allowed.
- IvarAccessorMethodContext context = {descriptor.file.syntax, NULL, NULL};
+ ResolveIvarAccessorMethodResult result = {NULL, NULL};
for (GPBFieldDescriptor *field in descriptor->fields_) {
BOOL isMapOrArray = GPBFieldIsMapOrArray(field);
if (!isMapOrArray) {
+ // Single fields.
if (sel == field->getSel_) {
- static const GPBApplyStrictFunctions funcs =
- GPBAPPLY_STRICT_FUNCTIONS_INIT(IvarGet);
- funcs[GPBGetFieldType(field)](field, &context);
+ ResolveIvarGet(field, &result);
break;
- } else if (sel == field->hasSel_) {
+ } else if (sel == field->setSel_) {
+ ResolveIvarSet(field, descriptor.file.syntax, &result);
+ break;
+ } else if (sel == field->hasOrCountSel_) {
int32_t index = GPBFieldHasIndex(field);
uint32_t fieldNum = GPBFieldNumber(field);
- context.impToAdd = imp_implementationWithBlock(^(id obj) {
+ result.impToAdd = imp_implementationWithBlock(^(id obj) {
return GPBGetHasIvar(obj, index, fieldNum);
});
- context.encodingSelector = @selector(getBool);
+ result.encodingSelector = @selector(getBool);
break;
} else if (sel == field->setHasSel_) {
- context.impToAdd = imp_implementationWithBlock(^(id obj, BOOL value) {
+ result.impToAdd = imp_implementationWithBlock(^(id obj, BOOL value) {
if (value) {
[NSException raise:NSInvalidArgumentException
format:@"%@: %@ can only be set to NO (to clear field).",
@@ -4845,53 +3079,60 @@ static BOOL IvarSetEnum(GPBFieldDescriptor *field, void *voidContext) {
}
GPBClearMessageField(obj, field);
});
- context.encodingSelector = @selector(setBool:);
- break;
- } else if (sel == field->setSel_) {
- GPBApplyStrictFunctions funcs = GPBAPPLY_STRICT_FUNCTIONS_INIT(IvarSet);
- funcs[GPBGetFieldType(field)](field, &context);
+ result.encodingSelector = @selector(setBool:);
break;
} else {
GPBOneofDescriptor *oneof = field->containingOneof_;
if (oneof && (sel == oneof->caseSel_)) {
int32_t index = oneof->oneofDescription_->index;
- context.impToAdd = imp_implementationWithBlock(^(id obj) {
+ result.impToAdd = imp_implementationWithBlock(^(id obj) {
return GPBGetHasOneof(obj, index);
});
- context.encodingSelector = @selector(getEnum);
+ result.encodingSelector = @selector(getEnum);
break;
}
}
} else {
+ // map<>/repeated fields.
if (sel == field->getSel_) {
if (field.fieldType == GPBFieldTypeRepeated) {
- context.impToAdd = imp_implementationWithBlock(^(id obj) {
+ result.impToAdd = imp_implementationWithBlock(^(id obj) {
return GetArrayIvarWithField(obj, field);
});
} else {
- context.impToAdd = imp_implementationWithBlock(^(id obj) {
+ result.impToAdd = imp_implementationWithBlock(^(id obj) {
return GetMapIvarWithField(obj, field);
});
}
- context.encodingSelector = @selector(getArray);
+ result.encodingSelector = @selector(getArray);
break;
} else if (sel == field->setSel_) {
- // Local for syntax so the block doesn't capture context and use random
- // memory in the future.
- const GPBFileSyntax syntax = context.syntax;
- context.impToAdd = imp_implementationWithBlock(^(id obj, id value) {
+ // Local for syntax so the block can directly capture it and not the
+ // full lookup.
+ const GPBFileSyntax syntax = descriptor.file.syntax;
+ result.impToAdd = imp_implementationWithBlock(^(id obj, id value) {
return GPBSetObjectIvarWithFieldInternal(obj, field, value, syntax);
});
- context.encodingSelector = @selector(setArray:);
+ result.encodingSelector = @selector(setArray:);
+ break;
+ } else if (sel == field->hasOrCountSel_) {
+ result.impToAdd = imp_implementationWithBlock(^(id obj) {
+ // Type doesn't matter, all *Array and *Dictionary types support
+ // -count.
+ NSArray *arrayOrMap =
+ GPBGetObjectIvarWithFieldNoAutocreate(obj, field);
+ return [arrayOrMap count];
+ });
+ result.encodingSelector = @selector(getArrayCount);
break;
}
}
}
- if (context.impToAdd) {
+ if (result.impToAdd) {
const char *encoding =
- GPBMessageEncodingForSelector(context.encodingSelector, YES);
+ GPBMessageEncodingForSelector(result.encodingSelector, YES);
BOOL methodAdded = class_addMethod(descriptor.messageClass, sel,
- context.impToAdd, encoding);
+ result.impToAdd, encoding);
return methodAdded;
}
return [super resolveInstanceMethod:sel];
diff --git a/objectivec/GPBMessage_PackagePrivate.h b/objectivec/GPBMessage_PackagePrivate.h
index c437c55b..d4c3501a 100644
--- a/objectivec/GPBMessage_PackagePrivate.h
+++ b/objectivec/GPBMessage_PackagePrivate.h
@@ -67,9 +67,9 @@ typedef struct GPBMessage_Storage *GPBMessage_StoragePtr;
// Gets an extension value without autocreating the result if not found. (i.e.
// returns nil if the extension is not set)
-- (id)getExistingExtension:(GPBExtensionField *)extension;
+- (id)getExistingExtension:(GPBExtensionDescriptor *)extension;
-// Returns an array of GPBExtensionField* for all the extensions currently
+// Returns an array of GPBExtensionDescriptor* for all the extensions currently
// in use on the message. They are sorted by field number.
- (NSArray *)sortedExtensionsInUse;
diff --git a/objectivec/GPBProtocolBuffers.h b/objectivec/GPBProtocolBuffers.h
index 436c9836..a66f295e 100644
--- a/objectivec/GPBProtocolBuffers.h
+++ b/objectivec/GPBProtocolBuffers.h
@@ -35,11 +35,10 @@
#import "GPBCodedOutputStream.h"
#import "GPBDescriptor.h"
#import "GPBDictionary.h"
-#import "GPBExtensionField.h"
#import "GPBExtensionRegistry.h"
-#import "GPBField.h"
#import "GPBMessage.h"
#import "GPBRootObject.h"
+#import "GPBUnknownField.h"
#import "GPBUnknownFieldSet.h"
#import "GPBUtilities.h"
#import "GPBWireFormat.h"
diff --git a/objectivec/GPBProtocolBuffers.m b/objectivec/GPBProtocolBuffers.m
index 96eeb1d3..e9cbfb42 100644
--- a/objectivec/GPBProtocolBuffers.m
+++ b/objectivec/GPBProtocolBuffers.m
@@ -36,14 +36,27 @@
#import "GPBCodedOutputStream.m"
#import "GPBDescriptor.m"
#import "GPBDictionary.m"
-#import "GPBExtensionField.m"
+#import "GPBExtensionInternals.m"
#import "GPBExtensionRegistry.m"
-#import "GPBField.m"
#import "GPBMessage.m"
#import "GPBRootObject.m"
+#import "GPBUnknownField.m"
#import "GPBUnknownFieldSet.m"
#import "GPBUtilities.m"
#import "GPBWellKnownTypes.m"
#import "GPBWireFormat.m"
#import "google/protobuf/Descriptor.pbobjc.m"
+
+// Duration and Timestamp are #imported into GPBWellKnownTypes.m to the
+// Objective C categories added will always be linked in with the classes.
+#import "google/protobuf/Any.pbobjc.m"
+#import "google/protobuf/Api.pbobjc.m"
+// #import "google/protobuf/Duration.pbobjc.m"
+#import "google/protobuf/Empty.pbobjc.m"
+#import "google/protobuf/FieldMask.pbobjc.m"
+#import "google/protobuf/SourceContext.pbobjc.m"
+#import "google/protobuf/Struct.pbobjc.m"
+// #import "google/protobuf/Timestamp.pbobjc.m"
+#import "google/protobuf/Type.pbobjc.m"
+#import "google/protobuf/Wrappers.pbobjc.m"
diff --git a/objectivec/GPBProtocolBuffers_RuntimeSupport.h b/objectivec/GPBProtocolBuffers_RuntimeSupport.h
index 7fd7b4c8..fea75b93 100644
--- a/objectivec/GPBProtocolBuffers_RuntimeSupport.h
+++ b/objectivec/GPBProtocolBuffers_RuntimeSupport.h
@@ -34,8 +34,7 @@
#import "GPBProtocolBuffers.h"
#import "GPBDescriptor_PackagePrivate.h"
-#import "GPBExtensionField_PackagePrivate.h"
-#import "GPBExtensionRegistry.h"
+#import "GPBExtensionInternals.h"
#import "GPBMessage_PackagePrivate.h"
#import "GPBRootObject_PackagePrivate.h"
#import "GPBUtilities_PackagePrivate.h"
diff --git a/objectivec/GPBRootObject.m b/objectivec/GPBRootObject.m
index 38dab665..3f648257 100644
--- a/objectivec/GPBRootObject.m
+++ b/objectivec/GPBRootObject.m
@@ -36,7 +36,6 @@
#import <CoreFoundation/CoreFoundation.h>
#import "GPBDescriptor.h"
-#import "GPBExtensionField.h"
#import "GPBUtilities_PackagePrivate.h"
@interface GPBExtensionDescriptor (GPBRootObject)
@@ -130,14 +129,14 @@ static CFMutableDictionaryRef gExtensionSingletonDictionary = NULL;
return nil;
}
-+ (void)globallyRegisterExtension:(GPBExtensionField *)field {
- const char *key = [field.descriptor singletonNameC];
++ (void)globallyRegisterExtension:(GPBExtensionDescriptor *)field {
+ const char *key = [field singletonNameC];
OSSpinLockLock(&gExtensionSingletonDictionaryLock_);
CFDictionarySetValue(gExtensionSingletonDictionary, key, field);
OSSpinLockUnlock(&gExtensionSingletonDictionaryLock_);
}
-GPB_INLINE id ExtensionForName(id self, SEL _cmd) {
+static id ExtensionForName(id self, SEL _cmd) {
// Really fast way of doing "classname_selName".
// This came up as a hotspot (creation of NSString *) when accessing a
// lot of extensions.
diff --git a/objectivec/GPBRootObject_PackagePrivate.h b/objectivec/GPBRootObject_PackagePrivate.h
index f1cfe990..3c8f09c8 100644
--- a/objectivec/GPBRootObject_PackagePrivate.h
+++ b/objectivec/GPBRootObject_PackagePrivate.h
@@ -32,12 +32,12 @@
#import "GPBRootObject.h"
-@class GPBExtensionField;
+@class GPBExtensionDescriptor;
@interface GPBRootObject ()
// Globally register.
-+ (void)globallyRegisterExtension:(GPBExtensionField *)field;
++ (void)globallyRegisterExtension:(GPBExtensionDescriptor *)field;
@end
diff --git a/objectivec/GPBTypes.h b/objectivec/GPBRuntimeTypes.h
index 49c2b9e4..e91d86a6 100644
--- a/objectivec/GPBTypes.h
+++ b/objectivec/GPBRuntimeTypes.h
@@ -63,36 +63,36 @@ typedef union {
GPB_UNSAFE_UNRETAINED NSString *valueString;
GPB_UNSAFE_UNRETAINED GPBMessage *valueMessage;
int32_t valueEnum;
-} GPBValue;
+} GPBGenericValue;
// Do not change the order of this enum (or add things to it) without thinking
// about it very carefully. There are several things that depend on the order.
typedef enum {
- GPBTypeBool = 0,
- GPBTypeFixed32,
- GPBTypeSFixed32,
- GPBTypeFloat,
- GPBTypeFixed64,
- GPBTypeSFixed64,
- GPBTypeDouble,
- GPBTypeInt32,
- GPBTypeInt64,
- GPBTypeSInt32,
- GPBTypeSInt64,
- GPBTypeUInt32,
- GPBTypeUInt64,
- GPBTypeData, // Maps to Bytes Protobuf type
- GPBTypeString,
- GPBTypeMessage,
- GPBTypeGroup,
- GPBTypeEnum,
-} GPBType;
+ GPBDataTypeBool = 0,
+ GPBDataTypeFixed32,
+ GPBDataTypeSFixed32,
+ GPBDataTypeFloat,
+ GPBDataTypeFixed64,
+ GPBDataTypeSFixed64,
+ GPBDataTypeDouble,
+ GPBDataTypeInt32,
+ GPBDataTypeInt64,
+ GPBDataTypeSInt32,
+ GPBDataTypeSInt64,
+ GPBDataTypeUInt32,
+ GPBDataTypeUInt64,
+ GPBDataTypeBytes,
+ GPBDataTypeString,
+ GPBDataTypeMessage,
+ GPBDataTypeGroup,
+ GPBDataTypeEnum,
+} GPBDataType;
enum {
- // A count of the number of types in GPBType. Separated out from the GPBType
- // enum to avoid warnings regarding not handling GPBTypeCount in switch
- // statements.
- GPBTypeCount = GPBTypeEnum + 1
+ // A count of the number of types in GPBDataType. Separated out from the
+ // GPBDataType enum to avoid warnings regarding not handling
+ // GPBDataType_Count in switch statements.
+ GPBDataType_Count = GPBDataTypeEnum + 1
};
// An extension range.
diff --git a/objectivec/GPBField.h b/objectivec/GPBUnknownField.h
index 041a242f..f86d8249 100644
--- a/objectivec/GPBField.h
+++ b/objectivec/GPBUnknownField.h
@@ -35,7 +35,7 @@
@class GPBUInt64Array;
@class GPBUnknownFieldSet;
-@interface GPBField : NSObject<NSCopying>
+@interface GPBUnknownField : NSObject<NSCopying>
@property(nonatomic, readonly, assign) int32_t number;
@@ -43,8 +43,8 @@
@property(nonatomic, readonly, strong) GPBUInt64Array *varintList;
@property(nonatomic, readonly, strong) GPBUInt32Array *fixed32List;
@property(nonatomic, readonly, strong) GPBUInt64Array *fixed64List;
-@property(nonatomic, readonly, strong) NSArray *lengthDelimitedList;
-@property(nonatomic, readonly, strong) NSArray *groupList;
+@property(nonatomic, readonly, strong) NSArray *lengthDelimitedList; // NSData
+@property(nonatomic, readonly, strong) NSArray *groupList; // GPBUnknownFieldSet
// Only one of these should be used per Field.
- (void)addVarint:(uint64_t)value;
diff --git a/objectivec/GPBField.m b/objectivec/GPBUnknownField.m
index c390ae9e..c49c0dfc 100644
--- a/objectivec/GPBField.m
+++ b/objectivec/GPBUnknownField.m
@@ -28,12 +28,12 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#import "GPBField_PackagePrivate.h"
+#import "GPBUnknownField_PackagePrivate.h"
#import "GPBArray.h"
#import "GPBCodedOutputStream.h"
-@interface GPBField () {
+@implementation GPBUnknownField {
@protected
int32_t number_;
GPBUInt64Array *mutableVarintList_;
@@ -42,9 +42,6 @@
NSMutableArray *mutableLengthDelimitedList_;
NSMutableArray *mutableGroupList_;
}
-@end
-
-@implementation GPBField
@synthesize number = number_;
@synthesize varintList = mutableVarintList_;
@@ -71,7 +68,8 @@
}
- (id)copyWithZone:(NSZone *)zone {
- GPBField *result = [[GPBField allocWithZone:zone] initWithNumber:number_];
+ GPBUnknownField *result =
+ [[GPBUnknownField allocWithZone:zone] initWithNumber:number_];
result->mutableFixed32List_ = [mutableFixed32List_ copyWithZone:zone];
result->mutableFixed64List_ = [mutableFixed64List_ copyWithZone:zone];
result->mutableLengthDelimitedList_ =
@@ -91,8 +89,8 @@
- (BOOL)isEqual:(id)object {
if (self == object) return YES;
- if (![object isKindOfClass:[GPBField class]]) return NO;
- GPBField *field = (GPBField *)object;
+ if (![object isKindOfClass:[GPBUnknownField class]]) return NO;
+ GPBUnknownField *field = (GPBUnknownField *)object;
BOOL equalVarint =
(mutableVarintList_.count == 0 && field->mutableVarintList_.count == 0) ||
[mutableVarintList_ isEqual:field->mutableVarintList_];
@@ -131,23 +129,23 @@
- (void)writeToOutput:(GPBCodedOutputStream *)output {
NSUInteger count = mutableVarintList_.count;
if (count > 0) {
- [output writeUInt64s:number_ values:mutableVarintList_ tag:0];
+ [output writeUInt64Array:number_ values:mutableVarintList_ tag:0];
}
count = mutableFixed32List_.count;
if (count > 0) {
- [output writeFixed32s:number_ values:mutableFixed32List_ tag:0];
+ [output writeFixed32Array:number_ values:mutableFixed32List_ tag:0];
}
count = mutableFixed64List_.count;
if (count > 0) {
- [output writeFixed64s:number_ values:mutableFixed64List_ tag:0];
+ [output writeFixed64Array:number_ values:mutableFixed64List_ tag:0];
}
count = mutableLengthDelimitedList_.count;
if (count > 0) {
- [output writeDatas:number_ values:mutableLengthDelimitedList_];
+ [output writeBytesArray:number_ values:mutableLengthDelimitedList_];
}
count = mutableGroupList_.count;
if (count > 0) {
- [output writeUnknownGroups:number_ values:mutableGroupList_];
+ [output writeUnknownGroupArray:number_ values:mutableGroupList_];
}
}
@@ -173,7 +171,7 @@
}];
for (NSData *data in mutableLengthDelimitedList_) {
- result += GPBComputeDataSize(number, data);
+ result += GPBComputeBytesSize(number, data);
}
for (GPBUnknownFieldSet *set in mutableGroupList_) {
@@ -229,7 +227,7 @@
return description;
}
-- (void)mergeFromField:(GPBField *)other {
+- (void)mergeFromField:(GPBUnknownField *)other {
GPBUInt64Array *otherVarintList = other.varintList;
if (otherVarintList.count > 0) {
if (mutableVarintList_ == nil) {
diff --git a/objectivec/GPBUnknownFieldSet.h b/objectivec/GPBUnknownFieldSet.h
index 48824f10..ab8ee5e5 100644
--- a/objectivec/GPBUnknownFieldSet.h
+++ b/objectivec/GPBUnknownFieldSet.h
@@ -30,15 +30,15 @@
#import <Foundation/Foundation.h>
-@class GPBField;
+@class GPBUnknownField;
@interface GPBUnknownFieldSet : NSObject<NSCopying>
- (BOOL)hasField:(int32_t)number;
-- (GPBField *)getField:(int32_t)number;
+- (GPBUnknownField *)getField:(int32_t)number;
- (NSUInteger)countOfFields;
-- (void)addField:(GPBField *)field;
+- (void)addField:(GPBUnknownField *)field;
// Returns an NSArray of the GPBFields sorted by the field numbers.
- (NSArray *)sortedFields;
diff --git a/objectivec/GPBUnknownFieldSet.m b/objectivec/GPBUnknownFieldSet.m
index d7154dc8..4ddc0d2a 100644
--- a/objectivec/GPBUnknownFieldSet.m
+++ b/objectivec/GPBUnknownFieldSet.m
@@ -32,7 +32,7 @@
#import "GPBCodedInputStream_PackagePrivate.h"
#import "GPBCodedOutputStream.h"
-#import "GPBField_PackagePrivate.h"
+#import "GPBUnknownField_PackagePrivate.h"
#import "GPBUtilities.h"
#import "GPBWireFormat.h"
@@ -85,10 +85,10 @@ static void checkNumber(int32_t number) {
static void CopyWorker(const void *key, const void *value, void *context) {
#pragma unused(key)
- GPBField *field = value;
+ GPBUnknownField *field = value;
GPBUnknownFieldSet *result = context;
- GPBField *copied = [field copy];
+ GPBUnknownField *copied = [field copy];
[result addField:copied];
[copied release];
}
@@ -136,9 +136,10 @@ static void CopyWorker(const void *key, const void *value, void *context) {
return fields_ ? (CFDictionaryGetValue(fields_, (void *)key) != nil) : NO;
}
-- (GPBField *)getField:(int32_t)number {
+- (GPBUnknownField *)getField:(int32_t)number {
ssize_t key = number;
- GPBField *result = fields_ ? CFDictionaryGetValue(fields_, (void *)key) : nil;
+ GPBUnknownField *result =
+ fields_ ? CFDictionaryGetValue(fields_, (void *)key) : nil;
return result;
}
@@ -150,12 +151,12 @@ static void CopyWorker(const void *key, const void *value, void *context) {
if (!fields_) return nil;
size_t count = CFDictionaryGetCount(fields_);
ssize_t keys[count];
- GPBField *values[count];
+ GPBUnknownField *values[count];
CFDictionaryGetKeysAndValues(fields_, (const void **)keys,
(const void **)values);
struct GPBFieldPair {
ssize_t key;
- GPBField *value;
+ GPBUnknownField *value;
} pairs[count];
for (size_t i = 0; i < count; ++i) {
pairs[i].key = keys[i];
@@ -179,13 +180,13 @@ static void CopyWorker(const void *key, const void *value, void *context) {
if (!fields_) return;
size_t count = CFDictionaryGetCount(fields_);
ssize_t keys[count];
- GPBField *values[count];
+ GPBUnknownField *values[count];
CFDictionaryGetKeysAndValues(fields_, (const void **)keys,
(const void **)values);
if (count > 1) {
struct GPBFieldPair {
ssize_t key;
- GPBField *value;
+ GPBUnknownField *value;
} pairs[count];
for (size_t i = 0; i < count; ++i) {
@@ -199,7 +200,7 @@ static void CopyWorker(const void *key, const void *value, void *context) {
return (a->key > b->key) ? 1 : ((a->key == b->key) ? 0 : -1);
});
for (size_t i = 0; i < count; ++i) {
- GPBField *value = pairs[i].value;
+ GPBUnknownField *value = pairs[i].value;
[value writeToOutput:output];
}
} else {
@@ -219,7 +220,7 @@ static void CopyWorker(const void *key, const void *value, void *context) {
static void GPBUnknownFieldSetSerializedSize(const void *key, const void *value,
void *context) {
#pragma unused(key)
- GPBField *field = value;
+ GPBUnknownField *field = value;
size_t *result = context;
*result += [field serializedSize];
}
@@ -237,7 +238,7 @@ static void GPBUnknownFieldSetWriteAsMessageSetTo(const void *key,
const void *value,
void *context) {
#pragma unused(key)
- GPBField *field = value;
+ GPBUnknownField *field = value;
GPBCodedOutputStream *output = context;
[field writeAsMessageSetExtensionToOutput:output];
}
@@ -253,7 +254,7 @@ static void GPBUnknownFieldSetSerializedSizeAsMessageSet(const void *key,
const void *value,
void *context) {
#pragma unused(key)
- GPBField *field = value;
+ GPBUnknownField *field = value;
size_t *result = context;
*result += [field serializedSizeAsMessageSetExtension];
}
@@ -280,7 +281,7 @@ static void GPBUnknownFieldSetSerializedSizeAsMessageSet(const void *key,
return GPBWireFormatGetTagWireType(tag) != GPBWireFormatEndGroup;
}
-- (void)addField:(GPBField *)field {
+- (void)addField:(GPBUnknownField *)field {
int32_t number = [field number];
checkNumber(number);
if (!fields_) {
@@ -297,12 +298,12 @@ static void GPBUnknownFieldSetSerializedSizeAsMessageSet(const void *key,
CFDictionarySetValue(fields_, (const void *)key, field);
}
-- (GPBField *)mutableFieldForNumber:(int32_t)number create:(BOOL)create {
+- (GPBUnknownField *)mutableFieldForNumber:(int32_t)number create:(BOOL)create {
ssize_t key = number;
- GPBField *existing =
+ GPBUnknownField *existing =
fields_ ? CFDictionaryGetValue(fields_, (const void *)key) : nil;
if (!existing && create) {
- existing = [[GPBField alloc] initWithNumber:number];
+ existing = [[GPBUnknownField alloc] initWithNumber:number];
// This retains existing.
[self addField:existing];
[existing release];
@@ -314,19 +315,19 @@ static void GPBUnknownFieldSetMergeUnknownFields(const void *key,
const void *value,
void *context) {
#pragma unused(key)
- GPBField *field = value;
+ GPBUnknownField *field = value;
GPBUnknownFieldSet *self = context;
int32_t number = [field number];
checkNumber(number);
- GPBField *oldField = [self mutableFieldForNumber:number create:NO];
+ GPBUnknownField *oldField = [self mutableFieldForNumber:number create:NO];
if (oldField) {
[oldField mergeFromField:field];
} else {
// Merge only comes from GPBMessage's mergeFrom:, so it means we are on
// mutable message and are an mutable instance, so make sure we need
// mutable fields.
- GPBField *fieldCopy = [field copy];
+ GPBUnknownField *fieldCopy = [field copy];
[self addField:fieldCopy];
[fieldCopy release];
}
@@ -356,18 +357,18 @@ static void GPBUnknownFieldSetMergeUnknownFields(const void *key,
GPBCodedInputStreamState *state = &input->state_;
switch (GPBWireFormatGetTagWireType(tag)) {
case GPBWireFormatVarint: {
- GPBField *field = [self mutableFieldForNumber:number create:YES];
+ GPBUnknownField *field = [self mutableFieldForNumber:number create:YES];
[field addVarint:GPBCodedInputStreamReadInt64(state)];
return YES;
}
case GPBWireFormatFixed64: {
- GPBField *field = [self mutableFieldForNumber:number create:YES];
+ GPBUnknownField *field = [self mutableFieldForNumber:number create:YES];
[field addFixed64:GPBCodedInputStreamReadFixed64(state)];
return YES;
}
case GPBWireFormatLengthDelimited: {
- NSData *data = GPBCodedInputStreamReadRetainedData(state);
- GPBField *field = [self mutableFieldForNumber:number create:YES];
+ NSData *data = GPBCodedInputStreamReadRetainedBytes(state);
+ GPBUnknownField *field = [self mutableFieldForNumber:number create:YES];
[field addLengthDelimited:data];
[data release];
return YES;
@@ -375,7 +376,7 @@ static void GPBUnknownFieldSetMergeUnknownFields(const void *key,
case GPBWireFormatStartGroup: {
GPBUnknownFieldSet *unknownFieldSet = [[GPBUnknownFieldSet alloc] init];
[input readUnknownGroup:number message:unknownFieldSet];
- GPBField *field = [self mutableFieldForNumber:number create:YES];
+ GPBUnknownField *field = [self mutableFieldForNumber:number create:YES];
[field addGroup:unknownFieldSet];
[unknownFieldSet release];
return YES;
@@ -383,7 +384,7 @@ static void GPBUnknownFieldSetMergeUnknownFields(const void *key,
case GPBWireFormatEndGroup:
return NO;
case GPBWireFormatFixed32: {
- GPBField *field = [self mutableFieldForNumber:number create:YES];
+ GPBUnknownField *field = [self mutableFieldForNumber:number create:YES];
[field addFixed32:GPBCodedInputStreamReadFixed32(state)];
return YES;
}
@@ -396,7 +397,7 @@ static void GPBUnknownFieldSetMergeUnknownFields(const void *key,
}
- (void)addUnknownMapEntry:(int32_t)fieldNum value:(NSData *)data {
- GPBField *field = [self mutableFieldForNumber:fieldNum create:YES];
+ GPBUnknownField *field = [self mutableFieldForNumber:fieldNum create:YES];
[field addLengthDelimited:data];
}
diff --git a/objectivec/GPBField_PackagePrivate.h b/objectivec/GPBUnknownField_PackagePrivate.h
index 73c1fa80..1fbce0f9 100644
--- a/objectivec/GPBField_PackagePrivate.h
+++ b/objectivec/GPBUnknownField_PackagePrivate.h
@@ -30,11 +30,11 @@
#import <Foundation/Foundation.h>
-#import "GPBField.h"
+#import "GPBUnknownField.h"
@class GPBCodedOutputStream;
-@interface GPBField ()
+@interface GPBUnknownField ()
- (instancetype)initWithNumber:(int32_t)number;
@@ -44,6 +44,6 @@
- (void)writeAsMessageSetExtensionToOutput:(GPBCodedOutputStream *)output;
- (size_t)serializedSizeAsMessageSetExtension;
-- (void)mergeFromField:(GPBField *)other;
+- (void)mergeFromField:(GPBUnknownField *)other;
@end
diff --git a/objectivec/GPBUtilities.h b/objectivec/GPBUtilities.h
index 8813f1ad..87cd32c7 100644
--- a/objectivec/GPBUtilities.h
+++ b/objectivec/GPBUtilities.h
@@ -30,152 +30,153 @@
#import <Foundation/Foundation.h>
+#import "GPBArray.h"
#import "GPBMessage.h"
-#import "GPBTypes.h"
+#import "GPBRuntimeTypes.h"
CF_EXTERN_C_BEGIN
+// Generates a string that should be a valid "Text Format" for the C++ version
+// of Protocol Buffers. lineIndent can be nil if no additional line indent is
+// needed. The comments provide the names according to the ObjC library, they
+// most likely won't exactly match the original .proto file.
+NSString *GPBTextFormatForMessage(GPBMessage *message, NSString *lineIndent);
+NSString *GPBTextFormatForUnknownFieldSet(GPBUnknownFieldSet *unknownSet,
+ NSString *lineIndent);
+
+//
+// Test if the given field is set on a message.
+//
BOOL GPBMessageHasFieldNumberSet(GPBMessage *self, uint32_t fieldNumber);
BOOL GPBMessageHasFieldSet(GPBMessage *self, GPBFieldDescriptor *field);
+//
+// Clear the given field of a message.
+//
void GPBClearMessageField(GPBMessage *self, GPBFieldDescriptor *field);
+//%PDDM-EXPAND GPB_ACCESSORS()
+// This block of code is generated, do not edit it directly.
+
+
+//
+// Get/Set the given field of a message.
+//
+
+// Single Fields
+
+NSData *GPBGetMessageBytesField(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageBytesField(GPBMessage *self, GPBFieldDescriptor *field, NSData *value);
+
+NSString *GPBGetMessageStringField(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageStringField(GPBMessage *self, GPBFieldDescriptor *field, NSString *value);
+
+GPBMessage *GPBGetMessageMessageField(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageMessageField(GPBMessage *self, GPBFieldDescriptor *field, GPBMessage *value);
+
+GPBMessage *GPBGetMessageGroupField(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageGroupField(GPBMessage *self, GPBFieldDescriptor *field, GPBMessage *value);
+
+BOOL GPBGetMessageBoolField(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageBoolField(GPBMessage *self, GPBFieldDescriptor *field, BOOL value);
+
+int32_t GPBGetMessageInt32Field(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageInt32Field(GPBMessage *self, GPBFieldDescriptor *field, int32_t value);
+
+uint32_t GPBGetMessageUInt32Field(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageUInt32Field(GPBMessage *self, GPBFieldDescriptor *field, uint32_t value);
+
+int64_t GPBGetMessageInt64Field(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageInt64Field(GPBMessage *self, GPBFieldDescriptor *field, int64_t value);
+
+uint64_t GPBGetMessageUInt64Field(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageUInt64Field(GPBMessage *self, GPBFieldDescriptor *field, uint64_t value);
+
+float GPBGetMessageFloatField(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageFloatField(GPBMessage *self, GPBFieldDescriptor *field, float value);
+
+double GPBGetMessageDoubleField(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageDoubleField(GPBMessage *self, GPBFieldDescriptor *field, double value);
+
+// Get/Set the given enum field of a message. You can only Set values that are
+// members of the enum. For proto3, when doing a Get, if the value isn't a
+// memeber of the enum, kGPBUnrecognizedEnumeratorValue will be returned. The
+// the functions with "Raw" in the will bypass all checks.
+int32_t GPBGetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field, int32_t value);
+int32_t GPBGetMessageRawEnumField(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageRawEnumField(GPBMessage *self, GPBFieldDescriptor *field, int32_t value);
+
+// Repeated Fields
+
+// The object will/should be GPB*Array or NSMutableArray based on the field's
+// type.
+id GPBGetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field, id array);
+
+// Map Fields
+
+// The object will/should be GPB*Dictionary or NSMutableDictionary based on the
+// field's type.
+id GPBGetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field);
+void GPBSetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field, id dictionary);
+
+//%PDDM-EXPAND-END GPB_ACCESSORS()
+
// Returns an empty NSData to assign to byte fields when you wish
// to assign them to empty. Prevents allocating a lot of little [NSData data]
// objects.
NSData *GPBEmptyNSData(void) __attribute__((pure));
-//%PDDM-EXPAND GPB_IVAR_ACCESSORS()
-// This block of code is generated, do not edit it directly.
+CF_EXTERN_C_END
-// Getters and Setters for ivars named |name| from instance self.
-
-NSData* GPBGetDataIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetDataIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- NSData* value);
-NSString* GPBGetStringIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetStringIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- NSString* value);
-GPBMessage* GPBGetMessageIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetMessageIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- GPBMessage* value);
-GPBMessage* GPBGetGroupIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetGroupIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- GPBMessage* value);
-BOOL GPBGetBoolIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetBoolIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- BOOL value);
-int32_t GPBGetInt32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetInt32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- int32_t value);
-int32_t GPBGetSFixed32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetSFixed32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- int32_t value);
-int32_t GPBGetSInt32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetSInt32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- int32_t value);
-int32_t GPBGetEnumIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetEnumIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- int32_t value);
-uint32_t GPBGetUInt32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetUInt32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- uint32_t value);
-uint32_t GPBGetFixed32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetFixed32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- uint32_t value);
-int64_t GPBGetInt64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetInt64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- int64_t value);
-int64_t GPBGetSInt64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetSInt64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- int64_t value);
-int64_t GPBGetSFixed64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetSFixed64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- int64_t value);
-uint64_t GPBGetUInt64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetUInt64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- uint64_t value);
-uint64_t GPBGetFixed64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetFixed64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- uint64_t value);
-float GPBGetFloatIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetFloatIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- float value);
-double GPBGetDoubleIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field);
-void GPBSetDoubleIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- double value);
-//%PDDM-EXPAND-END GPB_IVAR_ACCESSORS()
-
-// Generates a sting that should be a valid "Text Format" for the C++ version
-// of Protocol Buffers. lineIndent can be nil if no additional line indent is
-// needed. The comments provide the names according to the ObjC library, they
-// most likely won't exactly match the original .proto file.
-NSString *GPBTextFormatForMessage(GPBMessage *message, NSString *lineIndent);
-NSString *GPBTextFormatForUnknownFieldSet(GPBUnknownFieldSet *unknownSet,
- NSString *lineIndent);
-CF_EXTERN_C_END
+//%PDDM-DEFINE GPB_ACCESSORS()
+//%
+//%//
+//%// Get/Set the given field of a message.
+//%//
+//%
+//%// Single Fields
+//%
+//%GPB_ACCESSOR_SINGLE_FULL(Bytes, NSData, *)
+//%GPB_ACCESSOR_SINGLE_FULL(String, NSString, *)
+//%GPB_ACCESSOR_SINGLE_FULL(Message, GPBMessage, *)
+//%GPB_ACCESSOR_SINGLE_FULL(Group, GPBMessage, *)
+//%GPB_ACCESSOR_SINGLE(Bool, BOOL)
+//%GPB_ACCESSOR_SINGLE(Int32, int32_t)
+//%GPB_ACCESSOR_SINGLE(UInt32, uint32_t)
+//%GPB_ACCESSOR_SINGLE(Int64, int64_t)
+//%GPB_ACCESSOR_SINGLE(UInt64, uint64_t)
+//%GPB_ACCESSOR_SINGLE(Float, float)
+//%GPB_ACCESSOR_SINGLE(Double, double)
+//%// Get/Set the given enum field of a message. You can only Set values that are
+//%// members of the enum. For proto3, when doing a Get, if the value isn't a
+//%// memeber of the enum, kGPBUnrecognizedEnumeratorValue will be returned. The
+//%// the functions with "Raw" in the will bypass all checks.
+//%int32_t GPBGetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field);
+//%void GPBSetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field, int32_t value);
+//%int32_t GPBGetMessageRawEnumField(GPBMessage *self, GPBFieldDescriptor *field);
+//%void GPBSetMessageRawEnumField(GPBMessage *self, GPBFieldDescriptor *field, int32_t value);
+//%
+//%// Repeated Fields
+//%
+//%// The object will/should be GPB*Array or NSMutableArray based on the field's
+//%// type.
+//%id GPBGetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field);
+//%void GPBSetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field, id array);
+//%
+//%// Map Fields
+//%
+//%// The object will/should be GPB*Dictionary or NSMutableDictionary based on the
+//%// field's type.
+//%id GPBGetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field);
+//%void GPBSetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field, id dictionary);
+//%
-//%PDDM-DEFINE GPB_IVAR_ACCESSORS()
-//%// Getters and Setters for ivars named |name| from instance self.
+//%PDDM-DEFINE GPB_ACCESSOR_SINGLE(NAME, TYPE)
+//%GPB_ACCESSOR_SINGLE_FULL(NAME, TYPE, )
+//%PDDM-DEFINE GPB_ACCESSOR_SINGLE_FULL(NAME, TYPE, TisP)
+//%TYPE TisP##GPBGetMessage##NAME##Field(GPBMessage *self, GPBFieldDescriptor *field);
+//%void GPBSetMessage##NAME##Field(GPBMessage *self, GPBFieldDescriptor *field, TYPE TisP##value);
//%
-//%GPB_IVAR_ACCESSORS_DECL(Data, NSData*)
-//%GPB_IVAR_ACCESSORS_DECL(String, NSString*)
-//%GPB_IVAR_ACCESSORS_DECL(Message, GPBMessage*)
-//%GPB_IVAR_ACCESSORS_DECL(Group, GPBMessage*)
-//%GPB_IVAR_ACCESSORS_DECL(Bool, BOOL)
-//%GPB_IVAR_ACCESSORS_DECL(Int32, int32_t)
-//%GPB_IVAR_ACCESSORS_DECL(SFixed32, int32_t)
-//%GPB_IVAR_ACCESSORS_DECL(SInt32, int32_t)
-//%GPB_IVAR_ACCESSORS_DECL(Enum, int32_t)
-//%GPB_IVAR_ACCESSORS_DECL(UInt32, uint32_t)
-//%GPB_IVAR_ACCESSORS_DECL(Fixed32, uint32_t)
-//%GPB_IVAR_ACCESSORS_DECL(Int64, int64_t)
-//%GPB_IVAR_ACCESSORS_DECL(SInt64, int64_t)
-//%GPB_IVAR_ACCESSORS_DECL(SFixed64, int64_t)
-//%GPB_IVAR_ACCESSORS_DECL(UInt64, uint64_t)
-//%GPB_IVAR_ACCESSORS_DECL(Fixed64, uint64_t)
-//%GPB_IVAR_ACCESSORS_DECL(Float, float)
-//%GPB_IVAR_ACCESSORS_DECL(Double, double)
-//%PDDM-DEFINE GPB_IVAR_ACCESSORS_DECL(NAME, TYPE)
-//%TYPE GPBGet##NAME##IvarWithField(GPBMessage *self,
-//% TYPE$S NAME$S GPBFieldDescriptor *field);
-//%void GPBSet##NAME##IvarWithField(GPBMessage *self,
-//% NAME$S GPBFieldDescriptor *field,
-//% NAME$S TYPE value);
diff --git a/objectivec/GPBUtilities.m b/objectivec/GPBUtilities.m
index f912b979..7a035ce6 100644
--- a/objectivec/GPBUtilities.m
+++ b/objectivec/GPBUtilities.m
@@ -35,9 +35,8 @@
#import "GPBArray_PackagePrivate.h"
#import "GPBDescriptor_PackagePrivate.h"
#import "GPBDictionary_PackagePrivate.h"
-#import "GPBExtensionField.h"
-#import "GPBField.h"
#import "GPBMessage_PackagePrivate.h"
+#import "GPBUnknownField.h"
#import "GPBUnknownFieldSet.h"
static void AppendTextFormatForMessage(GPBMessage *message,
@@ -53,6 +52,15 @@ NSData *GPBEmptyNSData(void) {
return defaultNSData;
}
+void GPBCheckRuntimeVersionInternal(int32_t version) {
+ if (version != GOOGLE_PROTOBUF_OBJC_GEN_VERSION) {
+ [NSException raise:NSInternalInconsistencyException
+ format:@"Linked to ProtocolBuffer runtime version %d,"
+ @" but code compiled with version %d!",
+ GOOGLE_PROTOBUF_OBJC_GEN_VERSION, version];
+ }
+}
+
BOOL GPBMessageHasFieldNumberSet(GPBMessage *self, uint32_t fieldNumber) {
GPBDescriptor *descriptor = [self descriptor];
GPBFieldDescriptor *field = [descriptor fieldWithNumber:fieldNumber];
@@ -166,8 +174,8 @@ void GPBMaybeClearOneof(GPBMessage *self, GPBOneofDescriptor *oneof,
#pragma mark - IVar accessors
//%PDDM-DEFINE IVAR_POD_ACCESSORS_DEFN(NAME, TYPE)
-//%TYPE GPBGet##NAME##IvarWithField(GPBMessage *self,
-//% TYPE$S NAME$S GPBFieldDescriptor *field) {
+//%TYPE GPBGetMessage##NAME##Field(GPBMessage *self,
+//% TYPE$S NAME$S GPBFieldDescriptor *field) {
//% if (GPBGetHasIvarField(self, field)) {
//% uint8_t *storage = (uint8_t *)self->messageStorage_;
//% TYPE *typePtr = (TYPE *)&storage[field->description_->offset];
@@ -178,9 +186,9 @@ void GPBMaybeClearOneof(GPBMessage *self, GPBOneofDescriptor *oneof,
//%}
//%
//%// Only exists for public api, no core code should use this.
-//%void GPBSet##NAME##IvarWithField(GPBMessage *self,
-//% NAME$S GPBFieldDescriptor *field,
-//% NAME$S TYPE value) {
+//%void GPBSetMessage##NAME##Field(GPBMessage *self,
+//% NAME$S GPBFieldDescriptor *field,
+//% NAME$S TYPE value) {
//% if (self == nil || field == nil) return;
//% GPBFileSyntax syntax = [self descriptor].file.syntax;
//% GPBSet##NAME##IvarWithFieldInternal(self, field, value, syntax);
@@ -211,18 +219,18 @@ void GPBMaybeClearOneof(GPBMessage *self, GPBOneofDescriptor *oneof,
//% GPBBecomeVisibleToAutocreator(self);
//%}
//%
-//%PDDM-DEFINE IVAR_ALIAS_DEFN(NAME, ALIAS_NAME, TYPE, ALIAS_TYPE)
+//%PDDM-DEFINE IVAR_ALIAS_DEFN_OBJECT(NAME, TYPE)
//%// Only exists for public api, no core code should use this.
-//%TYPE GPBGet##NAME##IvarWithField(GPBMessage *self,
-//% TYPE$S NAME$S GPBFieldDescriptor *field) {
-//% return (TYPE)GPBGet##ALIAS_NAME##IvarWithField(self, field);
+//%TYPE *GPBGetMessage##NAME##Field(GPBMessage *self,
+//% TYPE$S NAME$S GPBFieldDescriptor *field) {
+//% return (TYPE *)GPBGetObjectIvarWithField(self, field);
//%}
//%
//%// Only exists for public api, no core code should use this.
-//%void GPBSet##NAME##IvarWithField(GPBMessage *self,
-//% NAME$S GPBFieldDescriptor *field,
-//% NAME$S TYPE value) {
-//% GPBSet##ALIAS_NAME##IvarWithField(self, field, (ALIAS_TYPE)value);
+//%void GPBSetMessage##NAME##Field(GPBMessage *self,
+//% NAME$S GPBFieldDescriptor *field,
+//% NAME$S TYPE *value) {
+//% GPBSetObjectIvarWithField(self, field, (id)value);
//%}
//%
@@ -252,8 +260,8 @@ void GPBClearAutocreatedMessageIvarWithField(GPBMessage *self,
}
// This exists only for briging some aliased types, nothing else should use it.
-GPB_INLINE void GPBSetObjectIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field, id value) {
+static void GPBSetObjectIvarWithField(GPBMessage *self,
+ GPBFieldDescriptor *field, id value) {
if (self == nil || field == nil) return;
GPBFileSyntax syntax = [self descriptor].file.syntax;
GPBSetRetainedObjectIvarWithFieldInternal(self, field, [value retain],
@@ -276,9 +284,9 @@ void GPBSetRetainedObjectIvarWithFieldInternal(GPBMessage *self,
#if defined(__clang_analyzer__)
if (self->messageStorage_ == NULL) return;
#endif
- GPBType fieldType = GPBGetFieldType(field);
+ GPBDataType fieldType = GPBGetFieldDataType(field);
BOOL isMapOrArray = GPBFieldIsMapOrArray(field);
- BOOL fieldIsMessage = GPBTypeIsMessage(fieldType);
+ BOOL fieldIsMessage = GPBDataTypeIsMessage(fieldType);
#ifdef DEBUG
if (value == nil && !isMapOrArray && !fieldIsMessage &&
field.hasDefaultValue) {
@@ -294,7 +302,7 @@ void GPBSetRetainedObjectIvarWithFieldInternal(GPBMessage *self,
// field, and fall back on the default value. The warning below will only
// appear in debug, but the could should be changed so the intention is
// clear.
- NSString *hasSel = NSStringFromSelector(field->hasSel_);
+ NSString *hasSel = NSStringFromSelector(field->hasOrCountSel_);
NSString *propName = field.name;
NSString *className = self.descriptor.name;
NSLog(@"warning: '%@.%@ = nil;' is not clearly defined for fields with "
@@ -302,7 +310,7 @@ void GPBSetRetainedObjectIvarWithFieldInternal(GPBMessage *self,
@"empty, or call '%@.%@ = NO' to reset it to it's default value of "
@"'%@'. Defaulting to resetting default value.",
className, propName, className, propName,
- (fieldType == GPBTypeString) ? @"@\"\"" : @"GPBEmptyNSData()",
+ (fieldType == GPBDataTypeString) ? @"@\"\"" : @"GPBEmptyNSData()",
className, hasSel, field.defaultValue.valueString);
// Note: valueString, depending on the type, it could easily be
// valueData/valueMessage.
@@ -317,9 +325,9 @@ void GPBSetRetainedObjectIvarWithFieldInternal(GPBMessage *self,
}
// Clear "has" if they are being set to nil.
BOOL setHasValue = (value != nil);
- // Under proto3, Data & String fields get cleared by resetting them to their
- // default (empty) values, so if they are set to something of length zero,
- // they are being cleared.
+ // Under proto3, Bytes & String fields get cleared by resetting them to
+ // their default (empty) values, so if they are set to something of length
+ // zero, they are being cleared.
if ((syntax == GPBFileSyntaxProto3) && !fieldIsMessage &&
([value length] == 0)) {
setHasValue = NO;
@@ -338,7 +346,7 @@ void GPBSetRetainedObjectIvarWithFieldInternal(GPBMessage *self,
if (isMapOrArray) {
if (field.fieldType == GPBFieldTypeRepeated) {
// If the old array was autocreated by us, then clear it.
- if (GPBTypeIsObject(fieldType)) {
+ if (GPBDataTypeIsObject(fieldType)) {
GPBAutocreatedArray *autoArray = oldValue;
if (autoArray->_autocreator == self) {
autoArray->_autocreator = nil;
@@ -352,8 +360,8 @@ void GPBSetRetainedObjectIvarWithFieldInternal(GPBMessage *self,
}
} else { // GPBFieldTypeMap
// If the old map was autocreated by us, then clear it.
- if ((field.mapKeyType == GPBTypeString) &&
- GPBTypeIsObject(fieldType)) {
+ if ((field.mapKeyDataType == GPBDataTypeString) &&
+ GPBDataTypeIsObject(fieldType)) {
GPBAutocreatedDictionary *autoDict = oldValue;
if (autoDict->_autocreator == self) {
autoDict->_autocreator = nil;
@@ -399,7 +407,7 @@ id GPBGetObjectIvarWithField(GPBMessage *self, GPBFieldDescriptor *field) {
// Not set...
// Non messages (string/data), get their default.
- if (!GPBFieldTypeIsMessage(field)) {
+ if (!GPBFieldDataTypeIsMessage(field)) {
return field.defaultValue.valueMessage;
}
@@ -417,7 +425,7 @@ id GPBGetObjectIvarWithField(GPBMessage *self, GPBFieldDescriptor *field) {
}
// Only exists for public api, no core code should use this.
-int32_t GPBGetEnumIvarWithField(GPBMessage *self, GPBFieldDescriptor *field) {
+int32_t GPBGetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field) {
GPBFileSyntax syntax = [self descriptor].file.syntax;
return GPBGetEnumIvarWithFieldInternal(self, field, syntax);
}
@@ -425,9 +433,9 @@ int32_t GPBGetEnumIvarWithField(GPBMessage *self, GPBFieldDescriptor *field) {
int32_t GPBGetEnumIvarWithFieldInternal(GPBMessage *self,
GPBFieldDescriptor *field,
GPBFileSyntax syntax) {
- int32_t result = GPBGetInt32IvarWithField(self, field);
- // If this is presevering unknown enums, make sure the value is
- // valid before returning it.
+ int32_t result = GPBGetMessageInt32Field(self, field);
+ // If this is presevering unknown enums, make sure the value is valid before
+ // returning it.
if (GPBHasPreservingUnknownEnumSemantics(syntax) &&
![field isValidEnumValue:result]) {
result = kGPBUnrecognizedEnumeratorValue;
@@ -436,8 +444,8 @@ int32_t GPBGetEnumIvarWithFieldInternal(GPBMessage *self,
}
// Only exists for public api, no core code should use this.
-void GPBSetEnumIvarWithField(GPBMessage *self, GPBFieldDescriptor *field,
- int32_t value) {
+void GPBSetMessageEnumField(GPBMessage *self, GPBFieldDescriptor *field,
+ int32_t value) {
GPBFileSyntax syntax = [self descriptor].file.syntax;
GPBSetInt32IvarWithFieldInternal(self, field, value, syntax);
}
@@ -454,11 +462,25 @@ void GPBSetEnumIvarWithFieldInternal(GPBMessage *self,
GPBSetInt32IvarWithFieldInternal(self, field, value, syntax);
}
+// Only exists for public api, no core code should use this.
+int32_t GPBGetMessageRawEnumField(GPBMessage *self,
+ GPBFieldDescriptor *field) {
+ int32_t result = GPBGetMessageInt32Field(self, field);
+ return result;
+}
+
+// Only exists for public api, no core code should use this.
+void GPBSetMessageRawEnumField(GPBMessage *self, GPBFieldDescriptor *field,
+ int32_t value) {
+ GPBFileSyntax syntax = [self descriptor].file.syntax;
+ GPBSetInt32IvarWithFieldInternal(self, field, value, syntax);
+}
+
//%PDDM-EXPAND IVAR_POD_ACCESSORS_DEFN(Bool, BOOL)
// This block of code is generated, do not edit it directly.
-BOOL GPBGetBoolIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
+BOOL GPBGetMessageBoolField(GPBMessage *self,
+ GPBFieldDescriptor *field) {
if (GPBGetHasIvarField(self, field)) {
uint8_t *storage = (uint8_t *)self->messageStorage_;
BOOL *typePtr = (BOOL *)&storage[field->description_->offset];
@@ -469,9 +491,9 @@ BOOL GPBGetBoolIvarWithField(GPBMessage *self,
}
// Only exists for public api, no core code should use this.
-void GPBSetBoolIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- BOOL value) {
+void GPBSetMessageBoolField(GPBMessage *self,
+ GPBFieldDescriptor *field,
+ BOOL value) {
if (self == nil || field == nil) return;
GPBFileSyntax syntax = [self descriptor].file.syntax;
GPBSetBoolIvarWithFieldInternal(self, field, value, syntax);
@@ -505,8 +527,8 @@ void GPBSetBoolIvarWithFieldInternal(GPBMessage *self,
//%PDDM-EXPAND IVAR_POD_ACCESSORS_DEFN(Int32, int32_t)
// This block of code is generated, do not edit it directly.
-int32_t GPBGetInt32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
+int32_t GPBGetMessageInt32Field(GPBMessage *self,
+ GPBFieldDescriptor *field) {
if (GPBGetHasIvarField(self, field)) {
uint8_t *storage = (uint8_t *)self->messageStorage_;
int32_t *typePtr = (int32_t *)&storage[field->description_->offset];
@@ -517,9 +539,9 @@ int32_t GPBGetInt32IvarWithField(GPBMessage *self,
}
// Only exists for public api, no core code should use this.
-void GPBSetInt32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- int32_t value) {
+void GPBSetMessageInt32Field(GPBMessage *self,
+ GPBFieldDescriptor *field,
+ int32_t value) {
if (self == nil || field == nil) return;
GPBFileSyntax syntax = [self descriptor].file.syntax;
GPBSetInt32IvarWithFieldInternal(self, field, value, syntax);
@@ -553,8 +575,8 @@ void GPBSetInt32IvarWithFieldInternal(GPBMessage *self,
//%PDDM-EXPAND IVAR_POD_ACCESSORS_DEFN(UInt32, uint32_t)
// This block of code is generated, do not edit it directly.
-uint32_t GPBGetUInt32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
+uint32_t GPBGetMessageUInt32Field(GPBMessage *self,
+ GPBFieldDescriptor *field) {
if (GPBGetHasIvarField(self, field)) {
uint8_t *storage = (uint8_t *)self->messageStorage_;
uint32_t *typePtr = (uint32_t *)&storage[field->description_->offset];
@@ -565,9 +587,9 @@ uint32_t GPBGetUInt32IvarWithField(GPBMessage *self,
}
// Only exists for public api, no core code should use this.
-void GPBSetUInt32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- uint32_t value) {
+void GPBSetMessageUInt32Field(GPBMessage *self,
+ GPBFieldDescriptor *field,
+ uint32_t value) {
if (self == nil || field == nil) return;
GPBFileSyntax syntax = [self descriptor].file.syntax;
GPBSetUInt32IvarWithFieldInternal(self, field, value, syntax);
@@ -601,8 +623,8 @@ void GPBSetUInt32IvarWithFieldInternal(GPBMessage *self,
//%PDDM-EXPAND IVAR_POD_ACCESSORS_DEFN(Int64, int64_t)
// This block of code is generated, do not edit it directly.
-int64_t GPBGetInt64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
+int64_t GPBGetMessageInt64Field(GPBMessage *self,
+ GPBFieldDescriptor *field) {
if (GPBGetHasIvarField(self, field)) {
uint8_t *storage = (uint8_t *)self->messageStorage_;
int64_t *typePtr = (int64_t *)&storage[field->description_->offset];
@@ -613,9 +635,9 @@ int64_t GPBGetInt64IvarWithField(GPBMessage *self,
}
// Only exists for public api, no core code should use this.
-void GPBSetInt64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- int64_t value) {
+void GPBSetMessageInt64Field(GPBMessage *self,
+ GPBFieldDescriptor *field,
+ int64_t value) {
if (self == nil || field == nil) return;
GPBFileSyntax syntax = [self descriptor].file.syntax;
GPBSetInt64IvarWithFieldInternal(self, field, value, syntax);
@@ -649,8 +671,8 @@ void GPBSetInt64IvarWithFieldInternal(GPBMessage *self,
//%PDDM-EXPAND IVAR_POD_ACCESSORS_DEFN(UInt64, uint64_t)
// This block of code is generated, do not edit it directly.
-uint64_t GPBGetUInt64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
+uint64_t GPBGetMessageUInt64Field(GPBMessage *self,
+ GPBFieldDescriptor *field) {
if (GPBGetHasIvarField(self, field)) {
uint8_t *storage = (uint8_t *)self->messageStorage_;
uint64_t *typePtr = (uint64_t *)&storage[field->description_->offset];
@@ -661,9 +683,9 @@ uint64_t GPBGetUInt64IvarWithField(GPBMessage *self,
}
// Only exists for public api, no core code should use this.
-void GPBSetUInt64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- uint64_t value) {
+void GPBSetMessageUInt64Field(GPBMessage *self,
+ GPBFieldDescriptor *field,
+ uint64_t value) {
if (self == nil || field == nil) return;
GPBFileSyntax syntax = [self descriptor].file.syntax;
GPBSetUInt64IvarWithFieldInternal(self, field, value, syntax);
@@ -697,8 +719,8 @@ void GPBSetUInt64IvarWithFieldInternal(GPBMessage *self,
//%PDDM-EXPAND IVAR_POD_ACCESSORS_DEFN(Float, float)
// This block of code is generated, do not edit it directly.
-float GPBGetFloatIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
+float GPBGetMessageFloatField(GPBMessage *self,
+ GPBFieldDescriptor *field) {
if (GPBGetHasIvarField(self, field)) {
uint8_t *storage = (uint8_t *)self->messageStorage_;
float *typePtr = (float *)&storage[field->description_->offset];
@@ -709,9 +731,9 @@ float GPBGetFloatIvarWithField(GPBMessage *self,
}
// Only exists for public api, no core code should use this.
-void GPBSetFloatIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- float value) {
+void GPBSetMessageFloatField(GPBMessage *self,
+ GPBFieldDescriptor *field,
+ float value) {
if (self == nil || field == nil) return;
GPBFileSyntax syntax = [self descriptor].file.syntax;
GPBSetFloatIvarWithFieldInternal(self, field, value, syntax);
@@ -745,8 +767,8 @@ void GPBSetFloatIvarWithFieldInternal(GPBMessage *self,
//%PDDM-EXPAND IVAR_POD_ACCESSORS_DEFN(Double, double)
// This block of code is generated, do not edit it directly.
-double GPBGetDoubleIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
+double GPBGetMessageDoubleField(GPBMessage *self,
+ GPBFieldDescriptor *field) {
if (GPBGetHasIvarField(self, field)) {
uint8_t *storage = (uint8_t *)self->messageStorage_;
double *typePtr = (double *)&storage[field->description_->offset];
@@ -757,9 +779,9 @@ double GPBGetDoubleIvarWithField(GPBMessage *self,
}
// Only exists for public api, no core code should use this.
-void GPBSetDoubleIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- double value) {
+void GPBSetMessageDoubleField(GPBMessage *self,
+ GPBFieldDescriptor *field,
+ double value) {
if (self == nil || field == nil) return;
GPBFileSyntax syntax = [self descriptor].file.syntax;
GPBSetDoubleIvarWithFieldInternal(self, field, value, syntax);
@@ -794,223 +816,225 @@ void GPBSetDoubleIvarWithFieldInternal(GPBMessage *self,
// Aliases are function calls that are virtually the same.
-//%PDDM-EXPAND IVAR_ALIAS_DEFN(SInt32, Int32, int32_t, int32_t)
-// This block of code is generated, do not edit it directly.
-
-// Only exists for public api, no core code should use this.
-int32_t GPBGetSInt32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
- return (int32_t)GPBGetInt32IvarWithField(self, field);
-}
-
-// Only exists for public api, no core code should use this.
-void GPBSetSInt32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- int32_t value) {
- GPBSetInt32IvarWithField(self, field, (int32_t)value);
-}
-
-//%PDDM-EXPAND IVAR_ALIAS_DEFN(SFixed32, Int32, int32_t, int32_t)
-// This block of code is generated, do not edit it directly.
-
-// Only exists for public api, no core code should use this.
-int32_t GPBGetSFixed32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
- return (int32_t)GPBGetInt32IvarWithField(self, field);
-}
-
-// Only exists for public api, no core code should use this.
-void GPBSetSFixed32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- int32_t value) {
- GPBSetInt32IvarWithField(self, field, (int32_t)value);
-}
-
-//%PDDM-EXPAND IVAR_ALIAS_DEFN(Fixed32, UInt32, uint32_t, uint32_t)
-// This block of code is generated, do not edit it directly.
-
-// Only exists for public api, no core code should use this.
-uint32_t GPBGetFixed32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
- return (uint32_t)GPBGetUInt32IvarWithField(self, field);
-}
-
-// Only exists for public api, no core code should use this.
-void GPBSetFixed32IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- uint32_t value) {
- GPBSetUInt32IvarWithField(self, field, (uint32_t)value);
-}
-
-//%PDDM-EXPAND IVAR_ALIAS_DEFN(SInt64, Int64, int64_t, int64_t)
+//%PDDM-EXPAND IVAR_ALIAS_DEFN_OBJECT(String, NSString)
// This block of code is generated, do not edit it directly.
// Only exists for public api, no core code should use this.
-int64_t GPBGetSInt64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
- return (int64_t)GPBGetInt64IvarWithField(self, field);
-}
-
-// Only exists for public api, no core code should use this.
-void GPBSetSInt64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- int64_t value) {
- GPBSetInt64IvarWithField(self, field, (int64_t)value);
-}
-
-//%PDDM-EXPAND IVAR_ALIAS_DEFN(SFixed64, Int64, int64_t, int64_t)
-// This block of code is generated, do not edit it directly.
-
-// Only exists for public api, no core code should use this.
-int64_t GPBGetSFixed64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
- return (int64_t)GPBGetInt64IvarWithField(self, field);
+NSString *GPBGetMessageStringField(GPBMessage *self,
+ GPBFieldDescriptor *field) {
+ return (NSString *)GPBGetObjectIvarWithField(self, field);
}
// Only exists for public api, no core code should use this.
-void GPBSetSFixed64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- int64_t value) {
- GPBSetInt64IvarWithField(self, field, (int64_t)value);
+void GPBSetMessageStringField(GPBMessage *self,
+ GPBFieldDescriptor *field,
+ NSString *value) {
+ GPBSetObjectIvarWithField(self, field, (id)value);
}
-//%PDDM-EXPAND IVAR_ALIAS_DEFN(Fixed64, UInt64, uint64_t, uint64_t)
+//%PDDM-EXPAND IVAR_ALIAS_DEFN_OBJECT(Bytes, NSData)
// This block of code is generated, do not edit it directly.
// Only exists for public api, no core code should use this.
-uint64_t GPBGetFixed64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
- return (uint64_t)GPBGetUInt64IvarWithField(self, field);
+NSData *GPBGetMessageBytesField(GPBMessage *self,
+ GPBFieldDescriptor *field) {
+ return (NSData *)GPBGetObjectIvarWithField(self, field);
}
// Only exists for public api, no core code should use this.
-void GPBSetFixed64IvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- uint64_t value) {
- GPBSetUInt64IvarWithField(self, field, (uint64_t)value);
+void GPBSetMessageBytesField(GPBMessage *self,
+ GPBFieldDescriptor *field,
+ NSData *value) {
+ GPBSetObjectIvarWithField(self, field, (id)value);
}
-//%PDDM-EXPAND IVAR_ALIAS_DEFN(String, Object, NSString*, id)
+//%PDDM-EXPAND IVAR_ALIAS_DEFN_OBJECT(Message, GPBMessage)
// This block of code is generated, do not edit it directly.
// Only exists for public api, no core code should use this.
-NSString* GPBGetStringIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
- return (NSString*)GPBGetObjectIvarWithField(self, field);
+GPBMessage *GPBGetMessageMessageField(GPBMessage *self,
+ GPBFieldDescriptor *field) {
+ return (GPBMessage *)GPBGetObjectIvarWithField(self, field);
}
// Only exists for public api, no core code should use this.
-void GPBSetStringIvarWithField(GPBMessage *self,
+void GPBSetMessageMessageField(GPBMessage *self,
GPBFieldDescriptor *field,
- NSString* value) {
+ GPBMessage *value) {
GPBSetObjectIvarWithField(self, field, (id)value);
}
-//%PDDM-EXPAND IVAR_ALIAS_DEFN(Data, Object, NSData*, id)
+//%PDDM-EXPAND IVAR_ALIAS_DEFN_OBJECT(Group, GPBMessage)
// This block of code is generated, do not edit it directly.
// Only exists for public api, no core code should use this.
-NSData* GPBGetDataIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
- return (NSData*)GPBGetObjectIvarWithField(self, field);
+GPBMessage *GPBGetMessageGroupField(GPBMessage *self,
+ GPBFieldDescriptor *field) {
+ return (GPBMessage *)GPBGetObjectIvarWithField(self, field);
}
// Only exists for public api, no core code should use this.
-void GPBSetDataIvarWithField(GPBMessage *self,
+void GPBSetMessageGroupField(GPBMessage *self,
GPBFieldDescriptor *field,
- NSData* value) {
+ GPBMessage *value) {
GPBSetObjectIvarWithField(self, field, (id)value);
}
-//%PDDM-EXPAND IVAR_ALIAS_DEFN(Message, Object, GPBMessage*, id)
-// This block of code is generated, do not edit it directly.
+//%PDDM-EXPAND-END (4 expansions)
// Only exists for public api, no core code should use this.
-GPBMessage* GPBGetMessageIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
- return (GPBMessage*)GPBGetObjectIvarWithField(self, field);
+id GPBGetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field) {
+#if DEBUG
+ if (field.fieldType != GPBFieldTypeRepeated) {
+ [NSException raise:NSInvalidArgumentException
+ format:@"%@.%@ is not a repeated field.",
+ [self class], field.name];
+ }
+#endif
+ return GPBGetObjectIvarWithField(self, field);
}
// Only exists for public api, no core code should use this.
-void GPBSetMessageIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- GPBMessage* value) {
- GPBSetObjectIvarWithField(self, field, (id)value);
+void GPBSetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field, id array) {
+#if DEBUG
+ if (field.fieldType != GPBFieldTypeRepeated) {
+ [NSException raise:NSInvalidArgumentException
+ format:@"%@.%@ is not a repeated field.",
+ [self class], field.name];
+ }
+ Class expectedClass = Nil;
+ switch (GPBGetFieldDataType(field)) {
+ case GPBDataTypeBool:
+ expectedClass = [GPBBoolArray class];
+ break;
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeInt32:
+ case GPBDataTypeSInt32:
+ expectedClass = [GPBInt32Array class];
+ break;
+ case GPBDataTypeFixed32:
+ case GPBDataTypeUInt32:
+ expectedClass = [GPBUInt32Array class];
+ break;
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeInt64:
+ case GPBDataTypeSInt64:
+ expectedClass = [GPBInt64Array class];
+ break;
+ case GPBDataTypeFixed64:
+ case GPBDataTypeUInt64:
+ expectedClass = [GPBUInt64Array class];
+ break;
+ case GPBDataTypeFloat:
+ expectedClass = [GPBFloatArray class];
+ break;
+ case GPBDataTypeDouble:
+ expectedClass = [GPBDoubleArray class];
+ break;
+ case GPBDataTypeBytes:
+ case GPBDataTypeString:
+ case GPBDataTypeMessage:
+ case GPBDataTypeGroup:
+ expectedClass = [NSMutableDictionary class];
+ break;
+ case GPBDataTypeEnum:
+ expectedClass = [GPBBoolArray class];
+ break;
+ }
+ if (array && ![array isKindOfClass:expectedClass]) {
+ [NSException raise:NSInvalidArgumentException
+ format:@"%@.%@: Expected %@ object, got %@.",
+ [self class], field.name, expectedClass, [array class]];
+ }
+#endif
+ GPBSetObjectIvarWithField(self, field, array);
+}
+
+#if DEBUG
+static NSString *TypeToStr(GPBDataType dataType) {
+ switch (dataType) {
+ case GPBDataTypeBool:
+ return @"Bool";
+ case GPBDataTypeSFixed32:
+ case GPBDataTypeInt32:
+ case GPBDataTypeSInt32:
+ return @"Int32";
+ case GPBDataTypeFixed32:
+ case GPBDataTypeUInt32:
+ return @"UInt32";
+ case GPBDataTypeSFixed64:
+ case GPBDataTypeInt64:
+ case GPBDataTypeSInt64:
+ return @"Int64";
+ case GPBDataTypeFixed64:
+ case GPBDataTypeUInt64:
+ return @"UInt64";
+ case GPBDataTypeFloat:
+ return @"Float";
+ case GPBDataTypeDouble:
+ return @"Double";
+ case GPBDataTypeBytes:
+ case GPBDataTypeString:
+ case GPBDataTypeMessage:
+ case GPBDataTypeGroup:
+ return @"Object";
+ case GPBDataTypeEnum:
+ return @"Bool";
+ }
}
-
-//%PDDM-EXPAND IVAR_ALIAS_DEFN(Group, Object, GPBMessage*, id)
-// This block of code is generated, do not edit it directly.
+#endif
// Only exists for public api, no core code should use this.
-GPBMessage* GPBGetGroupIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field) {
- return (GPBMessage*)GPBGetObjectIvarWithField(self, field);
+id GPBGetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field) {
+#if DEBUG
+ if (field.fieldType != GPBFieldTypeMap) {
+ [NSException raise:NSInvalidArgumentException
+ format:@"%@.%@ is not a map<> field.",
+ [self class], field.name];
+ }
+#endif
+ return GPBGetObjectIvarWithField(self, field);
}
// Only exists for public api, no core code should use this.
-void GPBSetGroupIvarWithField(GPBMessage *self,
- GPBFieldDescriptor *field,
- GPBMessage* value) {
- GPBSetObjectIvarWithField(self, field, (id)value);
-}
-
-//%PDDM-EXPAND-END (10 expansions)
-
-#pragma mark - Misc Dynamic Runtime Utils
-
-void GPBApplyFunctionsToMessageFields(GPBApplyFunctions *functions,
- GPBMessage *msg, void *context) {
- GPBDescriptor *descriptor = [[msg class] descriptor];
- for (GPBFieldDescriptor *field in descriptor->fields_) {
- BOOL wasGood;
- if (GPBFieldIsMapOrArray(field)) {
- wasGood = (*functions)[GPBApplyFunctionObject](field, context);
+void GPBSetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field,
+ id dictionary) {
+#if DEBUG
+ if (field.fieldType != GPBFieldTypeMap) {
+ [NSException raise:NSInvalidArgumentException
+ format:@"%@.%@ is not a map<> field.",
+ [self class], field.name];
+ }
+ if (dictionary) {
+ GPBDataType keyDataType = field.mapKeyDataType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ NSString *keyStr = TypeToStr(keyDataType);
+ NSString *valueStr = TypeToStr(valueDataType);
+ if (keyDataType == GPBDataTypeString) {
+ keyStr = @"String";
+ }
+ Class expectedClass = Nil;
+ if ((keyDataType == GPBDataTypeString) &&
+ GPBDataTypeIsObject(valueDataType)) {
+ expectedClass = [NSMutableDictionary class];
} else {
- wasGood = GPBApplyFunctionsBasedOnField(field, functions, context);
+ NSString *className =
+ [NSString stringWithFormat:@"GPB%@%@Dictionary", keyStr, valueStr];
+ expectedClass = NSClassFromString(className);
+ NSCAssert(expectedClass, @"Missing a class (%@)?", expectedClass);
}
- if (!wasGood) {
- break;
+ if (![dictionary isKindOfClass:expectedClass]) {
+ [NSException raise:NSInvalidArgumentException
+ format:@"%@.%@: Expected %@ object, got %@.",
+ [self class], field.name, expectedClass,
+ [dictionary class]];
}
}
+#endif
+ GPBSetObjectIvarWithField(self, field, dictionary);
}
-BOOL GPBApplyFunctionsBasedOnField(GPBFieldDescriptor *field,
- GPBApplyFunctions *functions,
- void *context) {
- static const GPBApplyFunctionOrder typeMap[GPBTypeCount] = {
- GPBApplyFunctionBool,
- GPBApplyFunctionUInt32,
- GPBApplyFunctionInt32,
- GPBApplyFunctionFloat,
- GPBApplyFunctionUInt64,
- GPBApplyFunctionInt64,
- GPBApplyFunctionDouble,
- GPBApplyFunctionInt32,
- GPBApplyFunctionInt64,
- GPBApplyFunctionInt32,
- GPBApplyFunctionInt64,
- GPBApplyFunctionUInt32,
- GPBApplyFunctionUInt64,
- GPBApplyFunctionObject,
- GPBApplyFunctionObject,
- GPBApplyFunctionObject,
- GPBApplyFunctionObject,
- GPBApplyFunctionInt32
- };
- return (*functions)[typeMap[GPBGetFieldType(field)]](field, context);
-}
-
-void GPBApplyStrictFunctionsToMessageFields(GPBApplyStrictFunctions *functions,
- GPBMessage *msg, void *context) {
- GPBDescriptor *descriptor = [[msg class] descriptor];
- for (GPBFieldDescriptor *fieldDescriptor in descriptor->fields_) {
- GPBApplyFunction function = (*functions)[GPBGetFieldType(fieldDescriptor)];
- BOOL wasGood = function(fieldDescriptor, context);
- if (!wasGood) {
- break;
- }
- }
-}
+#pragma mark - Misc Dynamic Runtime Utils
const char *GPBMessageEncodingForSelector(SEL selector, BOOL instanceSel) {
Protocol *protocol =
@@ -1072,9 +1096,9 @@ static void AppendBufferAsString(NSData *buffer, NSMutableString *destStr) {
static void AppendTextFormatForMapMessageField(
id map, GPBFieldDescriptor *field, NSMutableString *toStr,
NSString *lineIndent, NSString *fieldName, NSString *lineEnding) {
- GPBType keyType = field.mapKeyType;
- GPBType valueType = GPBGetFieldType(field);
- BOOL isMessageValue = GPBTypeIsMessage(valueType);
+ GPBDataType keyDataType = field.mapKeyDataType;
+ GPBDataType valueDataType = GPBGetFieldDataType(field);
+ BOOL isMessageValue = GPBDataTypeIsMessage(valueDataType);
NSString *msgStartFirst =
[NSString stringWithFormat:@"%@%@ {%@\n", lineIndent, fieldName, lineEnding];
@@ -1088,7 +1112,8 @@ static void AppendTextFormatForMapMessageField(
__block BOOL isFirst = YES;
- if ((keyType == GPBTypeString) && GPBTypeIsObject(valueType)) {
+ if ((keyDataType == GPBDataTypeString) &&
+ GPBDataTypeIsObject(valueDataType)) {
// map is an NSDictionary.
NSDictionary *dict = map;
[dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) {
@@ -1101,16 +1126,16 @@ static void AppendTextFormatForMapMessageField(
[toStr appendString:@"\n"];
[toStr appendString:valueLine];
- switch (valueType) {
- case GPBTypeString:
+ switch (valueDataType) {
+ case GPBDataTypeString:
AppendStringEscaped(value, toStr);
break;
- case GPBTypeData:
+ case GPBDataTypeBytes:
AppendBufferAsString(value, toStr);
break;
- case GPBTypeMessage:
+ case GPBDataTypeMessage:
[toStr appendString:@"{\n"];
NSString *subIndent = [lineIndent stringByAppendingString:@" "];
AppendTextFormatForMessage(value, toStr, subIndent);
@@ -1133,7 +1158,7 @@ static void AppendTextFormatForMapMessageField(
isFirst = NO;
// Key always is a NSString.
- if (keyType == GPBTypeString) {
+ if (keyDataType == GPBDataTypeString) {
[toStr appendString:keyLine];
AppendStringEscaped(keyObj, toStr);
[toStr appendString:@"\n"];
@@ -1142,23 +1167,23 @@ static void AppendTextFormatForMapMessageField(
}
[toStr appendString:valueLine];
- switch (valueType) {
- case GPBTypeString:
+ switch (valueDataType) {
+ case GPBDataTypeString:
AppendStringEscaped(valueObj, toStr);
break;
- case GPBTypeData:
+ case GPBDataTypeBytes:
AppendBufferAsString(valueObj, toStr);
break;
- case GPBTypeMessage:
+ case GPBDataTypeMessage:
[toStr appendString:@"{\n"];
NSString *subIndent = [lineIndent stringByAppendingString:@" "];
AppendTextFormatForMessage(valueObj, toStr, subIndent);
[toStr appendFormat:@"%@ }", lineIndent];
break;
- case GPBTypeEnum: {
+ case GPBDataTypeEnum: {
int32_t enumValue = [valueObj intValue];
NSString *valueStr = nil;
GPBEnumDescriptor *descriptor = field.enumDescriptor;
@@ -1174,7 +1199,7 @@ static void AppendTextFormatForMapMessageField(
}
default:
- NSCAssert(valueType != GPBTypeGroup, @"Can't happen");
+ NSCAssert(valueDataType != GPBDataTypeGroup, @"Can't happen");
// Everything else is a NSString.
[toStr appendString:valueObj];
break;
@@ -1245,8 +1270,8 @@ static void AppendTextFormatForMessageField(GPBMessage *message,
id array = arrayOrMap;
const BOOL isRepeated = (array != nil);
- GPBType fieldDataType = GPBGetFieldType(field);
- BOOL isMessageField = GPBTypeIsMessage(fieldDataType);
+ GPBDataType fieldDataType = GPBGetFieldDataType(field);
+ BOOL isMessageField = GPBDataTypeIsMessage(fieldDataType);
for (NSUInteger j = 0; j < count; ++j) {
// Start the line.
[toStr appendFormat:@"%@%@%s ", lineIndent, fieldName,
@@ -1254,12 +1279,12 @@ static void AppendTextFormatForMessageField(GPBMessage *message,
// The value.
switch (fieldDataType) {
-#define FIELD_CASE(GPBTYPE, CTYPE, ARRAY_TYPE, ...) \
- case GPBType##GPBTYPE: { \
- CTYPE v = (isRepeated ? [(GPB##ARRAY_TYPE##Array *)array valueAtIndex:j] \
- : GPBGet##GPBTYPE##IvarWithField(message, field)); \
- [toStr appendFormat:__VA_ARGS__, v]; \
- break; \
+#define FIELD_CASE(GPBDATATYPE, CTYPE, REAL_TYPE, ...) \
+ case GPBDataType##GPBDATATYPE: { \
+ CTYPE v = (isRepeated ? [(GPB##REAL_TYPE##Array *)array valueAtIndex:j] \
+ : GPBGetMessage##REAL_TYPE##Field(message, field)); \
+ [toStr appendFormat:__VA_ARGS__, v]; \
+ break; \
}
FIELD_CASE(Int32, int32_t, Int32, @"%d")
@@ -1277,9 +1302,9 @@ static void AppendTextFormatForMessageField(GPBMessage *message,
#undef FIELD_CASE
- case GPBTypeEnum: {
+ case GPBDataTypeEnum: {
int32_t v = (isRepeated ? [(GPBEnumArray *)array rawValueAtIndex:j]
- : GPBGetInt32IvarWithField(message, field));
+ : GPBGetMessageInt32Field(message, field));
NSString *valueStr = nil;
GPBEnumDescriptor *descriptor = field.enumDescriptor;
if (descriptor) {
@@ -1293,29 +1318,29 @@ static void AppendTextFormatForMessageField(GPBMessage *message,
break;
}
- case GPBTypeBool: {
+ case GPBDataTypeBool: {
BOOL v = (isRepeated ? [(GPBBoolArray *)array valueAtIndex:j]
- : GPBGetBoolIvarWithField(message, field));
+ : GPBGetMessageBoolField(message, field));
[toStr appendString:(v ? @"true" : @"false")];
break;
}
- case GPBTypeString: {
+ case GPBDataTypeString: {
NSString *v = (isRepeated ? [(NSArray *)array objectAtIndex:j]
- : GPBGetStringIvarWithField(message, field));
+ : GPBGetMessageStringField(message, field));
AppendStringEscaped(v, toStr);
break;
}
- case GPBTypeData: {
+ case GPBDataTypeBytes: {
NSData *v = (isRepeated ? [(NSArray *)array objectAtIndex:j]
- : GPBGetDataIvarWithField(message, field));
+ : GPBGetMessageBytesField(message, field));
AppendBufferAsString(v, toStr);
break;
}
- case GPBTypeGroup:
- case GPBTypeMessage: {
+ case GPBDataTypeGroup:
+ case GPBDataTypeMessage: {
GPBMessage *v =
(isRepeated ? [(NSArray *)array objectAtIndex:j]
: GPBGetObjectIvarWithField(message, field));
@@ -1342,7 +1367,7 @@ static void AppendTextFormatForMessageExtensionRange(GPBMessage *message,
NSString *lineIndent) {
uint32_t start = range.start;
uint32_t end = range.end;
- for (GPBExtensionField *extension in activeExtensions) {
+ for (GPBExtensionDescriptor *extension in activeExtensions) {
uint32_t fieldNumber = extension.fieldNumber;
if (fieldNumber < start) {
// Not there yet.
@@ -1354,8 +1379,7 @@ static void AppendTextFormatForMessageExtensionRange(GPBMessage *message,
}
id rawExtValue = [message getExtension:extension];
- GPBExtensionDescriptor *extDescriptor = [extension descriptor];
- BOOL isRepeated = extDescriptor.isRepeated;
+ BOOL isRepeated = extension.isRepeated;
NSUInteger numValues = 1;
NSString *lineEnding = @"";
@@ -1363,28 +1387,28 @@ static void AppendTextFormatForMessageExtensionRange(GPBMessage *message,
numValues = [(NSArray *)rawExtValue count];
}
- NSString *singletonName = extension.descriptor.singletonName;
+ NSString *singletonName = extension.singletonName;
if (numValues == 1) {
lineEnding = [NSString stringWithFormat:@" # [%@]", singletonName];
} else {
[toStr appendFormat:@"%@# [%@]\n", lineIndent, singletonName];
}
- GPBType extType = extDescriptor.type;
+ GPBDataType extDataType = extension.dataType;
for (NSUInteger j = 0; j < numValues; ++j) {
id curValue = (isRepeated ? [rawExtValue objectAtIndex:j] : rawExtValue);
// Start the line.
[toStr appendFormat:@"%@%u%s ", lineIndent, fieldNumber,
- (GPBTypeIsMessage(extType) ? "" : ":")];
+ (GPBDataTypeIsMessage(extDataType) ? "" : ":")];
// The value.
- switch (extType) {
-#define FIELD_CASE(GPBTYPE, CTYPE, NUMSELECTOR, ...) \
- case GPBType##GPBTYPE: { \
- CTYPE v = [(NSNumber *)curValue NUMSELECTOR]; \
- [toStr appendFormat:__VA_ARGS__, v]; \
- break; \
+ switch (extDataType) {
+#define FIELD_CASE(GPBDATATYPE, CTYPE, NUMSELECTOR, ...) \
+ case GPBDataType##GPBDATATYPE: { \
+ CTYPE v = [(NSNumber *)curValue NUMSELECTOR]; \
+ [toStr appendFormat:__VA_ARGS__, v]; \
+ break; \
}
FIELD_CASE(Int32, int32_t, intValue, @"%d")
@@ -1408,21 +1432,21 @@ static void AppendTextFormatForMessageExtensionRange(GPBMessage *message,
#undef FIELD_CASE
- case GPBTypeBool:
+ case GPBDataTypeBool:
[toStr appendString:([(NSNumber *)curValue boolValue] ? @"true"
: @"false")];
break;
- case GPBTypeString:
+ case GPBDataTypeString:
AppendStringEscaped(curValue, toStr);
break;
- case GPBTypeData:
+ case GPBDataTypeBytes:
AppendBufferAsString((NSData *)curValue, toStr);
break;
- case GPBTypeGroup:
- case GPBTypeMessage: {
+ case GPBDataTypeGroup:
+ case GPBDataTypeMessage: {
[toStr appendFormat:@"{%@\n", lineEnding];
NSString *subIndent = [lineIndent stringByAppendingString:@" "];
AppendTextFormatForMessage(curValue, toStr, subIndent);
@@ -1431,7 +1455,7 @@ static void AppendTextFormatForMessageExtensionRange(GPBMessage *message,
break;
}
- } // switch(extType)
+ } // switch(extDataType)
} // for(numValues)
@@ -1487,7 +1511,7 @@ NSString *GPBTextFormatForUnknownFieldSet(GPBUnknownFieldSet *unknownSet,
if (lineIndent == nil) lineIndent = @"";
NSMutableString *result = [NSMutableString string];
- for (GPBField *field in [unknownSet sortedFields]) {
+ for (GPBUnknownField *field in [unknownSet sortedFields]) {
int32_t fieldNumber = [field number];
#define PRINT_LOOP(PROPNAME, CTYPE, FORMAT) \
@@ -1527,13 +1551,13 @@ NSString *GPBTextFormatForUnknownFieldSet(GPBUnknownFieldSet *unknownSet,
// Helpers to decode a varint. Not using GPBCodedInputStream version because
// that needs a state object, and we don't want to create an input stream out
// of the data.
-static inline int8_t ReadRawByteFromData(const uint8_t **data) {
+GPB_INLINE int8_t ReadRawByteFromData(const uint8_t **data) {
int8_t result = *((int8_t *)(*data));
++(*data);
return result;
}
-static inline int32_t ReadRawVarint32FromData(const uint8_t **data) {
+static int32_t ReadRawVarint32FromData(const uint8_t **data) {
int8_t tmp = ReadRawByteFromData(data);
if (tmp >= 0) {
return tmp;
diff --git a/objectivec/GPBUtilities_PackagePrivate.h b/objectivec/GPBUtilities_PackagePrivate.h
index 1481d071..cac551f6 100644
--- a/objectivec/GPBUtilities_PackagePrivate.h
+++ b/objectivec/GPBUtilities_PackagePrivate.h
@@ -48,6 +48,15 @@
CF_EXTERN_C_BEGIN
+// These two are used to inject a runtime check for version mismatch into the
+// generated sources to make sure they are linked with a supporting runtime.
+void GPBCheckRuntimeVersionInternal(int32_t version);
+GPB_INLINE void GPBDebugCheckRuntimeVersion() {
+#if DEBUG
+ GPBCheckRuntimeVersionInternal(GOOGLE_PROTOBUF_OBJC_GEN_VERSION);
+#endif
+}
+
// Conversion functions for de/serializing floating point types.
GPB_INLINE int64_t GPBConvertDoubleToInt64(double v) {
@@ -116,40 +125,38 @@ GPB_INLINE uint64_t GPBEncodeZigZag64(int64_t n) {
return (n << 1) ^ (n >> 63);
}
-GPB_INLINE BOOL GPBTypeIsObject(GPBType type) {
+GPB_INLINE BOOL GPBDataTypeIsObject(GPBDataType type) {
switch (type) {
- case GPBTypeData:
- case GPBTypeString:
- case GPBTypeMessage:
- case GPBTypeGroup:
+ case GPBDataTypeBytes:
+ case GPBDataTypeString:
+ case GPBDataTypeMessage:
+ case GPBDataTypeGroup:
return YES;
default:
return NO;
}
}
-GPB_INLINE BOOL GPBTypeIsMessage(GPBType type) {
+GPB_INLINE BOOL GPBDataTypeIsMessage(GPBDataType type) {
switch (type) {
- case GPBTypeMessage:
- case GPBTypeGroup:
+ case GPBDataTypeMessage:
+ case GPBDataTypeGroup:
return YES;
default:
return NO;
}
}
-GPB_INLINE BOOL GPBTypeIsEnum(GPBType type) { return type == GPBTypeEnum; }
-
-GPB_INLINE BOOL GPBFieldTypeIsMessage(GPBFieldDescriptor *field) {
- return GPBTypeIsMessage(field->description_->type);
+GPB_INLINE BOOL GPBFieldDataTypeIsMessage(GPBFieldDescriptor *field) {
+ return GPBDataTypeIsMessage(field->description_->dataType);
}
-GPB_INLINE BOOL GPBFieldTypeIsObject(GPBFieldDescriptor *field) {
- return GPBTypeIsObject(field->description_->type);
+GPB_INLINE BOOL GPBFieldDataTypeIsObject(GPBFieldDescriptor *field) {
+ return GPBDataTypeIsObject(field->description_->dataType);
}
GPB_INLINE BOOL GPBExtensionIsMessage(GPBExtensionDescriptor *ext) {
- return GPBTypeIsMessage(ext->description_->type);
+ return GPBDataTypeIsMessage(ext->description_->dataType);
}
// The field is an array/map or it has an object value.
@@ -158,7 +165,7 @@ GPB_INLINE BOOL GPBFieldStoresObject(GPBFieldDescriptor *field) {
if ((desc->flags & (GPBFieldRepeated | GPBFieldMapKeyMask)) != 0) {
return YES;
}
- return GPBTypeIsObject(desc->type);
+ return GPBDataTypeIsObject(desc->dataType);
}
BOOL GPBGetHasIvar(GPBMessage *self, int32_t index, uint32_t fieldNumber);
@@ -272,109 +279,6 @@ void GPBSetAutocreatedRetainedObjectIvarWithField(
void GPBClearAutocreatedMessageIvarWithField(GPBMessage *self,
GPBFieldDescriptor *field);
-// Utilities for applying various functions based on Objective C types.
-
-// A basic functor that is passed a field and a context. Returns YES
-// if the calling function should continue processing, and NO if the calling
-// function should stop processing.
-typedef BOOL (*GPBApplyFunction)(GPBFieldDescriptor *field, void *context);
-
-// Functions called for various types. See ApplyFunctionsToMessageFields.
-typedef enum {
- GPBApplyFunctionObject,
- GPBApplyFunctionBool,
- GPBApplyFunctionInt32,
- GPBApplyFunctionUInt32,
- GPBApplyFunctionInt64,
- GPBApplyFunctionUInt64,
- GPBApplyFunctionFloat,
- GPBApplyFunctionDouble,
-} GPBApplyFunctionOrder;
-
-enum {
- // A count of the number of types in GPBApplyFunctionOrder. Separated out
- // from the GPBApplyFunctionOrder enum to avoid warnings regarding not
- // handling GPBApplyFunctionCount in switch statements.
- GPBApplyFunctionCount = GPBApplyFunctionDouble + 1
-};
-
-typedef GPBApplyFunction GPBApplyFunctions[GPBApplyFunctionCount];
-
-// Functions called for various types.
-// See ApplyStrictFunctionsToMessageFields.
-// They are in the same order as the GPBTypes enum.
-typedef GPBApplyFunction GPBApplyStrictFunctions[GPBTypeCount];
-
-// A macro for easily initializing a GPBApplyFunctions struct
-// GPBApplyFunctions foo = GPBAPPLY_FUNCTIONS_INIT(Foo);
-#define GPBAPPLY_FUNCTIONS_INIT(PREFIX) \
- { \
- PREFIX##Object, \
- PREFIX##Bool, \
- PREFIX##Int32, \
- PREFIX##UInt32, \
- PREFIX##Int64, \
- PREFIX##UInt64, \
- PREFIX##Float, \
- PREFIX##Double, \
- }
-
-// A macro for easily initializing a GPBApplyStrictFunctions struct
-// GPBApplyStrictFunctions foo = GPBAPPLY_STRICT_FUNCTIONS_INIT(Foo);
-// These need to stay in the same order as
-// the GPBType enum.
-#define GPBAPPLY_STRICT_FUNCTIONS_INIT(PREFIX) \
- { \
- PREFIX##Bool, \
- PREFIX##Fixed32, \
- PREFIX##SFixed32, \
- PREFIX##Float, \
- PREFIX##Fixed64, \
- PREFIX##SFixed64, \
- PREFIX##Double, \
- PREFIX##Int32, \
- PREFIX##Int64, \
- PREFIX##SInt32, \
- PREFIX##SInt64, \
- PREFIX##UInt32, \
- PREFIX##UInt64, \
- PREFIX##Data, \
- PREFIX##String, \
- PREFIX##Message, \
- PREFIX##Group, \
- PREFIX##Enum, \
-}
-
-// Iterates over the fields of a proto |msg| and applies the functions in
-// |functions| to them with |context|. If one of the functions in |functions|
-// returns NO, it will return immediately and not process the rest of the
-// ivars. The types in the fields are mapped so:
-// Int32, Enum, SInt32 and SFixed32 will be mapped to the int32Function,
-// UInt32 and Fixed32 will be mapped to the uint32Function,
-// Bytes, String, Message and Group will be mapped to the objectFunction,
-// etc..
-// If you require more specific mappings look at
-// GPBApplyStrictFunctionsToMessageFields.
-void GPBApplyFunctionsToMessageFields(GPBApplyFunctions *functions,
- GPBMessage *msg, void *context);
-
-// Iterates over the fields of a proto |msg| and applies the functions in
-// |functions| to them with |context|. If one of the functions in |functions|
-// returns NO, it will return immediately and not process the rest of the
-// ivars. The types in the fields are mapped directly:
-// Int32 -> functions[GPBTypeInt32],
-// SFixed32 -> functions[GPBTypeSFixed32],
-// etc...
-// If you can use looser mappings look at GPBApplyFunctionsToMessageFields.
-void GPBApplyStrictFunctionsToMessageFields(GPBApplyStrictFunctions *functions,
- GPBMessage *msg, void *context);
-
-// Applies the appropriate function in |functions| based on |field|.
-// Returns the value from function(name, context).
-// Throws an exception if the type is unrecognized.
-BOOL GPBApplyFunctionsBasedOnField(GPBFieldDescriptor *field,
- GPBApplyFunctions *functions, void *context);
-
// Returns an Objective C encoding for |selector|. |instanceSel| should be
// YES if it's an instance selector (as opposed to a class selector).
// |selector| must be a selector from MessageSignatureProtocol.
@@ -410,7 +314,7 @@ GPB_MESSAGE_SIGNATURE_ENTRY(int32_t, SInt32)
GPB_MESSAGE_SIGNATURE_ENTRY(int64_t, SInt64)
GPB_MESSAGE_SIGNATURE_ENTRY(uint32_t, UInt32)
GPB_MESSAGE_SIGNATURE_ENTRY(uint64_t, UInt64)
-GPB_MESSAGE_SIGNATURE_ENTRY(NSData *, Data)
+GPB_MESSAGE_SIGNATURE_ENTRY(NSData *, Bytes)
GPB_MESSAGE_SIGNATURE_ENTRY(NSString *, String)
GPB_MESSAGE_SIGNATURE_ENTRY(GPBMessage *, Message)
GPB_MESSAGE_SIGNATURE_ENTRY(GPBMessage *, Group)
@@ -419,6 +323,7 @@ GPB_MESSAGE_SIGNATURE_ENTRY(int32_t, Enum)
#undef GPB_MESSAGE_SIGNATURE_ENTRY
- (id)getArray;
+- (NSUInteger)getArrayCount;
- (void)setArray:(NSArray *)array;
+ (id)getClassValue;
@end
diff --git a/objectivec/GPBWireFormat.h b/objectivec/GPBWireFormat.h
index 55f2edfc..45089bd0 100644
--- a/objectivec/GPBWireFormat.h
+++ b/objectivec/GPBWireFormat.h
@@ -28,7 +28,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#import "GPBTypes.h"
+#import "GPBRuntimeTypes.h"
CF_EXTERN_C_BEGIN
@@ -52,7 +52,7 @@ uint32_t GPBWireFormatMakeTag(uint32_t fieldNumber, GPBWireFormat wireType)
GPBWireFormat GPBWireFormatGetTagWireType(uint32_t tag) __attribute__((const));
uint32_t GPBWireFormatGetTagFieldNumber(uint32_t tag) __attribute__((const));
-GPBWireFormat GPBWireFormatForType(GPBType type, BOOL isPacked)
+GPBWireFormat GPBWireFormatForType(GPBDataType dataType, BOOL isPacked)
__attribute__((const));
#define GPBWireFormatMessageSetItemTag \
diff --git a/objectivec/GPBWireFormat.m b/objectivec/GPBWireFormat.m
index 7435221f..193235d6 100644
--- a/objectivec/GPBWireFormat.m
+++ b/objectivec/GPBWireFormat.m
@@ -49,30 +49,30 @@ uint32_t GPBWireFormatGetTagFieldNumber(uint32_t tag) {
return GPBLogicalRightShift32(tag, GPBWireFormatTagTypeBits);
}
-GPBWireFormat GPBWireFormatForType(GPBType type, BOOL isPacked) {
+GPBWireFormat GPBWireFormatForType(GPBDataType type, BOOL isPacked) {
if (isPacked) {
return GPBWireFormatLengthDelimited;
}
- static const GPBWireFormat format[GPBTypeCount] = {
- GPBWireFormatVarint, // GPBTypeBool
- GPBWireFormatFixed32, // GPBTypeFixed32
- GPBWireFormatFixed32, // GPBTypeSFixed32
- GPBWireFormatFixed32, // GPBTypeFloat
- GPBWireFormatFixed64, // GPBTypeFixed64
- GPBWireFormatFixed64, // GPBTypeSFixed64
- GPBWireFormatFixed64, // GPBTypeDouble
- GPBWireFormatVarint, // GPBTypeInt32
- GPBWireFormatVarint, // GPBTypeInt64
- GPBWireFormatVarint, // GPBTypeSInt32
- GPBWireFormatVarint, // GPBTypeSInt64
- GPBWireFormatVarint, // GPBTypeUInt32
- GPBWireFormatVarint, // GPBTypeUInt64
- GPBWireFormatLengthDelimited, // GPBTypeBytes
- GPBWireFormatLengthDelimited, // GPBTypeString
- GPBWireFormatLengthDelimited, // GPBTypeMessage
- GPBWireFormatStartGroup, // GPBTypeGroup
- GPBWireFormatVarint // GPBTypeEnum
+ static const GPBWireFormat format[GPBDataType_Count] = {
+ GPBWireFormatVarint, // GPBDataTypeBool
+ GPBWireFormatFixed32, // GPBDataTypeFixed32
+ GPBWireFormatFixed32, // GPBDataTypeSFixed32
+ GPBWireFormatFixed32, // GPBDataTypeFloat
+ GPBWireFormatFixed64, // GPBDataTypeFixed64
+ GPBWireFormatFixed64, // GPBDataTypeSFixed64
+ GPBWireFormatFixed64, // GPBDataTypeDouble
+ GPBWireFormatVarint, // GPBDataTypeInt32
+ GPBWireFormatVarint, // GPBDataTypeInt64
+ GPBWireFormatVarint, // GPBDataTypeSInt32
+ GPBWireFormatVarint, // GPBDataTypeSInt64
+ GPBWireFormatVarint, // GPBDataTypeUInt32
+ GPBWireFormatVarint, // GPBDataTypeUInt64
+ GPBWireFormatLengthDelimited, // GPBDataTypeBytes
+ GPBWireFormatLengthDelimited, // GPBDataTypeString
+ GPBWireFormatLengthDelimited, // GPBDataTypeMessage
+ GPBWireFormatStartGroup, // GPBDataTypeGroup
+ GPBWireFormatVarint // GPBDataTypeEnum
};
return format[type];
}
diff --git a/objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj b/objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj
index f18ba2f8..b0a0712e 100644
--- a/objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj
+++ b/objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj
@@ -6,20 +6,6 @@
objectVersion = 47;
objects = {
-/* Begin PBXAggregateTarget section */
- 8BD3981414BE4AE70081D629 /* Compile_Protos */ = {
- isa = PBXAggregateTarget;
- buildConfigurationList = 8BD3981714BE4AE70081D629 /* Build configuration list for PBXAggregateTarget "Compile_Protos" */;
- buildPhases = (
- 8BD3981814BE4AF30081D629 /* ShellScript */,
- );
- dependencies = (
- );
- name = Compile_Protos;
- productName = Compile_Protos;
- };
-/* End PBXAggregateTarget section */
-
/* Begin PBXBuildFile section */
2CFB390415C718CE00CBF84D /* Descriptor.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */; };
5102DABC1891A073002037B6 /* GPBConcurrencyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5102DABB1891A052002037B6 /* GPBConcurrencyTests.m */; };
@@ -27,7 +13,7 @@
7461B53C0F94FB4E00A0C422 /* GPBCodedInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B48F0F94F99000A0C422 /* GPBCodedInputStream.m */; };
7461B53D0F94FB4E00A0C422 /* GPBCodedOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4910F94F99000A0C422 /* GPBCodedOutputStream.m */; };
7461B5490F94FB4E00A0C422 /* GPBExtensionRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4A90F94F99000A0C422 /* GPBExtensionRegistry.m */; };
- 7461B54C0F94FB4E00A0C422 /* GPBField.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4AF0F94F99000A0C422 /* GPBField.m */; };
+ 7461B54C0F94FB4E00A0C422 /* GPBUnknownField.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4AF0F94F99000A0C422 /* GPBUnknownField.m */; };
7461B5530F94FB4E00A0C422 /* GPBMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4BF0F94F99000A0C422 /* GPBMessage.m */; };
7461B5610F94FB4E00A0C422 /* GPBUnknownFieldSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4E20F94F99000A0C422 /* GPBUnknownFieldSet.m */; };
7461B5630F94FB4E00A0C422 /* GPBUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4E60F94F99000A0C422 /* GPBUtilities.m */; };
@@ -51,7 +37,6 @@
8BBEA4B7147C727D00C4ADB7 /* GPBUtilitiesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B6BA0F94FDF900A0C422 /* GPBUtilitiesTests.m */; };
8BBEA4B8147C727D00C4ADB7 /* GPBWireFormatTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B6BC0F94FDF900A0C422 /* GPBWireFormatTests.m */; };
8BBEA4BB147C729200C4ADB7 /* libProtocolBuffers.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7461B52E0F94FAF800A0C422 /* libProtocolBuffers.a */; };
- 8BCC29BF16FD09A000F29F4A /* GPBFilteredMessageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BCC29BE16FD09A000F29F4A /* GPBFilteredMessageTests.m */; };
8BD3981F14BE59D70081D629 /* GPBUnittestProtos.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD3981E14BE59D70081D629 /* GPBUnittestProtos.m */; };
8BF8193514A0DDA600A2C982 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
F401DC2D1A8D444600FCC765 /* GPBArray.m in Sources */ = {isa = PBXBuildFile; fileRef = F401DC2B1A8D444600FCC765 /* GPBArray.m */; };
@@ -71,8 +56,24 @@
F4487C751AADF7F500531423 /* GPBMessageTests+Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C741AADF7F500531423 /* GPBMessageTests+Runtime.m */; };
F4487C7F1AAF62CD00531423 /* GPBMessageTests+Serialization.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C7E1AAF62CD00531423 /* GPBMessageTests+Serialization.m */; };
F4487C831AAF6AB300531423 /* GPBMessageTests+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C821AAF6AB300531423 /* GPBMessageTests+Merge.m */; };
- F45C69CC16DFD08D0081955B /* GPBExtensionField.m in Sources */ = {isa = PBXBuildFile; fileRef = F45C69CB16DFD08D0081955B /* GPBExtensionField.m */; };
+ F45C69CC16DFD08D0081955B /* GPBExtensionInternals.m in Sources */ = {isa = PBXBuildFile; fileRef = F45C69CB16DFD08D0081955B /* GPBExtensionInternals.m */; };
F45E57C71AE6DC6A000B7D99 /* text_format_map_unittest_data.txt in Resources */ = {isa = PBXBuildFile; fileRef = F45E57C61AE6DC6A000B7D99 /* text_format_map_unittest_data.txt */; };
+ F4E675971B21D0000054530B /* Any.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675871B21D0000054530B /* Any.pbobjc.m */; };
+ F4E675991B21D0000054530B /* Api.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675891B21D0000054530B /* Api.pbobjc.m */; };
+ F4E6759B1B21D0000054530B /* Empty.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E6758B1B21D0000054530B /* Empty.pbobjc.m */; };
+ F4E6759D1B21D0000054530B /* FieldMask.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E6758D1B21D0000054530B /* FieldMask.pbobjc.m */; };
+ F4E6759F1B21D0000054530B /* SourceContext.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E6758F1B21D0000054530B /* SourceContext.pbobjc.m */; };
+ F4E675A11B21D0000054530B /* Struct.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675911B21D0000054530B /* Struct.pbobjc.m */; };
+ F4E675A31B21D0000054530B /* Type.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675931B21D0000054530B /* Type.pbobjc.m */; };
+ F4E675A51B21D0000054530B /* Wrappers.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675951B21D0000054530B /* Wrappers.pbobjc.m */; };
+ F4E675AE1B21D0A70054530B /* Any.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675871B21D0000054530B /* Any.pbobjc.m */; };
+ F4E675AF1B21D0A70054530B /* Api.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675891B21D0000054530B /* Api.pbobjc.m */; };
+ F4E675B01B21D0A70054530B /* Empty.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E6758B1B21D0000054530B /* Empty.pbobjc.m */; };
+ F4E675B11B21D0A70054530B /* FieldMask.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E6758D1B21D0000054530B /* FieldMask.pbobjc.m */; };
+ F4E675B21B21D0A70054530B /* SourceContext.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E6758F1B21D0000054530B /* SourceContext.pbobjc.m */; };
+ F4E675B31B21D0A70054530B /* Struct.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675911B21D0000054530B /* Struct.pbobjc.m */; };
+ F4E675B41B21D0A70054530B /* Type.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675931B21D0000054530B /* Type.pbobjc.m */; };
+ F4E675B51B21D0A70054530B /* Wrappers.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675951B21D0000054530B /* Wrappers.pbobjc.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -83,12 +84,12 @@
remoteGlobalIDString = 7461B52D0F94FAF800A0C422;
remoteInfo = ProtocolBuffers;
};
- 8BD3982014BE59EB0081D629 /* PBXContainerItemProxy */ = {
+ F45BBC181B0CE3D7002D064D /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 8BD3981414BE4AE70081D629;
- remoteInfo = Compile_Protos;
+ remoteGlobalIDString = F45BBC141B0CE3C6002D064D;
+ remoteInfo = "Compile Unittest Protos";
};
/* End PBXContainerItemProxy section */
@@ -106,8 +107,8 @@
7461B4910F94F99000A0C422 /* GPBCodedOutputStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBCodedOutputStream.m; sourceTree = "<group>"; };
7461B4A80F94F99000A0C422 /* GPBExtensionRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBExtensionRegistry.h; sourceTree = "<group>"; };
7461B4A90F94F99000A0C422 /* GPBExtensionRegistry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBExtensionRegistry.m; sourceTree = "<group>"; };
- 7461B4AE0F94F99000A0C422 /* GPBField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBField.h; sourceTree = "<group>"; };
- 7461B4AF0F94F99000A0C422 /* GPBField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBField.m; sourceTree = "<group>"; };
+ 7461B4AE0F94F99000A0C422 /* GPBUnknownField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBUnknownField.h; sourceTree = "<group>"; };
+ 7461B4AF0F94F99000A0C422 /* GPBUnknownField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnknownField.m; sourceTree = "<group>"; };
7461B4BE0F94F99000A0C422 /* GPBMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBMessage.h; sourceTree = "<group>"; };
7461B4BF0F94F99000A0C422 /* GPBMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBMessage.m; sourceTree = "<group>"; };
7461B4CD0F94F99000A0C422 /* GPBProtocolBuffers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBProtocolBuffers.h; sourceTree = "<group>"; };
@@ -126,10 +127,7 @@
7461B6B80F94FDF900A0C422 /* GPBUnknownFieldSetTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnknownFieldSetTest.m; sourceTree = "<group>"; };
7461B6BA0F94FDF900A0C422 /* GPBUtilitiesTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUtilitiesTests.m; sourceTree = "<group>"; };
7461B6BC0F94FDF900A0C422 /* GPBWireFormatTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBWireFormatTests.m; sourceTree = "<group>"; };
- 748F0CAF0FD70602000858A9 /* GPBExtensionField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBExtensionField.h; sourceTree = "<group>"; };
8B09AAF614B663A7007B4184 /* unittest_objc.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_objc.proto; sourceTree = "<group>"; };
- 8B20A9A816F1BBFA00BE3EAD /* Filter1.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Filter1.txt; sourceTree = "<group>"; };
- 8B20A9A916F1BC0600BE3EAD /* unittest_filter.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_filter.proto; sourceTree = "<group>"; };
8B210CCD159383D60032D72D /* golden_message */ = {isa = PBXFileReference; lastKnownFileType = file; path = golden_message; sourceTree = "<group>"; };
8B210CCF159386920032D72D /* golden_packed_fields_message */ = {isa = PBXFileReference; lastKnownFileType = file; path = golden_packed_fields_message; sourceTree = "<group>"; };
8B4248B81A8C254000BC1EC6 /* protobuf */ = {isa = PBXFileReference; lastKnownFileType = text; name = protobuf; path = ../../Intermediates/ProtocolBuffers_OSX.build/DerivedSources/protos/google/protobuf; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -162,12 +160,11 @@
8BA9364418DA5F4B0056FA2A /* GPBStringTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBStringTests.m; sourceTree = "<group>"; };
8BBD9DB016DD1DC8008E1EC1 /* unittest_lite.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = unittest_lite.proto; path = ../../src/google/protobuf/unittest_lite.proto; sourceTree = "<group>"; };
8BBEA4A6147C727100C4ADB7 /* UnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- 8BCC29BE16FD09A000F29F4A /* GPBFilteredMessageTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBFilteredMessageTests.m; sourceTree = "<group>"; };
8BCF338814ED799900BC5317 /* GPBProtocolBuffers.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GPBProtocolBuffers.m; sourceTree = "<group>"; };
8BD3981D14BE54220081D629 /* unittest_enormous_descriptor.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = unittest_enormous_descriptor.proto; path = ../../src/google/protobuf/unittest_enormous_descriptor.proto; sourceTree = "<group>"; };
8BD3981E14BE59D70081D629 /* GPBUnittestProtos.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnittestProtos.m; sourceTree = "<group>"; };
8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Descriptor.pbobjc.m; path = google/protobuf/Descriptor.pbobjc.m; sourceTree = SOURCE_ROOT; };
- 8BEB5AE01498033E0078BF9D /* GPBTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBTypes.h; sourceTree = "<group>"; };
+ 8BEB5AE01498033E0078BF9D /* GPBRuntimeTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBRuntimeTypes.h; sourceTree = "<group>"; };
F401DC2A1A8D444600FCC765 /* GPBArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBArray.h; sourceTree = "<group>"; };
F401DC2B1A8D444600FCC765 /* GPBArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBArray.m; sourceTree = "<group>"; };
F401DC321A8E5C0200FCC765 /* GPBArrayTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBArrayTests.m; sourceTree = "<group>"; };
@@ -192,16 +189,39 @@
F4487C7C1AAE06AC00531423 /* GPBUtilities_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBUtilities_PackagePrivate.h; sourceTree = "<group>"; };
F4487C7E1AAF62CD00531423 /* GPBMessageTests+Serialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GPBMessageTests+Serialization.m"; sourceTree = "<group>"; };
F4487C821AAF6AB300531423 /* GPBMessageTests+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GPBMessageTests+Merge.m"; sourceTree = "<group>"; };
- F44B25D81A729803005CCF68 /* Filter2.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Filter2.txt; sourceTree = "<group>"; };
F451D3F51A8AAE8700B8A22C /* GPBProtocolBuffers_RuntimeSupport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBProtocolBuffers_RuntimeSupport.h; sourceTree = "<group>"; };
- F45C69CB16DFD08D0081955B /* GPBExtensionField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBExtensionField.m; sourceTree = "<group>"; };
+ F45C69CB16DFD08D0081955B /* GPBExtensionInternals.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBExtensionInternals.m; sourceTree = "<group>"; };
F45E57C61AE6DC6A000B7D99 /* text_format_map_unittest_data.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = text_format_map_unittest_data.txt; sourceTree = "<group>"; };
F4AC9E1D1A8BEB3500BD6E83 /* unittest_cycle.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_cycle.proto; sourceTree = "<group>"; };
- F4B6B8AF1A9CC98000892426 /* GPBField_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBField_PackagePrivate.h; sourceTree = "<group>"; };
+ F4B6B8AF1A9CC98000892426 /* GPBUnknownField_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBUnknownField_PackagePrivate.h; sourceTree = "<group>"; };
F4B6B8B21A9CCBDA00892426 /* GPBUnknownFieldSet_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBUnknownFieldSet_PackagePrivate.h; sourceTree = "<group>"; };
- F4B6B8B61A9CD1DE00892426 /* GPBExtensionField_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBExtensionField_PackagePrivate.h; sourceTree = "<group>"; };
+ F4B6B8B61A9CD1DE00892426 /* GPBExtensionInternals.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBExtensionInternals.h; sourceTree = "<group>"; };
F4B6B8B81A9CD1DE00892426 /* GPBRootObject_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBRootObject_PackagePrivate.h; sourceTree = "<group>"; };
- F4B6B8B91A9D338B00892426 /* unittest_name_mangling.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_name_mangling.proto; sourceTree = "<group>"; };
+ F4CF31701B162ED800BD9B06 /* unittest_objc_startup.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_objc_startup.proto; sourceTree = "<group>"; };
+ F4E675861B21D0000054530B /* Any.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Any.pbobjc.h; path = google/protobuf/Any.pbobjc.h; sourceTree = "<group>"; };
+ F4E675871B21D0000054530B /* Any.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Any.pbobjc.m; path = google/protobuf/Any.pbobjc.m; sourceTree = "<group>"; };
+ F4E675881B21D0000054530B /* Api.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Api.pbobjc.h; path = google/protobuf/Api.pbobjc.h; sourceTree = "<group>"; };
+ F4E675891B21D0000054530B /* Api.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Api.pbobjc.m; path = google/protobuf/Api.pbobjc.m; sourceTree = "<group>"; };
+ F4E6758A1B21D0000054530B /* Empty.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Empty.pbobjc.h; path = google/protobuf/Empty.pbobjc.h; sourceTree = "<group>"; };
+ F4E6758B1B21D0000054530B /* Empty.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Empty.pbobjc.m; path = google/protobuf/Empty.pbobjc.m; sourceTree = "<group>"; };
+ F4E6758C1B21D0000054530B /* FieldMask.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FieldMask.pbobjc.h; path = google/protobuf/FieldMask.pbobjc.h; sourceTree = "<group>"; };
+ F4E6758D1B21D0000054530B /* FieldMask.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FieldMask.pbobjc.m; path = google/protobuf/FieldMask.pbobjc.m; sourceTree = "<group>"; };
+ F4E6758E1B21D0000054530B /* SourceContext.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SourceContext.pbobjc.h; path = google/protobuf/SourceContext.pbobjc.h; sourceTree = "<group>"; };
+ F4E6758F1B21D0000054530B /* SourceContext.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SourceContext.pbobjc.m; path = google/protobuf/SourceContext.pbobjc.m; sourceTree = "<group>"; };
+ F4E675901B21D0000054530B /* Struct.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Struct.pbobjc.h; path = google/protobuf/Struct.pbobjc.h; sourceTree = "<group>"; };
+ F4E675911B21D0000054530B /* Struct.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Struct.pbobjc.m; path = google/protobuf/Struct.pbobjc.m; sourceTree = "<group>"; };
+ F4E675921B21D0000054530B /* Type.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Type.pbobjc.h; path = google/protobuf/Type.pbobjc.h; sourceTree = "<group>"; };
+ F4E675931B21D0000054530B /* Type.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Type.pbobjc.m; path = google/protobuf/Type.pbobjc.m; sourceTree = "<group>"; };
+ F4E675941B21D0000054530B /* Wrappers.pbobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Wrappers.pbobjc.h; path = google/protobuf/Wrappers.pbobjc.h; sourceTree = "<group>"; };
+ F4E675951B21D0000054530B /* Wrappers.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Wrappers.pbobjc.m; path = google/protobuf/Wrappers.pbobjc.m; sourceTree = "<group>"; };
+ F4E675A61B21D05C0054530B /* any.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = any.proto; path = ../src/google/protobuf/any.proto; sourceTree = "<group>"; };
+ F4E675A71B21D05C0054530B /* api.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = api.proto; path = ../src/google/protobuf/api.proto; sourceTree = "<group>"; };
+ F4E675A81B21D05C0054530B /* empty.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = empty.proto; path = ../src/google/protobuf/empty.proto; sourceTree = "<group>"; };
+ F4E675A91B21D05C0054530B /* field_mask.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = field_mask.proto; path = ../src/google/protobuf/field_mask.proto; sourceTree = "<group>"; };
+ F4E675AA1B21D05C0054530B /* source_context.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = source_context.proto; path = ../src/google/protobuf/source_context.proto; sourceTree = "<group>"; };
+ F4E675AB1B21D05C0054530B /* struct.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = struct.proto; path = ../src/google/protobuf/struct.proto; sourceTree = "<group>"; };
+ F4E675AC1B21D05C0054530B /* type.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = type.proto; path = ../src/google/protobuf/type.proto; sourceTree = "<group>"; };
+ F4E675AD1B21D05C0054530B /* wrappers.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = wrappers.proto; path = ../src/google/protobuf/wrappers.proto; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -273,15 +293,39 @@
29B97315FDCFA39411CA2CEA /* Generated */ = {
isa = PBXGroup;
children = (
- 8B42494B1A92A16600BC1EC6 /* descriptor.proto */,
- 8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */,
+ F4E675861B21D0000054530B /* Any.pbobjc.h */,
+ F4E675871B21D0000054530B /* Any.pbobjc.m */,
+ F4E675A61B21D05C0054530B /* any.proto */,
+ F4E675881B21D0000054530B /* Api.pbobjc.h */,
+ F4E675891B21D0000054530B /* Api.pbobjc.m */,
+ F4E675A71B21D05C0054530B /* api.proto */,
8B54585814DCC34E003D7338 /* Descriptor.pbobjc.h */,
- 8B42494C1A92A16600BC1EC6 /* duration.proto */,
+ 8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */,
+ 8B42494B1A92A16600BC1EC6 /* descriptor.proto */,
8B4248D31A92826400BC1EC6 /* Duration.pbobjc.h */,
8B4248D41A92826400BC1EC6 /* Duration.pbobjc.m */,
- 8B42494D1A92A16600BC1EC6 /* timestamp.proto */,
+ 8B42494C1A92A16600BC1EC6 /* duration.proto */,
+ F4E6758A1B21D0000054530B /* Empty.pbobjc.h */,
+ F4E6758B1B21D0000054530B /* Empty.pbobjc.m */,
+ F4E675A81B21D05C0054530B /* empty.proto */,
+ F4E675A91B21D05C0054530B /* field_mask.proto */,
+ F4E6758C1B21D0000054530B /* FieldMask.pbobjc.h */,
+ F4E6758D1B21D0000054530B /* FieldMask.pbobjc.m */,
+ F4E675AA1B21D05C0054530B /* source_context.proto */,
+ F4E6758E1B21D0000054530B /* SourceContext.pbobjc.h */,
+ F4E6758F1B21D0000054530B /* SourceContext.pbobjc.m */,
+ F4E675901B21D0000054530B /* Struct.pbobjc.h */,
+ F4E675911B21D0000054530B /* Struct.pbobjc.m */,
+ F4E675AB1B21D05C0054530B /* struct.proto */,
8B4248D51A92826400BC1EC6 /* Timestamp.pbobjc.h */,
8B4248D61A92826400BC1EC6 /* Timestamp.pbobjc.m */,
+ 8B42494D1A92A16600BC1EC6 /* timestamp.proto */,
+ F4E675921B21D0000054530B /* Type.pbobjc.h */,
+ F4E675931B21D0000054530B /* Type.pbobjc.m */,
+ F4E675AC1B21D05C0054530B /* type.proto */,
+ F4E675941B21D0000054530B /* Wrappers.pbobjc.h */,
+ F4E675951B21D0000054530B /* Wrappers.pbobjc.m */,
+ F4E675AD1B21D05C0054530B /* wrappers.proto */,
);
name = Generated;
sourceTree = "<group>";
@@ -297,9 +341,8 @@
7461B3C50F94F84100A0C422 /* Extensions */ = {
isa = PBXGroup;
children = (
- F4B6B8B61A9CD1DE00892426 /* GPBExtensionField_PackagePrivate.h */,
- 748F0CAF0FD70602000858A9 /* GPBExtensionField.h */,
- F45C69CB16DFD08D0081955B /* GPBExtensionField.m */,
+ F4B6B8B61A9CD1DE00892426 /* GPBExtensionInternals.h */,
+ F45C69CB16DFD08D0081955B /* GPBExtensionInternals.m */,
7461B4A80F94F99000A0C422 /* GPBExtensionRegistry.h */,
7461B4A90F94F99000A0C422 /* GPBExtensionRegistry.m */,
F4B6B8B81A9CD1DE00892426 /* GPBRootObject_PackagePrivate.h */,
@@ -312,9 +355,9 @@
7461B4850F94F96600A0C422 /* Fields */ = {
isa = PBXGroup;
children = (
- F4B6B8AF1A9CC98000892426 /* GPBField_PackagePrivate.h */,
- 7461B4AE0F94F99000A0C422 /* GPBField.h */,
- 7461B4AF0F94F99000A0C422 /* GPBField.m */,
+ F4B6B8AF1A9CC98000892426 /* GPBUnknownField_PackagePrivate.h */,
+ 7461B4AE0F94F99000A0C422 /* GPBUnknownField.h */,
+ 7461B4AF0F94F99000A0C422 /* GPBUnknownField.m */,
F4B6B8B21A9CCBDA00892426 /* GPBUnknownFieldSet_PackagePrivate.h */,
7461B4E10F94F99000A0C422 /* GPBUnknownFieldSet.h */,
7461B4E20F94F99000A0C422 /* GPBUnknownFieldSet.m */,
@@ -353,8 +396,6 @@
isa = PBXGroup;
children = (
8B4248B81A8C254000BC1EC6 /* protobuf */,
- 8B20A9A816F1BBFA00BE3EAD /* Filter1.txt */,
- F44B25D81A729803005CCF68 /* Filter2.txt */,
8B210CCD159383D60032D72D /* golden_message */,
8B210CCF159386920032D72D /* golden_packed_fields_message */,
8B8B615C17DF7056002EE618 /* GPBARCUnittestProtos.m */,
@@ -370,7 +411,6 @@
F4353D301AC06F10005A6198 /* GPBDictionaryTests+String.m */,
F4353D311AC06F10005A6198 /* GPBDictionaryTests+UInt32.m */,
F4353D321AC06F10005A6198 /* GPBDictionaryTests+UInt64.m */,
- 8BCC29BE16FD09A000F29F4A /* GPBFilteredMessageTests.m */,
7461B6A30F94FDF800A0C422 /* GPBMessageTests.m */,
F4487C821AAF6AB300531423 /* GPBMessageTests+Merge.m */,
F4487C741AADF7F500531423 /* GPBMessageTests+Runtime.m */,
@@ -392,13 +432,12 @@
8B7E6A7514893DBA00F8884A /* unittest_embed_optimize_for.proto */,
8B7E6A7614893DBA00F8884A /* unittest_empty.proto */,
8BD3981D14BE54220081D629 /* unittest_enormous_descriptor.proto */,
- 8B20A9A916F1BC0600BE3EAD /* unittest_filter.proto */,
8B7E6A7814893DBB00F8884A /* unittest_import.proto */,
8BBD9DB016DD1DC8008E1EC1 /* unittest_lite.proto */,
8B7E6A7B14893DBC00F8884A /* unittest_mset.proto */,
- F4B6B8B91A9D338B00892426 /* unittest_name_mangling.proto */,
8B7E6A7C14893DBC00F8884A /* unittest_no_generic_services.proto */,
8B09AAF614B663A7007B4184 /* unittest_objc.proto */,
+ F4CF31701B162ED800BD9B06 /* unittest_objc_startup.proto */,
8B7E6A7D14893DBC00F8884A /* unittest_optimize_for.proto */,
F4487C781AADFB3100531423 /* unittest_runtime_proto2.proto */,
F4487C791AADFB3200531423 /* unittest_runtime_proto3.proto */,
@@ -419,7 +458,7 @@
F43725911AC9832D004DCAFB /* GPBDictionary_PackagePrivate.h */,
F4353D201ABB1537005A6198 /* GPBDictionary.h */,
F4353D211ABB1537005A6198 /* GPBDictionary.m */,
- 8BEB5AE01498033E0078BF9D /* GPBTypes.h */,
+ 8BEB5AE01498033E0078BF9D /* GPBRuntimeTypes.h */,
F4487C7C1AAE06AC00531423 /* GPBUtilities_PackagePrivate.h */,
7461B4E50F94F99000A0C422 /* GPBUtilities.h */,
7461B4E60F94F99000A0C422 /* GPBUtilities.m */,
@@ -448,6 +487,22 @@
};
/* End PBXHeadersBuildPhase section */
+/* Begin PBXLegacyTarget section */
+ F45BBC141B0CE3C6002D064D /* Compile Unittest Protos */ = {
+ isa = PBXLegacyTarget;
+ buildArgumentsString = "$(ACTION)";
+ buildConfigurationList = F45BBC171B0CE3C6002D064D /* Build configuration list for PBXLegacyTarget "Compile Unittest Protos" */;
+ buildPhases = (
+ );
+ buildToolPath = DevTools/compile_testing_protos.sh;
+ dependencies = (
+ );
+ name = "Compile Unittest Protos";
+ passBuildSettingsInEnvironment = 1;
+ productName = "Compile Unittest Protos";
+ };
+/* End PBXLegacyTarget section */
+
/* Begin PBXNativeTarget section */
7461B52D0F94FAF800A0C422 /* ProtocolBuffers */ = {
isa = PBXNativeTarget;
@@ -479,7 +534,7 @@
);
dependencies = (
8BBEA4BD147C729A00C4ADB7 /* PBXTargetDependency */,
- 8BD3982114BE59EB0081D629 /* PBXTargetDependency */,
+ F45BBC191B0CE3D7002D064D /* PBXTargetDependency */,
);
name = UnitTests;
productName = UnitTests;
@@ -510,11 +565,14 @@
isa = PBXProject;
attributes = {
LastTestingUpgradeCheck = 0600;
- LastUpgradeCheck = 0620;
+ LastUpgradeCheck = 0630;
TargetAttributes = {
8BBEA4A5147C727100C4ADB7 = {
TestTargetID = 8B9A5EA41831993600A9D33B;
};
+ F45BBC141B0CE3C6002D064D = {
+ CreatedOnToolsVersion = 6.3.2;
+ };
};
};
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ProtocolBuffers_OSX" */;
@@ -530,8 +588,8 @@
targets = (
7461B52D0F94FAF800A0C422 /* ProtocolBuffers */,
8BBEA4A5147C727100C4ADB7 /* UnitTests */,
- 8BD3981414BE4AE70081D629 /* Compile_Protos */,
F4487C381A9F8E0200531423 /* TestSingleSourceBuild */,
+ F45BBC141B0CE3C6002D064D /* Compile Unittest Protos */,
);
};
/* End PBXProject section */
@@ -551,51 +609,6 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
- 8BD3981814BE4AF30081D629 /* ShellScript */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "$(SRCROOT)/../src/google/protobuf/unittest_custom_options.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_embed_optimize_for.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_empty.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_enormous_descriptor.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_import_lite.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_import.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_lite_imports_nonlite.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_lite.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_mset.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_no_generic_services.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest.proto",
- "$(SRCROOT)/Tests/unittest_objc.proto",
- "$(SRCROOT)/../src/.libs/libprotoc.10.dylib",
- "$(SRCROOT)/../src/google/protobuf/unittest_import_public_lite.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_import_public.proto",
- "$(SRCROOT)/Tests/unittest_filter.proto",
- "$(SRCROOT)/../src/.libs/libprotobuf.10.dylib",
- "$(SRCROOT)/../src/.libs/protoc",
- "$(SRCROOT)/Tests/Filter1.txt",
- "$(SRCROOT)/Tests/Filter2.txt",
- "$(SRCROOT)/Tests/unittest_cycle.proto",
- "$(SRCROOT)/Tests/unittest_name_mangling.proto",
- "$(SRCROOT)/Tests/unittest_runtime_proto2.proto",
- "$(SRCROOT)/Tests/unittest_runtime_proto3.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_drop_unknown_fields.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_preserve_unknown_enum.proto",
- "$(SRCROOT)/../src/google/protobuf/map_lite_unittest.proto",
- "$(SRCROOT)/../src/google/protobuf/map_proto2_unittest.proto",
- "$(SRCROOT)/../src/google/protobuf/map_unittest.proto",
- );
- outputPaths = (
- "$(PROJECT_DERIVED_FILE_DIR)/protos/google/protobuf/Unittest.pbobjc.h",
- "$(PROJECT_DERIVED_FILE_DIR)/protos/google/protobuf/Unittest.pbobjc.m",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/bash;
- shellScript = "set -eu\nmkdir -p \"${PROJECT_DERIVED_FILE_DIR}/protos\"\nexport PATH=\"${PATH}:.\"\ncd \"${SRCROOT}\"/../src\n\nPROTOC=./protoc\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_custom_options.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_enormous_descriptor.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_embed_optimize_for.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_empty.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import_lite.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_lite.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_mset.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_no_generic_services.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_optimize_for.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import_public.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import_public_lite.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_drop_unknown_fields.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_preserve_unknown_enum.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/map_lite_unittest.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/map_proto2_unittest.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/map_unittest.proto\n\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_objc.proto\n\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_cycle.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_name_mangling.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_runtime_proto2.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_runtime_proto3.proto\n\n# Use the filter\nexport GPB_OBJC_CLASS_WHITELIST_PATHS=\"${SRCROOT}/Tests/Filter1.txt;${SRCROOT}/Tests/Filter2.txt\"\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_filter.proto\n\n";
- showEnvVarsInLog = 0;
- };
F4B62A781AF91F6000AFCEDC /* Script: Check Runtime Stamps */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -620,19 +633,27 @@
files = (
2CFB390415C718CE00CBF84D /* Descriptor.pbobjc.m in Sources */,
7461B53C0F94FB4E00A0C422 /* GPBCodedInputStream.m in Sources */,
+ F4E6759B1B21D0000054530B /* Empty.pbobjc.m in Sources */,
7461B53D0F94FB4E00A0C422 /* GPBCodedOutputStream.m in Sources */,
F401DC2D1A8D444600FCC765 /* GPBArray.m in Sources */,
7461B5490F94FB4E00A0C422 /* GPBExtensionRegistry.m in Sources */,
- 7461B54C0F94FB4E00A0C422 /* GPBField.m in Sources */,
+ F4E6759D1B21D0000054530B /* FieldMask.pbobjc.m in Sources */,
+ 7461B54C0F94FB4E00A0C422 /* GPBUnknownField.m in Sources */,
7461B5530F94FB4E00A0C422 /* GPBMessage.m in Sources */,
7461B5610F94FB4E00A0C422 /* GPBUnknownFieldSet.m in Sources */,
7461B5630F94FB4E00A0C422 /* GPBUtilities.m in Sources */,
7461B5640F94FB4E00A0C422 /* GPBWireFormat.m in Sources */,
+ F4E675991B21D0000054530B /* Api.pbobjc.m in Sources */,
+ F4E6759F1B21D0000054530B /* SourceContext.pbobjc.m in Sources */,
F4353D231ABB1537005A6198 /* GPBDictionary.m in Sources */,
8B79657B14992E3F002FFBFC /* GPBRootObject.m in Sources */,
8B96157414C8C38C00A2AC0B /* GPBDescriptor.m in Sources */,
- F45C69CC16DFD08D0081955B /* GPBExtensionField.m in Sources */,
+ F4E675971B21D0000054530B /* Any.pbobjc.m in Sources */,
+ F45C69CC16DFD08D0081955B /* GPBExtensionInternals.m in Sources */,
8B4248D21A927E1500BC1EC6 /* GPBWellKnownTypes.m in Sources */,
+ F4E675A31B21D0000054530B /* Type.pbobjc.m in Sources */,
+ F4E675A11B21D0000054530B /* Struct.pbobjc.m in Sources */,
+ F4E675A51B21D0000054530B /* Wrappers.pbobjc.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -645,12 +666,18 @@
F4353D361AC06F10005A6198 /* GPBDictionaryTests+Int64.m in Sources */,
F4353D391AC06F10005A6198 /* GPBDictionaryTests+UInt64.m in Sources */,
8BBEA4AA147C727D00C4ADB7 /* GPBCodedOuputStreamTests.m in Sources */,
+ F4E675B21B21D0A70054530B /* SourceContext.pbobjc.m in Sources */,
8BBEA4AC147C727D00C4ADB7 /* GPBMessageTests.m in Sources */,
F4487C7F1AAF62CD00531423 /* GPBMessageTests+Serialization.m in Sources */,
8B4248DC1A92933A00BC1EC6 /* GPBWellKnownTypesTest.m in Sources */,
+ F4E675B01B21D0A70054530B /* Empty.pbobjc.m in Sources */,
+ F4E675B41B21D0A70054530B /* Type.pbobjc.m in Sources */,
F4353D1D1AB8822D005A6198 /* GPBDescriptorTests.m in Sources */,
+ F4E675B51B21D0A70054530B /* Wrappers.pbobjc.m in Sources */,
+ F4E675AE1B21D0A70054530B /* Any.pbobjc.m in Sources */,
8B4248BB1A8C256A00BC1EC6 /* GPBSwiftTests.swift in Sources */,
5102DABC1891A073002037B6 /* GPBConcurrencyTests.m in Sources */,
+ F4E675B31B21D0A70054530B /* Struct.pbobjc.m in Sources */,
F4487C751AADF7F500531423 /* GPBMessageTests+Runtime.m in Sources */,
F4353D351AC06F10005A6198 /* GPBDictionaryTests+Int32.m in Sources */,
8BBEA4B0147C727D00C4ADB7 /* GPBTestUtilities.m in Sources */,
@@ -665,9 +692,10 @@
8BBEA4B8147C727D00C4ADB7 /* GPBWireFormatTests.m in Sources */,
8B79657D14992E3F002FFBFC /* GPBRootObject.m in Sources */,
8BD3981F14BE59D70081D629 /* GPBUnittestProtos.m in Sources */,
+ F4E675B11B21D0A70054530B /* FieldMask.pbobjc.m in Sources */,
8B96157514CA019D00A2AC0B /* Descriptor.pbobjc.m in Sources */,
- 8BCC29BF16FD09A000F29F4A /* GPBFilteredMessageTests.m in Sources */,
8B8B615D17DF7056002EE618 /* GPBARCUnittestProtos.m in Sources */,
+ F4E675AF1B21D0A70054530B /* Api.pbobjc.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -687,10 +715,10 @@
target = 7461B52D0F94FAF800A0C422 /* ProtocolBuffers */;
targetProxy = 8BBEA4BC147C729A00C4ADB7 /* PBXContainerItemProxy */;
};
- 8BD3982114BE59EB0081D629 /* PBXTargetDependency */ = {
+ F45BBC191B0CE3D7002D064D /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 8BD3981414BE4AE70081D629 /* Compile_Protos */;
- targetProxy = 8BD3982014BE59EB0081D629 /* PBXContainerItemProxy */;
+ target = F45BBC141B0CE3C6002D064D /* Compile Unittest Protos */;
+ targetProxy = F45BBC181B0CE3D7002D064D /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
@@ -746,20 +774,6 @@
};
name = Release;
};
- 8BD3981514BE4AE70081D629 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Debug;
- };
- 8BD3981614BE4AE70081D629 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Release;
- };
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -864,6 +878,18 @@
};
name = Release;
};
+ F45BBC151B0CE3C6002D064D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = Debug;
+ };
+ F45BBC161B0CE3C6002D064D /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = Release;
+ };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@@ -885,15 +911,6 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 8BD3981714BE4AE70081D629 /* Build configuration list for PBXAggregateTarget "Compile_Protos" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 8BD3981514BE4AE70081D629 /* Debug */,
- 8BD3981614BE4AE70081D629 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ProtocolBuffers_OSX" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -912,6 +929,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ F45BBC171B0CE3C6002D064D /* Build configuration list for PBXLegacyTarget "Compile Unittest Protos" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F45BBC151B0CE3C6002D064D /* Debug */,
+ F45BBC161B0CE3C6002D064D /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
diff --git a/objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme b/objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme
index 7083f5e3..3b3eeb12 100644
--- a/objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme
+++ b/objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
- LastUpgradeVersion = "0620"
+ LastUpgradeVersion = "0630"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@@ -39,9 +39,6 @@
</BuildableReference>
<SkippedTests>
<Test
- Identifier = "ArrayTests">
- </Test>
- <Test
Identifier = "CodedInputStreamTests">
</Test>
<Test
@@ -51,16 +48,223 @@
Identifier = "ConcurrencyTests">
</Test>
<Test
- Identifier = "FilteredMessageTests">
+ Identifier = "DescriptorTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolBoolDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolDoubleDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolFloatDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolInt64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolObjectDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolUInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolUInt64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBridgeTests">
+ </Test>
+ <Test
+ Identifier = "GPBDoubleArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBEnumArrayCustomTests">
+ </Test>
+ <Test
+ Identifier = "GPBEnumArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBFloatArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32ArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32BoolDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32DoubleDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32EnumDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32EnumDictionaryUnknownEnumTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32FloatDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32Int32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32Int64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32ObjectDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32UInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32UInt64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64ArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64BoolDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64DoubleDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64EnumDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64EnumDictionaryUnknownEnumTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64FloatDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64Int32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64Int64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64ObjectDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64UInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64UInt64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringBoolDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringDoubleDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringEnumDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringEnumDictionaryUnknownEnumTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringFloatDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringInt64DictionaryTests">
</Test>
<Test
Identifier = "GPBStringTests">
</Test>
<Test
+ Identifier = "GPBStringUInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringUInt64DictionaryTests">
+ </Test>
+ <Test
Identifier = "GPBTestCase">
</Test>
<Test
- Identifier = "GeneratedMessageTests">
+ Identifier = "GPBUInt32ArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32BoolDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32DoubleDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32EnumDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32EnumDictionaryUnknownEnumTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32FloatDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32Int32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32Int64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32ObjectDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32UInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32UInt64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64ArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64BoolDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64DoubleDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64EnumDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64EnumDictionaryUnknownEnumTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64FloatDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64Int32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64Int64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64ObjectDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64UInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64UInt64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "MessageMergeTests">
+ </Test>
+ <Test
+ Identifier = "MessageRuntimeTests">
+ </Test>
+ <Test
+ Identifier = "MessageSerializationTests">
</Test>
<Test
Identifier = "MessageTests">
@@ -72,6 +276,9 @@
Identifier = "UtilitiesTests">
</Test>
<Test
+ Identifier = "WellKnownTypesTest">
+ </Test>
+ <Test
Identifier = "WireFormatTests">
</Test>
</SkippedTests>
diff --git a/objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme b/objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme
index 617fb47f..583a464a 100644
--- a/objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme
+++ b/objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
- LastUpgradeVersion = "0620"
+ LastUpgradeVersion = "0630"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
diff --git a/objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj b/objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj
index d6e621e6..23e9f169 100644
--- a/objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj
+++ b/objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj
@@ -6,20 +6,6 @@
objectVersion = 47;
objects = {
-/* Begin PBXAggregateTarget section */
- 8BD3981414BE4AE70081D629 /* Compile_Protos */ = {
- isa = PBXAggregateTarget;
- buildConfigurationList = 8BD3981714BE4AE70081D629 /* Build configuration list for PBXAggregateTarget "Compile_Protos" */;
- buildPhases = (
- 8BD3981814BE4AF30081D629 /* ShellScript */,
- );
- dependencies = (
- );
- name = Compile_Protos;
- productName = Compile_Protos;
- };
-/* End PBXAggregateTarget section */
-
/* Begin PBXBuildFile section */
2CFB390415C718CE00CBF84D /* Descriptor.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */; };
5102DABC1891A073002037B6 /* GPBConcurrencyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5102DABB1891A052002037B6 /* GPBConcurrencyTests.m */; };
@@ -27,7 +13,7 @@
7461B53C0F94FB4E00A0C422 /* GPBCodedInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B48F0F94F99000A0C422 /* GPBCodedInputStream.m */; };
7461B53D0F94FB4E00A0C422 /* GPBCodedOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4910F94F99000A0C422 /* GPBCodedOutputStream.m */; };
7461B5490F94FB4E00A0C422 /* GPBExtensionRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4A90F94F99000A0C422 /* GPBExtensionRegistry.m */; };
- 7461B54C0F94FB4E00A0C422 /* GPBField.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4AF0F94F99000A0C422 /* GPBField.m */; };
+ 7461B54C0F94FB4E00A0C422 /* GPBUnknownField.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4AF0F94F99000A0C422 /* GPBUnknownField.m */; };
7461B5530F94FB4E00A0C422 /* GPBMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4BF0F94F99000A0C422 /* GPBMessage.m */; };
7461B5610F94FB4E00A0C422 /* GPBUnknownFieldSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4E20F94F99000A0C422 /* GPBUnknownFieldSet.m */; };
7461B5630F94FB4E00A0C422 /* GPBUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B4E60F94F99000A0C422 /* GPBUtilities.m */; };
@@ -59,7 +45,6 @@
8BBEA4B7147C727D00C4ADB7 /* GPBUtilitiesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B6BA0F94FDF900A0C422 /* GPBUtilitiesTests.m */; };
8BBEA4B8147C727D00C4ADB7 /* GPBWireFormatTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7461B6BC0F94FDF900A0C422 /* GPBWireFormatTests.m */; };
8BBEA4BB147C729200C4ADB7 /* libProtocolBuffers.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7461B52E0F94FAF800A0C422 /* libProtocolBuffers.a */; };
- 8BCC29BF16FD09A000F29F4A /* GPBFilteredMessageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BCC29BE16FD09A000F29F4A /* GPBFilteredMessageTests.m */; };
8BD3981F14BE59D70081D629 /* GPBUnittestProtos.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD3981E14BE59D70081D629 /* GPBUnittestProtos.m */; };
8BF8193514A0DDA600A2C982 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
F401DC351A8E5C6F00FCC765 /* GPBArrayTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F401DC341A8E5C6F00FCC765 /* GPBArrayTests.m */; };
@@ -73,15 +58,30 @@
F4353D461AC06F31005A6198 /* GPBDictionaryTests+UInt32.m in Sources */ = {isa = PBXBuildFile; fileRef = F4353D3F1AC06F31005A6198 /* GPBDictionaryTests+UInt32.m */; };
F4353D471AC06F31005A6198 /* GPBDictionaryTests+UInt64.m in Sources */ = {isa = PBXBuildFile; fileRef = F4353D401AC06F31005A6198 /* GPBDictionaryTests+UInt64.m */; };
F43C88D0191D77FC009E917D /* text_format_unittest_data.txt in Resources */ = {isa = PBXBuildFile; fileRef = F43C88CF191D77FC009E917D /* text_format_unittest_data.txt */; };
- F4487C5B1A9F8F8100531423 /* Descriptor.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */; };
F4487C6A1A9F8F8100531423 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
F4487C6F1A9F8FFF00531423 /* GPBProtocolBuffers.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BCF338814ED799900BC5317 /* GPBProtocolBuffers.m */; };
F4487C731A9F906200531423 /* GPBArray.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C711A9F906200531423 /* GPBArray.m */; };
F4487C771AADF84900531423 /* GPBMessageTests+Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C761AADF84900531423 /* GPBMessageTests+Runtime.m */; };
F4487C811AAF62FC00531423 /* GPBMessageTests+Serialization.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C801AAF62FC00531423 /* GPBMessageTests+Serialization.m */; };
F4487C851AAF6AC500531423 /* GPBMessageTests+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = F4487C841AAF6AC500531423 /* GPBMessageTests+Merge.m */; };
- F45C69CC16DFD08D0081955B /* GPBExtensionField.m in Sources */ = {isa = PBXBuildFile; fileRef = F45C69CB16DFD08D0081955B /* GPBExtensionField.m */; };
+ F45C69CC16DFD08D0081955B /* GPBExtensionInternals.m in Sources */ = {isa = PBXBuildFile; fileRef = F45C69CB16DFD08D0081955B /* GPBExtensionInternals.m */; };
F45E57C91AE6DC98000B7D99 /* text_format_map_unittest_data.txt in Resources */ = {isa = PBXBuildFile; fileRef = F45E57C81AE6DC98000B7D99 /* text_format_map_unittest_data.txt */; };
+ F4E675C81B21D1610054530B /* Any.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675B71B21D1440054530B /* Any.pbobjc.m */; };
+ F4E675C91B21D1610054530B /* Api.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675B91B21D1440054530B /* Api.pbobjc.m */; };
+ F4E675CA1B21D1610054530B /* Empty.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675BC1B21D1440054530B /* Empty.pbobjc.m */; };
+ F4E675CB1B21D1610054530B /* FieldMask.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675BE1B21D1440054530B /* FieldMask.pbobjc.m */; };
+ F4E675CC1B21D1610054530B /* SourceContext.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C01B21D1440054530B /* SourceContext.pbobjc.m */; };
+ F4E675CD1B21D1610054530B /* Struct.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C21B21D1440054530B /* Struct.pbobjc.m */; };
+ F4E675CE1B21D1610054530B /* Type.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C51B21D1440054530B /* Type.pbobjc.m */; };
+ F4E675CF1B21D1610054530B /* Wrappers.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C71B21D1440054530B /* Wrappers.pbobjc.m */; };
+ F4E675D01B21D1620054530B /* Any.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675B71B21D1440054530B /* Any.pbobjc.m */; };
+ F4E675D11B21D1620054530B /* Api.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675B91B21D1440054530B /* Api.pbobjc.m */; };
+ F4E675D21B21D1620054530B /* Empty.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675BC1B21D1440054530B /* Empty.pbobjc.m */; };
+ F4E675D31B21D1620054530B /* FieldMask.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675BE1B21D1440054530B /* FieldMask.pbobjc.m */; };
+ F4E675D41B21D1620054530B /* SourceContext.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C01B21D1440054530B /* SourceContext.pbobjc.m */; };
+ F4E675D51B21D1620054530B /* Struct.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C21B21D1440054530B /* Struct.pbobjc.m */; };
+ F4E675D61B21D1620054530B /* Type.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C51B21D1440054530B /* Type.pbobjc.m */; };
+ F4E675D71B21D1620054530B /* Wrappers.pbobjc.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E675C71B21D1440054530B /* Wrappers.pbobjc.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -99,12 +99,12 @@
remoteGlobalIDString = 7461B52D0F94FAF800A0C422;
remoteInfo = ProtocolBuffers;
};
- 8BD3982014BE59EB0081D629 /* PBXContainerItemProxy */ = {
+ F45BBC121B0CDBBA002D064D /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 8BD3981414BE4AE70081D629;
- remoteInfo = Compile_Protos;
+ remoteGlobalIDString = F45BBC0E1B0CDB50002D064D;
+ remoteInfo = "Compile Unittest Protos";
};
/* End PBXContainerItemProxy section */
@@ -122,8 +122,8 @@
7461B4910F94F99000A0C422 /* GPBCodedOutputStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBCodedOutputStream.m; sourceTree = "<group>"; };
7461B4A80F94F99000A0C422 /* GPBExtensionRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBExtensionRegistry.h; sourceTree = "<group>"; };
7461B4A90F94F99000A0C422 /* GPBExtensionRegistry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBExtensionRegistry.m; sourceTree = "<group>"; };
- 7461B4AE0F94F99000A0C422 /* GPBField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBField.h; sourceTree = "<group>"; };
- 7461B4AF0F94F99000A0C422 /* GPBField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBField.m; sourceTree = "<group>"; };
+ 7461B4AE0F94F99000A0C422 /* GPBUnknownField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBUnknownField.h; sourceTree = "<group>"; };
+ 7461B4AF0F94F99000A0C422 /* GPBUnknownField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnknownField.m; sourceTree = "<group>"; };
7461B4BE0F94F99000A0C422 /* GPBMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBMessage.h; sourceTree = "<group>"; };
7461B4BF0F94F99000A0C422 /* GPBMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBMessage.m; sourceTree = "<group>"; };
7461B4CD0F94F99000A0C422 /* GPBProtocolBuffers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBProtocolBuffers.h; sourceTree = "<group>"; };
@@ -142,10 +142,7 @@
7461B6B80F94FDF900A0C422 /* GPBUnknownFieldSetTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnknownFieldSetTest.m; sourceTree = "<group>"; };
7461B6BA0F94FDF900A0C422 /* GPBUtilitiesTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUtilitiesTests.m; sourceTree = "<group>"; };
7461B6BC0F94FDF900A0C422 /* GPBWireFormatTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBWireFormatTests.m; sourceTree = "<group>"; };
- 748F0CAF0FD70602000858A9 /* GPBExtensionField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBExtensionField.h; sourceTree = "<group>"; };
8B09AAF614B663A7007B4184 /* unittest_objc.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_objc.proto; sourceTree = "<group>"; };
- 8B20A9A816F1BBFA00BE3EAD /* Filter1.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Filter1.txt; sourceTree = "<group>"; };
- 8B20A9A916F1BC0600BE3EAD /* unittest_filter.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_filter.proto; sourceTree = "<group>"; };
8B210CCD159383D60032D72D /* golden_message */ = {isa = PBXFileReference; lastKnownFileType = file; path = golden_message; sourceTree = "<group>"; };
8B210CCF159386920032D72D /* golden_packed_fields_message */ = {isa = PBXFileReference; lastKnownFileType = file; path = golden_packed_fields_message; sourceTree = "<group>"; };
8B4248B21A8BD96D00BC1EC6 /* UnitTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UnitTests-Bridging-Header.h"; sourceTree = "<group>"; };
@@ -153,7 +150,6 @@
8B4248B71A8BDD9600BC1EC6 /* protobuf */ = {isa = PBXFileReference; lastKnownFileType = text; name = protobuf; path = ../../Intermediates/ProtocolBuffers_iOS.build/DerivedSources/protos/google/protobuf; sourceTree = BUILT_PRODUCTS_DIR; };
8B4248DD1A929C7D00BC1EC6 /* Duration.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Duration.pbobjc.h; path = google/protobuf/Duration.pbobjc.h; sourceTree = "<group>"; };
8B4248DE1A929C7D00BC1EC6 /* Duration.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Duration.pbobjc.m; path = google/protobuf/Duration.pbobjc.m; sourceTree = "<group>"; };
- 8B4248DF1A929C7D00BC1EC6 /* Timestamp.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Timestamp.pbobjc.h; path = /google/protobuf/Timestamp.pbobjc.h; sourceTree = "<group>"; };
8B4248E01A929C7D00BC1EC6 /* Timestamp.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Timestamp.pbobjc.m; path = google/protobuf/Timestamp.pbobjc.m; sourceTree = "<group>"; };
8B4248E11A929C8900BC1EC6 /* GPBWellKnownTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBWellKnownTypes.h; sourceTree = "<group>"; };
8B4248E21A929C8900BC1EC6 /* GPBWellKnownTypes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBWellKnownTypes.m; sourceTree = "<group>"; };
@@ -161,7 +157,6 @@
8B4249481A92A02300BC1EC6 /* timestamp.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = timestamp.proto; path = ../src/google/protobuf/timestamp.proto; sourceTree = "<group>"; };
8B4249491A92A0BA00BC1EC6 /* descriptor.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = descriptor.proto; path = ../src/google/protobuf/descriptor.proto; sourceTree = "<group>"; };
8B42494A1A92A0BA00BC1EC6 /* duration.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = duration.proto; path = ../src/google/protobuf/duration.proto; sourceTree = "<group>"; };
- 8B54585814DCC34E003D7338 /* Descriptor.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Descriptor.pbobjc.h; path = /google/protobuf/Descriptor.pbobjc.h; sourceTree = SOURCE_ROOT; };
8B79657814992E3E002FFBFC /* GPBRootObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPBRootObject.h; sourceTree = "<group>"; };
8B79657914992E3E002FFBFC /* GPBRootObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBRootObject.m; sourceTree = "<group>"; };
8B7E6A7414893DBA00F8884A /* unittest_custom_options.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = unittest_custom_options.proto; path = ../../src/google/protobuf/unittest_custom_options.proto; sourceTree = "<group>"; };
@@ -186,12 +181,11 @@
8BA9364418DA5F4B0056FA2A /* GPBStringTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBStringTests.m; sourceTree = "<group>"; };
8BBD9DB016DD1DC8008E1EC1 /* unittest_lite.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = unittest_lite.proto; path = ../../src/google/protobuf/unittest_lite.proto; sourceTree = "<group>"; };
8BBEA4A6147C727100C4ADB7 /* UnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- 8BCC29BE16FD09A000F29F4A /* GPBFilteredMessageTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBFilteredMessageTests.m; sourceTree = "<group>"; };
8BCF338814ED799900BC5317 /* GPBProtocolBuffers.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GPBProtocolBuffers.m; sourceTree = "<group>"; };
8BD3981D14BE54220081D629 /* unittest_enormous_descriptor.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = unittest_enormous_descriptor.proto; path = ../../src/google/protobuf/unittest_enormous_descriptor.proto; sourceTree = "<group>"; };
8BD3981E14BE59D70081D629 /* GPBUnittestProtos.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBUnittestProtos.m; sourceTree = "<group>"; };
8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Descriptor.pbobjc.m; path = google/protobuf/Descriptor.pbobjc.m; sourceTree = SOURCE_ROOT; };
- 8BEB5AE01498033E0078BF9D /* GPBTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBTypes.h; sourceTree = "<group>"; };
+ 8BEB5AE01498033E0078BF9D /* GPBRuntimeTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBRuntimeTypes.h; sourceTree = "<group>"; };
F401DC341A8E5C6F00FCC765 /* GPBArrayTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBArrayTests.m; sourceTree = "<group>"; };
F41C175C1833D3310064ED4D /* GPBPerfTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBPerfTests.m; sourceTree = "<group>"; };
F4353D1E1AB88243005A6198 /* GPBDescriptorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBDescriptorTests.m; sourceTree = "<group>"; };
@@ -216,16 +210,41 @@
F4487C7D1AAE06C500531423 /* GPBUtilities_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBUtilities_PackagePrivate.h; sourceTree = "<group>"; };
F4487C801AAF62FC00531423 /* GPBMessageTests+Serialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GPBMessageTests+Serialization.m"; sourceTree = "<group>"; };
F4487C841AAF6AC500531423 /* GPBMessageTests+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GPBMessageTests+Merge.m"; sourceTree = "<group>"; };
- F44B25D81A729803005CCF68 /* Filter2.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Filter2.txt; sourceTree = "<group>"; };
F451D3F61A8AAEA600B8A22C /* GPBProtocolBuffers_RuntimeSupport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBProtocolBuffers_RuntimeSupport.h; sourceTree = "<group>"; };
- F45C69CB16DFD08D0081955B /* GPBExtensionField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBExtensionField.m; sourceTree = "<group>"; };
+ F45C69CB16DFD08D0081955B /* GPBExtensionInternals.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPBExtensionInternals.m; sourceTree = "<group>"; };
F45E57C81AE6DC98000B7D99 /* text_format_map_unittest_data.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = text_format_map_unittest_data.txt; sourceTree = "<group>"; };
F4AC9E1C1A8BEB1000BD6E83 /* unittest_cycle.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_cycle.proto; sourceTree = "<group>"; };
- F4B6B8B01A9CC99500892426 /* GPBField_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBField_PackagePrivate.h; sourceTree = "<group>"; };
+ F4B6B8B01A9CC99500892426 /* GPBUnknownField_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBUnknownField_PackagePrivate.h; sourceTree = "<group>"; };
F4B6B8B11A9CCBBB00892426 /* GPBUnknownFieldSet_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBUnknownFieldSet_PackagePrivate.h; sourceTree = "<group>"; };
- F4B6B8B31A9CD1C600892426 /* GPBExtensionField_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBExtensionField_PackagePrivate.h; sourceTree = "<group>"; };
+ F4B6B8B31A9CD1C600892426 /* GPBExtensionInternals.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBExtensionInternals.h; sourceTree = "<group>"; };
F4B6B8B51A9CD1C600892426 /* GPBRootObject_PackagePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPBRootObject_PackagePrivate.h; sourceTree = "<group>"; };
- F4B6B8BA1A9D343B00892426 /* unittest_name_mangling.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_name_mangling.proto; sourceTree = "<group>"; };
+ F4CF31711B162EF500BD9B06 /* unittest_objc_startup.proto */ = {isa = PBXFileReference; lastKnownFileType = text; path = unittest_objc_startup.proto; sourceTree = "<group>"; };
+ F4E675B61B21D1440054530B /* Any.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Any.pbobjc.h; path = google/protobuf/Any.pbobjc.h; sourceTree = "<group>"; };
+ F4E675B71B21D1440054530B /* Any.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Any.pbobjc.m; path = google/protobuf/Any.pbobjc.m; sourceTree = "<group>"; };
+ F4E675B81B21D1440054530B /* Api.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Api.pbobjc.h; path = google/protobuf/Api.pbobjc.h; sourceTree = "<group>"; };
+ F4E675B91B21D1440054530B /* Api.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Api.pbobjc.m; path = google/protobuf/Api.pbobjc.m; sourceTree = "<group>"; };
+ F4E675BA1B21D1440054530B /* Descriptor.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Descriptor.pbobjc.h; path = google/protobuf/Descriptor.pbobjc.h; sourceTree = "<group>"; };
+ F4E675BB1B21D1440054530B /* Empty.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Empty.pbobjc.h; path = google/protobuf/Empty.pbobjc.h; sourceTree = "<group>"; };
+ F4E675BC1B21D1440054530B /* Empty.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Empty.pbobjc.m; path = google/protobuf/Empty.pbobjc.m; sourceTree = "<group>"; };
+ F4E675BD1B21D1440054530B /* FieldMask.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FieldMask.pbobjc.h; path = google/protobuf/FieldMask.pbobjc.h; sourceTree = "<group>"; };
+ F4E675BE1B21D1440054530B /* FieldMask.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FieldMask.pbobjc.m; path = google/protobuf/FieldMask.pbobjc.m; sourceTree = "<group>"; };
+ F4E675BF1B21D1440054530B /* SourceContext.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SourceContext.pbobjc.h; path = google/protobuf/SourceContext.pbobjc.h; sourceTree = "<group>"; };
+ F4E675C01B21D1440054530B /* SourceContext.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SourceContext.pbobjc.m; path = google/protobuf/SourceContext.pbobjc.m; sourceTree = "<group>"; };
+ F4E675C11B21D1440054530B /* Struct.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Struct.pbobjc.h; path = google/protobuf/Struct.pbobjc.h; sourceTree = "<group>"; };
+ F4E675C21B21D1440054530B /* Struct.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Struct.pbobjc.m; path = google/protobuf/Struct.pbobjc.m; sourceTree = "<group>"; };
+ F4E675C31B21D1440054530B /* Timestamp.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Timestamp.pbobjc.h; path = google/protobuf/Timestamp.pbobjc.h; sourceTree = "<group>"; };
+ F4E675C41B21D1440054530B /* Type.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Type.pbobjc.h; path = google/protobuf/Type.pbobjc.h; sourceTree = "<group>"; };
+ F4E675C51B21D1440054530B /* Type.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Type.pbobjc.m; path = google/protobuf/Type.pbobjc.m; sourceTree = "<group>"; };
+ F4E675C61B21D1440054530B /* Wrappers.pbobjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Wrappers.pbobjc.h; path = google/protobuf/Wrappers.pbobjc.h; sourceTree = "<group>"; };
+ F4E675C71B21D1440054530B /* Wrappers.pbobjc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Wrappers.pbobjc.m; path = google/protobuf/Wrappers.pbobjc.m; sourceTree = "<group>"; };
+ F4E675D81B21D1DE0054530B /* any.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = any.proto; path = ../src/google/protobuf/any.proto; sourceTree = "<group>"; };
+ F4E675D91B21D1DE0054530B /* api.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = api.proto; path = ../src/google/protobuf/api.proto; sourceTree = "<group>"; };
+ F4E675DA1B21D1DE0054530B /* empty.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = empty.proto; path = ../src/google/protobuf/empty.proto; sourceTree = "<group>"; };
+ F4E675DB1B21D1DE0054530B /* field_mask.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = field_mask.proto; path = ../src/google/protobuf/field_mask.proto; sourceTree = "<group>"; };
+ F4E675DC1B21D1DE0054530B /* source_context.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = source_context.proto; path = ../src/google/protobuf/source_context.proto; sourceTree = "<group>"; };
+ F4E675DD1B21D1DE0054530B /* struct.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = struct.proto; path = ../src/google/protobuf/struct.proto; sourceTree = "<group>"; };
+ F4E675DE1B21D1DE0054530B /* type.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = type.proto; path = ../src/google/protobuf/type.proto; sourceTree = "<group>"; };
+ F4E675DF1B21D1DE0054530B /* wrappers.proto */ = {isa = PBXFileReference; lastKnownFileType = text; name = wrappers.proto; path = ../src/google/protobuf/wrappers.proto; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -309,15 +328,39 @@
29B97315FDCFA39411CA2CEA /* Generated */ = {
isa = PBXGroup;
children = (
- 8B4249491A92A0BA00BC1EC6 /* descriptor.proto */,
+ F4E675B61B21D1440054530B /* Any.pbobjc.h */,
+ F4E675B71B21D1440054530B /* Any.pbobjc.m */,
+ F4E675D81B21D1DE0054530B /* any.proto */,
+ F4E675B81B21D1440054530B /* Api.pbobjc.h */,
+ F4E675B91B21D1440054530B /* Api.pbobjc.m */,
+ F4E675D91B21D1DE0054530B /* api.proto */,
+ F4E675BA1B21D1440054530B /* Descriptor.pbobjc.h */,
8BD3982214BE5B0C0081D629 /* Descriptor.pbobjc.m */,
- 8B54585814DCC34E003D7338 /* Descriptor.pbobjc.h */,
- 8B42494A1A92A0BA00BC1EC6 /* duration.proto */,
+ 8B4249491A92A0BA00BC1EC6 /* descriptor.proto */,
8B4248DD1A929C7D00BC1EC6 /* Duration.pbobjc.h */,
8B4248DE1A929C7D00BC1EC6 /* Duration.pbobjc.m */,
- 8B4249481A92A02300BC1EC6 /* timestamp.proto */,
- 8B4248DF1A929C7D00BC1EC6 /* Timestamp.pbobjc.h */,
+ 8B42494A1A92A0BA00BC1EC6 /* duration.proto */,
+ F4E675BB1B21D1440054530B /* Empty.pbobjc.h */,
+ F4E675BC1B21D1440054530B /* Empty.pbobjc.m */,
+ F4E675DA1B21D1DE0054530B /* empty.proto */,
+ F4E675DB1B21D1DE0054530B /* field_mask.proto */,
+ F4E675BD1B21D1440054530B /* FieldMask.pbobjc.h */,
+ F4E675BE1B21D1440054530B /* FieldMask.pbobjc.m */,
+ F4E675DC1B21D1DE0054530B /* source_context.proto */,
+ F4E675BF1B21D1440054530B /* SourceContext.pbobjc.h */,
+ F4E675C01B21D1440054530B /* SourceContext.pbobjc.m */,
+ F4E675C11B21D1440054530B /* Struct.pbobjc.h */,
+ F4E675C21B21D1440054530B /* Struct.pbobjc.m */,
+ F4E675DD1B21D1DE0054530B /* struct.proto */,
+ F4E675C31B21D1440054530B /* Timestamp.pbobjc.h */,
8B4248E01A929C7D00BC1EC6 /* Timestamp.pbobjc.m */,
+ 8B4249481A92A02300BC1EC6 /* timestamp.proto */,
+ F4E675C41B21D1440054530B /* Type.pbobjc.h */,
+ F4E675C51B21D1440054530B /* Type.pbobjc.m */,
+ F4E675DE1B21D1DE0054530B /* type.proto */,
+ F4E675C61B21D1440054530B /* Wrappers.pbobjc.h */,
+ F4E675C71B21D1440054530B /* Wrappers.pbobjc.m */,
+ F4E675DF1B21D1DE0054530B /* wrappers.proto */,
);
name = Generated;
sourceTree = "<group>";
@@ -335,9 +378,8 @@
7461B3C50F94F84100A0C422 /* Extensions */ = {
isa = PBXGroup;
children = (
- F4B6B8B31A9CD1C600892426 /* GPBExtensionField_PackagePrivate.h */,
- 748F0CAF0FD70602000858A9 /* GPBExtensionField.h */,
- F45C69CB16DFD08D0081955B /* GPBExtensionField.m */,
+ F4B6B8B31A9CD1C600892426 /* GPBExtensionInternals.h */,
+ F45C69CB16DFD08D0081955B /* GPBExtensionInternals.m */,
7461B4A80F94F99000A0C422 /* GPBExtensionRegistry.h */,
7461B4A90F94F99000A0C422 /* GPBExtensionRegistry.m */,
F4B6B8B51A9CD1C600892426 /* GPBRootObject_PackagePrivate.h */,
@@ -350,9 +392,9 @@
7461B4850F94F96600A0C422 /* Fields */ = {
isa = PBXGroup;
children = (
- F4B6B8B01A9CC99500892426 /* GPBField_PackagePrivate.h */,
- 7461B4AE0F94F99000A0C422 /* GPBField.h */,
- 7461B4AF0F94F99000A0C422 /* GPBField.m */,
+ F4B6B8B01A9CC99500892426 /* GPBUnknownField_PackagePrivate.h */,
+ 7461B4AE0F94F99000A0C422 /* GPBUnknownField.h */,
+ 7461B4AF0F94F99000A0C422 /* GPBUnknownField.m */,
F4B6B8B11A9CCBBB00892426 /* GPBUnknownFieldSet_PackagePrivate.h */,
7461B4E10F94F99000A0C422 /* GPBUnknownFieldSet.h */,
7461B4E20F94F99000A0C422 /* GPBUnknownFieldSet.m */,
@@ -392,8 +434,6 @@
children = (
8B9A5EA91831993600A9D33B /* iOSTestHarness */,
8B4248B71A8BDD9600BC1EC6 /* protobuf */,
- 8B20A9A816F1BBFA00BE3EAD /* Filter1.txt */,
- F44B25D81A729803005CCF68 /* Filter2.txt */,
8B210CCD159383D60032D72D /* golden_message */,
8B210CCF159386920032D72D /* golden_packed_fields_message */,
8B8B615C17DF7056002EE618 /* GPBARCUnittestProtos.m */,
@@ -409,7 +449,6 @@
F4353D3E1AC06F31005A6198 /* GPBDictionaryTests+String.m */,
F4353D3F1AC06F31005A6198 /* GPBDictionaryTests+UInt32.m */,
F4353D401AC06F31005A6198 /* GPBDictionaryTests+UInt64.m */,
- 8BCC29BE16FD09A000F29F4A /* GPBFilteredMessageTests.m */,
7461B6A30F94FDF800A0C422 /* GPBMessageTests.m */,
F4487C841AAF6AC500531423 /* GPBMessageTests+Merge.m */,
F4487C761AADF84900531423 /* GPBMessageTests+Runtime.m */,
@@ -431,13 +470,12 @@
8B7E6A7514893DBA00F8884A /* unittest_embed_optimize_for.proto */,
8B7E6A7614893DBA00F8884A /* unittest_empty.proto */,
8BD3981D14BE54220081D629 /* unittest_enormous_descriptor.proto */,
- 8B20A9A916F1BC0600BE3EAD /* unittest_filter.proto */,
8B7E6A7814893DBB00F8884A /* unittest_import.proto */,
8BBD9DB016DD1DC8008E1EC1 /* unittest_lite.proto */,
8B7E6A7B14893DBC00F8884A /* unittest_mset.proto */,
- F4B6B8BA1A9D343B00892426 /* unittest_name_mangling.proto */,
8B7E6A7C14893DBC00F8884A /* unittest_no_generic_services.proto */,
8B09AAF614B663A7007B4184 /* unittest_objc.proto */,
+ F4CF31711B162EF500BD9B06 /* unittest_objc_startup.proto */,
8B7E6A7D14893DBC00F8884A /* unittest_optimize_for.proto */,
F4487C7A1AADFB5500531423 /* unittest_runtime_proto2.proto */,
F4487C7B1AADFB5500531423 /* unittest_runtime_proto3.proto */,
@@ -478,7 +516,7 @@
F43725921AC9835D004DCAFB /* GPBDictionary_PackagePrivate.h */,
F4353D241ABB156F005A6198 /* GPBDictionary.h */,
F4353D251ABB156F005A6198 /* GPBDictionary.m */,
- 8BEB5AE01498033E0078BF9D /* GPBTypes.h */,
+ 8BEB5AE01498033E0078BF9D /* GPBRuntimeTypes.h */,
F4487C7D1AAE06C500531423 /* GPBUtilities_PackagePrivate.h */,
7461B4E50F94F99000A0C422 /* GPBUtilities.h */,
7461B4E60F94F99000A0C422 /* GPBUtilities.m */,
@@ -507,6 +545,23 @@
};
/* End PBXHeadersBuildPhase section */
+/* Begin PBXLegacyTarget section */
+ F45BBC0E1B0CDB50002D064D /* Compile Unittest Protos */ = {
+ isa = PBXLegacyTarget;
+ buildArgumentsString = "$(ACTION)";
+ buildConfigurationList = F45BBC111B0CDB50002D064D /* Build configuration list for PBXLegacyTarget "Compile Unittest Protos" */;
+ buildPhases = (
+ );
+ buildToolPath = DevTools/compile_testing_protos.sh;
+ buildWorkingDirectory = "";
+ dependencies = (
+ );
+ name = "Compile Unittest Protos";
+ passBuildSettingsInEnvironment = 1;
+ productName = "Compile Unittest Protos";
+ };
+/* End PBXLegacyTarget section */
+
/* Begin PBXNativeTarget section */
7461B52D0F94FAF800A0C422 /* ProtocolBuffers */ = {
isa = PBXNativeTarget;
@@ -555,7 +610,7 @@
);
dependencies = (
8BBEA4BD147C729A00C4ADB7 /* PBXTargetDependency */,
- 8BD3982114BE59EB0081D629 /* PBXTargetDependency */,
+ F45BBC131B0CDBBA002D064D /* PBXTargetDependency */,
8B9A5ED11831994600A9D33B /* PBXTargetDependency */,
);
name = UnitTests;
@@ -587,11 +642,14 @@
isa = PBXProject;
attributes = {
LastTestingUpgradeCheck = 0600;
- LastUpgradeCheck = 0610;
+ LastUpgradeCheck = 0630;
TargetAttributes = {
8BBEA4A5147C727100C4ADB7 = {
TestTargetID = 8B9A5EA41831993600A9D33B;
};
+ F45BBC0E1B0CDB50002D064D = {
+ CreatedOnToolsVersion = 6.3.2;
+ };
};
};
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ProtocolBuffers_iOS" */;
@@ -607,9 +665,9 @@
targets = (
7461B52D0F94FAF800A0C422 /* ProtocolBuffers */,
8BBEA4A5147C727100C4ADB7 /* UnitTests */,
- 8BD3981414BE4AE70081D629 /* Compile_Protos */,
8B9A5EA41831993600A9D33B /* iOSTestHarness */,
F4487C551A9F8F8100531423 /* TestSingleSourceBuild */,
+ F45BBC0E1B0CDB50002D064D /* Compile Unittest Protos */,
);
};
/* End PBXProject section */
@@ -639,51 +697,6 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
- 8BD3981814BE4AF30081D629 /* ShellScript */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "$(SRCROOT)/../src/google/protobuf/unittest_custom_options.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_embed_optimize_for.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_empty.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_enormous_descriptor.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_import_lite.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_import.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_lite_imports_nonlite.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_lite.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_mset.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_no_generic_services.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest.proto",
- "$(SRCROOT)/Tests/unittest_objc.proto",
- "$(SRCROOT)/../src/.libs/libprotoc.10.dylib",
- "$(SRCROOT)/../src/google/protobuf/unittest_import_public_lite.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_import_public.proto",
- "$(SRCROOT)/Tests/unittest_filter.proto",
- "$(SRCROOT)/../src/.libs/libprotobuf.10.dylib",
- "$(SRCROOT)/../src/.libs/protoc",
- "$(SRCROOT)/Tests/Filter1.txt",
- "$(SRCROOT)/Tests/Filter2.txt",
- "$(SRCROOT)/Tests/unittest_cycle.proto",
- "$(SRCROOT)/Tests/unittest_name_mangling.proto",
- "$(SRCROOT)/Tests/unittest_runtime_proto2.proto",
- "$(SRCROOT)/Tests/unittest_runtime_proto3.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_drop_unknown_fields.proto",
- "$(SRCROOT)/../src/google/protobuf/unittest_preserve_unknown_enum.proto",
- "$(SRCROOT)/../src/google/protobuf/map_lite_unittest.proto",
- "$(SRCROOT)/../src/google/protobuf/map_proto2_unittest.proto",
- "$(SRCROOT)/../src/google/protobuf/map_unittest.proto",
- );
- outputPaths = (
- "$(PROJECT_DERIVED_FILE_DIR)/protos/google/protobuf/Unittest.pbobjc.h",
- "$(PROJECT_DERIVED_FILE_DIR)/protos/google/protobuf/Unittest.pbobjc.m",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/bash;
- shellScript = "set -eu\nmkdir -p \"${PROJECT_DERIVED_FILE_DIR}/protos\"\nexport PATH=\"${PATH}:.\"\ncd \"${SRCROOT}\"/../src\n\nPROTOC=./protoc\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_custom_options.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_enormous_descriptor.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_embed_optimize_for.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_empty.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import_lite.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_lite.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_mset.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_no_generic_services.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_optimize_for.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import_public.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_import_public_lite.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_drop_unknown_fields.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/unittest_preserve_unknown_enum.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/map_lite_unittest.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/map_proto2_unittest.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. google/protobuf/map_unittest.proto\n\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=google/protobuf/ --proto_path=. --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_objc.proto\n\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_cycle.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_name_mangling.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_runtime_proto2.proto\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_runtime_proto3.proto\n\n# Use the filter\nexport GPB_OBJC_CLASS_WHITELIST_PATHS=\"${SRCROOT}/Tests/Filter1.txt;${SRCROOT}/Tests/Filter2.txt\"\n$PROTOC --objc_out=\"${PROJECT_DERIVED_FILE_DIR}/protos/google/protobuf\" --proto_path=\"${SRCROOT}\"/Tests \"${SRCROOT}\"/Tests/unittest_filter.proto\n\n";
- showEnvVarsInLog = 0;
- };
F4B62A791AF91F7500AFCEDC /* Script: Check Runtime Stamps */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -708,19 +721,27 @@
files = (
2CFB390415C718CE00CBF84D /* Descriptor.pbobjc.m in Sources */,
7461B53C0F94FB4E00A0C422 /* GPBCodedInputStream.m in Sources */,
+ F4E675D21B21D1620054530B /* Empty.pbobjc.m in Sources */,
F4487C731A9F906200531423 /* GPBArray.m in Sources */,
7461B53D0F94FB4E00A0C422 /* GPBCodedOutputStream.m in Sources */,
7461B5490F94FB4E00A0C422 /* GPBExtensionRegistry.m in Sources */,
- 7461B54C0F94FB4E00A0C422 /* GPBField.m in Sources */,
+ F4E675D31B21D1620054530B /* FieldMask.pbobjc.m in Sources */,
+ 7461B54C0F94FB4E00A0C422 /* GPBUnknownField.m in Sources */,
7461B5530F94FB4E00A0C422 /* GPBMessage.m in Sources */,
7461B5610F94FB4E00A0C422 /* GPBUnknownFieldSet.m in Sources */,
7461B5630F94FB4E00A0C422 /* GPBUtilities.m in Sources */,
7461B5640F94FB4E00A0C422 /* GPBWireFormat.m in Sources */,
+ F4E675D11B21D1620054530B /* Api.pbobjc.m in Sources */,
+ F4E675D41B21D1620054530B /* SourceContext.pbobjc.m in Sources */,
F4353D271ABB156F005A6198 /* GPBDictionary.m in Sources */,
8B79657B14992E3F002FFBFC /* GPBRootObject.m in Sources */,
8B96157414C8C38C00A2AC0B /* GPBDescriptor.m in Sources */,
- F45C69CC16DFD08D0081955B /* GPBExtensionField.m in Sources */,
+ F4E675D01B21D1620054530B /* Any.pbobjc.m in Sources */,
+ F45C69CC16DFD08D0081955B /* GPBExtensionInternals.m in Sources */,
8B4248E41A929C8900BC1EC6 /* GPBWellKnownTypes.m in Sources */,
+ F4E675D61B21D1620054530B /* Type.pbobjc.m in Sources */,
+ F4E675D51B21D1620054530B /* Struct.pbobjc.m in Sources */,
+ F4E675D71B21D1620054530B /* Wrappers.pbobjc.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -741,12 +762,18 @@
F4353D441AC06F31005A6198 /* GPBDictionaryTests+Int64.m in Sources */,
F4353D471AC06F31005A6198 /* GPBDictionaryTests+UInt64.m in Sources */,
8BBEA4AA147C727D00C4ADB7 /* GPBCodedOuputStreamTests.m in Sources */,
+ F4E675CC1B21D1610054530B /* SourceContext.pbobjc.m in Sources */,
8BBEA4AC147C727D00C4ADB7 /* GPBMessageTests.m in Sources */,
F4487C811AAF62FC00531423 /* GPBMessageTests+Serialization.m in Sources */,
8B4248E61A929C9900BC1EC6 /* GPBWellKnownTypesTest.m in Sources */,
+ F4E675CA1B21D1610054530B /* Empty.pbobjc.m in Sources */,
+ F4E675CE1B21D1610054530B /* Type.pbobjc.m in Sources */,
F4353D1F1AB88243005A6198 /* GPBDescriptorTests.m in Sources */,
+ F4E675CF1B21D1610054530B /* Wrappers.pbobjc.m in Sources */,
+ F4E675C81B21D1610054530B /* Any.pbobjc.m in Sources */,
8B4248B41A8BD96E00BC1EC6 /* GPBSwiftTests.swift in Sources */,
5102DABC1891A073002037B6 /* GPBConcurrencyTests.m in Sources */,
+ F4E675CD1B21D1610054530B /* Struct.pbobjc.m in Sources */,
F4487C771AADF84900531423 /* GPBMessageTests+Runtime.m in Sources */,
F4353D431AC06F31005A6198 /* GPBDictionaryTests+Int32.m in Sources */,
8BBEA4B0147C727D00C4ADB7 /* GPBTestUtilities.m in Sources */,
@@ -761,9 +788,10 @@
8BBEA4B8147C727D00C4ADB7 /* GPBWireFormatTests.m in Sources */,
8B79657D14992E3F002FFBFC /* GPBRootObject.m in Sources */,
8BD3981F14BE59D70081D629 /* GPBUnittestProtos.m in Sources */,
+ F4E675CB1B21D1610054530B /* FieldMask.pbobjc.m in Sources */,
8B96157514CA019D00A2AC0B /* Descriptor.pbobjc.m in Sources */,
- 8BCC29BF16FD09A000F29F4A /* GPBFilteredMessageTests.m in Sources */,
8B8B615D17DF7056002EE618 /* GPBARCUnittestProtos.m in Sources */,
+ F4E675C91B21D1610054530B /* Api.pbobjc.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -771,7 +799,6 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- F4487C5B1A9F8F8100531423 /* Descriptor.pbobjc.m in Sources */,
F4487C6F1A9F8FFF00531423 /* GPBProtocolBuffers.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -789,10 +816,10 @@
target = 7461B52D0F94FAF800A0C422 /* ProtocolBuffers */;
targetProxy = 8BBEA4BC147C729A00C4ADB7 /* PBXContainerItemProxy */;
};
- 8BD3982114BE59EB0081D629 /* PBXTargetDependency */ = {
+ F45BBC131B0CDBBA002D064D /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 8BD3981414BE4AE70081D629 /* Compile_Protos */;
- targetProxy = 8BD3982014BE59EB0081D629 /* PBXContainerItemProxy */;
+ target = F45BBC0E1B0CDB50002D064D /* Compile Unittest Protos */;
+ targetProxy = F45BBC121B0CDBBA002D064D /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
@@ -909,20 +936,6 @@
};
name = Release;
};
- 8BD3981514BE4AE70081D629 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Debug;
- };
- 8BD3981614BE4AE70081D629 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Release;
- };
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -1029,6 +1042,18 @@
};
name = Release;
};
+ F45BBC0F1B0CDB50002D064D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = Debug;
+ };
+ F45BBC101B0CDB50002D064D /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = Release;
+ };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@@ -1059,15 +1084,6 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 8BD3981714BE4AE70081D629 /* Build configuration list for PBXAggregateTarget "Compile_Protos" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 8BD3981514BE4AE70081D629 /* Debug */,
- 8BD3981614BE4AE70081D629 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ProtocolBuffers_iOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -1086,6 +1102,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ F45BBC111B0CDB50002D064D /* Build configuration list for PBXLegacyTarget "Compile Unittest Protos" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F45BBC0F1B0CDB50002D064D /* Debug */,
+ F45BBC101B0CDB50002D064D /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
diff --git a/objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme b/objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme
index f5479ba2..4898eb5f 100644
--- a/objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme
+++ b/objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
- LastUpgradeVersion = "0610"
+ LastUpgradeVersion = "0630"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@@ -39,9 +39,6 @@
</BuildableReference>
<SkippedTests>
<Test
- Identifier = "ArrayTests">
- </Test>
- <Test
Identifier = "CodedInputStreamTests">
</Test>
<Test
@@ -51,16 +48,223 @@
Identifier = "ConcurrencyTests">
</Test>
<Test
- Identifier = "FilteredMessageTests">
+ Identifier = "DescriptorTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolBoolDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolDoubleDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolFloatDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolInt64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolObjectDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolUInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBoolUInt64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBBridgeTests">
+ </Test>
+ <Test
+ Identifier = "GPBDoubleArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBEnumArrayCustomTests">
+ </Test>
+ <Test
+ Identifier = "GPBEnumArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBFloatArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32ArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32BoolDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32DoubleDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32EnumDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32EnumDictionaryUnknownEnumTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32FloatDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32Int32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32Int64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32ObjectDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32UInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt32UInt64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64ArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64BoolDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64DoubleDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64EnumDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64EnumDictionaryUnknownEnumTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64FloatDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64Int32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64Int64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64ObjectDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64UInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBInt64UInt64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringBoolDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringDoubleDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringEnumDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringEnumDictionaryUnknownEnumTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringFloatDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringInt64DictionaryTests">
</Test>
<Test
Identifier = "GPBStringTests">
</Test>
<Test
+ Identifier = "GPBStringUInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBStringUInt64DictionaryTests">
+ </Test>
+ <Test
Identifier = "GPBTestCase">
</Test>
<Test
- Identifier = "GeneratedMessageTests">
+ Identifier = "GPBUInt32ArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32BoolDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32DoubleDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32EnumDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32EnumDictionaryUnknownEnumTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32FloatDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32Int32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32Int64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32ObjectDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32UInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt32UInt64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64ArrayTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64BoolDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64DoubleDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64EnumDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64EnumDictionaryUnknownEnumTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64FloatDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64Int32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64Int64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64ObjectDictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64UInt32DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "GPBUInt64UInt64DictionaryTests">
+ </Test>
+ <Test
+ Identifier = "MessageMergeTests">
+ </Test>
+ <Test
+ Identifier = "MessageRuntimeTests">
+ </Test>
+ <Test
+ Identifier = "MessageSerializationTests">
</Test>
<Test
Identifier = "MessageTests">
@@ -72,6 +276,9 @@
Identifier = "UtilitiesTests">
</Test>
<Test
+ Identifier = "WellKnownTypesTest">
+ </Test>
+ <Test
Identifier = "WireFormatTests">
</Test>
</SkippedTests>
@@ -96,7 +303,8 @@
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
allowLocationSimulation = "YES">
- <BuildableProductRunnable>
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8B9A5EA41831993600A9D33B"
diff --git a/objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme b/objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme
index c3c2c7d4..19267fc3 100644
--- a/objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme
+++ b/objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
- LastUpgradeVersion = "0610"
+ LastUpgradeVersion = "0630"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
diff --git a/objectivec/README.md b/objectivec/README.md
index 186e45b2..134bf1ab 100644
--- a/objectivec/README.md
+++ b/objectivec/README.md
@@ -21,15 +21,15 @@ Installation
------------
The full distribution pulled from github includes the sources for both the
-compiler (protoc) and the runtime (this directory). To build the compiler
+compiler (protoc) and the runtime (this directory). To build the compiler
and run the runtime tests, you can use:
$ objectivec/DevTools/full_mac_build.sh
This will generate the `src/protoc` binary.
-Usage
------
+Building
+--------
There are two ways to include the Runtime sources in your project:
@@ -47,6 +47,80 @@ If the target is using ARC, remember to turn off ARC (`-fno-objc-arc`) for the
The files generated by `protoc` for the `*.proto` files (`\*.pbobjc.h' and
`\*.pbobjc.m`) are then also added to the target.
+Usage
+-----
+
+The objects generated for messages should work like any other Objective C
+object. They are mutable objects, but if you don't change them, they are safe
+to share between threads (similar to passing an NSMutableDictionary between
+threads/queues; as long as no one mutates it, things are fine).
+
+There are a few behaviors worth calling out:
+
+A property that is type NSString\* will never return nil. If the value is
+unset, it will return an empty string (@""). This is inpart to align things
+with the Protocol Buffers spec which says the default for strings is an empty
+string, but also so you can always safely pass them to isEqual:/compare:, etc.
+and have deterministic results.
+
+A property that is type NSData\* also won't return nil, it will return an empty
+data ([NSData data]). The reasoning is the same as for NSString not returning
+nil.
+
+A property that is another GPBMessage class also will not return nil. If the
+field wasn't already set, you will get a instance of the correct class. This
+instance will be a temporary instance unless you mutate it, at which point it
+will be attached to its parent object. We call this pattern *autocreators*.
+Similar to NSString and NSData properties it makes things a little safer when
+using them with isEqual:/etc.; but more importantly, this allows you to write
+code that uses Objective C's property dot notation to walk into nested objects
+and access and/or assign things without having to check that they are not nil
+and create them each step along the way. You can write this:
+
+```
+- (void)updateRecord:(MyMessage *)msg {
+ ...
+ // Note: You don't have to check subMessage and otherMessage for nil and
+ // alloc/init/assign them back along the way.
+ msg.subMessage.otherMessage.lastName = @"Smith";
+ ...
+}
+```
+
+If you want to check if a GPBMessage property is present, there is always as
+`has\[NAME\]` property to go with the main property to check if it is set.
+
+A property that is of an Array or Dictionary type also provides *autocreator*
+behavior and will never return nil. This provides all the same benefits you
+see for the message properties. Again, you can write:
+
+```
+- (void)updateRecord:(MyMessage *)msg {
+ ...
+ // Note: Just like above, you don't have to check subMessage and otherMessage
+ // for nil and alloc/init/assign them back along the way. You also don't have
+ // to create the siblingsArray, you can safely just append to it.
+ [msg.subMessage.otherMessage.siblingsArray addObject:@"Pat"];
+ ...
+}
+```
+
+If you are inspecting a message you got from some other place (server, disk,
+etc), you may want to check if the Array or Dictionary has entries without
+causing it to be created for you. For this, there is always a `\[NAME\]_Count`
+property also provided that can return zero or the real count, but won't trigger
+the creation.
+
+For primitive type fields (ints, floats, bools, enum) in messages defined in a
+`.proto` file that use *proto2* syntax there are conceptual differences between
+having an *explicit* and *default* value. You can always get the value of the
+property. In the case that it hasn't been set you will get the default. In
+cases where you need to know whether it was set explicitly or you are just
+getting the default, you can use the `has\[NAME\]` property. If the value has
+been set, and you want to clear it, you can set the `has\[NAME\]` to `NO`.
+*proto3* syntax messages do away with this concept, thus the default values are
+never included when the message is encoded.
+
The Objective C classes/enums can be used from Swift code.
Objective C Generator Options
@@ -55,18 +129,19 @@ Objective C Generator Options
**objc_class_prefix=\<prefix\>** (no default)
Since Objective C uses a global namespace for all of its classes, there can
-be collisions. This option provides a prefix that will be added to the Enums
-and Objects (for messages) generated from the proto. Convention is to base
+be collisions. This option provides a prefix that will be added to the Enums
+and Objects (for messages) generated from the proto. Convention is to base
the prefix on the package the proto is in.
Contributing
------------
Please make updates to the tests along with changes. If just changing the
-runtime, the Xcode projects can be used to build and run tests. If change also
-require changes to the generated code, `objectivec/DevTools/full_mac_build.sh`
-can be used to easily rebuild and test changes. Passing `-h` to the script will
-show the addition options that could be useful.
+runtime, the Xcode projects can be used to build and run tests. If your change
+also requires changes to the generated code,
+`objectivec/DevTools/full_mac_build.sh` can be used to easily rebuild and test
+changes. Passing `-h` to the script will show the addition options that could
+be useful.
Documentation
-------------
diff --git a/objectivec/Tests/Filter2.txt b/objectivec/Tests/Filter2.txt
deleted file mode 100644
index 5a2bb0f8..00000000
--- a/objectivec/Tests/Filter2.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2014 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 the filter system for the ObjC Protocol Buffer Compiler to test
-// multiple filter support.
-
-Other
diff --git a/objectivec/Tests/GPBARCUnittestProtos.m b/objectivec/Tests/GPBARCUnittestProtos.m
index daf4effc..d0408869 100644
--- a/objectivec/Tests/GPBARCUnittestProtos.m
+++ b/objectivec/Tests/GPBARCUnittestProtos.m
@@ -41,16 +41,15 @@
#import "google/protobuf/UnittestEmbedOptimizeFor.pbobjc.h"
#import "google/protobuf/UnittestEmpty.pbobjc.h"
#import "google/protobuf/UnittestEnormousDescriptor.pbobjc.h"
-#import "google/protobuf/UnittestFilter.pbobjc.h"
#import "google/protobuf/UnittestImport.pbobjc.h"
#import "google/protobuf/UnittestImportLite.pbobjc.h"
#import "google/protobuf/UnittestImportPublic.pbobjc.h"
#import "google/protobuf/UnittestImportPublicLite.pbobjc.h"
#import "google/protobuf/UnittestLite.pbobjc.h"
#import "google/protobuf/UnittestMset.pbobjc.h"
-#import "google/protobuf/UnittestNameMangling.pbobjc.h"
#import "google/protobuf/UnittestNoGenericServices.pbobjc.h"
#import "google/protobuf/UnittestObjc.pbobjc.h"
+#import "google/protobuf/UnittestObjcStartup.pbobjc.h"
#import "google/protobuf/UnittestOptimizeFor.pbobjc.h"
#import "google/protobuf/UnittestPreserveUnknownEnum.pbobjc.h"
#import "google/protobuf/UnittestRuntimeProto2.pbobjc.h"
diff --git a/objectivec/Tests/GPBCodedInputStreamTests.m b/objectivec/Tests/GPBCodedInputStreamTests.m
index 5f29d7c8..579fe65c 100644
--- a/objectivec/Tests/GPBCodedInputStreamTests.m
+++ b/objectivec/Tests/GPBCodedInputStreamTests.m
@@ -260,7 +260,7 @@
[GPBCodedInputStream streamWithData:[NSMutableData dataWithData:data]];
XCTAssertEqual(tag, [input readTag]);
- XCTAssertThrows([input readData]);
+ XCTAssertThrows([input readBytes]);
}
// Verifies fix for b/10315336.
diff --git a/objectivec/Tests/GPBConcurrencyTests.m b/objectivec/Tests/GPBConcurrencyTests.m
index e500ad77..daf75e7e 100644
--- a/objectivec/Tests/GPBConcurrencyTests.m
+++ b/objectivec/Tests/GPBConcurrencyTests.m
@@ -196,7 +196,8 @@ static const int kNumMessages = 100;
NSArray *threads = [self createThreadsWithSelector:sel object:messages];
[self startThreads:threads];
[self joinThreads:threads];
- GPBExtensionField *extension = [UnittestRoot optionalForeignMessageExtension];
+ GPBExtensionDescriptor *extension =
+ [UnittestRoot optionalForeignMessageExtension];
for (TestAllExtensions *message in messages) {
XCTAssertFalse([message hasExtension:extension]);
}
diff --git a/objectivec/Tests/GPBFilteredMessageTests.m b/objectivec/Tests/GPBFilteredMessageTests.m
deleted file mode 100644
index b0588837..00000000
--- a/objectivec/Tests/GPBFilteredMessageTests.m
+++ /dev/null
@@ -1,98 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2013 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.
-
-// Tests our filter system for ObjC.
-// The proto being filtered is unittest_filter.proto.
-// The filter file is Filter.txt.
-
-#import "GPBTestUtilities.h"
-
-#import "google/protobuf/UnittestFilter.pbobjc.h"
-
-// If we get an error about this already being defined, it is most likely
-// because of an error in protoc which is supposed to be filtering
-// the Remove message.
-enum { Other_FieldNumber_B = 0 };
-
-@interface FilteredMessageTests : GPBTestCase
-@end
-
-@implementation FilteredMessageTests
-
-- (void)testEnumFiltering {
- // If compile fails here it is because protoc did not generate KeepEnum.
- XCTAssertTrue(KeepEnum_IsValidValue(KeepEnum_KeepValue));
- XCTAssertNotNil(KeepEnum_EnumDescriptor());
-
- // If compile fails here it is because protoc did not generate
- // KeepEnumInsideEnum and is probably due to nested enum handling being
- // broken.
- XCTAssertTrue(RemoveEnumMessage_KeepEnumInside_IsValidValue(
- RemoveEnumMessage_KeepEnumInside_KeepValue));
- XCTAssertNotNil(RemoveEnumMessage_KeepEnumInside_EnumDescriptor());
-}
-
-- (void)testMessageFiltering {
- // Messages that should be generated.
- XCTAssertNil([UnittestFilterRoot extensionRegistry]);
- XCTAssertNotNil([[[Keep alloc] init] autorelease]);
- XCTAssertNotNil([[[Other alloc] init] autorelease]);
- XCTAssertNotNil([[[RemoveJustKidding alloc] init] autorelease]);
- XCTAssertNotNil(
- [[[RemoveEnumMessage_KeepNestedInside alloc] init] autorelease]);
-
- // Messages that should not be generated
- XCTAssertNil(NSClassFromString(@"Remove"));
- XCTAssertNil(NSClassFromString(@"RemoveEnumMessage"));
- XCTAssertNil(NSClassFromString(@"RemoveEnumMessage_RemoveNestedInside"));
-
- // These should all fail compile if protoc is bad.
- XCTAssertTrue([Other instancesRespondToSelector:@selector(hasA)]);
- XCTAssertTrue([Other instancesRespondToSelector:@selector(setHasA:)]);
- XCTAssertTrue([Other instancesRespondToSelector:@selector(a)]);
- XCTAssertTrue([Other instancesRespondToSelector:@selector(setA:)]);
-
- // These the compiler should not generate.
- XCTAssertFalse(
- [Other instancesRespondToSelector:NSSelectorFromString(@"hasB")]);
- XCTAssertFalse(
- [Other instancesRespondToSelector:NSSelectorFromString(@"setHasB:")]);
- XCTAssertFalse([Other instancesRespondToSelector:NSSelectorFromString(@"b")]);
- XCTAssertFalse(
- [Other instancesRespondToSelector:NSSelectorFromString(@"setB:")]);
-
- // This should fail if protoc filters it.
- XCTAssertEqual(Other_FieldNumber_A, 1);
-
- // Make sure the definition at the top of the file is providing the value.
- XCTAssertEqual(Other_FieldNumber_B, 0);
-}
-
-@end
diff --git a/objectivec/Tests/GPBMessageTests+Runtime.m b/objectivec/Tests/GPBMessageTests+Runtime.m
index 4621f90f..8942a843 100644
--- a/objectivec/Tests/GPBMessageTests+Runtime.m
+++ b/objectivec/Tests/GPBMessageTests+Runtime.m
@@ -36,6 +36,7 @@
#import "google/protobuf/MapUnittest.pbobjc.h"
#import "google/protobuf/Unittest.pbobjc.h"
+#import "google/protobuf/UnittestObjcStartup.pbobjc.h"
#import "google/protobuf/UnittestRuntimeProto2.pbobjc.h"
#import "google/protobuf/UnittestRuntimeProto3.pbobjc.h"
@@ -47,6 +48,14 @@
// TODO(thomasvl): Pull tests over from GPBMessageTests that are runtime
// specific.
+- (void)testStartupOrdering {
+ // Just have to create a message. Nothing else uses the classes from
+ // this file, so the first selector invoked on the class will initialize
+ // it, which also initializes the root.
+ TestObjCStartupMessage *message = [TestObjCStartupMessage message];
+ XCTAssertNotNil(message);
+}
+
- (void)testProto2HasMethodSupport {
NSArray *names = @[
@"Int32",
@@ -70,8 +79,8 @@
];
// Proto2 gets:
- // - has* on all non repeated fields.
- // - setHas* on all non repeated fields.
+
+ // Single fields - has*/setHas* is valid.
for (NSString *name in names) {
// build the selector, i.e. - hasOptionalInt32/setHasOptionalInt32:
@@ -85,21 +94,28 @@
name);
}
- // Repeated - no has/setHas
+ // Repeated fields
+ // - no has*/setHas*
+ // - *Count
for (NSString *name in names) {
- // build the selector, i.e. - hasRepeatedInt32/setHasRepeatedInt32:
+ // build the selector, i.e. - hasRepeatedInt32Array/setHasRepeatedInt32Array:
SEL hasSel = NSSelectorFromString(
- [NSString stringWithFormat:@"hasRepeated%@", name]);
+ [NSString stringWithFormat:@"hasRepeated%@Array", name]);
SEL setHasSel = NSSelectorFromString(
- [NSString stringWithFormat:@"setHasRepeated%@:", name]);
+ [NSString stringWithFormat:@"setHasRepeated%@Array:", name]);
XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@",
name);
XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
@"field: %@", name);
+ // build the selector, i.e. - repeatedInt32Array_Count
+ SEL countSel = NSSelectorFromString(
+ [NSString stringWithFormat:@"repeated%@Array_Count", name]);
+ XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@",
+ name);
}
- // Oneofs - no has/setHas
+ // OneOf fields - no has*/setHas*
for (NSString *name in names) {
// build the selector, i.e. - hasOneofInt32/setHasOneofInt32:
@@ -112,6 +128,50 @@
XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
@"field: %@", name);
}
+
+ // map<> fields
+ // - no has*/setHas*
+ // - *Count
+
+ NSArray *mapNames = @[
+ @"Int32Int32",
+ @"Int64Int64",
+ @"Uint32Uint32",
+ @"Uint64Uint64",
+ @"Sint32Sint32",
+ @"Sint64Sint64",
+ @"Fixed32Fixed32",
+ @"Fixed64Fixed64",
+ @"Sfixed32Sfixed32",
+ @"Sfixed64Sfixed64",
+ @"Int32Float",
+ @"Int32Double",
+ @"BoolBool",
+ @"StringString",
+ @"StringBytes",
+ @"StringMessage",
+ @"Int32Bytes",
+ @"Int32Enum",
+ @"Int32Message",
+ ];
+
+ for (NSString *name in mapNames) {
+ // build the selector, i.e. - hasMapInt32Int32/setHasMapInt32Int32:
+ SEL hasSel = NSSelectorFromString(
+ [NSString stringWithFormat:@"hasMap%@", name]);
+ SEL setHasSel = NSSelectorFromString(
+ [NSString stringWithFormat:@"setHasMap%@:", name]);
+ XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@",
+ name);
+ XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
+ @"field: %@", name);
+ // build the selector, i.e. - mapInt32Int32Count
+ SEL countSel = NSSelectorFromString(
+ [NSString stringWithFormat:@"map%@_Count", name]);
+ XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@",
+ name);
+ }
+
}
- (void)testProto3HasMethodSupport {
@@ -136,10 +196,10 @@
];
// Proto3 gets:
- // - has* on non repeated message fields.
- // - setHas* on all non repeated message fields.
- // Singlular
+ // Single fields
+ // - has*/setHas* invalid for primative types.
+ // - has*/setHas* valid for Message.
for (NSString *name in names) {
// build the selector, i.e. - hasOptionalInt32/setHasOptionalInt32:
@@ -147,7 +207,7 @@
[NSString stringWithFormat:@"hasOptional%@", name]);
SEL setHasSel = NSSelectorFromString(
[NSString stringWithFormat:@"setHasOptional%@:", name]);
- if ([name isEqual:@"Group"] || [name isEqual:@"Message"]) {
+ if ([name isEqual:@"Message"]) {
// Sub messages/groups are the exception.
XCTAssertTrue([Message3 instancesRespondToSelector:hasSel], @"field: %@",
name);
@@ -161,21 +221,28 @@
}
}
- // Repeated - no has/setHas
+ // Repeated fields
+ // - no has*/setHas*
+ // - *Count
for (NSString *name in names) {
- // build the selector, i.e. - hasRepeatedInt32/setHasRepeatedInt32:
+ // build the selector, i.e. - hasRepeatedInt32Array/setHasRepeatedInt32Array:
SEL hasSel = NSSelectorFromString(
- [NSString stringWithFormat:@"hasRepeated%@", name]);
+ [NSString stringWithFormat:@"hasRepeated%@Array", name]);
SEL setHasSel = NSSelectorFromString(
- [NSString stringWithFormat:@"setHasRepeated%@:", name]);
+ [NSString stringWithFormat:@"setHasRepeated%@Array:", name]);
XCTAssertFalse([Message3 instancesRespondToSelector:hasSel], @"field: %@",
name);
XCTAssertFalse([Message3 instancesRespondToSelector:setHasSel],
@"field: %@", name);
+ // build the selector, i.e. - repeatedInt32Array_Count
+ SEL countSel = NSSelectorFromString(
+ [NSString stringWithFormat:@"repeated%@Array_Count", name]);
+ XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@",
+ name);
}
- // Oneofs - no has/setHas
+ // OneOf fields - no has*/setHas*
for (NSString *name in names) {
// build the selector, i.e. - hasOneofInt32/setHasOneofInt32:
@@ -188,6 +255,49 @@
XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
@"field: %@", name);
}
+
+ // map<> fields
+ // - no has*/setHas*
+ // - *Count
+
+ NSArray *mapNames = @[
+ @"Int32Int32",
+ @"Int64Int64",
+ @"Uint32Uint32",
+ @"Uint64Uint64",
+ @"Sint32Sint32",
+ @"Sint64Sint64",
+ @"Fixed32Fixed32",
+ @"Fixed64Fixed64",
+ @"Sfixed32Sfixed32",
+ @"Sfixed64Sfixed64",
+ @"Int32Float",
+ @"Int32Double",
+ @"BoolBool",
+ @"StringString",
+ @"StringBytes",
+ @"StringMessage",
+ @"Int32Bytes",
+ @"Int32Enum",
+ @"Int32Message",
+ ];
+
+ for (NSString *name in mapNames) {
+ // build the selector, i.e. - hasMapInt32Int32/setHasMapInt32Int32:
+ SEL hasSel = NSSelectorFromString(
+ [NSString stringWithFormat:@"hasMap%@", name]);
+ SEL setHasSel = NSSelectorFromString(
+ [NSString stringWithFormat:@"setHasMap%@:", name]);
+ XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@",
+ name);
+ XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
+ @"field: %@", name);
+ // build the selector, i.e. - mapInt32Int32Count
+ SEL countSel = NSSelectorFromString(
+ [NSString stringWithFormat:@"map%@_Count", name]);
+ XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@",
+ name);
+ }
}
- (void)testProto2SingleFieldHasBehavior {
diff --git a/objectivec/Tests/GPBMessageTests+Serialization.m b/objectivec/Tests/GPBMessageTests+Serialization.m
index 6d5527b5..ae4be9e5 100644
--- a/objectivec/Tests/GPBMessageTests+Serialization.m
+++ b/objectivec/Tests/GPBMessageTests+Serialization.m
@@ -36,6 +36,7 @@
#import "google/protobuf/MapProto2Unittest.pbobjc.h"
#import "google/protobuf/MapUnittest.pbobjc.h"
+#import "google/protobuf/Unittest.pbobjc.h"
#import "google/protobuf/UnittestDropUnknownFields.pbobjc.h"
#import "google/protobuf/UnittestPreserveUnknownEnum.pbobjc.h"
#import "google/protobuf/UnittestRuntimeProto2.pbobjc.h"
@@ -166,17 +167,15 @@ static NSData *DataFromCStr(const char *str) {
[unknownFields hasField:Message2_FieldNumber_RepeatedEnumArray]);
XCTAssertTrue([unknownFields hasField:Message2_FieldNumber_OneofEnum]);
- GPBField *field = [unknownFields getField:Message2_FieldNumber_OptionalEnum];
+ GPBUnknownField *field =
+ [unknownFields getField:Message2_FieldNumber_OptionalEnum];
XCTAssertEqual(field.varintList.count, 1U);
XCTAssertEqual([field.varintList valueAtIndex:0],
(uint64_t)Message3_Enum_Extra3);
- // Repeated in proto3 default to packed, so this will be length delimited
- // unknown field, and the value (Message3_Enum_Extra3) encodes into one byte.
field = [unknownFields getField:Message2_FieldNumber_RepeatedEnumArray];
- XCTAssertEqual(field.lengthDelimitedList.count, 1U);
- NSData *expected = DataFromCStr("\x1E");
- XCTAssertEqualObjects([field.lengthDelimitedList objectAtIndex:0], expected);
+ XCTAssertEqual(field.varintList.count, 1U);
+ XCTAssertEqual([field.varintList valueAtIndex:0], (uint64_t)Message3_Enum_Extra3);
field = [unknownFields getField:Message2_FieldNumber_OneofEnum];
XCTAssertEqual(field.varintList.count, 1U);
@@ -678,6 +677,131 @@ static NSData *DataFromCStr(const char *str) {
//%PDDM-EXPAND-END (2 expansions)
+- (void)testPackedUnpackedMessageParsing {
+ // packed is optional, a repeated field should parse when packed or unpacked.
+
+ TestPackedTypes *packedOrig = [TestPackedTypes message];
+ TestUnpackedTypes *unpackedOrig = [TestUnpackedTypes message];
+ [self setPackedFields:packedOrig repeatedCount:4];
+ [self setUnpackedFields:unpackedOrig repeatedCount:4];
+
+ NSData *packedData = [packedOrig data];
+ NSData *unpackedData = [unpackedOrig data];
+ XCTAssertNotNil(packedData);
+ XCTAssertNotNil(unpackedData);
+ XCTAssertNotEqualObjects(packedData, unpackedData,
+ @"Data should differ (packed vs unpacked) use");
+
+ NSError *error = nil;
+ TestPackedTypes *packedParse =
+ [TestPackedTypes parseFromData:unpackedData error:&error];
+ XCTAssertNotNil(packedParse);
+ XCTAssertNil(error);
+ XCTAssertEqualObjects(packedParse, packedOrig);
+
+ error = nil;
+ TestUnpackedTypes *unpackedParsed =
+ [TestUnpackedTypes parseFromData:packedData error:&error];
+ XCTAssertNotNil(unpackedParsed);
+ XCTAssertNil(error);
+ XCTAssertEqualObjects(unpackedParsed, unpackedOrig);
+}
+
+- (void)testPackedUnpackedExtensionParsing {
+ // packed is optional, a repeated extension should parse when packed or
+ // unpacked.
+
+ TestPackedExtensions *packedOrig = [TestPackedExtensions message];
+ TestUnpackedExtensions *unpackedOrig = [TestUnpackedExtensions message];
+ [self setPackedExtensions:packedOrig repeatedCount:kGPBDefaultRepeatCount];
+ [self setUnpackedExtensions:unpackedOrig repeatedCount:kGPBDefaultRepeatCount];
+
+ NSData *packedData = [packedOrig data];
+ NSData *unpackedData = [unpackedOrig data];
+ XCTAssertNotNil(packedData);
+ XCTAssertNotNil(unpackedData);
+ XCTAssertNotEqualObjects(packedData, unpackedData,
+ @"Data should differ (packed vs unpacked) use");
+
+ NSError *error = nil;
+ TestPackedExtensions *packedParse =
+ [TestPackedExtensions parseFromData:unpackedData
+ extensionRegistry:[UnittestRoot extensionRegistry]
+ error:&error];
+ XCTAssertNotNil(packedParse);
+ XCTAssertNil(error);
+ XCTAssertEqualObjects(packedParse, packedOrig);
+
+ error = nil;
+ TestUnpackedExtensions *unpackedParsed =
+ [TestUnpackedExtensions parseFromData:packedData
+ extensionRegistry:[UnittestRoot extensionRegistry]
+ error:&error];
+ XCTAssertNotNil(unpackedParsed);
+ XCTAssertNil(error);
+ XCTAssertEqualObjects(unpackedParsed, unpackedOrig);
+}
+
+- (void)testPackedExtensionVsFieldParsing {
+ // Extensions and fields end up on the wire the same way, so they can parse
+ // each other.
+
+ TestPackedTypes *fieldsOrig = [TestPackedTypes message];
+ TestPackedExtensions *extsOrig = [TestPackedExtensions message];
+ [self setPackedFields:fieldsOrig repeatedCount:kGPBDefaultRepeatCount];
+ [self setPackedExtensions:extsOrig repeatedCount:kGPBDefaultRepeatCount];
+
+ NSData *fieldsData = [fieldsOrig data];
+ NSData *extsData = [extsOrig data];
+ XCTAssertNotNil(fieldsData);
+ XCTAssertNotNil(extsData);
+ XCTAssertEqualObjects(fieldsData, extsData);
+
+ NSError *error = nil;
+ TestPackedTypes *fieldsParse =
+ [TestPackedTypes parseFromData:extsData error:&error];
+ XCTAssertNotNil(fieldsParse);
+ XCTAssertNil(error);
+ XCTAssertEqualObjects(fieldsParse, fieldsOrig);
+
+ error = nil;
+ TestPackedExtensions *extsParse =
+ [TestPackedExtensions parseFromData:fieldsData
+ extensionRegistry:[UnittestRoot extensionRegistry]
+ error:&error];
+ XCTAssertNotNil(extsParse);
+ XCTAssertNil(error);
+ XCTAssertEqualObjects(extsParse, extsOrig);
+}
+
+- (void)testUnpackedExtensionVsFieldParsing {
+ // Extensions and fields end up on the wire the same way, so they can parse
+ // each other.
+
+ TestUnpackedTypes *fieldsOrig = [TestUnpackedTypes message];
+ TestUnpackedExtensions *extsOrig = [TestUnpackedExtensions message];
+ [self setUnpackedFields:fieldsOrig repeatedCount:3];
+ [self setUnpackedExtensions:extsOrig repeatedCount:3];
+
+ NSData *fieldsData = [fieldsOrig data];
+ NSData *extsData = [extsOrig data];
+ XCTAssertNotNil(fieldsData);
+ XCTAssertNotNil(extsData);
+ XCTAssertEqualObjects(fieldsData, extsData);
+
+ TestUnpackedTypes *fieldsParse =
+ [TestUnpackedTypes parseFromData:extsData error:NULL];
+ XCTAssertNotNil(fieldsParse);
+ XCTAssertEqualObjects(fieldsParse, fieldsOrig);
+
+ TestUnpackedExtensions *extsParse =
+ [TestUnpackedExtensions parseFromData:fieldsData
+ extensionRegistry:[UnittestRoot extensionRegistry]
+ error:NULL];
+ XCTAssertNotNil(extsParse);
+ XCTAssertEqualObjects(extsParse, extsOrig);
+}
+
#pragma mark - Subset from from map_tests.cc
// TEST(GeneratedMapFieldTest, StandardWireFormat)
diff --git a/objectivec/Tests/GPBMessageTests.m b/objectivec/Tests/GPBMessageTests.m
index e0154c1a..cd0de8fc 100644
--- a/objectivec/Tests/GPBMessageTests.m
+++ b/objectivec/Tests/GPBMessageTests.m
@@ -35,12 +35,11 @@
#import "GPBArray_PackagePrivate.h"
#import "GPBDescriptor.h"
#import "GPBDictionary_PackagePrivate.h"
-#import "GPBField_PackagePrivate.h"
#import "GPBMessage_PackagePrivate.h"
+#import "GPBUnknownField_PackagePrivate.h"
#import "GPBUnknownFieldSet_PackagePrivate.h"
#import "google/protobuf/Unittest.pbobjc.h"
#import "google/protobuf/UnittestObjc.pbobjc.h"
-#import "google/protobuf/UnittestNameMangling.pbobjc.h"
@interface MessageTests : GPBTestCase
@end
@@ -420,10 +419,11 @@
GPBUnknownFieldSet *unknownFields =
[[[GPBUnknownFieldSet alloc] init] autorelease];
- GPBField *field = [[[GPBField alloc] initWithNumber:2] autorelease];
+ GPBUnknownField *field =
+ [[[GPBUnknownField alloc] initWithNumber:2] autorelease];
[field addVarint:2];
[unknownFields addField:field];
- field = [[[GPBField alloc] initWithNumber:3] autorelease];
+ field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
[field addVarint:4];
[unknownFields addField:field];
@@ -451,7 +451,7 @@
GPBFieldDescriptor *fieldDescriptor =
[descriptor fieldWithName:@"defaultInt32"];
XCTAssertNotNil(fieldDescriptor);
- GPBValue defaultValue = [fieldDescriptor defaultValue];
+ GPBGenericValue defaultValue = [fieldDescriptor defaultValue];
[message setDefaultInt32:defaultValue.valueInt32];
XCTAssertTrue(message.hasDefaultInt32);
XCTAssertEqual(message.defaultInt32, defaultValue.valueInt32);
@@ -1554,7 +1554,7 @@
// The other should not.
TestAllExtensions *message = [TestAllExtensions message];
TestAllExtensions *message2 = [TestAllExtensions message];
- GPBExtensionField *extension = [UnittestRoot optionalGroupExtension];
+ GPBExtensionDescriptor *extension = [UnittestRoot optionalGroupExtension];
[message setExtension:extension value:[message2 getExtension:extension]];
XCTAssertEqual([message getExtension:extension],
[message2 getExtension:extension]);
@@ -1571,9 +1571,9 @@
- (void)testCopyWithAutocreatedExtension {
// Mutable copy shouldn't copy autocreated extensions.
TestAllExtensions *message = [TestAllExtensions message];
- GPBExtensionField *optionalGroupExtension =
+ GPBExtensionDescriptor *optionalGroupExtension =
[UnittestRoot optionalGroupExtension];
- GPBExtensionField *optionalNestedMessageExtesion =
+ GPBExtensionDescriptor *optionalNestedMessageExtesion =
[UnittestRoot optionalNestedMessageExtension];
TestAllTypes_OptionalGroup *optionalGroup =
[message getExtension:optionalGroupExtension];
@@ -1603,7 +1603,7 @@
- (void)testClearMessageAutocreatedExtension {
// Call clear should cause it to recreate its autocreated extensions.
TestAllExtensions *message = [TestAllExtensions message];
- GPBExtensionField *optionalGroupExtension =
+ GPBExtensionDescriptor *optionalGroupExtension =
[UnittestRoot optionalGroupExtension];
TestAllTypes_OptionalGroup *optionalGroup =
[[message getExtension:optionalGroupExtension] retain];
@@ -1620,7 +1620,7 @@
// Should be able to retain autocreated extension while the creator is
// dealloced.
TestAllExtensions *message = [TestAllExtensions message];
- GPBExtensionField *optionalGroupExtension =
+ GPBExtensionDescriptor *optionalGroupExtension =
[UnittestRoot optionalGroupExtension];
@autoreleasepool {
@@ -1638,7 +1638,7 @@
- (void)testClearAutocreatedExtension {
// Clearing autocreated extension should NOT cause it to lose its creator.
TestAllExtensions *message = [TestAllExtensions message];
- GPBExtensionField *optionalGroupExtension =
+ GPBExtensionDescriptor *optionalGroupExtension =
[UnittestRoot optionalGroupExtension];
TestAllTypes_OptionalGroup *optionalGroup =
[[message getExtension:optionalGroupExtension] retain];
@@ -1651,7 +1651,8 @@
// Clearing autocreated extension should not cause its creator to become
// visible
- GPBExtensionField *recursiveExtension = [UnittestObjcRoot recursiveExtension];
+ GPBExtensionDescriptor *recursiveExtension =
+ [UnittestObjcRoot recursiveExtension];
TestAllExtensions *message_lvl2 = [message getExtension:recursiveExtension];
TestAllExtensions *message_lvl3 =
[message_lvl2 getExtension:recursiveExtension];
@@ -1663,7 +1664,8 @@
// Setting an extension should cause the extension to appear to its creator.
// Test this several levels deep.
TestAllExtensions *message = [TestAllExtensions message];
- GPBExtensionField *recursiveExtension = [UnittestObjcRoot recursiveExtension];
+ GPBExtensionDescriptor *recursiveExtension =
+ [UnittestObjcRoot recursiveExtension];
TestAllExtensions *message_lvl2 = [message getExtension:recursiveExtension];
TestAllExtensions *message_lvl3 =
[message_lvl2 getExtension:recursiveExtension];
@@ -1686,7 +1688,7 @@
- (void)testSetAutocreatedExtensionToSelf {
// Setting extension to itself should cause it to become visible.
TestAllExtensions *message = [TestAllExtensions message];
- GPBExtensionField *optionalGroupExtension =
+ GPBExtensionDescriptor *optionalGroupExtension =
[UnittestRoot optionalGroupExtension];
XCTAssertNotNil([message getExtension:optionalGroupExtension]);
XCTAssertFalse([message hasExtension:optionalGroupExtension]);
@@ -1696,7 +1698,8 @@
}
- (void)testAutocreatedExtensionMemoryLeaks {
- GPBExtensionField *recursiveExtension = [UnittestObjcRoot recursiveExtension];
+ GPBExtensionDescriptor *recursiveExtension =
+ [UnittestObjcRoot recursiveExtension];
// Test for memory leaks with autocreated extensions.
TestAllExtensions *message;
@@ -1729,7 +1732,8 @@
}
- (void)testSetExtensionWithAutocreatedValue {
- GPBExtensionField *recursiveExtension = [UnittestObjcRoot recursiveExtension];
+ GPBExtensionDescriptor *recursiveExtension =
+ [UnittestObjcRoot recursiveExtension];
TestAllExtensions *message;
@autoreleasepool {
@@ -1814,9 +1818,9 @@
}
- (void)testEnumDescriptorFromExtensionDescriptor {
- GPBExtensionField *extField = [UnittestRoot optionalForeignEnumExtension];
- GPBExtensionDescriptor *extDescriptor = extField.descriptor;
- XCTAssertEqual(extDescriptor.type, GPBTypeEnum);
+ GPBExtensionDescriptor *extDescriptor =
+ [UnittestRoot optionalForeignEnumExtension];
+ XCTAssertEqual(extDescriptor.dataType, GPBDataTypeEnum);
GPBEnumDescriptor *enumDescriptor = extDescriptor.enumDescriptor;
GPBEnumDescriptor *expectedDescriptor = ForeignEnum_EnumDescriptor();
XCTAssertEqualObjects(enumDescriptor, expectedDescriptor);
@@ -1925,11 +1929,4 @@
EnumTestMsg_MyEnum_NegTwo);
}
-- (void)testMutableNameManagling {
- // These basically confirm that all the expected name mangling happened by not
- // having compile errors.
-
- // TODO(thomasvl): Write these, see unittest_name_mangling.proto.
-}
-
@end
diff --git a/objectivec/Tests/GPBTestUtilities.h b/objectivec/Tests/GPBTestUtilities.h
index 6ae68c3a..44c80844 100644
--- a/objectivec/Tests/GPBTestUtilities.h
+++ b/objectivec/Tests/GPBTestUtilities.h
@@ -35,6 +35,8 @@
@class TestMap;
@class TestPackedTypes;
@class TestPackedExtensions;
+@class TestUnpackedTypes;
+@class TestUnpackedExtensions;
@class GPBExtensionRegistry;
@@ -55,8 +57,12 @@ extern const uint32_t kGPBDefaultRepeatCount;
repeatedCount:(uint32_t)count;
- (void)setPackedFields:(TestPackedTypes *)message
repeatedCount:(uint32_t)count;
+- (void)setUnpackedFields:(TestUnpackedTypes *)message
+ repeatedCount:(uint32_t)count;
- (void)setPackedExtensions:(TestPackedExtensions *)message
repeatedCount:(uint32_t)count;
+- (void)setUnpackedExtensions:(TestUnpackedExtensions *)message
+ repeatedCount:(uint32_t)count;
- (void)setAllMapFields:(TestMap *)message numEntries:(uint32_t)count;
- (TestAllTypes *)allSetRepeatedCount:(uint32_t)count;
diff --git a/objectivec/Tests/GPBTestUtilities.m b/objectivec/Tests/GPBTestUtilities.m
index 6058dfc1..3d85c744 100644
--- a/objectivec/Tests/GPBTestUtilities.m
+++ b/objectivec/Tests/GPBTestUtilities.m
@@ -599,6 +599,33 @@ const uint32_t kGPBDefaultRepeatCount = 2;
XCTAssertEqual(count, message.repeatedStringPieceArray.count);
XCTAssertEqual(count, message.repeatedCordArray.count);
+ XCTAssertEqual(count, message.repeatedInt32Array_Count);
+ XCTAssertEqual(count, message.repeatedInt64Array_Count);
+ XCTAssertEqual(count, message.repeatedUint32Array_Count);
+ XCTAssertEqual(count, message.repeatedUint64Array_Count);
+ XCTAssertEqual(count, message.repeatedSint32Array_Count);
+ XCTAssertEqual(count, message.repeatedSint64Array_Count);
+ XCTAssertEqual(count, message.repeatedFixed32Array_Count);
+ XCTAssertEqual(count, message.repeatedFixed64Array_Count);
+ XCTAssertEqual(count, message.repeatedSfixed32Array_Count);
+ XCTAssertEqual(count, message.repeatedSfixed64Array_Count);
+ XCTAssertEqual(count, message.repeatedFloatArray_Count);
+ XCTAssertEqual(count, message.repeatedDoubleArray_Count);
+ XCTAssertEqual(count, message.repeatedBoolArray_Count);
+ XCTAssertEqual(count, message.repeatedStringArray_Count);
+ XCTAssertEqual(count, message.repeatedBytesArray_Count);
+
+ XCTAssertEqual(count, message.repeatedGroupArray_Count);
+ XCTAssertEqual(count, message.repeatedNestedMessageArray_Count);
+ XCTAssertEqual(count, message.repeatedForeignMessageArray_Count);
+ XCTAssertEqual(count, message.repeatedImportMessageArray_Count);
+ XCTAssertEqual(count, message.repeatedNestedEnumArray_Count);
+ XCTAssertEqual(count, message.repeatedForeignEnumArray_Count);
+ XCTAssertEqual(count, message.repeatedImportEnumArray_Count);
+
+ XCTAssertEqual(count, message.repeatedStringPieceArray_Count);
+ XCTAssertEqual(count, message.repeatedCordArray_Count);
+
for (uint32_t i = 0; i < count; ++i) {
XCTAssertEqual((int)(201 + i * 100),
[message.repeatedInt32Array valueAtIndex:i]);
@@ -1097,6 +1124,72 @@ const uint32_t kGPBDefaultRepeatCount = 2;
}
}
+- (void)setAllTestPackedFields:(TestPackedTypes *)message {
+ // Must match -setAllTestUnpackedFields:
+ [message.packedInt32Array addValue:101];
+ [message.packedInt64Array addValue:102];
+ [message.packedUint32Array addValue:103];
+ [message.packedUint64Array addValue:104];
+ [message.packedSint32Array addValue:105];
+ [message.packedSint64Array addValue:106];
+ [message.packedFixed32Array addValue:107];
+ [message.packedFixed64Array addValue:108];
+ [message.packedSfixed32Array addValue:109];
+ [message.packedSfixed64Array addValue:110];
+ [message.packedFloatArray addValue:111.f];
+ [message.packedDoubleArray addValue:112.];
+ [message.packedBoolArray addValue:YES];
+ [message.packedEnumArray addValue:ForeignEnum_ForeignBar];
+
+ [message.packedInt32Array addValue:201];
+ [message.packedInt64Array addValue:302];
+ [message.packedUint32Array addValue:203];
+ [message.packedUint64Array addValue:204];
+ [message.packedSint32Array addValue:205];
+ [message.packedSint64Array addValue:206];
+ [message.packedFixed32Array addValue:207];
+ [message.packedFixed64Array addValue:208];
+ [message.packedSfixed32Array addValue:209];
+ [message.packedSfixed64Array addValue:210];
+ [message.packedFloatArray addValue:211.f];
+ [message.packedDoubleArray addValue:212.];
+ [message.packedBoolArray addValue:NO];
+ [message.packedEnumArray addValue:ForeignEnum_ForeignBaz];
+}
+
+- (void)setAllTestUnpackedFields:(TestUnpackedTypes *)message {
+ // Must match -setAllTestPackedFields:
+ [message.unpackedInt32Array addValue:101];
+ [message.unpackedInt64Array addValue:102];
+ [message.unpackedUint32Array addValue:103];
+ [message.unpackedUint64Array addValue:104];
+ [message.unpackedSint32Array addValue:105];
+ [message.unpackedSint64Array addValue:106];
+ [message.unpackedFixed32Array addValue:107];
+ [message.unpackedFixed64Array addValue:108];
+ [message.unpackedSfixed32Array addValue:109];
+ [message.unpackedSfixed64Array addValue:110];
+ [message.unpackedFloatArray addValue:111.f];
+ [message.unpackedDoubleArray addValue:112.];
+ [message.unpackedBoolArray addValue:YES];
+ [message.unpackedEnumArray addValue:ForeignEnum_ForeignBar];
+
+ [message.unpackedInt32Array addValue:201];
+ [message.unpackedInt64Array addValue:302];
+ [message.unpackedUint32Array addValue:203];
+ [message.unpackedUint64Array addValue:204];
+ [message.unpackedSint32Array addValue:205];
+ [message.unpackedSint64Array addValue:206];
+ [message.unpackedFixed32Array addValue:207];
+ [message.unpackedFixed64Array addValue:208];
+ [message.unpackedSfixed32Array addValue:209];
+ [message.unpackedSfixed64Array addValue:210];
+ [message.unpackedFloatArray addValue:211.f];
+ [message.unpackedDoubleArray addValue:212.];
+ [message.unpackedBoolArray addValue:NO];
+ [message.unpackedEnumArray addValue:ForeignEnum_ForeignBaz];
+}
+
- (GPBExtensionRegistry *)extensionRegistry {
return [UnittestRoot extensionRegistry];
}
@@ -1189,6 +1282,7 @@ const uint32_t kGPBDefaultRepeatCount = 2;
XCTAssertEqualObjects(message.optionalCord, @"");
// Repeated fields are empty.
+
XCTAssertEqual(0U, message.repeatedInt32Array.count);
XCTAssertEqual(0U, message.repeatedInt64Array.count);
XCTAssertEqual(0U, message.repeatedUint32Array.count);
@@ -1216,6 +1310,33 @@ const uint32_t kGPBDefaultRepeatCount = 2;
XCTAssertEqual(0U, message.repeatedStringPieceArray.count);
XCTAssertEqual(0U, message.repeatedCordArray.count);
+ XCTAssertEqual(0U, message.repeatedInt32Array_Count);
+ XCTAssertEqual(0U, message.repeatedInt64Array_Count);
+ XCTAssertEqual(0U, message.repeatedUint32Array_Count);
+ XCTAssertEqual(0U, message.repeatedUint64Array_Count);
+ XCTAssertEqual(0U, message.repeatedSint32Array_Count);
+ XCTAssertEqual(0U, message.repeatedSint64Array_Count);
+ XCTAssertEqual(0U, message.repeatedFixed32Array_Count);
+ XCTAssertEqual(0U, message.repeatedFixed64Array_Count);
+ XCTAssertEqual(0U, message.repeatedSfixed32Array_Count);
+ XCTAssertEqual(0U, message.repeatedSfixed64Array_Count);
+ XCTAssertEqual(0U, message.repeatedFloatArray_Count);
+ XCTAssertEqual(0U, message.repeatedDoubleArray_Count);
+ XCTAssertEqual(0U, message.repeatedBoolArray_Count);
+ XCTAssertEqual(0U, message.repeatedStringArray_Count);
+ XCTAssertEqual(0U, message.repeatedBytesArray_Count);
+
+ XCTAssertEqual(0U, message.repeatedGroupArray_Count);
+ XCTAssertEqual(0U, message.repeatedNestedMessageArray_Count);
+ XCTAssertEqual(0U, message.repeatedForeignMessageArray_Count);
+ XCTAssertEqual(0U, message.repeatedImportMessageArray_Count);
+ XCTAssertEqual(0U, message.repeatedNestedEnumArray_Count);
+ XCTAssertEqual(0U, message.repeatedForeignEnumArray_Count);
+ XCTAssertEqual(0U, message.repeatedImportEnumArray_Count);
+
+ XCTAssertEqual(0U, message.repeatedStringPieceArray_Count);
+ XCTAssertEqual(0U, message.repeatedCordArray_Count);
+
// hasBlah() should also be NO for all default fields.
XCTAssertFalse(message.hasDefaultInt32);
XCTAssertFalse(message.hasDefaultInt64);
@@ -1474,6 +1595,7 @@ const uint32_t kGPBDefaultRepeatCount = 2;
// ModifyRepeatedFields only sets the second repeated element of each
// field. In addition to verifying this, we also verify that the first
// element and size were *not* modified.
+
XCTAssertEqual(count, message.repeatedInt32Array.count);
XCTAssertEqual(count, message.repeatedInt64Array.count);
XCTAssertEqual(count, message.repeatedUint32Array.count);
@@ -1501,6 +1623,33 @@ const uint32_t kGPBDefaultRepeatCount = 2;
XCTAssertEqual(count, message.repeatedStringPieceArray.count);
XCTAssertEqual(count, message.repeatedCordArray.count);
+ XCTAssertEqual(count, message.repeatedInt32Array_Count);
+ XCTAssertEqual(count, message.repeatedInt64Array_Count);
+ XCTAssertEqual(count, message.repeatedUint32Array_Count);
+ XCTAssertEqual(count, message.repeatedUint64Array_Count);
+ XCTAssertEqual(count, message.repeatedSint32Array_Count);
+ XCTAssertEqual(count, message.repeatedSint64Array_Count);
+ XCTAssertEqual(count, message.repeatedFixed32Array_Count);
+ XCTAssertEqual(count, message.repeatedFixed64Array_Count);
+ XCTAssertEqual(count, message.repeatedSfixed32Array_Count);
+ XCTAssertEqual(count, message.repeatedSfixed64Array_Count);
+ XCTAssertEqual(count, message.repeatedFloatArray_Count);
+ XCTAssertEqual(count, message.repeatedDoubleArray_Count);
+ XCTAssertEqual(count, message.repeatedBoolArray_Count);
+ XCTAssertEqual(count, message.repeatedStringArray_Count);
+ XCTAssertEqual(count, message.repeatedBytesArray_Count);
+
+ XCTAssertEqual(count, message.repeatedGroupArray_Count);
+ XCTAssertEqual(count, message.repeatedNestedMessageArray_Count);
+ XCTAssertEqual(count, message.repeatedForeignMessageArray_Count);
+ XCTAssertEqual(count, message.repeatedImportMessageArray_Count);
+ XCTAssertEqual(count, message.repeatedNestedEnumArray_Count);
+ XCTAssertEqual(count, message.repeatedForeignEnumArray_Count);
+ XCTAssertEqual(count, message.repeatedImportEnumArray_Count);
+
+ XCTAssertEqual(count, message.repeatedStringPieceArray_Count);
+ XCTAssertEqual(count, message.repeatedCordArray_Count);
+
XCTAssertEqual(201, [message.repeatedInt32Array valueAtIndex:0]);
XCTAssertEqual(202LL, [message.repeatedInt64Array valueAtIndex:0]);
XCTAssertEqual(203U, [message.repeatedUint32Array valueAtIndex:0]);
@@ -1563,105 +1712,101 @@ const uint32_t kGPBDefaultRepeatCount = 2;
- (void)setPackedFields:(TestPackedTypes *)message
repeatedCount:(uint32_t)count {
- {
- GPBInt32Array *scratch = [GPBInt32Array array];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch addValue:601 + i * 100];
- }
- [message setPackedInt32Array:scratch];
+ // Must match -setUnpackedFields:repeatedCount:
+ // Must match -setPackedExtensions:repeatedCount:
+ // Must match -setUnpackedExtensions:repeatedCount:
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedInt32Array addValue:601 + i * 100];
}
- {
- GPBInt64Array *scratch = [GPBInt64Array array];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch addValue:602 + i * 100];
- }
- [message setPackedInt64Array:scratch];
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedInt64Array addValue:602 + i * 100];
}
- {
- GPBUInt32Array *scratch = [GPBUInt32Array array];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch addValue:603 + i * 100];
- }
- [message setPackedUint32Array:scratch];
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedUint32Array addValue:603 + i * 100];
}
- {
- GPBUInt64Array *scratch = [GPBUInt64Array array];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch addValue:604 + i * 100];
- }
- [message setPackedUint64Array:scratch];
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedUint64Array addValue:604 + i * 100];
}
- {
- GPBInt32Array *scratch = [GPBInt32Array array];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch addValue:605 + i * 100];
- }
- [message setPackedSint32Array:scratch];
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedSint32Array addValue:605 + i * 100];
}
- {
- GPBInt64Array *scratch = [GPBInt64Array array];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch addValue:606 + i * 100];
- }
- [message setPackedSint64Array:scratch];
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedSint64Array addValue:606 + i * 100];
}
- {
- GPBUInt32Array *scratch = [GPBUInt32Array array];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch addValue:607 + i * 100];
- }
- [message setPackedFixed32Array:scratch];
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedFixed32Array addValue:607 + i * 100];
}
- {
- GPBUInt64Array *scratch = [GPBUInt64Array array];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch addValue:608 + i * 100];
- }
- [message setPackedFixed64Array:scratch];
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedFixed64Array addValue:608 + i * 100];
}
- {
- GPBInt32Array *scratch = [GPBInt32Array array];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch addValue:609 + i * 100];
- }
- [message setPackedSfixed32Array:scratch];
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedSfixed32Array addValue:609 + i * 100];
}
- {
- GPBInt64Array *scratch = [GPBInt64Array array];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch addValue:610 + i * 100];
- }
- [message setPackedSfixed64Array:scratch];
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedSfixed64Array addValue:610 + i * 100];
}
- {
- GPBFloatArray *scratch = [GPBFloatArray array];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch addValue:611 + i * 100];
- }
- [message setPackedFloatArray:scratch];
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedFloatArray addValue:611 + i * 100];
}
- {
- GPBDoubleArray *scratch = [GPBDoubleArray array];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch addValue:612 + i * 100];
- }
- [message setPackedDoubleArray:scratch];
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedDoubleArray addValue:612 + i * 100];
}
- {
- GPBBoolArray *scratch = [GPBBoolArray array];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch addValue:(i % 2) ? YES : NO];
- }
- [message setPackedBoolArray:scratch];
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedBoolArray addValue:(i % 2) ? YES : NO];
}
- {
- GPBEnumArray *scratch =
- [GPBEnumArray arrayWithValidationFunction:ForeignEnum_IsValidValue];
- for (uint32_t i = 0; i < count; ++i) {
- [scratch
- addValue:(i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz];
- }
- [message setPackedEnumArray:scratch];
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.packedEnumArray
+ addValue:(i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz];
+ }
+}
+
+- (void)setUnpackedFields:(TestUnpackedTypes *)message
+ repeatedCount:(uint32_t)count {
+ // Must match -setPackedFields:repeatedCount:
+ // Must match -setPackedExtensions:repeatedCount:
+ // Must match -setUnpackedExtensions:repeatedCount:
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedInt32Array addValue:601 + i * 100];
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedInt64Array addValue:602 + i * 100];
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedUint32Array addValue:603 + i * 100];
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedUint64Array addValue:604 + i * 100];
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedSint32Array addValue:605 + i * 100];
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedSint64Array addValue:606 + i * 100];
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedFixed32Array addValue:607 + i * 100];
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedFixed64Array addValue:608 + i * 100];
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedSfixed32Array addValue:609 + i * 100];
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedSfixed64Array addValue:610 + i * 100];
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedFloatArray addValue:611 + i * 100];
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedDoubleArray addValue:612 + i * 100];
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedBoolArray addValue:(i % 2) ? YES : NO];
+ }
+ for (uint32_t i = 0; i < count; ++i) {
+ [message.unpackedEnumArray
+ addValue:(i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz];
}
}
@@ -1708,6 +1853,9 @@ const uint32_t kGPBDefaultRepeatCount = 2;
- (void)setPackedExtensions:(TestPackedExtensions *)message
repeatedCount:(uint32_t)count {
+ // Must match -setPackedFields:repeatedCount:
+ // Must match -setUnpackedFields:repeatedCount:
+ // Must match -setUnpackedExtensions:repeatedCount:
for (uint32_t i = 0; i < count; i++) {
[message addExtension:[UnittestRoot packedInt32Extension]
value:@(601 + i * 100)];
@@ -1741,6 +1889,44 @@ const uint32_t kGPBDefaultRepeatCount = 2;
}
}
+- (void)setUnpackedExtensions:(TestUnpackedExtensions *)message
+ repeatedCount:(uint32_t)count {
+ // Must match -setPackedFields:repeatedCount:
+ // Must match -setUnpackedFields:repeatedCount:
+ // Must match -setPackedExtensions:repeatedCount:
+ for (uint32_t i = 0; i < count; i++) {
+ [message addExtension:[UnittestRoot unpackedInt32Extension]
+ value:@(601 + i * 100)];
+ [message addExtension:[UnittestRoot unpackedInt64Extension]
+ value:@(602 + i * 100)];
+ [message addExtension:[UnittestRoot unpackedUint32Extension]
+ value:@(603 + i * 100)];
+ [message addExtension:[UnittestRoot unpackedUint64Extension]
+ value:@(604 + i * 100)];
+ [message addExtension:[UnittestRoot unpackedSint32Extension]
+ value:@(605 + i * 100)];
+ [message addExtension:[UnittestRoot unpackedSint64Extension]
+ value:@(606 + i * 100)];
+ [message addExtension:[UnittestRoot unpackedFixed32Extension]
+ value:@(607 + i * 100)];
+ [message addExtension:[UnittestRoot unpackedFixed64Extension]
+ value:@(608 + i * 100)];
+ [message addExtension:[UnittestRoot unpackedSfixed32Extension]
+ value:@(609 + i * 100)];
+ [message addExtension:[UnittestRoot unpackedSfixed64Extension]
+ value:@(610 + i * 100)];
+ [message addExtension:[UnittestRoot unpackedFloatExtension]
+ value:@(611 + i * 100)];
+ [message addExtension:[UnittestRoot unpackedDoubleExtension]
+ value:@(612 + i * 100)];
+ [message addExtension:[UnittestRoot unpackedBoolExtension]
+ value:@((i % 2) ? YES : NO)];
+ [message addExtension:[UnittestRoot unpackedEnumExtension]
+ value:@((i % 2) ? ForeignEnum_ForeignBar
+ : ForeignEnum_ForeignBaz)];
+ }
+}
+
- (void)assertPackedExtensionsSet:(TestPackedExtensions *)message
repeatedCount:(uint32_t)count{
XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedInt32Extension]] count]);
@@ -1884,6 +2070,34 @@ const uint32_t kGPBDefaultRepeatCount = 2;
XCTAssertEqualObjects(message.repeatedStringPieceArray, [message valueForKey:@"repeatedStringPieceArray"]);
XCTAssertEqualObjects(message.repeatedCordArray, [message valueForKey:@"repeatedCordArray"]);
+ XCTAssertEqualObjects(@(message.repeatedInt32Array_Count), [message valueForKey:@"repeatedInt32Array_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedInt64Array_Count), [message valueForKey:@"repeatedInt64Array_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedUint32Array_Count), [message valueForKey:@"repeatedUint32Array_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedUint64Array_Count), [message valueForKey:@"repeatedUint64Array_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedSint32Array_Count), [message valueForKey:@"repeatedSint32Array_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedSint64Array_Count), [message valueForKey:@"repeatedSint64Array_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedFixed32Array_Count), [message valueForKey:@"repeatedFixed32Array_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedFixed64Array_Count), [message valueForKey:@"repeatedFixed64Array_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedSfixed32Array_Count), [message valueForKey:@"repeatedSfixed32Array_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedSfixed64Array_Count), [message valueForKey:@"repeatedSfixed64Array_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedFloatArray_Count), [message valueForKey:@"repeatedFloatArray_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedDoubleArray_Count), [message valueForKey:@"repeatedDoubleArray_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedBoolArray_Count), [message valueForKey:@"repeatedBoolArray_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedStringArray_Count), [message valueForKey:@"repeatedStringArray_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedBytesArray_Count), [message valueForKey:@"repeatedBytesArray_Count"]);
+
+ XCTAssertEqualObjects(@(message.repeatedGroupArray_Count), [message valueForKey:@"repeatedGroupArray_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedNestedMessageArray_Count), [message valueForKey:@"repeatedNestedMessageArray_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedForeignMessageArray_Count), [message valueForKey:@"repeatedForeignMessageArray_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedImportMessageArray_Count), [message valueForKey:@"repeatedImportMessageArray_Count"]);
+
+ XCTAssertEqualObjects(@(message.repeatedNestedEnumArray_Count), [message valueForKey:@"repeatedNestedEnumArray_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedForeignEnumArray_Count), [message valueForKey:@"repeatedForeignEnumArray_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedImportEnumArray_Count), [message valueForKey:@"repeatedImportEnumArray_Count"]);
+
+ XCTAssertEqualObjects(@(message.repeatedStringPieceArray_Count), [message valueForKey:@"repeatedStringPieceArray_Count"]);
+ XCTAssertEqualObjects(@(message.repeatedCordArray_Count), [message valueForKey:@"repeatedCordArray_Count"]);
+
// -----------------------------------------------------------------
XCTAssertEqualObjects([message valueForKey:@"hasDefaultInt32"], @YES);
diff --git a/objectivec/Tests/GPBUnittestProtos.m b/objectivec/Tests/GPBUnittestProtos.m
index 2c271bf7..0a3fc583 100644
--- a/objectivec/Tests/GPBUnittestProtos.m
+++ b/objectivec/Tests/GPBUnittestProtos.m
@@ -40,16 +40,15 @@
#import "google/protobuf/UnittestEmbedOptimizeFor.pbobjc.m"
#import "google/protobuf/UnittestEmpty.pbobjc.m"
#import "google/protobuf/UnittestEnormousDescriptor.pbobjc.m"
-#import "google/protobuf/UnittestFilter.pbobjc.m"
#import "google/protobuf/UnittestImport.pbobjc.m"
#import "google/protobuf/UnittestImportLite.pbobjc.m"
#import "google/protobuf/UnittestImportPublic.pbobjc.m"
#import "google/protobuf/UnittestImportPublicLite.pbobjc.m"
#import "google/protobuf/UnittestLite.pbobjc.m"
#import "google/protobuf/UnittestMset.pbobjc.m"
-#import "google/protobuf/UnittestNameMangling.pbobjc.m"
#import "google/protobuf/UnittestNoGenericServices.pbobjc.m"
#import "google/protobuf/UnittestObjc.pbobjc.m"
+#import "google/protobuf/UnittestObjcStartup.pbobjc.m"
#import "google/protobuf/UnittestOptimizeFor.pbobjc.m"
#import "google/protobuf/UnittestPreserveUnknownEnum.pbobjc.m"
#import "google/protobuf/UnittestRuntimeProto2.pbobjc.m"
diff --git a/objectivec/Tests/GPBUnknownFieldSetTest.m b/objectivec/Tests/GPBUnknownFieldSetTest.m
index 491bba9e..01217ca6 100644
--- a/objectivec/Tests/GPBUnknownFieldSetTest.m
+++ b/objectivec/Tests/GPBUnknownFieldSetTest.m
@@ -30,7 +30,7 @@
#import "GPBTestUtilities.h"
-#import "GPBField_PackagePrivate.h"
+#import "GPBUnknownField_PackagePrivate.h"
#import "GPBUnknownFieldSet_PackagePrivate.h"
#import "google/protobuf/Unittest.pbobjc.h"
@@ -60,7 +60,7 @@
unknownFields_ = emptyMessage_.unknownFields;
}
-- (GPBField*)getField:(int32_t)number {
+- (GPBUnknownField *)getField:(int32_t)number {
return [unknownFields_ getField:number];
}
@@ -75,17 +75,17 @@
[unknownFields_ getTags:tags];
for (NSUInteger i = 0; i < count; ++i) {
int32_t tag = tags[i];
- GPBField* field = [unknownFields_ getField:tag];
+ GPBUnknownField* field = [unknownFields_ getField:tag];
if (field.varintList.count == 0) {
// Original field is not a varint, so use a varint.
- GPBField* varintField =
- [[[GPBField alloc] initWithNumber:tag] autorelease];
+ GPBUnknownField* varintField =
+ [[[GPBUnknownField alloc] initWithNumber:tag] autorelease];
[varintField addVarint:1];
[bizarroFields addField:varintField];
} else {
// Original field *is* a varint, so use something else.
- GPBField* fixed32Field =
- [[[GPBField alloc] initWithNumber:tag] autorelease];
+ GPBUnknownField* fixed32Field =
+ [[[GPBUnknownField alloc] initWithNumber:tag] autorelease];
[fixed32Field addFixed32:1];
[bizarroFields addField:fixed32Field];
}
@@ -110,34 +110,34 @@
- (void)testMergeFrom {
GPBUnknownFieldSet* set1 = [[[GPBUnknownFieldSet alloc] init] autorelease];
- GPBField* field = [[[GPBField alloc] initWithNumber:2] autorelease];
+ GPBUnknownField* field = [[[GPBUnknownField alloc] initWithNumber:2] autorelease];
[field addVarint:2];
[set1 addField:field];
- field = [[[GPBField alloc] initWithNumber:3] autorelease];
+ field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
[field addVarint:4];
[set1 addField:field];
GPBUnknownFieldSet* set2 = [[[GPBUnknownFieldSet alloc] init] autorelease];
- field = [[[GPBField alloc] initWithNumber:1] autorelease];
+ field = [[[GPBUnknownField alloc] initWithNumber:1] autorelease];
[field addVarint:1];
[set2 addField:field];
- field = [[[GPBField alloc] initWithNumber:3] autorelease];
+ field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
[field addVarint:3];
[set2 addField:field];
GPBUnknownFieldSet* set3 = [[[GPBUnknownFieldSet alloc] init] autorelease];
- field = [[[GPBField alloc] initWithNumber:1] autorelease];
+ field = [[[GPBUnknownField alloc] initWithNumber:1] autorelease];
[field addVarint:1];
[set3 addField:field];
- field = [[[GPBField alloc] initWithNumber:3] autorelease];
+ field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
[field addVarint:4];
[set3 addField:field];
GPBUnknownFieldSet* set4 = [[[GPBUnknownFieldSet alloc] init] autorelease];
- field = [[[GPBField alloc] initWithNumber:2] autorelease];
+ field = [[[GPBUnknownField alloc] initWithNumber:2] autorelease];
[field addVarint:2];
[set4 addField:field];
- field = [[[GPBField alloc] initWithNumber:3] autorelease];
+ field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
[field addVarint:3];
[set4 addField:field];
@@ -162,7 +162,7 @@
}
- (void)testClearMessage {
- TestEmptyMessage* message = [TestEmptyMessage message];
+ TestEmptyMessage *message = [TestEmptyMessage message];
[message mergeFrom:emptyMessage_];
[message clear];
XCTAssertEqual(message.serializedSize, (size_t)0);
@@ -170,8 +170,9 @@
- (void)testParseKnownAndUnknown {
// Test mixing known and unknown fields when parsing.
- GPBUnknownFieldSet* fields = [[unknownFields_ copy] autorelease];
- GPBField* field = [[[GPBField alloc] initWithNumber:123456] autorelease];
+ GPBUnknownFieldSet *fields = [[unknownFields_ copy] autorelease];
+ GPBUnknownField *field =
+ [[[GPBUnknownField alloc] initWithNumber:123456] autorelease];
[field addVarint:654321];
[fields addField:field];
@@ -181,7 +182,7 @@
[self assertAllFieldsSet:destination repeatedCount:kGPBDefaultRepeatCount];
XCTAssertEqual(destination.unknownFields.countOfFields, (NSUInteger)1);
- GPBField* field2 = [destination.unknownFields getField:123456];
+ GPBUnknownField* field2 = [destination.unknownFields getField:123456];
XCTAssertEqual(field2.varintList.count, (NSUInteger)1);
XCTAssertEqual(654321ULL, [field2.varintList valueAtIndex:0]);
}
@@ -230,7 +231,7 @@
- (void)testLargeVarint {
GPBUnknownFieldSet* fields = [[unknownFields_ copy] autorelease];
- GPBField* field = [[[GPBField alloc] initWithNumber:1] autorelease];
+ GPBUnknownField* field = [[[GPBUnknownField alloc] initWithNumber:1] autorelease];
[field addVarint:0x7FFFFFFFFFFFFFFFL];
[fields addField:field];
@@ -238,19 +239,19 @@
GPBUnknownFieldSet* parsed = [[[GPBUnknownFieldSet alloc] init] autorelease];
[parsed mergeFromData:data];
- GPBField* field2 = [parsed getField:1];
+ GPBUnknownField* field2 = [parsed getField:1];
XCTAssertEqual(field2.varintList.count, (NSUInteger)1);
XCTAssertEqual(0x7FFFFFFFFFFFFFFFULL, [field2.varintList valueAtIndex:0]);
}
- (void)testMergingFields {
- GPBField* field1 = [[[GPBField alloc] initWithNumber:1] autorelease];
+ GPBUnknownField* field1 = [[[GPBUnknownField alloc] initWithNumber:1] autorelease];
[field1 addVarint:1];
[field1 addFixed32:2];
[field1 addFixed64:3];
[field1 addLengthDelimited:[NSData dataWithBytes:"hello" length:5]];
[field1 addGroup:[[unknownFields_ copy] autorelease]];
- GPBField* field2 = [[[GPBField alloc] initWithNumber:2] autorelease];
+ GPBUnknownField* field2 = [[[GPBUnknownField alloc] initWithNumber:2] autorelease];
[field2 mergeFromField:field1];
XCTAssertEqualObjects(field1, field2);
}
diff --git a/objectivec/Tests/GPBUtilitiesTests.m b/objectivec/Tests/GPBUtilitiesTests.m
index 02de0197..ba1fc270 100644
--- a/objectivec/Tests/GPBUtilitiesTests.m
+++ b/objectivec/Tests/GPBUtilitiesTests.m
@@ -47,141 +47,6 @@
@interface UtilitiesTests : GPBTestCase
@end
-// Support code for testing
-typedef struct {
- uint32_t _has_storage_[1];
- BOOL aBool;
- int32_t aInt32;
- uint32_t aUInt32;
- int64_t aInt64;
- uint64_t aUInt64;
- float aFloat;
- double aDouble;
- id aObject;
- BOOL _hasTest;
- BOOL stopper;
- BOOL shouldNotBeCounted;
- GPBInt32Array *anArray;
-} ApplyFunctionsTest_Storage;
-
-@interface ApplyFunctionsTest : GPBMessage
-@property(nonatomic, readwrite) BOOL aBool;
-@property(nonatomic, readwrite) int32_t aInt32;
-@property(nonatomic, readwrite) uint32_t aUInt32;
-@property(nonatomic, readwrite) int64_t aInt64;
-@property(nonatomic, readwrite) uint64_t aUInt64;
-@property(nonatomic, readwrite) float aFloat;
-@property(nonatomic, readwrite) double aDouble;
-@property(nonatomic, readwrite, retain) id aObject;
-@property(nonatomic, readwrite) BOOL _hasTest;
-@property(nonatomic, readwrite) BOOL stopper;
-@property(nonatomic, readwrite) BOOL shouldNotBeCounted;
-@property(nonatomic, readwrite, retain) GPBInt32Array *anArray;
-@end
-
-@implementation ApplyFunctionsTest
-
-@dynamic aBool, aInt32, aUInt32, aInt64, aUInt64, aFloat, aDouble, aObject;
-@dynamic _hasTest, stopper, shouldNotBeCounted, anArray;
-
-+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
- if (!descriptor) {
- static GPBMessageFieldDescription fields[] = {
-#define FIELD_ENTRY(NAME, INDEX) \
- { \
- .name = "a" #NAME, .hasIndex = INDEX, .type = GPBType##NAME, \
- .offset = offsetof(ApplyFunctionsTest_Storage, a##NAME), \
- }
- FIELD_ENTRY(Bool, 1),
- FIELD_ENTRY(Int32, 2),
- FIELD_ENTRY(UInt32, 3),
- FIELD_ENTRY(Int64, 4),
- FIELD_ENTRY(UInt64, 5),
- FIELD_ENTRY(Float, 6),
- FIELD_ENTRY(Double, 7),
-#undef FIELD_ENTRY
- {
- .name = "aObject",
- .type = GPBTypeString,
- .hasIndex = 8,
- .offset = offsetof(ApplyFunctionsTest_Storage, aObject),
- },
- {
- .name = "stopper",
- .type = GPBTypeBool,
- .hasIndex = 9,
- .offset = offsetof(ApplyFunctionsTest_Storage, stopper),
- },
- {
- .name = "shouldNotBeCounted",
- .type = GPBTypeBool,
- .hasIndex = 10,
- .offset = offsetof(ApplyFunctionsTest_Storage, shouldNotBeCounted),
- },
- {
- .name = "anArray",
- .type = GPBTypeInt32,
- .hasIndex = 11,
- .flags = GPBFieldRepeated,
- .offset = offsetof(ApplyFunctionsTest_Storage, anArray),
- },
- };
- descriptor = [GPBDescriptor
- allocDescriptorForClass:[self class]
- rootClass:Nil
- file:nil
- fields:fields
- fieldCount:sizeof(fields) /
- sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(ApplyFunctionsTest_Storage)
- wireFormat:NO];
- }
- return descriptor;
-}
-
-@end
-
-typedef struct {
- int calledBool;
- int calledInt32;
- int calledUInt32;
- int calledInt64;
- int calledUInt64;
- int calledFloat;
- int calledDouble;
- int calledObject;
- int hitCount;
-} TestApplyFunctionsContext;
-
-// Really, who needs templates?
-// Macro for testing apply functions. Declares a variety of different functions
-// base on |NAME|.
-#define TEST_APPLY_FUNCTIONS_FUNC(NAME) \
- static BOOL TestApplyFunction##NAME(GPBFieldDescriptor *field, \
- void *voidContext) { \
- TestApplyFunctionsContext *context = voidContext; \
- if (field->getSel_ == sel_getUid("stopper")) return NO; \
- context->called##NAME += 1; \
- context->hitCount += 1; \
- return YES; \
- }
-
-TEST_APPLY_FUNCTIONS_FUNC(Bool)
-TEST_APPLY_FUNCTIONS_FUNC(Int32)
-TEST_APPLY_FUNCTIONS_FUNC(UInt32)
-TEST_APPLY_FUNCTIONS_FUNC(Int64)
-TEST_APPLY_FUNCTIONS_FUNC(UInt64)
-TEST_APPLY_FUNCTIONS_FUNC(Float)
-TEST_APPLY_FUNCTIONS_FUNC(Double)
-TEST_APPLY_FUNCTIONS_FUNC(Object)
-
@implementation UtilitiesTests
- (void)testRightShiftFunctions {
@@ -194,61 +59,6 @@ TEST_APPLY_FUNCTIONS_FUNC(Object)
XCTAssertEqual(GPBLogicalRightShift64((1LL << 63), 63), 1LL);
}
-- (void)testMutability {
- ApplyFunctionsTest *foo_message = [ApplyFunctionsTest message];
- XCTAssertEqual(0, [foo_message aInt32]);
- [foo_message setAInt32:100];
- XCTAssertEqual(100, [foo_message aInt32]);
-}
-
-- (void)testSerializedSize {
- ApplyFunctionsTest *foo_message = [ApplyFunctionsTest message];
- [foo_message setAInt32:100];
- size_t size1 = [foo_message serializedSize];
- [foo_message setAInt64:100];
- size_t size2 = [foo_message serializedSize];
-
- // Intentionally doing a pointer comparison.
- XCTAssertNotEqual(size1, size2);
-}
-
-- (void)testCopying {
- ApplyFunctionsTest *foo_message = [ApplyFunctionsTest message];
- [foo_message setAInt32:100];
- [foo_message setAObject:@"Happy"];
- ApplyFunctionsTest *foo = [[foo_message copy] autorelease];
- XCTAssertNotEqual(foo, foo_message); // Pointer comparision
- XCTAssertEqualObjects(foo, foo_message);
-}
-
-- (void)testApplyFunctions {
- // Covers ApplyFunctionsToProtoVariables and
- // ApplyFunctionsBasedOnEncodingType.
- // This test depends on the layout of the ivars to be in the order
- // declared in the interface. If this is not true, it will fail and will
- // need to be rewritten to accomodate.
- TestApplyFunctionsContext context;
- memset(&context, 0, sizeof(context));
- GPBApplyFunctions foo = GPBAPPLY_FUNCTIONS_INIT(TestApplyFunction);
- ApplyFunctionsTest *msg = [ApplyFunctionsTest message];
- GPBApplyFunctionsToMessageFields(&foo, msg, &context);
-
- // Only eight vars should be set.
- // "stopper" should cause the loop to quit so it and shouldNotBeCounted should
- // not be counted.
- // "_hasTest" should be skipped over.
- // Each of the vars should only be set once.
- XCTAssertEqual(context.hitCount, 8);
- XCTAssertEqual(context.calledBool, 1);
- XCTAssertEqual(context.calledInt32, 1);
- XCTAssertEqual(context.calledUInt32, 1);
- XCTAssertEqual(context.calledInt64, 1);
- XCTAssertEqual(context.calledUInt64, 1);
- XCTAssertEqual(context.calledFloat, 1);
- XCTAssertEqual(context.calledDouble, 1);
- XCTAssertEqual(context.calledObject, 1);
-}
-
- (void)testGPBDecodeTextFormatName {
uint8_t decodeData[] = {
0x6,
diff --git a/objectivec/Tests/GPBWireFormatTests.m b/objectivec/Tests/GPBWireFormatTests.m
index fc5c4bda..d722d7b2 100644
--- a/objectivec/Tests/GPBWireFormatTests.m
+++ b/objectivec/Tests/GPBWireFormatTests.m
@@ -32,7 +32,7 @@
#import "GPBCodedInputStream.h"
#import "GPBMessage_PackagePrivate.h"
-#import "GPBField_PackagePrivate.h"
+#import "GPBUnknownField_PackagePrivate.h"
#import "google/protobuf/Unittest.pbobjc.h"
#import "google/protobuf/UnittestMset.pbobjc.h"
@@ -143,8 +143,8 @@ const int kUnknownTypeId = 1550055;
setI:123];
[[message_set getExtension:[TestMessageSetExtension2 messageSetExtension]]
setStr:@"foo"];
- GPBField* unknownField =
- [[[GPBField alloc] initWithNumber:kUnknownTypeId] autorelease];
+ GPBUnknownField* unknownField =
+ [[[GPBUnknownField alloc] initWithNumber:kUnknownTypeId] autorelease];
[unknownField addLengthDelimited:[NSData dataWithBytes:"bar" length:3]];
GPBUnknownFieldSet* unknownFieldSet =
[[[GPBUnknownFieldSet alloc] init] autorelease];
@@ -159,9 +159,9 @@ const int kUnknownTypeId = 1550055;
XCTAssertEqual([raw.unknownFields countOfFields], (NSUInteger)0);
XCTAssertEqual(raw.itemArray.count, (NSUInteger)3);
- XCTAssertEqual([raw.itemArray[0] typeId],
+ XCTAssertEqual((uint32_t)[raw.itemArray[0] typeId],
[TestMessageSetExtension1 messageSetExtension].fieldNumber);
- XCTAssertEqual([raw.itemArray[1] typeId],
+ XCTAssertEqual((uint32_t)[raw.itemArray[1] typeId],
[TestMessageSetExtension2 messageSetExtension].fieldNumber);
XCTAssertEqual([raw.itemArray[2] typeId], kUnknownTypeId);
@@ -227,7 +227,7 @@ const int kUnknownTypeId = 1550055;
@"foo");
XCTAssertEqual([messageSet.unknownFields countOfFields], (NSUInteger)1);
- GPBField* unknownField = [messageSet.unknownFields getField:kUnknownTypeId];
+ GPBUnknownField* unknownField = [messageSet.unknownFields getField:kUnknownTypeId];
XCTAssertNotNil(unknownField);
XCTAssertEqual(unknownField.lengthDelimitedList.count, (NSUInteger)1);
XCTAssertEqualObjects(unknownField.lengthDelimitedList[0],
diff --git a/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/Contents.json b/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/Contents.json
index ecd3584e..0cbf9acc 100644
--- a/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -34,19 +34,19 @@
{
"size" : "57x57",
"idiom" : "iphone",
- "filename" : "iPhone6@2x.png",
+ "filename" : "iPhone6_2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
- "filename" : "iPhone7@2x.png",
+ "filename" : "iPhone7_2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
- "filename" : "iPhone7@3x.png",
+ "filename" : "iPhone7_3x.png",
"scale" : "3x"
},
{
@@ -88,7 +88,7 @@
{
"size" : "72x72",
"idiom" : "ipad",
- "filename" : "iPad6@2x.png",
+ "filename" : "iPad6_2x.png",
"scale" : "2x"
},
{
@@ -100,7 +100,7 @@
{
"size" : "76x76",
"idiom" : "ipad",
- "filename" : "iPad7@2x.png",
+ "filename" : "iPad7_2x.png",
"scale" : "2x"
},
{
@@ -113,4 +113,4 @@
"version" : 1,
"author" : "xcode"
}
-} \ No newline at end of file
+}
diff --git a/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad6@2x.png b/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad6_2x.png
index 2ec93704..2ec93704 100644
--- a/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad6@2x.png
+++ b/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad6_2x.png
Binary files differ
diff --git a/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad7@2x.png b/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad7_2x.png
index e39cc3e7..e39cc3e7 100644
--- a/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad7@2x.png
+++ b/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPad7_2x.png
Binary files differ
diff --git a/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone6@2x.png b/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone6_2x.png
index 2424997f..2424997f 100644
--- a/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone6@2x.png
+++ b/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone6_2x.png
Binary files differ
diff --git a/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7@2x.png b/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7_2x.png
index 10bfc3cf..10bfc3cf 100644
--- a/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7@2x.png
+++ b/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7_2x.png
Binary files differ
diff --git a/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7@3x.png b/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7_3x.png
index 8d16f14d..8d16f14d 100644
--- a/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7@3x.png
+++ b/objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/iPhone7_3x.png
Binary files differ
diff --git a/objectivec/Tests/unittest_filter.proto b/objectivec/Tests/unittest_filter.proto
deleted file mode 100644
index 1398dfc8..00000000
--- a/objectivec/Tests/unittest_filter.proto
+++ /dev/null
@@ -1,71 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2013 Google Inc. All rights reserved.
-//
-// 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 protobuf_unittest;
-
-
-message Keep {
-}
-
-message Remove {
-}
-
-message RemoveJustKidding {
-}
-
-message Other {
- optional Keep a = 1;
- optional Remove b = 2;
-}
-
-enum RemoveEnum {
- RemoveValue = 1;
-}
-
-enum KeepEnum {
- KeepValue = 1;
-}
-
-message RemoveEnumMessage {
- enum KeepEnumInside {
- KeepValue = 1;
- }
-
- enum RemoveEnumInside {
- RemoveValue = 1;
- }
-
- message KeepNestedInside {
- }
-
- message RemoveNestedInside {
- }
-}
diff --git a/objectivec/Tests/unittest_name_mangling.proto b/objectivec/Tests/unittest_name_mangling.proto
deleted file mode 100644
index aadad6d6..00000000
--- a/objectivec/Tests/unittest_name_mangling.proto
+++ /dev/null
@@ -1,37 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2015 Google Inc. All rights reserved.
-//
-// 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 objc_class_prefix = "ABC";
-
-package protobuf_unittest;
-
-// TODO(thomasvl): Add tests for the special cases in name mangling.
-
diff --git a/objectivec/Tests/Filter1.txt b/objectivec/Tests/unittest_objc_startup.proto
index 88a5cac8..aee7bd55 100644
--- a/objectivec/Tests/Filter1.txt
+++ b/objectivec/Tests/unittest_objc_startup.proto
@@ -1,5 +1,5 @@
// Protocol Buffers - Google's data interchange format
-// Copyright 2014 Google Inc. All rights reserved.
+// Copyright 2008 Google Inc. All rights reserved.
// https://developers.google.com/protocol-buffers/
//
// Redistribution and use in source and binary forms, with or without
@@ -28,13 +28,22 @@
// (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";
-// Test the filter system for the ObjC Protocol Buffer Compiler.
+package protobuf_objc_unittest;
-// Class names are matched using file name globbing rules.
-// Whitespace is not allowed at the beginning of a line (except for a line
-// that is a single newline).
+message TestObjCStartupMessage {
+ extensions 1 to max;
+}
-Keep
-RemoveEnumMessage_KeepNestedInside
-RemoveJustKidding
+extend TestObjCStartupMessage {
+ // Singular
+ optional int32 optional_int32_extension = 1;
+ repeated int32 repeated_int32_extension = 2;
+}
+
+message TestObjCStartupNested {
+ extend TestObjCStartupMessage {
+ optional string nested_string_extension = 3;
+ }
+}
diff --git a/objectivec/google/protobuf/Any.pbobjc.m b/objectivec/google/protobuf/Any.pbobjc.m
index 4db73cb9..b41102a4 100644
--- a/objectivec/google/protobuf/Any.pbobjc.m
+++ b/objectivec/google/protobuf/Any.pbobjc.m
@@ -11,11 +11,14 @@
@end
+#pragma mark - GPBAnyRoot_FileDescriptor
+
static GPBFileDescriptor *GPBAnyRoot_FileDescriptor(void) {
// This is called by +initialize so there is no need to worry
// about thread safety of the singleton.
static GPBFileDescriptor *descriptor = NULL;
if (!descriptor) {
+ GPBDebugCheckRuntimeVersion();
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
syntax:GPBFileSyntaxProto3];
}
@@ -29,16 +32,16 @@ static GPBFileDescriptor *GPBAnyRoot_FileDescriptor(void) {
@dynamic typeURL;
@dynamic value;
-typedef struct GPBAny_Storage {
+typedef struct GPBAny__storage_ {
uint32_t _has_storage_[1];
NSString *typeURL;
NSData *value;
-} GPBAny_Storage;
+} GPBAny__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -46,10 +49,10 @@ typedef struct GPBAny_Storage {
.number = GPBAny_FieldNumber_TypeURL,
.hasIndex = 0,
.flags = GPBFieldOptional | GPBFieldTextFormatNameCustom,
- .type = GPBTypeString,
- .offset = offsetof(GPBAny_Storage, typeURL),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBAny__storage_, typeURL),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -57,10 +60,10 @@ typedef struct GPBAny_Storage {
.number = GPBAny_FieldNumber_Value,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeData,
- .offset = offsetof(GPBAny_Storage, value),
+ .dataType = GPBDataTypeBytes,
+ .offset = offsetof(GPBAny__storage_, value),
.defaultValue.valueData = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
@@ -69,20 +72,23 @@ typedef struct GPBAny_Storage {
#else
static const char *extraTextFormatInfo = "\001\001\004\241!!\000";
#endif // GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBAny class]
- rootClass:[GPBAnyRoot class]
- file:GPBAnyRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBAny_Storage)
- wireFormat:NO
- extraTextFormatInfo:extraTextFormatInfo];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBAny class]
+ rootClass:[GPBAnyRoot class]
+ file:GPBAnyRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBAny__storage_)
+ wireFormat:NO
+ extraTextFormatInfo:extraTextFormatInfo];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
diff --git a/objectivec/google/protobuf/Api.pbobjc.h b/objectivec/google/protobuf/Api.pbobjc.h
index 9e6fc850..061347be 100644
--- a/objectivec/google/protobuf/Api.pbobjc.h
+++ b/objectivec/google/protobuf/Api.pbobjc.h
@@ -45,10 +45,12 @@ typedef GPB_ENUM(GPBApi_FieldNumber) {
// The methods of this api, in unspecified order.
// |methodsArray| contains |GPBMethod|
@property(nonatomic, readwrite, strong) NSMutableArray *methodsArray;
+@property(nonatomic, readonly) NSUInteger methodsArray_Count;
// Any metadata attached to the API.
// |optionsArray| contains |GPBOption|
@property(nonatomic, readwrite, strong) NSMutableArray *optionsArray;
+@property(nonatomic, readonly) NSUInteger optionsArray_Count;
// A version string for this api. If specified, must have the form
// `major-version.minor-version`, as in `1.10`. If the minor version
@@ -113,6 +115,7 @@ typedef GPB_ENUM(GPBMethod_FieldNumber) {
// Any metadata attached to the method.
// |optionsArray| contains |GPBOption|
@property(nonatomic, readwrite, strong) NSMutableArray *optionsArray;
+@property(nonatomic, readonly) NSUInteger optionsArray_Count;
@end
diff --git a/objectivec/google/protobuf/Api.pbobjc.m b/objectivec/google/protobuf/Api.pbobjc.m
index 9416860a..c2be94ab 100644
--- a/objectivec/google/protobuf/Api.pbobjc.m
+++ b/objectivec/google/protobuf/Api.pbobjc.m
@@ -16,10 +16,8 @@
// about thread safety and initialization of registry.
static GPBExtensionRegistry* registry = nil;
if (!registry) {
+ GPBDebugCheckRuntimeVersion();
registry = [[GPBExtensionRegistry alloc] init];
- static GPBExtensionDescription descriptions[] = {
- };
- #pragma unused (descriptions)
[registry addExtensions:[GPBSourceContextRoot extensionRegistry]];
[registry addExtensions:[GPBTypeRoot extensionRegistry]];
}
@@ -28,11 +26,14 @@
@end
+#pragma mark - GPBApiRoot_FileDescriptor
+
static GPBFileDescriptor *GPBApiRoot_FileDescriptor(void) {
// This is called by +initialize so there is no need to worry
// about thread safety of the singleton.
static GPBFileDescriptor *descriptor = NULL;
if (!descriptor) {
+ GPBDebugCheckRuntimeVersion();
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
syntax:GPBFileSyntaxProto3];
}
@@ -44,24 +45,24 @@ static GPBFileDescriptor *GPBApiRoot_FileDescriptor(void) {
@implementation GPBApi
@dynamic name;
-@dynamic methodsArray;
-@dynamic optionsArray;
+@dynamic methodsArray, methodsArray_Count;
+@dynamic optionsArray, optionsArray_Count;
@dynamic version;
@dynamic hasSourceContext, sourceContext;
-typedef struct GPBApi_Storage {
+typedef struct GPBApi__storage_ {
uint32_t _has_storage_[1];
NSString *name;
NSMutableArray *methodsArray;
NSMutableArray *optionsArray;
NSString *version;
GPBSourceContext *sourceContext;
-} GPBApi_Storage;
+} GPBApi__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -69,10 +70,10 @@ typedef struct GPBApi_Storage {
.number = GPBApi_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBApi_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBApi__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -80,10 +81,10 @@ typedef struct GPBApi_Storage {
.number = GPBApi_FieldNumber_MethodsArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBApi_Storage, methodsArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBApi__storage_, methodsArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBMethod),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBMethod),
.fieldOptions = NULL,
},
{
@@ -91,10 +92,10 @@ typedef struct GPBApi_Storage {
.number = GPBApi_FieldNumber_OptionsArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBApi_Storage, optionsArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBApi__storage_, optionsArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBOption),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
.fieldOptions = NULL,
},
{
@@ -102,10 +103,10 @@ typedef struct GPBApi_Storage {
.number = GPBApi_FieldNumber_Version,
.hasIndex = 3,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBApi_Storage, version),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBApi__storage_, version),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -113,26 +114,29 @@ typedef struct GPBApi_Storage {
.number = GPBApi_FieldNumber_SourceContext,
.hasIndex = 4,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBApi_Storage, sourceContext),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBApi__storage_, sourceContext),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBSourceContext),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext),
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBApi class]
- rootClass:[GPBApiRoot class]
- file:GPBApiRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBApi_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBApi class]
+ rootClass:[GPBApiRoot class]
+ file:GPBApiRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBApi__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -148,9 +152,9 @@ typedef struct GPBApi_Storage {
@dynamic requestStreaming;
@dynamic responseTypeURL;
@dynamic responseStreaming;
-@dynamic optionsArray;
+@dynamic optionsArray, optionsArray_Count;
-typedef struct GPBMethod_Storage {
+typedef struct GPBMethod__storage_ {
uint32_t _has_storage_[1];
BOOL requestStreaming;
BOOL responseStreaming;
@@ -158,12 +162,12 @@ typedef struct GPBMethod_Storage {
NSString *requestTypeURL;
NSString *responseTypeURL;
NSMutableArray *optionsArray;
-} GPBMethod_Storage;
+} GPBMethod__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -171,10 +175,10 @@ typedef struct GPBMethod_Storage {
.number = GPBMethod_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBMethod_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBMethod__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -182,10 +186,10 @@ typedef struct GPBMethod_Storage {
.number = GPBMethod_FieldNumber_RequestTypeURL,
.hasIndex = 1,
.flags = GPBFieldOptional | GPBFieldTextFormatNameCustom,
- .type = GPBTypeString,
- .offset = offsetof(GPBMethod_Storage, requestTypeURL),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBMethod__storage_, requestTypeURL),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -193,10 +197,10 @@ typedef struct GPBMethod_Storage {
.number = GPBMethod_FieldNumber_RequestStreaming,
.hasIndex = 2,
.flags = GPBFieldOptional,
- .type = GPBTypeBool,
- .offset = offsetof(GPBMethod_Storage, requestStreaming),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBMethod__storage_, requestStreaming),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -204,10 +208,10 @@ typedef struct GPBMethod_Storage {
.number = GPBMethod_FieldNumber_ResponseTypeURL,
.hasIndex = 3,
.flags = GPBFieldOptional | GPBFieldTextFormatNameCustom,
- .type = GPBTypeString,
- .offset = offsetof(GPBMethod_Storage, responseTypeURL),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBMethod__storage_, responseTypeURL),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -215,10 +219,10 @@ typedef struct GPBMethod_Storage {
.number = GPBMethod_FieldNumber_ResponseStreaming,
.hasIndex = 4,
.flags = GPBFieldOptional,
- .type = GPBTypeBool,
- .offset = offsetof(GPBMethod_Storage, responseStreaming),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBMethod__storage_, responseStreaming),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -226,10 +230,10 @@ typedef struct GPBMethod_Storage {
.number = GPBMethod_FieldNumber_OptionsArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBMethod_Storage, optionsArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBMethod__storage_, optionsArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBOption),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
.fieldOptions = NULL,
},
};
@@ -238,20 +242,23 @@ typedef struct GPBMethod_Storage {
#else
static const char *extraTextFormatInfo = "\002\002\007\244\241!!\000\004\010\244\241!!\000";
#endif // GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBMethod class]
- rootClass:[GPBApiRoot class]
- file:GPBApiRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBMethod_Storage)
- wireFormat:NO
- extraTextFormatInfo:extraTextFormatInfo];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBMethod class]
+ rootClass:[GPBApiRoot class]
+ file:GPBApiRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBMethod__storage_)
+ wireFormat:NO
+ extraTextFormatInfo:extraTextFormatInfo];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
diff --git a/objectivec/google/protobuf/Descriptor.pbobjc.h b/objectivec/google/protobuf/Descriptor.pbobjc.h
index 5a53abbc..e0106534 100644
--- a/objectivec/google/protobuf/Descriptor.pbobjc.h
+++ b/objectivec/google/protobuf/Descriptor.pbobjc.h
@@ -152,6 +152,7 @@ typedef GPB_ENUM(GPBFileDescriptorSet_FieldNumber) {
// |fileArray| contains |GPBFileDescriptorProto|
@property(nonatomic, readwrite, strong) NSMutableArray *fileArray;
+@property(nonatomic, readonly) NSUInteger fileArray_Count;
@end
@@ -186,26 +187,33 @@ typedef GPB_ENUM(GPBFileDescriptorProto_FieldNumber) {
// Names of files imported by this file.
// |dependencyArray| contains |NSString|
@property(nonatomic, readwrite, strong) NSMutableArray *dependencyArray;
+@property(nonatomic, readonly) NSUInteger dependencyArray_Count;
// Indexes of the public imported files in the dependency list above.
@property(nonatomic, readwrite, strong) GPBInt32Array *publicDependencyArray;
+@property(nonatomic, readonly) NSUInteger publicDependencyArray_Count;
// Indexes of the weak imported files in the dependency list.
// For Google-internal migration only. Do not use.
@property(nonatomic, readwrite, strong) GPBInt32Array *weakDependencyArray;
+@property(nonatomic, readonly) NSUInteger weakDependencyArray_Count;
// All top-level definitions in this file.
// |messageTypeArray| contains |GPBDescriptorProto|
@property(nonatomic, readwrite, strong) NSMutableArray *messageTypeArray;
+@property(nonatomic, readonly) NSUInteger messageTypeArray_Count;
// |enumTypeArray| contains |GPBEnumDescriptorProto|
@property(nonatomic, readwrite, strong) NSMutableArray *enumTypeArray;
+@property(nonatomic, readonly) NSUInteger enumTypeArray_Count;
// |serviceArray| contains |GPBServiceDescriptorProto|
@property(nonatomic, readwrite, strong) NSMutableArray *serviceArray;
+@property(nonatomic, readonly) NSUInteger serviceArray_Count;
// |extensionArray| contains |GPBFieldDescriptorProto|
@property(nonatomic, readwrite, strong) NSMutableArray *extensionArray;
+@property(nonatomic, readonly) NSUInteger extensionArray_Count;
@property(nonatomic, readwrite) BOOL hasOptions;
@property(nonatomic, readwrite, strong) GPBFileOptions *options;
@@ -247,32 +255,40 @@ typedef GPB_ENUM(GPBDescriptorProto_FieldNumber) {
// |fieldArray| contains |GPBFieldDescriptorProto|
@property(nonatomic, readwrite, strong) NSMutableArray *fieldArray;
+@property(nonatomic, readonly) NSUInteger fieldArray_Count;
// |extensionArray| contains |GPBFieldDescriptorProto|
@property(nonatomic, readwrite, strong) NSMutableArray *extensionArray;
+@property(nonatomic, readonly) NSUInteger extensionArray_Count;
// |nestedTypeArray| contains |GPBDescriptorProto|
@property(nonatomic, readwrite, strong) NSMutableArray *nestedTypeArray;
+@property(nonatomic, readonly) NSUInteger nestedTypeArray_Count;
// |enumTypeArray| contains |GPBEnumDescriptorProto|
@property(nonatomic, readwrite, strong) NSMutableArray *enumTypeArray;
+@property(nonatomic, readonly) NSUInteger enumTypeArray_Count;
// |extensionRangeArray| contains |GPBDescriptorProto_ExtensionRange|
@property(nonatomic, readwrite, strong) NSMutableArray *extensionRangeArray;
+@property(nonatomic, readonly) NSUInteger extensionRangeArray_Count;
// |oneofDeclArray| contains |GPBOneofDescriptorProto|
@property(nonatomic, readwrite, strong) NSMutableArray *oneofDeclArray;
+@property(nonatomic, readonly) NSUInteger oneofDeclArray_Count;
@property(nonatomic, readwrite) BOOL hasOptions;
@property(nonatomic, readwrite, strong) GPBMessageOptions *options;
// |reservedRangeArray| contains |GPBDescriptorProto_ReservedRange|
@property(nonatomic, readwrite, strong) NSMutableArray *reservedRangeArray;
+@property(nonatomic, readonly) NSUInteger reservedRangeArray_Count;
// Reserved field names, which may not be used by fields in the same message.
// A given name may only be reserved once.
// |reservedNameArray| contains |NSString|
@property(nonatomic, readwrite, strong) NSMutableArray *reservedNameArray;
+@property(nonatomic, readonly) NSUInteger reservedNameArray_Count;
@end
@@ -407,6 +423,7 @@ typedef GPB_ENUM(GPBEnumDescriptorProto_FieldNumber) {
// |valueArray| contains |GPBEnumValueDescriptorProto|
@property(nonatomic, readwrite, strong) NSMutableArray *valueArray;
+@property(nonatomic, readonly) NSUInteger valueArray_Count;
@property(nonatomic, readwrite) BOOL hasOptions;
@property(nonatomic, readwrite, strong) GPBEnumOptions *options;
@@ -451,6 +468,7 @@ typedef GPB_ENUM(GPBServiceDescriptorProto_FieldNumber) {
// |methodArray| contains |GPBMethodDescriptorProto|
@property(nonatomic, readwrite, strong) NSMutableArray *methodArray;
+@property(nonatomic, readonly) NSUInteger methodArray_Count;
@property(nonatomic, readwrite) BOOL hasOptions;
@property(nonatomic, readwrite, strong) GPBServiceOptions *options;
@@ -617,6 +635,7 @@ typedef GPB_ENUM(GPBFileOptions_FieldNumber) {
// The parser stores options it doesn't recognize here. See above.
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
+@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
@end
@@ -693,6 +712,7 @@ typedef GPB_ENUM(GPBMessageOptions_FieldNumber) {
// The parser stores options it doesn't recognize here. See above.
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
+@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
@end
@@ -782,6 +802,7 @@ typedef GPB_ENUM(GPBFieldOptions_FieldNumber) {
// The parser stores options it doesn't recognize here. See above.
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
+@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
@end
@@ -810,6 +831,7 @@ typedef GPB_ENUM(GPBEnumOptions_FieldNumber) {
// The parser stores options it doesn't recognize here. See above.
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
+@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
@end
@@ -832,6 +854,7 @@ typedef GPB_ENUM(GPBEnumValueOptions_FieldNumber) {
// The parser stores options it doesn't recognize here. See above.
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
+@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
@end
@@ -854,6 +877,7 @@ typedef GPB_ENUM(GPBServiceOptions_FieldNumber) {
// The parser stores options it doesn't recognize here. See above.
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
+@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
@end
@@ -876,6 +900,7 @@ typedef GPB_ENUM(GPBMethodOptions_FieldNumber) {
// The parser stores options it doesn't recognize here. See above.
// |uninterpretedOptionArray| contains |GPBUninterpretedOption|
@property(nonatomic, readwrite, strong) NSMutableArray *uninterpretedOptionArray;
+@property(nonatomic, readonly) NSUInteger uninterpretedOptionArray_Count;
@end
@@ -901,6 +926,7 @@ typedef GPB_ENUM(GPBUninterpretedOption_FieldNumber) {
// |nameArray| contains |GPBUninterpretedOption_NamePart|
@property(nonatomic, readwrite, strong) NSMutableArray *nameArray;
+@property(nonatomic, readonly) NSUInteger nameArray_Count;
// The value of the uninterpreted option, in whatever type the tokenizer
// identified it as during parsing. Exactly one of these should be set.
@@ -1001,6 +1027,7 @@ typedef GPB_ENUM(GPBSourceCodeInfo_FieldNumber) {
// be recorded in the future.
// |locationArray| contains |GPBSourceCodeInfo_Location|
@property(nonatomic, readwrite, strong) NSMutableArray *locationArray;
+@property(nonatomic, readonly) NSUInteger locationArray_Count;
@end
@@ -1040,6 +1067,7 @@ typedef GPB_ENUM(GPBSourceCodeInfo_Location_FieldNumber) {
// this path refers to the whole field declaration (from the beginning
// of the label to the terminating semicolon).
@property(nonatomic, readwrite, strong) GPBInt32Array *pathArray;
+@property(nonatomic, readonly) NSUInteger pathArray_Count;
// Always has exactly three or four elements: start line, start column,
// end line (optional, otherwise assumed same as start line), end column.
@@ -1047,6 +1075,7 @@ typedef GPB_ENUM(GPBSourceCodeInfo_Location_FieldNumber) {
// and column numbers are zero-based -- typically you will want to add
// 1 to each before displaying to a user.
@property(nonatomic, readwrite, strong) GPBInt32Array *spanArray;
+@property(nonatomic, readonly) NSUInteger spanArray_Count;
// If this SourceCodeInfo represents a complete declaration, these are any
// comments appearing before and after the declaration which appear to be
@@ -1103,6 +1132,7 @@ typedef GPB_ENUM(GPBSourceCodeInfo_Location_FieldNumber) {
// |leadingDetachedCommentsArray| contains |NSString|
@property(nonatomic, readwrite, strong) NSMutableArray *leadingDetachedCommentsArray;
+@property(nonatomic, readonly) NSUInteger leadingDetachedCommentsArray_Count;
@end
diff --git a/objectivec/google/protobuf/Descriptor.pbobjc.m b/objectivec/google/protobuf/Descriptor.pbobjc.m
index 7f1bdd49..8c535b9a 100644
--- a/objectivec/google/protobuf/Descriptor.pbobjc.m
+++ b/objectivec/google/protobuf/Descriptor.pbobjc.m
@@ -11,11 +11,14 @@
@end
+#pragma mark - GPBDescriptorRoot_FileDescriptor
+
static GPBFileDescriptor *GPBDescriptorRoot_FileDescriptor(void) {
// This is called by +initialize so there is no need to worry
// about thread safety of the singleton.
static GPBFileDescriptor *descriptor = NULL;
if (!descriptor) {
+ GPBDebugCheckRuntimeVersion();
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
syntax:GPBFileSyntaxProto2];
}
@@ -26,17 +29,17 @@ static GPBFileDescriptor *GPBDescriptorRoot_FileDescriptor(void) {
@implementation GPBFileDescriptorSet
-@dynamic fileArray;
+@dynamic fileArray, fileArray_Count;
-typedef struct GPBFileDescriptorSet_Storage {
+typedef struct GPBFileDescriptorSet__storage_ {
uint32_t _has_storage_[1];
NSMutableArray *fileArray;
-} GPBFileDescriptorSet_Storage;
+} GPBFileDescriptorSet__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -44,26 +47,29 @@ typedef struct GPBFileDescriptorSet_Storage {
.number = GPBFileDescriptorSet_FieldNumber_FileArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBFileDescriptorSet_Storage, fileArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBFileDescriptorSet__storage_, fileArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBFileDescriptorProto),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBFileDescriptorProto),
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBFileDescriptorSet class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBFileDescriptorSet_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBFileDescriptorSet class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBFileDescriptorSet__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -76,18 +82,18 @@ typedef struct GPBFileDescriptorSet_Storage {
@dynamic hasName, name;
@dynamic hasPackage, package;
-@dynamic dependencyArray;
-@dynamic publicDependencyArray;
-@dynamic weakDependencyArray;
-@dynamic messageTypeArray;
-@dynamic enumTypeArray;
-@dynamic serviceArray;
-@dynamic extensionArray;
+@dynamic dependencyArray, dependencyArray_Count;
+@dynamic publicDependencyArray, publicDependencyArray_Count;
+@dynamic weakDependencyArray, weakDependencyArray_Count;
+@dynamic messageTypeArray, messageTypeArray_Count;
+@dynamic enumTypeArray, enumTypeArray_Count;
+@dynamic serviceArray, serviceArray_Count;
+@dynamic extensionArray, extensionArray_Count;
@dynamic hasOptions, options;
@dynamic hasSourceCodeInfo, sourceCodeInfo;
@dynamic hasSyntax, syntax;
-typedef struct GPBFileDescriptorProto_Storage {
+typedef struct GPBFileDescriptorProto__storage_ {
uint32_t _has_storage_[1];
NSString *name;
NSString *package;
@@ -101,12 +107,12 @@ typedef struct GPBFileDescriptorProto_Storage {
GPBInt32Array *publicDependencyArray;
GPBInt32Array *weakDependencyArray;
NSString *syntax;
-} GPBFileDescriptorProto_Storage;
+} GPBFileDescriptorProto__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -114,10 +120,10 @@ typedef struct GPBFileDescriptorProto_Storage {
.number = GPBFileDescriptorProto_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBFileDescriptorProto_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFileDescriptorProto__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -125,10 +131,10 @@ typedef struct GPBFileDescriptorProto_Storage {
.number = GPBFileDescriptorProto_FieldNumber_Package,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBFileDescriptorProto_Storage, package),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFileDescriptorProto__storage_, package),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -136,10 +142,10 @@ typedef struct GPBFileDescriptorProto_Storage {
.number = GPBFileDescriptorProto_FieldNumber_DependencyArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeString,
- .offset = offsetof(GPBFileDescriptorProto_Storage, dependencyArray),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFileDescriptorProto__storage_, dependencyArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -147,10 +153,10 @@ typedef struct GPBFileDescriptorProto_Storage {
.number = GPBFileDescriptorProto_FieldNumber_MessageTypeArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBFileDescriptorProto_Storage, messageTypeArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBFileDescriptorProto__storage_, messageTypeArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBDescriptorProto),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBDescriptorProto),
.fieldOptions = NULL,
},
{
@@ -158,10 +164,10 @@ typedef struct GPBFileDescriptorProto_Storage {
.number = GPBFileDescriptorProto_FieldNumber_EnumTypeArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBFileDescriptorProto_Storage, enumTypeArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBFileDescriptorProto__storage_, enumTypeArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBEnumDescriptorProto),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBEnumDescriptorProto),
.fieldOptions = NULL,
},
{
@@ -169,10 +175,10 @@ typedef struct GPBFileDescriptorProto_Storage {
.number = GPBFileDescriptorProto_FieldNumber_ServiceArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBFileDescriptorProto_Storage, serviceArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBFileDescriptorProto__storage_, serviceArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBServiceDescriptorProto),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBServiceDescriptorProto),
.fieldOptions = NULL,
},
{
@@ -180,10 +186,10 @@ typedef struct GPBFileDescriptorProto_Storage {
.number = GPBFileDescriptorProto_FieldNumber_ExtensionArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBFileDescriptorProto_Storage, extensionArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBFileDescriptorProto__storage_, extensionArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBFieldDescriptorProto),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBFieldDescriptorProto),
.fieldOptions = NULL,
},
{
@@ -191,10 +197,10 @@ typedef struct GPBFileDescriptorProto_Storage {
.number = GPBFileDescriptorProto_FieldNumber_Options,
.hasIndex = 9,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBFileDescriptorProto_Storage, options),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBFileDescriptorProto__storage_, options),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBFileOptions),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBFileOptions),
.fieldOptions = NULL,
},
{
@@ -202,10 +208,10 @@ typedef struct GPBFileDescriptorProto_Storage {
.number = GPBFileDescriptorProto_FieldNumber_SourceCodeInfo,
.hasIndex = 10,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBFileDescriptorProto_Storage, sourceCodeInfo),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBFileDescriptorProto__storage_, sourceCodeInfo),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBSourceCodeInfo),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBSourceCodeInfo),
.fieldOptions = NULL,
},
{
@@ -213,10 +219,10 @@ typedef struct GPBFileDescriptorProto_Storage {
.number = GPBFileDescriptorProto_FieldNumber_PublicDependencyArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBFileDescriptorProto_Storage, publicDependencyArray),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBFileDescriptorProto__storage_, publicDependencyArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -224,10 +230,10 @@ typedef struct GPBFileDescriptorProto_Storage {
.number = GPBFileDescriptorProto_FieldNumber_WeakDependencyArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBFileDescriptorProto_Storage, weakDependencyArray),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBFileDescriptorProto__storage_, weakDependencyArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -235,26 +241,29 @@ typedef struct GPBFileDescriptorProto_Storage {
.number = GPBFileDescriptorProto_FieldNumber_Syntax,
.hasIndex = 11,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBFileDescriptorProto_Storage, syntax),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFileDescriptorProto__storage_, syntax),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBFileDescriptorProto class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBFileDescriptorProto_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBFileDescriptorProto class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBFileDescriptorProto__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -266,17 +275,17 @@ typedef struct GPBFileDescriptorProto_Storage {
@implementation GPBDescriptorProto
@dynamic hasName, name;
-@dynamic fieldArray;
-@dynamic extensionArray;
-@dynamic nestedTypeArray;
-@dynamic enumTypeArray;
-@dynamic extensionRangeArray;
-@dynamic oneofDeclArray;
+@dynamic fieldArray, fieldArray_Count;
+@dynamic extensionArray, extensionArray_Count;
+@dynamic nestedTypeArray, nestedTypeArray_Count;
+@dynamic enumTypeArray, enumTypeArray_Count;
+@dynamic extensionRangeArray, extensionRangeArray_Count;
+@dynamic oneofDeclArray, oneofDeclArray_Count;
@dynamic hasOptions, options;
-@dynamic reservedRangeArray;
-@dynamic reservedNameArray;
+@dynamic reservedRangeArray, reservedRangeArray_Count;
+@dynamic reservedNameArray, reservedNameArray_Count;
-typedef struct GPBDescriptorProto_Storage {
+typedef struct GPBDescriptorProto__storage_ {
uint32_t _has_storage_[1];
NSString *name;
NSMutableArray *fieldArray;
@@ -288,12 +297,12 @@ typedef struct GPBDescriptorProto_Storage {
NSMutableArray *oneofDeclArray;
NSMutableArray *reservedRangeArray;
NSMutableArray *reservedNameArray;
-} GPBDescriptorProto_Storage;
+} GPBDescriptorProto__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -301,10 +310,10 @@ typedef struct GPBDescriptorProto_Storage {
.number = GPBDescriptorProto_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBDescriptorProto_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBDescriptorProto__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -312,10 +321,10 @@ typedef struct GPBDescriptorProto_Storage {
.number = GPBDescriptorProto_FieldNumber_FieldArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBDescriptorProto_Storage, fieldArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBDescriptorProto__storage_, fieldArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBFieldDescriptorProto),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBFieldDescriptorProto),
.fieldOptions = NULL,
},
{
@@ -323,10 +332,10 @@ typedef struct GPBDescriptorProto_Storage {
.number = GPBDescriptorProto_FieldNumber_NestedTypeArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBDescriptorProto_Storage, nestedTypeArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBDescriptorProto__storage_, nestedTypeArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBDescriptorProto),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBDescriptorProto),
.fieldOptions = NULL,
},
{
@@ -334,10 +343,10 @@ typedef struct GPBDescriptorProto_Storage {
.number = GPBDescriptorProto_FieldNumber_EnumTypeArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBDescriptorProto_Storage, enumTypeArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBDescriptorProto__storage_, enumTypeArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBEnumDescriptorProto),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBEnumDescriptorProto),
.fieldOptions = NULL,
},
{
@@ -345,10 +354,10 @@ typedef struct GPBDescriptorProto_Storage {
.number = GPBDescriptorProto_FieldNumber_ExtensionRangeArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBDescriptorProto_Storage, extensionRangeArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBDescriptorProto__storage_, extensionRangeArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBDescriptorProto_ExtensionRange),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBDescriptorProto_ExtensionRange),
.fieldOptions = NULL,
},
{
@@ -356,10 +365,10 @@ typedef struct GPBDescriptorProto_Storage {
.number = GPBDescriptorProto_FieldNumber_ExtensionArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBDescriptorProto_Storage, extensionArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBDescriptorProto__storage_, extensionArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBFieldDescriptorProto),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBFieldDescriptorProto),
.fieldOptions = NULL,
},
{
@@ -367,10 +376,10 @@ typedef struct GPBDescriptorProto_Storage {
.number = GPBDescriptorProto_FieldNumber_Options,
.hasIndex = 7,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBDescriptorProto_Storage, options),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBDescriptorProto__storage_, options),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBMessageOptions),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBMessageOptions),
.fieldOptions = NULL,
},
{
@@ -378,10 +387,10 @@ typedef struct GPBDescriptorProto_Storage {
.number = GPBDescriptorProto_FieldNumber_OneofDeclArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBDescriptorProto_Storage, oneofDeclArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBDescriptorProto__storage_, oneofDeclArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBOneofDescriptorProto),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBOneofDescriptorProto),
.fieldOptions = NULL,
},
{
@@ -389,10 +398,10 @@ typedef struct GPBDescriptorProto_Storage {
.number = GPBDescriptorProto_FieldNumber_ReservedRangeArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBDescriptorProto_Storage, reservedRangeArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBDescriptorProto__storage_, reservedRangeArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBDescriptorProto_ReservedRange),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBDescriptorProto_ReservedRange),
.fieldOptions = NULL,
},
{
@@ -400,26 +409,29 @@ typedef struct GPBDescriptorProto_Storage {
.number = GPBDescriptorProto_FieldNumber_ReservedNameArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeString,
- .offset = offsetof(GPBDescriptorProto_Storage, reservedNameArray),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBDescriptorProto__storage_, reservedNameArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBDescriptorProto class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBDescriptorProto_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBDescriptorProto class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBDescriptorProto__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -433,16 +445,16 @@ typedef struct GPBDescriptorProto_Storage {
@dynamic hasStart, start;
@dynamic hasEnd, end;
-typedef struct GPBDescriptorProto_ExtensionRange_Storage {
+typedef struct GPBDescriptorProto_ExtensionRange__storage_ {
uint32_t _has_storage_[1];
int32_t start;
int32_t end;
-} GPBDescriptorProto_ExtensionRange_Storage;
+} GPBDescriptorProto_ExtensionRange__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -450,10 +462,10 @@ typedef struct GPBDescriptorProto_ExtensionRange_Storage {
.number = GPBDescriptorProto_ExtensionRange_FieldNumber_Start,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBDescriptorProto_ExtensionRange_Storage, start),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBDescriptorProto_ExtensionRange__storage_, start),
.defaultValue.valueInt32 = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -461,26 +473,29 @@ typedef struct GPBDescriptorProto_ExtensionRange_Storage {
.number = GPBDescriptorProto_ExtensionRange_FieldNumber_End,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBDescriptorProto_ExtensionRange_Storage, end),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBDescriptorProto_ExtensionRange__storage_, end),
.defaultValue.valueInt32 = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBDescriptorProto_ExtensionRange class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBDescriptorProto_ExtensionRange_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBDescriptorProto_ExtensionRange class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBDescriptorProto_ExtensionRange__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -494,16 +509,16 @@ typedef struct GPBDescriptorProto_ExtensionRange_Storage {
@dynamic hasStart, start;
@dynamic hasEnd, end;
-typedef struct GPBDescriptorProto_ReservedRange_Storage {
+typedef struct GPBDescriptorProto_ReservedRange__storage_ {
uint32_t _has_storage_[1];
int32_t start;
int32_t end;
-} GPBDescriptorProto_ReservedRange_Storage;
+} GPBDescriptorProto_ReservedRange__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -511,10 +526,10 @@ typedef struct GPBDescriptorProto_ReservedRange_Storage {
.number = GPBDescriptorProto_ReservedRange_FieldNumber_Start,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBDescriptorProto_ReservedRange_Storage, start),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBDescriptorProto_ReservedRange__storage_, start),
.defaultValue.valueInt32 = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -522,26 +537,29 @@ typedef struct GPBDescriptorProto_ReservedRange_Storage {
.number = GPBDescriptorProto_ReservedRange_FieldNumber_End,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBDescriptorProto_ReservedRange_Storage, end),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBDescriptorProto_ReservedRange__storage_, end),
.defaultValue.valueInt32 = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBDescriptorProto_ReservedRange class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBDescriptorProto_ReservedRange_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBDescriptorProto_ReservedRange class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBDescriptorProto_ReservedRange__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -562,7 +580,7 @@ typedef struct GPBDescriptorProto_ReservedRange_Storage {
@dynamic hasOneofIndex, oneofIndex;
@dynamic hasOptions, options;
-typedef struct GPBFieldDescriptorProto_Storage {
+typedef struct GPBFieldDescriptorProto__storage_ {
uint32_t _has_storage_[1];
int32_t number;
GPBFieldDescriptorProto_Label label;
@@ -573,12 +591,12 @@ typedef struct GPBFieldDescriptorProto_Storage {
NSString *typeName;
NSString *defaultValue;
GPBFieldOptions *options;
-} GPBFieldDescriptorProto_Storage;
+} GPBFieldDescriptorProto__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -586,10 +604,10 @@ typedef struct GPBFieldDescriptorProto_Storage {
.number = GPBFieldDescriptorProto_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBFieldDescriptorProto_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFieldDescriptorProto__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -597,10 +615,10 @@ typedef struct GPBFieldDescriptorProto_Storage {
.number = GPBFieldDescriptorProto_FieldNumber_Extendee,
.hasIndex = 5,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBFieldDescriptorProto_Storage, extendee),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFieldDescriptorProto__storage_, extendee),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -608,10 +626,10 @@ typedef struct GPBFieldDescriptorProto_Storage {
.number = GPBFieldDescriptorProto_FieldNumber_Number,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBFieldDescriptorProto_Storage, number),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBFieldDescriptorProto__storage_, number),
.defaultValue.valueInt32 = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -619,10 +637,10 @@ typedef struct GPBFieldDescriptorProto_Storage {
.number = GPBFieldDescriptorProto_FieldNumber_Label,
.hasIndex = 2,
.flags = GPBFieldOptional | GPBFieldHasEnumDescriptor,
- .type = GPBTypeEnum,
- .offset = offsetof(GPBFieldDescriptorProto_Storage, label),
+ .dataType = GPBDataTypeEnum,
+ .offset = offsetof(GPBFieldDescriptorProto__storage_, label),
.defaultValue.valueEnum = GPBFieldDescriptorProto_Label_LabelOptional,
- .typeSpecific.enumDescFunc = GPBFieldDescriptorProto_Label_EnumDescriptor,
+ .dataTypeSpecific.enumDescFunc = GPBFieldDescriptorProto_Label_EnumDescriptor,
.fieldOptions = NULL,
},
{
@@ -630,10 +648,10 @@ typedef struct GPBFieldDescriptorProto_Storage {
.number = GPBFieldDescriptorProto_FieldNumber_Type,
.hasIndex = 3,
.flags = GPBFieldOptional | GPBFieldHasEnumDescriptor,
- .type = GPBTypeEnum,
- .offset = offsetof(GPBFieldDescriptorProto_Storage, type),
+ .dataType = GPBDataTypeEnum,
+ .offset = offsetof(GPBFieldDescriptorProto__storage_, type),
.defaultValue.valueEnum = GPBFieldDescriptorProto_Type_TypeDouble,
- .typeSpecific.enumDescFunc = GPBFieldDescriptorProto_Type_EnumDescriptor,
+ .dataTypeSpecific.enumDescFunc = GPBFieldDescriptorProto_Type_EnumDescriptor,
.fieldOptions = NULL,
},
{
@@ -641,10 +659,10 @@ typedef struct GPBFieldDescriptorProto_Storage {
.number = GPBFieldDescriptorProto_FieldNumber_TypeName,
.hasIndex = 4,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBFieldDescriptorProto_Storage, typeName),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFieldDescriptorProto__storage_, typeName),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -652,10 +670,10 @@ typedef struct GPBFieldDescriptorProto_Storage {
.number = GPBFieldDescriptorProto_FieldNumber_DefaultValue,
.hasIndex = 6,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBFieldDescriptorProto_Storage, defaultValue),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFieldDescriptorProto__storage_, defaultValue),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -663,10 +681,10 @@ typedef struct GPBFieldDescriptorProto_Storage {
.number = GPBFieldDescriptorProto_FieldNumber_Options,
.hasIndex = 8,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBFieldDescriptorProto_Storage, options),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBFieldDescriptorProto__storage_, options),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBFieldOptions),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBFieldOptions),
.fieldOptions = NULL,
},
{
@@ -674,10 +692,10 @@ typedef struct GPBFieldDescriptorProto_Storage {
.number = GPBFieldDescriptorProto_FieldNumber_OneofIndex,
.hasIndex = 7,
.flags = GPBFieldOptional,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBFieldDescriptorProto_Storage, oneofIndex),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBFieldDescriptorProto__storage_, oneofIndex),
.defaultValue.valueInt32 = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
@@ -685,19 +703,22 @@ typedef struct GPBFieldDescriptorProto_Storage {
{ .enumDescriptorFunc = GPBFieldDescriptorProto_Type_EnumDescriptor },
{ .enumDescriptorFunc = GPBFieldDescriptorProto_Label_EnumDescriptor },
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBFieldDescriptorProto class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:enums
- enumCount:sizeof(enums) / sizeof(GPBMessageEnumDescription)
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBFieldDescriptorProto_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBFieldDescriptorProto class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:enums
+ enumCount:sizeof(enums) / sizeof(GPBMessageEnumDescription)
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBFieldDescriptorProto__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -798,15 +819,15 @@ BOOL GPBFieldDescriptorProto_Label_IsValidValue(int32_t value__) {
@dynamic hasName, name;
-typedef struct GPBOneofDescriptorProto_Storage {
+typedef struct GPBOneofDescriptorProto__storage_ {
uint32_t _has_storage_[1];
NSString *name;
-} GPBOneofDescriptorProto_Storage;
+} GPBOneofDescriptorProto__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -814,26 +835,29 @@ typedef struct GPBOneofDescriptorProto_Storage {
.number = GPBOneofDescriptorProto_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBOneofDescriptorProto_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBOneofDescriptorProto__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBOneofDescriptorProto class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBOneofDescriptorProto_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBOneofDescriptorProto class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBOneofDescriptorProto__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -845,20 +869,20 @@ typedef struct GPBOneofDescriptorProto_Storage {
@implementation GPBEnumDescriptorProto
@dynamic hasName, name;
-@dynamic valueArray;
+@dynamic valueArray, valueArray_Count;
@dynamic hasOptions, options;
-typedef struct GPBEnumDescriptorProto_Storage {
+typedef struct GPBEnumDescriptorProto__storage_ {
uint32_t _has_storage_[1];
NSString *name;
NSMutableArray *valueArray;
GPBEnumOptions *options;
-} GPBEnumDescriptorProto_Storage;
+} GPBEnumDescriptorProto__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -866,10 +890,10 @@ typedef struct GPBEnumDescriptorProto_Storage {
.number = GPBEnumDescriptorProto_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBEnumDescriptorProto_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBEnumDescriptorProto__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -877,10 +901,10 @@ typedef struct GPBEnumDescriptorProto_Storage {
.number = GPBEnumDescriptorProto_FieldNumber_ValueArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBEnumDescriptorProto_Storage, valueArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBEnumDescriptorProto__storage_, valueArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBEnumValueDescriptorProto),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBEnumValueDescriptorProto),
.fieldOptions = NULL,
},
{
@@ -888,26 +912,29 @@ typedef struct GPBEnumDescriptorProto_Storage {
.number = GPBEnumDescriptorProto_FieldNumber_Options,
.hasIndex = 2,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBEnumDescriptorProto_Storage, options),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBEnumDescriptorProto__storage_, options),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBEnumOptions),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBEnumOptions),
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBEnumDescriptorProto class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBEnumDescriptorProto_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBEnumDescriptorProto class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBEnumDescriptorProto__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -922,17 +949,17 @@ typedef struct GPBEnumDescriptorProto_Storage {
@dynamic hasNumber, number;
@dynamic hasOptions, options;
-typedef struct GPBEnumValueDescriptorProto_Storage {
+typedef struct GPBEnumValueDescriptorProto__storage_ {
uint32_t _has_storage_[1];
int32_t number;
NSString *name;
GPBEnumValueOptions *options;
-} GPBEnumValueDescriptorProto_Storage;
+} GPBEnumValueDescriptorProto__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -940,10 +967,10 @@ typedef struct GPBEnumValueDescriptorProto_Storage {
.number = GPBEnumValueDescriptorProto_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBEnumValueDescriptorProto_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBEnumValueDescriptorProto__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -951,10 +978,10 @@ typedef struct GPBEnumValueDescriptorProto_Storage {
.number = GPBEnumValueDescriptorProto_FieldNumber_Number,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBEnumValueDescriptorProto_Storage, number),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBEnumValueDescriptorProto__storage_, number),
.defaultValue.valueInt32 = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -962,26 +989,29 @@ typedef struct GPBEnumValueDescriptorProto_Storage {
.number = GPBEnumValueDescriptorProto_FieldNumber_Options,
.hasIndex = 2,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBEnumValueDescriptorProto_Storage, options),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBEnumValueDescriptorProto__storage_, options),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBEnumValueOptions),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBEnumValueOptions),
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBEnumValueDescriptorProto class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBEnumValueDescriptorProto_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBEnumValueDescriptorProto class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBEnumValueDescriptorProto__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -993,20 +1023,20 @@ typedef struct GPBEnumValueDescriptorProto_Storage {
@implementation GPBServiceDescriptorProto
@dynamic hasName, name;
-@dynamic methodArray;
+@dynamic methodArray, methodArray_Count;
@dynamic hasOptions, options;
-typedef struct GPBServiceDescriptorProto_Storage {
+typedef struct GPBServiceDescriptorProto__storage_ {
uint32_t _has_storage_[1];
NSString *name;
NSMutableArray *methodArray;
GPBServiceOptions *options;
-} GPBServiceDescriptorProto_Storage;
+} GPBServiceDescriptorProto__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -1014,10 +1044,10 @@ typedef struct GPBServiceDescriptorProto_Storage {
.number = GPBServiceDescriptorProto_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBServiceDescriptorProto_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBServiceDescriptorProto__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1025,10 +1055,10 @@ typedef struct GPBServiceDescriptorProto_Storage {
.number = GPBServiceDescriptorProto_FieldNumber_MethodArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBServiceDescriptorProto_Storage, methodArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBServiceDescriptorProto__storage_, methodArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBMethodDescriptorProto),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBMethodDescriptorProto),
.fieldOptions = NULL,
},
{
@@ -1036,26 +1066,29 @@ typedef struct GPBServiceDescriptorProto_Storage {
.number = GPBServiceDescriptorProto_FieldNumber_Options,
.hasIndex = 2,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBServiceDescriptorProto_Storage, options),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBServiceDescriptorProto__storage_, options),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBServiceOptions),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBServiceOptions),
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBServiceDescriptorProto class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBServiceDescriptorProto_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBServiceDescriptorProto class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBServiceDescriptorProto__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -1073,7 +1106,7 @@ typedef struct GPBServiceDescriptorProto_Storage {
@dynamic hasClientStreaming, clientStreaming;
@dynamic hasServerStreaming, serverStreaming;
-typedef struct GPBMethodDescriptorProto_Storage {
+typedef struct GPBMethodDescriptorProto__storage_ {
uint32_t _has_storage_[1];
BOOL clientStreaming;
BOOL serverStreaming;
@@ -1081,12 +1114,12 @@ typedef struct GPBMethodDescriptorProto_Storage {
NSString *inputType;
NSString *outputType;
GPBMethodOptions *options;
-} GPBMethodDescriptorProto_Storage;
+} GPBMethodDescriptorProto__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -1094,10 +1127,10 @@ typedef struct GPBMethodDescriptorProto_Storage {
.number = GPBMethodDescriptorProto_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBMethodDescriptorProto_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBMethodDescriptorProto__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1105,10 +1138,10 @@ typedef struct GPBMethodDescriptorProto_Storage {
.number = GPBMethodDescriptorProto_FieldNumber_InputType,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBMethodDescriptorProto_Storage, inputType),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBMethodDescriptorProto__storage_, inputType),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1116,10 +1149,10 @@ typedef struct GPBMethodDescriptorProto_Storage {
.number = GPBMethodDescriptorProto_FieldNumber_OutputType,
.hasIndex = 2,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBMethodDescriptorProto_Storage, outputType),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBMethodDescriptorProto__storage_, outputType),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1127,10 +1160,10 @@ typedef struct GPBMethodDescriptorProto_Storage {
.number = GPBMethodDescriptorProto_FieldNumber_Options,
.hasIndex = 3,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBMethodDescriptorProto_Storage, options),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBMethodDescriptorProto__storage_, options),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBMethodOptions),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBMethodOptions),
.fieldOptions = NULL,
},
{
@@ -1138,10 +1171,10 @@ typedef struct GPBMethodDescriptorProto_Storage {
.number = GPBMethodDescriptorProto_FieldNumber_ClientStreaming,
.hasIndex = 4,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBMethodDescriptorProto_Storage, clientStreaming),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBMethodDescriptorProto__storage_, clientStreaming),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1149,26 +1182,29 @@ typedef struct GPBMethodDescriptorProto_Storage {
.number = GPBMethodDescriptorProto_FieldNumber_ServerStreaming,
.hasIndex = 5,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBMethodDescriptorProto_Storage, serverStreaming),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBMethodDescriptorProto__storage_, serverStreaming),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBMethodDescriptorProto class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBMethodDescriptorProto_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBMethodDescriptorProto class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBMethodDescriptorProto__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -1193,9 +1229,9 @@ typedef struct GPBMethodDescriptorProto_Storage {
@dynamic hasCcEnableArenas, ccEnableArenas;
@dynamic hasObjcClassPrefix, objcClassPrefix;
@dynamic hasCsharpNamespace, csharpNamespace;
-@dynamic uninterpretedOptionArray;
+@dynamic uninterpretedOptionArray, uninterpretedOptionArray_Count;
-typedef struct GPBFileOptions_Storage {
+typedef struct GPBFileOptions__storage_ {
uint32_t _has_storage_[1];
BOOL javaMultipleFiles;
BOOL ccGenericServices;
@@ -1212,12 +1248,12 @@ typedef struct GPBFileOptions_Storage {
NSString *objcClassPrefix;
NSString *csharpNamespace;
NSMutableArray *uninterpretedOptionArray;
-} GPBFileOptions_Storage;
+} GPBFileOptions__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -1225,10 +1261,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_JavaPackage,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBFileOptions_Storage, javaPackage),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFileOptions__storage_, javaPackage),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1236,10 +1272,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_JavaOuterClassname,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBFileOptions_Storage, javaOuterClassname),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFileOptions__storage_, javaOuterClassname),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1247,10 +1283,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_OptimizeFor,
.hasIndex = 5,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue | GPBFieldHasEnumDescriptor,
- .type = GPBTypeEnum,
- .offset = offsetof(GPBFileOptions_Storage, optimizeFor),
+ .dataType = GPBDataTypeEnum,
+ .offset = offsetof(GPBFileOptions__storage_, optimizeFor),
.defaultValue.valueEnum = GPBFileOptions_OptimizeMode_Speed,
- .typeSpecific.enumDescFunc = GPBFileOptions_OptimizeMode_EnumDescriptor,
+ .dataTypeSpecific.enumDescFunc = GPBFileOptions_OptimizeMode_EnumDescriptor,
.fieldOptions = NULL,
},
{
@@ -1258,10 +1294,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_JavaMultipleFiles,
.hasIndex = 2,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBFileOptions_Storage, javaMultipleFiles),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBFileOptions__storage_, javaMultipleFiles),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1269,10 +1305,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_GoPackage,
.hasIndex = 6,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBFileOptions_Storage, goPackage),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFileOptions__storage_, goPackage),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1280,10 +1316,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_CcGenericServices,
.hasIndex = 7,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBFileOptions_Storage, ccGenericServices),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBFileOptions__storage_, ccGenericServices),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1291,10 +1327,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_JavaGenericServices,
.hasIndex = 8,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBFileOptions_Storage, javaGenericServices),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBFileOptions__storage_, javaGenericServices),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1302,10 +1338,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_PyGenericServices,
.hasIndex = 9,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBFileOptions_Storage, pyGenericServices),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBFileOptions__storage_, pyGenericServices),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1313,10 +1349,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_JavaGenerateEqualsAndHash,
.hasIndex = 3,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBFileOptions_Storage, javaGenerateEqualsAndHash),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBFileOptions__storage_, javaGenerateEqualsAndHash),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1324,10 +1360,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_Deprecated,
.hasIndex = 10,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBFileOptions_Storage, deprecated),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBFileOptions__storage_, deprecated),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1335,10 +1371,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_JavaStringCheckUtf8,
.hasIndex = 4,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBFileOptions_Storage, javaStringCheckUtf8),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBFileOptions__storage_, javaStringCheckUtf8),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1346,10 +1382,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_CcEnableArenas,
.hasIndex = 11,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBFileOptions_Storage, ccEnableArenas),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBFileOptions__storage_, ccEnableArenas),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1357,10 +1393,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_ObjcClassPrefix,
.hasIndex = 12,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBFileOptions_Storage, objcClassPrefix),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFileOptions__storage_, objcClassPrefix),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1368,10 +1404,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_CsharpNamespace,
.hasIndex = 13,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBFileOptions_Storage, csharpNamespace),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFileOptions__storage_, csharpNamespace),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1379,10 +1415,10 @@ typedef struct GPBFileOptions_Storage {
.number = GPBFileOptions_FieldNumber_UninterpretedOptionArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBFileOptions_Storage, uninterpretedOptionArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBFileOptions__storage_, uninterpretedOptionArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
.fieldOptions = NULL,
},
};
@@ -1392,19 +1428,22 @@ typedef struct GPBFileOptions_Storage {
static GPBExtensionRange ranges[] = {
{ .start = 1000, .end = 536870912 },
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBFileOptions class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:enums
- enumCount:sizeof(enums) / sizeof(GPBMessageEnumDescription)
- ranges:ranges
- rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
- storageSize:sizeof(GPBFileOptions_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBFileOptions class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:enums
+ enumCount:sizeof(enums) / sizeof(GPBMessageEnumDescription)
+ ranges:ranges
+ rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
+ storageSize:sizeof(GPBFileOptions__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -1448,21 +1487,21 @@ BOOL GPBFileOptions_OptimizeMode_IsValidValue(int32_t value__) {
@dynamic hasNoStandardDescriptorAccessor, noStandardDescriptorAccessor;
@dynamic hasDeprecated, deprecated;
@dynamic hasMapEntry, mapEntry;
-@dynamic uninterpretedOptionArray;
+@dynamic uninterpretedOptionArray, uninterpretedOptionArray_Count;
-typedef struct GPBMessageOptions_Storage {
+typedef struct GPBMessageOptions__storage_ {
uint32_t _has_storage_[1];
BOOL messageSetWireFormat;
BOOL noStandardDescriptorAccessor;
BOOL deprecated;
BOOL mapEntry;
NSMutableArray *uninterpretedOptionArray;
-} GPBMessageOptions_Storage;
+} GPBMessageOptions__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -1470,10 +1509,10 @@ typedef struct GPBMessageOptions_Storage {
.number = GPBMessageOptions_FieldNumber_MessageSetWireFormat,
.hasIndex = 0,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBMessageOptions_Storage, messageSetWireFormat),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBMessageOptions__storage_, messageSetWireFormat),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1481,10 +1520,10 @@ typedef struct GPBMessageOptions_Storage {
.number = GPBMessageOptions_FieldNumber_NoStandardDescriptorAccessor,
.hasIndex = 1,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBMessageOptions_Storage, noStandardDescriptorAccessor),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBMessageOptions__storage_, noStandardDescriptorAccessor),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1492,10 +1531,10 @@ typedef struct GPBMessageOptions_Storage {
.number = GPBMessageOptions_FieldNumber_Deprecated,
.hasIndex = 2,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBMessageOptions_Storage, deprecated),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBMessageOptions__storage_, deprecated),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1503,10 +1542,10 @@ typedef struct GPBMessageOptions_Storage {
.number = GPBMessageOptions_FieldNumber_MapEntry,
.hasIndex = 3,
.flags = GPBFieldOptional,
- .type = GPBTypeBool,
- .offset = offsetof(GPBMessageOptions_Storage, mapEntry),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBMessageOptions__storage_, mapEntry),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1514,29 +1553,32 @@ typedef struct GPBMessageOptions_Storage {
.number = GPBMessageOptions_FieldNumber_UninterpretedOptionArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBMessageOptions_Storage, uninterpretedOptionArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBMessageOptions__storage_, uninterpretedOptionArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
.fieldOptions = NULL,
},
};
static GPBExtensionRange ranges[] = {
{ .start = 1000, .end = 536870912 },
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBMessageOptions class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:ranges
- rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
- storageSize:sizeof(GPBMessageOptions_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBMessageOptions class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:ranges
+ rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
+ storageSize:sizeof(GPBMessageOptions__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -1553,9 +1595,9 @@ typedef struct GPBMessageOptions_Storage {
@dynamic hasLazy, lazy;
@dynamic hasDeprecated, deprecated;
@dynamic hasWeak, weak;
-@dynamic uninterpretedOptionArray;
+@dynamic uninterpretedOptionArray, uninterpretedOptionArray_Count;
-typedef struct GPBFieldOptions_Storage {
+typedef struct GPBFieldOptions__storage_ {
uint32_t _has_storage_[1];
BOOL packed;
BOOL deprecated;
@@ -1564,12 +1606,12 @@ typedef struct GPBFieldOptions_Storage {
GPBFieldOptions_CType ctype;
GPBFieldOptions_JSType jstype;
NSMutableArray *uninterpretedOptionArray;
-} GPBFieldOptions_Storage;
+} GPBFieldOptions__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -1577,10 +1619,10 @@ typedef struct GPBFieldOptions_Storage {
.number = GPBFieldOptions_FieldNumber_Ctype,
.hasIndex = 0,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue | GPBFieldHasEnumDescriptor,
- .type = GPBTypeEnum,
- .offset = offsetof(GPBFieldOptions_Storage, ctype),
+ .dataType = GPBDataTypeEnum,
+ .offset = offsetof(GPBFieldOptions__storage_, ctype),
.defaultValue.valueEnum = GPBFieldOptions_CType_String,
- .typeSpecific.enumDescFunc = GPBFieldOptions_CType_EnumDescriptor,
+ .dataTypeSpecific.enumDescFunc = GPBFieldOptions_CType_EnumDescriptor,
.fieldOptions = NULL,
},
{
@@ -1588,10 +1630,10 @@ typedef struct GPBFieldOptions_Storage {
.number = GPBFieldOptions_FieldNumber_Packed,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeBool,
- .offset = offsetof(GPBFieldOptions_Storage, packed),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBFieldOptions__storage_, packed),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1599,10 +1641,10 @@ typedef struct GPBFieldOptions_Storage {
.number = GPBFieldOptions_FieldNumber_Deprecated,
.hasIndex = 4,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBFieldOptions_Storage, deprecated),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBFieldOptions__storage_, deprecated),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1610,10 +1652,10 @@ typedef struct GPBFieldOptions_Storage {
.number = GPBFieldOptions_FieldNumber_Lazy,
.hasIndex = 3,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBFieldOptions_Storage, lazy),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBFieldOptions__storage_, lazy),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1621,10 +1663,10 @@ typedef struct GPBFieldOptions_Storage {
.number = GPBFieldOptions_FieldNumber_Jstype,
.hasIndex = 2,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue | GPBFieldHasEnumDescriptor,
- .type = GPBTypeEnum,
- .offset = offsetof(GPBFieldOptions_Storage, jstype),
+ .dataType = GPBDataTypeEnum,
+ .offset = offsetof(GPBFieldOptions__storage_, jstype),
.defaultValue.valueEnum = GPBFieldOptions_JSType_JsNormal,
- .typeSpecific.enumDescFunc = GPBFieldOptions_JSType_EnumDescriptor,
+ .dataTypeSpecific.enumDescFunc = GPBFieldOptions_JSType_EnumDescriptor,
.fieldOptions = NULL,
},
{
@@ -1632,10 +1674,10 @@ typedef struct GPBFieldOptions_Storage {
.number = GPBFieldOptions_FieldNumber_Weak,
.hasIndex = 5,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBFieldOptions_Storage, weak),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBFieldOptions__storage_, weak),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1643,10 +1685,10 @@ typedef struct GPBFieldOptions_Storage {
.number = GPBFieldOptions_FieldNumber_UninterpretedOptionArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBFieldOptions_Storage, uninterpretedOptionArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBFieldOptions__storage_, uninterpretedOptionArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
.fieldOptions = NULL,
},
};
@@ -1657,19 +1699,22 @@ typedef struct GPBFieldOptions_Storage {
static GPBExtensionRange ranges[] = {
{ .start = 1000, .end = 536870912 },
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBFieldOptions class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:enums
- enumCount:sizeof(enums) / sizeof(GPBMessageEnumDescription)
- ranges:ranges
- rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
- storageSize:sizeof(GPBFieldOptions_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBFieldOptions class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:enums
+ enumCount:sizeof(enums) / sizeof(GPBMessageEnumDescription)
+ ranges:ranges
+ rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
+ storageSize:sizeof(GPBFieldOptions__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -1740,19 +1785,19 @@ BOOL GPBFieldOptions_JSType_IsValidValue(int32_t value__) {
@dynamic hasAllowAlias, allowAlias;
@dynamic hasDeprecated, deprecated;
-@dynamic uninterpretedOptionArray;
+@dynamic uninterpretedOptionArray, uninterpretedOptionArray_Count;
-typedef struct GPBEnumOptions_Storage {
+typedef struct GPBEnumOptions__storage_ {
uint32_t _has_storage_[1];
BOOL allowAlias;
BOOL deprecated;
NSMutableArray *uninterpretedOptionArray;
-} GPBEnumOptions_Storage;
+} GPBEnumOptions__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -1760,10 +1805,10 @@ typedef struct GPBEnumOptions_Storage {
.number = GPBEnumOptions_FieldNumber_AllowAlias,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeBool,
- .offset = offsetof(GPBEnumOptions_Storage, allowAlias),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBEnumOptions__storage_, allowAlias),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1771,10 +1816,10 @@ typedef struct GPBEnumOptions_Storage {
.number = GPBEnumOptions_FieldNumber_Deprecated,
.hasIndex = 1,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBEnumOptions_Storage, deprecated),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBEnumOptions__storage_, deprecated),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1782,29 +1827,32 @@ typedef struct GPBEnumOptions_Storage {
.number = GPBEnumOptions_FieldNumber_UninterpretedOptionArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBEnumOptions_Storage, uninterpretedOptionArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBEnumOptions__storage_, uninterpretedOptionArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
.fieldOptions = NULL,
},
};
static GPBExtensionRange ranges[] = {
{ .start = 1000, .end = 536870912 },
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBEnumOptions class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:ranges
- rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
- storageSize:sizeof(GPBEnumOptions_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBEnumOptions class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:ranges
+ rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
+ storageSize:sizeof(GPBEnumOptions__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -1816,18 +1864,18 @@ typedef struct GPBEnumOptions_Storage {
@implementation GPBEnumValueOptions
@dynamic hasDeprecated, deprecated;
-@dynamic uninterpretedOptionArray;
+@dynamic uninterpretedOptionArray, uninterpretedOptionArray_Count;
-typedef struct GPBEnumValueOptions_Storage {
+typedef struct GPBEnumValueOptions__storage_ {
uint32_t _has_storage_[1];
BOOL deprecated;
NSMutableArray *uninterpretedOptionArray;
-} GPBEnumValueOptions_Storage;
+} GPBEnumValueOptions__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -1835,10 +1883,10 @@ typedef struct GPBEnumValueOptions_Storage {
.number = GPBEnumValueOptions_FieldNumber_Deprecated,
.hasIndex = 0,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBEnumValueOptions_Storage, deprecated),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBEnumValueOptions__storage_, deprecated),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1846,29 +1894,32 @@ typedef struct GPBEnumValueOptions_Storage {
.number = GPBEnumValueOptions_FieldNumber_UninterpretedOptionArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBEnumValueOptions_Storage, uninterpretedOptionArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBEnumValueOptions__storage_, uninterpretedOptionArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
.fieldOptions = NULL,
},
};
static GPBExtensionRange ranges[] = {
{ .start = 1000, .end = 536870912 },
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBEnumValueOptions class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:ranges
- rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
- storageSize:sizeof(GPBEnumValueOptions_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBEnumValueOptions class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:ranges
+ rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
+ storageSize:sizeof(GPBEnumValueOptions__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -1880,18 +1931,18 @@ typedef struct GPBEnumValueOptions_Storage {
@implementation GPBServiceOptions
@dynamic hasDeprecated, deprecated;
-@dynamic uninterpretedOptionArray;
+@dynamic uninterpretedOptionArray, uninterpretedOptionArray_Count;
-typedef struct GPBServiceOptions_Storage {
+typedef struct GPBServiceOptions__storage_ {
uint32_t _has_storage_[1];
BOOL deprecated;
NSMutableArray *uninterpretedOptionArray;
-} GPBServiceOptions_Storage;
+} GPBServiceOptions__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -1899,10 +1950,10 @@ typedef struct GPBServiceOptions_Storage {
.number = GPBServiceOptions_FieldNumber_Deprecated,
.hasIndex = 0,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBServiceOptions_Storage, deprecated),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBServiceOptions__storage_, deprecated),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1910,29 +1961,32 @@ typedef struct GPBServiceOptions_Storage {
.number = GPBServiceOptions_FieldNumber_UninterpretedOptionArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBServiceOptions_Storage, uninterpretedOptionArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBServiceOptions__storage_, uninterpretedOptionArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
.fieldOptions = NULL,
},
};
static GPBExtensionRange ranges[] = {
{ .start = 1000, .end = 536870912 },
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBServiceOptions class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:ranges
- rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
- storageSize:sizeof(GPBServiceOptions_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBServiceOptions class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:ranges
+ rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
+ storageSize:sizeof(GPBServiceOptions__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -1944,18 +1998,18 @@ typedef struct GPBServiceOptions_Storage {
@implementation GPBMethodOptions
@dynamic hasDeprecated, deprecated;
-@dynamic uninterpretedOptionArray;
+@dynamic uninterpretedOptionArray, uninterpretedOptionArray_Count;
-typedef struct GPBMethodOptions_Storage {
+typedef struct GPBMethodOptions__storage_ {
uint32_t _has_storage_[1];
BOOL deprecated;
NSMutableArray *uninterpretedOptionArray;
-} GPBMethodOptions_Storage;
+} GPBMethodOptions__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -1963,10 +2017,10 @@ typedef struct GPBMethodOptions_Storage {
.number = GPBMethodOptions_FieldNumber_Deprecated,
.hasIndex = 0,
.flags = GPBFieldOptional | GPBFieldHasDefaultValue,
- .type = GPBTypeBool,
- .offset = offsetof(GPBMethodOptions_Storage, deprecated),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBMethodOptions__storage_, deprecated),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -1974,29 +2028,32 @@ typedef struct GPBMethodOptions_Storage {
.number = GPBMethodOptions_FieldNumber_UninterpretedOptionArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBMethodOptions_Storage, uninterpretedOptionArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBMethodOptions__storage_, uninterpretedOptionArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption),
.fieldOptions = NULL,
},
};
static GPBExtensionRange ranges[] = {
{ .start = 1000, .end = 536870912 },
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBMethodOptions class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:ranges
- rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
- storageSize:sizeof(GPBMethodOptions_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBMethodOptions class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:ranges
+ rangeCount:sizeof(ranges) / sizeof(GPBExtensionRange)
+ storageSize:sizeof(GPBMethodOptions__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -2007,7 +2064,7 @@ typedef struct GPBMethodOptions_Storage {
@implementation GPBUninterpretedOption
-@dynamic nameArray;
+@dynamic nameArray, nameArray_Count;
@dynamic hasIdentifierValue, identifierValue;
@dynamic hasPositiveIntValue, positiveIntValue;
@dynamic hasNegativeIntValue, negativeIntValue;
@@ -2015,7 +2072,7 @@ typedef struct GPBMethodOptions_Storage {
@dynamic hasStringValue, stringValue;
@dynamic hasAggregateValue, aggregateValue;
-typedef struct GPBUninterpretedOption_Storage {
+typedef struct GPBUninterpretedOption__storage_ {
uint32_t _has_storage_[1];
NSMutableArray *nameArray;
NSString *identifierValue;
@@ -2024,12 +2081,12 @@ typedef struct GPBUninterpretedOption_Storage {
uint64_t positiveIntValue;
int64_t negativeIntValue;
double doubleValue;
-} GPBUninterpretedOption_Storage;
+} GPBUninterpretedOption__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -2037,10 +2094,10 @@ typedef struct GPBUninterpretedOption_Storage {
.number = GPBUninterpretedOption_FieldNumber_NameArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBUninterpretedOption_Storage, nameArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBUninterpretedOption__storage_, nameArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption_NamePart),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBUninterpretedOption_NamePart),
.fieldOptions = NULL,
},
{
@@ -2048,10 +2105,10 @@ typedef struct GPBUninterpretedOption_Storage {
.number = GPBUninterpretedOption_FieldNumber_IdentifierValue,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBUninterpretedOption_Storage, identifierValue),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBUninterpretedOption__storage_, identifierValue),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -2059,10 +2116,10 @@ typedef struct GPBUninterpretedOption_Storage {
.number = GPBUninterpretedOption_FieldNumber_PositiveIntValue,
.hasIndex = 2,
.flags = GPBFieldOptional,
- .type = GPBTypeUInt64,
- .offset = offsetof(GPBUninterpretedOption_Storage, positiveIntValue),
+ .dataType = GPBDataTypeUInt64,
+ .offset = offsetof(GPBUninterpretedOption__storage_, positiveIntValue),
.defaultValue.valueUInt64 = 0ULL,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -2070,10 +2127,10 @@ typedef struct GPBUninterpretedOption_Storage {
.number = GPBUninterpretedOption_FieldNumber_NegativeIntValue,
.hasIndex = 3,
.flags = GPBFieldOptional,
- .type = GPBTypeInt64,
- .offset = offsetof(GPBUninterpretedOption_Storage, negativeIntValue),
+ .dataType = GPBDataTypeInt64,
+ .offset = offsetof(GPBUninterpretedOption__storage_, negativeIntValue),
.defaultValue.valueInt64 = 0LL,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -2081,10 +2138,10 @@ typedef struct GPBUninterpretedOption_Storage {
.number = GPBUninterpretedOption_FieldNumber_DoubleValue,
.hasIndex = 4,
.flags = GPBFieldOptional,
- .type = GPBTypeDouble,
- .offset = offsetof(GPBUninterpretedOption_Storage, doubleValue),
+ .dataType = GPBDataTypeDouble,
+ .offset = offsetof(GPBUninterpretedOption__storage_, doubleValue),
.defaultValue.valueDouble = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -2092,10 +2149,10 @@ typedef struct GPBUninterpretedOption_Storage {
.number = GPBUninterpretedOption_FieldNumber_StringValue,
.hasIndex = 5,
.flags = GPBFieldOptional,
- .type = GPBTypeData,
- .offset = offsetof(GPBUninterpretedOption_Storage, stringValue),
+ .dataType = GPBDataTypeBytes,
+ .offset = offsetof(GPBUninterpretedOption__storage_, stringValue),
.defaultValue.valueData = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -2103,26 +2160,29 @@ typedef struct GPBUninterpretedOption_Storage {
.number = GPBUninterpretedOption_FieldNumber_AggregateValue,
.hasIndex = 6,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBUninterpretedOption_Storage, aggregateValue),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBUninterpretedOption__storage_, aggregateValue),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBUninterpretedOption class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBUninterpretedOption_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBUninterpretedOption class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBUninterpretedOption__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -2136,16 +2196,16 @@ typedef struct GPBUninterpretedOption_Storage {
@dynamic hasNamePart, namePart;
@dynamic hasIsExtension, isExtension;
-typedef struct GPBUninterpretedOption_NamePart_Storage {
+typedef struct GPBUninterpretedOption_NamePart__storage_ {
uint32_t _has_storage_[1];
BOOL isExtension;
NSString *namePart;
-} GPBUninterpretedOption_NamePart_Storage;
+} GPBUninterpretedOption_NamePart__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -2153,10 +2213,10 @@ typedef struct GPBUninterpretedOption_NamePart_Storage {
.number = GPBUninterpretedOption_NamePart_FieldNumber_NamePart,
.hasIndex = 0,
.flags = GPBFieldRequired,
- .type = GPBTypeString,
- .offset = offsetof(GPBUninterpretedOption_NamePart_Storage, namePart),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBUninterpretedOption_NamePart__storage_, namePart),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -2164,26 +2224,29 @@ typedef struct GPBUninterpretedOption_NamePart_Storage {
.number = GPBUninterpretedOption_NamePart_FieldNumber_IsExtension,
.hasIndex = 1,
.flags = GPBFieldRequired,
- .type = GPBTypeBool,
- .offset = offsetof(GPBUninterpretedOption_NamePart_Storage, isExtension),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBUninterpretedOption_NamePart__storage_, isExtension),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBUninterpretedOption_NamePart class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBUninterpretedOption_NamePart_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBUninterpretedOption_NamePart class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBUninterpretedOption_NamePart__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -2194,17 +2257,17 @@ typedef struct GPBUninterpretedOption_NamePart_Storage {
@implementation GPBSourceCodeInfo
-@dynamic locationArray;
+@dynamic locationArray, locationArray_Count;
-typedef struct GPBSourceCodeInfo_Storage {
+typedef struct GPBSourceCodeInfo__storage_ {
uint32_t _has_storage_[1];
NSMutableArray *locationArray;
-} GPBSourceCodeInfo_Storage;
+} GPBSourceCodeInfo__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -2212,26 +2275,29 @@ typedef struct GPBSourceCodeInfo_Storage {
.number = GPBSourceCodeInfo_FieldNumber_LocationArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBSourceCodeInfo_Storage, locationArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBSourceCodeInfo__storage_, locationArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBSourceCodeInfo_Location),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBSourceCodeInfo_Location),
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBSourceCodeInfo class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBSourceCodeInfo_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBSourceCodeInfo class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBSourceCodeInfo__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -2242,25 +2308,25 @@ typedef struct GPBSourceCodeInfo_Storage {
@implementation GPBSourceCodeInfo_Location
-@dynamic pathArray;
-@dynamic spanArray;
+@dynamic pathArray, pathArray_Count;
+@dynamic spanArray, spanArray_Count;
@dynamic hasLeadingComments, leadingComments;
@dynamic hasTrailingComments, trailingComments;
-@dynamic leadingDetachedCommentsArray;
+@dynamic leadingDetachedCommentsArray, leadingDetachedCommentsArray_Count;
-typedef struct GPBSourceCodeInfo_Location_Storage {
+typedef struct GPBSourceCodeInfo_Location__storage_ {
uint32_t _has_storage_[1];
GPBInt32Array *pathArray;
GPBInt32Array *spanArray;
NSString *leadingComments;
NSString *trailingComments;
NSMutableArray *leadingDetachedCommentsArray;
-} GPBSourceCodeInfo_Location_Storage;
+} GPBSourceCodeInfo_Location__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -2268,10 +2334,10 @@ typedef struct GPBSourceCodeInfo_Location_Storage {
.number = GPBSourceCodeInfo_Location_FieldNumber_PathArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated | GPBFieldPacked,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBSourceCodeInfo_Location_Storage, pathArray),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBSourceCodeInfo_Location__storage_, pathArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
#if GPBOBJC_INCLUDE_FIELD_OPTIONS
.fieldOptions = "\000\000\000\002\020\001",
#else
@@ -2283,10 +2349,10 @@ typedef struct GPBSourceCodeInfo_Location_Storage {
.number = GPBSourceCodeInfo_Location_FieldNumber_SpanArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated | GPBFieldPacked,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBSourceCodeInfo_Location_Storage, spanArray),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBSourceCodeInfo_Location__storage_, spanArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
#if GPBOBJC_INCLUDE_FIELD_OPTIONS
.fieldOptions = "\000\000\000\002\020\001",
#else
@@ -2298,10 +2364,10 @@ typedef struct GPBSourceCodeInfo_Location_Storage {
.number = GPBSourceCodeInfo_Location_FieldNumber_LeadingComments,
.hasIndex = 2,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBSourceCodeInfo_Location_Storage, leadingComments),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBSourceCodeInfo_Location__storage_, leadingComments),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -2309,10 +2375,10 @@ typedef struct GPBSourceCodeInfo_Location_Storage {
.number = GPBSourceCodeInfo_Location_FieldNumber_TrailingComments,
.hasIndex = 3,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBSourceCodeInfo_Location_Storage, trailingComments),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBSourceCodeInfo_Location__storage_, trailingComments),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -2320,26 +2386,29 @@ typedef struct GPBSourceCodeInfo_Location_Storage {
.number = GPBSourceCodeInfo_Location_FieldNumber_LeadingDetachedCommentsArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeString,
- .offset = offsetof(GPBSourceCodeInfo_Location_Storage, leadingDetachedCommentsArray),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBSourceCodeInfo_Location__storage_, leadingDetachedCommentsArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBSourceCodeInfo_Location class]
- rootClass:[GPBDescriptorRoot class]
- file:GPBDescriptorRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBSourceCodeInfo_Location_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBSourceCodeInfo_Location class]
+ rootClass:[GPBDescriptorRoot class]
+ file:GPBDescriptorRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBSourceCodeInfo_Location__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
diff --git a/objectivec/google/protobuf/Duration.pbobjc.m b/objectivec/google/protobuf/Duration.pbobjc.m
index 4db030f4..e4fd4951 100644
--- a/objectivec/google/protobuf/Duration.pbobjc.m
+++ b/objectivec/google/protobuf/Duration.pbobjc.m
@@ -11,11 +11,14 @@
@end
+#pragma mark - GPBDurationRoot_FileDescriptor
+
static GPBFileDescriptor *GPBDurationRoot_FileDescriptor(void) {
// This is called by +initialize so there is no need to worry
// about thread safety of the singleton.
static GPBFileDescriptor *descriptor = NULL;
if (!descriptor) {
+ GPBDebugCheckRuntimeVersion();
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
syntax:GPBFileSyntaxProto3];
}
@@ -29,16 +32,16 @@ static GPBFileDescriptor *GPBDurationRoot_FileDescriptor(void) {
@dynamic seconds;
@dynamic nanos;
-typedef struct GPBDuration_Storage {
+typedef struct GPBDuration__storage_ {
uint32_t _has_storage_[1];
int32_t nanos;
int64_t seconds;
-} GPBDuration_Storage;
+} GPBDuration__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -46,10 +49,10 @@ typedef struct GPBDuration_Storage {
.number = GPBDuration_FieldNumber_Seconds,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeInt64,
- .offset = offsetof(GPBDuration_Storage, seconds),
+ .dataType = GPBDataTypeInt64,
+ .offset = offsetof(GPBDuration__storage_, seconds),
.defaultValue.valueInt64 = 0LL,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -57,26 +60,29 @@ typedef struct GPBDuration_Storage {
.number = GPBDuration_FieldNumber_Nanos,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBDuration_Storage, nanos),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBDuration__storage_, nanos),
.defaultValue.valueInt32 = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBDuration class]
- rootClass:[GPBDurationRoot class]
- file:GPBDurationRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBDuration_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBDuration class]
+ rootClass:[GPBDurationRoot class]
+ file:GPBDurationRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBDuration__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
diff --git a/objectivec/google/protobuf/Empty.pbobjc.m b/objectivec/google/protobuf/Empty.pbobjc.m
index 619fe905..17f0c1ac 100644
--- a/objectivec/google/protobuf/Empty.pbobjc.m
+++ b/objectivec/google/protobuf/Empty.pbobjc.m
@@ -11,11 +11,14 @@
@end
+#pragma mark - GPBEmptyRoot_FileDescriptor
+
static GPBFileDescriptor *GPBEmptyRoot_FileDescriptor(void) {
// This is called by +initialize so there is no need to worry
// about thread safety of the singleton.
static GPBFileDescriptor *descriptor = NULL;
if (!descriptor) {
+ GPBDebugCheckRuntimeVersion();
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
syntax:GPBFileSyntaxProto3];
}
@@ -27,30 +30,31 @@ static GPBFileDescriptor *GPBEmptyRoot_FileDescriptor(void) {
@implementation GPBEmpty
-typedef struct GPBEmpty_Storage {
+typedef struct GPBEmpty__storage_ {
uint32_t _has_storage_[0];
-} GPBEmpty_Storage;
+} GPBEmpty__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
- static GPBMessageFieldDescription fields[] = {
- };
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBEmpty class]
- rootClass:[GPBEmptyRoot class]
- file:GPBEmptyRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBEmpty_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBEmpty class]
+ rootClass:[GPBEmptyRoot class]
+ file:GPBEmptyRoot_FileDescriptor()
+ fields:NULL
+ fieldCount:0
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBEmpty__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
diff --git a/objectivec/google/protobuf/FieldMask.pbobjc.h b/objectivec/google/protobuf/FieldMask.pbobjc.h
index ac6f03d2..f9b26fa2 100644
--- a/objectivec/google/protobuf/FieldMask.pbobjc.h
+++ b/objectivec/google/protobuf/FieldMask.pbobjc.h
@@ -152,6 +152,7 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) {
// The set of field mask paths.
// |pathsArray| contains |NSString|
@property(nonatomic, readwrite, strong) NSMutableArray *pathsArray;
+@property(nonatomic, readonly) NSUInteger pathsArray_Count;
@end
diff --git a/objectivec/google/protobuf/FieldMask.pbobjc.m b/objectivec/google/protobuf/FieldMask.pbobjc.m
index e37ac6c2..f9684f51 100644
--- a/objectivec/google/protobuf/FieldMask.pbobjc.m
+++ b/objectivec/google/protobuf/FieldMask.pbobjc.m
@@ -11,11 +11,14 @@
@end
+#pragma mark - GPBFieldMaskRoot_FileDescriptor
+
static GPBFileDescriptor *GPBFieldMaskRoot_FileDescriptor(void) {
// This is called by +initialize so there is no need to worry
// about thread safety of the singleton.
static GPBFileDescriptor *descriptor = NULL;
if (!descriptor) {
+ GPBDebugCheckRuntimeVersion();
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
syntax:GPBFileSyntaxProto3];
}
@@ -26,17 +29,17 @@ static GPBFileDescriptor *GPBFieldMaskRoot_FileDescriptor(void) {
@implementation GPBFieldMask
-@dynamic pathsArray;
+@dynamic pathsArray, pathsArray_Count;
-typedef struct GPBFieldMask_Storage {
+typedef struct GPBFieldMask__storage_ {
uint32_t _has_storage_[1];
NSMutableArray *pathsArray;
-} GPBFieldMask_Storage;
+} GPBFieldMask__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -44,26 +47,29 @@ typedef struct GPBFieldMask_Storage {
.number = GPBFieldMask_FieldNumber_PathsArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeString,
- .offset = offsetof(GPBFieldMask_Storage, pathsArray),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBFieldMask__storage_, pathsArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBFieldMask class]
- rootClass:[GPBFieldMaskRoot class]
- file:GPBFieldMaskRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBFieldMask_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBFieldMask class]
+ rootClass:[GPBFieldMaskRoot class]
+ file:GPBFieldMaskRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBFieldMask__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
diff --git a/objectivec/google/protobuf/SourceContext.pbobjc.m b/objectivec/google/protobuf/SourceContext.pbobjc.m
index 271f9243..ac1827fc 100644
--- a/objectivec/google/protobuf/SourceContext.pbobjc.m
+++ b/objectivec/google/protobuf/SourceContext.pbobjc.m
@@ -11,11 +11,14 @@
@end
+#pragma mark - GPBSourceContextRoot_FileDescriptor
+
static GPBFileDescriptor *GPBSourceContextRoot_FileDescriptor(void) {
// This is called by +initialize so there is no need to worry
// about thread safety of the singleton.
static GPBFileDescriptor *descriptor = NULL;
if (!descriptor) {
+ GPBDebugCheckRuntimeVersion();
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
syntax:GPBFileSyntaxProto3];
}
@@ -28,15 +31,15 @@ static GPBFileDescriptor *GPBSourceContextRoot_FileDescriptor(void) {
@dynamic fileName;
-typedef struct GPBSourceContext_Storage {
+typedef struct GPBSourceContext__storage_ {
uint32_t _has_storage_[1];
NSString *fileName;
-} GPBSourceContext_Storage;
+} GPBSourceContext__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -44,26 +47,29 @@ typedef struct GPBSourceContext_Storage {
.number = GPBSourceContext_FieldNumber_FileName,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBSourceContext_Storage, fileName),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBSourceContext__storage_, fileName),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBSourceContext class]
- rootClass:[GPBSourceContextRoot class]
- file:GPBSourceContextRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBSourceContext_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBSourceContext class]
+ rootClass:[GPBSourceContextRoot class]
+ file:GPBSourceContextRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBSourceContext__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
diff --git a/objectivec/google/protobuf/Struct.pbobjc.h b/objectivec/google/protobuf/Struct.pbobjc.h
index f55af82b..45456955 100644
--- a/objectivec/google/protobuf/Struct.pbobjc.h
+++ b/objectivec/google/protobuf/Struct.pbobjc.h
@@ -57,6 +57,7 @@ typedef GPB_ENUM(GPBStruct_FieldNumber) {
// Map of dynamically typed values.
// |fields| values are |GPBValue|
@property(nonatomic, readwrite, strong) NSMutableDictionary *fields;
+@property(nonatomic, readonly) NSUInteger fields_Count;
@end
@@ -126,6 +127,7 @@ typedef GPB_ENUM(GPBListValue_FieldNumber) {
// Repeated field of dynamically typed values.
// |valuesArray| contains |GPBValue|
@property(nonatomic, readwrite, strong) NSMutableArray *valuesArray;
+@property(nonatomic, readonly) NSUInteger valuesArray_Count;
@end
diff --git a/objectivec/google/protobuf/Struct.pbobjc.m b/objectivec/google/protobuf/Struct.pbobjc.m
index e5a8b547..14b8f271 100644
--- a/objectivec/google/protobuf/Struct.pbobjc.m
+++ b/objectivec/google/protobuf/Struct.pbobjc.m
@@ -11,11 +11,14 @@
@end
+#pragma mark - GPBStructRoot_FileDescriptor
+
static GPBFileDescriptor *GPBStructRoot_FileDescriptor(void) {
// This is called by +initialize so there is no need to worry
// about thread safety of the singleton.
static GPBFileDescriptor *descriptor = NULL;
if (!descriptor) {
+ GPBDebugCheckRuntimeVersion();
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
syntax:GPBFileSyntaxProto3];
}
@@ -51,17 +54,17 @@ BOOL GPBNullValue_IsValidValue(int32_t value__) {
@implementation GPBStruct
-@dynamic fields;
+@dynamic fields, fields_Count;
-typedef struct GPBStruct_Storage {
+typedef struct GPBStruct__storage_ {
uint32_t _has_storage_[1];
NSMutableDictionary *fields;
-} GPBStruct_Storage;
+} GPBStruct__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -69,26 +72,29 @@ typedef struct GPBStruct_Storage {
.number = GPBStruct_FieldNumber_Fields,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldMapKeyString,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBStruct_Storage, fields),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBStruct__storage_, fields),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBValue),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBValue),
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBStruct class]
- rootClass:[GPBStructRoot class]
- file:GPBStructRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBStruct_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBStruct class]
+ rootClass:[GPBStructRoot class]
+ file:GPBStructRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBStruct__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -107,7 +113,7 @@ typedef struct GPBStruct_Storage {
@dynamic structValue;
@dynamic listValue;
-typedef struct GPBValue_Storage {
+typedef struct GPBValue__storage_ {
uint32_t _has_storage_[2];
BOOL boolValue;
GPBNullValue nullValue;
@@ -115,12 +121,12 @@ typedef struct GPBValue_Storage {
GPBStruct *structValue;
GPBListValue *listValue;
double numberValue;
-} GPBValue_Storage;
+} GPBValue__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageOneofDescription oneofs[] = {
{
@@ -134,10 +140,10 @@ typedef struct GPBValue_Storage {
.number = GPBValue_FieldNumber_NullValue,
.hasIndex = -1,
.flags = GPBFieldOptional | GPBFieldHasEnumDescriptor,
- .type = GPBTypeEnum,
- .offset = offsetof(GPBValue_Storage, nullValue),
+ .dataType = GPBDataTypeEnum,
+ .offset = offsetof(GPBValue__storage_, nullValue),
.defaultValue.valueEnum = GPBNullValue_NullValue,
- .typeSpecific.enumDescFunc = GPBNullValue_EnumDescriptor,
+ .dataTypeSpecific.enumDescFunc = GPBNullValue_EnumDescriptor,
.fieldOptions = NULL,
},
{
@@ -145,10 +151,10 @@ typedef struct GPBValue_Storage {
.number = GPBValue_FieldNumber_NumberValue,
.hasIndex = -1,
.flags = GPBFieldOptional,
- .type = GPBTypeDouble,
- .offset = offsetof(GPBValue_Storage, numberValue),
+ .dataType = GPBDataTypeDouble,
+ .offset = offsetof(GPBValue__storage_, numberValue),
.defaultValue.valueDouble = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -156,10 +162,10 @@ typedef struct GPBValue_Storage {
.number = GPBValue_FieldNumber_StringValue,
.hasIndex = -1,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBValue_Storage, stringValue),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBValue__storage_, stringValue),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -167,10 +173,10 @@ typedef struct GPBValue_Storage {
.number = GPBValue_FieldNumber_BoolValue,
.hasIndex = -1,
.flags = GPBFieldOptional,
- .type = GPBTypeBool,
- .offset = offsetof(GPBValue_Storage, boolValue),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBValue__storage_, boolValue),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -178,10 +184,10 @@ typedef struct GPBValue_Storage {
.number = GPBValue_FieldNumber_StructValue,
.hasIndex = -1,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBValue_Storage, structValue),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBValue__storage_, structValue),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBStruct),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBStruct),
.fieldOptions = NULL,
},
{
@@ -189,26 +195,29 @@ typedef struct GPBValue_Storage {
.number = GPBValue_FieldNumber_ListValue,
.hasIndex = -1,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBValue_Storage, listValue),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBValue__storage_, listValue),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBListValue),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBListValue),
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBValue class]
- rootClass:[GPBStructRoot class]
- file:GPBStructRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:oneofs
- oneofCount:sizeof(oneofs) / sizeof(GPBMessageOneofDescription)
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBValue_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBValue class]
+ rootClass:[GPBStructRoot class]
+ file:GPBStructRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:oneofs
+ oneofCount:sizeof(oneofs) / sizeof(GPBMessageOneofDescription)
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBValue__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -218,7 +227,7 @@ typedef struct GPBValue_Storage {
int32_t GPBValue_NullValue_RawValue(GPBValue *message) {
GPBDescriptor *descriptor = [GPBValue descriptor];
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBValue_FieldNumber_NullValue];
- return GPBGetInt32IvarWithField(message, field);
+ return GPBGetMessageInt32Field(message, field);
}
void SetGPBValue_NullValue_RawValue(GPBValue *message, int32_t value) {
@@ -236,17 +245,17 @@ void GPBValue_ClearKindOneOfCase(GPBValue *message) {
@implementation GPBListValue
-@dynamic valuesArray;
+@dynamic valuesArray, valuesArray_Count;
-typedef struct GPBListValue_Storage {
+typedef struct GPBListValue__storage_ {
uint32_t _has_storage_[1];
NSMutableArray *valuesArray;
-} GPBListValue_Storage;
+} GPBListValue__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -254,26 +263,29 @@ typedef struct GPBListValue_Storage {
.number = GPBListValue_FieldNumber_ValuesArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBListValue_Storage, valuesArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBListValue__storage_, valuesArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBValue),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBValue),
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBListValue class]
- rootClass:[GPBStructRoot class]
- file:GPBStructRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBListValue_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBListValue class]
+ rootClass:[GPBStructRoot class]
+ file:GPBStructRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBListValue__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
diff --git a/objectivec/google/protobuf/Timestamp.pbobjc.m b/objectivec/google/protobuf/Timestamp.pbobjc.m
index 197dff48..a206f159 100644
--- a/objectivec/google/protobuf/Timestamp.pbobjc.m
+++ b/objectivec/google/protobuf/Timestamp.pbobjc.m
@@ -11,11 +11,14 @@
@end
+#pragma mark - GPBTimestampRoot_FileDescriptor
+
static GPBFileDescriptor *GPBTimestampRoot_FileDescriptor(void) {
// This is called by +initialize so there is no need to worry
// about thread safety of the singleton.
static GPBFileDescriptor *descriptor = NULL;
if (!descriptor) {
+ GPBDebugCheckRuntimeVersion();
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
syntax:GPBFileSyntaxProto3];
}
@@ -29,16 +32,16 @@ static GPBFileDescriptor *GPBTimestampRoot_FileDescriptor(void) {
@dynamic seconds;
@dynamic nanos;
-typedef struct GPBTimestamp_Storage {
+typedef struct GPBTimestamp__storage_ {
uint32_t _has_storage_[1];
int32_t nanos;
int64_t seconds;
-} GPBTimestamp_Storage;
+} GPBTimestamp__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -46,10 +49,10 @@ typedef struct GPBTimestamp_Storage {
.number = GPBTimestamp_FieldNumber_Seconds,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeInt64,
- .offset = offsetof(GPBTimestamp_Storage, seconds),
+ .dataType = GPBDataTypeInt64,
+ .offset = offsetof(GPBTimestamp__storage_, seconds),
.defaultValue.valueInt64 = 0LL,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -57,26 +60,29 @@ typedef struct GPBTimestamp_Storage {
.number = GPBTimestamp_FieldNumber_Nanos,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBTimestamp_Storage, nanos),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBTimestamp__storage_, nanos),
.defaultValue.valueInt32 = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBTimestamp class]
- rootClass:[GPBTimestampRoot class]
- file:GPBTimestampRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBTimestamp_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBTimestamp class]
+ rootClass:[GPBTimestampRoot class]
+ file:GPBTimestampRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBTimestamp__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
diff --git a/objectivec/google/protobuf/Type.pbobjc.h b/objectivec/google/protobuf/Type.pbobjc.h
index 652a33a7..e3b6229f 100644
--- a/objectivec/google/protobuf/Type.pbobjc.h
+++ b/objectivec/google/protobuf/Type.pbobjc.h
@@ -132,15 +132,18 @@ typedef GPB_ENUM(GPBType_FieldNumber) {
// The list of fields.
// |fieldsArray| contains |GPBField|
@property(nonatomic, readwrite, strong) NSMutableArray *fieldsArray;
+@property(nonatomic, readonly) NSUInteger fieldsArray_Count;
// The list of oneof definitions.
// The list of oneofs declared in this Type
// |oneofsArray| contains |NSString|
@property(nonatomic, readwrite, strong) NSMutableArray *oneofsArray;
+@property(nonatomic, readonly) NSUInteger oneofsArray_Count;
// The proto options.
// |optionsArray| contains |GPBOption|
@property(nonatomic, readwrite, strong) NSMutableArray *optionsArray;
+@property(nonatomic, readonly) NSUInteger optionsArray_Count;
// The source context.
@property(nonatomic, readwrite) BOOL hasSourceContext;
@@ -189,6 +192,7 @@ typedef GPB_ENUM(GPBField_FieldNumber) {
// The proto options.
// |optionsArray| contains |GPBOption|
@property(nonatomic, readwrite, strong) NSMutableArray *optionsArray;
+@property(nonatomic, readonly) NSUInteger optionsArray_Count;
@end
@@ -216,10 +220,12 @@ typedef GPB_ENUM(GPBEnum_FieldNumber) {
// Enum value definitions.
// |enumvalueArray| contains |GPBEnumValue|
@property(nonatomic, readwrite, strong) NSMutableArray *enumvalueArray;
+@property(nonatomic, readonly) NSUInteger enumvalueArray_Count;
// Proto options for the enum type.
// |optionsArray| contains |GPBOption|
@property(nonatomic, readwrite, strong) NSMutableArray *optionsArray;
+@property(nonatomic, readonly) NSUInteger optionsArray_Count;
// The source context.
@property(nonatomic, readwrite) BOOL hasSourceContext;
@@ -247,6 +253,7 @@ typedef GPB_ENUM(GPBEnumValue_FieldNumber) {
// Proto options for the enum value.
// |optionsArray| contains |GPBOption|
@property(nonatomic, readwrite, strong) NSMutableArray *optionsArray;
+@property(nonatomic, readonly) NSUInteger optionsArray_Count;
@end
diff --git a/objectivec/google/protobuf/Type.pbobjc.m b/objectivec/google/protobuf/Type.pbobjc.m
index 182370c8..5a2ce282 100644
--- a/objectivec/google/protobuf/Type.pbobjc.m
+++ b/objectivec/google/protobuf/Type.pbobjc.m
@@ -16,10 +16,8 @@
// about thread safety and initialization of registry.
static GPBExtensionRegistry* registry = nil;
if (!registry) {
+ GPBDebugCheckRuntimeVersion();
registry = [[GPBExtensionRegistry alloc] init];
- static GPBExtensionDescription descriptions[] = {
- };
- #pragma unused (descriptions)
[registry addExtensions:[GPBAnyRoot extensionRegistry]];
[registry addExtensions:[GPBSourceContextRoot extensionRegistry]];
}
@@ -28,11 +26,14 @@
@end
+#pragma mark - GPBTypeRoot_FileDescriptor
+
static GPBFileDescriptor *GPBTypeRoot_FileDescriptor(void) {
// This is called by +initialize so there is no need to worry
// about thread safety of the singleton.
static GPBFileDescriptor *descriptor = NULL;
if (!descriptor) {
+ GPBDebugCheckRuntimeVersion();
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
syntax:GPBFileSyntaxProto3];
}
@@ -44,24 +45,24 @@ static GPBFileDescriptor *GPBTypeRoot_FileDescriptor(void) {
@implementation GPBType
@dynamic name;
-@dynamic fieldsArray;
-@dynamic oneofsArray;
-@dynamic optionsArray;
+@dynamic fieldsArray, fieldsArray_Count;
+@dynamic oneofsArray, oneofsArray_Count;
+@dynamic optionsArray, optionsArray_Count;
@dynamic hasSourceContext, sourceContext;
-typedef struct GPBType_Storage {
+typedef struct GPBType__storage_ {
uint32_t _has_storage_[1];
NSString *name;
NSMutableArray *fieldsArray;
NSMutableArray *oneofsArray;
NSMutableArray *optionsArray;
GPBSourceContext *sourceContext;
-} GPBType_Storage;
+} GPBType__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -69,10 +70,10 @@ typedef struct GPBType_Storage {
.number = GPBType_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBType_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBType__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -80,10 +81,10 @@ typedef struct GPBType_Storage {
.number = GPBType_FieldNumber_FieldsArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBType_Storage, fieldsArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBType__storage_, fieldsArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBField),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBField),
.fieldOptions = NULL,
},
{
@@ -91,10 +92,10 @@ typedef struct GPBType_Storage {
.number = GPBType_FieldNumber_OneofsArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeString,
- .offset = offsetof(GPBType_Storage, oneofsArray),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBType__storage_, oneofsArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -102,10 +103,10 @@ typedef struct GPBType_Storage {
.number = GPBType_FieldNumber_OptionsArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBType_Storage, optionsArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBType__storage_, optionsArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBOption),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
.fieldOptions = NULL,
},
{
@@ -113,26 +114,29 @@ typedef struct GPBType_Storage {
.number = GPBType_FieldNumber_SourceContext,
.hasIndex = 4,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBType_Storage, sourceContext),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBType__storage_, sourceContext),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBSourceContext),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext),
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBType class]
- rootClass:[GPBTypeRoot class]
- file:GPBTypeRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBType_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBType class]
+ rootClass:[GPBTypeRoot class]
+ file:GPBTypeRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBType__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -150,9 +154,9 @@ typedef struct GPBType_Storage {
@dynamic typeURL;
@dynamic oneofIndex;
@dynamic packed;
-@dynamic optionsArray;
+@dynamic optionsArray, optionsArray_Count;
-typedef struct GPBField_Storage {
+typedef struct GPBField__storage_ {
uint32_t _has_storage_[1];
BOOL packed;
GPBField_Kind kind;
@@ -162,12 +166,12 @@ typedef struct GPBField_Storage {
NSString *name;
NSString *typeURL;
NSMutableArray *optionsArray;
-} GPBField_Storage;
+} GPBField__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -175,10 +179,10 @@ typedef struct GPBField_Storage {
.number = GPBField_FieldNumber_Kind,
.hasIndex = 0,
.flags = GPBFieldOptional | GPBFieldHasEnumDescriptor,
- .type = GPBTypeEnum,
- .offset = offsetof(GPBField_Storage, kind),
+ .dataType = GPBDataTypeEnum,
+ .offset = offsetof(GPBField__storage_, kind),
.defaultValue.valueEnum = GPBField_Kind_TypeUnknown,
- .typeSpecific.enumDescFunc = GPBField_Kind_EnumDescriptor,
+ .dataTypeSpecific.enumDescFunc = GPBField_Kind_EnumDescriptor,
.fieldOptions = NULL,
},
{
@@ -186,10 +190,10 @@ typedef struct GPBField_Storage {
.number = GPBField_FieldNumber_Cardinality,
.hasIndex = 1,
.flags = GPBFieldOptional | GPBFieldHasEnumDescriptor,
- .type = GPBTypeEnum,
- .offset = offsetof(GPBField_Storage, cardinality),
+ .dataType = GPBDataTypeEnum,
+ .offset = offsetof(GPBField__storage_, cardinality),
.defaultValue.valueEnum = GPBField_Cardinality_CardinalityUnknown,
- .typeSpecific.enumDescFunc = GPBField_Cardinality_EnumDescriptor,
+ .dataTypeSpecific.enumDescFunc = GPBField_Cardinality_EnumDescriptor,
.fieldOptions = NULL,
},
{
@@ -197,10 +201,10 @@ typedef struct GPBField_Storage {
.number = GPBField_FieldNumber_Number,
.hasIndex = 2,
.flags = GPBFieldOptional,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBField_Storage, number),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBField__storage_, number),
.defaultValue.valueInt32 = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -208,10 +212,10 @@ typedef struct GPBField_Storage {
.number = GPBField_FieldNumber_Name,
.hasIndex = 3,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBField_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBField__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -219,10 +223,10 @@ typedef struct GPBField_Storage {
.number = GPBField_FieldNumber_TypeURL,
.hasIndex = 4,
.flags = GPBFieldOptional | GPBFieldTextFormatNameCustom,
- .type = GPBTypeString,
- .offset = offsetof(GPBField_Storage, typeURL),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBField__storage_, typeURL),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -230,10 +234,10 @@ typedef struct GPBField_Storage {
.number = GPBField_FieldNumber_OneofIndex,
.hasIndex = 5,
.flags = GPBFieldOptional,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBField_Storage, oneofIndex),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBField__storage_, oneofIndex),
.defaultValue.valueInt32 = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -241,10 +245,10 @@ typedef struct GPBField_Storage {
.number = GPBField_FieldNumber_Packed,
.hasIndex = 6,
.flags = GPBFieldOptional,
- .type = GPBTypeBool,
- .offset = offsetof(GPBField_Storage, packed),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBField__storage_, packed),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -252,10 +256,10 @@ typedef struct GPBField_Storage {
.number = GPBField_FieldNumber_OptionsArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBField_Storage, optionsArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBField__storage_, optionsArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBOption),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
.fieldOptions = NULL,
},
};
@@ -268,20 +272,23 @@ typedef struct GPBField_Storage {
#else
static const char *extraTextFormatInfo = "\001\006\004\241!!\000";
#endif // GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBField class]
- rootClass:[GPBTypeRoot class]
- file:GPBTypeRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:enums
- enumCount:sizeof(enums) / sizeof(GPBMessageEnumDescription)
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBField_Storage)
- wireFormat:NO
- extraTextFormatInfo:extraTextFormatInfo];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBField class]
+ rootClass:[GPBTypeRoot class]
+ file:GPBTypeRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:enums
+ enumCount:sizeof(enums) / sizeof(GPBMessageEnumDescription)
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBField__storage_)
+ wireFormat:NO
+ extraTextFormatInfo:extraTextFormatInfo];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -291,7 +298,7 @@ typedef struct GPBField_Storage {
int32_t GPBField_Kind_RawValue(GPBField *message) {
GPBDescriptor *descriptor = [GPBField descriptor];
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBField_FieldNumber_Kind];
- return GPBGetInt32IvarWithField(message, field);
+ return GPBGetMessageInt32Field(message, field);
}
void SetGPBField_Kind_RawValue(GPBField *message, int32_t value) {
@@ -303,7 +310,7 @@ void SetGPBField_Kind_RawValue(GPBField *message, int32_t value) {
int32_t GPBField_Cardinality_RawValue(GPBField *message) {
GPBDescriptor *descriptor = [GPBField descriptor];
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBField_FieldNumber_Cardinality];
- return GPBGetInt32IvarWithField(message, field);
+ return GPBGetMessageInt32Field(message, field);
}
void SetGPBField_Cardinality_RawValue(GPBField *message, int32_t value) {
@@ -407,22 +414,22 @@ BOOL GPBField_Cardinality_IsValidValue(int32_t value__) {
@implementation GPBEnum
@dynamic name;
-@dynamic enumvalueArray;
-@dynamic optionsArray;
+@dynamic enumvalueArray, enumvalueArray_Count;
+@dynamic optionsArray, optionsArray_Count;
@dynamic hasSourceContext, sourceContext;
-typedef struct GPBEnum_Storage {
+typedef struct GPBEnum__storage_ {
uint32_t _has_storage_[1];
NSString *name;
NSMutableArray *enumvalueArray;
NSMutableArray *optionsArray;
GPBSourceContext *sourceContext;
-} GPBEnum_Storage;
+} GPBEnum__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -430,10 +437,10 @@ typedef struct GPBEnum_Storage {
.number = GPBEnum_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBEnum_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBEnum__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -441,10 +448,10 @@ typedef struct GPBEnum_Storage {
.number = GPBEnum_FieldNumber_EnumvalueArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBEnum_Storage, enumvalueArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBEnum__storage_, enumvalueArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBEnumValue),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBEnumValue),
.fieldOptions = NULL,
},
{
@@ -452,10 +459,10 @@ typedef struct GPBEnum_Storage {
.number = GPBEnum_FieldNumber_OptionsArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBEnum_Storage, optionsArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBEnum__storage_, optionsArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBOption),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
.fieldOptions = NULL,
},
{
@@ -463,26 +470,29 @@ typedef struct GPBEnum_Storage {
.number = GPBEnum_FieldNumber_SourceContext,
.hasIndex = 3,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBEnum_Storage, sourceContext),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBEnum__storage_, sourceContext),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBSourceContext),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext),
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBEnum class]
- rootClass:[GPBTypeRoot class]
- file:GPBTypeRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBEnum_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBEnum class]
+ rootClass:[GPBTypeRoot class]
+ file:GPBTypeRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBEnum__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -495,19 +505,19 @@ typedef struct GPBEnum_Storage {
@dynamic name;
@dynamic number;
-@dynamic optionsArray;
+@dynamic optionsArray, optionsArray_Count;
-typedef struct GPBEnumValue_Storage {
+typedef struct GPBEnumValue__storage_ {
uint32_t _has_storage_[1];
int32_t number;
NSString *name;
NSMutableArray *optionsArray;
-} GPBEnumValue_Storage;
+} GPBEnumValue__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -515,10 +525,10 @@ typedef struct GPBEnumValue_Storage {
.number = GPBEnumValue_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBEnumValue_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBEnumValue__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -526,10 +536,10 @@ typedef struct GPBEnumValue_Storage {
.number = GPBEnumValue_FieldNumber_Number,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBEnumValue_Storage, number),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBEnumValue__storage_, number),
.defaultValue.valueInt32 = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -537,26 +547,29 @@ typedef struct GPBEnumValue_Storage {
.number = GPBEnumValue_FieldNumber_OptionsArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBEnumValue_Storage, optionsArray),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBEnumValue__storage_, optionsArray),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBOption),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBEnumValue class]
- rootClass:[GPBTypeRoot class]
- file:GPBTypeRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBEnumValue_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBEnumValue class]
+ rootClass:[GPBTypeRoot class]
+ file:GPBTypeRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBEnumValue__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -570,16 +583,16 @@ typedef struct GPBEnumValue_Storage {
@dynamic name;
@dynamic hasValue, value;
-typedef struct GPBOption_Storage {
+typedef struct GPBOption__storage_ {
uint32_t _has_storage_[1];
NSString *name;
GPBAny *value;
-} GPBOption_Storage;
+} GPBOption__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -587,10 +600,10 @@ typedef struct GPBOption_Storage {
.number = GPBOption_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBOption_Storage, name),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBOption__storage_, name),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
@@ -598,26 +611,29 @@ typedef struct GPBOption_Storage {
.number = GPBOption_FieldNumber_Value,
.hasIndex = 1,
.flags = GPBFieldOptional,
- .type = GPBTypeMessage,
- .offset = offsetof(GPBOption_Storage, value),
+ .dataType = GPBDataTypeMessage,
+ .offset = offsetof(GPBOption__storage_, value),
.defaultValue.valueMessage = nil,
- .typeSpecific.className = GPBStringifySymbol(GPBAny),
+ .dataTypeSpecific.className = GPBStringifySymbol(GPBAny),
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBOption class]
- rootClass:[GPBTypeRoot class]
- file:GPBTypeRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBOption_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBOption class]
+ rootClass:[GPBTypeRoot class]
+ file:GPBTypeRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBOption__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
diff --git a/objectivec/google/protobuf/Wrappers.pbobjc.m b/objectivec/google/protobuf/Wrappers.pbobjc.m
index 6c342850..0403b464 100644
--- a/objectivec/google/protobuf/Wrappers.pbobjc.m
+++ b/objectivec/google/protobuf/Wrappers.pbobjc.m
@@ -11,11 +11,14 @@
@end
+#pragma mark - GPBWrappersRoot_FileDescriptor
+
static GPBFileDescriptor *GPBWrappersRoot_FileDescriptor(void) {
// This is called by +initialize so there is no need to worry
// about thread safety of the singleton.
static GPBFileDescriptor *descriptor = NULL;
if (!descriptor) {
+ GPBDebugCheckRuntimeVersion();
descriptor = [[GPBFileDescriptor alloc] initWithPackage:@"google.protobuf"
syntax:GPBFileSyntaxProto3];
}
@@ -28,15 +31,15 @@ static GPBFileDescriptor *GPBWrappersRoot_FileDescriptor(void) {
@dynamic value;
-typedef struct GPBDoubleValue_Storage {
+typedef struct GPBDoubleValue__storage_ {
uint32_t _has_storage_[1];
double value;
-} GPBDoubleValue_Storage;
+} GPBDoubleValue__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -44,26 +47,29 @@ typedef struct GPBDoubleValue_Storage {
.number = GPBDoubleValue_FieldNumber_Value,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeDouble,
- .offset = offsetof(GPBDoubleValue_Storage, value),
+ .dataType = GPBDataTypeDouble,
+ .offset = offsetof(GPBDoubleValue__storage_, value),
.defaultValue.valueDouble = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBDoubleValue class]
- rootClass:[GPBWrappersRoot class]
- file:GPBWrappersRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBDoubleValue_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBDoubleValue class]
+ rootClass:[GPBWrappersRoot class]
+ file:GPBWrappersRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBDoubleValue__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -76,15 +82,15 @@ typedef struct GPBDoubleValue_Storage {
@dynamic value;
-typedef struct GPBFloatValue_Storage {
+typedef struct GPBFloatValue__storage_ {
uint32_t _has_storage_[1];
float value;
-} GPBFloatValue_Storage;
+} GPBFloatValue__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -92,26 +98,29 @@ typedef struct GPBFloatValue_Storage {
.number = GPBFloatValue_FieldNumber_Value,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeFloat,
- .offset = offsetof(GPBFloatValue_Storage, value),
+ .dataType = GPBDataTypeFloat,
+ .offset = offsetof(GPBFloatValue__storage_, value),
.defaultValue.valueFloat = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBFloatValue class]
- rootClass:[GPBWrappersRoot class]
- file:GPBWrappersRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBFloatValue_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBFloatValue class]
+ rootClass:[GPBWrappersRoot class]
+ file:GPBWrappersRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBFloatValue__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -124,15 +133,15 @@ typedef struct GPBFloatValue_Storage {
@dynamic value;
-typedef struct GPBInt64Value_Storage {
+typedef struct GPBInt64Value__storage_ {
uint32_t _has_storage_[1];
int64_t value;
-} GPBInt64Value_Storage;
+} GPBInt64Value__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -140,26 +149,29 @@ typedef struct GPBInt64Value_Storage {
.number = GPBInt64Value_FieldNumber_Value,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeInt64,
- .offset = offsetof(GPBInt64Value_Storage, value),
+ .dataType = GPBDataTypeInt64,
+ .offset = offsetof(GPBInt64Value__storage_, value),
.defaultValue.valueInt64 = 0LL,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBInt64Value class]
- rootClass:[GPBWrappersRoot class]
- file:GPBWrappersRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBInt64Value_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBInt64Value class]
+ rootClass:[GPBWrappersRoot class]
+ file:GPBWrappersRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBInt64Value__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -172,15 +184,15 @@ typedef struct GPBInt64Value_Storage {
@dynamic value;
-typedef struct GPBUInt64Value_Storage {
+typedef struct GPBUInt64Value__storage_ {
uint32_t _has_storage_[1];
uint64_t value;
-} GPBUInt64Value_Storage;
+} GPBUInt64Value__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -188,26 +200,29 @@ typedef struct GPBUInt64Value_Storage {
.number = GPBUInt64Value_FieldNumber_Value,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeUInt64,
- .offset = offsetof(GPBUInt64Value_Storage, value),
+ .dataType = GPBDataTypeUInt64,
+ .offset = offsetof(GPBUInt64Value__storage_, value),
.defaultValue.valueUInt64 = 0ULL,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBUInt64Value class]
- rootClass:[GPBWrappersRoot class]
- file:GPBWrappersRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBUInt64Value_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBUInt64Value class]
+ rootClass:[GPBWrappersRoot class]
+ file:GPBWrappersRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBUInt64Value__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -220,15 +235,15 @@ typedef struct GPBUInt64Value_Storage {
@dynamic value;
-typedef struct GPBInt32Value_Storage {
+typedef struct GPBInt32Value__storage_ {
uint32_t _has_storage_[1];
int32_t value;
-} GPBInt32Value_Storage;
+} GPBInt32Value__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -236,26 +251,29 @@ typedef struct GPBInt32Value_Storage {
.number = GPBInt32Value_FieldNumber_Value,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeInt32,
- .offset = offsetof(GPBInt32Value_Storage, value),
+ .dataType = GPBDataTypeInt32,
+ .offset = offsetof(GPBInt32Value__storage_, value),
.defaultValue.valueInt32 = 0,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBInt32Value class]
- rootClass:[GPBWrappersRoot class]
- file:GPBWrappersRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBInt32Value_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBInt32Value class]
+ rootClass:[GPBWrappersRoot class]
+ file:GPBWrappersRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBInt32Value__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -268,15 +286,15 @@ typedef struct GPBInt32Value_Storage {
@dynamic value;
-typedef struct GPBUInt32Value_Storage {
+typedef struct GPBUInt32Value__storage_ {
uint32_t _has_storage_[1];
uint32_t value;
-} GPBUInt32Value_Storage;
+} GPBUInt32Value__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -284,26 +302,29 @@ typedef struct GPBUInt32Value_Storage {
.number = GPBUInt32Value_FieldNumber_Value,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeUInt32,
- .offset = offsetof(GPBUInt32Value_Storage, value),
+ .dataType = GPBDataTypeUInt32,
+ .offset = offsetof(GPBUInt32Value__storage_, value),
.defaultValue.valueUInt32 = 0U,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBUInt32Value class]
- rootClass:[GPBWrappersRoot class]
- file:GPBWrappersRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBUInt32Value_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBUInt32Value class]
+ rootClass:[GPBWrappersRoot class]
+ file:GPBWrappersRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBUInt32Value__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -316,15 +337,15 @@ typedef struct GPBUInt32Value_Storage {
@dynamic value;
-typedef struct GPBBoolValue_Storage {
+typedef struct GPBBoolValue__storage_ {
uint32_t _has_storage_[1];
BOOL value;
-} GPBBoolValue_Storage;
+} GPBBoolValue__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -332,26 +353,29 @@ typedef struct GPBBoolValue_Storage {
.number = GPBBoolValue_FieldNumber_Value,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeBool,
- .offset = offsetof(GPBBoolValue_Storage, value),
+ .dataType = GPBDataTypeBool,
+ .offset = offsetof(GPBBoolValue__storage_, value),
.defaultValue.valueBool = NO,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBBoolValue class]
- rootClass:[GPBWrappersRoot class]
- file:GPBWrappersRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBBoolValue_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBBoolValue class]
+ rootClass:[GPBWrappersRoot class]
+ file:GPBWrappersRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBBoolValue__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -364,15 +388,15 @@ typedef struct GPBBoolValue_Storage {
@dynamic value;
-typedef struct GPBStringValue_Storage {
+typedef struct GPBStringValue__storage_ {
uint32_t _has_storage_[1];
NSString *value;
-} GPBStringValue_Storage;
+} GPBStringValue__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -380,26 +404,29 @@ typedef struct GPBStringValue_Storage {
.number = GPBStringValue_FieldNumber_Value,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeString,
- .offset = offsetof(GPBStringValue_Storage, value),
+ .dataType = GPBDataTypeString,
+ .offset = offsetof(GPBStringValue__storage_, value),
.defaultValue.valueString = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBStringValue class]
- rootClass:[GPBWrappersRoot class]
- file:GPBWrappersRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBStringValue_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBStringValue class]
+ rootClass:[GPBWrappersRoot class]
+ file:GPBWrappersRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBStringValue__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
@@ -412,15 +439,15 @@ typedef struct GPBStringValue_Storage {
@dynamic value;
-typedef struct GPBBytesValue_Storage {
+typedef struct GPBBytesValue__storage_ {
uint32_t _has_storage_[1];
NSData *value;
-} GPBBytesValue_Storage;
+} GPBBytesValue__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
- static GPBDescriptor *descriptor = NULL;
+ static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
@@ -428,26 +455,29 @@ typedef struct GPBBytesValue_Storage {
.number = GPBBytesValue_FieldNumber_Value,
.hasIndex = 0,
.flags = GPBFieldOptional,
- .type = GPBTypeData,
- .offset = offsetof(GPBBytesValue_Storage, value),
+ .dataType = GPBDataTypeBytes,
+ .offset = offsetof(GPBBytesValue__storage_, value),
.defaultValue.valueData = nil,
- .typeSpecific.className = NULL,
+ .dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
- descriptor = [GPBDescriptor allocDescriptorForClass:[GPBBytesValue class]
- rootClass:[GPBWrappersRoot class]
- file:GPBWrappersRoot_FileDescriptor()
- fields:fields
- fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
- oneofs:NULL
- oneofCount:0
- enums:NULL
- enumCount:0
- ranges:NULL
- rangeCount:0
- storageSize:sizeof(GPBBytesValue_Storage)
- wireFormat:NO];
+ GPBDescriptor *localDescriptor =
+ [GPBDescriptor allocDescriptorForClass:[GPBBytesValue class]
+ rootClass:[GPBWrappersRoot class]
+ file:GPBWrappersRoot_FileDescriptor()
+ fields:fields
+ fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
+ oneofs:NULL
+ oneofCount:0
+ enums:NULL
+ enumCount:0
+ ranges:NULL
+ rangeCount:0
+ storageSize:sizeof(GPBBytesValue__storage_)
+ wireFormat:NO];
+ NSAssert(descriptor == nil, @"Startup recursed!");
+ descriptor = localDescriptor;
}
return descriptor;
}
diff --git a/ruby/ext/google/protobuf_c/defs.c b/ruby/ext/google/protobuf_c/defs.c
index e3341cca..8f9f33e2 100644
--- a/ruby/ext/google/protobuf_c/defs.c
+++ b/ruby/ext/google/protobuf_c/defs.c
@@ -546,11 +546,9 @@ upb_fieldtype_t ruby_to_fieldtype(VALUE type) {
rb_raise(rb_eArgError, "Expected symbol for field type.");
}
- upb_fieldtype_t upb_type = -1;
-
#define CONVERT(upb, ruby) \
if (SYM2ID(type) == rb_intern( # ruby )) { \
- upb_type = UPB_TYPE_ ## upb; \
+ return UPB_TYPE_ ## upb; \
}
CONVERT(FLOAT, float);
@@ -567,11 +565,8 @@ upb_fieldtype_t ruby_to_fieldtype(VALUE type) {
#undef CONVERT
- if (upb_type == -1) {
- rb_raise(rb_eArgError, "Unknown field type.");
- }
-
- return upb_type;
+ rb_raise(rb_eArgError, "Unknown field type.");
+ return 0;
}
VALUE fieldtype_to_ruby(upb_fieldtype_t type) {
@@ -666,10 +661,12 @@ VALUE FieldDescriptor_label_set(VALUE _self, VALUE label) {
}
upb_label_t upb_label = -1;
+ bool converted = false;
#define CONVERT(upb, ruby) \
if (SYM2ID(label) == rb_intern( # ruby )) { \
upb_label = UPB_LABEL_ ## upb; \
+ converted = true; \
}
CONVERT(OPTIONAL, optional);
@@ -678,7 +675,7 @@ VALUE FieldDescriptor_label_set(VALUE _self, VALUE label) {
#undef CONVERT
- if (upb_label == -1) {
+ if (!converted) {
rb_raise(rb_eArgError, "Unknown field label.");
}
diff --git a/ruby/ext/google/protobuf_c/extconf.rb b/ruby/ext/google/protobuf_c/extconf.rb
index 74203b07..b368dcc6 100644
--- a/ruby/ext/google/protobuf_c/extconf.rb
+++ b/ruby/ext/google/protobuf_c/extconf.rb
@@ -2,9 +2,7 @@
require 'mkmf'
-$CFLAGS += " -O3 -std=c99 -Wno-unused-function " +
- "-Wno-declaration-after-statement -Wno-unused-variable " +
- "-Wno-sign-compare -DNDEBUG "
+$CFLAGS += " -std=c99 -O3 -DNDEBUG"
$objs = ["protobuf.o", "defs.o", "storage.o", "message.o",
"repeated_field.o", "map.o", "encode_decode.o", "upb.o"]
diff --git a/ruby/ext/google/protobuf_c/map.c b/ruby/ext/google/protobuf_c/map.c
index 12e7a9d9..3436e09a 100644
--- a/ruby/ext/google/protobuf_c/map.c
+++ b/ruby/ext/google/protobuf_c/map.c
@@ -120,7 +120,7 @@ static VALUE table_key_to_ruby(Map* self, const char* buf, size_t length) {
}
static void* value_memory(upb_value* v) {
- return (void*)(&v->val.uint64);
+ return (void*)(&v->val);
}
// -----------------------------------------------------------------------------
diff --git a/ruby/ext/google/protobuf_c/upb.c b/ruby/ext/google/protobuf_c/upb.c
index 55a99cfe..f50ff6ad 100644
--- a/ruby/ext/google/protobuf_c/upb.c
+++ b/ruby/ext/google/protobuf_c/upb.c
@@ -13,7 +13,7 @@
typedef struct {
size_t len;
- char str[1]; // Null-terminated string data follows.
+ char str[1]; /* Null-terminated string data follows. */
} str_t;
static str_t *newstr(const char *data, size_t len) {
@@ -27,7 +27,7 @@ static str_t *newstr(const char *data, size_t len) {
static void freestr(str_t *s) { free(s); }
-// isalpha() etc. from <ctype.h> are locale-dependent, which we don't want.
+/* isalpha() etc. from <ctype.h> are locale-dependent, which we don't want. */
static bool upb_isbetween(char c, char low, char high) {
return c >= low && c <= high;
}
@@ -42,7 +42,8 @@ static bool upb_isalphanum(char c) {
static bool upb_isident(const char *str, size_t len, bool full, upb_status *s) {
bool start = true;
- for (size_t i = 0; i < len; i++) {
+ size_t i;
+ for (i = 0; i < len; i++) {
char c = str[i];
if (c == '.') {
if (start || !full) {
@@ -87,39 +88,22 @@ bool upb_def_setfullname(upb_def *def, const char *fullname, upb_status *s) {
upb_def *upb_def_dup(const upb_def *def, const void *o) {
switch (def->type) {
case UPB_DEF_MSG:
- return UPB_UPCAST(upb_msgdef_dup(upb_downcast_msgdef(def), o));
+ return upb_msgdef_upcast_mutable(
+ upb_msgdef_dup(upb_downcast_msgdef(def), o));
case UPB_DEF_FIELD:
- return UPB_UPCAST(upb_fielddef_dup(upb_downcast_fielddef(def), o));
+ return upb_fielddef_upcast_mutable(
+ upb_fielddef_dup(upb_downcast_fielddef(def), o));
case UPB_DEF_ENUM:
- return UPB_UPCAST(upb_enumdef_dup(upb_downcast_enumdef(def), o));
+ return upb_enumdef_upcast_mutable(
+ upb_enumdef_dup(upb_downcast_enumdef(def), o));
default: assert(false); return NULL;
}
}
-bool upb_def_isfrozen(const upb_def *def) {
- return upb_refcounted_isfrozen(UPB_UPCAST(def));
-}
-
-void upb_def_ref(const upb_def *def, const void *owner) {
- upb_refcounted_ref(UPB_UPCAST(def), owner);
-}
-
-void upb_def_unref(const upb_def *def, const void *owner) {
- upb_refcounted_unref(UPB_UPCAST(def), owner);
-}
-
-void upb_def_donateref(const upb_def *def, const void *from, const void *to) {
- upb_refcounted_donateref(UPB_UPCAST(def), from, to);
-}
-
-void upb_def_checkref(const upb_def *def, const void *owner) {
- upb_refcounted_checkref(UPB_UPCAST(def), owner);
-}
-
static bool upb_def_init(upb_def *def, upb_deftype_t type,
const struct upb_refcounted_vtbl *vtbl,
const void *owner) {
- if (!upb_refcounted_init(UPB_UPCAST(def), vtbl, owner)) return false;
+ if (!upb_refcounted_init(upb_def_upcast_mutable(def), vtbl, owner)) return false;
def->type = type;
def->fullname = NULL;
def->came_from_user = false;
@@ -131,7 +115,7 @@ static void upb_def_uninit(upb_def *def) {
}
static const char *msgdef_name(const upb_msgdef *m) {
- const char *name = upb_def_fullname(UPB_UPCAST(m));
+ const char *name = upb_def_fullname(upb_msgdef_upcast(m));
return name ? name : "(anonymous)";
}
@@ -154,13 +138,15 @@ static bool upb_validate_field(upb_fielddef *f, upb_status *s) {
}
if (upb_fielddef_hassubdef(f)) {
+ const upb_def *subdef;
+
if (f->subdef_is_symbolic) {
upb_status_seterrf(s, "field '%s.%s' has not been resolved",
msgdef_name(f->msg.def), upb_fielddef_name(f));
return false;
}
- const upb_def *subdef = upb_fielddef_subdef(f);
+ subdef = upb_fielddef_subdef(f);
if (subdef == NULL) {
upb_status_seterrf(s, "field %s.%s is missing required subdef",
msgdef_name(f->msg.def), upb_fielddef_name(f));
@@ -179,14 +165,14 @@ static bool upb_validate_field(upb_fielddef *f, upb_status *s) {
bool has_default_name = upb_fielddef_enumhasdefaultstr(f);
bool has_default_number = upb_fielddef_enumhasdefaultint32(f);
- // Previously verified by upb_validate_enumdef().
+ /* Previously verified by upb_validate_enumdef(). */
assert(upb_enumdef_numvals(upb_fielddef_enumsubdef(f)) > 0);
- // We've already validated that we have an associated enumdef and that it
- // has at least one member, so at least one of these should be true.
- // Because if the user didn't set anything, we'll pick up the enum's
- // default, but if the user *did* set something we should at least pick up
- // the one they set (int32 or string).
+ /* We've already validated that we have an associated enumdef and that it
+ * has at least one member, so at least one of these should be true.
+ * Because if the user didn't set anything, we'll pick up the enum's
+ * default, but if the user *did* set something we should at least pick up
+ * the one they set (int32 or string). */
assert(has_default_name || has_default_number);
if (!has_default_name) {
@@ -205,13 +191,13 @@ static bool upb_validate_field(upb_fielddef *f, upb_status *s) {
return false;
}
- // Lift the effective numeric default into the field's default slot, in case
- // we were only getting it "by reference" from the enumdef.
+ /* Lift the effective numeric default into the field's default slot, in case
+ * we were only getting it "by reference" from the enumdef. */
upb_fielddef_setdefaultint32(f, upb_fielddef_defaultint32(f));
}
- // Ensure that MapEntry submessages only appear as repeated fields, not
- // optional/required (singular) fields.
+ /* Ensure that MapEntry submessages only appear as repeated fields, not
+ * optional/required (singular) fields. */
if (upb_fielddef_type(f) == UPB_TYPE_MESSAGE &&
upb_fielddef_msgsubdef(f) != NULL) {
const upb_msgdef *subdef = upb_fielddef_msgsubdef(f);
@@ -238,8 +224,8 @@ static bool upb_validate_enumdef(const upb_enumdef *e, upb_status *s) {
return true;
}
-// All submessage fields are lower than all other fields.
-// Secondly, fields are increasing in order.
+/* All submessage fields are lower than all other fields.
+ * Secondly, fields are increasing in order. */
uint32_t field_rank(const upb_fielddef *f) {
uint32_t ret = upb_fielddef_number(f);
const uint32_t high_bit = 1 << 30;
@@ -256,14 +242,15 @@ int cmp_fields(const void *p1, const void *p2) {
}
static bool assign_msg_indices(upb_msgdef *m, upb_status *s) {
- // Sort fields. upb internally relies on UPB_TYPE_MESSAGE fields having the
- // lowest indexes, but we do not publicly guarantee this.
+ /* Sort fields. upb internally relies on UPB_TYPE_MESSAGE fields having the
+ * lowest indexes, but we do not publicly guarantee this. */
+ upb_msg_field_iter j;
+ int i;
+ uint32_t selector;
int n = upb_msgdef_numfields(m);
upb_fielddef **fields = malloc(n * sizeof(*fields));
if (!fields) return false;
- upb_msg_field_iter j;
- int i;
m->submsg_field_count = 0;
for(i = 0, upb_msg_field_begin(&j, m);
!upb_msg_field_done(&j);
@@ -282,7 +269,7 @@ static bool assign_msg_indices(upb_msgdef *m, upb_status *s) {
qsort(fields, n, sizeof(*fields), cmp_fields);
- uint32_t selector = UPB_STATIC_SELECTOR_COUNT + m->submsg_field_count;
+ selector = UPB_STATIC_SELECTOR_COUNT + m->submsg_field_count;
for (i = 0; i < n; i++) {
upb_fielddef *f = fields[i];
f->index_ = i;
@@ -292,38 +279,42 @@ static bool assign_msg_indices(upb_msgdef *m, upb_status *s) {
m->selector_count = selector;
#ifndef NDEBUG
- // Verify that all selectors for the message are distinct.
- //
+ {
+ /* Verify that all selectors for the message are distinct. */
#define TRY(type) \
- if (upb_handlers_getselector(f, type, &sel)) upb_inttable_insert(&t, sel, v);
+ if (upb_handlers_getselector(f, type, &sel)) upb_inttable_insert(&t, sel, v);
- upb_inttable t;
- upb_inttable_init(&t, UPB_CTYPE_BOOL);
- upb_value v = upb_value_bool(true);
- upb_selector_t sel;
- upb_inttable_insert(&t, UPB_STARTMSG_SELECTOR, v);
- upb_inttable_insert(&t, UPB_ENDMSG_SELECTOR, v);
- for(upb_msg_field_begin(&j, m);
- !upb_msg_field_done(&j);
- upb_msg_field_next(&j)) {
- upb_fielddef *f = upb_msg_iter_field(&j);
- // These calls will assert-fail in upb_table if the value already exists.
- TRY(UPB_HANDLER_INT32);
- TRY(UPB_HANDLER_INT64)
- TRY(UPB_HANDLER_UINT32)
- TRY(UPB_HANDLER_UINT64)
- TRY(UPB_HANDLER_FLOAT)
- TRY(UPB_HANDLER_DOUBLE)
- TRY(UPB_HANDLER_BOOL)
- TRY(UPB_HANDLER_STARTSTR)
- TRY(UPB_HANDLER_STRING)
- TRY(UPB_HANDLER_ENDSTR)
- TRY(UPB_HANDLER_STARTSUBMSG)
- TRY(UPB_HANDLER_ENDSUBMSG)
- TRY(UPB_HANDLER_STARTSEQ)
- TRY(UPB_HANDLER_ENDSEQ)
- }
- upb_inttable_uninit(&t);
+ upb_inttable t;
+ upb_value v;
+ upb_selector_t sel;
+
+ upb_inttable_init(&t, UPB_CTYPE_BOOL);
+ v = upb_value_bool(true);
+ upb_inttable_insert(&t, UPB_STARTMSG_SELECTOR, v);
+ upb_inttable_insert(&t, UPB_ENDMSG_SELECTOR, v);
+ for(upb_msg_field_begin(&j, m);
+ !upb_msg_field_done(&j);
+ upb_msg_field_next(&j)) {
+ upb_fielddef *f = upb_msg_iter_field(&j);
+ /* These calls will assert-fail in upb_table if the value already
+ * exists. */
+ TRY(UPB_HANDLER_INT32);
+ TRY(UPB_HANDLER_INT64)
+ TRY(UPB_HANDLER_UINT32)
+ TRY(UPB_HANDLER_UINT64)
+ TRY(UPB_HANDLER_FLOAT)
+ TRY(UPB_HANDLER_DOUBLE)
+ TRY(UPB_HANDLER_BOOL)
+ TRY(UPB_HANDLER_STARTSTR)
+ TRY(UPB_HANDLER_STRING)
+ TRY(UPB_HANDLER_ENDSTR)
+ TRY(UPB_HANDLER_STARTSUBMSG)
+ TRY(UPB_HANDLER_ENDSUBMSG)
+ TRY(UPB_HANDLER_STARTSEQ)
+ TRY(UPB_HANDLER_ENDSEQ)
+ }
+ upb_inttable_uninit(&t);
+ }
#undef TRY
#endif
@@ -332,14 +323,17 @@ static bool assign_msg_indices(upb_msgdef *m, upb_status *s) {
}
bool upb_def_freeze(upb_def *const* defs, int n, upb_status *s) {
+ int i;
+ int maxdepth;
+ bool ret;
upb_status_clear(s);
- // First perform validation, in two passes so we can check that we have a
- // transitive closure without needing to search.
- for (int i = 0; i < n; i++) {
+ /* First perform validation, in two passes so we can check that we have a
+ * transitive closure without needing to search. */
+ for (i = 0; i < n; i++) {
upb_def *def = defs[i];
if (upb_def_isfrozen(def)) {
- // Could relax this requirement if it's annoying.
+ /* Could relax this requirement if it's annoying. */
upb_status_seterrmsg(s, "def is already frozen");
goto err;
} else if (def->type == UPB_DEF_FIELD) {
@@ -350,14 +344,14 @@ bool upb_def_freeze(upb_def *const* defs, int n, upb_status *s) {
goto err;
}
} else {
- // Set now to detect transitive closure in the second pass.
+ /* Set now to detect transitive closure in the second pass. */
def->came_from_user = true;
}
}
- // Second pass of validation. Also assign selector bases and indexes, and
- // compact tables.
- for (int i = 0; i < n; i++) {
+ /* Second pass of validation. Also assign selector bases and indexes, and
+ * compact tables. */
+ for (i = 0; i < n; i++) {
upb_msgdef *m = upb_dyncast_msgdef_mutable(defs[i]);
upb_enumdef *e = upb_dyncast_enumdef_mutable(defs[i]);
if (m) {
@@ -370,17 +364,17 @@ bool upb_def_freeze(upb_def *const* defs, int n, upb_status *s) {
}
}
- // Def graph contains FieldDefs between each MessageDef, so double the limit.
- int maxdepth = UPB_MAX_MESSAGE_DEPTH * 2;
+ /* Def graph contains FieldDefs between each MessageDef, so double the
+ * limit. */
+ maxdepth = UPB_MAX_MESSAGE_DEPTH * 2;
- // Validation all passed; freeze the defs.
- bool ret =
- upb_refcounted_freeze((upb_refcounted * const *)defs, n, s, maxdepth);
+ /* Validation all passed; freeze the defs. */
+ ret = upb_refcounted_freeze((upb_refcounted * const *)defs, n, s, maxdepth);
assert(!(s && ret != upb_ok(s)));
return ret;
err:
- for (int i = 0; i < n; i++) {
+ for (i = 0; i < n; i++) {
defs[i]->came_from_user = false;
}
assert(!(s && upb_ok(s)));
@@ -395,12 +389,12 @@ static void upb_enumdef_free(upb_refcounted *r) {
upb_inttable_iter i;
upb_inttable_begin(&i, &e->iton);
for( ; !upb_inttable_done(&i); upb_inttable_next(&i)) {
- // To clean up the upb_strdup() from upb_enumdef_addval().
+ /* To clean up the upb_strdup() from upb_enumdef_addval(). */
free(upb_value_getcstr(upb_inttable_iter_value(&i)));
}
upb_strtable_uninit(&e->ntoi);
upb_inttable_uninit(&e->iton);
- upb_def_uninit(UPB_UPCAST(e));
+ upb_def_uninit(upb_enumdef_upcast_mutable(e));
free(e);
}
@@ -408,7 +402,8 @@ upb_enumdef *upb_enumdef_new(const void *owner) {
static const struct upb_refcounted_vtbl vtbl = {NULL, &upb_enumdef_free};
upb_enumdef *e = malloc(sizeof(*e));
if (!e) return NULL;
- if (!upb_def_init(UPB_UPCAST(e), UPB_DEF_ENUM, &vtbl, owner)) goto err2;
+ if (!upb_def_init(upb_enumdef_upcast_mutable(e), UPB_DEF_ENUM, &vtbl, owner))
+ goto err2;
if (!upb_strtable_init(&e->ntoi, UPB_CTYPE_INT32)) goto err2;
if (!upb_inttable_init(&e->iton, UPB_CTYPE_CSTR)) goto err1;
return e;
@@ -421,9 +416,9 @@ err2:
}
upb_enumdef *upb_enumdef_dup(const upb_enumdef *e, const void *owner) {
+ upb_enum_iter i;
upb_enumdef *new_e = upb_enumdef_new(owner);
if (!new_e) return NULL;
- upb_enum_iter i;
for(upb_enum_begin(&i, e); !upb_enum_done(&i); upb_enum_next(&i)) {
bool success = upb_enumdef_addval(
new_e, upb_enum_iter_name(&i),upb_enum_iter_number(&i), NULL);
@@ -435,39 +430,18 @@ upb_enumdef *upb_enumdef_dup(const upb_enumdef *e, const void *owner) {
return new_e;
}
-bool upb_enumdef_isfrozen(const upb_enumdef *e) {
- return upb_def_isfrozen(UPB_UPCAST(e));
-}
-
-void upb_enumdef_ref(const upb_enumdef *e, const void *owner) {
- upb_def_ref(UPB_UPCAST(e), owner);
-}
-
-void upb_enumdef_unref(const upb_enumdef *e, const void *owner) {
- upb_def_unref(UPB_UPCAST(e), owner);
-}
-
-void upb_enumdef_donateref(
- const upb_enumdef *e, const void *from, const void *to) {
- upb_def_donateref(UPB_UPCAST(e), from, to);
-}
-
-void upb_enumdef_checkref(const upb_enumdef *e, const void *owner) {
- upb_def_checkref(UPB_UPCAST(e), owner);
-}
-
bool upb_enumdef_freeze(upb_enumdef *e, upb_status *status) {
- upb_def *d = UPB_UPCAST(e);
+ upb_def *d = upb_enumdef_upcast_mutable(e);
return upb_def_freeze(&d, 1, status);
}
const char *upb_enumdef_fullname(const upb_enumdef *e) {
- return upb_def_fullname(UPB_UPCAST(e));
+ return upb_def_fullname(upb_enumdef_upcast(e));
}
bool upb_enumdef_setfullname(upb_enumdef *e, const char *fullname,
upb_status *s) {
- return upb_def_setfullname(UPB_UPCAST(e), fullname, s);
+ return upb_def_setfullname(upb_enumdef_upcast_mutable(e), fullname, s);
}
bool upb_enumdef_addval(upb_enumdef *e, const char *name, int32_t num,
@@ -516,7 +490,7 @@ int upb_enumdef_numvals(const upb_enumdef *e) {
}
void upb_enum_begin(upb_enum_iter *i, const upb_enumdef *e) {
- // We iterate over the ntoi table, to account for duplicate numbers.
+ /* We iterate over the ntoi table, to account for duplicate numbers. */
upb_strtable_begin(i, &e->ntoi);
}
@@ -561,13 +535,13 @@ static void visitfield(const upb_refcounted *r, upb_refcounted_visit *visit,
void *closure) {
const upb_fielddef *f = (const upb_fielddef*)r;
if (upb_fielddef_containingtype(f)) {
- visit(r, UPB_UPCAST2(upb_fielddef_containingtype(f)), closure);
+ visit(r, upb_msgdef_upcast2(upb_fielddef_containingtype(f)), closure);
}
if (upb_fielddef_containingoneof(f)) {
- visit(r, UPB_UPCAST2(upb_fielddef_containingoneof(f)), closure);
+ visit(r, upb_oneofdef_upcast2(upb_fielddef_containingoneof(f)), closure);
}
if (upb_fielddef_subdef(f)) {
- visit(r, UPB_UPCAST(upb_fielddef_subdef(f)), closure);
+ visit(r, upb_def_upcast(upb_fielddef_subdef(f)), closure);
}
}
@@ -576,26 +550,27 @@ static void freefield(upb_refcounted *r) {
upb_fielddef_uninit_default(f);
if (f->subdef_is_symbolic)
free(f->sub.name);
- upb_def_uninit(UPB_UPCAST(f));
+ upb_def_uninit(upb_fielddef_upcast_mutable(f));
free(f);
}
static const char *enumdefaultstr(const upb_fielddef *f) {
+ const upb_enumdef *e;
assert(f->type_is_set_ && f->type_ == UPB_TYPE_ENUM);
- const upb_enumdef *e = upb_fielddef_enumsubdef(f);
+ e = upb_fielddef_enumsubdef(f);
if (f->default_is_string && f->defaultval.bytes) {
- // Default was explicitly set as a string.
+ /* Default was explicitly set as a string. */
str_t *s = f->defaultval.bytes;
return s->str;
} else if (e) {
if (!f->default_is_string) {
- // Default was explicitly set as an integer; look it up in enumdef.
+ /* Default was explicitly set as an integer; look it up in enumdef. */
const char *name = upb_enumdef_iton(e, f->defaultval.sint);
if (name) {
return name;
}
} else {
- // Default is completely unset; pull enumdef default.
+ /* Default is completely unset; pull enumdef default. */
if (upb_enumdef_numvals(e) > 0) {
const char *name = upb_enumdef_iton(e, upb_enumdef_default(e));
assert(name);
@@ -607,21 +582,22 @@ static const char *enumdefaultstr(const upb_fielddef *f) {
}
static bool enumdefaultint32(const upb_fielddef *f, int32_t *val) {
+ const upb_enumdef *e;
assert(f->type_is_set_ && f->type_ == UPB_TYPE_ENUM);
- const upb_enumdef *e = upb_fielddef_enumsubdef(f);
+ e = upb_fielddef_enumsubdef(f);
if (!f->default_is_string) {
- // Default was explicitly set as an integer.
+ /* Default was explicitly set as an integer. */
*val = f->defaultval.sint;
return true;
} else if (e) {
if (f->defaultval.bytes) {
- // Default was explicitly set as a str; try to lookup corresponding int.
+ /* Default was explicitly set as a str; try to lookup corresponding int. */
str_t *s = f->defaultval.bytes;
if (upb_enumdef_ntoiz(e, s->str, val)) {
return true;
}
} else {
- // Default is unset; try to pull in enumdef default.
+ /* Default is unset; try to pull in enumdef default. */
if (upb_enumdef_numvals(e) > 0) {
*val = upb_enumdef_default(e);
return true;
@@ -631,11 +607,11 @@ static bool enumdefaultint32(const upb_fielddef *f, int32_t *val) {
return false;
}
-upb_fielddef *upb_fielddef_new(const void *owner) {
+upb_fielddef *upb_fielddef_new(const void *o) {
static const struct upb_refcounted_vtbl vtbl = {visitfield, freefield};
upb_fielddef *f = malloc(sizeof(*f));
if (!f) return NULL;
- if (!upb_def_init(UPB_UPCAST(f), UPB_DEF_FIELD, &vtbl, owner)) {
+ if (!upb_def_init(upb_fielddef_upcast_mutable(f), UPB_DEF_FIELD, &vtbl, o)) {
free(f);
return NULL;
}
@@ -653,19 +629,20 @@ upb_fielddef *upb_fielddef_new(const void *owner) {
f->lazy_ = false;
f->packed_ = true;
- // For the moment we default this to UPB_INTFMT_VARIABLE, since it will work
- // with all integer types and is in some since more "default" since the most
- // normal-looking proto2 types int32/int64/uint32/uint64 use variable.
- //
- // Other options to consider:
- // - there is no default; users must set this manually (like type).
- // - default signed integers to UPB_INTFMT_ZIGZAG, since it's more likely to
- // be an optimal default for signed integers.
+ /* For the moment we default this to UPB_INTFMT_VARIABLE, since it will work
+ * with all integer types and is in some since more "default" since the most
+ * normal-looking proto2 types int32/int64/uint32/uint64 use variable.
+ *
+ * Other options to consider:
+ * - there is no default; users must set this manually (like type).
+ * - default signed integers to UPB_INTFMT_ZIGZAG, since it's more likely to
+ * be an optimal default for signed integers. */
f->intfmt = UPB_INTFMT_VARIABLE;
return f;
}
upb_fielddef *upb_fielddef_dup(const upb_fielddef *f, const void *owner) {
+ const char *srcname;
upb_fielddef *newf = upb_fielddef_new(owner);
if (!newf) return NULL;
upb_fielddef_settype(newf, upb_fielddef_type(f));
@@ -680,9 +657,8 @@ upb_fielddef *upb_fielddef_dup(const upb_fielddef *f, const void *owner) {
newf->defaultval = f->defaultval;
}
- const char *srcname;
if (f->subdef_is_symbolic) {
- srcname = f->sub.name; // Might be NULL.
+ srcname = f->sub.name; /* Might be NULL. */
} else {
srcname = f->sub.def ? upb_def_fullname(f->sub.def) : NULL;
}
@@ -701,27 +677,6 @@ upb_fielddef *upb_fielddef_dup(const upb_fielddef *f, const void *owner) {
return newf;
}
-bool upb_fielddef_isfrozen(const upb_fielddef *f) {
- return upb_def_isfrozen(UPB_UPCAST(f));
-}
-
-void upb_fielddef_ref(const upb_fielddef *f, const void *owner) {
- upb_def_ref(UPB_UPCAST(f), owner);
-}
-
-void upb_fielddef_unref(const upb_fielddef *f, const void *owner) {
- upb_def_unref(UPB_UPCAST(f), owner);
-}
-
-void upb_fielddef_donateref(
- const upb_fielddef *f, const void *from, const void *to) {
- upb_def_donateref(UPB_UPCAST(f), from, to);
-}
-
-void upb_fielddef_checkref(const upb_fielddef *f, const void *owner) {
- upb_def_checkref(UPB_UPCAST(f), owner);
-}
-
bool upb_fielddef_typeisset(const upb_fielddef *f) {
return f->type_is_set_;
}
@@ -764,7 +719,7 @@ bool upb_fielddef_packed(const upb_fielddef *f) {
}
const char *upb_fielddef_name(const upb_fielddef *f) {
- return upb_def_fullname(UPB_UPCAST(f));
+ return upb_def_fullname(upb_fielddef_upcast(f));
}
const upb_msgdef *upb_fielddef_containingtype(const upb_fielddef *f) {
@@ -794,8 +749,8 @@ bool upb_fielddef_setcontainingtypename(upb_fielddef *f, const char *name,
upb_status_seterrmsg(s, "field has already been added to a message.");
return false;
}
- // TODO: validate name (upb_isident() doesn't quite work atm because this name
- // may have a leading ".").
+ /* TODO: validate name (upb_isident() doesn't quite work atm because this name
+ * may have a leading "."). */
release_containingtype(f);
f->msg.name = upb_strdup(name);
f->msg_is_symbolic = true;
@@ -807,7 +762,7 @@ bool upb_fielddef_setname(upb_fielddef *f, const char *name, upb_status *s) {
upb_status_seterrmsg(s, "Already added to message or oneof");
return false;
}
- return upb_def_setfullname(UPB_UPCAST(f), name, s);
+ return upb_def_setfullname(upb_fielddef_upcast_mutable(f), name, s);
}
static void chkdefaulttype(const upb_fielddef *f, upb_fieldtype_t type) {
@@ -867,7 +822,7 @@ const char *upb_fielddef_defaultstr(const upb_fielddef *f, size_t *len) {
if (upb_fielddef_type(f) == UPB_TYPE_ENUM) {
const char *ret = enumdefaultstr(f);
assert(ret);
- // Enum defaults can't have embedded NULLs.
+ /* Enum defaults can't have embedded NULLs. */
if (len) *len = strlen(ret);
return ret;
}
@@ -898,7 +853,7 @@ static void upb_fielddef_init_default(upb_fielddef *f) {
break;
case UPB_TYPE_MESSAGE: break;
case UPB_TYPE_ENUM:
- // This is our special sentinel that indicates "not set" for an enum.
+ /* This is our special sentinel that indicates "not set" for an enum. */
f->default_is_string = true;
f->defaultval.bytes = NULL;
break;
@@ -1144,6 +1099,7 @@ void upb_fielddef_setdefaultdouble(upb_fielddef *f, double value) {
bool upb_fielddef_setdefaultstr(upb_fielddef *f, const void *str, size_t len,
upb_status *s) {
+ str_t *str2;
assert(upb_fielddef_isstring(f) || f->type_ == UPB_TYPE_ENUM);
if (f->type_ == UPB_TYPE_ENUM && !upb_isident(str, len, false, s))
return false;
@@ -1156,7 +1112,7 @@ bool upb_fielddef_setdefaultstr(upb_fielddef *f, const void *str, size_t len,
assert(f->type_ == UPB_TYPE_ENUM);
}
- str_t *str2 = newstr(str, len);
+ str2 = newstr(str, len);
f->defaultval.bytes = str2;
f->default_is_string = true;
return true;
@@ -1169,8 +1125,8 @@ void upb_fielddef_setdefaultcstr(upb_fielddef *f, const char *str,
}
bool upb_fielddef_enumhasdefaultint32(const upb_fielddef *f) {
- assert(f->type_is_set_ && f->type_ == UPB_TYPE_ENUM);
int32_t val;
+ assert(f->type_is_set_ && f->type_ == UPB_TYPE_ENUM);
return enumdefaultint32(f, &val);
}
@@ -1217,12 +1173,12 @@ bool upb_fielddef_setsubdef(upb_fielddef *f, const upb_def *subdef,
bool upb_fielddef_setmsgsubdef(upb_fielddef *f, const upb_msgdef *subdef,
upb_status *s) {
- return upb_fielddef_setsubdef(f, UPB_UPCAST(subdef), s);
+ return upb_fielddef_setsubdef(f, upb_msgdef_upcast(subdef), s);
}
bool upb_fielddef_setenumsubdef(upb_fielddef *f, const upb_enumdef *subdef,
upb_status *s) {
- return upb_fielddef_setsubdef(f, UPB_UPCAST(subdef), s);
+ return upb_fielddef_setsubdef(f, upb_enumdef_upcast(subdef), s);
}
bool upb_fielddef_setsubdefname(upb_fielddef *f, const char *name,
@@ -1232,8 +1188,8 @@ bool upb_fielddef_setsubdefname(upb_fielddef *f, const char *name,
upb_status_seterrmsg(s, "field type does not accept a subdef");
return false;
}
- // TODO: validate name (upb_isident() doesn't quite work atm because this name
- // may have a leading ".").
+ /* TODO: validate name (upb_isident() doesn't quite work atm because this name
+ * may have a leading "."). */
release_subdef(f);
f->sub.name = upb_strdup(name);
f->subdef_is_symbolic = true;
@@ -1282,20 +1238,20 @@ bool upb_fielddef_checkdescriptortype(int32_t type) {
static void visitmsg(const upb_refcounted *r, upb_refcounted_visit *visit,
void *closure) {
+ upb_msg_oneof_iter o;
const upb_msgdef *m = (const upb_msgdef*)r;
upb_msg_field_iter i;
for(upb_msg_field_begin(&i, m);
!upb_msg_field_done(&i);
upb_msg_field_next(&i)) {
upb_fielddef *f = upb_msg_iter_field(&i);
- visit(r, UPB_UPCAST2(f), closure);
+ visit(r, upb_fielddef_upcast2(f), closure);
}
- upb_msg_oneof_iter o;
for(upb_msg_oneof_begin(&o, m);
!upb_msg_oneof_done(&o);
upb_msg_oneof_next(&o)) {
upb_oneofdef *f = upb_msg_iter_oneof(&o);
- visit(r, UPB_UPCAST2(f), closure);
+ visit(r, upb_oneofdef_upcast2(f), closure);
}
}
@@ -1304,7 +1260,7 @@ static void freemsg(upb_refcounted *r) {
upb_strtable_uninit(&m->ntoo);
upb_strtable_uninit(&m->ntof);
upb_inttable_uninit(&m->itof);
- upb_def_uninit(UPB_UPCAST(m));
+ upb_def_uninit(upb_msgdef_upcast_mutable(m));
free(m);
}
@@ -1312,7 +1268,8 @@ upb_msgdef *upb_msgdef_new(const void *owner) {
static const struct upb_refcounted_vtbl vtbl = {visitmsg, freemsg};
upb_msgdef *m = malloc(sizeof(*m));
if (!m) return NULL;
- if (!upb_def_init(UPB_UPCAST(m), UPB_DEF_MSG, &vtbl, owner)) goto err2;
+ if (!upb_def_init(upb_msgdef_upcast_mutable(m), UPB_DEF_MSG, &vtbl, owner))
+ goto err2;
if (!upb_inttable_init(&m->itof, UPB_CTYPE_PTR)) goto err3;
if (!upb_strtable_init(&m->ntof, UPB_CTYPE_PTR)) goto err2;
if (!upb_strtable_init(&m->ntoo, UPB_CTYPE_PTR)) goto err1;
@@ -1329,25 +1286,28 @@ err3:
}
upb_msgdef *upb_msgdef_dup(const upb_msgdef *m, const void *owner) {
+ bool ok;
+ upb_msg_field_iter i;
+ upb_msg_oneof_iter o;
+
upb_msgdef *newm = upb_msgdef_new(owner);
if (!newm) return NULL;
- bool ok = upb_def_setfullname(UPB_UPCAST(newm),
- upb_def_fullname(UPB_UPCAST(m)), NULL);
+ ok = upb_def_setfullname(upb_msgdef_upcast_mutable(newm),
+ upb_def_fullname(upb_msgdef_upcast(m)),
+ NULL);
newm->map_entry = m->map_entry;
UPB_ASSERT_VAR(ok, ok);
- upb_msg_field_iter i;
for(upb_msg_field_begin(&i, m);
!upb_msg_field_done(&i);
upb_msg_field_next(&i)) {
upb_fielddef *f = upb_fielddef_dup(upb_msg_iter_field(&i), &f);
- // Fields in oneofs are dup'd below.
+ /* Fields in oneofs are dup'd below. */
if (upb_fielddef_containingoneof(f)) continue;
if (!f || !upb_msgdef_addfield(newm, f, &f, NULL)) {
upb_msgdef_unref(newm, owner);
return NULL;
}
}
- upb_msg_oneof_iter o;
for(upb_msg_oneof_begin(&o, m);
!upb_msg_oneof_done(&o);
upb_msg_oneof_next(&o)) {
@@ -1360,43 +1320,22 @@ upb_msgdef *upb_msgdef_dup(const upb_msgdef *m, const void *owner) {
return newm;
}
-bool upb_msgdef_isfrozen(const upb_msgdef *m) {
- return upb_def_isfrozen(UPB_UPCAST(m));
-}
-
-void upb_msgdef_ref(const upb_msgdef *m, const void *owner) {
- upb_def_ref(UPB_UPCAST(m), owner);
-}
-
-void upb_msgdef_unref(const upb_msgdef *m, const void *owner) {
- upb_def_unref(UPB_UPCAST(m), owner);
-}
-
-void upb_msgdef_donateref(
- const upb_msgdef *m, const void *from, const void *to) {
- upb_def_donateref(UPB_UPCAST(m), from, to);
-}
-
-void upb_msgdef_checkref(const upb_msgdef *m, const void *owner) {
- upb_def_checkref(UPB_UPCAST(m), owner);
-}
-
bool upb_msgdef_freeze(upb_msgdef *m, upb_status *status) {
- upb_def *d = UPB_UPCAST(m);
+ upb_def *d = upb_msgdef_upcast_mutable(m);
return upb_def_freeze(&d, 1, status);
}
const char *upb_msgdef_fullname(const upb_msgdef *m) {
- return upb_def_fullname(UPB_UPCAST(m));
+ return upb_def_fullname(upb_msgdef_upcast(m));
}
bool upb_msgdef_setfullname(upb_msgdef *m, const char *fullname,
upb_status *s) {
- return upb_def_setfullname(UPB_UPCAST(m), fullname, s);
+ return upb_def_setfullname(upb_msgdef_upcast_mutable(m), fullname, s);
}
-// Helper: check that the field |f| is safe to add to msgdef |m|. Set an error
-// on status |s| and return false if not.
+/* Helper: check that the field |f| is safe to add to msgdef |m|. Set an error
+ * on status |s| and return false if not. */
static bool check_field_add(const upb_msgdef *m, const upb_fielddef *f,
upb_status *s) {
if (upb_fielddef_containingtype(f) != NULL) {
@@ -1426,40 +1365,42 @@ static void add_field(upb_msgdef *m, upb_fielddef *f, const void *ref_donor) {
bool upb_msgdef_addfield(upb_msgdef *m, upb_fielddef *f, const void *ref_donor,
upb_status *s) {
- // TODO: extensions need to have a separate namespace, because proto2 allows a
- // top-level extension (ie. one not in any package) to have the same name as a
- // field from the message.
- //
- // This also implies that there needs to be a separate lookup-by-name method
- // for extensions. It seems desirable for iteration to return both extensions
- // and non-extensions though.
- //
- // We also need to validate that the field number is in an extension range iff
- // it is an extension.
-
- // This method is idempotent. Check if |f| is already part of this msgdef and
- // return immediately if so.
+ /* TODO: extensions need to have a separate namespace, because proto2 allows a
+ * top-level extension (ie. one not in any package) to have the same name as a
+ * field from the message.
+ *
+ * This also implies that there needs to be a separate lookup-by-name method
+ * for extensions. It seems desirable for iteration to return both extensions
+ * and non-extensions though.
+ *
+ * We also need to validate that the field number is in an extension range iff
+ * it is an extension.
+ *
+ * This method is idempotent. Check if |f| is already part of this msgdef and
+ * return immediately if so. */
if (upb_fielddef_containingtype(f) == m) {
return true;
}
- // Check constraints for all fields before performing any action.
+ /* Check constraints for all fields before performing any action. */
if (!check_field_add(m, f, s)) {
return false;
} else if (upb_fielddef_containingoneof(f) != NULL) {
- // Fields in a oneof can only be added by adding the oneof to the msgdef.
+ /* Fields in a oneof can only be added by adding the oneof to the msgdef. */
upb_status_seterrmsg(s, "fielddef is part of a oneof");
return false;
}
- // Constraint checks ok, perform the action.
+ /* Constraint checks ok, perform the action. */
add_field(m, f, ref_donor);
return true;
}
bool upb_msgdef_addoneof(upb_msgdef *m, upb_oneofdef *o, const void *ref_donor,
upb_status *s) {
- // Check various conditions that would prevent this oneof from being added.
+ upb_oneof_iter it;
+
+ /* Check various conditions that would prevent this oneof from being added. */
if (upb_oneofdef_containingtype(o)) {
upb_status_seterrmsg(s, "oneofdef already belongs to a message");
return false;
@@ -1471,9 +1412,8 @@ bool upb_msgdef_addoneof(upb_msgdef *m, upb_oneofdef *o, const void *ref_donor,
return false;
}
- // Check that all of the oneof's fields do not conflict with names or numbers
- // of fields already in the message.
- upb_oneof_iter it;
+ /* Check that all of the oneof's fields do not conflict with names or numbers
+ * of fields already in the message. */
for (upb_oneof_begin(&it, o); !upb_oneof_done(&it); upb_oneof_next(&it)) {
const upb_fielddef *f = upb_oneof_iter_field(&it);
if (!check_field_add(m, f, s)) {
@@ -1481,15 +1421,15 @@ bool upb_msgdef_addoneof(upb_msgdef *m, upb_oneofdef *o, const void *ref_donor,
}
}
- // Everything checks out -- commit now.
+ /* Everything checks out -- commit now. */
- // Add oneof itself first.
+ /* Add oneof itself first. */
o->parent = m;
upb_strtable_insert(&m->ntoo, upb_oneofdef_name(o), upb_value_ptr(o));
upb_ref2(o, m);
upb_ref2(m, o);
- // Add each field of the oneof directly to the msgdef.
+ /* Add each field of the oneof directly to the msgdef. */
for (upb_oneof_begin(&it, o); !upb_oneof_done(&it); upb_oneof_next(&it)) {
upb_fielddef *f = upb_oneof_iter_field(&it);
add_field(m, f, NULL);
@@ -1581,10 +1521,10 @@ static void visitoneof(const upb_refcounted *r, upb_refcounted_visit *visit,
upb_oneof_iter i;
for (upb_oneof_begin(&i, o); !upb_oneof_done(&i); upb_oneof_next(&i)) {
const upb_fielddef *f = upb_oneof_iter_field(&i);
- visit(r, UPB_UPCAST2(f), closure);
+ visit(r, upb_fielddef_upcast2(f), closure);
}
if (o->parent) {
- visit(r, UPB_UPCAST2(o->parent), closure);
+ visit(r, upb_msgdef_upcast2(o->parent), closure);
}
}
@@ -1592,7 +1532,7 @@ static void freeoneof(upb_refcounted *r) {
upb_oneofdef *o = (upb_oneofdef*)r;
upb_strtable_uninit(&o->ntof);
upb_inttable_uninit(&o->itof);
- upb_def_uninit(UPB_UPCAST(o));
+ upb_def_uninit(upb_oneofdef_upcast_mutable(o));
free(o);
}
@@ -1601,7 +1541,9 @@ upb_oneofdef *upb_oneofdef_new(const void *owner) {
upb_oneofdef *o = malloc(sizeof(*o));
o->parent = NULL;
if (!o) return NULL;
- if (!upb_def_init(UPB_UPCAST(o), UPB_DEF_ONEOF, &vtbl, owner)) goto err2;
+ if (!upb_def_init(upb_oneofdef_upcast_mutable(o), UPB_DEF_ONEOF, &vtbl,
+ owner))
+ goto err2;
if (!upb_inttable_init(&o->itof, UPB_CTYPE_PTR)) goto err2;
if (!upb_strtable_init(&o->ntof, UPB_CTYPE_PTR)) goto err1;
return o;
@@ -1614,12 +1556,13 @@ err2:
}
upb_oneofdef *upb_oneofdef_dup(const upb_oneofdef *o, const void *owner) {
+ bool ok;
+ upb_oneof_iter i;
upb_oneofdef *newo = upb_oneofdef_new(owner);
if (!newo) return NULL;
- bool ok = upb_def_setfullname(UPB_UPCAST(newo),
- upb_def_fullname(UPB_UPCAST(o)), NULL);
+ ok = upb_def_setfullname(upb_oneofdef_upcast_mutable(newo),
+ upb_def_fullname(upb_oneofdef_upcast(o)), NULL);
UPB_ASSERT_VAR(ok, ok);
- upb_oneof_iter i;
for (upb_oneof_begin(&i, o); !upb_oneof_done(&i); upb_oneof_next(&i)) {
upb_fielddef *f = upb_fielddef_dup(upb_oneof_iter_field(&i), &f);
if (!f || !upb_oneofdef_addfield(newo, f, &f, NULL)) {
@@ -1630,29 +1573,8 @@ upb_oneofdef *upb_oneofdef_dup(const upb_oneofdef *o, const void *owner) {
return newo;
}
-bool upb_oneofdef_isfrozen(const upb_oneofdef *o) {
- return upb_def_isfrozen(UPB_UPCAST(o));
-}
-
-void upb_oneofdef_ref(const upb_oneofdef *o, const void *owner) {
- upb_def_ref(UPB_UPCAST(o), owner);
-}
-
-void upb_oneofdef_unref(const upb_oneofdef *o, const void *owner) {
- upb_def_unref(UPB_UPCAST(o), owner);
-}
-
-void upb_oneofdef_donateref(const upb_oneofdef *o, const void *from,
- const void *to) {
- upb_def_donateref(UPB_UPCAST(o), from, to);
-}
-
-void upb_oneofdef_checkref(const upb_oneofdef *o, const void *owner) {
- upb_def_checkref(UPB_UPCAST(o), owner);
-}
-
const char *upb_oneofdef_name(const upb_oneofdef *o) {
- return upb_def_fullname(UPB_UPCAST(o));
+ return upb_def_fullname(upb_oneofdef_upcast(o));
}
bool upb_oneofdef_setname(upb_oneofdef *o, const char *fullname,
@@ -1661,7 +1583,7 @@ bool upb_oneofdef_setname(upb_oneofdef *o, const char *fullname,
upb_status_seterrmsg(s, "oneof already added to a message");
return false;
}
- return upb_def_setfullname(UPB_UPCAST(o), fullname, s);
+ return upb_def_setfullname(upb_oneofdef_upcast_mutable(o), fullname, s);
}
const upb_msgdef *upb_oneofdef_containingtype(const upb_oneofdef *o) {
@@ -1678,20 +1600,20 @@ bool upb_oneofdef_addfield(upb_oneofdef *o, upb_fielddef *f,
assert(!upb_oneofdef_isfrozen(o));
assert(!o->parent || !upb_msgdef_isfrozen(o->parent));
- // This method is idempotent. Check if |f| is already part of this oneofdef
- // and return immediately if so.
+ /* This method is idempotent. Check if |f| is already part of this oneofdef
+ * and return immediately if so. */
if (upb_fielddef_containingoneof(f) == o) {
return true;
}
- // The field must have an OPTIONAL label.
+ /* The field must have an OPTIONAL label. */
if (upb_fielddef_label(f) != UPB_LABEL_OPTIONAL) {
upb_status_seterrmsg(s, "fields in oneof must have OPTIONAL label");
return false;
}
- // Check that no field with this name or number exists already in the oneof.
- // Also check that the field is not already part of a oneof.
+ /* Check that no field with this name or number exists already in the oneof.
+ * Also check that the field is not already part of a oneof. */
if (upb_fielddef_name(f) == NULL || upb_fielddef_number(f) == 0) {
upb_status_seterrmsg(s, "field name or number were not set");
return false;
@@ -1704,21 +1626,21 @@ bool upb_oneofdef_addfield(upb_oneofdef *o, upb_fielddef *f,
return false;
}
- // We allow adding a field to the oneof either if the field is not part of a
- // msgdef, or if it is and we are also part of the same msgdef.
+ /* We allow adding a field to the oneof either if the field is not part of a
+ * msgdef, or if it is and we are also part of the same msgdef. */
if (o->parent == NULL) {
- // If we're not in a msgdef, the field cannot be either. Otherwise we would
- // need to magically add this oneof to a msgdef to remain consistent, which
- // is surprising behavior.
+ /* If we're not in a msgdef, the field cannot be either. Otherwise we would
+ * need to magically add this oneof to a msgdef to remain consistent, which
+ * is surprising behavior. */
if (upb_fielddef_containingtype(f) != NULL) {
upb_status_seterrmsg(s, "fielddef already belongs to a message, but "
"oneof does not");
return false;
}
} else {
- // If we're in a msgdef, the user can add fields that either aren't in any
- // msgdef (in which case they're added to our msgdef) or already a part of
- // our msgdef.
+ /* If we're in a msgdef, the user can add fields that either aren't in any
+ * msgdef (in which case they're added to our msgdef) or already a part of
+ * our msgdef. */
if (upb_fielddef_containingtype(f) != NULL &&
upb_fielddef_containingtype(f) != o->parent) {
upb_status_seterrmsg(s, "fielddef belongs to a different message "
@@ -1727,8 +1649,8 @@ bool upb_oneofdef_addfield(upb_oneofdef *o, upb_fielddef *f,
}
}
- // Commit phase. First add the field to our parent msgdef, if any, because
- // that may fail; then add the field to our own tables.
+ /* Commit phase. First add the field to our parent msgdef, if any, because
+ * that may fail; then add the field to our own tables. */
if (o->parent != NULL && upb_fielddef_containingtype(f) == NULL) {
if (!upb_msgdef_addfield((upb_msgdef*)o->parent, f, NULL, s)) {
@@ -1801,18 +1723,17 @@ static void *seeded_alloc(void *ud, void *ptr, size_t oldsize, size_t size);
/* Default allocator **********************************************************/
-// Just use realloc, keeping all allocated blocks in a linked list to destroy at
-// the end.
+/* Just use realloc, keeping all allocated blocks in a linked list to destroy at
+ * the end. */
typedef struct mem_block {
- // List is doubly-linked, because in cases where realloc() moves an existing
- // block, we need to be able to remove the old pointer from the list
- // efficiently.
+ /* List is doubly-linked, because in cases where realloc() moves an existing
+ * block, we need to be able to remove the old pointer from the list
+ * efficiently. */
struct mem_block *prev, *next;
#ifndef NDEBUG
- size_t size; // Doesn't include mem_block structure.
+ size_t size; /* Doesn't include mem_block structure. */
#endif
- char data[];
} mem_block;
typedef struct {
@@ -1820,10 +1741,12 @@ typedef struct {
} default_alloc_ud;
static void *default_alloc(void *_ud, void *ptr, size_t oldsize, size_t size) {
- UPB_UNUSED(oldsize);
default_alloc_ud *ud = _ud;
+ mem_block *from, *block;
+ void *ret;
+ UPB_UNUSED(oldsize);
- mem_block *from = ptr ? (void*)((char*)ptr - sizeof(mem_block)) : NULL;
+ from = ptr ? (void*)((char*)ptr - sizeof(mem_block)) : NULL;
#ifndef NDEBUG
if (from) {
@@ -1831,8 +1754,11 @@ static void *default_alloc(void *_ud, void *ptr, size_t oldsize, size_t size) {
}
#endif
- mem_block *block = realloc(from, size + sizeof(mem_block));
+ /* TODO(haberman): we probably need to provide even better alignment here,
+ * like 16-byte alignment of the returned data pointer. */
+ block = realloc(from, size + sizeof(mem_block));
if (!block) return NULL;
+ ret = (char*)block + sizeof(*block);
#ifndef NDEBUG
block->size = size;
@@ -1840,20 +1766,20 @@ static void *default_alloc(void *_ud, void *ptr, size_t oldsize, size_t size) {
if (from) {
if (block != from) {
- // The block was moved, so pointers in next and prev blocks must be
- // updated to its new location.
+ /* The block was moved, so pointers in next and prev blocks must be
+ * updated to its new location. */
if (block->next) block->next->prev = block;
if (block->prev) block->prev->next = block;
}
} else {
- // Insert at head of linked list.
+ /* Insert at head of linked list. */
block->prev = NULL;
block->next = ud->head;
if (block->next) block->next->prev = block;
ud->head = block;
}
- return &block->data;
+ return ret;
}
static void default_alloc_cleanup(void *_ud) {
@@ -1886,14 +1812,14 @@ static bool write_err_to(void *ud, const upb_status *status) {
/* upb_env ********************************************************************/
void upb_env_init(upb_env *e) {
+ default_alloc_ud *ud = (default_alloc_ud*)&e->default_alloc_ud;
e->ok_ = true;
e->bytes_allocated = 0;
e->cleanup_head = NULL;
- default_alloc_ud *ud = (default_alloc_ud*)&e->default_alloc_ud;
ud->head = NULL;
- // Set default functions.
+ /* Set default functions. */
upb_env_setallocfunc(e, default_alloc, ud);
upb_env_seterrorfunc(e, default_err, NULL);
}
@@ -1906,8 +1832,8 @@ void upb_env_uninit(upb_env *e) {
ent = ent->next;
}
- // Must do this after running cleanup functions, because this will delete
- // the memory we store our cleanup entries in!
+ /* Must do this after running cleanup functions, because this will delete
+ the memory we store our cleanup entries in! */
if (e->alloc == default_alloc) {
default_alloc_cleanup(e->alloc_ud);
}
@@ -1954,8 +1880,8 @@ bool upb_env_addcleanup(upb_env *e, upb_cleanup_func *func, void *ud) {
void *upb_env_malloc(upb_env *e, size_t size) {
e->bytes_allocated += size;
if (e->alloc == seeded_alloc) {
- // This is equivalent to the next branch, but allows inlining for a
- // measurable perf benefit.
+ /* This is equivalent to the next branch, but allows inlining for a
+ * measurable perf benefit. */
return seeded_alloc(e->alloc_ud, NULL, 0, size);
} else {
return e->alloc(e->alloc_ud, NULL, 0, size);
@@ -1963,12 +1889,13 @@ void *upb_env_malloc(upb_env *e, size_t size) {
}
void *upb_env_realloc(upb_env *e, void *ptr, size_t oldsize, size_t size) {
+ char *ret;
assert(oldsize <= size);
- char *ret = e->alloc(e->alloc_ud, ptr, oldsize, size);
+ ret = e->alloc(e->alloc_ud, ptr, oldsize, size);
#ifndef NDEBUG
- // Overwrite non-preserved memory to ensure callers are passing the oldsize
- // that they truly require.
+ /* Overwrite non-preserved memory to ensure callers are passing the oldsize
+ * that they truly require. */
memset(ret + oldsize, 0xff, size - oldsize);
#endif
@@ -1982,7 +1909,7 @@ size_t upb_env_bytesallocated(const upb_env *e) {
/* upb_seededalloc ************************************************************/
-// Be conservative and choose 16 in case anyone is using SSE.
+/* Be conservative and choose 16 in case anyone is using SSE. */
static const size_t maxalign = 16;
static size_t align_up(size_t size) {
@@ -1991,24 +1918,24 @@ static size_t align_up(size_t size) {
UPB_FORCEINLINE static void *seeded_alloc(void *ud, void *ptr, size_t oldsize,
size_t size) {
+ upb_seededalloc *a = ud;
UPB_UNUSED(ptr);
- upb_seededalloc *a = ud;
size = align_up(size);
assert(a->mem_limit >= a->mem_ptr);
if (oldsize == 0 && size <= (size_t)(a->mem_limit - a->mem_ptr)) {
- // Fast path: we can satisfy from the initial allocation.
+ /* Fast path: we can satisfy from the initial allocation. */
void *ret = a->mem_ptr;
a->mem_ptr += size;
return ret;
} else {
- // Slow path: fallback to other allocator.
- a->need_cleanup = true;
- // Is `ptr` part of the user-provided initial block? Don't pass it to the
- // default allocator if so; otherwise, it may try to realloc() the block.
char *chptr = ptr;
+ /* Slow path: fallback to other allocator. */
+ a->need_cleanup = true;
+ /* Is `ptr` part of the user-provided initial block? Don't pass it to the
+ * default allocator if so; otherwise, it may try to realloc() the block. */
if (chptr >= a->mem_base && chptr < a->mem_limit) {
return a->alloc(a->alloc_ud, NULL, 0, size);
} else {
@@ -2018,13 +1945,13 @@ UPB_FORCEINLINE static void *seeded_alloc(void *ud, void *ptr, size_t oldsize,
}
void upb_seededalloc_init(upb_seededalloc *a, void *mem, size_t len) {
+ default_alloc_ud *ud = (default_alloc_ud*)&a->default_alloc_ud;
a->mem_base = mem;
a->mem_ptr = mem;
a->mem_limit = (char*)mem + len;
a->need_cleanup = false;
a->returned_allocfunc = false;
- default_alloc_ud *ud = (default_alloc_ud*)&a->default_alloc_ud;
ud->head = NULL;
upb_seededalloc_setfallbackalloc(a, default_alloc, ud);
@@ -2063,8 +1990,9 @@ upb_alloc_func *upb_seededalloc_getallocfunc(upb_seededalloc *a) {
#include <string.h>
-// Defined for the sole purpose of having a unique pointer value for
-// UPB_NO_CLOSURE.
+
+/* Defined for the sole purpose of having a unique pointer value for
+ * UPB_NO_CLOSURE. */
char _upb_noclosure;
static void freehandlers(upb_refcounted *r) {
@@ -2093,42 +2021,45 @@ static void visithandlers(const upb_refcounted *r, upb_refcounted_visit *visit,
!upb_msg_field_done(&i);
upb_msg_field_next(&i)) {
upb_fielddef *f = upb_msg_iter_field(&i);
+ const upb_handlers *sub;
if (!upb_fielddef_issubmsg(f)) continue;
- const upb_handlers *sub = upb_handlers_getsubhandlers(h, f);
- if (sub) visit(r, UPB_UPCAST(sub), closure);
+ sub = upb_handlers_getsubhandlers(h, f);
+ if (sub) visit(r, upb_handlers_upcast(sub), closure);
}
}
static const struct upb_refcounted_vtbl vtbl = {visithandlers, freehandlers};
typedef struct {
- upb_inttable tab; // maps upb_msgdef* -> upb_handlers*.
+ upb_inttable tab; /* maps upb_msgdef* -> upb_handlers*. */
upb_handlers_callback *callback;
const void *closure;
} dfs_state;
-// TODO(haberman): discard upb_handlers* objects that do not actually have any
-// handlers set and cannot reach any upb_handlers* object that does. This is
-// slightly tricky to do correctly.
+/* TODO(haberman): discard upb_handlers* objects that do not actually have any
+ * handlers set and cannot reach any upb_handlers* object that does. This is
+ * slightly tricky to do correctly. */
static upb_handlers *newformsg(const upb_msgdef *m, const void *owner,
dfs_state *s) {
+ upb_msg_field_iter i;
upb_handlers *h = upb_handlers_new(m, owner);
if (!h) return NULL;
if (!upb_inttable_insertptr(&s->tab, m, upb_value_ptr(h))) goto oom;
s->callback(s->closure, h);
- // For each submessage field, get or create a handlers object and set it as
- // the subhandlers.
- upb_msg_field_iter i;
+ /* For each submessage field, get or create a handlers object and set it as
+ * the subhandlers. */
for(upb_msg_field_begin(&i, m);
!upb_msg_field_done(&i);
upb_msg_field_next(&i)) {
upb_fielddef *f = upb_msg_iter_field(&i);
+ const upb_msgdef *subdef;
+ upb_value subm_ent;
+
if (!upb_fielddef_issubmsg(f)) continue;
- const upb_msgdef *subdef = upb_downcast_msgdef(upb_fielddef_subdef(f));
- upb_value subm_ent;
+ subdef = upb_downcast_msgdef(upb_fielddef_subdef(f));
if (upb_inttable_lookupptr(&s->tab, subdef, &subm_ent)) {
upb_handlers_setsubhandlers(h, f, upb_value_getptr(subm_ent));
} else {
@@ -2145,11 +2076,11 @@ oom:
return NULL;
}
-// Given a selector for a STARTSUBMSG handler, resolves to a pointer to the
-// subhandlers for this submessage field.
+/* Given a selector for a STARTSUBMSG handler, resolves to a pointer to the
+ * subhandlers for this submessage field. */
#define SUBH(h, selector) (h->sub[selector])
-// The selector for a submessage field is the field index.
+/* The selector for a submessage field is the field index. */
#define SUBH_F(h, f) SUBH(h, f->index_)
static int32_t trygetsel(upb_handlers *h, const upb_fielddef *f,
@@ -2187,6 +2118,10 @@ static const void **returntype(upb_handlers *h, const upb_fielddef *f,
static bool doset(upb_handlers *h, int32_t sel, const upb_fielddef *f,
upb_handlertype_t type, upb_func *func,
upb_handlerattr *attr) {
+ upb_handlerattr set_attr = UPB_HANDLERATTR_INITIALIZER;
+ const void *closure_type;
+ const void **context_closure_type;
+
assert(!upb_handlers_isfrozen(h));
if (sel < 0) {
@@ -2201,15 +2136,13 @@ static bool doset(upb_handlers *h, int32_t sel, const upb_fielddef *f,
return false;
}
- upb_handlerattr set_attr = UPB_HANDLERATTR_INITIALIZER;
if (attr) {
set_attr = *attr;
}
- // Check that the given closure type matches the closure type that has been
- // established for this context (if any).
- const void *closure_type = upb_handlerattr_closuretype(&set_attr);
- const void **context_closure_type;
+ /* Check that the given closure type matches the closure type that has been
+ * established for this context (if any). */
+ closure_type = upb_handlerattr_closuretype(&set_attr);
if (type == UPB_HANDLER_STRING) {
context_closure_type = returntype(h, f, UPB_HANDLER_STARTSTR);
@@ -2223,7 +2156,7 @@ static bool doset(upb_handlers *h, int32_t sel, const upb_fielddef *f,
if (closure_type && *context_closure_type &&
closure_type != *context_closure_type) {
- // TODO(haberman): better message for debugging.
+ /* TODO(haberman): better message for debugging. */
if (f) {
upb_status_seterrf(&h->status_,
"closure type does not match for field %s",
@@ -2238,8 +2171,8 @@ static bool doset(upb_handlers *h, int32_t sel, const upb_fielddef *f,
if (closure_type)
*context_closure_type = closure_type;
- // If this is a STARTSEQ or STARTSTR handler, check that the returned pointer
- // matches any pre-existing expectations about what type is expected.
+ /* If this is a STARTSEQ or STARTSTR handler, check that the returned pointer
+ * matches any pre-existing expectations about what type is expected. */
if (type == UPB_HANDLER_STARTSEQ || type == UPB_HANDLER_STARTSTR) {
const void *return_type = upb_handlerattr_returnclosuretype(&set_attr);
const void *table_return_type =
@@ -2258,17 +2191,20 @@ static bool doset(upb_handlers *h, int32_t sel, const upb_fielddef *f,
return true;
}
-// Returns the effective closure type for this handler (which will propagate
-// from outer frames if this frame has no START* handler). Not implemented for
-// UPB_HANDLER_STRING at the moment since this is not needed. Returns NULL is
-// the effective closure type is unspecified (either no handler was registered
-// to specify it or the handler that was registered did not specify the closure
-// type).
+/* Returns the effective closure type for this handler (which will propagate
+ * from outer frames if this frame has no START* handler). Not implemented for
+ * UPB_HANDLER_STRING at the moment since this is not needed. Returns NULL is
+ * the effective closure type is unspecified (either no handler was registered
+ * to specify it or the handler that was registered did not specify the closure
+ * type). */
const void *effective_closure_type(upb_handlers *h, const upb_fielddef *f,
upb_handlertype_t type) {
- assert(type != UPB_HANDLER_STRING);
- const void *ret = h->top_closure_type;
+ const void *ret;
upb_selector_t sel;
+
+ assert(type != UPB_HANDLER_STRING);
+ ret = h->top_closure_type;
+
if (upb_fielddef_isseq(f) &&
type != UPB_HANDLER_STARTSEQ &&
type != UPB_HANDLER_ENDSEQ &&
@@ -2281,26 +2217,30 @@ const void *effective_closure_type(upb_handlers *h, const upb_fielddef *f,
ret = upb_handlerattr_returnclosuretype(&h->table[sel].attr);
}
- // The effective type of the submessage; not used yet.
- // if (type == SUBMESSAGE &&
- // h->table[sel = handlers_getsel(h, f, UPB_HANDLER_STARTSUBMSG)].func) {
- // ret = upb_handlerattr_returnclosuretype(&h->table[sel].attr);
- // }
+ /* The effective type of the submessage; not used yet.
+ * if (type == SUBMESSAGE &&
+ * h->table[sel = handlers_getsel(h, f, UPB_HANDLER_STARTSUBMSG)].func) {
+ * ret = upb_handlerattr_returnclosuretype(&h->table[sel].attr);
+ * } */
return ret;
}
-// Checks whether the START* handler specified by f & type is missing even
-// though it is required to convert the established type of an outer frame
-// ("closure_type") into the established type of an inner frame (represented in
-// the return closure type of this handler's attr.
+/* Checks whether the START* handler specified by f & type is missing even
+ * though it is required to convert the established type of an outer frame
+ * ("closure_type") into the established type of an inner frame (represented in
+ * the return closure type of this handler's attr. */
bool checkstart(upb_handlers *h, const upb_fielddef *f, upb_handlertype_t type,
upb_status *status) {
+ const void *closure_type;
+ const upb_handlerattr *attr;
+ const void *return_closure_type;
+
upb_selector_t sel = handlers_getsel(h, f, type);
if (h->table[sel].func) return true;
- const void *closure_type = effective_closure_type(h, f, type);
- const upb_handlerattr *attr = &h->table[sel].attr;
- const void *return_closure_type = upb_handlerattr_returnclosuretype(attr);
+ closure_type = effective_closure_type(h, f, type);
+ attr = &h->table[sel].attr;
+ return_closure_type = upb_handlerattr_returnclosuretype(attr);
if (closure_type && return_closure_type &&
closure_type != return_closure_type) {
upb_status_seterrf(status,
@@ -2313,32 +2253,14 @@ bool checkstart(upb_handlers *h, const upb_fielddef *f, upb_handlertype_t type,
/* Public interface ***********************************************************/
-bool upb_handlers_isfrozen(const upb_handlers *h) {
- return upb_refcounted_isfrozen(UPB_UPCAST(h));
-}
-
-void upb_handlers_ref(const upb_handlers *h, const void *owner) {
- upb_refcounted_ref(UPB_UPCAST(h), owner);
-}
-
-void upb_handlers_unref(const upb_handlers *h, const void *owner) {
- upb_refcounted_unref(UPB_UPCAST(h), owner);
-}
-
-void upb_handlers_donateref(
- const upb_handlers *h, const void *from, const void *to) {
- upb_refcounted_donateref(UPB_UPCAST(h), from, to);
-}
-
-void upb_handlers_checkref(const upb_handlers *h, const void *owner) {
- upb_refcounted_checkref(UPB_UPCAST(h), owner);
-}
-
upb_handlers *upb_handlers_new(const upb_msgdef *md, const void *owner) {
+ int extra;
+ upb_handlers *h;
+
assert(upb_msgdef_isfrozen(md));
- int extra = sizeof(upb_handlers_tabent) * (md->selector_count - 1);
- upb_handlers *h = calloc(sizeof(*h) + extra, 1);
+ extra = sizeof(upb_handlers_tabent) * (md->selector_count - 1);
+ h = calloc(sizeof(*h) + extra, 1);
if (!h) return NULL;
h->msg = md;
@@ -2346,14 +2268,15 @@ upb_handlers *upb_handlers_new(const upb_msgdef *md, const void *owner) {
upb_status_clear(&h->status_);
h->sub = calloc(md->submsg_field_count, sizeof(*h->sub));
if (!h->sub) goto oom;
- if (!upb_refcounted_init(UPB_UPCAST(h), &vtbl, owner)) goto oom;
+ if (!upb_refcounted_init(upb_handlers_upcast_mutable(h), &vtbl, owner))
+ goto oom;
if (!upb_inttable_init(&h->cleanup_, UPB_CTYPE_FPTR)) goto oom;
- // calloc() above initialized all handlers to NULL.
+ /* calloc() above initialized all handlers to NULL. */
return h;
oom:
- freehandlers(UPB_UPCAST(h));
+ freehandlers(upb_handlers_upcast_mutable(h));
return NULL;
}
@@ -2362,17 +2285,21 @@ const upb_handlers *upb_handlers_newfrozen(const upb_msgdef *m,
upb_handlers_callback *callback,
const void *closure) {
dfs_state state;
+ upb_handlers *ret;
+ bool ok;
+ upb_refcounted *r;
+
state.callback = callback;
state.closure = closure;
if (!upb_inttable_init(&state.tab, UPB_CTYPE_PTR)) return NULL;
- upb_handlers *ret = newformsg(m, owner, &state);
+ ret = newformsg(m, owner, &state);
upb_inttable_uninit(&state.tab);
if (!ret) return NULL;
- upb_refcounted *r = UPB_UPCAST(ret);
- bool ok = upb_refcounted_freeze(&r, 1, NULL, UPB_MAX_HANDLER_DEPTH);
+ r = upb_handlers_upcast_mutable(ret);
+ ok = upb_refcounted_freeze(&r, 1, NULL, UPB_MAX_HANDLER_DEPTH);
UPB_ASSERT_VAR(ok, ok);
return ret;
@@ -2395,20 +2322,20 @@ void upb_handlers_clearerr(upb_handlers *h) {
return doset(h, sel, f, handlertype, (upb_func*)func, attr); \
}
-SETTER(int32, upb_int32_handlerfunc*, UPB_HANDLER_INT32);
-SETTER(int64, upb_int64_handlerfunc*, UPB_HANDLER_INT64);
-SETTER(uint32, upb_uint32_handlerfunc*, UPB_HANDLER_UINT32);
-SETTER(uint64, upb_uint64_handlerfunc*, UPB_HANDLER_UINT64);
-SETTER(float, upb_float_handlerfunc*, UPB_HANDLER_FLOAT);
-SETTER(double, upb_double_handlerfunc*, UPB_HANDLER_DOUBLE);
-SETTER(bool, upb_bool_handlerfunc*, UPB_HANDLER_BOOL);
-SETTER(startstr, upb_startstr_handlerfunc*, UPB_HANDLER_STARTSTR);
-SETTER(string, upb_string_handlerfunc*, UPB_HANDLER_STRING);
-SETTER(endstr, upb_endfield_handlerfunc*, UPB_HANDLER_ENDSTR);
-SETTER(startseq, upb_startfield_handlerfunc*, UPB_HANDLER_STARTSEQ);
-SETTER(startsubmsg, upb_startfield_handlerfunc*, UPB_HANDLER_STARTSUBMSG);
-SETTER(endsubmsg, upb_endfield_handlerfunc*, UPB_HANDLER_ENDSUBMSG);
-SETTER(endseq, upb_endfield_handlerfunc*, UPB_HANDLER_ENDSEQ);
+SETTER(int32, upb_int32_handlerfunc*, UPB_HANDLER_INT32)
+SETTER(int64, upb_int64_handlerfunc*, UPB_HANDLER_INT64)
+SETTER(uint32, upb_uint32_handlerfunc*, UPB_HANDLER_UINT32)
+SETTER(uint64, upb_uint64_handlerfunc*, UPB_HANDLER_UINT64)
+SETTER(float, upb_float_handlerfunc*, UPB_HANDLER_FLOAT)
+SETTER(double, upb_double_handlerfunc*, UPB_HANDLER_DOUBLE)
+SETTER(bool, upb_bool_handlerfunc*, UPB_HANDLER_BOOL)
+SETTER(startstr, upb_startstr_handlerfunc*, UPB_HANDLER_STARTSTR)
+SETTER(string, upb_string_handlerfunc*, UPB_HANDLER_STRING)
+SETTER(endstr, upb_endfield_handlerfunc*, UPB_HANDLER_ENDSTR)
+SETTER(startseq, upb_startfield_handlerfunc*, UPB_HANDLER_STARTSEQ)
+SETTER(startsubmsg, upb_startfield_handlerfunc*, UPB_HANDLER_STARTSUBMSG)
+SETTER(endsubmsg, upb_endfield_handlerfunc*, UPB_HANDLER_ENDSUBMSG)
+SETTER(endseq, upb_endfield_handlerfunc*, UPB_HANDLER_ENDSEQ)
#undef SETTER
@@ -2430,8 +2357,8 @@ bool upb_handlers_setsubhandlers(upb_handlers *h, const upb_fielddef *f,
assert(sub);
assert(!upb_handlers_isfrozen(h));
assert(upb_fielddef_issubmsg(f));
- if (SUBH_F(h, f)) return false; // Can't reset.
- if (UPB_UPCAST(upb_handlers_msgdef(sub)) != upb_fielddef_subdef(f)) {
+ if (SUBH_F(h, f)) return false; /* Can't reset. */
+ if (upb_msgdef_upcast(upb_handlers_msgdef(sub)) != upb_fielddef_subdef(f)) {
return false;
}
SUBH_F(h, f) = sub;
@@ -2455,17 +2382,18 @@ bool upb_handlers_getattr(const upb_handlers *h, upb_selector_t sel,
const upb_handlers *upb_handlers_getsubhandlers_sel(const upb_handlers *h,
upb_selector_t sel) {
- // STARTSUBMSG selector in sel is the field's selector base.
+ /* STARTSUBMSG selector in sel is the field's selector base. */
return SUBH(h, sel - UPB_STATIC_SELECTOR_COUNT);
}
const upb_msgdef *upb_handlers_msgdef(const upb_handlers *h) { return h->msg; }
bool upb_handlers_addcleanup(upb_handlers *h, void *p, upb_handlerfree *func) {
+ bool ok;
if (upb_inttable_lookupptr(&h->cleanup_, p, NULL)) {
return false;
}
- bool ok = upb_inttable_insertptr(&h->cleanup_, p, upb_value_fptr(func));
+ ok = upb_inttable_insertptr(&h->cleanup_, p, upb_value_fptr(func));
UPB_ASSERT_VAR(ok, ok);
return true;
}
@@ -2474,8 +2402,10 @@ bool upb_handlers_addcleanup(upb_handlers *h, void *p, upb_handlerfree *func) {
/* "Static" methods ***********************************************************/
bool upb_handlers_freeze(upb_handlers *const*handlers, int n, upb_status *s) {
- // TODO: verify we have a transitive closure.
- for (int i = 0; i < n; i++) {
+ /* TODO: verify we have a transitive closure. */
+ int i;
+ for (i = 0; i < n; i++) {
+ upb_msg_field_iter j;
upb_handlers *h = handlers[i];
if (!upb_ok(&h->status_)) {
@@ -2485,9 +2415,8 @@ bool upb_handlers_freeze(upb_handlers *const*handlers, int n, upb_status *s) {
return false;
}
- // Check that there are no closure mismatches due to missing Start* handlers
- // or subhandlers with different type-level types.
- upb_msg_field_iter j;
+ /* Check that there are no closure mismatches due to missing Start* handlers
+ * or subhandlers with different type-level types. */
for(upb_msg_field_begin(&j, h->msg);
!upb_msg_field_done(&j);
upb_msg_field_next(&j)) {
@@ -2521,29 +2450,29 @@ bool upb_handlers_freeze(upb_handlers *const*handlers, int n, upb_status *s) {
}
if (hashandler && !upb_handlers_getsubhandlers(h, f)) {
- // For now we add an empty subhandlers in this case. It makes the
- // decoder code generator simpler, because it only has to handle two
- // cases (submessage has handlers or not) as opposed to three
- // (submessage has handlers in enclosing message but no subhandlers).
- //
- // This makes parsing less efficient in the case that we want to
- // notice a submessage but skip its contents (like if we're testing
- // for submessage presence or counting the number of repeated
- // submessages). In this case we will end up parsing the submessage
- // field by field and throwing away the results for each, instead of
- // skipping the whole delimited thing at once. If this is an issue we
- // can revisit it, but do remember that this only arises when you have
- // handlers (startseq/startsubmsg/endsubmsg/endseq) set for the
- // submessage but no subhandlers. The uses cases for this are
- // limited.
+ /* For now we add an empty subhandlers in this case. It makes the
+ * decoder code generator simpler, because it only has to handle two
+ * cases (submessage has handlers or not) as opposed to three
+ * (submessage has handlers in enclosing message but no subhandlers).
+ *
+ * This makes parsing less efficient in the case that we want to
+ * notice a submessage but skip its contents (like if we're testing
+ * for submessage presence or counting the number of repeated
+ * submessages). In this case we will end up parsing the submessage
+ * field by field and throwing away the results for each, instead of
+ * skipping the whole delimited thing at once. If this is an issue we
+ * can revisit it, but do remember that this only arises when you have
+ * handlers (startseq/startsubmsg/endsubmsg/endseq) set for the
+ * submessage but no subhandlers. The uses cases for this are
+ * limited. */
upb_handlers *sub = upb_handlers_new(upb_fielddef_msgsubdef(f), &sub);
upb_handlers_setsubhandlers(h, f, sub);
upb_handlers_unref(sub, &sub);
}
- // TODO(haberman): check type of submessage.
- // This is slightly tricky; also consider whether we should check that
- // they match at setsubhandlers time.
+ /* TODO(haberman): check type of submessage.
+ * This is slightly tricky; also consider whether we should check that
+ * they match at setsubhandlers time. */
}
}
}
@@ -2566,7 +2495,7 @@ upb_handlertype_t upb_handlers_getprimitivehandlertype(const upb_fielddef *f) {
case UPB_TYPE_FLOAT: return UPB_HANDLER_FLOAT;
case UPB_TYPE_DOUBLE: return UPB_HANDLER_DOUBLE;
case UPB_TYPE_BOOL: return UPB_HANDLER_BOOL;
- default: assert(false); return -1; // Invalid input.
+ default: assert(false); return -1; /* Invalid input. */
}
}
@@ -2618,10 +2547,10 @@ bool upb_handlers_getselector(const upb_fielddef *f, upb_handlertype_t type,
break;
case UPB_HANDLER_STARTSUBMSG:
if (!upb_fielddef_issubmsg(f)) return false;
- // Selectors for STARTSUBMSG are at the beginning of the table so that the
- // selector can also be used as an index into the "sub" array of
- // subhandlers. The indexes for the two into these two tables are the
- // same, except that in the handler table the static selectors come first.
+ /* Selectors for STARTSUBMSG are at the beginning of the table so that the
+ * selector can also be used as an index into the "sub" array of
+ * subhandlers. The indexes for the two into these two tables are the
+ * same, except that in the handler table the static selectors come first. */
*s = f->index_ + UPB_STATIC_SELECTOR_COUNT;
break;
case UPB_HANDLER_ENDSUBMSG:
@@ -2639,13 +2568,13 @@ uint32_t upb_handlers_selectorbaseoffset(const upb_fielddef *f) {
uint32_t upb_handlers_selectorcount(const upb_fielddef *f) {
uint32_t ret = 1;
- if (upb_fielddef_isseq(f)) ret += 2; // STARTSEQ/ENDSEQ
- if (upb_fielddef_isstring(f)) ret += 2; // [STRING]/STARTSTR/ENDSTR
+ if (upb_fielddef_isseq(f)) ret += 2; /* STARTSEQ/ENDSEQ */
+ if (upb_fielddef_isstring(f)) ret += 2; /* [STRING]/STARTSTR/ENDSTR */
if (upb_fielddef_issubmsg(f)) {
- // ENDSUBMSG (STARTSUBMSG is at table beginning)
+ /* ENDSUBMSG (STARTSUBMSG is at table beginning) */
ret += 0;
if (upb_fielddef_lazy(f)) {
- // STARTSTR/ENDSTR/STRING (for lazy)
+ /* STARTSTR/ENDSTR/STRING (for lazy) */
ret += 3;
}
}
@@ -2709,7 +2638,7 @@ void upb_byteshandler_init(upb_byteshandler* h) {
memset(h, 0, sizeof(*h));
}
-// For when we support handlerfree callbacks.
+/* For when we support handlerfree callbacks. */
void upb_byteshandler_uninit(upb_byteshandler* h) {
UPB_UNUSED(h);
}
@@ -2765,17 +2694,17 @@ const void *UPB_UNTRACKED_REF = &untracked_val;
/* arch-specific atomic primitives *******************************************/
-#ifdef UPB_THREAD_UNSAFE //////////////////////////////////////////////////////
+#ifdef UPB_THREAD_UNSAFE /*---------------------------------------------------*/
static void atomic_inc(uint32_t *a) { (*a)++; }
static bool atomic_dec(uint32_t *a) { return --(*a) == 0; }
-#elif defined(__GNUC__) || defined(__clang__) //////////////////////////////////
+#elif defined(__GNUC__) || defined(__clang__) /*------------------------------*/
static void atomic_inc(uint32_t *a) { __sync_fetch_and_add(a, 1); }
static bool atomic_dec(uint32_t *a) { return __sync_sub_and_fetch(a, 1) == 0; }
-#elif defined(WIN32) ///////////////////////////////////////////////////////////
+#elif defined(WIN32) /*-------------------------------------------------------*/
#include <Windows.h>
@@ -2789,13 +2718,13 @@ static bool atomic_dec(upb_atomic_t *a) {
Implement them or compile with UPB_THREAD_UNSAFE.
#endif
-// All static objects point to this refcount.
-// It is special-cased in ref/unref below.
+/* All static objects point to this refcount.
+ * It is special-cased in ref/unref below. */
uint32_t static_refcount = -1;
-// We can avoid atomic ops for statically-declared objects.
-// This is a minor optimization but nice since we can avoid degrading under
-// contention in this case.
+/* We can avoid atomic ops for statically-declared objects.
+ * This is a minor optimization but nice since we can avoid degrading under
+ * contention in this case. */
static void refgroup(uint32_t *group) {
if (group != &static_refcount)
@@ -2822,21 +2751,21 @@ static void upb_unlock() {}
#else
-// User must define functions that lock/unlock a global mutex and link this
-// file against them.
+/* User must define functions that lock/unlock a global mutex and link this
+ * file against them. */
void upb_lock();
void upb_unlock();
#endif
-// UPB_DEBUG_REFS mode counts on being able to malloc() memory in some
-// code-paths that can normally never fail, like upb_refcounted_ref(). Since
-// we have no way to propagage out-of-memory errors back to the user, and since
-// these errors can only occur in UPB_DEBUG_REFS mode, we immediately fail.
+/* UPB_DEBUG_REFS mode counts on being able to malloc() memory in some
+ * code-paths that can normally never fail, like upb_refcounted_ref(). Since
+ * we have no way to propagage out-of-memory errors back to the user, and since
+ * these errors can only occur in UPB_DEBUG_REFS mode, we immediately fail. */
#define CHECK_OOM(predicate) if (!(predicate)) { assert(predicate); exit(1); }
typedef struct {
- int count; // How many refs there are (duplicates only allowed for ref2).
+ int count; /* How many refs there are (duplicates only allowed for ref2). */
bool is_ref2;
} trackedref;
@@ -2849,18 +2778,19 @@ static trackedref *trackedref_new(bool is_ref2) {
}
static void track(const upb_refcounted *r, const void *owner, bool ref2) {
+ upb_value v;
+
assert(owner);
if (owner == UPB_UNTRACKED_REF) return;
upb_lock();
- upb_value v;
if (upb_inttable_lookupptr(r->refs, owner, &v)) {
trackedref *ref = upb_value_getptr(v);
- // Since we allow multiple ref2's for the same to/from pair without
- // allocating separate memory for each one, we lose the fine-grained
- // tracking behavior we get with regular refs. Since ref2s only happen
- // inside upb, we'll accept this limitation until/unless there is a really
- // difficult upb-internal bug that can't be figured out without it.
+ /* Since we allow multiple ref2's for the same to/from pair without
+ * allocating separate memory for each one, we lose the fine-grained
+ * tracking behavior we get with regular refs. Since ref2s only happen
+ * inside upb, we'll accept this limitation until/unless there is a really
+ * difficult upb-internal bug that can't be figured out without it. */
assert(ref2);
assert(ref->is_ref2);
ref->count++;
@@ -2869,8 +2799,8 @@ static void track(const upb_refcounted *r, const void *owner, bool ref2) {
bool ok = upb_inttable_insertptr(r->refs, owner, upb_value_ptr(ref));
CHECK_OOM(ok);
if (ref2) {
- // We know this cast is safe when it is a ref2, because it's coming from
- // another refcounted object.
+ /* We know this cast is safe when it is a ref2, because it's coming from
+ * another refcounted object. */
const upb_refcounted *from = owner;
assert(!upb_inttable_lookupptr(from->ref2s, r, NULL));
ok = upb_inttable_insertptr(from->ref2s, r, upb_value_ptr(NULL));
@@ -2881,22 +2811,25 @@ static void track(const upb_refcounted *r, const void *owner, bool ref2) {
}
static void untrack(const upb_refcounted *r, const void *owner, bool ref2) {
+ upb_value v;
+ bool found;
+ trackedref *ref;
+
assert(owner);
if (owner == UPB_UNTRACKED_REF) return;
upb_lock();
- upb_value v;
- bool found = upb_inttable_lookupptr(r->refs, owner, &v);
- // This assert will fail if an owner attempts to release a ref it didn't have.
+ found = upb_inttable_lookupptr(r->refs, owner, &v);
+ /* This assert will fail if an owner attempts to release a ref it didn't have. */
UPB_ASSERT_VAR(found, found);
- trackedref *ref = upb_value_getptr(v);
+ ref = upb_value_getptr(v);
assert(ref->is_ref2 == ref2);
if (--ref->count == 0) {
free(ref);
upb_inttable_removeptr(r->refs, owner, NULL);
if (ref2) {
- // We know this cast is safe when it is a ref2, because it's coming from
- // another refcounted object.
+ /* We know this cast is safe when it is a ref2, because it's coming from
+ * another refcounted object. */
const upb_refcounted *from = owner;
bool removed = upb_inttable_removeptr(from->ref2s, r, NULL);
assert(removed);
@@ -2906,32 +2839,41 @@ static void untrack(const upb_refcounted *r, const void *owner, bool ref2) {
}
static void checkref(const upb_refcounted *r, const void *owner, bool ref2) {
- upb_lock();
upb_value v;
- bool found = upb_inttable_lookupptr(r->refs, owner, &v);
+ bool found;
+ trackedref *ref;
+
+ upb_lock();
+ found = upb_inttable_lookupptr(r->refs, owner, &v);
UPB_ASSERT_VAR(found, found);
- trackedref *ref = upb_value_getptr(v);
+ ref = upb_value_getptr(v);
assert(ref->is_ref2 == ref2);
upb_unlock();
}
-// Populates the given UPB_CTYPE_INT32 inttable with counts of ref2's that
-// originate from the given owner.
+/* Populates the given UPB_CTYPE_INT32 inttable with counts of ref2's that
+ * originate from the given owner. */
static void getref2s(const upb_refcounted *owner, upb_inttable *tab) {
- upb_lock();
upb_inttable_iter i;
+
+ upb_lock();
upb_inttable_begin(&i, owner->ref2s);
for(; !upb_inttable_done(&i); upb_inttable_next(&i)) {
+ upb_value v;
+ upb_value count;
+ trackedref *ref;
+ bool ok;
+ bool found;
+
upb_refcounted *to = (upb_refcounted*)upb_inttable_iter_key(&i);
- // To get the count we need to look in the target's table.
- upb_value v;
- bool found = upb_inttable_lookupptr(to->refs, owner, &v);
+ /* To get the count we need to look in the target's table. */
+ found = upb_inttable_lookupptr(to->refs, owner, &v);
assert(found);
- trackedref *ref = upb_value_getptr(v);
- upb_value count = upb_value_int32(ref->count);
+ ref = upb_value_getptr(v);
+ count = upb_value_int32(ref->count);
- bool ok = upb_inttable_insertptr(tab, to, count);
+ ok = upb_inttable_insertptr(tab, to, count);
CHECK_OOM(ok);
}
upb_unlock();
@@ -2945,15 +2887,18 @@ typedef struct {
static void visit_check(const upb_refcounted *obj, const upb_refcounted *subobj,
void *closure) {
check_state *s = closure;
- assert(obj == s->obj);
- assert(subobj);
upb_inttable *ref2 = &s->ref2;
upb_value v;
- bool removed = upb_inttable_removeptr(ref2, subobj, &v);
- // The following assertion will fail if the visit() function visits a subobj
- // that it did not have a ref2 on, or visits the same subobj too many times.
+ bool removed;
+ int32_t newcount;
+
+ assert(obj == s->obj);
+ assert(subobj);
+ removed = upb_inttable_removeptr(ref2, subobj, &v);
+ /* The following assertion will fail if the visit() function visits a subobj
+ * that it did not have a ref2 on, or visits the same subobj too many times. */
assert(removed);
- int32_t newcount = upb_value_getint32(v) - 1;
+ newcount = upb_value_getint32(v) - 1;
if (newcount > 0) {
upb_inttable_insert(ref2, (uintptr_t)subobj, upb_value_int32(newcount));
}
@@ -2961,19 +2906,21 @@ static void visit_check(const upb_refcounted *obj, const upb_refcounted *subobj,
static void visit(const upb_refcounted *r, upb_refcounted_visit *v,
void *closure) {
- // In DEBUG_REFS mode we know what existing ref2 refs there are, so we know
- // exactly the set of nodes that visit() should visit. So we verify visit()'s
- // correctness here.
+ bool ok;
+
+ /* In DEBUG_REFS mode we know what existing ref2 refs there are, so we know
+ * exactly the set of nodes that visit() should visit. So we verify visit()'s
+ * correctness here. */
check_state state;
state.obj = r;
- bool ok = upb_inttable_init(&state.ref2, UPB_CTYPE_INT32);
+ ok = upb_inttable_init(&state.ref2, UPB_CTYPE_INT32);
CHECK_OOM(ok);
getref2s(r, &state.ref2);
- // This should visit any children in the ref2 table.
+ /* This should visit any children in the ref2 table. */
if (r->vtbl->visit) r->vtbl->visit(r, visit_check, &state);
- // This assertion will fail if the visit() function missed any children.
+ /* This assertion will fail if the visit() function missed any children. */
assert(upb_inttable_count(&state.ref2) == 0);
upb_inttable_uninit(&state.ref2);
if (r->vtbl->visit) r->vtbl->visit(r, v, closure);
@@ -3037,27 +2984,27 @@ static void visit(const upb_refcounted *r, upb_refcounted_visit *v,
if (r->vtbl->visit) r->vtbl->visit(r, v, closure);
}
-#endif // UPB_DEBUG_REFS
+#endif /* UPB_DEBUG_REFS */
/* freeze() *******************************************************************/
-// The freeze() operation is by far the most complicated part of this scheme.
-// We compute strongly-connected components and then mutate the graph such that
-// we preserve the invariants documented at the top of this file. And we must
-// handle out-of-memory errors gracefully (without leaving the graph
-// inconsistent), which adds to the fun.
+/* The freeze() operation is by far the most complicated part of this scheme.
+ * We compute strongly-connected components and then mutate the graph such that
+ * we preserve the invariants documented at the top of this file. And we must
+ * handle out-of-memory errors gracefully (without leaving the graph
+ * inconsistent), which adds to the fun. */
-// The state used by the freeze operation (shared across many functions).
+/* The state used by the freeze operation (shared across many functions). */
typedef struct {
int depth;
int maxdepth;
uint64_t index;
- // Maps upb_refcounted* -> attributes (color, etc). attr layout varies by
- // color.
+ /* Maps upb_refcounted* -> attributes (color, etc). attr layout varies by
+ * color. */
upb_inttable objattr;
- upb_inttable stack; // stack of upb_refcounted* for Tarjan's algorithm.
- upb_inttable groups; // array of uint32_t*, malloc'd refcounts for new groups
+ upb_inttable stack; /* stack of upb_refcounted* for Tarjan's algorithm. */
+ upb_inttable groups; /* array of uint32_t*, malloc'd refcounts for new groups */
upb_status *status;
jmp_buf err;
} tarjan;
@@ -3066,15 +3013,15 @@ static void release_ref2(const upb_refcounted *obj,
const upb_refcounted *subobj,
void *closure);
-// Node attributes /////////////////////////////////////////////////////////////
+/* Node attributes -----------------------------------------------------------*/
-// After our analysis phase all nodes will be either GRAY or WHITE.
+/* After our analysis phase all nodes will be either GRAY or WHITE. */
typedef enum {
- BLACK = 0, // Object has not been seen.
- GRAY, // Object has been found via a refgroup but may not be reachable.
- GREEN, // Object is reachable and is currently on the Tarjan stack.
- WHITE, // Object is reachable and has been assigned a group (SCC).
+ BLACK = 0, /* Object has not been seen. */
+ GRAY, /* Object has been found via a refgroup but may not be reachable. */
+ GREEN, /* Object is reachable and is currently on the Tarjan stack. */
+ WHITE /* Object is reachable and has been assigned a group (SCC). */
} color_t;
UPB_NORETURN static void err(tarjan *t) { longjmp(t->err, 1); }
@@ -3102,7 +3049,7 @@ static void setattr(tarjan *t, const upb_refcounted *r, uint64_t attr) {
}
static color_t color(tarjan *t, const upb_refcounted *r) {
- return trygetattr(t, r) & 0x3; // Color is always stored in the low 2 bits.
+ return trygetattr(t, r) & 0x3; /* Color is always stored in the low 2 bits. */
}
static void set_gray(tarjan *t, const upb_refcounted *r) {
@@ -3110,11 +3057,11 @@ static void set_gray(tarjan *t, const upb_refcounted *r) {
setattr(t, r, GRAY);
}
-// Pushes an obj onto the Tarjan stack and sets it to GREEN.
+/* Pushes an obj onto the Tarjan stack and sets it to GREEN. */
static void push(tarjan *t, const upb_refcounted *r) {
assert(color(t, r) == BLACK || color(t, r) == GRAY);
- // This defines the attr layout for the GREEN state. "index" and "lowlink"
- // get 31 bits, which is plenty (limit of 2B objects frozen at a time).
+ /* This defines the attr layout for the GREEN state. "index" and "lowlink"
+ * get 31 bits, which is plenty (limit of 2B objects frozen at a time). */
setattr(t, r, GREEN | (t->index << 2) | (t->index << 33));
if (++t->index == 0x80000000) {
upb_status_seterrmsg(t->status, "too many objects to freeze");
@@ -3123,13 +3070,13 @@ static void push(tarjan *t, const upb_refcounted *r) {
upb_inttable_push(&t->stack, upb_value_ptr((void*)r));
}
-// Pops an obj from the Tarjan stack and sets it to WHITE, with a ptr to its
-// SCC group.
+/* Pops an obj from the Tarjan stack and sets it to WHITE, with a ptr to its
+ * SCC group. */
static upb_refcounted *pop(tarjan *t) {
upb_refcounted *r = upb_value_getptr(upb_inttable_pop(&t->stack));
assert(color(t, r) == GREEN);
- // This defines the attr layout for nodes in the WHITE state.
- // Top of group stack is [group, NULL]; we point at group.
+ /* This defines the attr layout for nodes in the WHITE state.
+ * Top of group stack is [group, NULL]; we point at group. */
setattr(t, r, WHITE | (upb_inttable_count(&t->groups) - 2) << 8);
return r;
}
@@ -3137,7 +3084,7 @@ static upb_refcounted *pop(tarjan *t) {
static void tarjan_newgroup(tarjan *t) {
uint32_t *group = malloc(sizeof(*group));
if (!group) oom(t);
- // Push group and empty group leader (we'll fill in leader later).
+ /* Push group and empty group leader (we'll fill in leader later). */
if (!upb_inttable_push(&t->groups, upb_value_ptr(group)) ||
!upb_inttable_push(&t->groups, upb_value_ptr(NULL))) {
free(group);
@@ -3165,21 +3112,27 @@ static void set_lowlink(tarjan *t, const upb_refcounted *r, uint32_t lowlink) {
}
static uint32_t *group(tarjan *t, upb_refcounted *r) {
- assert(color(t, r) == WHITE);
- uint64_t groupnum = getattr(t, r) >> 8;
+ uint64_t groupnum;
upb_value v;
- bool found = upb_inttable_lookup(&t->groups, groupnum, &v);
+ bool found;
+
+ assert(color(t, r) == WHITE);
+ groupnum = getattr(t, r) >> 8;
+ found = upb_inttable_lookup(&t->groups, groupnum, &v);
UPB_ASSERT_VAR(found, found);
return upb_value_getptr(v);
}
-// If the group leader for this object's group has not previously been set,
-// the given object is assigned to be its leader.
+/* If the group leader for this object's group has not previously been set,
+ * the given object is assigned to be its leader. */
static upb_refcounted *groupleader(tarjan *t, upb_refcounted *r) {
- assert(color(t, r) == WHITE);
- uint64_t leader_slot = (getattr(t, r) >> 8) + 1;
+ uint64_t leader_slot;
upb_value v;
- bool found = upb_inttable_lookup(&t->groups, leader_slot, &v);
+ bool found;
+
+ assert(color(t, r) == WHITE);
+ leader_slot = (getattr(t, r) >> 8) + 1;
+ found = upb_inttable_lookup(&t->groups, leader_slot, &v);
UPB_ASSERT_VAR(found, found);
if (upb_value_getptr(v)) {
return upb_value_getptr(v);
@@ -3191,10 +3144,10 @@ static upb_refcounted *groupleader(tarjan *t, upb_refcounted *r) {
}
-// Tarjan's algorithm //////////////////////////////////////////////////////////
+/* Tarjan's algorithm --------------------------------------------------------*/
-// See:
-// http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm
+/* See:
+ * http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm */
static void do_tarjan(const upb_refcounted *obj, tarjan *t);
static void tarjan_visit(const upb_refcounted *obj,
@@ -3205,14 +3158,14 @@ static void tarjan_visit(const upb_refcounted *obj,
upb_status_seterrf(t->status, "graph too deep to freeze (%d)", t->maxdepth);
err(t);
} else if (subobj->is_frozen || color(t, subobj) == WHITE) {
- // Do nothing: we don't want to visit or color already-frozen nodes,
- // and WHITE nodes have already been assigned a SCC.
+ /* Do nothing: we don't want to visit or color already-frozen nodes,
+ * and WHITE nodes have already been assigned a SCC. */
} else if (color(t, subobj) < GREEN) {
- // Subdef has not yet been visited; recurse on it.
+ /* Subdef has not yet been visited; recurse on it. */
do_tarjan(subobj, t);
set_lowlink(t, obj, UPB_MIN(lowlink(t, obj), lowlink(t, subobj)));
} else if (color(t, subobj) == GREEN) {
- // Subdef is in the stack and hence in the current SCC.
+ /* Subdef is in the stack and hence in the current SCC. */
set_lowlink(t, obj, UPB_MIN(lowlink(t, obj), idx(t, subobj)));
}
--t->depth;
@@ -3220,7 +3173,7 @@ static void tarjan_visit(const upb_refcounted *obj,
static void do_tarjan(const upb_refcounted *obj, tarjan *t) {
if (color(t, obj) == BLACK) {
- // We haven't seen this object's group; mark the whole group GRAY.
+ /* We haven't seen this object's group; mark the whole group GRAY. */
const upb_refcounted *o = obj;
do { set_gray(t, o); } while ((o = o->next) != obj);
}
@@ -3235,15 +3188,15 @@ static void do_tarjan(const upb_refcounted *obj, tarjan *t) {
}
-// freeze() ////////////////////////////////////////////////////////////////////
+/* freeze() ------------------------------------------------------------------*/
static void crossref(const upb_refcounted *r, const upb_refcounted *subobj,
void *_t) {
tarjan *t = _t;
assert(color(t, r) > BLACK);
if (color(t, subobj) > BLACK && r->group != subobj->group) {
- // Previously this ref was not reflected in subobj->group because they
- // were in the same group; now that they are split a ref must be taken.
+ /* Previously this ref was not reflected in subobj->group because they
+ * were in the same group; now that they are split a ref must be taken. */
refgroup(subobj->group);
}
}
@@ -3251,10 +3204,12 @@ static void crossref(const upb_refcounted *r, const upb_refcounted *subobj,
static bool freeze(upb_refcounted *const*roots, int n, upb_status *s,
int maxdepth) {
volatile bool ret = false;
+ int i;
+ upb_inttable_iter iter;
- // We run in two passes so that we can allocate all memory before performing
- // any mutation of the input -- this allows us to leave the input unchanged
- // in the case of memory allocation failure.
+ /* We run in two passes so that we can allocate all memory before performing
+ * any mutation of the input -- this allows us to leave the input unchanged
+ * in the case of memory allocation failure. */
tarjan t;
t.index = 0;
t.depth = 0;
@@ -3266,64 +3221,65 @@ static bool freeze(upb_refcounted *const*roots, int n, upb_status *s,
if (setjmp(t.err) != 0) goto err4;
- for (int i = 0; i < n; i++) {
+ for (i = 0; i < n; i++) {
if (color(&t, roots[i]) < GREEN) {
do_tarjan(roots[i], &t);
}
}
- // If we've made it this far, no further errors are possible so it's safe to
- // mutate the objects without risk of leaving them in an inconsistent state.
+ /* If we've made it this far, no further errors are possible so it's safe to
+ * mutate the objects without risk of leaving them in an inconsistent state. */
ret = true;
- // The transformation that follows requires care. The preconditions are:
- // - all objects in attr map are WHITE or GRAY, and are in mutable groups
- // (groups of all mutable objs)
- // - no ref2(to, from) refs have incremented count(to) if both "to" and
- // "from" are in our attr map (this follows from invariants (2) and (3))
-
- // Pass 1: we remove WHITE objects from their mutable groups, and add them to
- // new groups according to the SCC's we computed. These new groups will
- // consist of only frozen objects. None will be immediately collectible,
- // because WHITE objects are by definition reachable from one of "roots",
- // which the caller must own refs on.
- upb_inttable_iter i;
- upb_inttable_begin(&i, &t.objattr);
- for(; !upb_inttable_done(&i); upb_inttable_next(&i)) {
- upb_refcounted *obj = (upb_refcounted*)upb_inttable_iter_key(&i);
- // Since removal from a singly-linked list requires access to the object's
- // predecessor, we consider obj->next instead of obj for moving. With the
- // while() loop we guarantee that we will visit every node's predecessor.
- // Proof:
- // 1. every node's predecessor is in our attr map.
- // 2. though the loop body may change a node's predecessor, it will only
- // change it to be the node we are currently operating on, so with a
- // while() loop we guarantee ourselves the chance to remove each node.
+ /* The transformation that follows requires care. The preconditions are:
+ * - all objects in attr map are WHITE or GRAY, and are in mutable groups
+ * (groups of all mutable objs)
+ * - no ref2(to, from) refs have incremented count(to) if both "to" and
+ * "from" are in our attr map (this follows from invariants (2) and (3)) */
+
+ /* Pass 1: we remove WHITE objects from their mutable groups, and add them to
+ * new groups according to the SCC's we computed. These new groups will
+ * consist of only frozen objects. None will be immediately collectible,
+ * because WHITE objects are by definition reachable from one of "roots",
+ * which the caller must own refs on. */
+ upb_inttable_begin(&iter, &t.objattr);
+ for(; !upb_inttable_done(&iter); upb_inttable_next(&iter)) {
+ upb_refcounted *obj = (upb_refcounted*)upb_inttable_iter_key(&iter);
+ /* Since removal from a singly-linked list requires access to the object's
+ * predecessor, we consider obj->next instead of obj for moving. With the
+ * while() loop we guarantee that we will visit every node's predecessor.
+ * Proof:
+ * 1. every node's predecessor is in our attr map.
+ * 2. though the loop body may change a node's predecessor, it will only
+ * change it to be the node we are currently operating on, so with a
+ * while() loop we guarantee ourselves the chance to remove each node. */
while (color(&t, obj->next) == WHITE &&
group(&t, obj->next) != obj->next->group) {
- // Remove from old group.
+ upb_refcounted *leader;
+
+ /* Remove from old group. */
upb_refcounted *move = obj->next;
if (obj == move) {
- // Removing the last object from a group.
+ /* Removing the last object from a group. */
assert(*obj->group == obj->individual_count);
free(obj->group);
} else {
obj->next = move->next;
- // This may decrease to zero; we'll collect GRAY objects (if any) that
- // remain in the group in the third pass.
+ /* This may decrease to zero; we'll collect GRAY objects (if any) that
+ * remain in the group in the third pass. */
assert(*move->group >= move->individual_count);
*move->group -= move->individual_count;
}
- // Add to new group.
- upb_refcounted *leader = groupleader(&t, move);
+ /* Add to new group. */
+ leader = groupleader(&t, move);
if (move == leader) {
- // First object added to new group is its leader.
+ /* First object added to new group is its leader. */
move->group = group(&t, move);
move->next = move;
*move->group = move->individual_count;
} else {
- // Group already has at least one object in it.
+ /* Group already has at least one object in it. */
assert(leader->group == group(&t, move));
move->group = group(&t, move);
move->next = leader->next;
@@ -3335,40 +3291,42 @@ static bool freeze(upb_refcounted *const*roots, int n, upb_status *s,
}
}
- // Pass 2: GRAY and WHITE objects "obj" with ref2(to, obj) references must
- // increment count(to) if group(obj) != group(to) (which could now be the
- // case if "to" was just frozen).
- upb_inttable_begin(&i, &t.objattr);
- for(; !upb_inttable_done(&i); upb_inttable_next(&i)) {
- upb_refcounted *obj = (upb_refcounted*)upb_inttable_iter_key(&i);
+ /* Pass 2: GRAY and WHITE objects "obj" with ref2(to, obj) references must
+ * increment count(to) if group(obj) != group(to) (which could now be the
+ * case if "to" was just frozen). */
+ upb_inttable_begin(&iter, &t.objattr);
+ for(; !upb_inttable_done(&iter); upb_inttable_next(&iter)) {
+ upb_refcounted *obj = (upb_refcounted*)upb_inttable_iter_key(&iter);
visit(obj, crossref, &t);
}
- // Pass 3: GRAY objects are collected if their group's refcount dropped to
- // zero when we removed its white nodes. This can happen if they had only
- // been kept alive by virtue of sharing a group with an object that was just
- // frozen.
- //
- // It is important that we do this last, since the GRAY object's free()
- // function could call unref2() on just-frozen objects, which will decrement
- // refs that were added in pass 2.
- upb_inttable_begin(&i, &t.objattr);
- for(; !upb_inttable_done(&i); upb_inttable_next(&i)) {
- upb_refcounted *obj = (upb_refcounted*)upb_inttable_iter_key(&i);
+ /* Pass 3: GRAY objects are collected if their group's refcount dropped to
+ * zero when we removed its white nodes. This can happen if they had only
+ * been kept alive by virtue of sharing a group with an object that was just
+ * frozen.
+ *
+ * It is important that we do this last, since the GRAY object's free()
+ * function could call unref2() on just-frozen objects, which will decrement
+ * refs that were added in pass 2. */
+ upb_inttable_begin(&iter, &t.objattr);
+ for(; !upb_inttable_done(&iter); upb_inttable_next(&iter)) {
+ upb_refcounted *obj = (upb_refcounted*)upb_inttable_iter_key(&iter);
if (obj->group == NULL || *obj->group == 0) {
if (obj->group) {
- // We eagerly free() the group's count (since we can't easily determine
- // the group's remaining size it's the easiest way to ensure it gets
- // done).
+ upb_refcounted *o;
+
+ /* We eagerly free() the group's count (since we can't easily determine
+ * the group's remaining size it's the easiest way to ensure it gets
+ * done). */
free(obj->group);
- // Visit to release ref2's (done in a separate pass since release_ref2
- // depends on o->group being unmodified so it can test merged()).
- upb_refcounted *o = obj;
+ /* Visit to release ref2's (done in a separate pass since release_ref2
+ * depends on o->group being unmodified so it can test merged()). */
+ o = obj;
do { visit(o, release_ref2, NULL); } while ((o = o->next) != obj);
- // Mark "group" fields as NULL so we know to free the objects later in
- // this loop, but also don't try to delete the group twice.
+ /* Mark "group" fields as NULL so we know to free the objects later in
+ * this loop, but also don't try to delete the group twice. */
o = obj;
do { o->group = NULL; } while ((o = o->next) != obj);
}
@@ -3378,9 +3336,9 @@ static bool freeze(upb_refcounted *const*roots, int n, upb_status *s,
err4:
if (!ret) {
- upb_inttable_begin(&i, &t.groups);
- for(; !upb_inttable_done(&i); upb_inttable_next(&i))
- free(upb_value_getptr(upb_inttable_iter_value(&i)));
+ upb_inttable_begin(&iter, &t.groups);
+ for(; !upb_inttable_done(&iter); upb_inttable_next(&iter))
+ free(upb_value_getptr(upb_inttable_iter_value(&iter)));
}
upb_inttable_uninit(&t.groups);
err3:
@@ -3399,21 +3357,24 @@ static bool merged(const upb_refcounted *r, const upb_refcounted *r2) {
}
static void merge(upb_refcounted *r, upb_refcounted *from) {
+ upb_refcounted *base;
+ upb_refcounted *tmp;
+
if (merged(r, from)) return;
*r->group += *from->group;
free(from->group);
- upb_refcounted *base = from;
-
- // Set all refcount pointers in the "from" chain to the merged refcount.
- //
- // TODO(haberman): this linear algorithm can result in an overall O(n^2) bound
- // if the user continuously extends a group by one object. Prevent this by
- // using one of the techniques in this paper:
- // ftp://www.ncedc.org/outgoing/geomorph/dino/orals/p245-tarjan.pdf
+ base = from;
+
+ /* Set all refcount pointers in the "from" chain to the merged refcount.
+ *
+ * TODO(haberman): this linear algorithm can result in an overall O(n^2) bound
+ * if the user continuously extends a group by one object. Prevent this by
+ * using one of the techniques in this paper:
+ * ftp://www.ncedc.org/outgoing/geomorph/dino/orals/p245-tarjan.pdf */
do { from->group = r->group; } while ((from = from->next) != base);
- // Merge the two circularly linked lists by swapping their next pointers.
- upb_refcounted *tmp = r->next;
+ /* Merge the two circularly linked lists by swapping their next pointers. */
+ tmp = r->next;
r->next = base->next;
base->next = tmp;
}
@@ -3433,11 +3394,13 @@ static void release_ref2(const upb_refcounted *obj,
static void unref(const upb_refcounted *r) {
if (unrefgroup(r->group)) {
+ const upb_refcounted *o;
+
free(r->group);
- // In two passes, since release_ref2 needs a guarantee that any subobjs
- // are alive.
- const upb_refcounted *o = r;
+ /* In two passes, since release_ref2 needs a guarantee that any subobjs
+ * are alive. */
+ o = r;
do { visit(o, release_ref2, NULL); } while((o = o->next) != r);
o = r;
@@ -3461,6 +3424,18 @@ static void freeobj(upb_refcounted *o) {
bool upb_refcounted_init(upb_refcounted *r,
const struct upb_refcounted_vtbl *vtbl,
const void *owner) {
+#ifndef NDEBUG
+ /* Endianness check. This is unrelated to upb_refcounted, it's just a
+ * convenient place to put the check that we can be assured will run for
+ * basically every program using upb. */
+ const int x = 1;
+#ifdef UPB_BIG_ENDIAN
+ assert(*(char*)&x != 1);
+#else
+ assert(*(char*)&x == 1);
+#endif
+#endif
+
r->next = r;
r->vtbl = vtbl;
r->individual_count = 0;
@@ -3495,7 +3470,7 @@ void upb_refcounted_unref(const upb_refcounted *r, const void *owner) {
}
void upb_refcounted_ref2(const upb_refcounted *r, upb_refcounted *from) {
- assert(!from->is_frozen); // Non-const pointer implies this.
+ assert(!from->is_frozen); /* Non-const pointer implies this. */
track(r, from, true);
if (r->is_frozen) {
refgroup(r->group);
@@ -3505,7 +3480,7 @@ void upb_refcounted_ref2(const upb_refcounted *r, upb_refcounted *from) {
}
void upb_refcounted_unref2(const upb_refcounted *r, upb_refcounted *from) {
- assert(!from->is_frozen); // Non-const pointer implies this.
+ assert(!from->is_frozen); /* Non-const pointer implies this. */
untrack(r, from, true);
if (r->is_frozen) {
unref(r);
@@ -3529,7 +3504,8 @@ void upb_refcounted_checkref(const upb_refcounted *r, const void *owner) {
bool upb_refcounted_freeze(upb_refcounted *const*roots, int n, upb_status *s,
int maxdepth) {
- for (int i = 0; i < n; i++) {
+ int i;
+ for (i = 0; i < n; i++) {
assert(!roots[i]->is_frozen);
}
return freeze(roots, n, s, maxdepth);
@@ -3544,7 +3520,7 @@ bool upb_refcounted_freeze(upb_refcounted *const*roots, int n, upb_status *s,
#include <stdlib.h>
-// Fallback implementation if the shim is not specialized by the JIT.
+/* Fallback implementation if the shim is not specialized by the JIT. */
#define SHIM_WRITER(type, ctype) \
bool upb_shim_set ## type (void *c, const void *hd, ctype val) { \
uint8_t *m = c; \
@@ -3566,12 +3542,14 @@ SHIM_WRITER(bool, bool)
bool upb_shim_set(upb_handlers *h, const upb_fielddef *f, size_t offset,
int32_t hasbit) {
+ upb_handlerattr attr = UPB_HANDLERATTR_INITIALIZER;
+ bool ok;
+
upb_shim_data *d = malloc(sizeof(*d));
if (!d) return false;
d->offset = offset;
d->hasbit = hasbit;
- upb_handlerattr attr = UPB_HANDLERATTR_INITIALIZER;
upb_handlerattr_sethandlerdata(&attr, d);
upb_handlerattr_setalwaysok(&attr, true);
upb_handlers_addcleanup(h, d, free);
@@ -3580,7 +3558,7 @@ bool upb_shim_set(upb_handlers *h, const upb_fielddef *f, size_t offset,
case UPB_TYPE_##u: \
ok = upb_handlers_set##l(h, f, upb_shim_set##l, &attr); break;
- bool ok = false;
+ ok = false;
switch (upb_fielddef_type(f)) {
TYPE(INT64, int64);
@@ -3634,27 +3612,6 @@ const upb_shim_data *upb_shim_getdata(const upb_handlers *h, upb_selector_t s,
#include <stdlib.h>
#include <string.h>
-bool upb_symtab_isfrozen(const upb_symtab *s) {
- return upb_refcounted_isfrozen(UPB_UPCAST(s));
-}
-
-void upb_symtab_ref(const upb_symtab *s, const void *owner) {
- upb_refcounted_ref(UPB_UPCAST(s), owner);
-}
-
-void upb_symtab_unref(const upb_symtab *s, const void *owner) {
- upb_refcounted_unref(UPB_UPCAST(s), owner);
-}
-
-void upb_symtab_donateref(
- const upb_symtab *s, const void *from, const void *to) {
- upb_refcounted_donateref(UPB_UPCAST(s), from, to);
-}
-
-void upb_symtab_checkref(const upb_symtab *s, const void *owner) {
- upb_refcounted_checkref(UPB_UPCAST(s), owner);
-}
-
static void upb_symtab_free(upb_refcounted *r) {
upb_symtab *s = (upb_symtab*)r;
upb_strtable_iter i;
@@ -3671,18 +3628,21 @@ static void upb_symtab_free(upb_refcounted *r) {
upb_symtab *upb_symtab_new(const void *owner) {
static const struct upb_refcounted_vtbl vtbl = {NULL, &upb_symtab_free};
upb_symtab *s = malloc(sizeof(*s));
- upb_refcounted_init(UPB_UPCAST(s), &vtbl, owner);
+ upb_refcounted_init(upb_symtab_upcast_mutable(s), &vtbl, owner);
upb_strtable_init(&s->symtab, UPB_CTYPE_PTR);
return s;
}
void upb_symtab_freeze(upb_symtab *s) {
+ upb_refcounted *r;
+ bool ok;
+
assert(!upb_symtab_isfrozen(s));
- upb_refcounted *r = UPB_UPCAST(s);
- // The symtab does not take ref2's (see refcounted.h) on the defs, because
- // defs cannot refer back to the table and therefore cannot create cycles. So
- // 0 will suffice for maxdepth here.
- bool ok = upb_refcounted_freeze(&r, 1, NULL, 0);
+ r = upb_symtab_upcast_mutable(s);
+ /* The symtab does not take ref2's (see refcounted.h) on the defs, because
+ * defs cannot refer back to the table and therefore cannot create cycles. So
+ * 0 will suffice for maxdepth here. */
+ ok = upb_refcounted_freeze(&r, 1, NULL, 0);
UPB_ASSERT_VAR(ok, ok);
}
@@ -3707,19 +3667,19 @@ const upb_enumdef *upb_symtab_lookupenum(const upb_symtab *s, const char *sym) {
return def ? upb_dyncast_enumdef(def) : NULL;
}
-// Given a symbol and the base symbol inside which it is defined, find the
-// symbol's definition in t.
+/* Given a symbol and the base symbol inside which it is defined, find the
+ * symbol's definition in t. */
static upb_def *upb_resolvename(const upb_strtable *t,
const char *base, const char *sym) {
if(strlen(sym) == 0) return NULL;
if(sym[0] == '.') {
- // Symbols starting with '.' are absolute, so we do a single lookup.
- // Slice to omit the leading '.'
+ /* Symbols starting with '.' are absolute, so we do a single lookup.
+ * Slice to omit the leading '.' */
upb_value v;
return upb_strtable_lookup(t, sym + 1, &v) ? upb_value_getptr(v) : NULL;
} else {
- // Remove components from base until we find an entry or run out.
- // TODO: This branch is totally broken, but currently not used.
+ /* Remove components from base until we find an entry or run out.
+ * TODO: This branch is totally broken, but currently not used. */
(void)base;
assert(false);
return NULL;
@@ -3732,36 +3692,41 @@ const upb_def *upb_symtab_resolve(const upb_symtab *s, const char *base,
return ret;
}
-// Searches def and its children to find defs that have the same name as any
-// def in "addtab." Returns true if any where found, and as a side-effect adds
-// duplicates of these defs into addtab.
-//
-// We use a modified depth-first traversal that traverses each SCC (which we
-// already computed) as if it were a single node. This allows us to traverse
-// the possibly-cyclic graph as if it were a DAG and to dup the correct set of
-// nodes with O(n) time.
+/* Searches def and its children to find defs that have the same name as any
+ * def in "addtab." Returns true if any where found, and as a side-effect adds
+ * duplicates of these defs into addtab.
+ *
+ * We use a modified depth-first traversal that traverses each SCC (which we
+ * already computed) as if it were a single node. This allows us to traverse
+ * the possibly-cyclic graph as if it were a DAG and to dup the correct set of
+ * nodes with O(n) time. */
static bool upb_resolve_dfs(const upb_def *def, upb_strtable *addtab,
const void *new_owner, upb_inttable *seen,
upb_status *s) {
- // Memoize results of this function for efficiency (since we're traversing a
- // DAG this is not needed to limit the depth of the search).
+ /* Memoize results of this function for efficiency (since we're traversing a
+ * DAG this is not needed to limit the depth of the search). */
upb_value v;
+ bool need_dup;
+ const upb_def *base;
+
if (upb_inttable_lookup(seen, (uintptr_t)def, &v))
return upb_value_getbool(v);
- // Visit submessages for all messages in the SCC.
- bool need_dup = false;
- const upb_def *base = def;
+ /* Visit submessages for all messages in the SCC. */
+ need_dup = false;
+ base = def;
do {
+ upb_value v;
+ const upb_msgdef *m;
+
assert(upb_def_isfrozen(def));
if (def->type == UPB_DEF_FIELD) continue;
- upb_value v;
if (upb_strtable_lookup(addtab, upb_def_fullname(def), &v)) {
need_dup = true;
}
- // For messages, continue the recursion by visiting all subdefs.
- const upb_msgdef *m = upb_dyncast_msgdef(def);
+ /* For messages, continue the recursion by visiting all subdefs. */
+ m = upb_dyncast_msgdef(def);
if (m) {
upb_msg_field_iter i;
for(upb_msg_field_begin(&i, m);
@@ -3769,7 +3734,7 @@ static bool upb_resolve_dfs(const upb_def *def, upb_strtable *addtab,
upb_msg_field_next(&i)) {
upb_fielddef *f = upb_msg_iter_field(&i);
if (!upb_fielddef_hassubdef(f)) continue;
- // |= to avoid short-circuit; we need its side-effects.
+ /* |= to avoid short-circuit; we need its side-effects. */
need_dup |= upb_resolve_dfs(
upb_fielddef_subdef(f), addtab, new_owner, seen, s);
if (!upb_ok(s)) return false;
@@ -3778,11 +3743,13 @@ static bool upb_resolve_dfs(const upb_def *def, upb_strtable *addtab,
} while ((def = (upb_def*)def->base.next) != base);
if (need_dup) {
- // Dup any defs that don't already have entries in addtab.
+ /* Dup any defs that don't already have entries in addtab. */
def = base;
do {
+ const char *name;
+
if (def->type == UPB_DEF_FIELD) continue;
- const char *name = upb_def_fullname(def);
+ name = upb_def_fullname(def);
if (!upb_strtable_lookup(addtab, name, NULL)) {
upb_def *newdef = upb_def_dup(def, new_owner);
if (!newdef) goto oom;
@@ -3801,34 +3768,41 @@ oom:
return false;
}
-// TODO(haberman): we need a lot more testing of error conditions.
-// The came_from_user stuff in particular is not tested.
+/* TODO(haberman): we need a lot more testing of error conditions.
+ * The came_from_user stuff in particular is not tested. */
bool upb_symtab_add(upb_symtab *s, upb_def *const*defs, int n, void *ref_donor,
upb_status *status) {
- assert(!upb_symtab_isfrozen(s));
+ int i;
+ upb_strtable_iter iter;
upb_def **add_defs = NULL;
upb_strtable addtab;
+ upb_inttable seen;
+
+ assert(!upb_symtab_isfrozen(s));
if (!upb_strtable_init(&addtab, UPB_CTYPE_PTR)) {
upb_status_seterrmsg(status, "out of memory");
return false;
}
- // Add new defs to our "add" set.
- for (int i = 0; i < n; i++) {
+ /* Add new defs to our "add" set. */
+ for (i = 0; i < n; i++) {
upb_def *def = defs[i];
+ const char *fullname;
+ upb_fielddef *f;
+
if (upb_def_isfrozen(def)) {
upb_status_seterrmsg(status, "added defs must be mutable");
goto err;
}
assert(!upb_def_isfrozen(def));
- const char *fullname = upb_def_fullname(def);
+ fullname = upb_def_fullname(def);
if (!fullname) {
upb_status_seterrmsg(
status, "Anonymous defs cannot be added to a symtab");
goto err;
}
- upb_fielddef *f = upb_dyncast_fielddef_mutable(def);
+ f = upb_dyncast_fielddef_mutable(def);
if (f) {
if (!upb_fielddef_containingtypename(f)) {
@@ -3842,8 +3816,8 @@ bool upb_symtab_add(upb_symtab *s, upb_def *const*defs, int n, void *ref_donor,
upb_status_seterrf(status, "Conflicting defs named '%s'", fullname);
goto err;
}
- // We need this to back out properly, because if there is a failure we
- // need to donate the ref back to the caller.
+ /* We need this to back out properly, because if there is a failure we
+ * need to donate the ref back to the caller. */
def->came_from_user = true;
upb_def_donateref(def, ref_donor, s);
if (!upb_strtable_insert(&addtab, fullname, upb_value_ptr(def)))
@@ -3851,31 +3825,33 @@ bool upb_symtab_add(upb_symtab *s, upb_def *const*defs, int n, void *ref_donor,
}
}
- // Add standalone fielddefs (ie. extensions) to the appropriate messages.
- // If the appropriate message only exists in the existing symtab, duplicate
- // it so we have a mutable copy we can add the fields to.
- for (int i = 0; i < n; i++) {
+ /* Add standalone fielddefs (ie. extensions) to the appropriate messages.
+ * If the appropriate message only exists in the existing symtab, duplicate
+ * it so we have a mutable copy we can add the fields to. */
+ for (i = 0; i < n; i++) {
upb_def *def = defs[i];
upb_fielddef *f = upb_dyncast_fielddef_mutable(def);
+ const char *msgname;
+ upb_value v;
+ upb_msgdef *m;
+
if (!f) continue;
- const char *msgname = upb_fielddef_containingtypename(f);
- // We validated this earlier in this function.
+ msgname = upb_fielddef_containingtypename(f);
+ /* We validated this earlier in this function. */
assert(msgname);
- // If the extendee name is absolutely qualified, move past the initial ".".
- // TODO(haberman): it is not obvious what it would mean if this was not
- // absolutely qualified.
+ /* If the extendee name is absolutely qualified, move past the initial ".".
+ * TODO(haberman): it is not obvious what it would mean if this was not
+ * absolutely qualified. */
if (msgname[0] == '.') {
msgname++;
}
- upb_value v;
- upb_msgdef *m;
if (upb_strtable_lookup(&addtab, msgname, &v)) {
- // Extendee is in the set of defs the user asked us to add.
+ /* Extendee is in the set of defs the user asked us to add. */
m = upb_value_getptr(v);
} else {
- // Need to find and dup the extendee from the existing symtab.
+ /* Need to find and dup the extendee from the existing symtab. */
const upb_msgdef *frozen_m = upb_symtab_lookupmsg(s, msgname);
if (!frozen_m) {
upb_status_seterrf(status,
@@ -3897,37 +3873,37 @@ bool upb_symtab_add(upb_symtab *s, upb_def *const*defs, int n, void *ref_donor,
}
}
- // Add dups of any existing def that can reach a def with the same name as
- // anything in our "add" set.
- upb_inttable seen;
+ /* Add dups of any existing def that can reach a def with the same name as
+ * anything in our "add" set. */
if (!upb_inttable_init(&seen, UPB_CTYPE_BOOL)) goto oom_err;
- upb_strtable_iter i;
- upb_strtable_begin(&i, &s->symtab);
- for (; !upb_strtable_done(&i); upb_strtable_next(&i)) {
- upb_def *def = upb_value_getptr(upb_strtable_iter_value(&i));
+ upb_strtable_begin(&iter, &s->symtab);
+ for (; !upb_strtable_done(&iter); upb_strtable_next(&iter)) {
+ upb_def *def = upb_value_getptr(upb_strtable_iter_value(&iter));
upb_resolve_dfs(def, &addtab, s, &seen, status);
if (!upb_ok(status)) goto err;
}
upb_inttable_uninit(&seen);
- // Now using the table, resolve symbolic references for subdefs.
- upb_strtable_begin(&i, &addtab);
- for (; !upb_strtable_done(&i); upb_strtable_next(&i)) {
- upb_def *def = upb_value_getptr(upb_strtable_iter_value(&i));
+ /* Now using the table, resolve symbolic references for subdefs. */
+ upb_strtable_begin(&iter, &addtab);
+ for (; !upb_strtable_done(&iter); upb_strtable_next(&iter)) {
+ const char *base;
+ upb_def *def = upb_value_getptr(upb_strtable_iter_value(&iter));
upb_msgdef *m = upb_dyncast_msgdef_mutable(def);
+ upb_msg_field_iter j;
+
if (!m) continue;
- // Type names are resolved relative to the message in which they appear.
- const char *base = upb_msgdef_fullname(m);
+ /* Type names are resolved relative to the message in which they appear. */
+ base = upb_msgdef_fullname(m);
- upb_msg_field_iter j;
for(upb_msg_field_begin(&j, m);
!upb_msg_field_done(&j);
upb_msg_field_next(&j)) {
upb_fielddef *f = upb_msg_iter_field(&j);
const char *name = upb_fielddef_subdefname(f);
if (name && !upb_fielddef_subdef(f)) {
- // Try the lookup in the current set of to-be-added defs first. If not
- // there, try existing defs.
+ /* Try the lookup in the current set of to-be-added defs first. If not
+ * there, try existing defs. */
upb_def *subdef = upb_resolvename(&addtab, base, name);
if (subdef == NULL) {
subdef = upb_resolvename(&s->symtab, base, name);
@@ -3943,31 +3919,33 @@ bool upb_symtab_add(upb_symtab *s, upb_def *const*defs, int n, void *ref_donor,
}
}
- // We need an array of the defs in addtab, for passing to upb_def_freeze.
+ /* We need an array of the defs in addtab, for passing to upb_def_freeze. */
add_defs = malloc(sizeof(void*) * upb_strtable_count(&addtab));
if (add_defs == NULL) goto oom_err;
- upb_strtable_begin(&i, &addtab);
- for (n = 0; !upb_strtable_done(&i); upb_strtable_next(&i)) {
- add_defs[n++] = upb_value_getptr(upb_strtable_iter_value(&i));
+ upb_strtable_begin(&iter, &addtab);
+ for (n = 0; !upb_strtable_done(&iter); upb_strtable_next(&iter)) {
+ add_defs[n++] = upb_value_getptr(upb_strtable_iter_value(&iter));
}
if (!upb_def_freeze(add_defs, n, status)) goto err;
- // This must be delayed until all errors have been detected, since error
- // recovery code uses this table to cleanup defs.
+ /* This must be delayed until all errors have been detected, since error
+ * recovery code uses this table to cleanup defs. */
upb_strtable_uninit(&addtab);
- // TODO(haberman) we don't properly handle errors after this point (like
- // OOM in upb_strtable_insert() below).
- for (int i = 0; i < n; i++) {
+ /* TODO(haberman) we don't properly handle errors after this point (like
+ * OOM in upb_strtable_insert() below). */
+ for (i = 0; i < n; i++) {
upb_def *def = add_defs[i];
const char *name = upb_def_fullname(def);
upb_value v;
+ bool success;
+
if (upb_strtable_remove(&s->symtab, name, &v)) {
const upb_def *def = upb_value_getptr(v);
upb_def_unref(def, s);
}
- bool success = upb_strtable_insert(&s->symtab, name, upb_value_ptr(def));
+ success = upb_strtable_insert(&s->symtab, name, upb_value_ptr(def));
UPB_ASSERT_VAR(success, success == true);
}
free(add_defs);
@@ -3976,12 +3954,11 @@ bool upb_symtab_add(upb_symtab *s, upb_def *const*defs, int n, void *ref_donor,
oom_err:
upb_status_seterrmsg(status, "out of memory");
err: {
- // For defs the user passed in, we need to donate the refs back. For defs
- // we dup'd, we need to just unref them.
- upb_strtable_iter i;
- upb_strtable_begin(&i, &addtab);
- for (; !upb_strtable_done(&i); upb_strtable_next(&i)) {
- upb_def *def = upb_value_getptr(upb_strtable_iter_value(&i));
+ /* For defs the user passed in, we need to donate the refs back. For defs
+ * we dup'd, we need to just unref them. */
+ upb_strtable_begin(&iter, &addtab);
+ for (; !upb_strtable_done(&iter); upb_strtable_next(&iter)) {
+ upb_def *def = upb_value_getptr(upb_strtable_iter_value(&iter));
bool came_from_user = def->came_from_user;
def->came_from_user = false;
if (came_from_user) {
@@ -3997,7 +3974,7 @@ err: {
return false;
}
-// Iteration.
+/* Iteration. */
static void advance_to_matching(upb_symtab_iter *iter) {
if (iter->type == UPB_DEF_ANY)
@@ -4041,17 +4018,17 @@ const upb_def *upb_symtab_iter_def(const upb_symtab_iter *iter) {
#include <stdlib.h>
#include <string.h>
-#define UPB_MAXARRSIZE 16 // 64k.
+#define UPB_MAXARRSIZE 16 /* 64k. */
-// From Chromium.
+/* From Chromium. */
#define ARRAY_SIZE(x) \
((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))
static const double MAX_LOAD = 0.85;
-// The minimum utilization of the array part of a mixed hash/array table. This
-// is a speed/memory-usage tradeoff (though it's not straightforward because of
-// cache effects). The lower this is, the more memory we'll use.
+/* The minimum utilization of the array part of a mixed hash/array table. This
+ * is a speed/memory-usage tradeoff (though it's not straightforward because of
+ * cache effects). The lower this is, the more memory we'll use. */
static const double MIN_DENSITY = 0.1;
bool is_pow2(uint64_t v) { return v == 0 || (v & (v - 1)) == 0; }
@@ -4060,7 +4037,7 @@ int log2ceil(uint64_t v) {
int ret = 0;
bool pow2 = is_pow2(v);
while (v >>= 1) ret++;
- ret = pow2 ? ret : ret + 1; // Ceiling.
+ ret = pow2 ? ret : ret + 1; /* Ceiling. */
return UPB_MIN(UPB_MAXARRSIZE, ret);
}
@@ -4069,12 +4046,15 @@ char *upb_strdup(const char *s) {
}
char *upb_strdup2(const char *s, size_t len) {
- // Prevent overflow errors.
+ size_t n;
+ char *p;
+
+ /* Prevent overflow errors. */
if (len == SIZE_MAX) return NULL;
- // Always null-terminate, even if binary data; but don't rely on the input to
- // have a null-terminating byte since it may be a raw binary buffer.
- size_t n = len + 1;
- char *p = malloc(n);
+ /* Always null-terminate, even if binary data; but don't rely on the input to
+ * have a null-terminating byte since it may be a raw binary buffer. */
+ n = len + 1;
+ p = malloc(n);
if (p) {
memcpy(p, s, len);
p[len] = 0;
@@ -4082,21 +4062,25 @@ char *upb_strdup2(const char *s, size_t len) {
return p;
}
-// A type to represent the lookup key of either a strtable or an inttable.
-typedef struct {
- upb_tabkey key;
+/* A type to represent the lookup key of either a strtable or an inttable. */
+typedef union {
+ uintptr_t num;
+ struct {
+ const char *str;
+ size_t len;
+ } str;
} lookupkey_t;
static lookupkey_t strkey2(const char *str, size_t len) {
lookupkey_t k;
- k.key.s.str = (char*)str;
- k.key.s.length = len;
+ k.str.str = str;
+ k.str.len = len;
return k;
}
static lookupkey_t intkey(uintptr_t key) {
lookupkey_t k;
- k.key = upb_intkey(key);
+ k.num = key;
return k;
}
@@ -4105,7 +4089,7 @@ typedef bool eqlfunc_t(upb_tabkey k1, lookupkey_t k2);
/* Base table (shared code) ***************************************************/
-// For when we need to cast away const.
+/* For when we need to cast away const. */
static upb_tabent *mutable_entries(upb_table *t) {
return (upb_tabent*)t->entries;
}
@@ -4115,11 +4099,13 @@ static bool isfull(upb_table *t) {
}
static bool init(upb_table *t, upb_ctype_t ctype, uint8_t size_lg2) {
+ size_t bytes;
+
t->count = 0;
t->ctype = ctype;
t->size_lg2 = size_lg2;
t->mask = upb_table_size(t) ? upb_table_size(t) - 1 : 0;
- size_t bytes = upb_table_size(t) * sizeof(upb_tabent);
+ bytes = upb_table_size(t) * sizeof(upb_tabent);
if (bytes > 0) {
t->entries = malloc(bytes);
if (!t->entries) return false;
@@ -4143,8 +4129,10 @@ static upb_tabent *getentry_mutable(upb_table *t, uint32_t hash) {
static const upb_tabent *findentry(const upb_table *t, lookupkey_t key,
uint32_t hash, eqlfunc_t *eql) {
+ const upb_tabent *e;
+
if (t->size_lg2 == 0) return NULL;
- const upb_tabent *e = upb_getentry(t, hash);
+ e = upb_getentry(t, hash);
if (upb_tabent_isempty(e)) return NULL;
while (1) {
if (eql(e->key, key)) return e;
@@ -4162,7 +4150,7 @@ static bool lookup(const upb_table *t, lookupkey_t key, upb_value *v,
const upb_tabent *e = findentry(t, key, hash, eql);
if (e) {
if (v) {
- _upb_value_setval(v, e->val, t->ctype);
+ _upb_value_setval(v, e->val.val, t->ctype);
}
return true;
} else {
@@ -4170,34 +4158,41 @@ static bool lookup(const upb_table *t, lookupkey_t key, upb_value *v,
}
}
-// The given key must not already exist in the table.
-static void insert(upb_table *t, lookupkey_t key, upb_value val,
- uint32_t hash, hashfunc_t *hashfunc, eqlfunc_t *eql) {
+/* The given key must not already exist in the table. */
+static void insert(upb_table *t, lookupkey_t key, upb_tabkey tabkey,
+ upb_value val, uint32_t hash,
+ hashfunc_t *hashfunc, eqlfunc_t *eql) {
+ upb_tabent *mainpos_e;
+ upb_tabent *our_e;
+
UPB_UNUSED(eql);
+ UPB_UNUSED(key);
assert(findentry(t, key, hash, eql) == NULL);
assert(val.ctype == t->ctype);
+
t->count++;
- upb_tabent *mainpos_e = getentry_mutable(t, hash);
- upb_tabent *our_e = mainpos_e;
+ mainpos_e = getentry_mutable(t, hash);
+ our_e = mainpos_e;
+
if (upb_tabent_isempty(mainpos_e)) {
- // Our main position is empty; use it.
+ /* Our main position is empty; use it. */
our_e->next = NULL;
} else {
- // Collision.
+ /* Collision. */
upb_tabent *new_e = emptyent(t);
- // Head of collider's chain.
+ /* Head of collider's chain. */
upb_tabent *chain = getentry_mutable(t, hashfunc(mainpos_e->key));
if (chain == mainpos_e) {
- // Existing ent is in its main posisiton (it has the same hash as us, and
- // is the head of our chain). Insert to new ent and append to this chain.
+ /* Existing ent is in its main posisiton (it has the same hash as us, and
+ * is the head of our chain). Insert to new ent and append to this chain. */
new_e->next = mainpos_e->next;
mainpos_e->next = new_e;
our_e = new_e;
} else {
- // Existing ent is not in its main position (it is a node in some other
- // chain). This implies that no existing ent in the table has our hash.
- // Evict it (updating its chain) and use its ent for head of our chain.
- *new_e = *mainpos_e; // copies next.
+ /* Existing ent is not in its main position (it is a node in some other
+ * chain). This implies that no existing ent in the table has our hash.
+ * Evict it (updating its chain) and use its ent for head of our chain. */
+ *new_e = *mainpos_e; /* copies next. */
while (chain->next != mainpos_e) {
chain = (upb_tabent*)chain->next;
assert(chain);
@@ -4207,8 +4202,8 @@ static void insert(upb_table *t, lookupkey_t key, upb_value val,
our_e->next = NULL;
}
}
- our_e->key = key.key;
- our_e->val = val.val;
+ our_e->key = tabkey;
+ our_e->val.val = val.val;
assert(findentry(t, key, hash, eql) == our_e);
}
@@ -4217,33 +4212,36 @@ static bool rm(upb_table *t, lookupkey_t key, upb_value *val,
upb_tabent *chain = getentry_mutable(t, hash);
if (upb_tabent_isempty(chain)) return false;
if (eql(chain->key, key)) {
- // Element to remove is at the head of its chain.
+ /* Element to remove is at the head of its chain. */
t->count--;
if (val) {
- _upb_value_setval(val, chain->val, t->ctype);
+ _upb_value_setval(val, chain->val.val, t->ctype);
}
if (chain->next) {
upb_tabent *move = (upb_tabent*)chain->next;
*chain = *move;
if (removed) *removed = move->key;
- move->key.num = 0; // Make the slot empty.
+ move->key = 0; /* Make the slot empty. */
} else {
if (removed) *removed = chain->key;
- chain->key.num = 0; // Make the slot empty.
+ chain->key = 0; /* Make the slot empty. */
}
return true;
} else {
- // Element to remove is either in a non-head position or not in the table.
+ /* Element to remove is either in a non-head position or not in the
+ * table. */
while (chain->next && !eql(chain->next->key, key))
chain = (upb_tabent*)chain->next;
if (chain->next) {
- // Found element to remove.
+ /* Found element to remove. */
+ upb_tabent *rm;
+
if (val) {
- _upb_value_setval(val, chain->next->val, t->ctype);
+ _upb_value_setval(val, chain->next->val.val, t->ctype);
}
- upb_tabent *rm = (upb_tabent*)chain->next;
+ rm = (upb_tabent*)chain->next;
if (removed) *removed = rm->key;
- rm->key.num = 0;
+ rm->key = 0;
chain->next = rm->next;
t->count--;
return true;
@@ -4269,15 +4267,26 @@ static size_t begin(const upb_table *t) {
/* upb_strtable ***************************************************************/
-// A simple "subclass" of upb_table that only adds a hash function for strings.
+/* A simple "subclass" of upb_table that only adds a hash function for strings. */
+
+static upb_tabkey strcopy(lookupkey_t k2) {
+ char *str = malloc(k2.str.len + sizeof(uint32_t) + 1);
+ if (str == NULL) return 0;
+ memcpy(str, &k2.str.len, sizeof(uint32_t));
+ memcpy(str + sizeof(uint32_t), k2.str.str, k2.str.len + 1);
+ return (uintptr_t)str;
+}
static uint32_t strhash(upb_tabkey key) {
- return MurmurHash2(key.s.str, key.s.length, 0);
+ uint32_t len;
+ char *str = upb_tabstr(key, &len);
+ return MurmurHash2(str, len, 0);
}
static bool streql(upb_tabkey k1, lookupkey_t k2) {
- return k1.s.length == k2.key.s.length &&
- memcmp(k1.s.str, k2.key.s.str, k1.s.length) == 0;
+ uint32_t len;
+ char *str = upb_tabstr(k1, &len);
+ return len == k2.str.len && memcmp(str, k2.str.str, len) == 0;
}
bool upb_strtable_init(upb_strtable *t, upb_ctype_t ctype) {
@@ -4285,16 +4294,18 @@ bool upb_strtable_init(upb_strtable *t, upb_ctype_t ctype) {
}
void upb_strtable_uninit(upb_strtable *t) {
- for (size_t i = 0; i < upb_table_size(&t->t); i++)
- free((void*)t->t.entries[i].key.s.str);
+ size_t i;
+ for (i = 0; i < upb_table_size(&t->t); i++)
+ free((void*)t->t.entries[i].key);
uninit(&t->t);
}
bool upb_strtable_resize(upb_strtable *t, size_t size_lg2) {
upb_strtable new_table;
+ upb_strtable_iter i;
+
if (!init(&new_table.t, t->t.ctype, size_lg2))
return false;
- upb_strtable_iter i;
upb_strtable_begin(&i, t);
for ( ; !upb_strtable_done(&i); upb_strtable_next(&i)) {
upb_strtable_insert2(
@@ -4310,17 +4321,23 @@ bool upb_strtable_resize(upb_strtable *t, size_t size_lg2) {
bool upb_strtable_insert2(upb_strtable *t, const char *k, size_t len,
upb_value v) {
+ lookupkey_t key;
+ upb_tabkey tabkey;
+ uint32_t hash;
+
if (isfull(&t->t)) {
- // Need to resize. New table of double the size, add old elements to it.
+ /* Need to resize. New table of double the size, add old elements to it. */
if (!upb_strtable_resize(t, t->t.size_lg2 + 1)) {
return false;
}
}
- if ((k = upb_strdup2(k, len)) == NULL) return false;
- lookupkey_t key = strkey2(k, len);
- uint32_t hash = MurmurHash2(key.key.s.str, key.key.s.length, 0);
- insert(&t->t, key, v, hash, &strhash, &streql);
+ key = strkey2(k, len);
+ tabkey = strcopy(key);
+ if (tabkey == 0) return false;
+
+ hash = MurmurHash2(key.str.str, key.str.len, 0);
+ insert(&t->t, key, tabkey, v, hash, &strhash, &streql);
return true;
}
@@ -4335,14 +4352,14 @@ bool upb_strtable_remove2(upb_strtable *t, const char *key, size_t len,
uint32_t hash = MurmurHash2(key, strlen(key), 0);
upb_tabkey tabkey;
if (rm(&t->t, strkey2(key, len), val, &tabkey, hash, &streql)) {
- free((void*)tabkey.s.str);
+ free((void*)tabkey);
return true;
} else {
return false;
}
}
-// Iteration
+/* Iteration */
static const upb_tabent *str_tabent(const upb_strtable_iter *i) {
return &i->t->t.entries[i->index];
@@ -4364,17 +4381,19 @@ bool upb_strtable_done(const upb_strtable_iter *i) {
const char *upb_strtable_iter_key(upb_strtable_iter *i) {
assert(!upb_strtable_done(i));
- return str_tabent(i)->key.s.str;
+ return upb_tabstr(str_tabent(i)->key, NULL);
}
size_t upb_strtable_iter_keylength(upb_strtable_iter *i) {
+ uint32_t len;
assert(!upb_strtable_done(i));
- return str_tabent(i)->key.s.length;
+ upb_tabstr(str_tabent(i)->key, &len);
+ return len;
}
upb_value upb_strtable_iter_value(const upb_strtable_iter *i) {
assert(!upb_strtable_done(i));
- return _upb_value_val(str_tabent(i)->val, i->t->t.ctype);
+ return _upb_value_val(str_tabent(i)->val.val, i->t->t.ctype);
}
void upb_strtable_iter_setdone(upb_strtable_iter *i) {
@@ -4391,20 +4410,20 @@ bool upb_strtable_iter_isequal(const upb_strtable_iter *i1,
/* upb_inttable ***************************************************************/
-// For inttables we use a hybrid structure where small keys are kept in an
-// array and large keys are put in the hash table.
+/* For inttables we use a hybrid structure where small keys are kept in an
+ * array and large keys are put in the hash table. */
-static uint32_t inthash(upb_tabkey key) { return upb_inthash(key.num); }
+static uint32_t inthash(upb_tabkey key) { return upb_inthash(key); }
static bool inteql(upb_tabkey k1, lookupkey_t k2) {
- return k1.num == k2.key.num;
+ return k1 == k2.num;
}
-static _upb_value *mutable_array(upb_inttable *t) {
- return (_upb_value*)t->array;
+static upb_tabval *mutable_array(upb_inttable *t) {
+ return (upb_tabval*)t->array;
}
-static _upb_value *inttable_val(upb_inttable *t, uintptr_t key) {
+static upb_tabval *inttable_val(upb_inttable *t, uintptr_t key) {
if (key < t->array_size) {
return upb_arrhas(t->array[key]) ? &(mutable_array(t)[key]) : NULL;
} else {
@@ -4414,7 +4433,7 @@ static _upb_value *inttable_val(upb_inttable *t, uintptr_t key) {
}
}
-static const _upb_value *inttable_val_const(const upb_inttable *t,
+static const upb_tabval *inttable_val_const(const upb_inttable *t,
uintptr_t key) {
return inttable_val((upb_inttable*)t, key);
}
@@ -4426,25 +4445,29 @@ size_t upb_inttable_count(const upb_inttable *t) {
static void check(upb_inttable *t) {
UPB_UNUSED(t);
#if defined(UPB_DEBUG_TABLE) && !defined(NDEBUG)
- // This check is very expensive (makes inserts/deletes O(N)).
- size_t count = 0;
- upb_inttable_iter i;
- upb_inttable_begin(&i, t);
- for(; !upb_inttable_done(&i); upb_inttable_next(&i), count++) {
- assert(upb_inttable_lookup(t, upb_inttable_iter_key(&i), NULL));
+ {
+ /* This check is very expensive (makes inserts/deletes O(N)). */
+ size_t count = 0;
+ upb_inttable_iter i;
+ upb_inttable_begin(&i, t);
+ for(; !upb_inttable_done(&i); upb_inttable_next(&i), count++) {
+ assert(upb_inttable_lookup(t, upb_inttable_iter_key(&i), NULL));
+ }
+ assert(count == upb_inttable_count(t));
}
- assert(count == upb_inttable_count(t));
#endif
}
bool upb_inttable_sizedinit(upb_inttable *t, upb_ctype_t ctype,
size_t asize, int hsize_lg2) {
+ size_t array_bytes;
+
if (!init(&t->t, ctype, hsize_lg2)) return false;
- // Always make the array part at least 1 long, so that we know key 0
- // won't be in the hash part, which simplifies things.
+ /* Always make the array part at least 1 long, so that we know key 0
+ * won't be in the hash part, which simplifies things. */
t->array_size = UPB_MAX(1, asize);
t->array_count = 0;
- size_t array_bytes = t->array_size * sizeof(upb_value);
+ array_bytes = t->array_size * sizeof(upb_value);
t->array = malloc(array_bytes);
if (!t->array) {
uninit(&t->t);
@@ -4465,24 +4488,32 @@ void upb_inttable_uninit(upb_inttable *t) {
}
bool upb_inttable_insert(upb_inttable *t, uintptr_t key, upb_value val) {
- assert(upb_arrhas(val.val));
+ /* XXX: Table can't store value (uint64_t)-1. Need to somehow statically
+ * guarantee that this is not necessary, or fix the limitation. */
+ upb_tabval tabval;
+ tabval.val = val.val;
+ UPB_UNUSED(tabval);
+ assert(upb_arrhas(tabval));
+
if (key < t->array_size) {
assert(!upb_arrhas(t->array[key]));
t->array_count++;
- mutable_array(t)[key] = val.val;
+ mutable_array(t)[key].val = val.val;
} else {
if (isfull(&t->t)) {
- // Need to resize the hash part, but we re-use the array part.
+ /* Need to resize the hash part, but we re-use the array part. */
+ size_t i;
upb_table new_table;
if (!init(&new_table, t->t.ctype, t->t.size_lg2 + 1))
return false;
- size_t i;
for (i = begin(&t->t); i < upb_table_size(&t->t); i = next(&t->t, i)) {
const upb_tabent *e = &t->t.entries[i];
+ uint32_t hash;
upb_value v;
- _upb_value_setval(&v, e->val, t->t.ctype);
- uint32_t hash = upb_inthash(e->key.num);
- insert(&new_table, intkey(e->key.num), v, hash, &inthash, &inteql);
+
+ _upb_value_setval(&v, e->val.val, t->t.ctype);
+ hash = upb_inthash(e->key);
+ insert(&new_table, intkey(e->key), e->key, v, hash, &inthash, &inteql);
}
assert(t->t.count == new_table.count);
@@ -4490,23 +4521,23 @@ bool upb_inttable_insert(upb_inttable *t, uintptr_t key, upb_value val) {
uninit(&t->t);
t->t = new_table;
}
- insert(&t->t, intkey(key), val, upb_inthash(key), &inthash, &inteql);
+ insert(&t->t, intkey(key), key, val, upb_inthash(key), &inthash, &inteql);
}
check(t);
return true;
}
bool upb_inttable_lookup(const upb_inttable *t, uintptr_t key, upb_value *v) {
- const _upb_value *table_v = inttable_val_const(t, key);
+ const upb_tabval *table_v = inttable_val_const(t, key);
if (!table_v) return false;
- if (v) _upb_value_setval(v, *table_v, t->t.ctype);
+ if (v) _upb_value_setval(v, table_v->val, t->t.ctype);
return true;
}
bool upb_inttable_replace(upb_inttable *t, uintptr_t key, upb_value val) {
- _upb_value *table_v = inttable_val(t, key);
+ upb_tabval *table_v = inttable_val(t, key);
if (!table_v) return false;
- *table_v = val.val;
+ table_v->val = val.val;
return true;
}
@@ -4514,11 +4545,11 @@ bool upb_inttable_remove(upb_inttable *t, uintptr_t key, upb_value *val) {
bool success;
if (key < t->array_size) {
if (upb_arrhas(t->array[key])) {
+ upb_tabval empty = UPB_TABVALUE_EMPTY_INIT;
t->array_count--;
if (val) {
- _upb_value_setval(val, t->array[key], t->t.ctype);
+ _upb_value_setval(val, t->array[key].val, t->t.ctype);
}
- _upb_value empty = UPB_ARRAY_EMPTYENT;
mutable_array(t)[key] = empty;
success = true;
} else {
@@ -4558,10 +4589,14 @@ bool upb_inttable_removeptr(upb_inttable *t, const void *key, upb_value *val) {
}
void upb_inttable_compact(upb_inttable *t) {
- // Create a power-of-two histogram of the table keys.
+ /* Create a power-of-two histogram of the table keys. */
int counts[UPB_MAXARRSIZE + 1] = {0};
uintptr_t max_key = 0;
upb_inttable_iter i;
+ size_t arr_size;
+ int arr_count;
+ upb_inttable new_t;
+
upb_inttable_begin(&i, t);
for (; !upb_inttable_done(&i); upb_inttable_next(&i)) {
uintptr_t key = upb_inttable_iter_key(&i);
@@ -4571,15 +4606,17 @@ void upb_inttable_compact(upb_inttable *t) {
counts[log2ceil(key)]++;
}
- size_t arr_size = 1;
- int arr_count = upb_inttable_count(t);
+ arr_size = 1;
+ arr_count = upb_inttable_count(t);
if (upb_inttable_count(t) >= max_key * MIN_DENSITY) {
- // We can put 100% of the entries in the array part.
+ /* We can put 100% of the entries in the array part. */
arr_size = max_key + 1;
} else {
- // Find the largest power of two that satisfies the MIN_DENSITY definition.
- for (int size_lg2 = ARRAY_SIZE(counts) - 1; size_lg2 > 1; size_lg2--) {
+ /* Find the largest power of two that satisfies the MIN_DENSITY
+ * definition. */
+ int size_lg2;
+ for (size_lg2 = ARRAY_SIZE(counts) - 1; size_lg2 > 1; size_lg2--) {
arr_size = 1 << size_lg2;
arr_count -= counts[size_lg2];
if (arr_count >= arr_size * MIN_DENSITY) {
@@ -4588,38 +4625,39 @@ void upb_inttable_compact(upb_inttable *t) {
}
}
- // Array part must always be at least 1 entry large to catch lookups of key
- // 0. Key 0 must always be in the array part because "0" in the hash part
- // denotes an empty entry.
+ /* Array part must always be at least 1 entry large to catch lookups of key
+ * 0. Key 0 must always be in the array part because "0" in the hash part
+ * denotes an empty entry. */
arr_size = UPB_MAX(arr_size, 1);
- // Insert all elements into new, perfectly-sized table.
- int hash_count = upb_inttable_count(t) - arr_count;
- int hash_size = hash_count ? (hash_count / MAX_LOAD) + 1 : 0;
- int hashsize_lg2 = log2ceil(hash_size);
- assert(hash_count >= 0);
-
- upb_inttable new_t;
- upb_inttable_sizedinit(&new_t, t->t.ctype, arr_size, hashsize_lg2);
- upb_inttable_begin(&i, t);
- for (; !upb_inttable_done(&i); upb_inttable_next(&i)) {
- uintptr_t k = upb_inttable_iter_key(&i);
- upb_inttable_insert(&new_t, k, upb_inttable_iter_value(&i));
+ {
+ /* Insert all elements into new, perfectly-sized table. */
+ int hash_count = upb_inttable_count(t) - arr_count;
+ int hash_size = hash_count ? (hash_count / MAX_LOAD) + 1 : 0;
+ int hashsize_lg2 = log2ceil(hash_size);
+
+ assert(hash_count >= 0);
+ upb_inttable_sizedinit(&new_t, t->t.ctype, arr_size, hashsize_lg2);
+ upb_inttable_begin(&i, t);
+ for (; !upb_inttable_done(&i); upb_inttable_next(&i)) {
+ uintptr_t k = upb_inttable_iter_key(&i);
+ upb_inttable_insert(&new_t, k, upb_inttable_iter_value(&i));
+ }
+ assert(new_t.array_size == arr_size);
+ assert(new_t.t.size_lg2 == hashsize_lg2);
}
- assert(new_t.array_size == arr_size);
- assert(new_t.t.size_lg2 == hashsize_lg2);
upb_inttable_uninit(t);
*t = new_t;
}
-// Iteration.
+/* Iteration. */
static const upb_tabent *int_tabent(const upb_inttable_iter *i) {
assert(!i->array_part);
return &i->t->t.entries[i->index];
}
-static _upb_value int_arrent(const upb_inttable_iter *i) {
+static upb_tabval int_arrent(const upb_inttable_iter *i) {
assert(i->array_part);
return i->t->array[i->index];
}
@@ -4658,13 +4696,13 @@ bool upb_inttable_done(const upb_inttable_iter *i) {
uintptr_t upb_inttable_iter_key(const upb_inttable_iter *i) {
assert(!upb_inttable_done(i));
- return i->array_part ? i->index : int_tabent(i)->key.num;
+ return i->array_part ? i->index : int_tabent(i)->key;
}
upb_value upb_inttable_iter_value(const upb_inttable_iter *i) {
assert(!upb_inttable_done(i));
return _upb_value_val(
- i->array_part ? i->t->array[i->index] : int_tabent(i)->val,
+ i->array_part ? i->t->array[i->index].val : int_tabent(i)->val.val,
i->t->t.ctype);
}
@@ -4682,26 +4720,26 @@ bool upb_inttable_iter_isequal(const upb_inttable_iter *i1,
}
#ifdef UPB_UNALIGNED_READS_OK
-//-----------------------------------------------------------------------------
-// MurmurHash2, by Austin Appleby (released as public domain).
-// Reformatted and C99-ified by Joshua Haberman.
-// Note - This code makes a few assumptions about how your machine behaves -
-// 1. We can read a 4-byte value from any address without crashing
-// 2. sizeof(int) == 4 (in upb this limitation is removed by using uint32_t
-// And it has a few limitations -
-// 1. It will not work incrementally.
-// 2. It will not produce the same results on little-endian and big-endian
-// machines.
+/* -----------------------------------------------------------------------------
+ * MurmurHash2, by Austin Appleby (released as public domain).
+ * Reformatted and C99-ified by Joshua Haberman.
+ * Note - This code makes a few assumptions about how your machine behaves -
+ * 1. We can read a 4-byte value from any address without crashing
+ * 2. sizeof(int) == 4 (in upb this limitation is removed by using uint32_t
+ * And it has a few limitations -
+ * 1. It will not work incrementally.
+ * 2. It will not produce the same results on little-endian and big-endian
+ * machines. */
uint32_t MurmurHash2(const void *key, size_t len, uint32_t seed) {
- // 'm' and 'r' are mixing constants generated offline.
- // They're not really 'magic', they just happen to work well.
+ /* 'm' and 'r' are mixing constants generated offline.
+ * They're not really 'magic', they just happen to work well. */
const uint32_t m = 0x5bd1e995;
const int32_t r = 24;
- // Initialize the hash to a 'random' value
+ /* Initialize the hash to a 'random' value */
uint32_t h = seed ^ len;
- // Mix 4 bytes at a time into the hash
+ /* Mix 4 bytes at a time into the hash */
const uint8_t * data = (const uint8_t *)key;
while(len >= 4) {
uint32_t k = *(uint32_t *)data;
@@ -4717,15 +4755,15 @@ uint32_t MurmurHash2(const void *key, size_t len, uint32_t seed) {
len -= 4;
}
- // Handle the last few bytes of the input array
+ /* Handle the last few bytes of the input array */
switch(len) {
case 3: h ^= data[2] << 16;
case 2: h ^= data[1] << 8;
case 1: h ^= data[0]; h *= m;
};
- // Do a few final mixes of the hash to ensure the last few
- // bytes are well-incorporated.
+ /* Do a few final mixes of the hash to ensure the last few
+ * bytes are well-incorporated. */
h ^= h >> 13;
h *= m;
h ^= h >> 15;
@@ -4733,13 +4771,13 @@ uint32_t MurmurHash2(const void *key, size_t len, uint32_t seed) {
return h;
}
-#else // !UPB_UNALIGNED_READS_OK
+#else /* !UPB_UNALIGNED_READS_OK */
-//-----------------------------------------------------------------------------
-// MurmurHashAligned2, by Austin Appleby
-// Same algorithm as MurmurHash2, but only does aligned reads - should be safer
-// on certain platforms.
-// Performance will be lower than MurmurHash2
+/* -----------------------------------------------------------------------------
+ * MurmurHashAligned2, by Austin Appleby
+ * Same algorithm as MurmurHash2, but only does aligned reads - should be safer
+ * on certain platforms.
+ * Performance will be lower than MurmurHash2 */
#define MIX(h,k,m) { k *= m; k ^= k >> r; k *= m; h *= m; h ^= k; }
@@ -4751,8 +4789,10 @@ uint32_t MurmurHash2(const void * key, size_t len, uint32_t seed) {
uint8_t align = (uintptr_t)data & 3;
if(align && (len >= 4)) {
- // Pre-load the temp registers
+ /* Pre-load the temp registers */
uint32_t t = 0, d = 0;
+ int32_t sl;
+ int32_t sr;
switch(align) {
case 1: t |= data[2] << 16;
@@ -4765,16 +4805,18 @@ uint32_t MurmurHash2(const void * key, size_t len, uint32_t seed) {
data += 4-align;
len -= 4-align;
- int32_t sl = 8 * (4-align);
- int32_t sr = 8 * align;
+ sl = 8 * (4-align);
+ sr = 8 * align;
- // Mix
+ /* Mix */
while(len >= 4) {
+ uint32_t k;
+
d = *(uint32_t *)data;
t = (t >> sr) | (d << sl);
- uint32_t k = t;
+ k = t;
MIX(h,k,m);
@@ -4784,25 +4826,27 @@ uint32_t MurmurHash2(const void * key, size_t len, uint32_t seed) {
len -= 4;
}
- // Handle leftover data in temp registers
+ /* Handle leftover data in temp registers */
d = 0;
if(len >= align) {
+ uint32_t k;
+
switch(align) {
case 3: d |= data[2] << 16;
case 2: d |= data[1] << 8;
case 1: d |= data[0];
}
- uint32_t k = (t >> sr) | (d << sl);
+ k = (t >> sr) | (d << sl);
MIX(h,k,m);
data += align;
len -= align;
- //----------
- // Handle tail bytes
+ /* ----------
+ * Handle tail bytes */
switch(len) {
case 3: h ^= data[2] << 16;
@@ -4833,8 +4877,8 @@ uint32_t MurmurHash2(const void * key, size_t len, uint32_t seed) {
len -= 4;
}
- //----------
- // Handle tail bytes
+ /* ----------
+ * Handle tail bytes */
switch(len) {
case 3: h ^= data[2] << 16;
@@ -4851,7 +4895,7 @@ uint32_t MurmurHash2(const void * key, size_t len, uint32_t seed) {
}
#undef MIX
-#endif // UPB_UNALIGNED_READS_OK
+#endif /* UPB_UNALIGNED_READS_OK */
/*
* upb - a minimalist implementation of protocol buffers.
*
@@ -4873,10 +4917,10 @@ bool upb_dumptostderr(void *closure, const upb_status* status) {
return false;
}
-// Guarantee null-termination and provide ellipsis truncation.
-// It may be tempting to "optimize" this by initializing these final
-// four bytes up-front and then being careful never to overwrite them,
-// this is safer and simpler.
+/* Guarantee null-termination and provide ellipsis truncation.
+ * It may be tempting to "optimize" this by initializing these final
+ * four bytes up-front and then being careful never to overwrite them,
+ * this is safer and simpler. */
static void nullz(upb_status *status) {
const char *ellipsis = "...";
size_t len = strlen(ellipsis);
@@ -4918,7 +4962,7 @@ void upb_status_seterrf(upb_status *status, const char *fmt, ...) {
void upb_status_vseterrf(upb_status *status, const char *fmt, va_list args) {
if (!status) return;
status->ok_ = false;
- vsnprintf(status->msg, sizeof(status->msg), fmt, args);
+ _upb_vsnprintf(status->msg, sizeof(status->msg), fmt, args);
nullz(status);
}
@@ -4935,9 +4979,9 @@ void upb_status_copy(upb_status *to, const upb_status *from) {
if (!to) return;
*to = *from;
}
-// This file was generated by upbc (the upb compiler).
-// Do not edit -- your changes will be discarded when the file is
-// regenerated.
+/* This file was generated by upbc (the upb compiler).
+ * Do not edit -- your changes will be discarded when the file is
+ * regenerated. */
static const upb_msgdef msgs[20];
@@ -4945,7 +4989,7 @@ static const upb_fielddef fields[81];
static const upb_enumdef enums[4];
static const upb_tabent strentries[236];
static const upb_tabent intentries[14];
-static const _upb_value arrays[232];
+static const upb_tabval arrays[232];
#ifdef UPB_DEBUG_REFS
static upb_inttable reftables[212];
@@ -4978,21 +5022,21 @@ static const upb_fielddef fields[81] = {
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "aggregate_value", 8, &msgs[18], NULL, 15, 6, {0},&reftables[40], &reftables[41]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_BOOL, 0, false, false, false, false, "allow_alias", 2, &msgs[3], NULL, 6, 1, {0},&reftables[42], &reftables[43]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_BOOL, 0, false, false, false, false, "cc_generic_services", 16, &msgs[10], NULL, 17, 6, {0},&reftables[44], &reftables[45]),
- UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_ENUM, 0, false, false, false, false, "ctype", 1, &msgs[7], UPB_UPCAST(&enums[2]), 6, 1, {0},&reftables[46], &reftables[47]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_ENUM, 0, false, false, false, false, "ctype", 1, &msgs[7], (const upb_def*)(&enums[2]), 6, 1, {0},&reftables[46], &reftables[47]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "default_value", 7, &msgs[6], NULL, 16, 7, {0},&reftables[48], &reftables[49]),
UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_STRING, 0, false, false, false, false, "dependency", 3, &msgs[8], NULL, 30, 8, {0},&reftables[50], &reftables[51]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_BOOL, 0, false, false, false, false, "deprecated", 3, &msgs[7], NULL, 8, 3, {0},&reftables[52], &reftables[53]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_DOUBLE, 0, false, false, false, false, "double_value", 6, &msgs[18], NULL, 11, 4, {0},&reftables[54], &reftables[55]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_INT32, UPB_INTFMT_VARIABLE, false, false, false, false, "end", 2, &msgs[1], NULL, 3, 1, {0},&reftables[56], &reftables[57]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "enum_type", 4, &msgs[0], UPB_UPCAST(&msgs[2]), 16, 2, {0},&reftables[58], &reftables[59]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "enum_type", 5, &msgs[8], UPB_UPCAST(&msgs[2]), 13, 1, {0},&reftables[60], &reftables[61]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "enum_type", 4, &msgs[0], (const upb_def*)(&msgs[2]), 16, 2, {0},&reftables[58], &reftables[59]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "enum_type", 5, &msgs[8], (const upb_def*)(&msgs[2]), 13, 1, {0},&reftables[60], &reftables[61]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "experimental_map_key", 9, &msgs[7], NULL, 10, 5, {0},&reftables[62], &reftables[63]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "extendee", 2, &msgs[6], NULL, 7, 2, {0},&reftables[64], &reftables[65]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "extension", 7, &msgs[8], UPB_UPCAST(&msgs[6]), 19, 3, {0},&reftables[66], &reftables[67]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "extension", 6, &msgs[0], UPB_UPCAST(&msgs[6]), 22, 4, {0},&reftables[68], &reftables[69]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "extension_range", 5, &msgs[0], UPB_UPCAST(&msgs[1]), 19, 3, {0},&reftables[70], &reftables[71]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "field", 2, &msgs[0], UPB_UPCAST(&msgs[6]), 10, 0, {0},&reftables[72], &reftables[73]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "file", 1, &msgs[9], UPB_UPCAST(&msgs[8]), 5, 0, {0},&reftables[74], &reftables[75]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "extension", 7, &msgs[8], (const upb_def*)(&msgs[6]), 19, 3, {0},&reftables[66], &reftables[67]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "extension", 6, &msgs[0], (const upb_def*)(&msgs[6]), 22, 4, {0},&reftables[68], &reftables[69]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "extension_range", 5, &msgs[0], (const upb_def*)(&msgs[1]), 19, 3, {0},&reftables[70], &reftables[71]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "field", 2, &msgs[0], (const upb_def*)(&msgs[6]), 10, 0, {0},&reftables[72], &reftables[73]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "file", 1, &msgs[9], (const upb_def*)(&msgs[8]), 5, 0, {0},&reftables[74], &reftables[75]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "go_package", 11, &msgs[10], NULL, 14, 5, {0},&reftables[76], &reftables[77]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "identifier_value", 3, &msgs[18], NULL, 6, 1, {0},&reftables[78], &reftables[79]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "input_type", 2, &msgs[12], NULL, 7, 2, {0},&reftables[80], &reftables[81]),
@@ -5002,16 +5046,16 @@ static const upb_fielddef fields[81] = {
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_BOOL, 0, false, false, false, false, "java_multiple_files", 10, &msgs[10], NULL, 13, 4, {0},&reftables[88], &reftables[89]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "java_outer_classname", 8, &msgs[10], NULL, 9, 2, {0},&reftables[90], &reftables[91]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "java_package", 1, &msgs[10], NULL, 6, 1, {0},&reftables[92], &reftables[93]),
- UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_ENUM, 0, false, false, false, false, "label", 4, &msgs[6], UPB_UPCAST(&enums[0]), 11, 4, {0},&reftables[94], &reftables[95]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_ENUM, 0, false, false, false, false, "label", 4, &msgs[6], (const upb_def*)(&enums[0]), 11, 4, {0},&reftables[94], &reftables[95]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_BOOL, 0, false, false, false, false, "lazy", 5, &msgs[7], NULL, 9, 4, {0},&reftables[96], &reftables[97]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "leading_comments", 3, &msgs[17], NULL, 8, 2, {0},&reftables[98], &reftables[99]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "location", 1, &msgs[16], UPB_UPCAST(&msgs[17]), 5, 0, {0},&reftables[100], &reftables[101]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "location", 1, &msgs[16], (const upb_def*)(&msgs[17]), 5, 0, {0},&reftables[100], &reftables[101]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_BOOL, 0, false, false, false, false, "message_set_wire_format", 1, &msgs[11], NULL, 6, 1, {0},&reftables[102], &reftables[103]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "message_type", 4, &msgs[8], UPB_UPCAST(&msgs[0]), 10, 0, {0},&reftables[104], &reftables[105]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "method", 2, &msgs[14], UPB_UPCAST(&msgs[12]), 6, 0, {0},&reftables[106], &reftables[107]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "message_type", 4, &msgs[8], (const upb_def*)(&msgs[0]), 10, 0, {0},&reftables[104], &reftables[105]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "method", 2, &msgs[14], (const upb_def*)(&msgs[12]), 6, 0, {0},&reftables[106], &reftables[107]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "name", 1, &msgs[8], NULL, 22, 6, {0},&reftables[108], &reftables[109]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "name", 1, &msgs[14], NULL, 8, 2, {0},&reftables[110], &reftables[111]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "name", 2, &msgs[18], UPB_UPCAST(&msgs[19]), 5, 0, {0},&reftables[112], &reftables[113]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "name", 2, &msgs[18], (const upb_def*)(&msgs[19]), 5, 0, {0},&reftables[112], &reftables[113]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "name", 1, &msgs[4], NULL, 4, 1, {0},&reftables[114], &reftables[115]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "name", 1, &msgs[0], NULL, 24, 6, {0},&reftables[116], &reftables[117]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "name", 1, &msgs[12], NULL, 4, 1, {0},&reftables[118], &reftables[119]),
@@ -5019,18 +5063,18 @@ static const upb_fielddef fields[81] = {
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "name", 1, &msgs[6], NULL, 4, 1, {0},&reftables[122], &reftables[123]),
UPB_FIELDDEF_INIT(UPB_LABEL_REQUIRED, UPB_TYPE_STRING, 0, false, false, false, false, "name_part", 1, &msgs[19], NULL, 2, 0, {0},&reftables[124], &reftables[125]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_INT64, UPB_INTFMT_VARIABLE, false, false, false, false, "negative_int_value", 5, &msgs[18], NULL, 10, 3, {0},&reftables[126], &reftables[127]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "nested_type", 3, &msgs[0], UPB_UPCAST(&msgs[0]), 13, 1, {0},&reftables[128], &reftables[129]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "nested_type", 3, &msgs[0], (const upb_def*)(&msgs[0]), 13, 1, {0},&reftables[128], &reftables[129]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_BOOL, 0, false, false, false, false, "no_standard_descriptor_accessor", 2, &msgs[11], NULL, 7, 2, {0},&reftables[130], &reftables[131]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_INT32, UPB_INTFMT_VARIABLE, false, false, false, false, "number", 3, &msgs[6], NULL, 10, 3, {0},&reftables[132], &reftables[133]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_INT32, UPB_INTFMT_VARIABLE, false, false, false, false, "number", 2, &msgs[4], NULL, 7, 2, {0},&reftables[134], &reftables[135]),
- UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_ENUM, 0, false, false, false, false, "optimize_for", 9, &msgs[10], UPB_UPCAST(&enums[3]), 12, 3, {0},&reftables[136], &reftables[137]),
- UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 7, &msgs[0], UPB_UPCAST(&msgs[11]), 23, 5, {0},&reftables[138], &reftables[139]),
- UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 3, &msgs[2], UPB_UPCAST(&msgs[3]), 7, 1, {0},&reftables[140], &reftables[141]),
- UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 8, &msgs[6], UPB_UPCAST(&msgs[7]), 3, 0, {0},&reftables[142], &reftables[143]),
- UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 3, &msgs[4], UPB_UPCAST(&msgs[5]), 3, 0, {0},&reftables[144], &reftables[145]),
- UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 8, &msgs[8], UPB_UPCAST(&msgs[10]), 20, 4, {0},&reftables[146], &reftables[147]),
- UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 3, &msgs[14], UPB_UPCAST(&msgs[15]), 7, 1, {0},&reftables[148], &reftables[149]),
- UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 4, &msgs[12], UPB_UPCAST(&msgs[13]), 3, 0, {0},&reftables[150], &reftables[151]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_ENUM, 0, false, false, false, false, "optimize_for", 9, &msgs[10], (const upb_def*)(&enums[3]), 12, 3, {0},&reftables[136], &reftables[137]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 7, &msgs[0], (const upb_def*)(&msgs[11]), 23, 5, {0},&reftables[138], &reftables[139]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 3, &msgs[2], (const upb_def*)(&msgs[3]), 7, 1, {0},&reftables[140], &reftables[141]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 8, &msgs[6], (const upb_def*)(&msgs[7]), 3, 0, {0},&reftables[142], &reftables[143]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 3, &msgs[4], (const upb_def*)(&msgs[5]), 3, 0, {0},&reftables[144], &reftables[145]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 8, &msgs[8], (const upb_def*)(&msgs[10]), 20, 4, {0},&reftables[146], &reftables[147]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 3, &msgs[14], (const upb_def*)(&msgs[15]), 7, 1, {0},&reftables[148], &reftables[149]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "options", 4, &msgs[12], (const upb_def*)(&msgs[13]), 3, 0, {0},&reftables[150], &reftables[151]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "output_type", 3, &msgs[12], NULL, 10, 3, {0},&reftables[152], &reftables[153]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "package", 2, &msgs[8], NULL, 25, 7, {0},&reftables[154], &reftables[155]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_BOOL, 0, false, false, false, false, "packed", 2, &msgs[7], NULL, 7, 2, {0},&reftables[156], &reftables[157]),
@@ -5038,22 +5082,22 @@ static const upb_fielddef fields[81] = {
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_UINT64, UPB_INTFMT_VARIABLE, false, false, false, false, "positive_int_value", 4, &msgs[18], NULL, 9, 2, {0},&reftables[160], &reftables[161]),
UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_INT32, UPB_INTFMT_VARIABLE, false, false, false, false, "public_dependency", 10, &msgs[8], NULL, 35, 9, {0},&reftables[162], &reftables[163]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_BOOL, 0, false, false, false, false, "py_generic_services", 18, &msgs[10], NULL, 19, 8, {0},&reftables[164], &reftables[165]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "service", 6, &msgs[8], UPB_UPCAST(&msgs[14]), 16, 2, {0},&reftables[166], &reftables[167]),
- UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "source_code_info", 9, &msgs[8], UPB_UPCAST(&msgs[16]), 21, 5, {0},&reftables[168], &reftables[169]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "service", 6, &msgs[8], (const upb_def*)(&msgs[14]), 16, 2, {0},&reftables[166], &reftables[167]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_MESSAGE, 0, false, false, false, false, "source_code_info", 9, &msgs[8], (const upb_def*)(&msgs[16]), 21, 5, {0},&reftables[168], &reftables[169]),
UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_INT32, UPB_INTFMT_VARIABLE, false, false, false, true, "span", 2, &msgs[17], NULL, 7, 1, {0},&reftables[170], &reftables[171]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_INT32, UPB_INTFMT_VARIABLE, false, false, false, false, "start", 1, &msgs[1], NULL, 2, 0, {0},&reftables[172], &reftables[173]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_BYTES, 0, false, false, false, false, "string_value", 7, &msgs[18], NULL, 12, 5, {0},&reftables[174], &reftables[175]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "trailing_comments", 4, &msgs[17], NULL, 11, 3, {0},&reftables[176], &reftables[177]),
- UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_ENUM, 0, false, false, false, false, "type", 5, &msgs[6], UPB_UPCAST(&enums[1]), 12, 5, {0},&reftables[178], &reftables[179]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_ENUM, 0, false, false, false, false, "type", 5, &msgs[6], (const upb_def*)(&enums[1]), 12, 5, {0},&reftables[178], &reftables[179]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_STRING, 0, false, false, false, false, "type_name", 6, &msgs[6], NULL, 13, 6, {0},&reftables[180], &reftables[181]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[5], UPB_UPCAST(&msgs[18]), 5, 0, {0},&reftables[182], &reftables[183]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[15], UPB_UPCAST(&msgs[18]), 5, 0, {0},&reftables[184], &reftables[185]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[3], UPB_UPCAST(&msgs[18]), 5, 0, {0},&reftables[186], &reftables[187]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[13], UPB_UPCAST(&msgs[18]), 5, 0, {0},&reftables[188], &reftables[189]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[10], UPB_UPCAST(&msgs[18]), 5, 0, {0},&reftables[190], &reftables[191]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[11], UPB_UPCAST(&msgs[18]), 5, 0, {0},&reftables[192], &reftables[193]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[7], UPB_UPCAST(&msgs[18]), 5, 0, {0},&reftables[194], &reftables[195]),
- UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "value", 2, &msgs[2], UPB_UPCAST(&msgs[4]), 6, 0, {0},&reftables[196], &reftables[197]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[5], (const upb_def*)(&msgs[18]), 5, 0, {0},&reftables[182], &reftables[183]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[15], (const upb_def*)(&msgs[18]), 5, 0, {0},&reftables[184], &reftables[185]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[3], (const upb_def*)(&msgs[18]), 5, 0, {0},&reftables[186], &reftables[187]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[13], (const upb_def*)(&msgs[18]), 5, 0, {0},&reftables[188], &reftables[189]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[10], (const upb_def*)(&msgs[18]), 5, 0, {0},&reftables[190], &reftables[191]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[11], (const upb_def*)(&msgs[18]), 5, 0, {0},&reftables[192], &reftables[193]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "uninterpreted_option", 999, &msgs[7], (const upb_def*)(&msgs[18]), 5, 0, {0},&reftables[194], &reftables[195]),
+ UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_MESSAGE, 0, false, false, false, false, "value", 2, &msgs[2], (const upb_def*)(&msgs[4]), 6, 0, {0},&reftables[196], &reftables[197]),
UPB_FIELDDEF_INIT(UPB_LABEL_OPTIONAL, UPB_TYPE_BOOL, 0, false, false, false, false, "weak", 10, &msgs[7], NULL, 13, 6, {0},&reftables[198], &reftables[199]),
UPB_FIELDDEF_INIT(UPB_LABEL_REPEATED, UPB_TYPE_INT32, UPB_INTFMT_VARIABLE, false, false, false, false, "weak_dependency", 11, &msgs[8], NULL, 38, 10, {0},&reftables[200], &reftables[201]),
};
@@ -5066,494 +5110,494 @@ static const upb_enumdef enums[4] = {
};
static const upb_tabent strentries[236] = {
- {UPB_TABKEY_STR("extension"), UPB_VALUE_INIT_CONSTPTR(&fields[14]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("name"), UPB_VALUE_INIT_CONSTPTR(&fields[38]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("field"), UPB_VALUE_INIT_CONSTPTR(&fields[16]), NULL},
- {UPB_TABKEY_STR("extension_range"), UPB_VALUE_INIT_CONSTPTR(&fields[15]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("nested_type"), UPB_VALUE_INIT_CONSTPTR(&fields[44]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("options"), UPB_VALUE_INIT_CONSTPTR(&fields[49]), NULL},
- {UPB_TABKEY_STR("enum_type"), UPB_VALUE_INIT_CONSTPTR(&fields[9]), &strentries[14]},
- {UPB_TABKEY_STR("start"), UPB_VALUE_INIT_CONSTPTR(&fields[66]), NULL},
- {UPB_TABKEY_STR("end"), UPB_VALUE_INIT_CONSTPTR(&fields[8]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("value"), UPB_VALUE_INIT_CONSTPTR(&fields[78]), NULL},
- {UPB_TABKEY_STR("options"), UPB_VALUE_INIT_CONSTPTR(&fields[50]), NULL},
- {UPB_TABKEY_STR("name"), UPB_VALUE_INIT_CONSTPTR(&fields[40]), &strentries[22]},
- {UPB_TABKEY_STR("uninterpreted_option"), UPB_VALUE_INIT_CONSTPTR(&fields[73]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("allow_alias"), UPB_VALUE_INIT_CONSTPTR(&fields[1]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("number"), UPB_VALUE_INIT_CONSTPTR(&fields[47]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("options"), UPB_VALUE_INIT_CONSTPTR(&fields[52]), NULL},
- {UPB_TABKEY_STR("name"), UPB_VALUE_INIT_CONSTPTR(&fields[37]), &strentries[30]},
- {UPB_TABKEY_STR("uninterpreted_option"), UPB_VALUE_INIT_CONSTPTR(&fields[71]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("label"), UPB_VALUE_INIT_CONSTPTR(&fields[27]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("name"), UPB_VALUE_INIT_CONSTPTR(&fields[41]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("number"), UPB_VALUE_INIT_CONSTPTR(&fields[46]), &strentries[49]},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("type_name"), UPB_VALUE_INIT_CONSTPTR(&fields[70]), NULL},
- {UPB_TABKEY_STR("extendee"), UPB_VALUE_INIT_CONSTPTR(&fields[12]), NULL},
- {UPB_TABKEY_STR("type"), UPB_VALUE_INIT_CONSTPTR(&fields[69]), &strentries[48]},
- {UPB_TABKEY_STR("default_value"), UPB_VALUE_INIT_CONSTPTR(&fields[4]), NULL},
- {UPB_TABKEY_STR("options"), UPB_VALUE_INIT_CONSTPTR(&fields[51]), NULL},
- {UPB_TABKEY_STR("experimental_map_key"), UPB_VALUE_INIT_CONSTPTR(&fields[11]), &strentries[67]},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("weak"), UPB_VALUE_INIT_CONSTPTR(&fields[79]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("packed"), UPB_VALUE_INIT_CONSTPTR(&fields[58]), NULL},
- {UPB_TABKEY_STR("lazy"), UPB_VALUE_INIT_CONSTPTR(&fields[28]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("ctype"), UPB_VALUE_INIT_CONSTPTR(&fields[3]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("deprecated"), UPB_VALUE_INIT_CONSTPTR(&fields[6]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("uninterpreted_option"), UPB_VALUE_INIT_CONSTPTR(&fields[77]), NULL},
- {UPB_TABKEY_STR("extension"), UPB_VALUE_INIT_CONSTPTR(&fields[13]), NULL},
- {UPB_TABKEY_STR("weak_dependency"), UPB_VALUE_INIT_CONSTPTR(&fields[80]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("name"), UPB_VALUE_INIT_CONSTPTR(&fields[34]), NULL},
- {UPB_TABKEY_STR("service"), UPB_VALUE_INIT_CONSTPTR(&fields[63]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("source_code_info"), UPB_VALUE_INIT_CONSTPTR(&fields[64]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("dependency"), UPB_VALUE_INIT_CONSTPTR(&fields[5]), NULL},
- {UPB_TABKEY_STR("message_type"), UPB_VALUE_INIT_CONSTPTR(&fields[32]), NULL},
- {UPB_TABKEY_STR("package"), UPB_VALUE_INIT_CONSTPTR(&fields[57]), NULL},
- {UPB_TABKEY_STR("options"), UPB_VALUE_INIT_CONSTPTR(&fields[53]), &strentries[82]},
- {UPB_TABKEY_STR("enum_type"), UPB_VALUE_INIT_CONSTPTR(&fields[10]), NULL},
- {UPB_TABKEY_STR("public_dependency"), UPB_VALUE_INIT_CONSTPTR(&fields[61]), &strentries[81]},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("file"), UPB_VALUE_INIT_CONSTPTR(&fields[17]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("uninterpreted_option"), UPB_VALUE_INIT_CONSTPTR(&fields[75]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("cc_generic_services"), UPB_VALUE_INIT_CONSTPTR(&fields[2]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("java_multiple_files"), UPB_VALUE_INIT_CONSTPTR(&fields[24]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("java_generic_services"), UPB_VALUE_INIT_CONSTPTR(&fields[23]), &strentries[102]},
- {UPB_TABKEY_STR("java_generate_equals_and_hash"), UPB_VALUE_INIT_CONSTPTR(&fields[22]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("go_package"), UPB_VALUE_INIT_CONSTPTR(&fields[18]), NULL},
- {UPB_TABKEY_STR("java_package"), UPB_VALUE_INIT_CONSTPTR(&fields[26]), NULL},
- {UPB_TABKEY_STR("optimize_for"), UPB_VALUE_INIT_CONSTPTR(&fields[48]), NULL},
- {UPB_TABKEY_STR("py_generic_services"), UPB_VALUE_INIT_CONSTPTR(&fields[62]), NULL},
- {UPB_TABKEY_STR("java_outer_classname"), UPB_VALUE_INIT_CONSTPTR(&fields[25]), NULL},
- {UPB_TABKEY_STR("message_set_wire_format"), UPB_VALUE_INIT_CONSTPTR(&fields[31]), &strentries[106]},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("uninterpreted_option"), UPB_VALUE_INIT_CONSTPTR(&fields[76]), NULL},
- {UPB_TABKEY_STR("no_standard_descriptor_accessor"), UPB_VALUE_INIT_CONSTPTR(&fields[45]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("name"), UPB_VALUE_INIT_CONSTPTR(&fields[39]), NULL},
- {UPB_TABKEY_STR("input_type"), UPB_VALUE_INIT_CONSTPTR(&fields[20]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("output_type"), UPB_VALUE_INIT_CONSTPTR(&fields[56]), NULL},
- {UPB_TABKEY_STR("options"), UPB_VALUE_INIT_CONSTPTR(&fields[55]), NULL},
- {UPB_TABKEY_STR("uninterpreted_option"), UPB_VALUE_INIT_CONSTPTR(&fields[74]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("options"), UPB_VALUE_INIT_CONSTPTR(&fields[54]), &strentries[122]},
- {UPB_TABKEY_STR("method"), UPB_VALUE_INIT_CONSTPTR(&fields[33]), NULL},
- {UPB_TABKEY_STR("name"), UPB_VALUE_INIT_CONSTPTR(&fields[35]), &strentries[121]},
- {UPB_TABKEY_STR("uninterpreted_option"), UPB_VALUE_INIT_CONSTPTR(&fields[72]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("location"), UPB_VALUE_INIT_CONSTPTR(&fields[30]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("span"), UPB_VALUE_INIT_CONSTPTR(&fields[65]), &strentries[139]},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("trailing_comments"), UPB_VALUE_INIT_CONSTPTR(&fields[68]), NULL},
- {UPB_TABKEY_STR("leading_comments"), UPB_VALUE_INIT_CONSTPTR(&fields[29]), &strentries[137]},
- {UPB_TABKEY_STR("path"), UPB_VALUE_INIT_CONSTPTR(&fields[59]), NULL},
- {UPB_TABKEY_STR("double_value"), UPB_VALUE_INIT_CONSTPTR(&fields[7]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("name"), UPB_VALUE_INIT_CONSTPTR(&fields[36]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("negative_int_value"), UPB_VALUE_INIT_CONSTPTR(&fields[43]), NULL},
- {UPB_TABKEY_STR("aggregate_value"), UPB_VALUE_INIT_CONSTPTR(&fields[0]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("positive_int_value"), UPB_VALUE_INIT_CONSTPTR(&fields[60]), NULL},
- {UPB_TABKEY_STR("identifier_value"), UPB_VALUE_INIT_CONSTPTR(&fields[19]), NULL},
- {UPB_TABKEY_STR("string_value"), UPB_VALUE_INIT_CONSTPTR(&fields[67]), &strentries[154]},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("is_extension"), UPB_VALUE_INIT_CONSTPTR(&fields[21]), NULL},
- {UPB_TABKEY_STR("name_part"), UPB_VALUE_INIT_CONSTPTR(&fields[42]), NULL},
- {UPB_TABKEY_STR("LABEL_REQUIRED"), UPB_VALUE_INIT_INT32(2), &strentries[162]},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("LABEL_REPEATED"), UPB_VALUE_INIT_INT32(3), NULL},
- {UPB_TABKEY_STR("LABEL_OPTIONAL"), UPB_VALUE_INIT_INT32(1), NULL},
- {UPB_TABKEY_STR("TYPE_FIXED64"), UPB_VALUE_INIT_INT32(6), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("TYPE_STRING"), UPB_VALUE_INIT_INT32(9), NULL},
- {UPB_TABKEY_STR("TYPE_FLOAT"), UPB_VALUE_INIT_INT32(2), &strentries[193]},
- {UPB_TABKEY_STR("TYPE_DOUBLE"), UPB_VALUE_INIT_INT32(1), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("TYPE_INT32"), UPB_VALUE_INIT_INT32(5), NULL},
- {UPB_TABKEY_STR("TYPE_SFIXED32"), UPB_VALUE_INIT_INT32(15), NULL},
- {UPB_TABKEY_STR("TYPE_FIXED32"), UPB_VALUE_INIT_INT32(7), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("TYPE_MESSAGE"), UPB_VALUE_INIT_INT32(11), &strentries[194]},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("TYPE_INT64"), UPB_VALUE_INIT_INT32(3), &strentries[191]},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("TYPE_ENUM"), UPB_VALUE_INIT_INT32(14), NULL},
- {UPB_TABKEY_STR("TYPE_UINT32"), UPB_VALUE_INIT_INT32(13), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("TYPE_UINT64"), UPB_VALUE_INIT_INT32(4), &strentries[190]},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("TYPE_SFIXED64"), UPB_VALUE_INIT_INT32(16), NULL},
- {UPB_TABKEY_STR("TYPE_BYTES"), UPB_VALUE_INIT_INT32(12), NULL},
- {UPB_TABKEY_STR("TYPE_SINT64"), UPB_VALUE_INIT_INT32(18), NULL},
- {UPB_TABKEY_STR("TYPE_BOOL"), UPB_VALUE_INIT_INT32(8), NULL},
- {UPB_TABKEY_STR("TYPE_GROUP"), UPB_VALUE_INIT_INT32(10), NULL},
- {UPB_TABKEY_STR("TYPE_SINT32"), UPB_VALUE_INIT_INT32(17), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("CORD"), UPB_VALUE_INIT_INT32(1), NULL},
- {UPB_TABKEY_STR("STRING"), UPB_VALUE_INIT_INT32(0), &strentries[197]},
- {UPB_TABKEY_STR("STRING_PIECE"), UPB_VALUE_INIT_INT32(2), NULL},
- {UPB_TABKEY_STR("CODE_SIZE"), UPB_VALUE_INIT_INT32(2), NULL},
- {UPB_TABKEY_STR("SPEED"), UPB_VALUE_INIT_INT32(1), &strentries[203]},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("LITE_RUNTIME"), UPB_VALUE_INIT_INT32(3), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("google.protobuf.SourceCodeInfo.Location"), UPB_VALUE_INIT_CONSTPTR(&msgs[17]), NULL},
- {UPB_TABKEY_STR("google.protobuf.UninterpretedOption"), UPB_VALUE_INIT_CONSTPTR(&msgs[18]), NULL},
- {UPB_TABKEY_STR("google.protobuf.FileDescriptorProto"), UPB_VALUE_INIT_CONSTPTR(&msgs[8]), NULL},
- {UPB_TABKEY_STR("google.protobuf.MethodDescriptorProto"), UPB_VALUE_INIT_CONSTPTR(&msgs[12]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("google.protobuf.EnumValueOptions"), UPB_VALUE_INIT_CONSTPTR(&msgs[5]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("google.protobuf.DescriptorProto"), UPB_VALUE_INIT_CONSTPTR(&msgs[0]), &strentries[228]},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("google.protobuf.SourceCodeInfo"), UPB_VALUE_INIT_CONSTPTR(&msgs[16]), NULL},
- {UPB_TABKEY_STR("google.protobuf.FieldDescriptorProto.Type"), UPB_VALUE_INIT_CONSTPTR(&enums[1]), NULL},
- {UPB_TABKEY_STR("google.protobuf.DescriptorProto.ExtensionRange"), UPB_VALUE_INIT_CONSTPTR(&msgs[1]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_STR("google.protobuf.EnumValueDescriptorProto"), UPB_VALUE_INIT_CONSTPTR(&msgs[4]), NULL},
- {UPB_TABKEY_STR("google.protobuf.FieldOptions"), UPB_VALUE_INIT_CONSTPTR(&msgs[7]), NULL},
- {UPB_TABKEY_STR("google.protobuf.FileOptions"), UPB_VALUE_INIT_CONSTPTR(&msgs[10]), NULL},
- {UPB_TABKEY_STR("google.protobuf.EnumDescriptorProto"), UPB_VALUE_INIT_CONSTPTR(&msgs[2]), &strentries[233]},
- {UPB_TABKEY_STR("google.protobuf.FieldDescriptorProto.Label"), UPB_VALUE_INIT_CONSTPTR(&enums[0]), NULL},
- {UPB_TABKEY_STR("google.protobuf.ServiceDescriptorProto"), UPB_VALUE_INIT_CONSTPTR(&msgs[14]), NULL},
- {UPB_TABKEY_STR("google.protobuf.FieldOptions.CType"), UPB_VALUE_INIT_CONSTPTR(&enums[2]), &strentries[229]},
- {UPB_TABKEY_STR("google.protobuf.FileDescriptorSet"), UPB_VALUE_INIT_CONSTPTR(&msgs[9]), &strentries[235]},
- {UPB_TABKEY_STR("google.protobuf.EnumOptions"), UPB_VALUE_INIT_CONSTPTR(&msgs[3]), NULL},
- {UPB_TABKEY_STR("google.protobuf.FieldDescriptorProto"), UPB_VALUE_INIT_CONSTPTR(&msgs[6]), NULL},
- {UPB_TABKEY_STR("google.protobuf.FileOptions.OptimizeMode"), UPB_VALUE_INIT_CONSTPTR(&enums[3]), &strentries[221]},
- {UPB_TABKEY_STR("google.protobuf.ServiceOptions"), UPB_VALUE_INIT_CONSTPTR(&msgs[15]), NULL},
- {UPB_TABKEY_STR("google.protobuf.MessageOptions"), UPB_VALUE_INIT_CONSTPTR(&msgs[11]), NULL},
- {UPB_TABKEY_STR("google.protobuf.MethodOptions"), UPB_VALUE_INIT_CONSTPTR(&msgs[13]), &strentries[226]},
- {UPB_TABKEY_STR("google.protobuf.UninterpretedOption.NamePart"), UPB_VALUE_INIT_CONSTPTR(&msgs[19]), NULL},
+ {UPB_TABKEY_STR("\011", "\000", "\000", "\000", "extension"), UPB_TABVALUE_PTR_INIT(&fields[14]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "name"), UPB_TABVALUE_PTR_INIT(&fields[38]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\005", "\000", "\000", "\000", "field"), UPB_TABVALUE_PTR_INIT(&fields[16]), NULL},
+ {UPB_TABKEY_STR("\017", "\000", "\000", "\000", "extension_range"), UPB_TABVALUE_PTR_INIT(&fields[15]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\013", "\000", "\000", "\000", "nested_type"), UPB_TABVALUE_PTR_INIT(&fields[44]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\007", "\000", "\000", "\000", "options"), UPB_TABVALUE_PTR_INIT(&fields[49]), NULL},
+ {UPB_TABKEY_STR("\011", "\000", "\000", "\000", "enum_type"), UPB_TABVALUE_PTR_INIT(&fields[9]), &strentries[14]},
+ {UPB_TABKEY_STR("\005", "\000", "\000", "\000", "start"), UPB_TABVALUE_PTR_INIT(&fields[66]), NULL},
+ {UPB_TABKEY_STR("\003", "\000", "\000", "\000", "end"), UPB_TABVALUE_PTR_INIT(&fields[8]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\005", "\000", "\000", "\000", "value"), UPB_TABVALUE_PTR_INIT(&fields[78]), NULL},
+ {UPB_TABKEY_STR("\007", "\000", "\000", "\000", "options"), UPB_TABVALUE_PTR_INIT(&fields[50]), NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "name"), UPB_TABVALUE_PTR_INIT(&fields[40]), &strentries[22]},
+ {UPB_TABKEY_STR("\024", "\000", "\000", "\000", "uninterpreted_option"), UPB_TABVALUE_PTR_INIT(&fields[73]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\013", "\000", "\000", "\000", "allow_alias"), UPB_TABVALUE_PTR_INIT(&fields[1]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\006", "\000", "\000", "\000", "number"), UPB_TABVALUE_PTR_INIT(&fields[47]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\007", "\000", "\000", "\000", "options"), UPB_TABVALUE_PTR_INIT(&fields[52]), NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "name"), UPB_TABVALUE_PTR_INIT(&fields[37]), &strentries[30]},
+ {UPB_TABKEY_STR("\024", "\000", "\000", "\000", "uninterpreted_option"), UPB_TABVALUE_PTR_INIT(&fields[71]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\005", "\000", "\000", "\000", "label"), UPB_TABVALUE_PTR_INIT(&fields[27]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "name"), UPB_TABVALUE_PTR_INIT(&fields[41]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\006", "\000", "\000", "\000", "number"), UPB_TABVALUE_PTR_INIT(&fields[46]), &strentries[49]},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\011", "\000", "\000", "\000", "type_name"), UPB_TABVALUE_PTR_INIT(&fields[70]), NULL},
+ {UPB_TABKEY_STR("\010", "\000", "\000", "\000", "extendee"), UPB_TABVALUE_PTR_INIT(&fields[12]), NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "type"), UPB_TABVALUE_PTR_INIT(&fields[69]), &strentries[48]},
+ {UPB_TABKEY_STR("\015", "\000", "\000", "\000", "default_value"), UPB_TABVALUE_PTR_INIT(&fields[4]), NULL},
+ {UPB_TABKEY_STR("\007", "\000", "\000", "\000", "options"), UPB_TABVALUE_PTR_INIT(&fields[51]), NULL},
+ {UPB_TABKEY_STR("\024", "\000", "\000", "\000", "experimental_map_key"), UPB_TABVALUE_PTR_INIT(&fields[11]), &strentries[67]},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "weak"), UPB_TABVALUE_PTR_INIT(&fields[79]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\006", "\000", "\000", "\000", "packed"), UPB_TABVALUE_PTR_INIT(&fields[58]), NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "lazy"), UPB_TABVALUE_PTR_INIT(&fields[28]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\005", "\000", "\000", "\000", "ctype"), UPB_TABVALUE_PTR_INIT(&fields[3]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\012", "\000", "\000", "\000", "deprecated"), UPB_TABVALUE_PTR_INIT(&fields[6]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\024", "\000", "\000", "\000", "uninterpreted_option"), UPB_TABVALUE_PTR_INIT(&fields[77]), NULL},
+ {UPB_TABKEY_STR("\011", "\000", "\000", "\000", "extension"), UPB_TABVALUE_PTR_INIT(&fields[13]), NULL},
+ {UPB_TABKEY_STR("\017", "\000", "\000", "\000", "weak_dependency"), UPB_TABVALUE_PTR_INIT(&fields[80]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "name"), UPB_TABVALUE_PTR_INIT(&fields[34]), NULL},
+ {UPB_TABKEY_STR("\007", "\000", "\000", "\000", "service"), UPB_TABVALUE_PTR_INIT(&fields[63]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\020", "\000", "\000", "\000", "source_code_info"), UPB_TABVALUE_PTR_INIT(&fields[64]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\012", "\000", "\000", "\000", "dependency"), UPB_TABVALUE_PTR_INIT(&fields[5]), NULL},
+ {UPB_TABKEY_STR("\014", "\000", "\000", "\000", "message_type"), UPB_TABVALUE_PTR_INIT(&fields[32]), NULL},
+ {UPB_TABKEY_STR("\007", "\000", "\000", "\000", "package"), UPB_TABVALUE_PTR_INIT(&fields[57]), NULL},
+ {UPB_TABKEY_STR("\007", "\000", "\000", "\000", "options"), UPB_TABVALUE_PTR_INIT(&fields[53]), &strentries[82]},
+ {UPB_TABKEY_STR("\011", "\000", "\000", "\000", "enum_type"), UPB_TABVALUE_PTR_INIT(&fields[10]), NULL},
+ {UPB_TABKEY_STR("\021", "\000", "\000", "\000", "public_dependency"), UPB_TABVALUE_PTR_INIT(&fields[61]), &strentries[81]},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "file"), UPB_TABVALUE_PTR_INIT(&fields[17]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\024", "\000", "\000", "\000", "uninterpreted_option"), UPB_TABVALUE_PTR_INIT(&fields[75]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\023", "\000", "\000", "\000", "cc_generic_services"), UPB_TABVALUE_PTR_INIT(&fields[2]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\023", "\000", "\000", "\000", "java_multiple_files"), UPB_TABVALUE_PTR_INIT(&fields[24]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\025", "\000", "\000", "\000", "java_generic_services"), UPB_TABVALUE_PTR_INIT(&fields[23]), &strentries[102]},
+ {UPB_TABKEY_STR("\035", "\000", "\000", "\000", "java_generate_equals_and_hash"), UPB_TABVALUE_PTR_INIT(&fields[22]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\012", "\000", "\000", "\000", "go_package"), UPB_TABVALUE_PTR_INIT(&fields[18]), NULL},
+ {UPB_TABKEY_STR("\014", "\000", "\000", "\000", "java_package"), UPB_TABVALUE_PTR_INIT(&fields[26]), NULL},
+ {UPB_TABKEY_STR("\014", "\000", "\000", "\000", "optimize_for"), UPB_TABVALUE_PTR_INIT(&fields[48]), NULL},
+ {UPB_TABKEY_STR("\023", "\000", "\000", "\000", "py_generic_services"), UPB_TABVALUE_PTR_INIT(&fields[62]), NULL},
+ {UPB_TABKEY_STR("\024", "\000", "\000", "\000", "java_outer_classname"), UPB_TABVALUE_PTR_INIT(&fields[25]), NULL},
+ {UPB_TABKEY_STR("\027", "\000", "\000", "\000", "message_set_wire_format"), UPB_TABVALUE_PTR_INIT(&fields[31]), &strentries[106]},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\024", "\000", "\000", "\000", "uninterpreted_option"), UPB_TABVALUE_PTR_INIT(&fields[76]), NULL},
+ {UPB_TABKEY_STR("\037", "\000", "\000", "\000", "no_standard_descriptor_accessor"), UPB_TABVALUE_PTR_INIT(&fields[45]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "name"), UPB_TABVALUE_PTR_INIT(&fields[39]), NULL},
+ {UPB_TABKEY_STR("\012", "\000", "\000", "\000", "input_type"), UPB_TABVALUE_PTR_INIT(&fields[20]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\013", "\000", "\000", "\000", "output_type"), UPB_TABVALUE_PTR_INIT(&fields[56]), NULL},
+ {UPB_TABKEY_STR("\007", "\000", "\000", "\000", "options"), UPB_TABVALUE_PTR_INIT(&fields[55]), NULL},
+ {UPB_TABKEY_STR("\024", "\000", "\000", "\000", "uninterpreted_option"), UPB_TABVALUE_PTR_INIT(&fields[74]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\007", "\000", "\000", "\000", "options"), UPB_TABVALUE_PTR_INIT(&fields[54]), &strentries[122]},
+ {UPB_TABKEY_STR("\006", "\000", "\000", "\000", "method"), UPB_TABVALUE_PTR_INIT(&fields[33]), NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "name"), UPB_TABVALUE_PTR_INIT(&fields[35]), &strentries[121]},
+ {UPB_TABKEY_STR("\024", "\000", "\000", "\000", "uninterpreted_option"), UPB_TABVALUE_PTR_INIT(&fields[72]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\010", "\000", "\000", "\000", "location"), UPB_TABVALUE_PTR_INIT(&fields[30]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "span"), UPB_TABVALUE_PTR_INIT(&fields[65]), &strentries[139]},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\021", "\000", "\000", "\000", "trailing_comments"), UPB_TABVALUE_PTR_INIT(&fields[68]), NULL},
+ {UPB_TABKEY_STR("\020", "\000", "\000", "\000", "leading_comments"), UPB_TABVALUE_PTR_INIT(&fields[29]), &strentries[137]},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "path"), UPB_TABVALUE_PTR_INIT(&fields[59]), NULL},
+ {UPB_TABKEY_STR("\014", "\000", "\000", "\000", "double_value"), UPB_TABVALUE_PTR_INIT(&fields[7]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "name"), UPB_TABVALUE_PTR_INIT(&fields[36]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\022", "\000", "\000", "\000", "negative_int_value"), UPB_TABVALUE_PTR_INIT(&fields[43]), NULL},
+ {UPB_TABKEY_STR("\017", "\000", "\000", "\000", "aggregate_value"), UPB_TABVALUE_PTR_INIT(&fields[0]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\022", "\000", "\000", "\000", "positive_int_value"), UPB_TABVALUE_PTR_INIT(&fields[60]), NULL},
+ {UPB_TABKEY_STR("\020", "\000", "\000", "\000", "identifier_value"), UPB_TABVALUE_PTR_INIT(&fields[19]), NULL},
+ {UPB_TABKEY_STR("\014", "\000", "\000", "\000", "string_value"), UPB_TABVALUE_PTR_INIT(&fields[67]), &strentries[154]},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\014", "\000", "\000", "\000", "is_extension"), UPB_TABVALUE_PTR_INIT(&fields[21]), NULL},
+ {UPB_TABKEY_STR("\011", "\000", "\000", "\000", "name_part"), UPB_TABVALUE_PTR_INIT(&fields[42]), NULL},
+ {UPB_TABKEY_STR("\016", "\000", "\000", "\000", "LABEL_REQUIRED"), UPB_TABVALUE_INT_INIT(2), &strentries[162]},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\016", "\000", "\000", "\000", "LABEL_REPEATED"), UPB_TABVALUE_INT_INIT(3), NULL},
+ {UPB_TABKEY_STR("\016", "\000", "\000", "\000", "LABEL_OPTIONAL"), UPB_TABVALUE_INT_INIT(1), NULL},
+ {UPB_TABKEY_STR("\014", "\000", "\000", "\000", "TYPE_FIXED64"), UPB_TABVALUE_INT_INIT(6), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\013", "\000", "\000", "\000", "TYPE_STRING"), UPB_TABVALUE_INT_INIT(9), NULL},
+ {UPB_TABKEY_STR("\012", "\000", "\000", "\000", "TYPE_FLOAT"), UPB_TABVALUE_INT_INIT(2), &strentries[193]},
+ {UPB_TABKEY_STR("\013", "\000", "\000", "\000", "TYPE_DOUBLE"), UPB_TABVALUE_INT_INIT(1), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\012", "\000", "\000", "\000", "TYPE_INT32"), UPB_TABVALUE_INT_INIT(5), NULL},
+ {UPB_TABKEY_STR("\015", "\000", "\000", "\000", "TYPE_SFIXED32"), UPB_TABVALUE_INT_INIT(15), NULL},
+ {UPB_TABKEY_STR("\014", "\000", "\000", "\000", "TYPE_FIXED32"), UPB_TABVALUE_INT_INIT(7), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\014", "\000", "\000", "\000", "TYPE_MESSAGE"), UPB_TABVALUE_INT_INIT(11), &strentries[194]},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\012", "\000", "\000", "\000", "TYPE_INT64"), UPB_TABVALUE_INT_INIT(3), &strentries[191]},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\011", "\000", "\000", "\000", "TYPE_ENUM"), UPB_TABVALUE_INT_INIT(14), NULL},
+ {UPB_TABKEY_STR("\013", "\000", "\000", "\000", "TYPE_UINT32"), UPB_TABVALUE_INT_INIT(13), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\013", "\000", "\000", "\000", "TYPE_UINT64"), UPB_TABVALUE_INT_INIT(4), &strentries[190]},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\015", "\000", "\000", "\000", "TYPE_SFIXED64"), UPB_TABVALUE_INT_INIT(16), NULL},
+ {UPB_TABKEY_STR("\012", "\000", "\000", "\000", "TYPE_BYTES"), UPB_TABVALUE_INT_INIT(12), NULL},
+ {UPB_TABKEY_STR("\013", "\000", "\000", "\000", "TYPE_SINT64"), UPB_TABVALUE_INT_INIT(18), NULL},
+ {UPB_TABKEY_STR("\011", "\000", "\000", "\000", "TYPE_BOOL"), UPB_TABVALUE_INT_INIT(8), NULL},
+ {UPB_TABKEY_STR("\012", "\000", "\000", "\000", "TYPE_GROUP"), UPB_TABVALUE_INT_INIT(10), NULL},
+ {UPB_TABKEY_STR("\013", "\000", "\000", "\000", "TYPE_SINT32"), UPB_TABVALUE_INT_INIT(17), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\004", "\000", "\000", "\000", "CORD"), UPB_TABVALUE_INT_INIT(1), NULL},
+ {UPB_TABKEY_STR("\006", "\000", "\000", "\000", "STRING"), UPB_TABVALUE_INT_INIT(0), &strentries[197]},
+ {UPB_TABKEY_STR("\014", "\000", "\000", "\000", "STRING_PIECE"), UPB_TABVALUE_INT_INIT(2), NULL},
+ {UPB_TABKEY_STR("\011", "\000", "\000", "\000", "CODE_SIZE"), UPB_TABVALUE_INT_INIT(2), NULL},
+ {UPB_TABKEY_STR("\005", "\000", "\000", "\000", "SPEED"), UPB_TABVALUE_INT_INIT(1), &strentries[203]},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\014", "\000", "\000", "\000", "LITE_RUNTIME"), UPB_TABVALUE_INT_INIT(3), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\047", "\000", "\000", "\000", "google.protobuf.SourceCodeInfo.Location"), UPB_TABVALUE_PTR_INIT(&msgs[17]), NULL},
+ {UPB_TABKEY_STR("\043", "\000", "\000", "\000", "google.protobuf.UninterpretedOption"), UPB_TABVALUE_PTR_INIT(&msgs[18]), NULL},
+ {UPB_TABKEY_STR("\043", "\000", "\000", "\000", "google.protobuf.FileDescriptorProto"), UPB_TABVALUE_PTR_INIT(&msgs[8]), NULL},
+ {UPB_TABKEY_STR("\045", "\000", "\000", "\000", "google.protobuf.MethodDescriptorProto"), UPB_TABVALUE_PTR_INIT(&msgs[12]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\040", "\000", "\000", "\000", "google.protobuf.EnumValueOptions"), UPB_TABVALUE_PTR_INIT(&msgs[5]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\037", "\000", "\000", "\000", "google.protobuf.DescriptorProto"), UPB_TABVALUE_PTR_INIT(&msgs[0]), &strentries[228]},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\036", "\000", "\000", "\000", "google.protobuf.SourceCodeInfo"), UPB_TABVALUE_PTR_INIT(&msgs[16]), NULL},
+ {UPB_TABKEY_STR("\051", "\000", "\000", "\000", "google.protobuf.FieldDescriptorProto.Type"), UPB_TABVALUE_PTR_INIT(&enums[1]), NULL},
+ {UPB_TABKEY_STR("\056", "\000", "\000", "\000", "google.protobuf.DescriptorProto.ExtensionRange"), UPB_TABVALUE_PTR_INIT(&msgs[1]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_STR("\050", "\000", "\000", "\000", "google.protobuf.EnumValueDescriptorProto"), UPB_TABVALUE_PTR_INIT(&msgs[4]), NULL},
+ {UPB_TABKEY_STR("\034", "\000", "\000", "\000", "google.protobuf.FieldOptions"), UPB_TABVALUE_PTR_INIT(&msgs[7]), NULL},
+ {UPB_TABKEY_STR("\033", "\000", "\000", "\000", "google.protobuf.FileOptions"), UPB_TABVALUE_PTR_INIT(&msgs[10]), NULL},
+ {UPB_TABKEY_STR("\043", "\000", "\000", "\000", "google.protobuf.EnumDescriptorProto"), UPB_TABVALUE_PTR_INIT(&msgs[2]), &strentries[233]},
+ {UPB_TABKEY_STR("\052", "\000", "\000", "\000", "google.protobuf.FieldDescriptorProto.Label"), UPB_TABVALUE_PTR_INIT(&enums[0]), NULL},
+ {UPB_TABKEY_STR("\046", "\000", "\000", "\000", "google.protobuf.ServiceDescriptorProto"), UPB_TABVALUE_PTR_INIT(&msgs[14]), NULL},
+ {UPB_TABKEY_STR("\042", "\000", "\000", "\000", "google.protobuf.FieldOptions.CType"), UPB_TABVALUE_PTR_INIT(&enums[2]), &strentries[229]},
+ {UPB_TABKEY_STR("\041", "\000", "\000", "\000", "google.protobuf.FileDescriptorSet"), UPB_TABVALUE_PTR_INIT(&msgs[9]), &strentries[235]},
+ {UPB_TABKEY_STR("\033", "\000", "\000", "\000", "google.protobuf.EnumOptions"), UPB_TABVALUE_PTR_INIT(&msgs[3]), NULL},
+ {UPB_TABKEY_STR("\044", "\000", "\000", "\000", "google.protobuf.FieldDescriptorProto"), UPB_TABVALUE_PTR_INIT(&msgs[6]), NULL},
+ {UPB_TABKEY_STR("\050", "\000", "\000", "\000", "google.protobuf.FileOptions.OptimizeMode"), UPB_TABVALUE_PTR_INIT(&enums[3]), &strentries[221]},
+ {UPB_TABKEY_STR("\036", "\000", "\000", "\000", "google.protobuf.ServiceOptions"), UPB_TABVALUE_PTR_INIT(&msgs[15]), NULL},
+ {UPB_TABKEY_STR("\036", "\000", "\000", "\000", "google.protobuf.MessageOptions"), UPB_TABVALUE_PTR_INIT(&msgs[11]), NULL},
+ {UPB_TABKEY_STR("\035", "\000", "\000", "\000", "google.protobuf.MethodOptions"), UPB_TABVALUE_PTR_INIT(&msgs[13]), &strentries[226]},
+ {UPB_TABKEY_STR("\054", "\000", "\000", "\000", "google.protobuf.UninterpretedOption.NamePart"), UPB_TABVALUE_PTR_INIT(&msgs[19]), NULL},
};
static const upb_tabent intentries[14] = {
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NUM(999), UPB_VALUE_INIT_CONSTPTR(&fields[73]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NUM(999), UPB_VALUE_INIT_CONSTPTR(&fields[71]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NUM(999), UPB_VALUE_INIT_CONSTPTR(&fields[77]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NUM(999), UPB_VALUE_INIT_CONSTPTR(&fields[75]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NUM(999), UPB_VALUE_INIT_CONSTPTR(&fields[76]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NUM(999), UPB_VALUE_INIT_CONSTPTR(&fields[74]), NULL},
- {UPB_TABKEY_NONE, UPB__VALUE_INIT_NONE, NULL},
- {UPB_TABKEY_NUM(999), UPB_VALUE_INIT_CONSTPTR(&fields[72]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NUM(999), UPB_TABVALUE_PTR_INIT(&fields[73]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NUM(999), UPB_TABVALUE_PTR_INIT(&fields[71]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NUM(999), UPB_TABVALUE_PTR_INIT(&fields[77]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NUM(999), UPB_TABVALUE_PTR_INIT(&fields[75]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NUM(999), UPB_TABVALUE_PTR_INIT(&fields[76]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NUM(999), UPB_TABVALUE_PTR_INIT(&fields[74]), NULL},
+ {UPB_TABKEY_NONE, UPB_TABVALUE_EMPTY_INIT, NULL},
+ {UPB_TABKEY_NUM(999), UPB_TABVALUE_PTR_INIT(&fields[72]), NULL},
};
-static const _upb_value arrays[232] = {
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[38]),
- UPB_VALUE_INIT_CONSTPTR(&fields[16]),
- UPB_VALUE_INIT_CONSTPTR(&fields[44]),
- UPB_VALUE_INIT_CONSTPTR(&fields[9]),
- UPB_VALUE_INIT_CONSTPTR(&fields[15]),
- UPB_VALUE_INIT_CONSTPTR(&fields[14]),
- UPB_VALUE_INIT_CONSTPTR(&fields[49]),
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[66]),
- UPB_VALUE_INIT_CONSTPTR(&fields[8]),
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[40]),
- UPB_VALUE_INIT_CONSTPTR(&fields[78]),
- UPB_VALUE_INIT_CONSTPTR(&fields[50]),
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[1]),
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[37]),
- UPB_VALUE_INIT_CONSTPTR(&fields[47]),
- UPB_VALUE_INIT_CONSTPTR(&fields[52]),
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[41]),
- UPB_VALUE_INIT_CONSTPTR(&fields[12]),
- UPB_VALUE_INIT_CONSTPTR(&fields[46]),
- UPB_VALUE_INIT_CONSTPTR(&fields[27]),
- UPB_VALUE_INIT_CONSTPTR(&fields[69]),
- UPB_VALUE_INIT_CONSTPTR(&fields[70]),
- UPB_VALUE_INIT_CONSTPTR(&fields[4]),
- UPB_VALUE_INIT_CONSTPTR(&fields[51]),
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[3]),
- UPB_VALUE_INIT_CONSTPTR(&fields[58]),
- UPB_VALUE_INIT_CONSTPTR(&fields[6]),
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[28]),
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[11]),
- UPB_VALUE_INIT_CONSTPTR(&fields[79]),
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[34]),
- UPB_VALUE_INIT_CONSTPTR(&fields[57]),
- UPB_VALUE_INIT_CONSTPTR(&fields[5]),
- UPB_VALUE_INIT_CONSTPTR(&fields[32]),
- UPB_VALUE_INIT_CONSTPTR(&fields[10]),
- UPB_VALUE_INIT_CONSTPTR(&fields[63]),
- UPB_VALUE_INIT_CONSTPTR(&fields[13]),
- UPB_VALUE_INIT_CONSTPTR(&fields[53]),
- UPB_VALUE_INIT_CONSTPTR(&fields[64]),
- UPB_VALUE_INIT_CONSTPTR(&fields[61]),
- UPB_VALUE_INIT_CONSTPTR(&fields[80]),
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[17]),
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[26]),
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[25]),
- UPB_VALUE_INIT_CONSTPTR(&fields[48]),
- UPB_VALUE_INIT_CONSTPTR(&fields[24]),
- UPB_VALUE_INIT_CONSTPTR(&fields[18]),
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[2]),
- UPB_VALUE_INIT_CONSTPTR(&fields[23]),
- UPB_VALUE_INIT_CONSTPTR(&fields[62]),
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[22]),
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[31]),
- UPB_VALUE_INIT_CONSTPTR(&fields[45]),
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[39]),
- UPB_VALUE_INIT_CONSTPTR(&fields[20]),
- UPB_VALUE_INIT_CONSTPTR(&fields[56]),
- UPB_VALUE_INIT_CONSTPTR(&fields[55]),
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[35]),
- UPB_VALUE_INIT_CONSTPTR(&fields[33]),
- UPB_VALUE_INIT_CONSTPTR(&fields[54]),
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[30]),
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[59]),
- UPB_VALUE_INIT_CONSTPTR(&fields[65]),
- UPB_VALUE_INIT_CONSTPTR(&fields[29]),
- UPB_VALUE_INIT_CONSTPTR(&fields[68]),
- UPB_ARRAY_EMPTYENT,
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[36]),
- UPB_VALUE_INIT_CONSTPTR(&fields[19]),
- UPB_VALUE_INIT_CONSTPTR(&fields[60]),
- UPB_VALUE_INIT_CONSTPTR(&fields[43]),
- UPB_VALUE_INIT_CONSTPTR(&fields[7]),
- UPB_VALUE_INIT_CONSTPTR(&fields[67]),
- UPB_VALUE_INIT_CONSTPTR(&fields[0]),
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR(&fields[42]),
- UPB_VALUE_INIT_CONSTPTR(&fields[21]),
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR("LABEL_OPTIONAL"),
- UPB_VALUE_INIT_CONSTPTR("LABEL_REQUIRED"),
- UPB_VALUE_INIT_CONSTPTR("LABEL_REPEATED"),
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR("TYPE_DOUBLE"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_FLOAT"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_INT64"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_UINT64"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_INT32"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_FIXED64"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_FIXED32"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_BOOL"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_STRING"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_GROUP"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_MESSAGE"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_BYTES"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_UINT32"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_ENUM"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_SFIXED32"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_SFIXED64"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_SINT32"),
- UPB_VALUE_INIT_CONSTPTR("TYPE_SINT64"),
- UPB_VALUE_INIT_CONSTPTR("STRING"),
- UPB_VALUE_INIT_CONSTPTR("CORD"),
- UPB_VALUE_INIT_CONSTPTR("STRING_PIECE"),
- UPB_ARRAY_EMPTYENT,
- UPB_VALUE_INIT_CONSTPTR("SPEED"),
- UPB_VALUE_INIT_CONSTPTR("CODE_SIZE"),
- UPB_VALUE_INIT_CONSTPTR("LITE_RUNTIME"),
+static const upb_tabval arrays[232] = {
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[38]),
+ UPB_TABVALUE_PTR_INIT(&fields[16]),
+ UPB_TABVALUE_PTR_INIT(&fields[44]),
+ UPB_TABVALUE_PTR_INIT(&fields[9]),
+ UPB_TABVALUE_PTR_INIT(&fields[15]),
+ UPB_TABVALUE_PTR_INIT(&fields[14]),
+ UPB_TABVALUE_PTR_INIT(&fields[49]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[66]),
+ UPB_TABVALUE_PTR_INIT(&fields[8]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[40]),
+ UPB_TABVALUE_PTR_INIT(&fields[78]),
+ UPB_TABVALUE_PTR_INIT(&fields[50]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[1]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[37]),
+ UPB_TABVALUE_PTR_INIT(&fields[47]),
+ UPB_TABVALUE_PTR_INIT(&fields[52]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[41]),
+ UPB_TABVALUE_PTR_INIT(&fields[12]),
+ UPB_TABVALUE_PTR_INIT(&fields[46]),
+ UPB_TABVALUE_PTR_INIT(&fields[27]),
+ UPB_TABVALUE_PTR_INIT(&fields[69]),
+ UPB_TABVALUE_PTR_INIT(&fields[70]),
+ UPB_TABVALUE_PTR_INIT(&fields[4]),
+ UPB_TABVALUE_PTR_INIT(&fields[51]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[3]),
+ UPB_TABVALUE_PTR_INIT(&fields[58]),
+ UPB_TABVALUE_PTR_INIT(&fields[6]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[28]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[11]),
+ UPB_TABVALUE_PTR_INIT(&fields[79]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[34]),
+ UPB_TABVALUE_PTR_INIT(&fields[57]),
+ UPB_TABVALUE_PTR_INIT(&fields[5]),
+ UPB_TABVALUE_PTR_INIT(&fields[32]),
+ UPB_TABVALUE_PTR_INIT(&fields[10]),
+ UPB_TABVALUE_PTR_INIT(&fields[63]),
+ UPB_TABVALUE_PTR_INIT(&fields[13]),
+ UPB_TABVALUE_PTR_INIT(&fields[53]),
+ UPB_TABVALUE_PTR_INIT(&fields[64]),
+ UPB_TABVALUE_PTR_INIT(&fields[61]),
+ UPB_TABVALUE_PTR_INIT(&fields[80]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[17]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[26]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[25]),
+ UPB_TABVALUE_PTR_INIT(&fields[48]),
+ UPB_TABVALUE_PTR_INIT(&fields[24]),
+ UPB_TABVALUE_PTR_INIT(&fields[18]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[2]),
+ UPB_TABVALUE_PTR_INIT(&fields[23]),
+ UPB_TABVALUE_PTR_INIT(&fields[62]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[22]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[31]),
+ UPB_TABVALUE_PTR_INIT(&fields[45]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[39]),
+ UPB_TABVALUE_PTR_INIT(&fields[20]),
+ UPB_TABVALUE_PTR_INIT(&fields[56]),
+ UPB_TABVALUE_PTR_INIT(&fields[55]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[35]),
+ UPB_TABVALUE_PTR_INIT(&fields[33]),
+ UPB_TABVALUE_PTR_INIT(&fields[54]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[30]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[59]),
+ UPB_TABVALUE_PTR_INIT(&fields[65]),
+ UPB_TABVALUE_PTR_INIT(&fields[29]),
+ UPB_TABVALUE_PTR_INIT(&fields[68]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[36]),
+ UPB_TABVALUE_PTR_INIT(&fields[19]),
+ UPB_TABVALUE_PTR_INIT(&fields[60]),
+ UPB_TABVALUE_PTR_INIT(&fields[43]),
+ UPB_TABVALUE_PTR_INIT(&fields[7]),
+ UPB_TABVALUE_PTR_INIT(&fields[67]),
+ UPB_TABVALUE_PTR_INIT(&fields[0]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT(&fields[42]),
+ UPB_TABVALUE_PTR_INIT(&fields[21]),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT("LABEL_OPTIONAL"),
+ UPB_TABVALUE_PTR_INIT("LABEL_REQUIRED"),
+ UPB_TABVALUE_PTR_INIT("LABEL_REPEATED"),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT("TYPE_DOUBLE"),
+ UPB_TABVALUE_PTR_INIT("TYPE_FLOAT"),
+ UPB_TABVALUE_PTR_INIT("TYPE_INT64"),
+ UPB_TABVALUE_PTR_INIT("TYPE_UINT64"),
+ UPB_TABVALUE_PTR_INIT("TYPE_INT32"),
+ UPB_TABVALUE_PTR_INIT("TYPE_FIXED64"),
+ UPB_TABVALUE_PTR_INIT("TYPE_FIXED32"),
+ UPB_TABVALUE_PTR_INIT("TYPE_BOOL"),
+ UPB_TABVALUE_PTR_INIT("TYPE_STRING"),
+ UPB_TABVALUE_PTR_INIT("TYPE_GROUP"),
+ UPB_TABVALUE_PTR_INIT("TYPE_MESSAGE"),
+ UPB_TABVALUE_PTR_INIT("TYPE_BYTES"),
+ UPB_TABVALUE_PTR_INIT("TYPE_UINT32"),
+ UPB_TABVALUE_PTR_INIT("TYPE_ENUM"),
+ UPB_TABVALUE_PTR_INIT("TYPE_SFIXED32"),
+ UPB_TABVALUE_PTR_INIT("TYPE_SFIXED64"),
+ UPB_TABVALUE_PTR_INIT("TYPE_SINT32"),
+ UPB_TABVALUE_PTR_INIT("TYPE_SINT64"),
+ UPB_TABVALUE_PTR_INIT("STRING"),
+ UPB_TABVALUE_PTR_INIT("CORD"),
+ UPB_TABVALUE_PTR_INIT("STRING_PIECE"),
+ UPB_TABVALUE_EMPTY_INIT,
+ UPB_TABVALUE_PTR_INIT("SPEED"),
+ UPB_TABVALUE_PTR_INIT("CODE_SIZE"),
+ UPB_TABVALUE_PTR_INIT("LITE_RUNTIME"),
};
static const upb_symtab symtab = UPB_SYMTAB_INIT(UPB_STRTABLE_INIT(24, 31, UPB_CTYPE_PTR, 5, &strentries[204]), &reftables[210], &reftables[211]);
@@ -5798,8 +5842,8 @@ static upb_inttable reftables[212] = {
#include <stdlib.h>
#include <string.h>
-// upb_deflist is an internal-only dynamic array for storing a growing list of
-// upb_defs.
+/* upb_deflist is an internal-only dynamic array for storing a growing list of
+ * upb_defs. */
typedef struct {
upb_def **defs;
size_t len;
@@ -5807,27 +5851,27 @@ typedef struct {
bool owned;
} upb_deflist;
-// We keep a stack of all the messages scopes we are currently in, as well as
-// the top-level file scope. This is necessary to correctly qualify the
-// definitions that are contained inside. "name" tracks the name of the
-// message or package (a bare name -- not qualified by any enclosing scopes).
+/* We keep a stack of all the messages scopes we are currently in, as well as
+ * the top-level file scope. This is necessary to correctly qualify the
+ * definitions that are contained inside. "name" tracks the name of the
+ * message or package (a bare name -- not qualified by any enclosing scopes). */
typedef struct {
char *name;
- // Index of the first def that is under this scope. For msgdefs, the
- // msgdef itself is at start-1.
+ /* Index of the first def that is under this scope. For msgdefs, the
+ * msgdef itself is at start-1. */
int start;
} upb_descreader_frame;
-// The maximum number of nested declarations that are allowed, ie.
-// message Foo {
-// message Bar {
-// message Baz {
-// }
-// }
-// }
-//
-// This is a resource limit that affects how big our runtime stack can grow.
-// TODO: make this a runtime-settable property of the Reader instance.
+/* The maximum number of nested declarations that are allowed, ie.
+ * message Foo {
+ * message Bar {
+ * message Baz {
+ * }
+ * }
+ * }
+ *
+ * This is a resource limit that affects how big our runtime stack can grow.
+ * TODO: make this a runtime-settable property of the Reader instance. */
#define UPB_MAX_MESSAGE_NESTING 64
struct upb_descreader {
@@ -5854,11 +5898,11 @@ static char *upb_strndup(const char *buf, size_t n) {
return ret;
}
-// Returns a newly allocated string that joins input strings together, for
-// example:
-// join("Foo.Bar", "Baz") -> "Foo.Bar.Baz"
-// join("", "Baz") -> "Baz"
-// Caller owns a ref on the returned string.
+/* Returns a newly allocated string that joins input strings together, for
+ * example:
+ * join("Foo.Bar", "Baz") -> "Foo.Bar.Baz"
+ * join("", "Baz") -> "Baz"
+ * Caller owns a ref on the returned string. */
static char *upb_join(const char *base, const char *name) {
if (!base || strlen(base) == 0) {
return upb_strdup(name);
@@ -5883,8 +5927,9 @@ void upb_deflist_init(upb_deflist *l) {
}
void upb_deflist_uninit(upb_deflist *l) {
+ size_t i;
if (l->owned)
- for(size_t i = 0; i < l->len; i++)
+ for(i = 0; i < l->len; i++)
upb_def_unref(l->defs[i], l);
free(l->defs);
}
@@ -5902,8 +5947,9 @@ bool upb_deflist_push(upb_deflist *l, upb_def *d) {
}
void upb_deflist_donaterefs(upb_deflist *l, void *owner) {
+ size_t i;
assert(l->owned);
- for (size_t i = 0; i < l->len; i++)
+ for (i = 0; i < l->len; i++)
upb_def_donateref(l->defs[i], l, owner);
l->owned = false;
}
@@ -5912,9 +5958,10 @@ static upb_def *upb_deflist_last(upb_deflist *l) {
return l->defs[l->len-1];
}
-// Qualify the defname for all defs starting with offset "start" with "str".
+/* Qualify the defname for all defs starting with offset "start" with "str". */
static void upb_deflist_qualify(upb_deflist *l, char *str, int32_t start) {
- for (uint32_t i = start; i < l->len; i++) {
+ uint32_t i;
+ for (i = start; i < l->len; i++) {
upb_def *def = l->defs[i];
char *name = upb_join(str, upb_def_fullname(def));
upb_def_setfullname(def, name, NULL);
@@ -5926,8 +5973,9 @@ static void upb_deflist_qualify(upb_deflist *l, char *str, int32_t start) {
/* upb_descreader ************************************************************/
static upb_msgdef *upb_descreader_top(upb_descreader *r) {
+ int index;
assert(r->stack_len > 1);
- int index = r->stack[r->stack_len-1].start - 1;
+ index = r->stack[r->stack_len-1].start - 1;
assert(index >= 0);
return upb_downcast_msgdef_mutable(r->defs.defs[index]);
}
@@ -5936,8 +5984,8 @@ static upb_def *upb_descreader_last(upb_descreader *r) {
return upb_deflist_last(&r->defs);
}
-// Start/end handlers for FileDescriptorProto and DescriptorProto (the two
-// entities that have names and can contain sub-definitions.
+/* Start/end handlers for FileDescriptorProto and DescriptorProto (the two
+ * entities that have names and can contain sub-definitions. */
void upb_descreader_startcontainer(upb_descreader *r) {
upb_descreader_frame *f = &r->stack[r->stack_len++];
f->start = r->defs.len;
@@ -5957,7 +6005,7 @@ void upb_descreader_setscopename(upb_descreader *r, char *str) {
f->name = str;
}
-// Handlers for google.protobuf.FileDescriptorProto.
+/* Handlers for google.protobuf.FileDescriptorProto. */
static bool file_startmsg(void *r, const void *hd) {
UPB_UNUSED(hd);
upb_descreader_startcontainer(r);
@@ -5965,27 +6013,27 @@ static bool file_startmsg(void *r, const void *hd) {
}
static bool file_endmsg(void *closure, const void *hd, upb_status *status) {
+ upb_descreader *r = closure;
UPB_UNUSED(hd);
UPB_UNUSED(status);
- upb_descreader *r = closure;
upb_descreader_endcontainer(r);
return true;
}
static size_t file_onpackage(void *closure, const void *hd, const char *buf,
size_t n, const upb_bufhandle *handle) {
+ upb_descreader *r = closure;
UPB_UNUSED(hd);
UPB_UNUSED(handle);
- upb_descreader *r = closure;
- // XXX: see comment at the top of the file.
+ /* XXX: see comment at the top of the file. */
upb_descreader_setscopename(r, upb_strndup(buf, n));
return n;
}
-// Handlers for google.protobuf.EnumValueDescriptorProto.
+/* Handlers for google.protobuf.EnumValueDescriptorProto. */
static bool enumval_startmsg(void *closure, const void *hd) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
+ UPB_UNUSED(hd);
r->saw_number = false;
r->saw_name = false;
return true;
@@ -5993,10 +6041,10 @@ static bool enumval_startmsg(void *closure, const void *hd) {
static size_t enumval_onname(void *closure, const void *hd, const char *buf,
size_t n, const upb_bufhandle *handle) {
+ upb_descreader *r = closure;
UPB_UNUSED(hd);
UPB_UNUSED(handle);
- upb_descreader *r = closure;
- // XXX: see comment at the top of the file.
+ /* XXX: see comment at the top of the file. */
free(r->name);
r->name = upb_strndup(buf, n);
r->saw_name = true;
@@ -6004,21 +6052,23 @@ static size_t enumval_onname(void *closure, const void *hd, const char *buf,
}
static bool enumval_onnumber(void *closure, const void *hd, int32_t val) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
+ UPB_UNUSED(hd);
r->number = val;
r->saw_number = true;
return true;
}
static bool enumval_endmsg(void *closure, const void *hd, upb_status *status) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
+ upb_enumdef *e;
+ UPB_UNUSED(hd);
+
if(!r->saw_number || !r->saw_name) {
upb_status_seterrmsg(status, "Enum value missing name or number.");
return false;
}
- upb_enumdef *e = upb_downcast_enumdef_mutable(upb_descreader_last(r));
+ e = upb_downcast_enumdef_mutable(upb_descreader_last(r));
upb_enumdef_addval(e, r->name, r->number, status);
free(r->name);
r->name = NULL;
@@ -6026,18 +6076,21 @@ static bool enumval_endmsg(void *closure, const void *hd, upb_status *status) {
}
-// Handlers for google.protobuf.EnumDescriptorProto.
+/* Handlers for google.protobuf.EnumDescriptorProto. */
static bool enum_startmsg(void *closure, const void *hd) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
- upb_deflist_push(&r->defs, UPB_UPCAST(upb_enumdef_new(&r->defs)));
+ UPB_UNUSED(hd);
+ upb_deflist_push(&r->defs,
+ upb_enumdef_upcast_mutable(upb_enumdef_new(&r->defs)));
return true;
}
static bool enum_endmsg(void *closure, const void *hd, upb_status *status) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
- upb_enumdef *e = upb_downcast_enumdef_mutable(upb_descreader_last(r));
+ upb_enumdef *e;
+ UPB_UNUSED(hd);
+
+ e = upb_downcast_enumdef_mutable(upb_descreader_last(r));
if (upb_def_fullname(upb_descreader_last(r)) == NULL) {
upb_status_seterrmsg(status, "Enum had no name.");
return false;
@@ -6051,31 +6104,31 @@ static bool enum_endmsg(void *closure, const void *hd, upb_status *status) {
static size_t enum_onname(void *closure, const void *hd, const char *buf,
size_t n, const upb_bufhandle *handle) {
- UPB_UNUSED(hd);
- UPB_UNUSED(handle);
upb_descreader *r = closure;
- // XXX: see comment at the top of the file.
char *fullname = upb_strndup(buf, n);
+ UPB_UNUSED(hd);
+ UPB_UNUSED(handle);
+ /* XXX: see comment at the top of the file. */
upb_def_setfullname(upb_descreader_last(r), fullname, NULL);
free(fullname);
return n;
}
-// Handlers for google.protobuf.FieldDescriptorProto
+/* Handlers for google.protobuf.FieldDescriptorProto */
static bool field_startmsg(void *closure, const void *hd) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
+ UPB_UNUSED(hd);
r->f = upb_fielddef_new(&r->defs);
free(r->default_string);
r->default_string = NULL;
- // fielddefs default to packed, but descriptors default to non-packed.
+ /* fielddefs default to packed, but descriptors default to non-packed. */
upb_fielddef_setpacked(r->f, false);
return true;
}
-// Converts the default value in string "str" into "d". Passes a ref on str.
-// Returns true on success.
+/* Converts the default value in string "str" into "d". Passes a ref on str.
+ * Returns true on success. */
static bool parse_default(char *str, upb_fielddef *f) {
bool success = true;
char *end;
@@ -6089,7 +6142,8 @@ static bool parse_default(char *str, upb_fielddef *f) {
break;
}
case UPB_TYPE_INT64: {
- long long val = strtoll(str, &end, 0);
+ /* XXX: Need to write our own strtoll, since it's not available in c89. */
+ long long val = strtol(str, &end, 0);
if (val > INT64_MAX || val < INT64_MIN || errno == ERANGE || *end)
success = false;
else
@@ -6105,7 +6159,8 @@ static bool parse_default(char *str, upb_fielddef *f) {
break;
}
case UPB_TYPE_UINT64: {
- unsigned long long val = strtoull(str, &end, 0);
+ /* XXX: Need to write our own strtoull, since it's not available in c89. */
+ unsigned long long val = strtoul(str, &end, 0);
if (val > UINT64_MAX || errno == ERANGE || *end)
success = false;
else
@@ -6121,7 +6176,8 @@ static bool parse_default(char *str, upb_fielddef *f) {
break;
}
case UPB_TYPE_FLOAT: {
- float val = strtof(str, &end);
+ /* XXX: Need to write our own strtof, since it's not available in c89. */
+ float val = strtod(str, &end);
if (errno == ERANGE || *end)
success = false;
else
@@ -6143,10 +6199,11 @@ static bool parse_default(char *str, upb_fielddef *f) {
}
static bool field_endmsg(void *closure, const void *hd, upb_status *status) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
upb_fielddef *f = r->f;
- // TODO: verify that all required fields were present.
+ UPB_UNUSED(hd);
+
+ /* TODO: verify that all required fields were present. */
assert(upb_fielddef_number(f) != 0);
assert(upb_fielddef_name(f) != NULL);
assert((upb_fielddef_subdefname(f) != NULL) == upb_fielddef_hassubdef(f));
@@ -6160,8 +6217,8 @@ static bool field_endmsg(void *closure, const void *hd, upb_status *status) {
upb_fielddef_setdefaultcstr(f, r->default_string, NULL);
} else {
if (r->default_string && !parse_default(r->default_string, f)) {
- // We don't worry too much about giving a great error message since the
- // compiler should have ensured this was correct.
+ /* We don't worry too much about giving a great error message since the
+ * compiler should have ensured this was correct. */
upb_status_seterrmsg(status, "Error converting default value.");
return false;
}
@@ -6171,48 +6228,54 @@ static bool field_endmsg(void *closure, const void *hd, upb_status *status) {
}
static bool field_onlazy(void *closure, const void *hd, bool val) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
+ UPB_UNUSED(hd);
+
upb_fielddef_setlazy(r->f, val);
return true;
}
static bool field_onpacked(void *closure, const void *hd, bool val) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
+ UPB_UNUSED(hd);
+
upb_fielddef_setpacked(r->f, val);
return true;
}
static bool field_ontype(void *closure, const void *hd, int32_t val) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
+ UPB_UNUSED(hd);
+
upb_fielddef_setdescriptortype(r->f, val);
return true;
}
static bool field_onlabel(void *closure, const void *hd, int32_t val) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
+ UPB_UNUSED(hd);
+
upb_fielddef_setlabel(r->f, val);
return true;
}
static bool field_onnumber(void *closure, const void *hd, int32_t val) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
bool ok = upb_fielddef_setnumber(r->f, val, NULL);
+ UPB_UNUSED(hd);
+
UPB_ASSERT_VAR(ok, ok);
return true;
}
static size_t field_onname(void *closure, const void *hd, const char *buf,
size_t n, const upb_bufhandle *handle) {
- UPB_UNUSED(hd);
- UPB_UNUSED(handle);
upb_descreader *r = closure;
- // XXX: see comment at the top of the file.
char *name = upb_strndup(buf, n);
+ UPB_UNUSED(hd);
+ UPB_UNUSED(handle);
+
+ /* XXX: see comment at the top of the file. */
upb_fielddef_setname(r->f, name, NULL);
free(name);
return n;
@@ -6220,11 +6283,12 @@ static size_t field_onname(void *closure, const void *hd, const char *buf,
static size_t field_ontypename(void *closure, const void *hd, const char *buf,
size_t n, const upb_bufhandle *handle) {
- UPB_UNUSED(hd);
- UPB_UNUSED(handle);
upb_descreader *r = closure;
- // XXX: see comment at the top of the file.
char *name = upb_strndup(buf, n);
+ UPB_UNUSED(hd);
+ UPB_UNUSED(handle);
+
+ /* XXX: see comment at the top of the file. */
upb_fielddef_setsubdefname(r->f, name, NULL);
free(name);
return n;
@@ -6232,11 +6296,12 @@ static size_t field_ontypename(void *closure, const void *hd, const char *buf,
static size_t field_onextendee(void *closure, const void *hd, const char *buf,
size_t n, const upb_bufhandle *handle) {
- UPB_UNUSED(hd);
- UPB_UNUSED(handle);
upb_descreader *r = closure;
- // XXX: see comment at the top of the file.
char *name = upb_strndup(buf, n);
+ UPB_UNUSED(hd);
+ UPB_UNUSED(handle);
+
+ /* XXX: see comment at the top of the file. */
upb_fielddef_setcontainingtypename(r->f, name, NULL);
free(name);
return n;
@@ -6244,31 +6309,35 @@ static size_t field_onextendee(void *closure, const void *hd, const char *buf,
static size_t field_ondefaultval(void *closure, const void *hd, const char *buf,
size_t n, const upb_bufhandle *handle) {
+ upb_descreader *r = closure;
UPB_UNUSED(hd);
UPB_UNUSED(handle);
- upb_descreader *r = closure;
- // Have to convert from string to the correct type, but we might not know the
- // type yet, so we save it as a string until the end of the field.
- // XXX: see comment at the top of the file.
+
+ /* Have to convert from string to the correct type, but we might not know the
+ * type yet, so we save it as a string until the end of the field.
+ * XXX: see comment at the top of the file. */
free(r->default_string);
r->default_string = upb_strndup(buf, n);
return n;
}
-// Handlers for google.protobuf.DescriptorProto (representing a message).
+/* Handlers for google.protobuf.DescriptorProto (representing a message). */
static bool msg_startmsg(void *closure, const void *hd) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
- upb_deflist_push(&r->defs, UPB_UPCAST(upb_msgdef_new(&r->defs)));
+ UPB_UNUSED(hd);
+
+ upb_deflist_push(&r->defs,
+ upb_msgdef_upcast_mutable(upb_msgdef_new(&r->defs)));
upb_descreader_startcontainer(r);
return true;
}
static bool msg_endmsg(void *closure, const void *hd, upb_status *status) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
upb_msgdef *m = upb_descreader_top(r);
- if(!upb_def_fullname(UPB_UPCAST(m))) {
+ UPB_UNUSED(hd);
+
+ if(!upb_def_fullname(upb_msgdef_upcast_mutable(m))) {
upb_status_seterrmsg(status, "Encountered message with no name.");
return false;
}
@@ -6278,32 +6347,35 @@ static bool msg_endmsg(void *closure, const void *hd, upb_status *status) {
static size_t msg_onname(void *closure, const void *hd, const char *buf,
size_t n, const upb_bufhandle *handle) {
- UPB_UNUSED(hd);
- UPB_UNUSED(handle);
upb_descreader *r = closure;
upb_msgdef *m = upb_descreader_top(r);
- // XXX: see comment at the top of the file.
+ /* XXX: see comment at the top of the file. */
char *name = upb_strndup(buf, n);
- upb_def_setfullname(UPB_UPCAST(m), name, NULL);
- upb_descreader_setscopename(r, name); // Passes ownership of name.
+ UPB_UNUSED(hd);
+ UPB_UNUSED(handle);
+
+ upb_def_setfullname(upb_msgdef_upcast_mutable(m), name, NULL);
+ upb_descreader_setscopename(r, name); /* Passes ownership of name. */
return n;
}
static bool msg_onendfield(void *closure, const void *hd) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
upb_msgdef *m = upb_descreader_top(r);
+ UPB_UNUSED(hd);
+
upb_msgdef_addfield(m, r->f, &r->defs, NULL);
r->f = NULL;
return true;
}
static bool pushextension(void *closure, const void *hd) {
- UPB_UNUSED(hd);
upb_descreader *r = closure;
+ UPB_UNUSED(hd);
+
assert(upb_fielddef_containingtypename(r->f));
upb_fielddef_setisextension(r->f, true);
- upb_deflist_push(&r->defs, UPB_UPCAST(r->f));
+ upb_deflist_push(&r->defs, upb_fielddef_upcast_mutable(r->f));
r->f = NULL;
return true;
}
@@ -6455,14 +6527,14 @@ static void visitgroup(const upb_refcounted *r, upb_refcounted_visit *visit,
upb_inttable_begin(&i, &g->methods);
for(; !upb_inttable_done(&i); upb_inttable_next(&i)) {
upb_pbdecodermethod *method = upb_value_getptr(upb_inttable_iter_value(&i));
- visit(r, UPB_UPCAST(method), closure);
+ visit(r, upb_pbdecodermethod_upcast(method), closure);
}
}
mgroup *newgroup(const void *owner) {
mgroup *g = malloc(sizeof(*g));
static const struct upb_refcounted_vtbl vtbl = {visitgroup, freegroup};
- upb_refcounted_init(UPB_UPCAST(g), &vtbl, owner);
+ upb_refcounted_init(mgroup_upcast_mutable(g), &vtbl, owner);
upb_inttable_init(&g->methods, UPB_CTYPE_PTR);
g->bytecode = NULL;
g->bytecode_end = NULL;
@@ -6493,18 +6565,18 @@ static upb_pbdecodermethod *newmethod(const upb_handlers *dest_handlers,
mgroup *group) {
static const struct upb_refcounted_vtbl vtbl = {visitmethod, freemethod};
upb_pbdecodermethod *ret = malloc(sizeof(*ret));
- upb_refcounted_init(UPB_UPCAST(ret), &vtbl, &ret);
+ upb_refcounted_init(upb_pbdecodermethod_upcast_mutable(ret), &vtbl, &ret);
upb_byteshandler_init(&ret->input_handler_);
- // The method references the group and vice-versa, in a circular reference.
+ /* The method references the group and vice-versa, in a circular reference. */
upb_ref2(ret, group);
upb_ref2(group, ret);
upb_inttable_insertptr(&group->methods, dest_handlers, upb_value_ptr(ret));
- upb_refcounted_unref(UPB_UPCAST(ret), &ret);
+ upb_pbdecodermethod_unref(ret, &ret);
- ret->group = UPB_UPCAST(group);
+ ret->group = mgroup_upcast_mutable(group);
ret->dest_handlers_ = dest_handlers;
- ret->is_native_ = false; // If we JIT, it will update this later.
+ ret->is_native_ = false; /* If we JIT, it will update this later. */
upb_inttable_init(&ret->dispatch, UPB_CTYPE_UINT64);
if (ret->dest_handlers_) {
@@ -6513,25 +6585,6 @@ static upb_pbdecodermethod *newmethod(const upb_handlers *dest_handlers,
return ret;
}
-void upb_pbdecodermethod_ref(const upb_pbdecodermethod *m, const void *owner) {
- upb_refcounted_ref(UPB_UPCAST(m), owner);
-}
-
-void upb_pbdecodermethod_unref(const upb_pbdecodermethod *m,
- const void *owner) {
- upb_refcounted_unref(UPB_UPCAST(m), owner);
-}
-
-void upb_pbdecodermethod_donateref(const upb_pbdecodermethod *m,
- const void *from, const void *to) {
- upb_refcounted_donateref(UPB_UPCAST(m), from, to);
-}
-
-void upb_pbdecodermethod_checkref(const upb_pbdecodermethod *m,
- const void *owner) {
- upb_refcounted_checkref(UPB_UPCAST(m), owner);
-}
-
const upb_handlers *upb_pbdecodermethod_desthandlers(
const upb_pbdecodermethod *m) {
return m->dest_handlers_;
@@ -6548,10 +6601,11 @@ bool upb_pbdecodermethod_isnative(const upb_pbdecodermethod *m) {
const upb_pbdecodermethod *upb_pbdecodermethod_new(
const upb_pbdecodermethodopts *opts, const void *owner) {
+ const upb_pbdecodermethod *ret;
upb_pbcodecache cache;
+
upb_pbcodecache_init(&cache);
- const upb_pbdecodermethod *ret =
- upb_pbcodecache_getdecodermethod(&cache, opts);
+ ret = upb_pbcodecache_getdecodermethod(&cache, opts);
upb_pbdecodermethod_ref(ret, owner);
upb_pbcodecache_uninit(&cache);
return ret;
@@ -6560,7 +6614,7 @@ const upb_pbdecodermethod *upb_pbdecodermethod_new(
/* bytecode compiler **********************************************************/
-// Data used only at compilation time.
+/* Data used only at compilation time. */
typedef struct {
mgroup *group;
@@ -6568,15 +6622,17 @@ typedef struct {
int fwd_labels[MAXLABEL];
int back_labels[MAXLABEL];
- // For fields marked "lazy", parse them lazily or eagerly?
+ /* For fields marked "lazy", parse them lazily or eagerly? */
bool lazy;
} compiler;
static compiler *newcompiler(mgroup *group, bool lazy) {
compiler *ret = malloc(sizeof(*ret));
+ int i;
+
ret->group = group;
ret->lazy = lazy;
- for (int i = 0; i < MAXLABEL; i++) {
+ for (i = 0; i < MAXLABEL; i++) {
ret->fwd_labels[i] = EMPTYLABEL;
ret->back_labels[i] = EMPTYLABEL;
}
@@ -6589,7 +6645,7 @@ static void freecompiler(compiler *c) {
const size_t ptr_words = sizeof(void*) / sizeof(uint32_t);
-// How many words an instruction is.
+/* How many words an instruction is. */
static int instruction_len(uint32_t instr) {
switch (getop(instr)) {
case OP_SETDISPATCH: return 1 + ptr_words;
@@ -6605,8 +6661,8 @@ bool op_has_longofs(int32_t instruction) {
case OP_BRANCH:
case OP_CHECKDELIM:
return true;
- // The "tag" instructions only have 8 bytes available for the jump target,
- // but that is ok because these opcodes only require short jumps.
+ /* The "tag" instructions only have 8 bytes available for the jump target,
+ * but that is ok because these opcodes only require short jumps. */
case OP_TAG1:
case OP_TAG2:
case OP_TAGN:
@@ -6631,18 +6687,21 @@ static void setofs(uint32_t *instruction, int32_t ofs) {
} else {
*instruction = (*instruction & ~0xff00) | ((ofs & 0xff) << 8);
}
- assert(getofs(*instruction) == ofs); // Would fail in cases of overflow.
+ assert(getofs(*instruction) == ofs); /* Would fail in cases of overflow. */
}
static uint32_t pcofs(compiler *c) { return c->pc - c->group->bytecode; }
-// Defines a local label at the current PC location. All previous forward
-// references are updated to point to this location. The location is noted
-// for any future backward references.
+/* Defines a local label at the current PC location. All previous forward
+ * references are updated to point to this location. The location is noted
+ * for any future backward references. */
static void label(compiler *c, unsigned int label) {
+ int val;
+ uint32_t *codep;
+
assert(label < MAXLABEL);
- int val = c->fwd_labels[label];
- uint32_t *codep = (val == EMPTYLABEL) ? NULL : c->group->bytecode + val;
+ val = c->fwd_labels[label];
+ codep = (val == EMPTYLABEL) ? NULL : c->group->bytecode + val;
while (codep) {
int ofs = getofs(*codep);
setofs(codep, c->pc - codep - instruction_len(*codep));
@@ -6652,24 +6711,25 @@ static void label(compiler *c, unsigned int label) {
c->back_labels[label] = pcofs(c);
}
-// Creates a reference to a numbered label; either a forward reference
-// (positive arg) or backward reference (negative arg). For forward references
-// the value returned now is actually a "next" pointer into a linked list of all
-// instructions that use this label and will be patched later when the label is
-// defined with label().
-//
-// The returned value is the offset that should be written into the instruction.
+/* Creates a reference to a numbered label; either a forward reference
+ * (positive arg) or backward reference (negative arg). For forward references
+ * the value returned now is actually a "next" pointer into a linked list of all
+ * instructions that use this label and will be patched later when the label is
+ * defined with label().
+ *
+ * The returned value is the offset that should be written into the instruction.
+ */
static int32_t labelref(compiler *c, int label) {
assert(label < MAXLABEL);
if (label == LABEL_DISPATCH) {
- // No resolving required.
+ /* No resolving required. */
return 0;
} else if (label < 0) {
- // Backward local label. Relative to the next instruction.
+ /* Backward local label. Relative to the next instruction. */
uint32_t from = (c->pc + 1) - c->group->bytecode;
return c->back_labels[-label] - from;
} else {
- // Forward local label: prepend to (possibly-empty) linked list.
+ /* Forward local label: prepend to (possibly-empty) linked list. */
int *lptr = &c->fwd_labels[label];
int32_t ret = (*lptr == EMPTYLABEL) ? 0 : *lptr - pcofs(c);
*lptr = pcofs(c);
@@ -6683,7 +6743,7 @@ static void put32(compiler *c, uint32_t v) {
int ofs = pcofs(c);
size_t oldsize = g->bytecode_end - g->bytecode;
size_t newsize = UPB_MAX(oldsize * 2, 64);
- // TODO(haberman): handle OOM.
+ /* TODO(haberman): handle OOM. */
g->bytecode = realloc(g->bytecode, newsize * sizeof(uint32_t));
g->bytecode_end = g->bytecode + newsize;
c->pc = g->bytecode + ofs;
@@ -6782,19 +6842,22 @@ static void putop(compiler *c, opcode op, ...) {
#if defined(UPB_USE_JIT_X64) || defined(UPB_DUMP_BYTECODE)
const char *upb_pbdecoder_getopname(unsigned int op) {
-#define OP(op) [OP_ ## op] = "OP_" #op
-#define T(op) OP(PARSE_##op)
- static const char *names[] = {
- "<no opcode>",
- T(DOUBLE), T(FLOAT), T(INT64), T(UINT64), T(INT32), T(FIXED64), T(FIXED32),
- T(BOOL), T(UINT32), T(SFIXED32), T(SFIXED64), T(SINT32), T(SINT64),
- OP(STARTMSG), OP(ENDMSG), OP(STARTSEQ), OP(ENDSEQ), OP(STARTSUBMSG),
- OP(ENDSUBMSG), OP(STARTSTR), OP(STRING), OP(ENDSTR), OP(CALL), OP(RET),
- OP(PUSHLENDELIM), OP(PUSHTAGDELIM), OP(SETDELIM), OP(CHECKDELIM),
- OP(BRANCH), OP(TAG1), OP(TAG2), OP(TAGN), OP(SETDISPATCH), OP(POP),
- OP(SETBIGGROUPNUM), OP(DISPATCH), OP(HALT),
- };
- return op > OP_HALT ? names[0] : names[op];
+#define QUOTE(x) #x
+#define EXPAND_AND_QUOTE(x) QUOTE(x)
+#define OPNAME(x) OP_##x
+#define OP(x) case OPNAME(x): return EXPAND_AND_QUOTE(OPNAME(x));
+#define T(x) OP(PARSE_##x)
+ /* Keep in sync with list in decoder.int.h. */
+ switch ((opcode)op) {
+ T(DOUBLE) T(FLOAT) T(INT64) T(UINT64) T(INT32) T(FIXED64) T(FIXED32)
+ T(BOOL) T(UINT32) T(SFIXED32) T(SFIXED64) T(SINT32) T(SINT64)
+ OP(STARTMSG) OP(ENDMSG) OP(STARTSEQ) OP(ENDSEQ) OP(STARTSUBMSG)
+ OP(ENDSUBMSG) OP(STARTSTR) OP(STRING) OP(ENDSTR) OP(CALL) OP(RET)
+ OP(PUSHLENDELIM) OP(PUSHTAGDELIM) OP(SETDELIM) OP(CHECKDELIM)
+ OP(BRANCH) OP(TAG1) OP(TAG2) OP(TAGN) OP(SETDISPATCH) OP(POP)
+ OP(SETBIGGROUPNUM) OP(DISPATCH) OP(HALT)
+ }
+ return "<unknown op>";
#undef OP
#undef T
}
@@ -6892,7 +6955,7 @@ static void dumpbc(uint32_t *p, uint32_t *end, FILE *f) {
static uint64_t get_encoded_tag(const upb_fielddef *f, int wire_type) {
uint32_t tag = (upb_fielddef_number(f) << 3) | wire_type;
uint64_t encoded_tag = upb_vencode32(tag);
- // No tag should be greater than 5 bytes.
+ /* No tag should be greater than 5 bytes. */
assert(encoded_tag <= 0xffffffffff);
return encoded_tag;
}
@@ -6920,29 +6983,29 @@ static upb_selector_t getsel(const upb_fielddef *f, upb_handlertype_t type) {
return selector;
}
-// Takes an existing, primary dispatch table entry and repacks it with a
-// different alternate wire type. Called when we are inserting a secondary
-// dispatch table entry for an alternate wire type.
+/* Takes an existing, primary dispatch table entry and repacks it with a
+ * different alternate wire type. Called when we are inserting a secondary
+ * dispatch table entry for an alternate wire type. */
static uint64_t repack(uint64_t dispatch, int new_wt2) {
uint64_t ofs;
uint8_t wt1;
uint8_t old_wt2;
upb_pbdecoder_unpackdispatch(dispatch, &ofs, &wt1, &old_wt2);
- assert(old_wt2 == NO_WIRE_TYPE); // wt2 should not be set yet.
+ assert(old_wt2 == NO_WIRE_TYPE); /* wt2 should not be set yet. */
return upb_pbdecoder_packdispatch(ofs, wt1, new_wt2);
}
-// Marks the current bytecode position as the dispatch target for this message,
-// field, and wire type.
+/* Marks the current bytecode position as the dispatch target for this message,
+ * field, and wire type. */
static void dispatchtarget(compiler *c, upb_pbdecodermethod *method,
const upb_fielddef *f, int wire_type) {
- // Offset is relative to msg base.
+ /* Offset is relative to msg base. */
uint64_t ofs = pcofs(c) - method->code_base.ofs;
uint32_t fn = upb_fielddef_number(f);
upb_inttable *d = &method->dispatch;
upb_value v;
if (upb_inttable_remove(d, fn, &v)) {
- // TODO: prioritize based on packed setting in .proto file.
+ /* TODO: prioritize based on packed setting in .proto file. */
uint64_t repacked = repack(upb_value_getuint64(v), wire_type);
upb_inttable_insert(d, fn, upb_value_uint64(repacked));
upb_inttable_insert(d, fn + UPB_MAX_FIELDNUMBER, upb_value_uint64(ofs));
@@ -6984,8 +7047,8 @@ static void putsel(compiler *c, opcode op, upb_selector_t sel,
}
}
-// Puts an opcode to call a callback, but only if a callback actually exists for
-// this field and handler type.
+/* Puts an opcode to call a callback, but only if a callback actually exists for
+ * this field and handler type. */
static void maybeput(compiler *c, opcode op, const upb_handlers *h,
const upb_fielddef *f, upb_handlertype_t type) {
putsel(c, op, getsel(f, type), h);
@@ -7003,27 +7066,28 @@ static bool haslazyhandlers(const upb_handlers *h, const upb_fielddef *f) {
/* bytecode compiler code generation ******************************************/
-// Symbolic names for our local labels.
-#define LABEL_LOOPSTART 1 // Top of a repeated field loop.
-#define LABEL_LOOPBREAK 2 // To jump out of a repeated loop
-#define LABEL_FIELD 3 // Jump backward to find the most recent field.
-#define LABEL_ENDMSG 4 // To reach the OP_ENDMSG instr for this msg.
+/* Symbolic names for our local labels. */
+#define LABEL_LOOPSTART 1 /* Top of a repeated field loop. */
+#define LABEL_LOOPBREAK 2 /* To jump out of a repeated loop */
+#define LABEL_FIELD 3 /* Jump backward to find the most recent field. */
+#define LABEL_ENDMSG 4 /* To reach the OP_ENDMSG instr for this msg. */
-// Generates bytecode to parse a single non-lazy message field.
+/* Generates bytecode to parse a single non-lazy message field. */
static void generate_msgfield(compiler *c, const upb_fielddef *f,
upb_pbdecodermethod *method) {
const upb_handlers *h = upb_pbdecodermethod_desthandlers(method);
const upb_pbdecodermethod *sub_m = find_submethod(c, method, f);
+ int wire_type;
if (!sub_m) {
- // Don't emit any code for this field at all; it will be parsed as an
- // unknown field.
+ /* Don't emit any code for this field at all; it will be parsed as an
+ * unknown field. */
return;
}
label(c, LABEL_FIELD);
- int wire_type =
+ wire_type =
(upb_fielddef_descriptortype(f) == UPB_DESCRIPTOR_TYPE_MESSAGE)
? UPB_WIRE_TYPE_DELIMITED
: UPB_WIRE_TYPE_START_GROUP;
@@ -7064,7 +7128,7 @@ static void generate_msgfield(compiler *c, const upb_fielddef *f,
}
}
-// Generates bytecode to parse a single string or lazy submessage field.
+/* Generates bytecode to parse a single string or lazy submessage field. */
static void generate_delimfield(compiler *c, const upb_fielddef *f,
upb_pbdecodermethod *method) {
const upb_handlers *h = upb_pbdecodermethod_desthandlers(method);
@@ -7079,7 +7143,7 @@ static void generate_delimfield(compiler *c, const upb_fielddef *f,
label(c, LABEL_LOOPSTART);
putop(c, OP_PUSHLENDELIM);
putop(c, OP_STARTSTR, getsel(f, UPB_HANDLER_STARTSTR));
- // Need to emit even if no handler to skip past the string.
+ /* Need to emit even if no handler to skip past the string. */
putop(c, OP_STRING, getsel(f, UPB_HANDLER_STRING));
putop(c, OP_POP);
maybeput(c, OP_ENDSTR, h, f, UPB_HANDLER_ENDSTR);
@@ -7103,49 +7167,52 @@ static void generate_delimfield(compiler *c, const upb_fielddef *f,
}
}
-// Generates bytecode to parse a single primitive field.
+/* Generates bytecode to parse a single primitive field. */
static void generate_primitivefield(compiler *c, const upb_fielddef *f,
upb_pbdecodermethod *method) {
- label(c, LABEL_FIELD);
-
const upb_handlers *h = upb_pbdecodermethod_desthandlers(method);
upb_descriptortype_t descriptor_type = upb_fielddef_descriptortype(f);
+ opcode parse_type;
+ upb_selector_t sel;
+ int wire_type;
+
+ label(c, LABEL_FIELD);
- // From a decoding perspective, ENUM is the same as INT32.
+ /* From a decoding perspective, ENUM is the same as INT32. */
if (descriptor_type == UPB_DESCRIPTOR_TYPE_ENUM)
descriptor_type = UPB_DESCRIPTOR_TYPE_INT32;
- opcode parse_type = (opcode)descriptor_type;
+ parse_type = (opcode)descriptor_type;
- // TODO(haberman): generate packed or non-packed first depending on "packed"
- // setting in the fielddef. This will favor (in speed) whichever was
- // specified.
+ /* TODO(haberman): generate packed or non-packed first depending on "packed"
+ * setting in the fielddef. This will favor (in speed) whichever was
+ * specified. */
assert((int)parse_type >= 0 && parse_type <= OP_MAX);
- upb_selector_t sel = getsel(f, upb_handlers_getprimitivehandlertype(f));
- int wire_type = upb_pb_native_wire_types[upb_fielddef_descriptortype(f)];
+ sel = getsel(f, upb_handlers_getprimitivehandlertype(f));
+ wire_type = upb_pb_native_wire_types[upb_fielddef_descriptortype(f)];
if (upb_fielddef_isseq(f)) {
putop(c, OP_CHECKDELIM, LABEL_ENDMSG);
putchecktag(c, f, UPB_WIRE_TYPE_DELIMITED, LABEL_DISPATCH);
dispatchtarget(c, method, f, UPB_WIRE_TYPE_DELIMITED);
putop(c, OP_PUSHLENDELIM);
- putop(c, OP_STARTSEQ, getsel(f, UPB_HANDLER_STARTSEQ)); // Packed
+ putop(c, OP_STARTSEQ, getsel(f, UPB_HANDLER_STARTSEQ)); /* Packed */
label(c, LABEL_LOOPSTART);
putop(c, parse_type, sel);
putop(c, OP_CHECKDELIM, LABEL_LOOPBREAK);
putop(c, OP_BRANCH, -LABEL_LOOPSTART);
dispatchtarget(c, method, f, wire_type);
putop(c, OP_PUSHTAGDELIM, 0);
- putop(c, OP_STARTSEQ, getsel(f, UPB_HANDLER_STARTSEQ)); // Non-packed
+ putop(c, OP_STARTSEQ, getsel(f, UPB_HANDLER_STARTSEQ)); /* Non-packed */
label(c, LABEL_LOOPSTART);
putop(c, parse_type, sel);
putop(c, OP_CHECKDELIM, LABEL_LOOPBREAK);
putchecktag(c, f, wire_type, LABEL_LOOPBREAK);
putop(c, OP_BRANCH, -LABEL_LOOPSTART);
label(c, LABEL_LOOPBREAK);
- putop(c, OP_POP); // Packed and non-packed join.
+ putop(c, OP_POP); /* Packed and non-packed join. */
maybeput(c, OP_ENDSEQ, h, f, UPB_HANDLER_ENDSEQ);
- putop(c, OP_SETDELIM); // Could remove for non-packed by dup ENDSEQ.
+ putop(c, OP_SETDELIM); /* Could remove for non-packed by dup ENDSEQ. */
} else {
putop(c, OP_CHECKDELIM, LABEL_ENDMSG);
putchecktag(c, f, wire_type, LABEL_DISPATCH);
@@ -7154,24 +7221,29 @@ static void generate_primitivefield(compiler *c, const upb_fielddef *f,
}
}
-// Adds bytecode for parsing the given message to the given decoderplan,
-// while adding all dispatch targets to this message's dispatch table.
+/* Adds bytecode for parsing the given message to the given decoderplan,
+ * while adding all dispatch targets to this message's dispatch table. */
static void compile_method(compiler *c, upb_pbdecodermethod *method) {
+ const upb_handlers *h;
+ const upb_msgdef *md;
+ uint32_t* start_pc;
+ upb_msg_field_iter i;
+ upb_value val;
+
assert(method);
- // Clear all entries in the dispatch table.
+ /* Clear all entries in the dispatch table. */
upb_inttable_uninit(&method->dispatch);
upb_inttable_init(&method->dispatch, UPB_CTYPE_UINT64);
- const upb_handlers *h = upb_pbdecodermethod_desthandlers(method);
- const upb_msgdef *md = upb_handlers_msgdef(h);
+ h = upb_pbdecodermethod_desthandlers(method);
+ md = upb_handlers_msgdef(h);
method->code_base.ofs = pcofs(c);
putop(c, OP_SETDISPATCH, &method->dispatch);
putsel(c, OP_STARTMSG, UPB_STARTMSG_SELECTOR, h);
label(c, LABEL_FIELD);
- uint32_t* start_pc = c->pc;
- upb_msg_field_iter i;
+ start_pc = c->pc;
for(upb_msg_field_begin(&i, md);
!upb_msg_field_done(&i);
upb_msg_field_next(&i)) {
@@ -7188,23 +7260,23 @@ static void compile_method(compiler *c, upb_pbdecodermethod *method) {
}
}
- // If there were no fields, or if no handlers were defined, we need to
- // generate a non-empty loop body so that we can at least dispatch for unknown
- // fields and check for the end of the message.
+ /* If there were no fields, or if no handlers were defined, we need to
+ * generate a non-empty loop body so that we can at least dispatch for unknown
+ * fields and check for the end of the message. */
if (c->pc == start_pc) {
- // Check for end-of-message.
+ /* Check for end-of-message. */
putop(c, OP_CHECKDELIM, LABEL_ENDMSG);
- // Unconditionally dispatch.
+ /* Unconditionally dispatch. */
putop(c, OP_DISPATCH, 0);
}
- // For now we just loop back to the last field of the message (or if none,
- // the DISPATCH opcode for the message).
+ /* For now we just loop back to the last field of the message (or if none,
+ * the DISPATCH opcode for the message). */
putop(c, OP_BRANCH, -LABEL_FIELD);
- // Insert both a label and a dispatch table entry for this end-of-msg.
+ /* Insert both a label and a dispatch table entry for this end-of-msg. */
label(c, LABEL_ENDMSG);
- upb_value val = upb_value_uint64(pcofs(c) - method->code_base.ofs);
+ val = upb_value_uint64(pcofs(c) - method->code_base.ofs);
upb_inttable_insert(&method->dispatch, DISPATCH_ENDMSG, val);
putsel(c, OP_ENDMSG, UPB_ENDMSG_SELECTOR, h);
@@ -7213,19 +7285,21 @@ static void compile_method(compiler *c, upb_pbdecodermethod *method) {
upb_inttable_compact(&method->dispatch);
}
-// Populate "methods" with new upb_pbdecodermethod objects reachable from "h".
-// Returns the method for these handlers.
-//
-// Generates a new method for every destination handlers reachable from "h".
+/* Populate "methods" with new upb_pbdecodermethod objects reachable from "h".
+ * Returns the method for these handlers.
+ *
+ * Generates a new method for every destination handlers reachable from "h". */
static void find_methods(compiler *c, const upb_handlers *h) {
upb_value v;
+ upb_msg_field_iter i;
+ const upb_msgdef *md;
+
if (upb_inttable_lookupptr(&c->group->methods, h, &v))
return;
newmethod(h, c->group);
- // Find submethods.
- upb_msg_field_iter i;
- const upb_msgdef *md = upb_handlers_msgdef(h);
+ /* Find submethods. */
+ md = upb_handlers_msgdef(h);
for(upb_msg_field_begin(&i, md);
!upb_msg_field_done(&i);
upb_msg_field_next(&i)) {
@@ -7233,20 +7307,21 @@ static void find_methods(compiler *c, const upb_handlers *h) {
const upb_handlers *sub_h;
if (upb_fielddef_type(f) == UPB_TYPE_MESSAGE &&
(sub_h = upb_handlers_getsubhandlers(h, f)) != NULL) {
- // We only generate a decoder method for submessages with handlers.
- // Others will be parsed as unknown fields.
+ /* We only generate a decoder method for submessages with handlers.
+ * Others will be parsed as unknown fields. */
find_methods(c, sub_h);
}
}
}
-// (Re-)compile bytecode for all messages in "msgs."
-// Overwrites any existing bytecode in "c".
+/* (Re-)compile bytecode for all messages in "msgs."
+ * Overwrites any existing bytecode in "c". */
static void compile_methods(compiler *c) {
- // Start over at the beginning of the bytecode.
+ upb_inttable_iter i;
+
+ /* Start over at the beginning of the bytecode. */
c->pc = c->group->bytecode;
- upb_inttable_iter i;
upb_inttable_begin(&i, &c->group->methods);
for(; !upb_inttable_done(&i); upb_inttable_next(&i)) {
upb_pbdecodermethod *method = upb_value_getptr(upb_inttable_iter_value(&i));
@@ -7259,10 +7334,10 @@ static void set_bytecode_handlers(mgroup *g) {
upb_inttable_begin(&i, &g->methods);
for(; !upb_inttable_done(&i); upb_inttable_next(&i)) {
upb_pbdecodermethod *m = upb_value_getptr(upb_inttable_iter_value(&i));
+ upb_byteshandler *h = &m->input_handler_;
m->code_base.ptr = g->bytecode + m->code_base.ofs;
- upb_byteshandler *h = &m->input_handler_;
upb_byteshandler_setstartstr(h, upb_pbdecoder_startbc, m->code_base.ptr);
upb_byteshandler_setstring(h, upb_pbdecoder_decode, g);
upb_byteshandler_setendstr(h, upb_pbdecoder_end, m);
@@ -7277,53 +7352,58 @@ static void set_bytecode_handlers(mgroup *g) {
static void sethandlers(mgroup *g, bool allowjit) {
g->jit_code = NULL;
if (allowjit) {
- // Compile byte-code into machine code, create handlers.
+ /* Compile byte-code into machine code, create handlers. */
upb_pbdecoder_jit(g);
} else {
set_bytecode_handlers(g);
}
}
-#else // UPB_USE_JIT_X64
+#else /* UPB_USE_JIT_X64 */
static void sethandlers(mgroup *g, bool allowjit) {
- // No JIT compiled in; use bytecode handlers unconditionally.
+ /* No JIT compiled in; use bytecode handlers unconditionally. */
UPB_UNUSED(allowjit);
set_bytecode_handlers(g);
}
-#endif // UPB_USE_JIT_X64
+#endif /* UPB_USE_JIT_X64 */
-// TODO(haberman): allow this to be constructed for an arbitrary set of dest
-// handlers and other mgroups (but verify we have a transitive closure).
+/* TODO(haberman): allow this to be constructed for an arbitrary set of dest
+ * handlers and other mgroups (but verify we have a transitive closure). */
const mgroup *mgroup_new(const upb_handlers *dest, bool allowjit, bool lazy,
const void *owner) {
+ mgroup *g;
+ compiler *c;
+
UPB_UNUSED(allowjit);
assert(upb_handlers_isfrozen(dest));
- mgroup *g = newgroup(owner);
- compiler *c = newcompiler(g, lazy);
+ g = newgroup(owner);
+ c = newcompiler(g, lazy);
find_methods(c, dest);
- // We compile in two passes:
- // 1. all messages are assigned relative offsets from the beginning of the
- // bytecode (saved in method->code_base).
- // 2. forwards OP_CALL instructions can be correctly linked since message
- // offsets have been previously assigned.
- //
- // Could avoid the second pass by linking OP_CALL instructions somehow.
+ /* We compile in two passes:
+ * 1. all messages are assigned relative offsets from the beginning of the
+ * bytecode (saved in method->code_base).
+ * 2. forwards OP_CALL instructions can be correctly linked since message
+ * offsets have been previously assigned.
+ *
+ * Could avoid the second pass by linking OP_CALL instructions somehow. */
compile_methods(c);
compile_methods(c);
g->bytecode_end = c->pc;
freecompiler(c);
#ifdef UPB_DUMP_BYTECODE
- FILE *f = fopen("/tmp/upb-bytecode", "wb");
- assert(f);
- dumpbc(g->bytecode, g->bytecode_end, stderr);
- dumpbc(g->bytecode, g->bytecode_end, f);
- fclose(f);
+ {
+ FILE *f = fopen("/tmp/upb-bytecode", "wb");
+ assert(f);
+ dumpbc(g->bytecode, g->bytecode_end, stderr);
+ dumpbc(g->bytecode, g->bytecode_end, f);
+ fclose(f);
+ }
#endif
sethandlers(g, allowjit);
@@ -7343,7 +7423,7 @@ void upb_pbcodecache_uninit(upb_pbcodecache *c) {
upb_inttable_begin(&i, &c->groups);
for(; !upb_inttable_done(&i); upb_inttable_next(&i)) {
const mgroup *group = upb_value_getconstptr(upb_inttable_iter_value(&i));
- upb_refcounted_unref(UPB_UPCAST(group), c);
+ mgroup_unref(group, c);
}
upb_inttable_uninit(&c->groups);
}
@@ -7361,13 +7441,15 @@ bool upb_pbcodecache_setallowjit(upb_pbcodecache *c, bool allow) {
const upb_pbdecodermethod *upb_pbcodecache_getdecodermethod(
upb_pbcodecache *c, const upb_pbdecodermethodopts *opts) {
- // Right now we build a new DecoderMethod every time.
- // TODO(haberman): properly cache methods by their true key.
+ upb_value v;
+ bool ok;
+
+ /* Right now we build a new DecoderMethod every time.
+ * TODO(haberman): properly cache methods by their true key. */
const mgroup *g = mgroup_new(opts->handlers, c->allow_jit_, opts->lazy, c);
upb_inttable_push(&c->groups, upb_value_constptr(g));
- upb_value v;
- bool ok = upb_inttable_lookupptr(&g->methods, opts->handlers, &v);
+ ok = upb_inttable_lookupptr(&g->methods, opts->handlers, &v);
UPB_ASSERT_VAR(ok, ok);
return upb_value_getptr(v);
}
@@ -7413,17 +7495,17 @@ void upb_pbdecodermethodopts_setlazy(upb_pbdecodermethodopts *opts, bool lazy) {
#define CHECK_SUSPEND(x) if (!(x)) return upb_pbdecoder_suspend(d);
-// Error messages that are shared between the bytecode and JIT decoders.
+/* Error messages that are shared between the bytecode and JIT decoders. */
const char *kPbDecoderStackOverflow = "Nesting too deep.";
-// Error messages shared within this file.
+/* Error messages shared within this file. */
static const char *kUnterminatedVarint = "Unterminated varint.";
/* upb_pbdecoder **************************************************************/
static opcode halt = OP_HALT;
-// Whether an op consumes any of the input buffer.
+/* Whether an op consumes any of the input buffer. */
static bool consumes_input(opcode op) {
switch (op) {
case OP_SETDISPATCH:
@@ -7451,12 +7533,12 @@ static bool consumes_input(opcode op) {
static bool in_residual_buf(const upb_pbdecoder *d, const char *p);
-// It's unfortunate that we have to micro-manage the compiler with
-// UPB_FORCEINLINE and UPB_NOINLINE, especially since this tuning is necessarily
-// specific to one hardware configuration. But empirically on a Core i7,
-// performance increases 30-50% with these annotations. Every instance where
-// these appear, gcc 4.2.1 made the wrong decision and degraded performance in
-// benchmarks.
+/* It's unfortunate that we have to micro-manage the compiler with
+ * UPB_FORCEINLINE and UPB_NOINLINE, especially since this tuning is necessarily
+ * specific to one hardware configuration. But empirically on a Core i7,
+ * performance increases 30-50% with these annotations. Every instance where
+ * these appear, gcc 4.2.1 made the wrong decision and degraded performance in
+ * benchmarks. */
static void seterr(upb_pbdecoder *d, const char *msg) {
upb_status status = UPB_STATUS_INIT;
@@ -7471,22 +7553,22 @@ void upb_pbdecoder_seterr(upb_pbdecoder *d, const char *msg) {
/* Buffering ******************************************************************/
-// We operate on one buffer at a time, which is either the user's buffer passed
-// to our "decode" callback or some residual bytes from the previous buffer.
+/* We operate on one buffer at a time, which is either the user's buffer passed
+ * to our "decode" callback or some residual bytes from the previous buffer. */
-// How many bytes can be safely read from d->ptr without reading past end-of-buf
-// or past the current delimited end.
+/* How many bytes can be safely read from d->ptr without reading past end-of-buf
+ * or past the current delimited end. */
static size_t curbufleft(const upb_pbdecoder *d) {
assert(d->data_end >= d->ptr);
return d->data_end - d->ptr;
}
-// Overall stream offset of d->ptr.
+/* Overall stream offset of d->ptr. */
uint64_t offset(const upb_pbdecoder *d) {
return d->bufstart_ofs + (d->ptr - d->buf);
}
-// Advances d->ptr.
+/* Advances d->ptr. */
static void advance(upb_pbdecoder *d, size_t len) {
assert(curbufleft(d) >= len);
d->ptr += len;
@@ -7500,8 +7582,8 @@ static bool in_residual_buf(const upb_pbdecoder *d, const char *p) {
return in_buf(p, d->residual, d->residual_end);
}
-// Calculates the delim_end value, which is affected by both the current buffer
-// and the parsing stack, so must be called whenever either is updated.
+/* Calculates the delim_end value, which is affected by both the current buffer
+ * and the parsing stack, so must be called whenever either is updated. */
static void set_delim_end(upb_pbdecoder *d) {
size_t delim_ofs = d->top->end_ofs - d->bufstart_ofs;
if (delim_ofs <= (size_t)(d->end - d->buf)) {
@@ -7527,22 +7609,22 @@ static void advancetobuf(upb_pbdecoder *d, const char *buf, size_t len) {
}
static void checkpoint(upb_pbdecoder *d) {
- // The assertion here is in the interests of efficiency, not correctness.
- // We are trying to ensure that we don't checkpoint() more often than
- // necessary.
+ /* The assertion here is in the interests of efficiency, not correctness.
+ * We are trying to ensure that we don't checkpoint() more often than
+ * necessary. */
assert(d->checkpoint != d->ptr);
d->checkpoint = d->ptr;
}
-// Resumes the decoder from an initial state or from a previous suspend.
+/* Resumes the decoder from an initial state or from a previous suspend. */
int32_t upb_pbdecoder_resume(upb_pbdecoder *d, void *p, const char *buf,
size_t size, const upb_bufhandle *handle) {
- UPB_UNUSED(p); // Useless; just for the benefit of the JIT.
+ UPB_UNUSED(p); /* Useless; just for the benefit of the JIT. */
d->buf_param = buf;
d->size_param = size;
d->handle = handle;
if (d->residual_end > d->residual) {
- // We have residual bytes from the last buffer.
+ /* We have residual bytes from the last buffer. */
assert(d->ptr == d->residual);
} else {
switchtobuf(d, buf, buf + size);
@@ -7555,18 +7637,20 @@ int32_t upb_pbdecoder_resume(upb_pbdecoder *d, void *p, const char *buf,
return DECODE_OK;
}
-// Suspends the decoder at the last checkpoint, without saving any residual
-// bytes. If there are any unconsumed bytes, returns a short byte count.
+/* Suspends the decoder at the last checkpoint, without saving any residual
+ * bytes. If there are any unconsumed bytes, returns a short byte count. */
size_t upb_pbdecoder_suspend(upb_pbdecoder *d) {
d->pc = d->last;
if (d->checkpoint == d->residual) {
- // Checkpoint was in residual buf; no user bytes were consumed.
+ /* Checkpoint was in residual buf; no user bytes were consumed. */
d->ptr = d->residual;
return 0;
} else {
+ size_t consumed;
assert(!in_residual_buf(d, d->checkpoint));
assert(d->buf == d->buf_param);
- size_t consumed = d->checkpoint - d->buf;
+
+ consumed = d->checkpoint - d->buf;
d->bufstart_ofs += consumed;
d->residual_end = d->residual;
switchtobuf(d, d->residual, d->residual_end);
@@ -7574,17 +7658,17 @@ size_t upb_pbdecoder_suspend(upb_pbdecoder *d) {
}
}
-// Suspends the decoder at the last checkpoint, and saves any unconsumed
-// bytes in our residual buffer. This is necessary if we need more user
-// bytes to form a complete value, which might not be contiguous in the
-// user's buffers. Always consumes all user bytes.
+/* Suspends the decoder at the last checkpoint, and saves any unconsumed
+ * bytes in our residual buffer. This is necessary if we need more user
+ * bytes to form a complete value, which might not be contiguous in the
+ * user's buffers. Always consumes all user bytes. */
static size_t suspend_save(upb_pbdecoder *d) {
- // We hit end-of-buffer before we could parse a full value.
- // Save any unconsumed bytes (if any) to the residual buffer.
+ /* We hit end-of-buffer before we could parse a full value.
+ * Save any unconsumed bytes (if any) to the residual buffer. */
d->pc = d->last;
if (d->checkpoint == d->residual) {
- // Checkpoint was in residual buf; append user byte(s) to residual buf.
+ /* Checkpoint was in residual buf; append user byte(s) to residual buf. */
assert((d->residual_end - d->residual) + d->size_param <=
sizeof(d->residual));
if (!in_residual_buf(d, d->ptr)) {
@@ -7593,10 +7677,12 @@ static size_t suspend_save(upb_pbdecoder *d) {
memcpy(d->residual_end, d->buf_param, d->size_param);
d->residual_end += d->size_param;
} else {
- // Checkpoint was in user buf; old residual bytes not needed.
+ /* Checkpoint was in user buf; old residual bytes not needed. */
+ size_t save;
assert(!in_residual_buf(d, d->checkpoint));
+
d->ptr = d->checkpoint;
- size_t save = curbufleft(d);
+ save = curbufleft(d);
assert(save <= sizeof(d->residual));
memcpy(d->residual, d->ptr, save);
d->residual_end = d->residual + save;
@@ -7607,19 +7693,21 @@ static size_t suspend_save(upb_pbdecoder *d) {
return d->size_param;
}
-// Skips "bytes" bytes in the stream, which may be more than available. If we
-// skip more bytes than are available, we return a long read count to the caller
-// indicating how many bytes the caller should skip before passing a new buffer.
+/* Skips "bytes" bytes in the stream, which may be more than available. If we
+ * skip more bytes than are available, we return a long read count to the caller
+ * indicating how many bytes the caller should skip before passing a new buffer.
+ */
static int32_t skip(upb_pbdecoder *d, size_t bytes) {
assert(!in_residual_buf(d, d->ptr) || d->size_param == 0);
if (curbufleft(d) >= bytes) {
- // Skipped data is all in current buffer.
+ /* Skipped data is all in current buffer. */
advance(d, bytes);
return DECODE_OK;
} else {
- // Skipped data extends beyond currently available buffers.
+ /* Skipped data extends beyond currently available buffers. */
+ size_t skip;
d->pc = d->last;
- size_t skip = bytes - curbufleft(d);
+ skip = bytes - curbufleft(d);
d->bufstart_ofs += (d->end - d->buf) + skip;
d->residual_end = d->residual;
switchtobuf(d, d->residual, d->residual_end);
@@ -7627,8 +7715,8 @@ static int32_t skip(upb_pbdecoder *d, size_t bytes) {
}
}
-// Copies the next "bytes" bytes into "buf" and advances the stream.
-// Requires that this many bytes are available in the current buffer.
+/* Copies the next "bytes" bytes into "buf" and advances the stream.
+ * Requires that this many bytes are available in the current buffer. */
UPB_FORCEINLINE static void consumebytes(upb_pbdecoder *d, void *buf,
size_t bytes) {
assert(bytes <= curbufleft(d));
@@ -7636,9 +7724,9 @@ UPB_FORCEINLINE static void consumebytes(upb_pbdecoder *d, void *buf,
advance(d, bytes);
}
-// Slow path for getting the next "bytes" bytes, regardless of whether they are
-// available in the current buffer or not. Returns a status code as described
-// in decoder.int.h.
+/* Slow path for getting the next "bytes" bytes, regardless of whether they are
+ * available in the current buffer or not. Returns a status code as described
+ * in decoder.int.h. */
UPB_NOINLINE static int32_t getbytes_slow(upb_pbdecoder *d, void *buf,
size_t bytes) {
const size_t avail = curbufleft(d);
@@ -7659,12 +7747,13 @@ UPB_NOINLINE static int32_t getbytes_slow(upb_pbdecoder *d, void *buf,
}
}
-// Gets the next "bytes" bytes, regardless of whether they are available in the
-// current buffer or not. Returns a status code as described in decoder.int.h.
+/* Gets the next "bytes" bytes, regardless of whether they are available in the
+ * current buffer or not. Returns a status code as described in decoder.int.h.
+ */
UPB_FORCEINLINE static int32_t getbytes(upb_pbdecoder *d, void *buf,
size_t bytes) {
if (curbufleft(d) >= bytes) {
- // Buffer has enough data to satisfy.
+ /* Buffer has enough data to satisfy. */
consumebytes(d, buf, bytes);
return DECODE_OK;
} else {
@@ -7697,13 +7786,13 @@ UPB_FORCEINLINE static size_t peekbytes(upb_pbdecoder *d, void *buf,
/* Decoding of wire types *****************************************************/
-// Slow path for decoding a varint from the current buffer position.
-// Returns a status code as described in decoder.int.h.
+/* Slow path for decoding a varint from the current buffer position.
+ * Returns a status code as described in decoder.int.h. */
UPB_NOINLINE int32_t upb_pbdecoder_decode_varint_slow(upb_pbdecoder *d,
uint64_t *u64) {
- *u64 = 0;
uint8_t byte = 0x80;
int bitpos;
+ *u64 = 0;
for(bitpos = 0; bitpos < 70 && (byte & 0x80); bitpos += 7) {
int32_t ret = getbytes(d, &byte, 1);
if (ret >= 0) return ret;
@@ -7716,15 +7805,15 @@ UPB_NOINLINE int32_t upb_pbdecoder_decode_varint_slow(upb_pbdecoder *d,
return DECODE_OK;
}
-// Decodes a varint from the current buffer position.
-// Returns a status code as described in decoder.int.h.
+/* Decodes a varint from the current buffer position.
+ * Returns a status code as described in decoder.int.h. */
UPB_FORCEINLINE static int32_t decode_varint(upb_pbdecoder *d, uint64_t *u64) {
if (curbufleft(d) > 0 && !(*d->ptr & 0x80)) {
*u64 = *d->ptr;
advance(d, 1);
return DECODE_OK;
} else if (curbufleft(d) >= 10) {
- // Fast case.
+ /* Fast case. */
upb_decoderet r = upb_vdecode_fast(d->ptr);
if (r.p == NULL) {
seterr(d, kUnterminatedVarint);
@@ -7734,22 +7823,23 @@ UPB_FORCEINLINE static int32_t decode_varint(upb_pbdecoder *d, uint64_t *u64) {
*u64 = r.val;
return DECODE_OK;
} else {
- // Slow case -- varint spans buffer seam.
+ /* Slow case -- varint spans buffer seam. */
return upb_pbdecoder_decode_varint_slow(d, u64);
}
}
-// Decodes a 32-bit varint from the current buffer position.
-// Returns a status code as described in decoder.int.h.
+/* Decodes a 32-bit varint from the current buffer position.
+ * Returns a status code as described in decoder.int.h. */
UPB_FORCEINLINE static int32_t decode_v32(upb_pbdecoder *d, uint32_t *u32) {
uint64_t u64;
int32_t ret = decode_varint(d, &u64);
if (ret >= 0) return ret;
if (u64 > UINT32_MAX) {
seterr(d, "Unterminated 32-bit varint");
- // TODO(haberman) guarantee that this function return is >= 0 somehow,
- // so we know this path will always be treated as error by our caller.
- // Right now the size_t -> int32_t can overflow and produce negative values.
+ /* TODO(haberman) guarantee that this function return is >= 0 somehow,
+ * so we know this path will always be treated as error by our caller.
+ * Right now the size_t -> int32_t can overflow and produce negative values.
+ */
*u32 = 0;
return upb_pbdecoder_suspend(d);
}
@@ -7757,22 +7847,22 @@ UPB_FORCEINLINE static int32_t decode_v32(upb_pbdecoder *d, uint32_t *u32) {
return DECODE_OK;
}
-// Decodes a fixed32 from the current buffer position.
-// Returns a status code as described in decoder.int.h.
-// TODO: proper byte swapping for big-endian machines.
+/* Decodes a fixed32 from the current buffer position.
+ * Returns a status code as described in decoder.int.h.
+ * TODO: proper byte swapping for big-endian machines. */
UPB_FORCEINLINE static int32_t decode_fixed32(upb_pbdecoder *d, uint32_t *u32) {
return getbytes(d, u32, 4);
}
-// Decodes a fixed64 from the current buffer position.
-// Returns a status code as described in decoder.int.h.
-// TODO: proper byte swapping for big-endian machines.
+/* Decodes a fixed64 from the current buffer position.
+ * Returns a status code as described in decoder.int.h.
+ * TODO: proper byte swapping for big-endian machines. */
UPB_FORCEINLINE static int32_t decode_fixed64(upb_pbdecoder *d, uint64_t *u64) {
return getbytes(d, u64, 8);
}
-// Non-static versions of the above functions.
-// These are called by the JIT for fallback paths.
+/* Non-static versions of the above functions.
+ * These are called by the JIT for fallback paths. */
int32_t upb_pbdecoder_decode_f32(upb_pbdecoder *d, uint32_t *u32) {
return decode_fixed32(d, u32);
}
@@ -7784,7 +7874,7 @@ int32_t upb_pbdecoder_decode_f64(upb_pbdecoder *d, uint64_t *u64) {
static double as_double(uint64_t n) { double d; memcpy(&d, &n, 8); return d; }
static float as_float(uint32_t n) { float f; memcpy(&f, &n, 4); return f; }
-// Pushes a frame onto the decoder stack.
+/* Pushes a frame onto the decoder stack. */
static bool decoder_push(upb_pbdecoder *d, uint64_t end) {
upb_pbdecoder_frame *fr = d->top;
@@ -7805,17 +7895,17 @@ static bool decoder_push(upb_pbdecoder *d, uint64_t end) {
}
static bool pushtagdelim(upb_pbdecoder *d, uint32_t arg) {
- // While we expect to see an "end" tag (either ENDGROUP or a non-sequence
- // field number) prior to hitting any enclosing submessage end, pushing our
- // existing delim end prevents us from continuing to parse values from a
- // corrupt proto that doesn't give us an END tag in time.
+ /* While we expect to see an "end" tag (either ENDGROUP or a non-sequence
+ * field number) prior to hitting any enclosing submessage end, pushing our
+ * existing delim end prevents us from continuing to parse values from a
+ * corrupt proto that doesn't give us an END tag in time. */
if (!decoder_push(d, d->top->end_ofs))
return false;
d->top->groupnum = arg;
return true;
}
-// Pops a frame from the decoder stack.
+/* Pops a frame from the decoder stack. */
static void decoder_pop(upb_pbdecoder *d) { d->top--; }
UPB_NOINLINE int32_t upb_pbdecoder_checktag_slow(upb_pbdecoder *d,
@@ -7824,7 +7914,7 @@ UPB_NOINLINE int32_t upb_pbdecoder_checktag_slow(upb_pbdecoder *d,
size_t bytes = upb_value_size(expected);
size_t read = peekbytes(d, &data, bytes);
if (read == bytes && data == expected) {
- // Advance past matched bytes.
+ /* Advance past matched bytes. */
int32_t ok = getbytes(d, &data, read);
UPB_ASSERT_VAR(ok, ok < 0);
return DECODE_OK;
@@ -7852,7 +7942,7 @@ have_tag:
return upb_pbdecoder_suspend(d);
}
- // TODO: deliver to unknown field callback.
+ /* TODO: deliver to unknown field callback. */
switch (wire_type) {
case UPB_WIRE_TYPE_32BIT:
CHECK_RETURN(skip(d, 4));
@@ -7895,29 +7985,29 @@ have_tag:
if (d->ptr == d->delim_end) {
seterr(d, "Enclosing submessage ended in the middle of value or group");
- // Unlike most errors we notice during parsing, right now we have consumed
- // all of the user's input.
- //
- // There are three different options for how to handle this case:
- //
- // 1. decode() = short count, error = set
- // 2. decode() = full count, error = set
- // 3. decode() = full count, error NOT set, short count and error will
- // be reported on next call to decode() (or end())
- //
- // (1) and (3) have the advantage that they preserve the invariant that an
- // error occurs iff decode() returns a short count.
- //
- // (2) and (3) have the advantage of reflecting the fact that all of the
- // bytes were in fact parsed (and possibly delivered to the unknown field
- // handler, in the future when that is supported).
- //
- // (3) requires extra state in the decode (a place to store the "permanent
- // error" that we should return for all subsequent attempts to decode).
- // But we likely want this anyway.
- //
- // Right now we do (1), thanks to the fact that we checkpoint *after* this
- // check. (3) may be a better choice long term; unclear at the moment.
+ /* Unlike most errors we notice during parsing, right now we have consumed
+ * all of the user's input.
+ *
+ * There are three different options for how to handle this case:
+ *
+ * 1. decode() = short count, error = set
+ * 2. decode() = full count, error = set
+ * 3. decode() = full count, error NOT set, short count and error will
+ * be reported on next call to decode() (or end())
+ *
+ * (1) and (3) have the advantage that they preserve the invariant that an
+ * error occurs iff decode() returns a short count.
+ *
+ * (2) and (3) have the advantage of reflecting the fact that all of the
+ * bytes were in fact parsed (and possibly delivered to the unknown field
+ * handler, in the future when that is supported).
+ *
+ * (3) requires extra state in the decode (a place to store the "permanent
+ * error" that we should return for all subsequent attempts to decode).
+ * But we likely want this anyway.
+ *
+ * Right now we do (1), thanks to the fact that we checkpoint *after* this
+ * check. (3) may be a better choice long term; unclear at the moment. */
return upb_pbdecoder_suspend(d);
}
@@ -7932,24 +8022,27 @@ static void goto_endmsg(upb_pbdecoder *d) {
d->pc = d->top->base + upb_value_getuint64(v);
}
-// Parses a tag and jumps to the corresponding bytecode instruction for this
-// field.
-//
-// If the tag is unknown (or the wire type doesn't match), parses the field as
-// unknown. If the tag is a valid ENDGROUP tag, jumps to the bytecode
-// instruction for the end of message.
+/* Parses a tag and jumps to the corresponding bytecode instruction for this
+ * field.
+ *
+ * If the tag is unknown (or the wire type doesn't match), parses the field as
+ * unknown. If the tag is a valid ENDGROUP tag, jumps to the bytecode
+ * instruction for the end of message. */
static int32_t dispatch(upb_pbdecoder *d) {
upb_inttable *dispatch = d->top->dispatch;
-
- // Decode tag.
uint32_t tag;
+ uint8_t wire_type;
+ uint32_t fieldnum;
+ upb_value val;
+ int32_t ret;
+
+ /* Decode tag. */
CHECK_RETURN(decode_v32(d, &tag));
- uint8_t wire_type = tag & 0x7;
- uint32_t fieldnum = tag >> 3;
+ wire_type = tag & 0x7;
+ fieldnum = tag >> 3;
- // Lookup tag. Because of packed/non-packed compatibility, we have to
- // check the wire type against two possibilities.
- upb_value val;
+ /* Lookup tag. Because of packed/non-packed compatibility, we have to
+ * check the wire type against two possibilities. */
if (fieldnum != DISPATCH_ENDMSG &&
upb_inttable_lookup32(dispatch, fieldnum, &val)) {
uint64_t v = upb_value_getuint64(val);
@@ -7965,17 +8058,17 @@ static int32_t dispatch(upb_pbdecoder *d) {
}
}
- // Unknown field or ENDGROUP.
- int32_t ret = upb_pbdecoder_skipunknown(d, fieldnum, wire_type);
+ /* Unknown field or ENDGROUP. */
+ ret = upb_pbdecoder_skipunknown(d, fieldnum, wire_type);
if (ret == DECODE_ENDGROUP) {
goto_endmsg(d);
return DECODE_OK;
} else if (ret == DECODE_OK) {
- // We just consumed some input, so we might now have consumed all the data
- // in the delmited region. Since every opcode that can trigger dispatch is
- // directly preceded by OP_CHECKDELIM, rewind to it now to re-check the
- // delimited end.
+ /* We just consumed some input, so we might now have consumed all the data
+ * in the delmited region. Since every opcode that can trigger dispatch is
+ * directly preceded by OP_CHECKDELIM, rewind to it now to re-check the
+ * delimited end. */
d->pc = d->last - 1;
assert(getop(*d->pc) == OP_CHECKDELIM);
return DECODE_OK;
@@ -7984,8 +8077,8 @@ static int32_t dispatch(upb_pbdecoder *d) {
return ret;
}
-// Callers know that the stack is more than one deep because the opcodes that
-// call this only occur after PUSH operations.
+/* Callers know that the stack is more than one deep because the opcodes that
+ * call this only occur after PUSH operations. */
upb_pbdecoder_frame *outer_frame(upb_pbdecoder *d) {
assert(d->top != d->stack);
return d->top - 1;
@@ -7994,14 +8087,15 @@ upb_pbdecoder_frame *outer_frame(upb_pbdecoder *d) {
/* The main decoding loop *****************************************************/
-// The main decoder VM function. Uses traditional bytecode dispatch loop with a
-// switch() statement.
+/* The main decoder VM function. Uses traditional bytecode dispatch loop with a
+ * switch() statement. */
size_t upb_pbdecoder_decode(void *closure, const void *hd, const char *buf,
size_t size, const upb_bufhandle *handle) {
upb_pbdecoder *d = closure;
const mgroup *group = hd;
+ int32_t result;
assert(buf);
- int32_t result = upb_pbdecoder_resume(d, NULL, buf, size, handle);
+ result = upb_pbdecoder_resume(d, NULL, buf, size, handle);
if (result == DECODE_ENDGROUP) {
goto_endmsg(d);
}
@@ -8018,11 +8112,16 @@ size_t upb_pbdecoder_decode(void *closure, const void *hd, const char *buf,
})
while(1) {
+ int32_t instruction;
+ opcode op;
+ uint32_t arg;
+ int32_t longofs;
+
d->last = d->pc;
- int32_t instruction = *d->pc++;
- opcode op = getop(instruction);
- uint32_t arg = instruction >> 8;
- int32_t longofs = arg;
+ instruction = *d->pc++;
+ op = getop(instruction);
+ arg = instruction >> 8;
+ longofs = arg;
assert(d->ptr != d->residual_end);
#ifdef UPB_DUMP_BYTECODE
fprintf(stderr, "s_ofs=%d buf_ofs=%d data_rem=%d buf_rem=%d delim_rem=%d "
@@ -8037,9 +8136,9 @@ size_t upb_pbdecoder_decode(void *closure, const void *hd, const char *buf,
arg);
#endif
switch (op) {
- // Technically, we are losing data if we see a 32-bit varint that is not
- // properly sign-extended. We could detect this and error about the data
- // loss, but proto2 does not do this, so we pass.
+ /* Technically, we are losing data if we see a 32-bit varint that is not
+ * properly sign-extended. We could detect this and error about the data
+ * loss, but proto2 does not do this, so we pass. */
PRIMITIVE_OP(INT32, varint, int32, int32_t, uint64_t)
PRIMITIVE_OP(INT64, varint, int64, int64_t, uint64_t)
PRIMITIVE_OP(UINT32, varint, uint32, uint32_t, uint64_t)
@@ -8084,7 +8183,7 @@ size_t upb_pbdecoder_decode(void *closure, const void *hd, const char *buf,
upb_pbdecoder_frame *outer = outer_frame(d);
CHECK_SUSPEND(upb_sink_startstr(&outer->sink, arg, len, &d->top->sink));
if (len == 0) {
- d->pc++; // Skip OP_STRING.
+ d->pc++; /* Skip OP_STRING. */
}
)
VMCASE(OP_STRING,
@@ -8096,15 +8195,15 @@ size_t upb_pbdecoder_decode(void *closure, const void *hd, const char *buf,
return upb_pbdecoder_suspend(d);
} else {
int32_t ret = skip(d, n);
- // This shouldn't return DECODE_OK, because n > len.
+ /* This shouldn't return DECODE_OK, because n > len. */
assert(ret >= 0);
return ret;
}
}
advance(d, n);
if (n < len || d->delim_end == NULL) {
- // We aren't finished with this string yet.
- d->pc--; // Repeat OP_STRING.
+ /* We aren't finished with this string yet. */
+ d->pc--; /* Repeat OP_STRING. */
if (n > 0) checkpoint(d);
return upb_pbdecoder_suspend(d);
}
@@ -8132,8 +8231,9 @@ size_t upb_pbdecoder_decode(void *closure, const void *hd, const char *buf,
set_delim_end(d);
)
VMCASE(OP_CHECKDELIM,
- // We are guaranteed of this assert because we never allow ourselves to
- // consume bytes beyond data_end, which covers delim_end when non-NULL.
+ /* We are guaranteed of this assert because we never allow ourselves to
+ * consume bytes beyond data_end, which covers delim_end when non-NULL.
+ */
assert(!(d->delim_end && d->ptr > d->delim_end));
if (d->ptr == d->delim_end)
d->pc += longofs;
@@ -8150,8 +8250,9 @@ size_t upb_pbdecoder_decode(void *closure, const void *hd, const char *buf,
d->pc += longofs;
)
VMCASE(OP_TAG1,
+ uint8_t expected;
CHECK_SUSPEND(curbufleft(d) > 0);
- uint8_t expected = (arg >> 8) & 0xff;
+ expected = (arg >> 8) & 0xff;
if (*d->ptr == expected) {
advance(d, 1);
} else {
@@ -8162,13 +8263,14 @@ size_t upb_pbdecoder_decode(void *closure, const void *hd, const char *buf,
CHECK_RETURN(dispatch(d));
} else {
d->pc += shortofs;
- break; // Avoid checkpoint().
+ break; /* Avoid checkpoint(). */
}
}
)
VMCASE(OP_TAG2,
+ uint16_t expected;
CHECK_SUSPEND(curbufleft(d) > 0);
- uint16_t expected = (arg >> 8) & 0xffff;
+ expected = (arg >> 8) & 0xffff;
if (curbufleft(d) >= 2) {
uint16_t actual;
memcpy(&actual, d->ptr, 2);
@@ -8185,9 +8287,10 @@ size_t upb_pbdecoder_decode(void *closure, const void *hd, const char *buf,
)
VMCASE(OP_TAGN, {
uint64_t expected;
+ int32_t result;
memcpy(&expected, d->pc, 8);
d->pc += 2;
- int32_t result = upb_pbdecoder_checktag_slow(d, expected);
+ result = upb_pbdecoder_checktag_slow(d, expected);
if (result == DECODE_MISMATCH) goto badtag;
if (result >= 0) return result;
})
@@ -8213,9 +8316,9 @@ void *upb_pbdecoder_startbc(void *closure, const void *pc, size_t size_hint) {
}
void *upb_pbdecoder_startjit(void *closure, const void *hd, size_t size_hint) {
+ upb_pbdecoder *d = closure;
UPB_UNUSED(hd);
UPB_UNUSED(size_hint);
- upb_pbdecoder *d = closure;
d->top->end_ofs = UINT64_MAX;
d->bufstart_ofs = 0;
d->call_len = 0;
@@ -8225,6 +8328,11 @@ void *upb_pbdecoder_startjit(void *closure, const void *hd, size_t size_hint) {
bool upb_pbdecoder_end(void *closure, const void *handler_data) {
upb_pbdecoder *d = closure;
const upb_pbdecodermethod *method = handler_data;
+ uint64_t end;
+ char dummy;
+#ifdef UPB_USE_JIT_X64
+ const mgroup *group = (const mgroup*)method->group;
+#endif
if (d->residual_end > d->residual) {
seterr(d, "Unexpected EOF");
@@ -8236,35 +8344,32 @@ bool upb_pbdecoder_end(void *closure, const void *handler_data) {
return false;
}
- // Message ends here.
- uint64_t end = offset(d);
+ /* Message ends here. */
+ end = offset(d);
d->top->end_ofs = end;
- char dummy;
#ifdef UPB_USE_JIT_X64
- const mgroup *group = (const mgroup*)method->group;
if (group->jit_code) {
if (d->top != d->stack)
d->stack->end_ofs = 0;
group->jit_code(closure, method->code_base.ptr, &dummy, 0, NULL);
- } else {
+ } else
#endif
- d->stack->end_ofs = end;
+ {
const uint32_t *p = d->pc;
- // Check the previous bytecode, but guard against beginning.
+ d->stack->end_ofs = end;
+ /* Check the previous bytecode, but guard against beginning. */
if (p != method->code_base.ptr) p--;
if (getop(*p) == OP_CHECKDELIM) {
- // Rewind from OP_TAG* to OP_CHECKDELIM.
+ /* Rewind from OP_TAG* to OP_CHECKDELIM. */
assert(getop(*d->pc) == OP_TAG1 ||
getop(*d->pc) == OP_TAG2 ||
getop(*d->pc) == OP_TAGN ||
- getop(*d->pc == OP_DISPATCH));
+ getop(*d->pc) == OP_DISPATCH);
d->pc = p;
}
upb_pbdecoder_decode(closure, handler_data, &dummy, 0, NULL);
-#ifdef UPB_USE_JIT_X64
}
-#endif
if (d->call_len != 0) {
seterr(d, "Unexpected EOF");
@@ -8293,8 +8398,8 @@ static size_t callstacksize(upb_pbdecoder *d, size_t entries) {
#ifdef UPB_USE_JIT_X64
if (d->method_->is_native_) {
- // Each native stack frame needs two pointers, plus we need a few frames for
- // the enter/exit trampolines.
+ /* Each native stack frame needs two pointers, plus we need a few frames for
+ * the enter/exit trampolines. */
size_t ret = entries * sizeof(void*) * 2;
ret += sizeof(void*) * 10;
return ret;
@@ -8335,7 +8440,7 @@ upb_pbdecoder *upb_pbdecoder_create(upb_env *e, const upb_pbdecodermethod *m,
}
upb_sink_reset(&d->top->sink, sink->handlers, sink->closure);
- // If this fails, increase the value in decoder.h.
+ /* If this fails, increase the value in decoder.h. */
assert(upb_env_bytesallocated(e) - size_before <= UPB_PB_DECODER_SIZE);
return d;
}
@@ -8360,12 +8465,12 @@ bool upb_pbdecoder_setmaxnesting(upb_pbdecoder *d, size_t max) {
assert(d->top >= d->stack);
if (max < (size_t)(d->top - d->stack)) {
- // Can't set a limit smaller than what we are currently at.
+ /* Can't set a limit smaller than what we are currently at. */
return false;
}
if (max > d->stack_size) {
- // Need to reallocate stack and callstack to accommodate.
+ /* Need to reallocate stack and callstack to accommodate. */
size_t old_size = stacksize(d, d->stack_size);
size_t new_size = stacksize(d, max);
void *p = upb_env_realloc(d->env, d->stack, old_size, new_size);
@@ -8450,73 +8555,74 @@ bool upb_pbdecoder_setmaxnesting(upb_pbdecoder *d, size_t max) {
#include <stdlib.h>
-// The output buffer is divided into segments; a segment is a string of data
-// that is "ready to go" -- it does not need any varint lengths inserted into
-// the middle. The seams between segments are where varints will be inserted
-// once they are known.
-//
-// We also use the concept of a "run", which is a range of encoded bytes that
-// occur at a single submessage level. Every segment contains one or more runs.
-//
-// A segment can span messages. Consider:
-//
-// .--Submessage lengths---------.
-// | | |
-// | V V
-// V | |--------------- | |-----------------
-// Submessages: | |-----------------------------------------------
-// Top-level msg: ------------------------------------------------------------
-//
-// Segments: ----- ------------------- -----------------
-// Runs: *---- *--------------*--- *----------------
-// (* marks the start)
-//
-// Note that the top-level menssage is not in any segment because it does not
-// have any length preceding it.
-//
-// A segment is only interrupted when another length needs to be inserted. So
-// observe how the second segment spans both the inner submessage and part of
-// the next enclosing message.
+/* The output buffer is divided into segments; a segment is a string of data
+ * that is "ready to go" -- it does not need any varint lengths inserted into
+ * the middle. The seams between segments are where varints will be inserted
+ * once they are known.
+ *
+ * We also use the concept of a "run", which is a range of encoded bytes that
+ * occur at a single submessage level. Every segment contains one or more runs.
+ *
+ * A segment can span messages. Consider:
+ *
+ * .--Submessage lengths---------.
+ * | | |
+ * | V V
+ * V | |--------------- | |-----------------
+ * Submessages: | |-----------------------------------------------
+ * Top-level msg: ------------------------------------------------------------
+ *
+ * Segments: ----- ------------------- -----------------
+ * Runs: *---- *--------------*--- *----------------
+ * (* marks the start)
+ *
+ * Note that the top-level menssage is not in any segment because it does not
+ * have any length preceding it.
+ *
+ * A segment is only interrupted when another length needs to be inserted. So
+ * observe how the second segment spans both the inner submessage and part of
+ * the next enclosing message. */
typedef struct {
- uint32_t msglen; // The length to varint-encode before this segment.
- uint32_t seglen; // Length of the segment.
+ uint32_t msglen; /* The length to varint-encode before this segment. */
+ uint32_t seglen; /* Length of the segment. */
} upb_pb_encoder_segment;
struct upb_pb_encoder {
upb_env *env;
- // Our input and output.
+ /* Our input and output. */
upb_sink input_;
upb_bytessink *output_;
- // The "subclosure" -- used as the inner closure as part of the bytessink
- // protocol.
+ /* The "subclosure" -- used as the inner closure as part of the bytessink
+ * protocol. */
void *subc;
- // The output buffer and limit, and our current write position. "buf"
- // initially points to "initbuf", but is dynamically allocated if we need to
- // grow beyond the initial size.
+ /* The output buffer and limit, and our current write position. "buf"
+ * initially points to "initbuf", but is dynamically allocated if we need to
+ * grow beyond the initial size. */
char *buf, *ptr, *limit;
- // The beginning of the current run, or undefined if we are at the top level.
+ /* The beginning of the current run, or undefined if we are at the top
+ * level. */
char *runbegin;
- // The list of segments we are accumulating.
+ /* The list of segments we are accumulating. */
upb_pb_encoder_segment *segbuf, *segptr, *seglimit;
- // The stack of enclosing submessages. Each entry in the stack points to the
- // segment where this submessage's length is being accumulated.
+ /* The stack of enclosing submessages. Each entry in the stack points to the
+ * segment where this submessage's length is being accumulated. */
int *stack, *top, *stacklimit;
- // Depth of startmsg/endmsg calls.
+ /* Depth of startmsg/endmsg calls. */
int depth;
};
/* low-level buffering ********************************************************/
-// Low-level functions for interacting with the output buffer.
+/* Low-level functions for interacting with the output buffer. */
-// TODO(haberman): handle pushback
+/* TODO(haberman): handle pushback */
static void putbuf(upb_pb_encoder *e, const char *buf, size_t len) {
size_t n = upb_bytessink_putbuf(e->output_, e->subc, buf, len, NULL);
UPB_ASSERT_VAR(n, n == len);
@@ -8526,11 +8632,12 @@ static upb_pb_encoder_segment *top(upb_pb_encoder *e) {
return &e->segbuf[*e->top];
}
-// Call to ensure that at least "bytes" bytes are available for writing at
-// e->ptr. Returns false if the bytes could not be allocated.
+/* Call to ensure that at least "bytes" bytes are available for writing at
+ * e->ptr. Returns false if the bytes could not be allocated. */
static bool reserve(upb_pb_encoder *e, size_t bytes) {
if ((size_t)(e->limit - e->ptr) < bytes) {
- // Grow buffer.
+ /* Grow buffer. */
+ char *new_buf;
size_t needed = bytes + (e->ptr - e->buf);
size_t old_size = e->limit - e->buf;
@@ -8540,7 +8647,7 @@ static bool reserve(upb_pb_encoder *e, size_t bytes) {
new_size *= 2;
}
- char *new_buf = upb_env_realloc(e->env, e->buf, old_size, new_size);
+ new_buf = upb_env_realloc(e->env, e->buf, old_size, new_size);
if (new_buf == NULL) {
return false;
@@ -8555,22 +8662,22 @@ static bool reserve(upb_pb_encoder *e, size_t bytes) {
return true;
}
-// Call when "bytes" bytes have been writte at e->ptr. The caller *must* have
-// previously called reserve() with at least this many bytes.
+/* Call when "bytes" bytes have been writte at e->ptr. The caller *must* have
+ * previously called reserve() with at least this many bytes. */
static void encoder_advance(upb_pb_encoder *e, size_t bytes) {
assert((size_t)(e->limit - e->ptr) >= bytes);
e->ptr += bytes;
}
-// Call when all of the bytes for a handler have been written. Flushes the
-// bytes if possible and necessary, returning false if this failed.
+/* Call when all of the bytes for a handler have been written. Flushes the
+ * bytes if possible and necessary, returning false if this failed. */
static bool commit(upb_pb_encoder *e) {
if (!e->top) {
- // We aren't inside a delimited region. Flush our accumulated bytes to
- // the output.
- //
- // TODO(haberman): in the future we may want to delay flushing for
- // efficiency reasons.
+ /* We aren't inside a delimited region. Flush our accumulated bytes to
+ * the output.
+ *
+ * TODO(haberman): in the future we may want to delay flushing for
+ * efficiency reasons. */
putbuf(e, e->buf, e->ptr - e->buf);
e->ptr = e->buf;
}
@@ -8578,7 +8685,7 @@ static bool commit(upb_pb_encoder *e) {
return true;
}
-// Writes the given bytes to the buffer, handling reserve/advance.
+/* Writes the given bytes to the buffer, handling reserve/advance. */
static bool encode_bytes(upb_pb_encoder *e, const void *data, size_t len) {
if (!reserve(e, len)) {
return false;
@@ -8589,32 +8696,33 @@ static bool encode_bytes(upb_pb_encoder *e, const void *data, size_t len) {
return true;
}
-// Finish the current run by adding the run totals to the segment and message
-// length.
+/* Finish the current run by adding the run totals to the segment and message
+ * length. */
static void accumulate(upb_pb_encoder *e) {
+ size_t run_len;
assert(e->ptr >= e->runbegin);
- size_t run_len = e->ptr - e->runbegin;
+ run_len = e->ptr - e->runbegin;
e->segptr->seglen += run_len;
top(e)->msglen += run_len;
e->runbegin = e->ptr;
}
-// Call to indicate the start of delimited region for which the full length is
-// not yet known. All data will be buffered until the length is known.
-// Delimited regions may be nested; their lengths will all be tracked properly.
+/* Call to indicate the start of delimited region for which the full length is
+ * not yet known. All data will be buffered until the length is known.
+ * Delimited regions may be nested; their lengths will all be tracked properly. */
static bool start_delim(upb_pb_encoder *e) {
if (e->top) {
- // We are already buffering, advance to the next segment and push it on the
- // stack.
+ /* We are already buffering, advance to the next segment and push it on the
+ * stack. */
accumulate(e);
if (++e->top == e->stacklimit) {
- // TODO(haberman): grow stack?
+ /* TODO(haberman): grow stack? */
return false;
}
if (++e->segptr == e->seglimit) {
- // Grow segment buffer.
+ /* Grow segment buffer. */
size_t old_size =
(e->seglimit - e->segbuf) * sizeof(upb_pb_encoder_segment);
size_t new_size = old_size * 2;
@@ -8630,7 +8738,7 @@ static bool start_delim(upb_pb_encoder *e) {
e->segbuf = new_buf;
}
} else {
- // We were previously at the top level, start buffering.
+ /* We were previously at the top level, start buffering. */
e->segptr = e->segbuf;
e->top = e->stack;
e->runbegin = e->ptr;
@@ -8643,15 +8751,16 @@ static bool start_delim(upb_pb_encoder *e) {
return true;
}
-// Call to indicate the end of a delimited region. We now know the length of
-// the delimited region. If we are not nested inside any other delimited
-// regions, we can now emit all of the buffered data we accumulated.
+/* Call to indicate the end of a delimited region. We now know the length of
+ * the delimited region. If we are not nested inside any other delimited
+ * regions, we can now emit all of the buffered data we accumulated. */
static bool end_delim(upb_pb_encoder *e) {
+ size_t msglen;
accumulate(e);
- size_t msglen = top(e)->msglen;
+ msglen = top(e)->msglen;
if (e->top == e->stack) {
- // All lengths are now available, emit all buffered data.
+ /* All lengths are now available, emit all buffered data. */
char buf[UPB_PB_VARINT_MAX_LEN];
upb_pb_encoder_segment *s;
const char *ptr = e->buf;
@@ -8665,7 +8774,8 @@ static bool end_delim(upb_pb_encoder *e) {
e->ptr = e->buf;
e->top = NULL;
} else {
- // Need to keep buffering; propagate length info into enclosing submessages.
+ /* Need to keep buffering; propagate length info into enclosing
+ * submessages. */
--e->top;
top(e)->msglen += msglen + upb_varint_size(msglen);
}
@@ -8676,14 +8786,14 @@ static bool end_delim(upb_pb_encoder *e) {
/* tag_t **********************************************************************/
-// A precomputed (pre-encoded) tag and length.
+/* A precomputed (pre-encoded) tag and length. */
typedef struct {
uint8_t bytes;
char tag[7];
} tag_t;
-// Allocates a new tag for this field, and sets it in these handlerattr.
+/* Allocates a new tag for this field, and sets it in these handlerattr. */
static void new_tag(upb_handlers *h, const upb_fielddef *f, upb_wiretype_t wt,
upb_handlerattr *attr) {
uint32_t n = upb_fielddef_number(f);
@@ -8704,12 +8814,12 @@ static bool encode_tag(upb_pb_encoder *e, const tag_t *tag) {
/* encoding of wire types *****************************************************/
static bool encode_fixed64(upb_pb_encoder *e, uint64_t val) {
- // TODO(haberman): byte-swap for big endian.
+ /* TODO(haberman): byte-swap for big endian. */
return encode_bytes(e, &val, sizeof(uint64_t));
}
static bool encode_fixed32(upb_pb_encoder *e, uint32_t val) {
- // TODO(haberman): byte-swap for big endian.
+ /* TODO(haberman): byte-swap for big endian. */
return encode_bytes(e, &val, sizeof(uint32_t));
}
@@ -8796,19 +8906,19 @@ static size_t encode_strbuf(void *c, const void *hd, const char *buf,
}
T(double, double, dbl2uint64, encode_fixed64)
-T(float, float, flt2uint32, encode_fixed32);
-T(int64, int64_t, uint64_t, encode_varint);
-T(int32, int32_t, uint32_t, encode_varint);
-T(fixed64, uint64_t, uint64_t, encode_fixed64);
-T(fixed32, uint32_t, uint32_t, encode_fixed32);
-T(bool, bool, bool, encode_varint);
-T(uint32, uint32_t, uint32_t, encode_varint);
-T(uint64, uint64_t, uint64_t, encode_varint);
-T(enum, int32_t, uint32_t, encode_varint);
-T(sfixed32, int32_t, uint32_t, encode_fixed32);
-T(sfixed64, int64_t, uint64_t, encode_fixed64);
-T(sint32, int32_t, upb_zzenc_32, encode_varint);
-T(sint64, int64_t, upb_zzenc_64, encode_varint);
+T(float, float, flt2uint32, encode_fixed32)
+T(int64, int64_t, uint64_t, encode_varint)
+T(int32, int32_t, uint32_t, encode_varint)
+T(fixed64, uint64_t, uint64_t, encode_fixed64)
+T(fixed32, uint32_t, uint32_t, encode_fixed32)
+T(bool, bool, bool, encode_varint)
+T(uint32, uint32_t, uint32_t, encode_varint)
+T(uint64, uint64_t, uint64_t, encode_varint)
+T(enum, int32_t, uint32_t, encode_varint)
+T(sfixed32, int32_t, uint32_t, encode_fixed32)
+T(sfixed64, int64_t, uint64_t, encode_fixed64)
+T(sint32, int32_t, upb_zzenc_32, encode_varint)
+T(sint64, int64_t, upb_zzenc_64, encode_varint)
#undef T
@@ -8816,13 +8926,15 @@ T(sint64, int64_t, upb_zzenc_64, encode_varint);
/* code to build the handlers *************************************************/
static void newhandlers_callback(const void *closure, upb_handlers *h) {
+ const upb_msgdef *m;
+ upb_msg_field_iter i;
+
UPB_UNUSED(closure);
upb_handlers_setstartmsg(h, startmsg, NULL);
upb_handlers_setendmsg(h, endmsg, NULL);
- const upb_msgdef *m = upb_handlers_msgdef(h);
- upb_msg_field_iter i;
+ m = upb_handlers_msgdef(h);
for(upb_msg_field_begin(&i, m);
!upb_msg_field_done(&i);
upb_msg_field_next(&i)) {
@@ -8834,7 +8946,7 @@ static void newhandlers_callback(const void *closure, upb_handlers *h) {
packed ? UPB_WIRE_TYPE_DELIMITED
: upb_pb_native_wire_types[upb_fielddef_descriptortype(f)];
- // Pre-encode the tag for this field.
+ /* Pre-encode the tag for this field. */
new_tag(h, f, wt, &attr);
if (packed) {
@@ -8877,7 +8989,7 @@ static void newhandlers_callback(const void *closure, upb_handlers *h) {
upb_handlers_setendsubmsg(h, f, encode_enddelimfield, &attr);
break;
case UPB_DESCRIPTOR_TYPE_GROUP: {
- // Endgroup takes a different tag (wire_type = END_GROUP).
+ /* Endgroup takes a different tag (wire_type = END_GROUP). */
upb_handlerattr attr2;
new_tag(h, f, UPB_WIRE_TYPE_END_GROUP, &attr2);
@@ -8913,7 +9025,7 @@ upb_pb_encoder *upb_pb_encoder_create(upb_env *env, const upb_handlers *h,
upb_bytessink *output) {
const size_t initial_bufsize = 256;
const size_t initial_segbufsize = 16;
- // TODO(haberman): make this configurable.
+ /* TODO(haberman): make this configurable. */
const size_t stack_size = 64;
#ifndef NDEBUG
const size_t size_before = upb_env_bytesallocated(env);
@@ -8942,7 +9054,7 @@ upb_pb_encoder *upb_pb_encoder_create(upb_env *env, const upb_handlers *h,
e->subc = output->closure;
e->ptr = e->buf;
- // If this fails, increase the value in encoder.h.
+ /* If this fails, increase the value in encoder.h. */
assert(upb_env_bytesallocated(env) - size_before <= UPB_PB_ENCODER_SIZE);
return e;
}
@@ -8962,28 +9074,31 @@ upb_sink *upb_pb_encoder_input(upb_pb_encoder *e) { return &e->input_; }
upb_def **upb_load_defs_from_descriptor(const char *str, size_t len, int *n,
void *owner, upb_status *status) {
- // Create handlers.
+ /* Create handlers. */
+ const upb_pbdecodermethod *decoder_m;
const upb_handlers *reader_h = upb_descreader_newhandlers(&reader_h);
+ upb_env env;
upb_pbdecodermethodopts opts;
+ upb_pbdecoder *decoder;
+ upb_descreader *reader;
+ bool ok;
+ upb_def **ret = NULL;
+ upb_def **defs;
+
upb_pbdecodermethodopts_init(&opts, reader_h);
- const upb_pbdecodermethod *decoder_m =
- upb_pbdecodermethod_new(&opts, &decoder_m);
+ decoder_m = upb_pbdecodermethod_new(&opts, &decoder_m);
- upb_env env;
upb_env_init(&env);
upb_env_reporterrorsto(&env, status);
- upb_descreader *reader = upb_descreader_create(&env, reader_h);
- upb_pbdecoder *decoder =
- upb_pbdecoder_create(&env, decoder_m, upb_descreader_input(reader));
+ reader = upb_descreader_create(&env, reader_h);
+ decoder = upb_pbdecoder_create(&env, decoder_m, upb_descreader_input(reader));
- // Push input data.
- bool ok = upb_bufsrc_putbuf(str, len, upb_pbdecoder_input(decoder));
-
- upb_def **ret = NULL;
+ /* Push input data. */
+ ok = upb_bufsrc_putbuf(str, len, upb_pbdecoder_input(decoder));
if (!ok) goto cleanup;
- upb_def **defs = upb_descreader_getdefs(reader, owner, n);
+ defs = upb_descreader_getdefs(reader, owner, n);
ret = malloc(sizeof(upb_def*) * (*n));
memcpy(ret, defs, sizeof(upb_def*) * (*n));
@@ -8997,21 +9112,24 @@ cleanup:
bool upb_load_descriptor_into_symtab(upb_symtab *s, const char *str, size_t len,
upb_status *status) {
int n;
+ bool success;
upb_def **defs = upb_load_defs_from_descriptor(str, len, &n, &defs, status);
if (!defs) return false;
- bool success = upb_symtab_add(s, defs, n, &defs, status);
+ success = upb_symtab_add(s, defs, n, &defs, status);
free(defs);
return success;
}
char *upb_readfile(const char *filename, size_t *len) {
+ long size;
+ char *buf;
FILE *f = fopen(filename, "rb");
if(!f) return NULL;
if(fseek(f, 0, SEEK_END) != 0) goto error;
- long size = ftell(f);
+ size = ftell(f);
if(size < 0) goto error;
if(fseek(f, 0, SEEK_SET) != 0) goto error;
- char *buf = malloc(size + 1);
+ buf = malloc(size + 1);
if(size && fread(buf, size, 1, f) != 1) goto error;
fclose(f);
if (len) *len = size;
@@ -9025,12 +9143,13 @@ error:
bool upb_load_descriptor_file_into_symtab(upb_symtab *symtab, const char *fname,
upb_status *status) {
size_t len;
+ bool success;
char *data = upb_readfile(fname, &len);
if (!data) {
if (status) upb_status_seterrf(status, "Couldn't read file: %s", fname);
return false;
}
- bool success = upb_load_descriptor_into_symtab(symtab, data, len, status);
+ success = upb_load_descriptor_into_symtab(symtab, data, len, status);
free(data);
return success;
}
@@ -9048,6 +9167,7 @@ bool upb_load_descriptor_file_into_symtab(upb_symtab *symtab, const char *fname,
#include <ctype.h>
#include <float.h>
#include <inttypes.h>
+#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -9084,22 +9204,24 @@ static int endfield(upb_textprinter *p) {
static int putescaped(upb_textprinter *p, const char *buf, size_t len,
bool preserve_utf8) {
- // Based on CEscapeInternal() from Google's protobuf release.
+ /* Based on CEscapeInternal() from Google's protobuf release. */
char dstbuf[4096], *dst = dstbuf, *dstend = dstbuf + sizeof(dstbuf);
const char *end = buf + len;
- // I think hex is prettier and more useful, but proto2 uses octal; should
- // investigate whether it can parse hex also.
+ /* I think hex is prettier and more useful, but proto2 uses octal; should
+ * investigate whether it can parse hex also. */
const bool use_hex = false;
- bool last_hex_escape = false; // true if last output char was \xNN
+ bool last_hex_escape = false; /* true if last output char was \xNN */
for (; buf < end; buf++) {
+ bool is_hex_escape;
+
if (dstend - dst < 4) {
upb_bytessink_putbuf(p->output_, p->subc, dstbuf, dst - dstbuf, NULL);
dst = dstbuf;
}
- bool is_hex_escape = false;
+ is_hex_escape = false;
switch (*buf) {
case '\n': *(dst++) = '\\'; *(dst++) = 'n'; break;
case '\r': *(dst++) = '\\'; *(dst++) = 'r'; break;
@@ -9108,9 +9230,9 @@ static int putescaped(upb_textprinter *p, const char *buf, size_t len,
case '\'': *(dst++) = '\\'; *(dst++) = '\''; break;
case '\\': *(dst++) = '\\'; *(dst++) = '\\'; break;
default:
- // Note that if we emit \xNN and the buf character after that is a hex
- // digit then that digit must be escaped too to prevent it being
- // interpreted as part of the character code by C.
+ /* Note that if we emit \xNN and the buf character after that is a hex
+ * digit then that digit must be escaped too to prevent it being
+ * interpreted as part of the character code by C. */
if ((!preserve_utf8 || (uint8_t)*buf < 0x80) &&
(!isprint(*buf) || (last_hex_escape && isxdigit(*buf)))) {
sprintf(dst, (use_hex ? "\\x%02x" : "\\%03o"), (uint8_t)*buf);
@@ -9122,29 +9244,34 @@ static int putescaped(upb_textprinter *p, const char *buf, size_t len,
}
last_hex_escape = is_hex_escape;
}
- // Flush remaining data.
+ /* Flush remaining data. */
upb_bytessink_putbuf(p->output_, p->subc, dstbuf, dst - dstbuf, NULL);
return 0;
}
bool putf(upb_textprinter *p, const char *fmt, ...) {
va_list args;
+ va_list args_copy;
+ char *str;
+ int written;
+ int len;
+ bool ok;
+
va_start(args, fmt);
- // Run once to get the length of the string.
- va_list args_copy;
- va_copy(args_copy, args);
- int len = vsnprintf(NULL, 0, fmt, args_copy);
+ /* Run once to get the length of the string. */
+ _upb_va_copy(args_copy, args);
+ len = _upb_vsnprintf(NULL, 0, fmt, args_copy);
va_end(args_copy);
- // + 1 for NULL terminator (vsnprintf() requires it even if we don't).
- char *str = malloc(len + 1);
+ /* + 1 for NULL terminator (vsprintf() requires it even if we don't). */
+ str = malloc(len + 1);
if (!str) return false;
- int written = vsnprintf(str, len + 1, fmt, args);
+ written = vsprintf(str, fmt, args);
va_end(args);
UPB_ASSERT_VAR(written, written == len);
- bool ok = upb_bytessink_putbuf(p->output_, p->subc, str, len, NULL);
+ ok = upb_bytessink_putbuf(p->output_, p->subc, str, len, NULL);
free(str);
return ok;
}
@@ -9153,8 +9280,8 @@ bool putf(upb_textprinter *p, const char *fmt, ...) {
/* handlers *******************************************************************/
static bool textprinter_startmsg(void *c, const void *hd) {
- UPB_UNUSED(hd);
upb_textprinter *p = c;
+ UPB_UNUSED(hd);
if (p->indent_depth_ == 0) {
upb_bytessink_start(p->output_, 0, &p->subc);
}
@@ -9162,9 +9289,9 @@ static bool textprinter_startmsg(void *c, const void *hd) {
}
static bool textprinter_endmsg(void *c, const void *hd, upb_status *s) {
+ upb_textprinter *p = c;
UPB_UNUSED(hd);
UPB_UNUSED(s);
- upb_textprinter *p = c;
if (p->indent_depth_ == 0) {
upb_bytessink_end(p->output_);
}
@@ -9201,14 +9328,14 @@ err:
TYPE(int32, int32_t, "%" PRId32)
TYPE(int64, int64_t, "%" PRId64)
-TYPE(uint32, uint32_t, "%" PRIu32);
+TYPE(uint32, uint32_t, "%" PRIu32)
TYPE(uint64, uint64_t, "%" PRIu64)
TYPE(float, float, "%." STRINGIFY_MACROVAL(FLT_DIG) "g")
TYPE(double, double, "%." STRINGIFY_MACROVAL(DBL_DIG) "g")
#undef TYPE
-// Output a symbolic value from the enum if found, else just print as int32.
+/* Output a symbolic value from the enum if found, else just print as int32. */
static bool textprinter_putenum(void *closure, const void *handler_data,
int32_t val) {
upb_textprinter *p = closure;
@@ -9228,17 +9355,17 @@ static bool textprinter_putenum(void *closure, const void *handler_data,
static void *textprinter_startstr(void *closure, const void *handler_data,
size_t size_hint) {
+ upb_textprinter *p = closure;
const upb_fielddef *f = handler_data;
UPB_UNUSED(size_hint);
- upb_textprinter *p = closure;
indent(p);
putf(p, "%s: \"", upb_fielddef_name(f));
return p;
}
static bool textprinter_endstr(void *closure, const void *handler_data) {
- UPB_UNUSED(handler_data);
upb_textprinter *p = closure;
+ UPB_UNUSED(handler_data);
putf(p, "\"");
endfield(p);
return true;
@@ -9246,9 +9373,9 @@ static bool textprinter_endstr(void *closure, const void *handler_data) {
static size_t textprinter_putstr(void *closure, const void *hd, const char *buf,
size_t len, const upb_bufhandle *handle) {
- UPB_UNUSED(handle);
upb_textprinter *p = closure;
const upb_fielddef *f = hd;
+ UPB_UNUSED(handle);
CHECK(putescaped(p, buf, len, upb_fielddef_type(f) == UPB_TYPE_STRING));
return len;
err:
@@ -9267,8 +9394,8 @@ err:
}
static bool textprinter_endsubmsg(void *closure, const void *handler_data) {
- UPB_UNUSED(handler_data);
upb_textprinter *p = closure;
+ UPB_UNUSED(handler_data);
p->indent_depth_--;
CHECK(indent(p));
upb_bytessink_putbuf(p->output_, p->subc, "}", 1, NULL);
@@ -9279,13 +9406,13 @@ err:
}
static void onmreg(const void *c, upb_handlers *h) {
- UPB_UNUSED(c);
const upb_msgdef *m = upb_handlers_msgdef(h);
+ upb_msg_field_iter i;
+ UPB_UNUSED(c);
upb_handlers_setstartmsg(h, textprinter_startmsg, NULL);
upb_handlers_setendmsg(h, textprinter_endmsg, NULL);
- upb_msg_field_iter i;
for(upb_msg_field_begin(&i, m);
!upb_msg_field_done(&i);
upb_msg_field_next(&i)) {
@@ -9375,32 +9502,33 @@ void upb_textprinter_setsingleline(upb_textprinter *p, bool single_line) {
*/
-// Index is descriptor type.
+/* Index is descriptor type. */
const uint8_t upb_pb_native_wire_types[] = {
- UPB_WIRE_TYPE_END_GROUP, // ENDGROUP
- UPB_WIRE_TYPE_64BIT, // DOUBLE
- UPB_WIRE_TYPE_32BIT, // FLOAT
- UPB_WIRE_TYPE_VARINT, // INT64
- UPB_WIRE_TYPE_VARINT, // UINT64
- UPB_WIRE_TYPE_VARINT, // INT32
- UPB_WIRE_TYPE_64BIT, // FIXED64
- UPB_WIRE_TYPE_32BIT, // FIXED32
- UPB_WIRE_TYPE_VARINT, // BOOL
- UPB_WIRE_TYPE_DELIMITED, // STRING
- UPB_WIRE_TYPE_START_GROUP, // GROUP
- UPB_WIRE_TYPE_DELIMITED, // MESSAGE
- UPB_WIRE_TYPE_DELIMITED, // BYTES
- UPB_WIRE_TYPE_VARINT, // UINT32
- UPB_WIRE_TYPE_VARINT, // ENUM
- UPB_WIRE_TYPE_32BIT, // SFIXED32
- UPB_WIRE_TYPE_64BIT, // SFIXED64
- UPB_WIRE_TYPE_VARINT, // SINT32
- UPB_WIRE_TYPE_VARINT, // SINT64
+ UPB_WIRE_TYPE_END_GROUP, /* ENDGROUP */
+ UPB_WIRE_TYPE_64BIT, /* DOUBLE */
+ UPB_WIRE_TYPE_32BIT, /* FLOAT */
+ UPB_WIRE_TYPE_VARINT, /* INT64 */
+ UPB_WIRE_TYPE_VARINT, /* UINT64 */
+ UPB_WIRE_TYPE_VARINT, /* INT32 */
+ UPB_WIRE_TYPE_64BIT, /* FIXED64 */
+ UPB_WIRE_TYPE_32BIT, /* FIXED32 */
+ UPB_WIRE_TYPE_VARINT, /* BOOL */
+ UPB_WIRE_TYPE_DELIMITED, /* STRING */
+ UPB_WIRE_TYPE_START_GROUP, /* GROUP */
+ UPB_WIRE_TYPE_DELIMITED, /* MESSAGE */
+ UPB_WIRE_TYPE_DELIMITED, /* BYTES */
+ UPB_WIRE_TYPE_VARINT, /* UINT32 */
+ UPB_WIRE_TYPE_VARINT, /* ENUM */
+ UPB_WIRE_TYPE_32BIT, /* SFIXED32 */
+ UPB_WIRE_TYPE_64BIT, /* SFIXED64 */
+ UPB_WIRE_TYPE_VARINT, /* SINT32 */
+ UPB_WIRE_TYPE_VARINT, /* SINT64 */
};
-// A basic branch-based decoder, uses 32-bit values to get good performance
-// on 32-bit architectures (but performs well on 64-bits also).
-// This scheme comes from the original Google Protobuf implementation (proto2).
+/* A basic branch-based decoder, uses 32-bit values to get good performance
+ * on 32-bit architectures (but performs well on 64-bits also).
+ * This scheme comes from the original Google Protobuf implementation
+ * (proto2). */
upb_decoderet upb_vdecode_max8_branch32(upb_decoderet r) {
upb_decoderet err = {NULL, 0};
const char *p = r.p;
@@ -9424,7 +9552,7 @@ done:
return r;
}
-// Like the previous, but uses 64-bit values.
+/* Like the previous, but uses 64-bit values. */
upb_decoderet upb_vdecode_max8_branch64(upb_decoderet r) {
const char *p = r.p;
uint64_t val = r.val;
@@ -9446,50 +9574,54 @@ done:
return r;
}
-// Given an encoded varint v, returns an integer with a single bit set that
-// indicates the end of the varint. Subtracting one from this value will
-// yield a mask that leaves only bits that are part of the varint. Returns
-// 0 if the varint is unterminated.
+/* Given an encoded varint v, returns an integer with a single bit set that
+ * indicates the end of the varint. Subtracting one from this value will
+ * yield a mask that leaves only bits that are part of the varint. Returns
+ * 0 if the varint is unterminated. */
static uint64_t upb_get_vstopbit(uint64_t v) {
uint64_t cbits = v | 0x7f7f7f7f7f7f7f7fULL;
return ~cbits & (cbits+1);
}
-// A branchless decoder. Credit to Pascal Massimino for the bit-twiddling.
+/* A branchless decoder. Credit to Pascal Massimino for the bit-twiddling. */
upb_decoderet upb_vdecode_max8_massimino(upb_decoderet r) {
uint64_t b;
+ uint64_t stop_bit;
+ upb_decoderet my_r;
memcpy(&b, r.p, sizeof(b));
- uint64_t stop_bit = upb_get_vstopbit(b);
+ stop_bit = upb_get_vstopbit(b);
b = (b & 0x7f7f7f7f7f7f7f7fULL) & (stop_bit - 1);
b += b & 0x007f007f007f007fULL;
b += 3 * (b & 0x0000ffff0000ffffULL);
b += 15 * (b & 0x00000000ffffffffULL);
if (stop_bit == 0) {
- // Error: unterminated varint.
+ /* Error: unterminated varint. */
upb_decoderet err_r = {(void*)0, 0};
return err_r;
}
- upb_decoderet my_r = {r.p + ((__builtin_ctzll(stop_bit) + 1) / 8),
- r.val | (b << 7)};
+ my_r = upb_decoderet_make(r.p + ((__builtin_ctzll(stop_bit) + 1) / 8),
+ r.val | (b << 7));
return my_r;
}
-// A branchless decoder. Credit to Daniel Wright for the bit-twiddling.
+/* A branchless decoder. Credit to Daniel Wright for the bit-twiddling. */
upb_decoderet upb_vdecode_max8_wright(upb_decoderet r) {
uint64_t b;
+ uint64_t stop_bit;
+ upb_decoderet my_r;
memcpy(&b, r.p, sizeof(b));
- uint64_t stop_bit = upb_get_vstopbit(b);
+ stop_bit = upb_get_vstopbit(b);
b &= (stop_bit - 1);
b = ((b & 0x7f007f007f007f00ULL) >> 1) | (b & 0x007f007f007f007fULL);
b = ((b & 0xffff0000ffff0000ULL) >> 2) | (b & 0x0000ffff0000ffffULL);
b = ((b & 0xffffffff00000000ULL) >> 4) | (b & 0x00000000ffffffffULL);
if (stop_bit == 0) {
- // Error: unterminated varint.
+ /* Error: unterminated varint. */
upb_decoderet err_r = {(void*)0, 0};
return err_r;
}
- upb_decoderet my_r = {r.p + ((__builtin_ctzll(stop_bit) + 1) / 8),
- r.val | (b << 14)};
+ my_r = upb_decoderet_make(r.p + ((__builtin_ctzll(stop_bit) + 1) / 8),
+ r.val | (b << 14));
return my_r;
}
@@ -9531,26 +9663,26 @@ upb_decoderet upb_vdecode_max8_wright(upb_decoderet r) {
typedef struct {
upb_sink sink;
- // The current message in which we're parsing, and the field whose value we're
- // expecting next.
+ /* The current message in which we're parsing, and the field whose value we're
+ * expecting next. */
const upb_msgdef *m;
const upb_fielddef *f;
- // We are in a repeated-field context, ready to emit mapentries as
- // submessages. This flag alters the start-of-object (open-brace) behavior to
- // begin a sequence of mapentry messages rather than a single submessage.
+ /* We are in a repeated-field context, ready to emit mapentries as
+ * submessages. This flag alters the start-of-object (open-brace) behavior to
+ * begin a sequence of mapentry messages rather than a single submessage. */
bool is_map;
- // We are in a map-entry message context. This flag is set when parsing the
- // value field of a single map entry and indicates to all value-field parsers
- // (subobjects, strings, numbers, and bools) that the map-entry submessage
- // should end as soon as the value is parsed.
+ /* We are in a map-entry message context. This flag is set when parsing the
+ * value field of a single map entry and indicates to all value-field parsers
+ * (subobjects, strings, numbers, and bools) that the map-entry submessage
+ * should end as soon as the value is parsed. */
bool is_mapentry;
- // If |is_map| or |is_mapentry| is true, |mapfield| refers to the parent
- // message's map field that we're currently parsing. This differs from |f|
- // because |f| is the field in the *current* message (i.e., the map-entry
- // message itself), not the parent's field that leads to this map.
+ /* If |is_map| or |is_mapentry| is true, |mapfield| refers to the parent
+ * message's map field that we're currently parsing. This differs from |f|
+ * because |f| is the field in the *current* message (i.e., the map-entry
+ * message itself), not the parent's field that leads to this map. */
const upb_fielddef *mapfield;
} upb_jsonparser_frame;
@@ -9559,41 +9691,41 @@ struct upb_json_parser {
upb_byteshandler input_handler_;
upb_bytessink input_;
- // Stack to track the JSON scopes we are in.
+ /* Stack to track the JSON scopes we are in. */
upb_jsonparser_frame stack[UPB_JSON_MAX_DEPTH];
upb_jsonparser_frame *top;
upb_jsonparser_frame *limit;
upb_status *status;
- // Ragel's internal parsing stack for the parsing state machine.
+ /* Ragel's internal parsing stack for the parsing state machine. */
int current_state;
int parser_stack[UPB_JSON_MAX_DEPTH];
int parser_top;
- // The handle for the current buffer.
+ /* The handle for the current buffer. */
const upb_bufhandle *handle;
- // Accumulate buffer. See details in parser.rl.
+ /* Accumulate buffer. See details in parser.rl. */
const char *accumulated;
size_t accumulated_len;
char *accumulate_buf;
size_t accumulate_buf_size;
- // Multi-part text data. See details in parser.rl.
+ /* Multi-part text data. See details in parser.rl. */
int multipart_state;
upb_selector_t string_selector;
- // Input capture. See details in parser.rl.
+ /* Input capture. See details in parser.rl. */
const char *capture;
- // Intermediate result of parsing a unicode escape sequence.
+ /* Intermediate result of parsing a unicode escape sequence. */
uint32_t digit;
};
#define PARSER_CHECK_RETURN(x) if (!(x)) return false
-// Used to signal that a capture has been suspended.
+/* Used to signal that a capture has been suspended. */
static char suspend_capture;
static upb_selector_t getsel_for_handlertype(upb_json_parser *p,
@@ -9618,8 +9750,8 @@ static bool check_stack(upb_json_parser *p) {
return true;
}
-// There are GCC/Clang built-ins for overflow checking which we could start
-// using if there was any performance benefit to it.
+/* There are GCC/Clang built-ins for overflow checking which we could start
+ * using if there was any performance benefit to it. */
static bool checked_add(size_t a, size_t b, size_t *c) {
if (SIZE_MAX - a < b) return false;
@@ -9628,7 +9760,7 @@ static bool checked_add(size_t a, size_t b, size_t *c) {
}
static size_t saturating_multiply(size_t a, size_t b) {
- // size_t is unsigned, so this is defined behavior even on overflow.
+ /* size_t is unsigned, so this is defined behavior even on overflow. */
size_t ret = a * b;
if (b != 0 && ret / b != a) {
ret = SIZE_MAX;
@@ -9639,7 +9771,7 @@ static size_t saturating_multiply(size_t a, size_t b) {
/* Base64 decoding ************************************************************/
-// TODO(haberman): make this streaming.
+/* TODO(haberman): make this streaming. */
static const signed char b64table[] = {
-1, -1, -1, -1, -1, -1, -1, -1,
@@ -9676,19 +9808,22 @@ static const signed char b64table[] = {
-1, -1, -1, -1, -1, -1, -1, -1
};
-// Returns the table value sign-extended to 32 bits. Knowing that the upper
-// bits will be 1 for unrecognized characters makes it easier to check for
-// this error condition later (see below).
+/* Returns the table value sign-extended to 32 bits. Knowing that the upper
+ * bits will be 1 for unrecognized characters makes it easier to check for
+ * this error condition later (see below). */
int32_t b64lookup(unsigned char ch) { return b64table[ch]; }
-// Returns true if the given character is not a valid base64 character or
-// padding.
+/* Returns true if the given character is not a valid base64 character or
+ * padding. */
bool nonbase64(unsigned char ch) { return b64lookup(ch) == -1 && ch != '='; }
static bool base64_push(upb_json_parser *p, upb_selector_t sel, const char *ptr,
size_t len) {
const char *limit = ptr + len;
for (; ptr < limit; ptr += 4) {
+ uint32_t val;
+ char output[3];
+
if (limit - ptr < 4) {
upb_status_seterrf(p->status,
"Base64 input for bytes field not a multiple of 4: %s",
@@ -9696,17 +9831,16 @@ static bool base64_push(upb_json_parser *p, upb_selector_t sel, const char *ptr,
return false;
}
- uint32_t val = b64lookup(ptr[0]) << 18 |
- b64lookup(ptr[1]) << 12 |
- b64lookup(ptr[2]) << 6 |
- b64lookup(ptr[3]);
+ val = b64lookup(ptr[0]) << 18 |
+ b64lookup(ptr[1]) << 12 |
+ b64lookup(ptr[2]) << 6 |
+ b64lookup(ptr[3]);
- // Test the upper bit; returns true if any of the characters returned -1.
+ /* Test the upper bit; returns true if any of the characters returned -1. */
if (val & 0x80000000) {
goto otherchar;
}
- char output[3];
output[0] = val >> 16;
output[1] = (val >> 8) & 0xff;
output[2] = val & 0xff;
@@ -9722,29 +9856,34 @@ otherchar:
upb_fielddef_name(p->top->f));
return false;
} if (ptr[2] == '=') {
- // Last group contains only two input bytes, one output byte.
+ uint32_t val;
+ char output;
+
+ /* Last group contains only two input bytes, one output byte. */
if (ptr[0] == '=' || ptr[1] == '=' || ptr[3] != '=') {
goto badpadding;
}
- uint32_t val = b64lookup(ptr[0]) << 18 |
- b64lookup(ptr[1]) << 12;
+ val = b64lookup(ptr[0]) << 18 |
+ b64lookup(ptr[1]) << 12;
assert(!(val & 0x80000000));
- char output = val >> 16;
+ output = val >> 16;
upb_sink_putstring(&p->top->sink, sel, &output, 1, NULL);
return true;
} else {
- // Last group contains only three input bytes, two output bytes.
+ uint32_t val;
+ char output[2];
+
+ /* Last group contains only three input bytes, two output bytes. */
if (ptr[0] == '=' || ptr[1] == '=' || ptr[2] == '=') {
goto badpadding;
}
- uint32_t val = b64lookup(ptr[0]) << 18 |
- b64lookup(ptr[1]) << 12 |
- b64lookup(ptr[2]) << 6;
+ val = b64lookup(ptr[0]) << 18 |
+ b64lookup(ptr[1]) << 12 |
+ b64lookup(ptr[2]) << 6;
- char output[2];
output[0] = val >> 16;
output[1] = (val >> 8) & 0xff;
upb_sink_putstring(&p->top->sink, sel, output, 2, NULL);
@@ -9762,23 +9901,23 @@ badpadding:
/* Accumulate buffer **********************************************************/
-// Functionality for accumulating a buffer.
-//
-// Some parts of the parser need an entire value as a contiguous string. For
-// example, to look up a member name in a hash table, or to turn a string into
-// a number, the relevant library routines need the input string to be in
-// contiguous memory, even if the value spanned two or more buffers in the
-// input. These routines handle that.
-//
-// In the common case we can just point to the input buffer to get this
-// contiguous string and avoid any actual copy. So we optimistically begin
-// this way. But there are a few cases where we must instead copy into a
-// separate buffer:
-//
-// 1. The string was not contiguous in the input (it spanned buffers).
-//
-// 2. The string included escape sequences that need to be interpreted to get
-// the true value in a contiguous buffer.
+/* Functionality for accumulating a buffer.
+ *
+ * Some parts of the parser need an entire value as a contiguous string. For
+ * example, to look up a member name in a hash table, or to turn a string into
+ * a number, the relevant library routines need the input string to be in
+ * contiguous memory, even if the value spanned two or more buffers in the
+ * input. These routines handle that.
+ *
+ * In the common case we can just point to the input buffer to get this
+ * contiguous string and avoid any actual copy. So we optimistically begin
+ * this way. But there are a few cases where we must instead copy into a
+ * separate buffer:
+ *
+ * 1. The string was not contiguous in the input (it spanned buffers).
+ *
+ * 2. The string included escape sequences that need to be interpreted to get
+ * the true value in a contiguous buffer. */
static void assert_accumulate_empty(upb_json_parser *p) {
UPB_UNUSED(p);
@@ -9791,15 +9930,16 @@ static void accumulate_clear(upb_json_parser *p) {
p->accumulated_len = 0;
}
-// Used internally by accumulate_append().
+/* Used internally by accumulate_append(). */
static bool accumulate_realloc(upb_json_parser *p, size_t need) {
+ void *mem;
size_t old_size = p->accumulate_buf_size;
size_t new_size = UPB_MAX(old_size, 128);
while (new_size < need) {
new_size = saturating_multiply(new_size, 2);
}
- void *mem = upb_env_realloc(p->env, p->accumulate_buf, old_size, new_size);
+ mem = upb_env_realloc(p->env, p->accumulate_buf, old_size, new_size);
if (!mem) {
upb_status_seterrmsg(p->status, "Out of memory allocating buffer.");
return false;
@@ -9810,18 +9950,19 @@ static bool accumulate_realloc(upb_json_parser *p, size_t need) {
return true;
}
-// Logically appends the given data to the append buffer.
-// If "can_alias" is true, we will try to avoid actually copying, but the buffer
-// must be valid until the next accumulate_append() call (if any).
+/* Logically appends the given data to the append buffer.
+ * If "can_alias" is true, we will try to avoid actually copying, but the buffer
+ * must be valid until the next accumulate_append() call (if any). */
static bool accumulate_append(upb_json_parser *p, const char *buf, size_t len,
bool can_alias) {
+ size_t need;
+
if (!p->accumulated && can_alias) {
p->accumulated = buf;
p->accumulated_len = len;
return true;
}
- size_t need;
if (!checked_add(p->accumulated_len, len, &need)) {
upb_status_seterrmsg(p->status, "Integer overflow.");
return false;
@@ -9841,9 +9982,9 @@ static bool accumulate_append(upb_json_parser *p, const char *buf, size_t len,
return true;
}
-// Returns a pointer to the data accumulated since the last accumulate_clear()
-// call, and writes the length to *len. This with point either to the input
-// buffer or a temporary accumulate buffer.
+/* Returns a pointer to the data accumulated since the last accumulate_clear()
+ * call, and writes the length to *len. This with point either to the input
+ * buffer or a temporary accumulate buffer. */
static const char *accumulate_getptr(upb_json_parser *p, size_t *len) {
assert(p->accumulated);
*len = p->accumulated_len;
@@ -9853,42 +9994,42 @@ static const char *accumulate_getptr(upb_json_parser *p, size_t *len) {
/* Mult-part text data ********************************************************/
-// When we have text data in the input, it can often come in multiple segments.
-// For example, there may be some raw string data followed by an escape
-// sequence. The two segments are processed with different logic. Also buffer
-// seams in the input can cause multiple segments.
-//
-// As we see segments, there are two main cases for how we want to process them:
-//
-// 1. we want to push the captured input directly to string handlers.
-//
-// 2. we need to accumulate all the parts into a contiguous buffer for further
-// processing (field name lookup, string->number conversion, etc).
-
-// This is the set of states for p->multipart_state.
+/* When we have text data in the input, it can often come in multiple segments.
+ * For example, there may be some raw string data followed by an escape
+ * sequence. The two segments are processed with different logic. Also buffer
+ * seams in the input can cause multiple segments.
+ *
+ * As we see segments, there are two main cases for how we want to process them:
+ *
+ * 1. we want to push the captured input directly to string handlers.
+ *
+ * 2. we need to accumulate all the parts into a contiguous buffer for further
+ * processing (field name lookup, string->number conversion, etc). */
+
+/* This is the set of states for p->multipart_state. */
enum {
- // We are not currently processing multipart data.
+ /* We are not currently processing multipart data. */
MULTIPART_INACTIVE = 0,
- // We are processing multipart data by accumulating it into a contiguous
- // buffer.
+ /* We are processing multipart data by accumulating it into a contiguous
+ * buffer. */
MULTIPART_ACCUMULATE = 1,
- // We are processing multipart data by pushing each part directly to the
- // current string handlers.
+ /* We are processing multipart data by pushing each part directly to the
+ * current string handlers. */
MULTIPART_PUSHEAGERLY = 2
};
-// Start a multi-part text value where we accumulate the data for processing at
-// the end.
+/* Start a multi-part text value where we accumulate the data for processing at
+ * the end. */
static void multipart_startaccum(upb_json_parser *p) {
assert_accumulate_empty(p);
assert(p->multipart_state == MULTIPART_INACTIVE);
p->multipart_state = MULTIPART_ACCUMULATE;
}
-// Start a multi-part text value where we immediately push text data to a string
-// value with the given selector.
+/* Start a multi-part text value where we immediately push text data to a string
+ * value with the given selector. */
static void multipart_start(upb_json_parser *p, upb_selector_t sel) {
assert_accumulate_empty(p);
assert(p->multipart_state == MULTIPART_INACTIVE);
@@ -9920,8 +10061,8 @@ static bool multipart_text(upb_json_parser *p, const char *buf, size_t len,
return true;
}
-// Note: this invalidates the accumulate buffer! Call only after reading its
-// contents.
+/* Note: this invalidates the accumulate buffer! Call only after reading its
+ * contents. */
static void multipart_end(upb_json_parser *p) {
assert(p->multipart_state != MULTIPART_INACTIVE);
p->multipart_state = MULTIPART_INACTIVE;
@@ -9931,9 +10072,9 @@ static void multipart_end(upb_json_parser *p) {
/* Input capture **************************************************************/
-// Functionality for capturing a region of the input as text. Gracefully
-// handles the case where a buffer seam occurs in the middle of the captured
-// region.
+/* Functionality for capturing a region of the input as text. Gracefully
+ * handles the case where a buffer seam occurs in the middle of the captured
+ * region. */
static void capture_begin(upb_json_parser *p, const char *ptr) {
assert(p->multipart_state != MULTIPART_INACTIVE);
@@ -9951,24 +10092,24 @@ static bool capture_end(upb_json_parser *p, const char *ptr) {
}
}
-// This is called at the end of each input buffer (ie. when we have hit a
-// buffer seam). If we are in the middle of capturing the input, this
-// processes the unprocessed capture region.
+/* This is called at the end of each input buffer (ie. when we have hit a
+ * buffer seam). If we are in the middle of capturing the input, this
+ * processes the unprocessed capture region. */
static void capture_suspend(upb_json_parser *p, const char **ptr) {
if (!p->capture) return;
if (multipart_text(p, p->capture, *ptr - p->capture, false)) {
- // We use this as a signal that we were in the middle of capturing, and
- // that capturing should resume at the beginning of the next buffer.
- //
- // We can't use *ptr here, because we have no guarantee that this pointer
- // will be valid when we resume (if the underlying memory is freed, then
- // using the pointer at all, even to compare to NULL, is likely undefined
- // behavior).
+ /* We use this as a signal that we were in the middle of capturing, and
+ * that capturing should resume at the beginning of the next buffer.
+ *
+ * We can't use *ptr here, because we have no guarantee that this pointer
+ * will be valid when we resume (if the underlying memory is freed, then
+ * using the pointer at all, even to compare to NULL, is likely undefined
+ * behavior). */
p->capture = &suspend_capture;
} else {
- // Need to back up the pointer to the beginning of the capture, since
- // we were not able to actually preserve it.
+ /* Need to back up the pointer to the beginning of the capture, since
+ * we were not able to actually preserve it. */
*ptr = p->capture;
}
}
@@ -9983,8 +10124,8 @@ static void capture_resume(upb_json_parser *p, const char *ptr) {
/* Callbacks from the parser **************************************************/
-// These are the functions called directly from the parser itself.
-// We define these in the same order as their declarations in the parser.
+/* These are the functions called directly from the parser itself.
+ * We define these in the same order as their declarations in the parser. */
static char escape_char(char in) {
switch (in) {
@@ -10029,8 +10170,8 @@ static void hexdigit(upb_json_parser *p, const char *ptr) {
static bool end_hex(upb_json_parser *p) {
uint32_t codepoint = p->digit;
- // emit the codepoint as UTF-8.
- char utf8[3]; // support \u0000 -- \uFFFF -- need only three bytes.
+ /* emit the codepoint as UTF-8. */
+ char utf8[3]; /* support \u0000 -- \uFFFF -- need only three bytes. */
int length = 0;
if (codepoint <= 0x7F) {
utf8[0] = codepoint;
@@ -10048,8 +10189,8 @@ static bool end_hex(upb_json_parser *p) {
utf8[0] = (codepoint & 0x0F) | 0xE0;
length = 3;
}
- // TODO(haberman): Handle high surrogates: if codepoint is a high surrogate
- // we have to wait for the next escape to get the full code point).
+ /* TODO(haberman): Handle high surrogates: if codepoint is a high surrogate
+ * we have to wait for the next escape to get the full code point). */
return multipart_text(p, utf8, length, false);
}
@@ -10078,17 +10219,29 @@ static bool end_number(upb_json_parser *p, const char *ptr) {
}
static bool parse_number(upb_json_parser *p) {
- // strtol() and friends unfortunately do not support specifying the length of
- // the input string, so we need to force a copy into a NULL-terminated buffer.
+ size_t len;
+ const char *buf;
+ const char *myend;
+ char *end;
+
+ /* strtol() and friends unfortunately do not support specifying the length of
+ * the input string, so we need to force a copy into a NULL-terminated buffer. */
if (!multipart_text(p, "\0", 1, false)) {
return false;
}
- size_t len;
- const char *buf = accumulate_getptr(p, &len);
- const char *myend = buf + len - 1; // One for NULL.
+ buf = accumulate_getptr(p, &len);
+ myend = buf + len - 1; /* One for NULL. */
- char *end;
+ /* XXX: We are using strtol to parse integers, but this is wrong as even
+ * integers can be represented as 1e6 (for example), which strtol can't
+ * handle correctly.
+ *
+ * XXX: Also, we can't handle large integers properly because strto[u]ll
+ * isn't in C89.
+ *
+ * XXX: Also, we don't properly check floats for overflow, since strtof
+ * isn't in C89. */
switch (upb_fielddef_type(p->top->f)) {
case UPB_TYPE_ENUM:
case UPB_TYPE_INT32: {
@@ -10100,7 +10253,7 @@ static bool parse_number(upb_json_parser *p) {
break;
}
case UPB_TYPE_INT64: {
- long long val = strtoll(p->accumulated, &end, 0);
+ long long val = strtol(p->accumulated, &end, 0);
if (val > INT64_MAX || val < INT64_MIN || errno == ERANGE || end != myend)
goto err;
else
@@ -10116,7 +10269,7 @@ static bool parse_number(upb_json_parser *p) {
break;
}
case UPB_TYPE_UINT64: {
- unsigned long long val = strtoull(p->accumulated, &end, 0);
+ unsigned long long val = strtoul(p->accumulated, &end, 0);
if (val > UINT64_MAX || errno == ERANGE || end != myend)
goto err;
else
@@ -10132,7 +10285,7 @@ static bool parse_number(upb_json_parser *p) {
break;
}
case UPB_TYPE_FLOAT: {
- float val = strtof(p->accumulated, &end);
+ float val = strtod(p->accumulated, &end);
if (errno == ERANGE || end != myend)
goto err;
else
@@ -10154,6 +10307,8 @@ err:
}
static bool parser_putbool(upb_json_parser *p, bool val) {
+ bool ok;
+
if (upb_fielddef_type(p->top->f) != UPB_TYPE_BOOL) {
upb_status_seterrf(p->status,
"Boolean value specified for non-bool field: %s",
@@ -10161,7 +10316,7 @@ static bool parser_putbool(upb_json_parser *p, bool val) {
return false;
}
- bool ok = upb_sink_putbool(&p->top->sink, parser_getsel(p), val);
+ ok = upb_sink_putbool(&p->top->sink, parser_getsel(p), val);
UPB_ASSERT_VAR(ok, ok);
return true;
@@ -10171,12 +10326,15 @@ static bool start_stringval(upb_json_parser *p) {
assert(p->top->f);
if (upb_fielddef_isstring(p->top->f)) {
+ upb_jsonparser_frame *inner;
+ upb_selector_t sel;
+
if (!check_stack(p)) return false;
- // Start a new parser frame: parser frames correspond one-to-one with
- // handler frames, and string events occur in a sub-frame.
- upb_jsonparser_frame *inner = p->top + 1;
- upb_selector_t sel = getsel_for_handlertype(p, UPB_HANDLER_STARTSTR);
+ /* Start a new parser frame: parser frames correspond one-to-one with
+ * handler frames, and string events occur in a sub-frame. */
+ inner = p->top + 1;
+ sel = getsel_for_handlertype(p, UPB_HANDLER_STARTSTR);
upb_sink_startstr(&p->top->sink, sel, 0, &inner->sink);
inner->m = p->top->m;
inner->f = p->top->f;
@@ -10185,11 +10343,11 @@ static bool start_stringval(upb_json_parser *p) {
p->top = inner;
if (upb_fielddef_type(p->top->f) == UPB_TYPE_STRING) {
- // For STRING fields we push data directly to the handlers as it is
- // parsed. We don't do this yet for BYTES fields, because our base64
- // decoder is not streaming.
- //
- // TODO(haberman): make base64 decoding streaming also.
+ /* For STRING fields we push data directly to the handlers as it is
+ * parsed. We don't do this yet for BYTES fields, because our base64
+ * decoder is not streaming.
+ *
+ * TODO(haberman): make base64 decoding streaming also. */
multipart_start(p, getsel_for_handlertype(p, UPB_HANDLER_STRING));
return true;
} else {
@@ -10197,11 +10355,11 @@ static bool start_stringval(upb_json_parser *p) {
return true;
}
} else if (upb_fielddef_type(p->top->f) == UPB_TYPE_ENUM) {
- // No need to push a frame -- symbolic enum names in quotes remain in the
- // current parser frame.
- //
- // Enum string values must accumulate so we can look up the value in a table
- // once it is complete.
+ /* No need to push a frame -- symbolic enum names in quotes remain in the
+ * current parser frame.
+ *
+ * Enum string values must accumulate so we can look up the value in a table
+ * once it is complete. */
multipart_startaccum(p);
return true;
} else {
@@ -10221,7 +10379,7 @@ static bool end_stringval(upb_json_parser *p) {
p->accumulated, p->accumulated_len)) {
return false;
}
- // Fall through.
+ /* Fall through. */
case UPB_TYPE_STRING: {
upb_selector_t sel = getsel_for_handlertype(p, UPB_HANDLER_ENDSTR);
@@ -10231,7 +10389,7 @@ static bool end_stringval(upb_json_parser *p) {
}
case UPB_TYPE_ENUM: {
- // Resolve enum symbolic name to integer value.
+ /* Resolve enum symbolic name to integer value. */
const upb_enumdef *enumdef =
(const upb_enumdef*)upb_fielddef_subdef(p->top->f);
@@ -10268,18 +10426,18 @@ static void start_member(upb_json_parser *p) {
multipart_startaccum(p);
}
-// Helper: invoked during parse_mapentry() to emit the mapentry message's key
-// field based on the current contents of the accumulate buffer.
+/* Helper: invoked during parse_mapentry() to emit the mapentry message's key
+ * field based on the current contents of the accumulate buffer. */
static bool parse_mapentry_key(upb_json_parser *p) {
size_t len;
const char *buf = accumulate_getptr(p, &len);
- // Emit the key field. We do a bit of ad-hoc parsing here because the
- // parser state machine has already decided that this is a string field
- // name, and we are reinterpreting it as some arbitrary key type. In
- // particular, integer and bool keys are quoted, so we need to parse the
- // quoted string contents here.
+ /* Emit the key field. We do a bit of ad-hoc parsing here because the
+ * parser state machine has already decided that this is a string field
+ * name, and we are reinterpreting it as some arbitrary key type. In
+ * particular, integer and bool keys are quoted, so we need to parse the
+ * quoted string contents here. */
p->top->f = upb_msgdef_itof(p->top->m, UPB_MAPENTRY_KEY);
if (p->top->f == NULL) {
@@ -10291,7 +10449,7 @@ static bool parse_mapentry_key(upb_json_parser *p) {
case UPB_TYPE_INT64:
case UPB_TYPE_UINT32:
case UPB_TYPE_UINT64:
- // Invoke end_number. The accum buffer has the number's text already.
+ /* Invoke end_number. The accum buffer has the number's text already. */
if (!parse_number(p)) {
return false;
}
@@ -10332,47 +10490,52 @@ static bool parse_mapentry_key(upb_json_parser *p) {
return true;
}
-// Helper: emit one map entry (as a submessage in the map field sequence). This
-// is invoked from end_membername(), at the end of the map entry's key string,
-// with the map key in the accumulate buffer. It parses the key from that
-// buffer, emits the handler calls to start the mapentry submessage (setting up
-// its subframe in the process), and sets up state in the subframe so that the
-// value parser (invoked next) will emit the mapentry's value field and then
-// end the mapentry message.
+/* Helper: emit one map entry (as a submessage in the map field sequence). This
+ * is invoked from end_membername(), at the end of the map entry's key string,
+ * with the map key in the accumulate buffer. It parses the key from that
+ * buffer, emits the handler calls to start the mapentry submessage (setting up
+ * its subframe in the process), and sets up state in the subframe so that the
+ * value parser (invoked next) will emit the mapentry's value field and then
+ * end the mapentry message. */
static bool handle_mapentry(upb_json_parser *p) {
- // Map entry: p->top->sink is the seq frame, so we need to start a frame
- // for the mapentry itself, and then set |f| in that frame so that the map
- // value field is parsed, and also set a flag to end the frame after the
- // map-entry value is parsed.
+ const upb_fielddef *mapfield;
+ const upb_msgdef *mapentrymsg;
+ upb_jsonparser_frame *inner;
+ upb_selector_t sel;
+
+ /* Map entry: p->top->sink is the seq frame, so we need to start a frame
+ * for the mapentry itself, and then set |f| in that frame so that the map
+ * value field is parsed, and also set a flag to end the frame after the
+ * map-entry value is parsed. */
if (!check_stack(p)) return false;
- const upb_fielddef *mapfield = p->top->mapfield;
- const upb_msgdef *mapentrymsg = upb_fielddef_msgsubdef(mapfield);
+ mapfield = p->top->mapfield;
+ mapentrymsg = upb_fielddef_msgsubdef(mapfield);
- upb_jsonparser_frame *inner = p->top + 1;
+ inner = p->top + 1;
p->top->f = mapfield;
- upb_selector_t sel = getsel_for_handlertype(p, UPB_HANDLER_STARTSUBMSG);
+ sel = getsel_for_handlertype(p, UPB_HANDLER_STARTSUBMSG);
upb_sink_startsubmsg(&p->top->sink, sel, &inner->sink);
inner->m = mapentrymsg;
inner->mapfield = mapfield;
inner->is_map = false;
- // Don't set this to true *yet* -- we reuse parsing handlers below to push
- // the key field value to the sink, and these handlers will pop the frame
- // if they see is_mapentry (when invoked by the parser state machine, they
- // would have just seen the map-entry value, not key).
+ /* Don't set this to true *yet* -- we reuse parsing handlers below to push
+ * the key field value to the sink, and these handlers will pop the frame
+ * if they see is_mapentry (when invoked by the parser state machine, they
+ * would have just seen the map-entry value, not key). */
inner->is_mapentry = false;
p->top = inner;
- // send STARTMSG in submsg frame.
+ /* send STARTMSG in submsg frame. */
upb_sink_startmsg(&p->top->sink);
parse_mapentry_key(p);
- // Set up the value field to receive the map-entry value.
+ /* Set up the value field to receive the map-entry value. */
p->top->f = upb_msgdef_itof(p->top->m, UPB_MAPENTRY_VALUE);
- p->top->is_mapentry = true; // set up to pop frame after value is parsed.
+ p->top->is_mapentry = true; /* set up to pop frame after value is parsed. */
p->top->mapfield = mapfield;
if (p->top->f == NULL) {
upb_status_seterrmsg(p->status, "mapentry message has no value");
@@ -10393,7 +10556,8 @@ static bool end_membername(upb_json_parser *p) {
const upb_fielddef *f = upb_msgdef_ntof(p->top->m, buf, len);
if (!f) {
- // TODO(haberman): Ignore unknown fields if requested/configured to do so.
+ /* TODO(haberman): Ignore unknown fields if requested/configured to do
+ * so. */
upb_status_seterrf(p->status, "No such field: %.*s\n", (int)len, buf);
return false;
}
@@ -10406,19 +10570,21 @@ static bool end_membername(upb_json_parser *p) {
}
static void end_member(upb_json_parser *p) {
- // If we just parsed a map-entry value, end that frame too.
+ /* If we just parsed a map-entry value, end that frame too. */
if (p->top->is_mapentry) {
- assert(p->top > p->stack);
- // send ENDMSG on submsg.
upb_status s = UPB_STATUS_INIT;
+ upb_selector_t sel;
+ bool ok;
+ const upb_fielddef *mapfield;
+
+ assert(p->top > p->stack);
+ /* send ENDMSG on submsg. */
upb_sink_endmsg(&p->top->sink, &s);
- const upb_fielddef* mapfield = p->top->mapfield;
+ mapfield = p->top->mapfield;
- // send ENDSUBMSG in repeated-field-of-mapentries frame.
+ /* send ENDSUBMSG in repeated-field-of-mapentries frame. */
p->top--;
- upb_selector_t sel;
- bool ok = upb_handlers_getselector(mapfield,
- UPB_HANDLER_ENDSUBMSG, &sel);
+ ok = upb_handlers_getselector(mapfield, UPB_HANDLER_ENDSUBMSG, &sel);
UPB_ASSERT_VAR(ok, ok);
upb_sink_endsubmsg(&p->top->sink, sel);
}
@@ -10430,12 +10596,15 @@ static bool start_subobject(upb_json_parser *p) {
assert(p->top->f);
if (upb_fielddef_ismap(p->top->f)) {
- // Beginning of a map. Start a new parser frame in a repeated-field
- // context.
+ upb_jsonparser_frame *inner;
+ upb_selector_t sel;
+
+ /* Beginning of a map. Start a new parser frame in a repeated-field
+ * context. */
if (!check_stack(p)) return false;
- upb_jsonparser_frame *inner = p->top + 1;
- upb_selector_t sel = getsel_for_handlertype(p, UPB_HANDLER_STARTSEQ);
+ inner = p->top + 1;
+ sel = getsel_for_handlertype(p, UPB_HANDLER_STARTSEQ);
upb_sink_startseq(&p->top->sink, sel, &inner->sink);
inner->m = upb_fielddef_msgsubdef(p->top->f);
inner->mapfield = p->top->f;
@@ -10446,13 +10615,16 @@ static bool start_subobject(upb_json_parser *p) {
return true;
} else if (upb_fielddef_issubmsg(p->top->f)) {
- // Beginning of a subobject. Start a new parser frame in the submsg
- // context.
+ upb_jsonparser_frame *inner;
+ upb_selector_t sel;
+
+ /* Beginning of a subobject. Start a new parser frame in the submsg
+ * context. */
if (!check_stack(p)) return false;
- upb_jsonparser_frame *inner = p->top + 1;
+ inner = p->top + 1;
- upb_selector_t sel = getsel_for_handlertype(p, UPB_HANDLER_STARTSUBMSG);
+ sel = getsel_for_handlertype(p, UPB_HANDLER_STARTSUBMSG);
upb_sink_startsubmsg(&p->top->sink, sel, &inner->sink);
inner->m = upb_fielddef_msgsubdef(p->top->f);
inner->f = NULL;
@@ -10471,17 +10643,22 @@ static bool start_subobject(upb_json_parser *p) {
static void end_subobject(upb_json_parser *p) {
if (p->top->is_map) {
+ upb_selector_t sel;
p->top--;
- upb_selector_t sel = getsel_for_handlertype(p, UPB_HANDLER_ENDSEQ);
+ sel = getsel_for_handlertype(p, UPB_HANDLER_ENDSEQ);
upb_sink_endseq(&p->top->sink, sel);
} else {
+ upb_selector_t sel;
p->top--;
- upb_selector_t sel = getsel_for_handlertype(p, UPB_HANDLER_ENDSUBMSG);
+ sel = getsel_for_handlertype(p, UPB_HANDLER_ENDSUBMSG);
upb_sink_endsubmsg(&p->top->sink, sel);
}
}
static bool start_array(upb_json_parser *p) {
+ upb_jsonparser_frame *inner;
+ upb_selector_t sel;
+
assert(p->top->f);
if (!upb_fielddef_isseq(p->top->f)) {
@@ -10493,8 +10670,8 @@ static bool start_array(upb_json_parser *p) {
if (!check_stack(p)) return false;
- upb_jsonparser_frame *inner = p->top + 1;
- upb_selector_t sel = getsel_for_handlertype(p, UPB_HANDLER_STARTSEQ);
+ inner = p->top + 1;
+ sel = getsel_for_handlertype(p, UPB_HANDLER_STARTSEQ);
upb_sink_startseq(&p->top->sink, sel, &inner->sink);
inner->m = p->top->m;
inner->f = p->top->f;
@@ -10506,10 +10683,12 @@ static bool start_array(upb_json_parser *p) {
}
static void end_array(upb_json_parser *p) {
+ upb_selector_t sel;
+
assert(p->top > p->stack);
p->top--;
- upb_selector_t sel = getsel_for_handlertype(p, UPB_HANDLER_ENDSEQ);
+ sel = getsel_for_handlertype(p, UPB_HANDLER_ENDSEQ);
upb_sink_endseq(&p->top->sink, sel);
}
@@ -10532,27 +10711,27 @@ static void end_object(upb_json_parser *p) {
/* The actual parser **********************************************************/
-// What follows is the Ragel parser itself. The language is specified in Ragel
-// and the actions call our C functions above.
-//
-// Ragel has an extensive set of functionality, and we use only a small part of
-// it. There are many action types but we only use a few:
-//
-// ">" -- transition into a machine
-// "%" -- transition out of a machine
-// "@" -- transition into a final state of a machine.
-//
-// "@" transitions are tricky because a machine can transition into a final
-// state repeatedly. But in some cases we know this can't happen, for example
-// a string which is delimited by a final '"' can only transition into its
-// final state once, when the closing '"' is seen.
+/* What follows is the Ragel parser itself. The language is specified in Ragel
+ * and the actions call our C functions above.
+ *
+ * Ragel has an extensive set of functionality, and we use only a small part of
+ * it. There are many action types but we only use a few:
+ *
+ * ">" -- transition into a machine
+ * "%" -- transition out of a machine
+ * "@" -- transition into a final state of a machine.
+ *
+ * "@" transitions are tricky because a machine can transition into a final
+ * state repeatedly. But in some cases we know this can't happen, for example
+ * a string which is delimited by a final '"' can only transition into its
+ * final state once, when the closing '"' is seen. */
-#line 1151 "upb/json/parser.rl"
+#line 1198 "upb/json/parser.rl"
-#line 1063 "upb/json/parser.c"
+#line 1110 "upb/json/parser.c"
static const char _json_actions[] = {
0, 1, 0, 1, 2, 1, 3, 1,
5, 1, 6, 1, 7, 1, 8, 1,
@@ -10701,16 +10880,13 @@ static const int json_en_value_machine = 27;
static const int json_en_main = 1;
-#line 1154 "upb/json/parser.rl"
+#line 1201 "upb/json/parser.rl"
size_t parse(void *closure, const void *hd, const char *buf, size_t size,
const upb_bufhandle *handle) {
- UPB_UNUSED(hd);
- UPB_UNUSED(handle);
upb_json_parser *parser = closure;
- parser->handle = handle;
- // Variables used by Ragel's generated code.
+ /* Variables used by Ragel's generated code. */
int cs = parser->current_state;
int *stack = parser->parser_stack;
int top = parser->parser_top;
@@ -10718,10 +10894,15 @@ size_t parse(void *closure, const void *hd, const char *buf, size_t size,
const char *p = buf;
const char *pe = buf + size;
+ parser->handle = handle;
+
+ UPB_UNUSED(hd);
+ UPB_UNUSED(handle);
+
capture_resume(parser, buf);
-#line 1232 "upb/json/parser.c"
+#line 1281 "upb/json/parser.c"
{
int _klen;
unsigned int _trans;
@@ -10796,118 +10977,118 @@ _match:
switch ( *_acts++ )
{
case 0:
-#line 1066 "upb/json/parser.rl"
+#line 1113 "upb/json/parser.rl"
{ p--; {cs = stack[--top]; goto _again;} }
break;
case 1:
-#line 1067 "upb/json/parser.rl"
+#line 1114 "upb/json/parser.rl"
{ p--; {stack[top++] = cs; cs = 10; goto _again;} }
break;
case 2:
-#line 1071 "upb/json/parser.rl"
+#line 1118 "upb/json/parser.rl"
{ start_text(parser, p); }
break;
case 3:
-#line 1072 "upb/json/parser.rl"
+#line 1119 "upb/json/parser.rl"
{ CHECK_RETURN_TOP(end_text(parser, p)); }
break;
case 4:
-#line 1078 "upb/json/parser.rl"
+#line 1125 "upb/json/parser.rl"
{ start_hex(parser); }
break;
case 5:
-#line 1079 "upb/json/parser.rl"
+#line 1126 "upb/json/parser.rl"
{ hexdigit(parser, p); }
break;
case 6:
-#line 1080 "upb/json/parser.rl"
+#line 1127 "upb/json/parser.rl"
{ CHECK_RETURN_TOP(end_hex(parser)); }
break;
case 7:
-#line 1086 "upb/json/parser.rl"
+#line 1133 "upb/json/parser.rl"
{ CHECK_RETURN_TOP(escape(parser, p)); }
break;
case 8:
-#line 1092 "upb/json/parser.rl"
+#line 1139 "upb/json/parser.rl"
{ p--; {cs = stack[--top]; goto _again;} }
break;
case 9:
-#line 1095 "upb/json/parser.rl"
+#line 1142 "upb/json/parser.rl"
{ {stack[top++] = cs; cs = 19; goto _again;} }
break;
case 10:
-#line 1097 "upb/json/parser.rl"
+#line 1144 "upb/json/parser.rl"
{ p--; {stack[top++] = cs; cs = 27; goto _again;} }
break;
case 11:
-#line 1102 "upb/json/parser.rl"
+#line 1149 "upb/json/parser.rl"
{ start_member(parser); }
break;
case 12:
-#line 1103 "upb/json/parser.rl"
+#line 1150 "upb/json/parser.rl"
{ CHECK_RETURN_TOP(end_membername(parser)); }
break;
case 13:
-#line 1106 "upb/json/parser.rl"
+#line 1153 "upb/json/parser.rl"
{ end_member(parser); }
break;
case 14:
-#line 1112 "upb/json/parser.rl"
+#line 1159 "upb/json/parser.rl"
{ start_object(parser); }
break;
case 15:
-#line 1115 "upb/json/parser.rl"
+#line 1162 "upb/json/parser.rl"
{ end_object(parser); }
break;
case 16:
-#line 1121 "upb/json/parser.rl"
+#line 1168 "upb/json/parser.rl"
{ CHECK_RETURN_TOP(start_array(parser)); }
break;
case 17:
-#line 1125 "upb/json/parser.rl"
+#line 1172 "upb/json/parser.rl"
{ end_array(parser); }
break;
case 18:
-#line 1130 "upb/json/parser.rl"
+#line 1177 "upb/json/parser.rl"
{ start_number(parser, p); }
break;
case 19:
-#line 1131 "upb/json/parser.rl"
+#line 1178 "upb/json/parser.rl"
{ CHECK_RETURN_TOP(end_number(parser, p)); }
break;
case 20:
-#line 1133 "upb/json/parser.rl"
+#line 1180 "upb/json/parser.rl"
{ CHECK_RETURN_TOP(start_stringval(parser)); }
break;
case 21:
-#line 1134 "upb/json/parser.rl"
+#line 1181 "upb/json/parser.rl"
{ CHECK_RETURN_TOP(end_stringval(parser)); }
break;
case 22:
-#line 1136 "upb/json/parser.rl"
+#line 1183 "upb/json/parser.rl"
{ CHECK_RETURN_TOP(parser_putbool(parser, true)); }
break;
case 23:
-#line 1138 "upb/json/parser.rl"
+#line 1185 "upb/json/parser.rl"
{ CHECK_RETURN_TOP(parser_putbool(parser, false)); }
break;
case 24:
-#line 1140 "upb/json/parser.rl"
+#line 1187 "upb/json/parser.rl"
{ /* null value */ }
break;
case 25:
-#line 1142 "upb/json/parser.rl"
+#line 1189 "upb/json/parser.rl"
{ CHECK_RETURN_TOP(start_subobject(parser)); }
break;
case 26:
-#line 1143 "upb/json/parser.rl"
+#line 1190 "upb/json/parser.rl"
{ end_subobject(parser); }
break;
case 27:
-#line 1148 "upb/json/parser.rl"
+#line 1195 "upb/json/parser.rl"
{ p--; {cs = stack[--top]; goto _again;} }
break;
-#line 1418 "upb/json/parser.c"
+#line 1467 "upb/json/parser.c"
}
}
@@ -10920,7 +11101,7 @@ _again:
_out: {}
}
-#line 1173 "upb/json/parser.rl"
+#line 1222 "upb/json/parser.rl"
if (p != pe) {
upb_status_seterrf(parser->status, "Parse error at %s\n", p);
@@ -10929,7 +11110,7 @@ _again:
}
error:
- // Save parsing state back to parser.
+ /* Save parsing state back to parser. */
parser->current_state = cs;
parser->parser_top = top;
@@ -10940,7 +11121,7 @@ bool end(void *closure, const void *hd) {
UPB_UNUSED(closure);
UPB_UNUSED(hd);
- // Prevent compile warning on unused static constants.
+ /* Prevent compile warning on unused static constants. */
UPB_UNUSED(json_start);
UPB_UNUSED(json_en_number_machine);
UPB_UNUSED(json_en_string_machine);
@@ -10950,22 +11131,23 @@ bool end(void *closure, const void *hd) {
}
static void json_parser_reset(upb_json_parser *p) {
+ int cs;
+ int top;
+
p->top = p->stack;
p->top->f = NULL;
p->top->is_map = false;
p->top->is_mapentry = false;
- int cs;
- int top;
- // Emit Ragel initialization of the parser.
+ /* Emit Ragel initialization of the parser. */
-#line 1470 "upb/json/parser.c"
+#line 1520 "upb/json/parser.c"
{
cs = json_start;
top = 0;
}
-#line 1211 "upb/json/parser.rl"
+#line 1261 "upb/json/parser.rl"
p->current_state = cs;
p->parser_top = top;
accumulate_clear(p);
@@ -10997,8 +11179,8 @@ upb_json_parser *upb_json_parser_create(upb_env *env, upb_sink *output) {
upb_sink_reset(&p->top->sink, output->handlers, output->closure);
p->top->m = upb_handlers_msgdef(output->handlers);
- // If this fails, uncomment and increase the value in parser.h.
- // fprintf(stderr, "%zd\n", upb_env_bytesallocated(env) - size_before);
+ /* If this fails, uncomment and increase the value in parser.h.
+ * fprintf(stderr, "%zd\n", upb_env_bytesallocated(env) - size_before); */
assert(upb_env_bytesallocated(env) - size_before <= UPB_JSON_PARSER_SIZE);
return p;
}
@@ -11024,26 +11206,26 @@ upb_bytessink *upb_json_parser_input(upb_json_parser *p) {
struct upb_json_printer {
upb_sink input_;
- // BytesSink closure.
+ /* BytesSink closure. */
void *subc_;
upb_bytessink *output_;
- // We track the depth so that we know when to emit startstr/endstr on the
- // output.
+ /* We track the depth so that we know when to emit startstr/endstr on the
+ * output. */
int depth_;
- // Have we emitted the first element? This state is necessary to emit commas
- // without leaving a trailing comma in arrays/maps. We keep this state per
- // frame depth.
- //
- // Why max_depth * 2? UPB_MAX_HANDLER_DEPTH counts depth as nested messages.
- // We count frames (contexts in which we separate elements by commas) as both
- // repeated fields and messages (maps), and the worst case is a
- // message->repeated field->submessage->repeated field->... nesting.
+ /* Have we emitted the first element? This state is necessary to emit commas
+ * without leaving a trailing comma in arrays/maps. We keep this state per
+ * frame depth.
+ *
+ * Why max_depth * 2? UPB_MAX_HANDLER_DEPTH counts depth as nested messages.
+ * We count frames (contexts in which we separate elements by commas) as both
+ * repeated fields and messages (maps), and the worst case is a
+ * message->repeated field->submessage->repeated field->... nesting. */
bool first_elem_[UPB_MAX_HANDLER_DEPTH * 2];
};
-// StringPiece; a pointer plus a length.
+/* StringPiece; a pointer plus a length. */
typedef struct {
const char *ptr;
size_t len;
@@ -11057,11 +11239,11 @@ strpc *newstrpc(upb_handlers *h, const upb_fielddef *f) {
return ret;
}
-// ------------ JSON string printing: values, maps, arrays --------------------
+/* ------------ JSON string printing: values, maps, arrays ------------------ */
static void print_data(
upb_json_printer *p, const char *buf, unsigned int len) {
- // TODO: Will need to change if we support pushback from the sink.
+ /* TODO: Will need to change if we support pushback from the sink. */
size_t n = upb_bytessink_putbuf(p->output_, p->subc_, buf, len, NULL);
UPB_ASSERT_VAR(n, n == len);
}
@@ -11073,18 +11255,18 @@ static void print_comma(upb_json_printer *p) {
p->first_elem_[p->depth_] = false;
}
-// Helpers that print properly formatted elements to the JSON output stream.
+/* Helpers that print properly formatted elements to the JSON output stream. */
-// Used for escaping control chars in strings.
+/* Used for escaping control chars in strings. */
static const char kControlCharLimit = 0x20;
-static inline bool is_json_escaped(char c) {
- // See RFC 4627.
+UPB_INLINE bool is_json_escaped(char c) {
+ /* See RFC 4627. */
unsigned char uc = (unsigned char)c;
return uc < kControlCharLimit || uc == '"' || uc == '\\';
}
-static inline char* json_nice_escape(char c) {
+UPB_INLINE char* json_nice_escape(char c) {
switch (c) {
case '"': return "\\\"";
case '\\': return "\\\\";
@@ -11097,46 +11279,47 @@ static inline char* json_nice_escape(char c) {
}
}
-// Write a properly escaped string chunk. The surrounding quotes are *not*
-// printed; this is so that the caller has the option of emitting the string
-// content in chunks.
+/* Write a properly escaped string chunk. The surrounding quotes are *not*
+ * printed; this is so that the caller has the option of emitting the string
+ * content in chunks. */
static void putstring(upb_json_printer *p, const char *buf, unsigned int len) {
const char* unescaped_run = NULL;
- for (unsigned int i = 0; i < len; i++) {
+ unsigned int i;
+ for (i = 0; i < len; i++) {
char c = buf[i];
- // Handle escaping.
+ /* Handle escaping. */
if (is_json_escaped(c)) {
- // Use a "nice" escape, like \n, if one exists for this character.
+ /* Use a "nice" escape, like \n, if one exists for this character. */
const char* escape = json_nice_escape(c);
- // If we don't have a specific 'nice' escape code, use a \uXXXX-style
- // escape.
+ /* If we don't have a specific 'nice' escape code, use a \uXXXX-style
+ * escape. */
char escape_buf[8];
if (!escape) {
unsigned char byte = (unsigned char)c;
- snprintf(escape_buf, sizeof(escape_buf), "\\u%04x", (int)byte);
+ _upb_snprintf(escape_buf, sizeof(escape_buf), "\\u%04x", (int)byte);
escape = escape_buf;
}
- // N.B. that we assume that the input encoding is equal to the output
- // encoding (both UTF-8 for now), so for chars >= 0x20 and != \, ", we
- // can simply pass the bytes through.
+ /* N.B. that we assume that the input encoding is equal to the output
+ * encoding (both UTF-8 for now), so for chars >= 0x20 and != \, ", we
+ * can simply pass the bytes through. */
- // If there's a current run of unescaped chars, print that run first.
+ /* If there's a current run of unescaped chars, print that run first. */
if (unescaped_run) {
print_data(p, unescaped_run, &buf[i] - unescaped_run);
unescaped_run = NULL;
}
- // Then print the escape code.
+ /* Then print the escape code. */
print_data(p, escape, strlen(escape));
} else {
- // Add to the current unescaped run of characters.
+ /* Add to the current unescaped run of characters. */
if (unescaped_run == NULL) {
unescaped_run = &buf[i];
}
}
}
- // If the string ended in a run of unescaped characters, print that last run.
+ /* If the string ended in a run of unescaped characters, print that last run. */
if (unescaped_run) {
print_data(p, unescaped_run, &buf[len] - unescaped_run);
}
@@ -11144,42 +11327,42 @@ static void putstring(upb_json_printer *p, const char *buf, unsigned int len) {
#define CHKLENGTH(x) if (!(x)) return -1;
-// Helpers that format floating point values according to our custom formats.
-// Right now we use %.8g and %.17g for float/double, respectively, to match
-// proto2::util::JsonFormat's defaults. May want to change this later.
+/* Helpers that format floating point values according to our custom formats.
+ * Right now we use %.8g and %.17g for float/double, respectively, to match
+ * proto2::util::JsonFormat's defaults. May want to change this later. */
static size_t fmt_double(double val, char* buf, size_t length) {
- size_t n = snprintf(buf, length, "%.17g", val);
+ size_t n = _upb_snprintf(buf, length, "%.17g", val);
CHKLENGTH(n > 0 && n < length);
return n;
}
static size_t fmt_float(float val, char* buf, size_t length) {
- size_t n = snprintf(buf, length, "%.8g", val);
+ size_t n = _upb_snprintf(buf, length, "%.8g", val);
CHKLENGTH(n > 0 && n < length);
return n;
}
static size_t fmt_bool(bool val, char* buf, size_t length) {
- size_t n = snprintf(buf, length, "%s", (val ? "true" : "false"));
+ size_t n = _upb_snprintf(buf, length, "%s", (val ? "true" : "false"));
CHKLENGTH(n > 0 && n < length);
return n;
}
static size_t fmt_int64(long val, char* buf, size_t length) {
- size_t n = snprintf(buf, length, "%ld", val);
+ size_t n = _upb_snprintf(buf, length, "%ld", val);
CHKLENGTH(n > 0 && n < length);
return n;
}
static size_t fmt_uint64(unsigned long long val, char* buf, size_t length) {
- size_t n = snprintf(buf, length, "%llu", val);
+ size_t n = _upb_snprintf(buf, length, "%llu", val);
CHKLENGTH(n > 0 && n < length);
return n;
}
-// Print a map key given a field name. Called by scalar field handlers and by
-// startseq for repeated fields.
+/* Print a map key given a field name. Called by scalar field handlers and by
+ * startseq for repeated fields. */
static bool putkey(void *closure, const void *handler_data) {
upb_json_printer *p = closure;
const strpc *key = handler_data;
@@ -11196,9 +11379,9 @@ static bool putkey(void *closure, const void *handler_data) {
#define TYPE_HANDLERS(type, fmt_func) \
static bool put##type(void *closure, const void *handler_data, type val) { \
upb_json_printer *p = closure; \
- UPB_UNUSED(handler_data); \
char data[64]; \
size_t length = fmt_func(val, data, sizeof(data)); \
+ UPB_UNUSED(handler_data); \
CHKFMT(length); \
print_data(p, data, length); \
return true; \
@@ -11227,20 +11410,20 @@ static bool putkey(void *closure, const void *handler_data) {
return true; \
}
-TYPE_HANDLERS(double, fmt_double);
-TYPE_HANDLERS(float, fmt_float);
-TYPE_HANDLERS(bool, fmt_bool);
-TYPE_HANDLERS(int32_t, fmt_int64);
-TYPE_HANDLERS(uint32_t, fmt_int64);
-TYPE_HANDLERS(int64_t, fmt_int64);
-TYPE_HANDLERS(uint64_t, fmt_uint64);
+TYPE_HANDLERS(double, fmt_double)
+TYPE_HANDLERS(float, fmt_float)
+TYPE_HANDLERS(bool, fmt_bool)
+TYPE_HANDLERS(int32_t, fmt_int64)
+TYPE_HANDLERS(uint32_t, fmt_int64)
+TYPE_HANDLERS(int64_t, fmt_int64)
+TYPE_HANDLERS(uint64_t, fmt_uint64)
-// double and float are not allowed to be map keys.
-TYPE_HANDLERS_MAPKEY(bool, fmt_bool);
-TYPE_HANDLERS_MAPKEY(int32_t, fmt_int64);
-TYPE_HANDLERS_MAPKEY(uint32_t, fmt_int64);
-TYPE_HANDLERS_MAPKEY(int64_t, fmt_int64);
-TYPE_HANDLERS_MAPKEY(uint64_t, fmt_uint64);
+/* double and float are not allowed to be map keys. */
+TYPE_HANDLERS_MAPKEY(bool, fmt_bool)
+TYPE_HANDLERS_MAPKEY(int32_t, fmt_int64)
+TYPE_HANDLERS_MAPKEY(uint32_t, fmt_int64)
+TYPE_HANDLERS_MAPKEY(int64_t, fmt_int64)
+TYPE_HANDLERS_MAPKEY(uint64_t, fmt_uint64)
#undef TYPE_HANDLERS
#undef TYPE_HANDLERS_MAPKEY
@@ -11254,9 +11437,11 @@ static bool scalar_enum(void *closure, const void *handler_data,
int32_t val) {
const EnumHandlerData *hd = handler_data;
upb_json_printer *p = closure;
+ const char *symbolic_name;
+
CHK(putkey(closure, hd->keyname));
- const char *symbolic_name = upb_enumdef_iton(hd->enumdef, val);
+ symbolic_name = upb_enumdef_iton(hd->enumdef, val);
if (symbolic_name) {
print_data(p, "\"", 1);
putstring(p, symbolic_name, strlen(symbolic_name));
@@ -11307,8 +11492,8 @@ static void *scalar_startsubmsg(void *closure, const void *handler_data) {
}
static void *repeated_startsubmsg(void *closure, const void *handler_data) {
- UPB_UNUSED(handler_data);
upb_json_printer *p = closure;
+ UPB_UNUSED(handler_data);
print_comma(p);
return closure;
}
@@ -11325,8 +11510,8 @@ static void end_frame(upb_json_printer *p) {
}
static bool printer_startmsg(void *closure, const void *handler_data) {
- UPB_UNUSED(handler_data);
upb_json_printer *p = closure;
+ UPB_UNUSED(handler_data);
if (p->depth_ == 0) {
upb_bytessink_start(p->output_, 0, &p->subc_);
}
@@ -11335,9 +11520,9 @@ static bool printer_startmsg(void *closure, const void *handler_data) {
}
static bool printer_endmsg(void *closure, const void *handler_data, upb_status *s) {
+ upb_json_printer *p = closure;
UPB_UNUSED(handler_data);
UPB_UNUSED(s);
- upb_json_printer *p = closure;
end_frame(p);
if (p->depth_ == 0) {
upb_bytessink_end(p->output_);
@@ -11355,8 +11540,8 @@ static void *startseq(void *closure, const void *handler_data) {
}
static bool endseq(void *closure, const void *handler_data) {
- UPB_UNUSED(handler_data);
upb_json_printer *p = closure;
+ UPB_UNUSED(handler_data);
print_data(p, "]", 1);
p->depth_--;
return true;
@@ -11372,8 +11557,8 @@ static void *startmap(void *closure, const void *handler_data) {
}
static bool endmap(void *closure, const void *handler_data) {
- UPB_UNUSED(handler_data);
upb_json_printer *p = closure;
+ UPB_UNUSED(handler_data);
print_data(p, "}", 1);
p->depth_--;
return true;
@@ -11381,32 +11566,35 @@ static bool endmap(void *closure, const void *handler_data) {
static size_t putstr(void *closure, const void *handler_data, const char *str,
size_t len, const upb_bufhandle *handle) {
+ upb_json_printer *p = closure;
UPB_UNUSED(handler_data);
UPB_UNUSED(handle);
- upb_json_printer *p = closure;
putstring(p, str, len);
return len;
}
-// This has to Base64 encode the bytes, because JSON has no "bytes" type.
+/* This has to Base64 encode the bytes, because JSON has no "bytes" type. */
static size_t putbytes(void *closure, const void *handler_data, const char *str,
size_t len, const upb_bufhandle *handle) {
- UPB_UNUSED(handler_data);
- UPB_UNUSED(handle);
upb_json_printer *p = closure;
- // This is the regular base64, not the "web-safe" version.
+ /* This is the regular base64, not the "web-safe" version. */
static const char base64[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- // Base64-encode.
+ /* Base64-encode. */
char data[16000];
const char *limit = data + sizeof(data);
const unsigned char *from = (const unsigned char*)str;
char *to = data;
size_t remaining = len;
+ size_t bytes;
+
+ UPB_UNUSED(handler_data);
+ UPB_UNUSED(handle);
+
while (remaining > 2) {
- // TODO(haberman): handle encoded lengths > sizeof(data)
+ /* TODO(haberman): handle encoded lengths > sizeof(data) */
UPB_ASSERT_VAR(limit, (limit - to) >= 4);
to[0] = base64[from[0] >> 2];
@@ -11438,7 +11626,7 @@ static size_t putbytes(void *closure, const void *handler_data, const char *str,
break;
}
- size_t bytes = to - data;
+ bytes = to - data;
print_data(p, "\"", 1);
putstring(p, data, bytes);
print_data(p, "\"", 1);
@@ -11447,9 +11635,9 @@ static size_t putbytes(void *closure, const void *handler_data, const char *str,
static void *scalar_startstr(void *closure, const void *handler_data,
size_t size_hint) {
+ upb_json_printer *p = closure;
UPB_UNUSED(handler_data);
UPB_UNUSED(size_hint);
- upb_json_printer *p = closure;
CHK(putkey(closure, handler_data));
print_data(p, "\"", 1);
return p;
@@ -11463,17 +11651,17 @@ static size_t scalar_str(void *closure, const void *handler_data,
}
static bool scalar_endstr(void *closure, const void *handler_data) {
- UPB_UNUSED(handler_data);
upb_json_printer *p = closure;
+ UPB_UNUSED(handler_data);
print_data(p, "\"", 1);
return true;
}
static void *repeated_startstr(void *closure, const void *handler_data,
size_t size_hint) {
+ upb_json_printer *p = closure;
UPB_UNUSED(handler_data);
UPB_UNUSED(size_hint);
- upb_json_printer *p = closure;
print_comma(p);
print_data(p, "\"", 1);
return p;
@@ -11487,17 +11675,17 @@ static size_t repeated_str(void *closure, const void *handler_data,
}
static bool repeated_endstr(void *closure, const void *handler_data) {
- UPB_UNUSED(handler_data);
upb_json_printer *p = closure;
+ UPB_UNUSED(handler_data);
print_data(p, "\"", 1);
return true;
}
static void *mapkeyval_startstr(void *closure, const void *handler_data,
size_t size_hint) {
+ upb_json_printer *p = closure;
UPB_UNUSED(handler_data);
UPB_UNUSED(size_hint);
- upb_json_printer *p = closure;
print_data(p, "\"", 1);
return p;
}
@@ -11510,15 +11698,15 @@ static size_t mapkey_str(void *closure, const void *handler_data,
}
static bool mapkey_endstr(void *closure, const void *handler_data) {
- UPB_UNUSED(handler_data);
upb_json_printer *p = closure;
+ UPB_UNUSED(handler_data);
print_data(p, "\":", 2);
return true;
}
static bool mapvalue_endstr(void *closure, const void *handler_data) {
- UPB_UNUSED(handler_data);
upb_json_printer *p = closure;
+ UPB_UNUSED(handler_data);
print_data(p, "\"", 1);
return true;
}
@@ -11559,30 +11747,31 @@ static void set_enum_hd(upb_handlers *h,
upb_handlerattr_sethandlerdata(attr, hd);
}
-// Set up handlers for a mapentry submessage (i.e., an individual key/value pair
-// in a map).
-//
-// TODO: Handle missing key, missing value, out-of-order key/value, or repeated
-// key or value cases properly. The right way to do this is to allocate a
-// temporary structure at the start of a mapentry submessage, store key and
-// value data in it as key and value handlers are called, and then print the
-// key/value pair once at the end of the submessage. If we don't do this, we
-// should at least detect the case and throw an error. However, so far all of
-// our sources that emit mapentry messages do so canonically (with one key
-// field, and then one value field), so this is not a pressing concern at the
-// moment.
+/* Set up handlers for a mapentry submessage (i.e., an individual key/value pair
+ * in a map).
+ *
+ * TODO: Handle missing key, missing value, out-of-order key/value, or repeated
+ * key or value cases properly. The right way to do this is to allocate a
+ * temporary structure at the start of a mapentry submessage, store key and
+ * value data in it as key and value handlers are called, and then print the
+ * key/value pair once at the end of the submessage. If we don't do this, we
+ * should at least detect the case and throw an error. However, so far all of
+ * our sources that emit mapentry messages do so canonically (with one key
+ * field, and then one value field), so this is not a pressing concern at the
+ * moment. */
void printer_sethandlers_mapentry(const void *closure, upb_handlers *h) {
- UPB_UNUSED(closure);
const upb_msgdef *md = upb_handlers_msgdef(h);
- // A mapentry message is printed simply as '"key": value'. Rather than
- // special-case key and value for every type below, we just handle both
- // fields explicitly here.
+ /* A mapentry message is printed simply as '"key": value'. Rather than
+ * special-case key and value for every type below, we just handle both
+ * fields explicitly here. */
const upb_fielddef* key_field = upb_msgdef_itof(md, UPB_MAPENTRY_KEY);
const upb_fielddef* value_field = upb_msgdef_itof(md, UPB_MAPENTRY_VALUE);
upb_handlerattr empty_attr = UPB_HANDLERATTR_INITIALIZER;
+ UPB_UNUSED(closure);
+
switch (upb_fielddef_type(key_field)) {
case UPB_TYPE_INT32:
upb_handlers_setint32(h, key_field, putmapkey_int32_t, &empty_attr);
@@ -11650,8 +11839,8 @@ void printer_sethandlers_mapentry(const void *closure, upb_handlers *h) {
break;
}
case UPB_TYPE_MESSAGE:
- // No handler necessary -- the submsg handlers will print the message
- // as appropriate.
+ /* No handler necessary -- the submsg handlers will print the message
+ * as appropriate. */
break;
}
@@ -11659,14 +11848,16 @@ void printer_sethandlers_mapentry(const void *closure, upb_handlers *h) {
}
void printer_sethandlers(const void *closure, upb_handlers *h) {
- UPB_UNUSED(closure);
const upb_msgdef *md = upb_handlers_msgdef(h);
bool is_mapentry = upb_msgdef_mapentry(md);
upb_handlerattr empty_attr = UPB_HANDLERATTR_INITIALIZER;
+ upb_msg_field_iter i;
+
+ UPB_UNUSED(closure);
if (is_mapentry) {
- // mapentry messages are sufficiently different that we handle them
- // separately.
+ /* mapentry messages are sufficiently different that we handle them
+ * separately. */
printer_sethandlers_mapentry(closure, h);
return;
}
@@ -11683,7 +11874,6 @@ void printer_sethandlers(const void *closure, upb_handlers *h) {
} \
break;
- upb_msg_field_iter i;
upb_msg_field_begin(&i, md);
for(; !upb_msg_field_done(&i); upb_msg_field_next(&i)) {
const upb_fielddef *f = upb_msg_iter_field(&i);
@@ -11708,9 +11898,9 @@ void printer_sethandlers(const void *closure, upb_handlers *h) {
TYPE(UPB_TYPE_INT64, int64, int64_t);
TYPE(UPB_TYPE_UINT64, uint64, uint64_t);
case UPB_TYPE_ENUM: {
- // For now, we always emit symbolic names for enums. We may want an
- // option later to control this behavior, but we will wait for a real
- // need first.
+ /* For now, we always emit symbolic names for enums. We may want an
+ * option later to control this behavior, but we will wait for a real
+ * need first. */
upb_handlerattr enum_attr = UPB_HANDLERATTR_INITIALIZER;
set_enum_hd(h, f, &enum_attr);
@@ -11735,8 +11925,8 @@ void printer_sethandlers(const void *closure, upb_handlers *h) {
}
break;
case UPB_TYPE_BYTES:
- // XXX: this doesn't support strings that span buffers yet. The base64
- // encoder will need to be made resumable for this to work properly.
+ /* XXX: this doesn't support strings that span buffers yet. The base64
+ * encoder will need to be made resumable for this to work properly. */
if (upb_fielddef_isseq(f)) {
upb_handlers_setstring(h, f, repeated_bytes, &empty_attr);
} else {
@@ -11779,7 +11969,7 @@ upb_json_printer *upb_json_printer_create(upb_env *e, const upb_handlers *h,
json_printer_reset(p);
upb_sink_reset(&p->input_, h, p);
- // If this fails, increase the value in printer.h.
+ /* If this fails, increase the value in printer.h. */
assert(upb_env_bytesallocated(e) - size_before <= UPB_JSON_PRINTER_SIZE);
return p;
}
diff --git a/ruby/ext/google/protobuf_c/upb.h b/ruby/ext/google/protobuf_c/upb.h
index 97df943a..4855e754 100644
--- a/ruby/ext/google/protobuf_c/upb.h
+++ b/ruby/ext/google/protobuf_c/upb.h
@@ -92,31 +92,61 @@
#include <stdbool.h>
#include <stddef.h>
-// inline if possible, emit standalone code if required.
+/* UPB_INLINE: inline if possible, emit standalone code if required. */
#ifdef __cplusplus
#define UPB_INLINE inline
+#elif defined (__GNUC__)
+#define UPB_INLINE static __inline__
#else
-#define UPB_INLINE static inline
+#define UPB_INLINE static
#endif
-// For use in C/C++ source files (not headers), forces inlining within the file.
+/* Define UPB_BIG_ENDIAN manually if you're on big endian and your compiler
+ * doesn't provide these preprocessor symbols. */
+#if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+#define UPB_BIG_ENDIAN
+#endif
+
+/* Macros for function attributes on compilers that support them. */
#ifdef __GNUC__
-#define UPB_FORCEINLINE inline __attribute__((always_inline))
+#define UPB_FORCEINLINE __inline__ __attribute__((always_inline))
#define UPB_NOINLINE __attribute__((noinline))
-#else
+#define UPB_NORETURN __attribute__((__noreturn__))
+#else /* !defined(__GNUC__) */
#define UPB_FORCEINLINE
#define UPB_NOINLINE
+#define UPB_NORETURN
#endif
-#if __STDC_VERSION__ >= 199901L
-#define UPB_C99
+/* A few hacky workarounds for functions not in C89.
+ * For internal use only!
+ * TODO(haberman): fix these by including our own implementations, or finding
+ * another workaround.
+ */
+#ifdef __GNUC__
+#define _upb_snprintf __builtin_snprintf
+#define _upb_vsnprintf __builtin_vsnprintf
+#define _upb_va_copy(a, b) __va_copy(a, b)
+#elif __STDC_VERSION__ >= 199901L
+/* C99 versions. */
+#define _upb_snprintf snprintf
+#define _upb_vsnprintf vsnprintf
+#define _upb_va_copy(a, b) va_copy(a, b)
+#else
+#error Need implementations of [v]snprintf and va_copy
#endif
+
#if ((defined(__cplusplus) && __cplusplus >= 201103L) || \
defined(__GXX_EXPERIMENTAL_CXX0X__)) && !defined(UPB_NO_CXX11)
#define UPB_CXX11
#endif
+/* UPB_DISALLOW_COPY_AND_ASSIGN()
+ * UPB_DISALLOW_POD_OPS()
+ *
+ * Declare these in the "private" section of a C++ class to forbid copy/assign
+ * or all POD ops (construct, destruct, copy, assign) on that class. */
#ifdef UPB_CXX11
#include <type_traits>
#define UPB_DISALLOW_COPY_AND_ASSIGN(class_name) \
@@ -125,51 +155,53 @@
#define UPB_DISALLOW_POD_OPS(class_name, full_class_name) \
class_name() = delete; \
~class_name() = delete; \
- /* Friend Pointer<T> so it can access base class. */ \
- friend class Pointer<full_class_name>; \
- friend class Pointer<const full_class_name>; \
UPB_DISALLOW_COPY_AND_ASSIGN(class_name)
#define UPB_ASSERT_STDLAYOUT(type) \
static_assert(std::is_standard_layout<type>::value, \
#type " must be standard layout");
-#else // !defined(UPB_CXX11)
+#else /* !defined(UPB_CXX11) */
#define UPB_DISALLOW_COPY_AND_ASSIGN(class_name) \
class_name(const class_name&); \
void operator=(const class_name&);
#define UPB_DISALLOW_POD_OPS(class_name, full_class_name) \
class_name(); \
~class_name(); \
- /* Friend Pointer<T> so it can access base class. */ \
- friend class Pointer<full_class_name>; \
- friend class Pointer<const full_class_name>; \
UPB_DISALLOW_COPY_AND_ASSIGN(class_name)
#define UPB_ASSERT_STDLAYOUT(type)
#endif
+/* UPB_DECLARE_TYPE()
+ * UPB_DECLARE_DERIVED_TYPE()
+ * UPB_DECLARE_DERIVED_TYPE2()
+ *
+ * Macros for declaring C and C++ types both, including inheritance.
+ * The inheritance doesn't use real C++ inheritance, to stay compatible with C.
+ *
+ * These macros also provide upcasts:
+ * - in C: types-specific functions (ie. upb_foo_upcast(foo))
+ * - in C++: upb::upcast(foo) along with implicit conversions
+ *
+ * Downcasts are not provided, but upb/def.h defines downcasts for upb::Def. */
+
+#define UPB_C_UPCASTS(ty, base) \
+ UPB_INLINE base *ty ## _upcast_mutable(ty *p) { return (base*)p; } \
+ UPB_INLINE const base *ty ## _upcast(const ty *p) { return (const base*)p; }
+
+#define UPB_C_UPCASTS2(ty, base, base2) \
+ UPB_C_UPCASTS(ty, base) \
+ UPB_INLINE base2 *ty ## _upcast2_mutable(ty *p) { return (base2*)p; } \
+ UPB_INLINE const base2 *ty ## _upcast2(const ty *p) { return (const base2*)p; }
#ifdef __cplusplus
-#define UPB_PRIVATE_FOR_CPP private:
-#define UPB_DECLARE_TYPE(cppname, cname) typedef cppname cname;
#define UPB_BEGIN_EXTERN_C extern "C" {
#define UPB_END_EXTERN_C }
-#define UPB_DEFINE_STRUCT0(cname, members) members;
-#define UPB_DEFINE_STRUCT(cname, cbase, members) \
- public: \
- cbase* base() { return &base_; } \
- const cbase* base() const { return &base_; } \
- \
- private: \
- cbase base_; \
- members;
-#define UPB_DEFINE_CLASS0(cppname, cppmethods, members) \
- class cppname { \
- cppmethods \
- members \
- }; \
- UPB_ASSERT_STDLAYOUT(cppname);
-#define UPB_DEFINE_CLASS1(cppname, cppbase, cppmethods, members) \
- UPB_DEFINE_CLASS0(cppname, cppmethods, members) \
+#define UPB_PRIVATE_FOR_CPP private:
+#define UPB_DECLARE_TYPE(cppname, cname) typedef cppname cname;
+
+#define UPB_DECLARE_DERIVED_TYPE(cppname, cppbase, cname, cbase) \
+ UPB_DECLARE_TYPE(cppname, cname) \
+ UPB_C_UPCASTS(cname, cbase) \
namespace upb { \
template <> \
class Pointer<cppname> : public PointerBase<cppname, cppbase> { \
@@ -183,8 +215,11 @@
explicit Pointer(const cppname* ptr) : PointerBase(ptr) {} \
}; \
}
-#define UPB_DEFINE_CLASS2(cppname, cppbase, cppbase2, cppmethods, members) \
- UPB_DEFINE_CLASS0(cppname, UPB_QUOTE(cppmethods), members) \
+
+#define UPB_DECLARE_DERIVED_TYPE2(cppname, cppbase, cppbase2, cname, cbase, \
+ cbase2) \
+ UPB_DECLARE_TYPE(cppname, cname) \
+ UPB_C_UPCASTS2(cname, cbase, cbase2) \
namespace upb { \
template <> \
class Pointer<cppname> : public PointerBase2<cppname, cppbase, cppbase2> { \
@@ -199,96 +234,97 @@
}; \
}
-#else // !defined(__cplusplus)
+#else /* !defined(__cplusplus) */
+#define UPB_BEGIN_EXTERN_C
+#define UPB_END_EXTERN_C
#define UPB_PRIVATE_FOR_CPP
#define UPB_DECLARE_TYPE(cppname, cname) \
struct cname; \
typedef struct cname cname;
-#define UPB_BEGIN_EXTERN_C
-#define UPB_END_EXTERN_C
-#define UPB_DEFINE_STRUCT0(cname, members) \
- struct cname { \
- members; \
- };
-#define UPB_DEFINE_STRUCT(cname, cbase, members) \
- struct cname { \
- cbase base; \
- members; \
- };
-#define UPB_DEFINE_CLASS0(cppname, cppmethods, members) members
-#define UPB_DEFINE_CLASS1(cppname, cppbase, cppmethods, members) members
-#define UPB_DEFINE_CLASS2(cppname, cppbase, cppbase2, cppmethods, members) \
- members
-
-#endif // defined(__cplusplus)
+#define UPB_DECLARE_DERIVED_TYPE(cppname, cppbase, cname, cbase) \
+ UPB_DECLARE_TYPE(cppname, cname) \
+ UPB_C_UPCASTS(cname, cbase)
+#define UPB_DECLARE_DERIVED_TYPE2(cppname, cppbase, cppbase2, \
+ cname, cbase, cbase2) \
+ UPB_DECLARE_TYPE(cppname, cname) \
+ UPB_C_UPCASTS2(cname, cbase, cbase2)
-#ifdef __GNUC__
-#define UPB_NORETURN __attribute__((__noreturn__))
-#else
-#define UPB_NORETURN
-#endif
+#endif /* defined(__cplusplus) */
#define UPB_MAX(x, y) ((x) > (y) ? (x) : (y))
#define UPB_MIN(x, y) ((x) < (y) ? (x) : (y))
#define UPB_UNUSED(var) (void)var
-// Code with commas confuses the preprocessor when passed as arguments, whether
-// C++ type names with commas (eg. Foo<int, int>) or code blocks that declare
-// variables (ie. int foo, bar).
-#define UPB_QUOTE(...) __VA_ARGS__
-
-// For asserting something about a variable when the variable is not used for
-// anything else. This prevents "unused variable" warnings when compiling in
-// debug mode.
+/* For asserting something about a variable when the variable is not used for
+ * anything else. This prevents "unused variable" warnings when compiling in
+ * debug mode. */
#define UPB_ASSERT_VAR(var, predicate) UPB_UNUSED(var); assert(predicate)
-// Generic function type.
+/* Generic function type. */
typedef void upb_func();
-/* Casts **********************************************************************/
-
-// Upcasts for C. For downcasts see the definitions of the subtypes.
-#define UPB_UPCAST(obj) (&(obj)->base)
-#define UPB_UPCAST2(obj) UPB_UPCAST(UPB_UPCAST(obj))
+/* C++ Casts ******************************************************************/
#ifdef __cplusplus
-// Downcasts for C++. We can't use C++ inheritance directly and maintain
-// compatibility with C. So our inheritance is undeclared in C++.
-// Specializations of these casting functions are defined for appropriate type
-// pairs, and perform the necessary checks.
-//
-// Example:
-// upb::Def* def = <...>;
-// upb::MessageDef* = upb::dyn_cast<upb::MessageDef*>(def);
-
namespace upb {
-// Casts to a direct subclass. The caller must know that cast is correct; an
-// incorrect cast will throw an assertion failure in debug mode.
+template <class T> class Pointer;
+
+/* Casts to a subclass. The caller must know that cast is correct; an
+ * incorrect cast will throw an assertion failure in debug mode.
+ *
+ * Example:
+ * upb::Def* def = GetDef();
+ * // Assert-fails if this was not actually a MessageDef.
+ * upb::MessgeDef* md = upb::down_cast<upb::MessageDef>(def);
+ *
+ * Note that downcasts are only defined for some types (at the moment you can
+ * only downcast from a upb::Def to a specific Def type). */
template<class To, class From> To down_cast(From* f);
-// Casts to a direct subclass. If the class does not actually match the given
-// subtype, returns NULL.
+/* Casts to a subclass. If the class does not actually match the given To type,
+ * returns NULL.
+ *
+ * Example:
+ * upb::Def* def = GetDef();
+ * // md will be NULL if this was not actually a MessageDef.
+ * upb::MessgeDef* md = upb::down_cast<upb::MessageDef>(def);
+ *
+ * Note that dynamic casts are only defined for some types (at the moment you
+ * can only downcast from a upb::Def to a specific Def type).. */
template<class To, class From> To dyn_cast(From* f);
-// Pointer<T> is a simple wrapper around a T*. It is only constructed for
-// upcast() below, and its sole purpose is to be implicitly convertable to T* or
-// pointers to base classes, just as a pointer would be in regular C++ if the
-// inheritance were directly expressed as C++ inheritance.
-template <class T> class Pointer;
-
-// Casts to any base class, or the type itself (ie. can be a no-op).
+/* Casts to any base class, or the type itself (ie. can be a no-op).
+ *
+ * Example:
+ * upb::MessageDef* md = GetDef();
+ * // This will fail to compile if this wasn't actually a base class.
+ * upb::Def* def = upb::upcast(md);
+ */
template <class T> inline Pointer<T> upcast(T *f) { return Pointer<T>(f); }
+/* Attempt upcast to specific base class.
+ *
+ * Example:
+ * upb::MessageDef* md = GetDef();
+ * upb::upcast_to<upb::Def>(md)->MethodOnDef();
+ */
+template <class T, class F> inline T* upcast_to(F *f) {
+ return static_cast<T*>(upcast(f));
+}
+
+/* PointerBase<T>: implementation detail of upb::upcast().
+ * It is implicitly convertable to pointers to the Base class(es).
+ */
template <class T, class Base>
class PointerBase {
public:
explicit PointerBase(T* ptr) : ptr_(ptr) {}
operator T*() { return ptr_; }
- operator Base*() { return ptr_->base(); }
+ operator Base*() { return (Base*)ptr_; }
private:
T* ptr_;
@@ -310,17 +346,17 @@ class PointerBase2 : public PointerBase<T, Base> {
#ifdef __cplusplus
-#include <algorithm> // For std::swap().
+#include <algorithm> /* For std::swap(). */
namespace upb {
-// Provides RAII semantics for upb refcounted objects. Each reffed_ptr owns a
-// ref on whatever object it points to (if any).
+/* Provides RAII semantics for upb refcounted objects. Each reffed_ptr owns a
+ * ref on whatever object it points to (if any). */
template <class T> class reffed_ptr {
public:
reffed_ptr() : ptr_(NULL) {}
- // If ref_donor is NULL, takes a new ref, otherwise adopts from ref_donor.
+ /* If ref_donor is NULL, takes a new ref, otherwise adopts from ref_donor. */
template <class U>
reffed_ptr(U* val, const void* ref_donor = NULL)
: ptr_(upb::upcast(val)) {
@@ -351,8 +387,8 @@ template <class T> class reffed_ptr {
return *this;
}
- // TODO(haberman): add C++11 move construction/assignment for greater
- // efficiency.
+ /* TODO(haberman): add C++11 move construction/assignment for greater
+ * efficiency. */
void swap(reffed_ptr& other) {
if (ptr_ == other.ptr_) {
@@ -376,7 +412,7 @@ template <class T> class reffed_ptr {
T* get() const { return ptr_; }
- // If ref_donor is NULL, takes a new ref, otherwise adopts from ref_donor.
+ /* If ref_donor is NULL, takes a new ref, otherwise adopts from ref_donor. */
template <class U>
void reset(U* ptr = NULL, const void* ref_donor = NULL) {
reffed_ptr(ptr, ref_donor).swap(*this);
@@ -392,8 +428,8 @@ template <class T> class reffed_ptr {
return reffed_ptr<U>(upb::dyn_cast<U*>(get()));
}
- // Plain release() is unsafe; if we were the only owner, it would leak the
- // object. Instead we provide this:
+ /* Plain release() is unsafe; if we were the only owner, it would leak the
+ * object. Instead we provide this: */
T* ReleaseTo(const void* new_owner) {
T* ret = NULL;
ptr_->DonateRef(this, new_owner);
@@ -405,9 +441,9 @@ template <class T> class reffed_ptr {
T* ptr_;
};
-} // namespace upb
+} /* namespace upb */
-#endif // __cplusplus
+#endif /* __cplusplus */
/* upb::Status ****************************************************************/
@@ -419,70 +455,76 @@ class Status;
}
#endif
-UPB_DECLARE_TYPE(upb::ErrorSpace, upb_errorspace);
-UPB_DECLARE_TYPE(upb::Status, upb_status);
+UPB_DECLARE_TYPE(upb::ErrorSpace, upb_errorspace)
+UPB_DECLARE_TYPE(upb::Status, upb_status)
-// The maximum length of an error message before it will get truncated.
+/* The maximum length of an error message before it will get truncated. */
#define UPB_STATUS_MAX_MESSAGE 128
-// An error callback function is used to report errors from some component.
-// The function can return "true" to indicate that the component should try
-// to recover and proceed, but this is not always possible.
+/* An error callback function is used to report errors from some component.
+ * The function can return "true" to indicate that the component should try
+ * to recover and proceed, but this is not always possible. */
typedef bool upb_errcb_t(void *closure, const upb_status* status);
-UPB_DEFINE_CLASS0(upb::ErrorSpace,
-,
-UPB_DEFINE_STRUCT0(upb_errorspace,
+#ifdef __cplusplus
+class upb::ErrorSpace {
+#else
+struct upb_errorspace {
+#endif
const char *name;
- // Should the error message in the status object according to this code.
+ /* Should the error message in the status object according to this code. */
void (*set_message)(upb_status* status, int code);
-));
+};
-// Object representing a success or failure status.
-// It owns no resources and allocates no memory, so it should work
-// even in OOM situations.
-UPB_DEFINE_CLASS0(upb::Status,
+#ifdef __cplusplus
+
+/* Object representing a success or failure status.
+ * It owns no resources and allocates no memory, so it should work
+ * even in OOM situations. */
+
+class upb::Status {
public:
Status();
- // Returns true if there is no error.
+ /* Returns true if there is no error. */
bool ok() const;
- // Optional error space and code, useful if the caller wants to
- // programmatically check the specific kind of error.
+ /* Optional error space and code, useful if the caller wants to
+ * programmatically check the specific kind of error. */
ErrorSpace* error_space();
int code() const;
const char *error_message() const;
- // The error message will be truncated if it is longer than
- // UPB_STATUS_MAX_MESSAGE-4.
+ /* The error message will be truncated if it is longer than
+ * UPB_STATUS_MAX_MESSAGE-4. */
void SetErrorMessage(const char* msg);
void SetFormattedErrorMessage(const char* fmt, ...);
- // If there is no error message already, this will use the ErrorSpace to
- // populate the error message for this code. The caller can still call
- // SetErrorMessage() to give a more specific message.
+ /* If there is no error message already, this will use the ErrorSpace to
+ * populate the error message for this code. The caller can still call
+ * SetErrorMessage() to give a more specific message. */
void SetErrorCode(ErrorSpace* space, int code);
- // Resets the status to a successful state with no message.
+ /* Resets the status to a successful state with no message. */
void Clear();
void CopyFrom(const Status& other);
private:
- UPB_DISALLOW_COPY_AND_ASSIGN(Status);
-,
-UPB_DEFINE_STRUCT0(upb_status,
+ UPB_DISALLOW_COPY_AND_ASSIGN(Status)
+#else
+struct upb_status {
+#endif
bool ok_;
- // Specific status code defined by some error space (optional).
+ /* Specific status code defined by some error space (optional). */
int code_;
upb_errorspace *error_space_;
- // Error message; NULL-terminated.
+ /* Error message; NULL-terminated. */
char msg[UPB_STATUS_MAX_MESSAGE];
-));
+};
#define UPB_STATUS_INIT {true, 0, NULL, {0}}
@@ -490,15 +532,15 @@ UPB_DEFINE_STRUCT0(upb_status,
extern "C" {
#endif
-// The returned string is invalidated by any other call into the status.
+/* The returned string is invalidated by any other call into the status. */
const char *upb_status_errmsg(const upb_status *status);
bool upb_ok(const upb_status *status);
upb_errorspace *upb_status_errspace(const upb_status *status);
int upb_status_errcode(const upb_status *status);
-// Any of the functions that write to a status object allow status to be NULL,
-// to support use cases where the function's caller does not care about the
-// status message.
+/* Any of the functions that write to a status object allow status to be NULL,
+ * to support use cases where the function's caller does not care about the
+ * status message. */
void upb_status_clear(upb_status *status);
void upb_status_seterrmsg(upb_status *status, const char *msg);
void upb_status_seterrf(upb_status *status, const char *fmt, ...);
@@ -507,11 +549,11 @@ void upb_status_seterrcode(upb_status *status, upb_errorspace *space, int code);
void upb_status_copy(upb_status *to, const upb_status *from);
#ifdef __cplusplus
-} // extern "C"
+} /* extern "C" */
namespace upb {
-// C++ Wrappers
+/* C++ Wrappers */
inline Status::Status() { Clear(); }
inline bool Status::ok() const { return upb_ok(this); }
inline const char* Status::error_message() const {
@@ -534,7 +576,7 @@ inline void Status::CopyFrom(const Status& other) {
upb_status_copy(this, &other);
}
-} // namespace upb
+} /* namespace upb */
#endif
@@ -547,9 +589,9 @@ extern "C" {
/* upb_value ******************************************************************/
-// A tagged union (stored untagged inside the table) so that we can check that
-// clients calling table accessors are correctly typed without having to have
-// an explosion of accessors.
+/* A tagged union (stored untagged inside the table) so that we can check that
+ * clients calling table accessors are correctly typed without having to have
+ * an explosion of accessors. */
typedef enum {
UPB_CTYPE_INT32 = 1,
UPB_CTYPE_INT64 = 2,
@@ -559,85 +601,54 @@ typedef enum {
UPB_CTYPE_CSTR = 6,
UPB_CTYPE_PTR = 7,
UPB_CTYPE_CONSTPTR = 8,
- UPB_CTYPE_FPTR = 9,
+ UPB_CTYPE_FPTR = 9
} upb_ctype_t;
-typedef union {
- int32_t int32;
- int64_t int64;
- uint64_t uint64;
- uint32_t uint32;
- bool _bool;
- char *cstr;
- void *ptr;
- const void *constptr;
- upb_func *fptr;
-} _upb_value;
-
typedef struct {
- _upb_value val;
+ uint64_t val;
#ifndef NDEBUG
- // In debug mode we carry the value type around also so we can check accesses
- // to be sure the right member is being read.
+ /* In debug mode we carry the value type around also so we can check accesses
+ * to be sure the right member is being read. */
upb_ctype_t ctype;
#endif
} upb_value;
-#ifdef UPB_C99
-#define UPB_VALUE_INIT(v, member) {.member = v}
-#endif
-#define UPB__VALUE_INIT_NONE UPB_VALUE_INIT(NULL, ptr)
-
#ifdef NDEBUG
#define SET_TYPE(dest, val) UPB_UNUSED(val)
-#define UPB_VALUE_INIT_NONE {UPB__VALUE_INIT_NONE}
#else
#define SET_TYPE(dest, val) dest = val
-// Non-existent type, all reads will fail.
-#define UPB_VALUE_INIT_NONE {UPB__VALUE_INIT_NONE, -1}
#endif
-#define UPB_VALUE_INIT_INT32(v) UPB_VALUE_INIT(v, int32)
-#define UPB_VALUE_INIT_INT64(v) UPB_VALUE_INIT(v, int64)
-#define UPB_VALUE_INIT_UINT32(v) UPB_VALUE_INIT(v, uint32)
-#define UPB_VALUE_INIT_UINT64(v) UPB_VALUE_INIT(v, uint64)
-#define UPB_VALUE_INIT_BOOL(v) UPB_VALUE_INIT(v, _bool)
-#define UPB_VALUE_INIT_CSTR(v) UPB_VALUE_INIT(v, cstr)
-#define UPB_VALUE_INIT_PTR(v) UPB_VALUE_INIT(v, ptr)
-#define UPB_VALUE_INIT_CONSTPTR(v) UPB_VALUE_INIT(v, constptr)
-#define UPB_VALUE_INIT_FPTR(v) UPB_VALUE_INIT(v, fptr)
-
-// Like strdup(), which isn't always available since it's not ANSI C.
+/* Like strdup(), which isn't always available since it's not ANSI C. */
char *upb_strdup(const char *s);
-// Variant that works with a length-delimited rather than NULL-delimited string,
-// as supported by strtable.
+/* Variant that works with a length-delimited rather than NULL-delimited string,
+ * as supported by strtable. */
char *upb_strdup2(const char *s, size_t len);
-UPB_INLINE void _upb_value_setval(upb_value *v, _upb_value val,
+UPB_INLINE void _upb_value_setval(upb_value *v, uint64_t val,
upb_ctype_t ctype) {
v->val = val;
SET_TYPE(v->ctype, ctype);
}
-UPB_INLINE upb_value _upb_value_val(_upb_value val, upb_ctype_t ctype) {
+UPB_INLINE upb_value _upb_value_val(uint64_t val, upb_ctype_t ctype) {
upb_value ret;
_upb_value_setval(&ret, val, ctype);
return ret;
}
-// For each value ctype, define the following set of functions:
-//
-// // Get/set an int32 from a upb_value.
-// int32_t upb_value_getint32(upb_value val);
-// void upb_value_setint32(upb_value *val, int32_t cval);
-//
-// // Construct a new upb_value from an int32.
-// upb_value upb_value_int32(int32_t val);
-#define FUNCS(name, membername, type_t, proto_type) \
+/* For each value ctype, define the following set of functions:
+ *
+ * // Get/set an int32 from a upb_value.
+ * int32_t upb_value_getint32(upb_value val);
+ * void upb_value_setint32(upb_value *val, int32_t cval);
+ *
+ * // Construct a new upb_value from an int32.
+ * upb_value upb_value_int32(int32_t val); */
+#define FUNCS(name, membername, type_t, converter, proto_type) \
UPB_INLINE void upb_value_set ## name(upb_value *val, type_t cval) { \
- val->val.uint64 = 0; \
+ val->val = (converter)cval; \
SET_TYPE(val->ctype, proto_type); \
- val->val.membername = cval; \
} \
UPB_INLINE upb_value upb_value_ ## name(type_t val) { \
upb_value ret; \
@@ -646,69 +657,148 @@ UPB_INLINE upb_value _upb_value_val(_upb_value val, upb_ctype_t ctype) {
} \
UPB_INLINE type_t upb_value_get ## name(upb_value val) { \
assert(val.ctype == proto_type); \
- return val.val.membername; \
+ return (type_t)(converter)val.val; \
}
-FUNCS(int32, int32, int32_t, UPB_CTYPE_INT32);
-FUNCS(int64, int64, int64_t, UPB_CTYPE_INT64);
-FUNCS(uint32, uint32, uint32_t, UPB_CTYPE_UINT32);
-FUNCS(uint64, uint64, uint64_t, UPB_CTYPE_UINT64);
-FUNCS(bool, _bool, bool, UPB_CTYPE_BOOL);
-FUNCS(cstr, cstr, char*, UPB_CTYPE_CSTR);
-FUNCS(ptr, ptr, void*, UPB_CTYPE_PTR);
-FUNCS(constptr, constptr, const void*, UPB_CTYPE_CONSTPTR);
-FUNCS(fptr, fptr, upb_func*, UPB_CTYPE_FPTR);
+FUNCS(int32, int32, int32_t, int32_t, UPB_CTYPE_INT32)
+FUNCS(int64, int64, int64_t, int64_t, UPB_CTYPE_INT64)
+FUNCS(uint32, uint32, uint32_t, uint32_t, UPB_CTYPE_UINT32)
+FUNCS(uint64, uint64, uint64_t, uint64_t, UPB_CTYPE_UINT64)
+FUNCS(bool, _bool, bool, bool, UPB_CTYPE_BOOL)
+FUNCS(cstr, cstr, char*, uintptr_t, UPB_CTYPE_CSTR)
+FUNCS(ptr, ptr, void*, uintptr_t, UPB_CTYPE_PTR)
+FUNCS(constptr, constptr, const void*, uintptr_t, UPB_CTYPE_CONSTPTR)
+FUNCS(fptr, fptr, upb_func*, uintptr_t, UPB_CTYPE_FPTR)
#undef FUNCS
+#undef SET_TYPE
-/* upb_table ******************************************************************/
+/* upb_tabkey *****************************************************************/
+
+/* Either:
+ * 1. an actual integer key, or
+ * 2. a pointer to a string prefixed by its uint32_t length, owned by us.
+ *
+ * ...depending on whether this is a string table or an int table. We would
+ * make this a union of those two types, but C89 doesn't support statically
+ * initializing a non-first union member. */
+typedef uintptr_t upb_tabkey;
+
+#define UPB_TABKEY_NUM(n) n
+#define UPB_TABKEY_NONE 0
+/* The preprocessor isn't quite powerful enough to turn the compile-time string
+ * length into a byte-wise string representation, so code generation needs to
+ * help it along.
+ *
+ * "len1" is the low byte and len4 is the high byte. */
+#ifdef UPB_BIG_ENDIAN
+#define UPB_TABKEY_STR(len1, len2, len3, len4, strval) \
+ (uintptr_t)(len4 len3 len2 len1 strval)
+#else
+#define UPB_TABKEY_STR(len1, len2, len3, len4, strval) \
+ (uintptr_t)(len1 len2 len3 len4 strval)
+#endif
+
+UPB_INLINE char *upb_tabstr(upb_tabkey key, uint32_t *len) {
+ char* mem = (char*)key;
+ if (len) memcpy(len, mem, sizeof(*len));
+ return mem + sizeof(*len);
+}
+
+
+/* upb_tabval *****************************************************************/
+
+#ifdef __cplusplus
+
+/* Status initialization not supported.
+ *
+ * This separate definition is necessary because in C++, UINTPTR_MAX isn't
+ * reliably available. */
+typedef struct {
+ uint64_t val;
+} upb_tabval;
+
+#else
+
+/* C -- supports static initialization, but to support static initialization of
+ * both integers and points for both 32 and 64 bit targets, it takes a little
+ * bit of doing. */
+
+#if UINTPTR_MAX == 0xffffffffffffffffULL
+#define UPB_PTR_IS_64BITS
+#elif UINTPTR_MAX != 0xffffffff
+#error Could not determine how many bits pointers are.
+#endif
typedef union {
- uintptr_t num;
+ /* For static initialization.
+ *
+ * Unfortunately this ugliness is necessary -- it is the only way that we can,
+ * with -std=c89 -pedantic, statically initialize this to either a pointer or
+ * an integer on 32-bit platforms. */
struct {
- // We own this. NULL-terminated but may also contain binary data; see
- // explicit length below.
- // TODO: move the length to the start of the string in order to reduce
- // tabkey's size (to one machine word) in a way that supports static
- // initialization.
- const char *str;
- size_t length;
- } s;
-} upb_tabkey;
-
-#define UPB_TABKEY_NUM(n) {n}
-#ifdef UPB_C99
-// Given that |s| is a string literal, sizeof(s) gives us a
-// compile-time-constant strlen(). We must ensure that this works for static
-// data initializers.
-#define UPB_TABKEY_STR(strval) { .s = { .str = strval, \
- .length = sizeof(strval) - 1 } }
+#ifdef UPB_PTR_IS_64BITS
+ uintptr_t val;
+#else
+ uintptr_t val1;
+ uintptr_t val2;
+#endif
+ } staticinit;
+
+ /* The normal accessor that we use for everything at runtime. */
+ uint64_t val;
+} upb_tabval;
+
+#ifdef UPB_PTR_IS_64BITS
+#define UPB_TABVALUE_INT_INIT(v) {{v}}
+#define UPB_TABVALUE_EMPTY_INIT {{-1}}
+#else
+
+/* 32-bit pointers */
+
+#ifdef UPB_BIG_ENDIAN
+#define UPB_TABVALUE_INT_INIT(v) {{0, v}}
+#define UPB_TABVALUE_EMPTY_INIT {{-1, -1}}
+#else
+#define UPB_TABVALUE_INT_INIT(v) {{v, 0}}
+#define UPB_TABVALUE_EMPTY_INIT {{-1, -1}}
+#endif
+
#endif
-// TODO(haberman): C++
-#define UPB_TABKEY_NONE {0}
+
+#define UPB_TABVALUE_PTR_INIT(v) UPB_TABVALUE_INT_INIT((uintptr_t)v)
+
+#undef UPB_PTR_IS_64BITS
+
+#endif /* __cplusplus */
+
+
+/* upb_table ******************************************************************/
typedef struct _upb_tabent {
upb_tabkey key;
- _upb_value val;
- // Internal chaining. This is const so we can create static initializers for
- // tables. We cast away const sometimes, but *only* when the containing
- // upb_table is known to be non-const. This requires a bit of care, but
- // the subtlety is confined to table.c.
+ upb_tabval val;
+
+ /* Internal chaining. This is const so we can create static initializers for
+ * tables. We cast away const sometimes, but *only* when the containing
+ * upb_table is known to be non-const. This requires a bit of care, but
+ * the subtlety is confined to table.c. */
const struct _upb_tabent *next;
} upb_tabent;
typedef struct {
- size_t count; // Number of entries in the hash part.
- size_t mask; // Mask to turn hash value -> bucket.
- upb_ctype_t ctype; // Type of all values.
- uint8_t size_lg2; // Size of the hash table part is 2^size_lg2 entries.
-
- // Hash table entries.
- // Making this const isn't entirely accurate; what we really want is for it to
- // have the same const-ness as the table it's inside. But there's no way to
- // declare that in C. So we have to make it const so that we can statically
- // initialize const hash tables. Then we cast away const when we have to.
+ size_t count; /* Number of entries in the hash part. */
+ size_t mask; /* Mask to turn hash value -> bucket. */
+ upb_ctype_t ctype; /* Type of all values. */
+ uint8_t size_lg2; /* Size of the hashtable part is 2^size_lg2 entries. */
+
+ /* Hash table entries.
+ * Making this const isn't entirely accurate; what we really want is for it to
+ * have the same const-ness as the table it's inside. But there's no way to
+ * declare that in C. So we have to make it const so that we can statically
+ * initialize const hash tables. Then we cast away const when we have to.
+ */
const upb_tabent *entries;
} upb_table;
@@ -723,10 +813,10 @@ typedef struct {
UPB_STRTABLE_INIT(0, 0, ctype, 0, NULL)
typedef struct {
- upb_table t; // For entries that don't fit in the array part.
- const _upb_value *array; // Array part of the table. See const note above.
- size_t array_size; // Array part size.
- size_t array_count; // Array part number of elements.
+ upb_table t; /* For entries that don't fit in the array part. */
+ const upb_tabval *array; /* Array part of the table. See const note above. */
+ size_t array_size; /* Array part size. */
+ size_t array_count; /* Array part number of elements. */
} upb_inttable;
#define UPB_INTTABLE_INIT(count, mask, ctype, size_lg2, ent, a, asize, acount) \
@@ -735,8 +825,7 @@ typedef struct {
#define UPB_EMPTY_INTTABLE_INIT(ctype) \
UPB_INTTABLE_INIT(0, 0, ctype, 0, NULL, NULL, 0, 0)
-#define UPB_ARRAY_EMPTYVAL -1
-#define UPB_ARRAY_EMPTYENT UPB_VALUE_INIT_INT64(UPB_ARRAY_EMPTYVAL)
+#define UPB_ARRAY_EMPTYENT -1
UPB_INLINE size_t upb_table_size(const upb_table *t) {
if (t->size_lg2 == 0)
@@ -745,18 +834,16 @@ UPB_INLINE size_t upb_table_size(const upb_table *t) {
return 1 << t->size_lg2;
}
-// Internal-only functions, in .h file only out of necessity.
+/* Internal-only functions, in .h file only out of necessity. */
UPB_INLINE bool upb_tabent_isempty(const upb_tabent *e) {
- return e->key.num == 0;
+ return e->key == 0;
}
-// Used by some of the unit tests for generic hashing functionality.
+/* Used by some of the unit tests for generic hashing functionality. */
uint32_t MurmurHash2(const void * key, size_t len, uint32_t seed);
-UPB_INLINE upb_tabkey upb_intkey(uintptr_t key) {
- upb_tabkey k;
- k.num = key;
- return k;
+UPB_INLINE uintptr_t upb_intkey(uintptr_t key) {
+ return key;
}
UPB_INLINE uint32_t upb_inthash(uintptr_t key) {
@@ -767,93 +854,94 @@ static const upb_tabent *upb_getentry(const upb_table *t, uint32_t hash) {
return t->entries + (hash & t->mask);
}
-UPB_INLINE bool upb_arrhas(_upb_value v) {
- return v.uint64 != (uint64_t)UPB_ARRAY_EMPTYVAL;
+UPB_INLINE bool upb_arrhas(upb_tabval key) {
+ return key.val != (uint64_t)-1;
}
-// Initialize and uninitialize a table, respectively. If memory allocation
-// failed, false is returned that the table is uninitialized.
+/* Initialize and uninitialize a table, respectively. If memory allocation
+ * failed, false is returned that the table is uninitialized. */
bool upb_inttable_init(upb_inttable *table, upb_ctype_t ctype);
bool upb_strtable_init(upb_strtable *table, upb_ctype_t ctype);
void upb_inttable_uninit(upb_inttable *table);
void upb_strtable_uninit(upb_strtable *table);
-// Returns the number of values in the table.
+/* Returns the number of values in the table. */
size_t upb_inttable_count(const upb_inttable *t);
UPB_INLINE size_t upb_strtable_count(const upb_strtable *t) {
return t->t.count;
}
-// Inserts the given key into the hashtable with the given value. The key must
-// not already exist in the hash table. For string tables, the key must be
-// NULL-terminated, and the table will make an internal copy of the key.
-// Inttables must not insert a value of UINTPTR_MAX.
-//
-// If a table resize was required but memory allocation failed, false is
-// returned and the table is unchanged.
+/* Inserts the given key into the hashtable with the given value. The key must
+ * not already exist in the hash table. For string tables, the key must be
+ * NULL-terminated, and the table will make an internal copy of the key.
+ * Inttables must not insert a value of UINTPTR_MAX.
+ *
+ * If a table resize was required but memory allocation failed, false is
+ * returned and the table is unchanged. */
bool upb_inttable_insert(upb_inttable *t, uintptr_t key, upb_value val);
bool upb_strtable_insert2(upb_strtable *t, const char *key, size_t len,
upb_value val);
-// For NULL-terminated strings.
+/* For NULL-terminated strings. */
UPB_INLINE bool upb_strtable_insert(upb_strtable *t, const char *key,
upb_value val) {
return upb_strtable_insert2(t, key, strlen(key), val);
}
-// Looks up key in this table, returning "true" if the key was found.
-// If v is non-NULL, copies the value for this key into *v.
+/* Looks up key in this table, returning "true" if the key was found.
+ * If v is non-NULL, copies the value for this key into *v. */
bool upb_inttable_lookup(const upb_inttable *t, uintptr_t key, upb_value *v);
bool upb_strtable_lookup2(const upb_strtable *t, const char *key, size_t len,
upb_value *v);
-// For NULL-terminated strings.
+/* For NULL-terminated strings. */
UPB_INLINE bool upb_strtable_lookup(const upb_strtable *t, const char *key,
upb_value *v) {
return upb_strtable_lookup2(t, key, strlen(key), v);
}
-// Removes an item from the table. Returns true if the remove was successful,
-// and stores the removed item in *val if non-NULL.
+/* Removes an item from the table. Returns true if the remove was successful,
+ * and stores the removed item in *val if non-NULL. */
bool upb_inttable_remove(upb_inttable *t, uintptr_t key, upb_value *val);
bool upb_strtable_remove2(upb_strtable *t, const char *key, size_t len,
upb_value *val);
-// For NULL-terminated strings.
+/* For NULL-terminated strings. */
UPB_INLINE bool upb_strtable_remove(upb_strtable *t, const char *key,
upb_value *v) {
return upb_strtable_remove2(t, key, strlen(key), v);
}
-// Updates an existing entry in an inttable. If the entry does not exist,
-// returns false and does nothing. Unlike insert/remove, this does not
-// invalidate iterators.
+/* Updates an existing entry in an inttable. If the entry does not exist,
+ * returns false and does nothing. Unlike insert/remove, this does not
+ * invalidate iterators. */
bool upb_inttable_replace(upb_inttable *t, uintptr_t key, upb_value val);
-// Handy routines for treating an inttable like a stack. May not be mixed with
-// other insert/remove calls.
+/* Handy routines for treating an inttable like a stack. May not be mixed with
+ * other insert/remove calls. */
bool upb_inttable_push(upb_inttable *t, upb_value val);
upb_value upb_inttable_pop(upb_inttable *t);
-// Convenience routines for inttables with pointer keys.
+/* Convenience routines for inttables with pointer keys. */
bool upb_inttable_insertptr(upb_inttable *t, const void *key, upb_value val);
bool upb_inttable_removeptr(upb_inttable *t, const void *key, upb_value *val);
bool upb_inttable_lookupptr(
const upb_inttable *t, const void *key, upb_value *val);
-// Optimizes the table for the current set of entries, for both memory use and
-// lookup time. Client should call this after all entries have been inserted;
-// inserting more entries is legal, but will likely require a table resize.
+/* Optimizes the table for the current set of entries, for both memory use and
+ * lookup time. Client should call this after all entries have been inserted;
+ * inserting more entries is legal, but will likely require a table resize. */
void upb_inttable_compact(upb_inttable *t);
-// A special-case inlinable version of the lookup routine for 32-bit integers.
+/* A special-case inlinable version of the lookup routine for 32-bit
+ * integers. */
UPB_INLINE bool upb_inttable_lookup32(const upb_inttable *t, uint32_t key,
upb_value *v) {
- *v = upb_value_int32(0); // Silence compiler warnings.
+ *v = upb_value_int32(0); /* Silence compiler warnings. */
if (key < t->array_size) {
- _upb_value arrval = t->array[key];
+ upb_tabval arrval = t->array[key];
if (upb_arrhas(arrval)) {
- _upb_value_setval(v, arrval, t->t.ctype);
+ _upb_value_setval(v, arrval.val, t->t.ctype);
return true;
} else {
return false;
@@ -862,8 +950,8 @@ UPB_INLINE bool upb_inttable_lookup32(const upb_inttable *t, uint32_t key,
const upb_tabent *e;
if (t->t.entries == NULL) return false;
for (e = upb_getentry(&t->t, upb_inthash(key)); true; e = e->next) {
- if ((uint32_t)e->key.num == key) {
- _upb_value_setval(v, e->val, t->t.ctype);
+ if ((uint32_t)e->key == key) {
+ _upb_value_setval(v, e->val.val, t->t.ctype);
return true;
}
if (e->next == NULL) return false;
@@ -871,42 +959,43 @@ UPB_INLINE bool upb_inttable_lookup32(const upb_inttable *t, uint32_t key,
}
}
-// Exposed for testing only.
+/* Exposed for testing only. */
bool upb_strtable_resize(upb_strtable *t, size_t size_lg2);
/* Iterators ******************************************************************/
-// Iterators for int and string tables. We are subject to some kind of unusual
-// design constraints:
-//
-// For high-level languages:
-// - we must be able to guarantee that we don't crash or corrupt memory even if
-// the program accesses an invalidated iterator.
-//
-// For C++11 range-based for:
-// - iterators must be copyable
-// - iterators must be comparable
-// - it must be possible to construct an "end" value.
-//
-// Iteration order is undefined.
-//
-// Modifying the table invalidates iterators. upb_{str,int}table_done() is
-// guaranteed to work even on an invalidated iterator, as long as the table it
-// is iterating over has not been freed. Calling next() or accessing data from
-// an invalidated iterator yields unspecified elements from the table, but it is
-// guaranteed not to crash and to return real table elements (except when done()
-// is true).
+/* Iterators for int and string tables. We are subject to some kind of unusual
+ * design constraints:
+ *
+ * For high-level languages:
+ * - we must be able to guarantee that we don't crash or corrupt memory even if
+ * the program accesses an invalidated iterator.
+ *
+ * For C++11 range-based for:
+ * - iterators must be copyable
+ * - iterators must be comparable
+ * - it must be possible to construct an "end" value.
+ *
+ * Iteration order is undefined.
+ *
+ * Modifying the table invalidates iterators. upb_{str,int}table_done() is
+ * guaranteed to work even on an invalidated iterator, as long as the table it
+ * is iterating over has not been freed. Calling next() or accessing data from
+ * an invalidated iterator yields unspecified elements from the table, but it is
+ * guaranteed not to crash and to return real table elements (except when done()
+ * is true). */
/* upb_strtable_iter **********************************************************/
-// upb_strtable_iter i;
-// upb_strtable_begin(&i, t);
-// for(; !upb_strtable_done(&i); upb_strtable_next(&i)) {
-// const char *key = upb_strtable_iter_key(&i);
-// const upb_value val = upb_strtable_iter_value(&i);
-// // ...
-// }
+/* upb_strtable_iter i;
+ * upb_strtable_begin(&i, t);
+ * for(; !upb_strtable_done(&i); upb_strtable_next(&i)) {
+ * const char *key = upb_strtable_iter_key(&i);
+ * const upb_value val = upb_strtable_iter_value(&i);
+ * // ...
+ * }
+ */
typedef struct {
const upb_strtable *t;
@@ -926,13 +1015,14 @@ bool upb_strtable_iter_isequal(const upb_strtable_iter *i1,
/* upb_inttable_iter **********************************************************/
-// upb_inttable_iter i;
-// upb_inttable_begin(&i, t);
-// for(; !upb_inttable_done(&i); upb_inttable_next(&i)) {
-// uintptr_t key = upb_inttable_iter_key(&i);
-// upb_value val = upb_inttable_iter_value(&i);
-// // ...
-// }
+/* upb_inttable_iter i;
+ * upb_inttable_begin(&i, t);
+ * for(; !upb_inttable_done(&i); upb_inttable_next(&i)) {
+ * uintptr_t key = upb_inttable_iter_key(&i);
+ * upb_value val = upb_inttable_iter_value(&i);
+ * // ...
+ * }
+ */
typedef struct {
const upb_inttable *t;
@@ -956,84 +1046,102 @@ bool upb_inttable_iter_isequal(const upb_inttable_iter *i1,
#endif /* UPB_TABLE_H_ */
-// Reference tracking will check ref()/unref() operations to make sure the
-// ref ownership is correct. Where possible it will also make tools like
-// Valgrind attribute ref leaks to the code that took the leaked ref, not
-// the code that originally created the object.
-//
-// Enabling this requires the application to define upb_lock()/upb_unlock()
-// functions that acquire/release a global mutex (or #define UPB_THREAD_UNSAFE).
-#ifndef NDEBUG
-#define UPB_DEBUG_REFS
-#endif
+/* Reference tracking will check ref()/unref() operations to make sure the
+ * ref ownership is correct. Where possible it will also make tools like
+ * Valgrind attribute ref leaks to the code that took the leaked ref, not
+ * the code that originally created the object.
+ *
+ * Enabling this requires the application to define upb_lock()/upb_unlock()
+ * functions that acquire/release a global mutex (or #define UPB_THREAD_UNSAFE).
+ * For this reason we don't enable it by default, even in debug builds.
+ */
+
+/* #define UPB_DEBUG_REFS */
#ifdef __cplusplus
namespace upb { class RefCounted; }
#endif
-UPB_DECLARE_TYPE(upb::RefCounted, upb_refcounted);
+UPB_DECLARE_TYPE(upb::RefCounted, upb_refcounted)
struct upb_refcounted_vtbl;
-UPB_DEFINE_CLASS0(upb::RefCounted,
+#ifdef __cplusplus
+
+class upb::RefCounted {
public:
- // Returns true if the given object is frozen.
+ /* Returns true if the given object is frozen. */
bool IsFrozen() const;
- // Increases the ref count, the new ref is owned by "owner" which must not
- // already own a ref (and should not itself be a refcounted object if the ref
- // could possibly be circular; see below).
- // Thread-safe iff "this" is frozen.
+ /* Increases the ref count, the new ref is owned by "owner" which must not
+ * already own a ref (and should not itself be a refcounted object if the ref
+ * could possibly be circular; see below).
+ * Thread-safe iff "this" is frozen. */
void Ref(const void *owner) const;
- // Release a ref that was acquired from upb_refcounted_ref() and collects any
- // objects it can.
+ /* Release a ref that was acquired from upb_refcounted_ref() and collects any
+ * objects it can. */
void Unref(const void *owner) const;
- // Moves an existing ref from "from" to "to", without changing the overall
- // ref count. DonateRef(foo, NULL, owner) is the same as Ref(foo, owner),
- // but "to" may not be NULL.
+ /* Moves an existing ref from "from" to "to", without changing the overall
+ * ref count. DonateRef(foo, NULL, owner) is the same as Ref(foo, owner),
+ * but "to" may not be NULL. */
void DonateRef(const void *from, const void *to) const;
- // Verifies that a ref to the given object is currently held by the given
- // owner. Only effective in UPB_DEBUG_REFS builds.
+ /* Verifies that a ref to the given object is currently held by the given
+ * owner. Only effective in UPB_DEBUG_REFS builds. */
void CheckRef(const void *owner) const;
private:
- UPB_DISALLOW_POD_OPS(RefCounted, upb::RefCounted);
-,
-UPB_DEFINE_STRUCT0(upb_refcounted,
- // A single reference count shared by all objects in the group.
+ UPB_DISALLOW_POD_OPS(RefCounted, upb::RefCounted)
+#else
+struct upb_refcounted {
+#endif
+ /* TODO(haberman): move the actual structure definition to structdefs.int.h.
+ * The only reason they are here is because inline functions need to see the
+ * definition of upb_handlers, which needs to see this definition. But we
+ * can change the upb_handlers inline functions to deal in raw offsets
+ * instead.
+ */
+
+ /* A single reference count shared by all objects in the group. */
uint32_t *group;
- // A singly-linked list of all objects in the group.
+ /* A singly-linked list of all objects in the group. */
upb_refcounted *next;
- // Table of function pointers for this type.
+ /* Table of function pointers for this type. */
const struct upb_refcounted_vtbl *vtbl;
- // Maintained only when mutable, this tracks the number of refs (but not
- // ref2's) to this object. *group should be the sum of all individual_count
- // in the group.
+ /* Maintained only when mutable, this tracks the number of refs (but not
+ * ref2's) to this object. *group should be the sum of all individual_count
+ * in the group. */
uint32_t individual_count;
bool is_frozen;
#ifdef UPB_DEBUG_REFS
- upb_inttable *refs; // Maps owner -> trackedref for incoming refs.
- upb_inttable *ref2s; // Set of targets for outgoing ref2s.
+ upb_inttable *refs; /* Maps owner -> trackedref for incoming refs. */
+ upb_inttable *ref2s; /* Set of targets for outgoing ref2s. */
+#endif
+};
+
+#ifdef UPB_DEBUG_REFS
+#define UPB_REFCOUNT_INIT(refs, ref2s) \
+ {&static_refcount, NULL, NULL, 0, true, refs, ref2s}
+#else
+#define UPB_REFCOUNT_INIT(refs, ref2s) {&static_refcount, NULL, NULL, 0, true}
#endif
-));
-UPB_BEGIN_EXTERN_C // {
+UPB_BEGIN_EXTERN_C
-// It is better to use tracked refs when possible, for the extra debugging
-// capability. But if this is not possible (because you don't have easy access
-// to a stable pointer value that is associated with the ref), you can pass
-// UPB_UNTRACKED_REF instead.
+/* It is better to use tracked refs when possible, for the extra debugging
+ * capability. But if this is not possible (because you don't have easy access
+ * to a stable pointer value that is associated with the ref), you can pass
+ * UPB_UNTRACKED_REF instead. */
extern const void *UPB_UNTRACKED_REF;
-// Native C API.
+/* Native C API. */
bool upb_refcounted_isfrozen(const upb_refcounted *r);
void upb_refcounted_ref(const upb_refcounted *r, const void *owner);
void upb_refcounted_unref(const upb_refcounted *r, const void *owner);
@@ -1041,37 +1149,70 @@ void upb_refcounted_donateref(
const upb_refcounted *r, const void *from, const void *to);
void upb_refcounted_checkref(const upb_refcounted *r, const void *owner);
+#define UPB_REFCOUNTED_CMETHODS(type, upcastfunc) \
+ UPB_INLINE bool type ## _isfrozen(const type *v) { \
+ return upb_refcounted_isfrozen(upcastfunc(v)); \
+ } \
+ UPB_INLINE void type ## _ref(const type *v, const void *owner) { \
+ upb_refcounted_ref(upcastfunc(v), owner); \
+ } \
+ UPB_INLINE void type ## _unref(const type *v, const void *owner) { \
+ upb_refcounted_unref(upcastfunc(v), owner); \
+ } \
+ UPB_INLINE void type ## _donateref(const type *v, const void *from, const void *to) { \
+ upb_refcounted_donateref(upcastfunc(v), from, to); \
+ } \
+ UPB_INLINE void type ## _checkref(const type *v, const void *owner) { \
+ upb_refcounted_checkref(upcastfunc(v), owner); \
+ }
-// Internal-to-upb Interface ///////////////////////////////////////////////////
+#define UPB_REFCOUNTED_CPPMETHODS \
+ bool IsFrozen() const { \
+ return upb::upcast_to<const upb::RefCounted>(this)->IsFrozen(); \
+ } \
+ void Ref(const void *owner) const { \
+ return upb::upcast_to<const upb::RefCounted>(this)->Ref(owner); \
+ } \
+ void Unref(const void *owner) const { \
+ return upb::upcast_to<const upb::RefCounted>(this)->Unref(owner); \
+ } \
+ void DonateRef(const void *from, const void *to) const { \
+ return upb::upcast_to<const upb::RefCounted>(this)->DonateRef(from, to); \
+ } \
+ void CheckRef(const void *owner) const { \
+ return upb::upcast_to<const upb::RefCounted>(this)->CheckRef(owner); \
+ }
+
+/* Internal-to-upb Interface **************************************************/
typedef void upb_refcounted_visit(const upb_refcounted *r,
const upb_refcounted *subobj,
void *closure);
struct upb_refcounted_vtbl {
- // Must visit all subobjects that are currently ref'd via upb_refcounted_ref2.
- // Must be longjmp()-safe.
+ /* Must visit all subobjects that are currently ref'd via upb_refcounted_ref2.
+ * Must be longjmp()-safe. */
void (*visit)(const upb_refcounted *r, upb_refcounted_visit *visit, void *c);
- // Must free the object and release all references to other objects.
+ /* Must free the object and release all references to other objects. */
void (*free)(upb_refcounted *r);
};
-// Initializes the refcounted with a single ref for the given owner. Returns
-// false if memory could not be allocated.
+/* Initializes the refcounted with a single ref for the given owner. Returns
+ * false if memory could not be allocated. */
bool upb_refcounted_init(upb_refcounted *r,
const struct upb_refcounted_vtbl *vtbl,
const void *owner);
-// Adds a ref from one refcounted object to another ("from" must not already
-// own a ref). These refs may be circular; cycles will be collected correctly
-// (if conservatively). These refs do not need to be freed in from's free()
-// function.
+/* Adds a ref from one refcounted object to another ("from" must not already
+ * own a ref). These refs may be circular; cycles will be collected correctly
+ * (if conservatively). These refs do not need to be freed in from's free()
+ * function. */
void upb_refcounted_ref2(const upb_refcounted *r, upb_refcounted *from);
-// Removes a ref that was acquired from upb_refcounted_ref2(), and collects any
-// object it can. This is only necessary when "from" no longer points to "r",
-// and not from from's "free" function.
+/* Removes a ref that was acquired from upb_refcounted_ref2(), and collects any
+ * object it can. This is only necessary when "from" no longer points to "r",
+ * and not from from's "free" function. */
void upb_refcounted_unref2(const upb_refcounted *r, upb_refcounted *from);
#define upb_ref2(r, from) \
@@ -1079,37 +1220,30 @@ void upb_refcounted_unref2(const upb_refcounted *r, upb_refcounted *from);
#define upb_unref2(r, from) \
upb_refcounted_unref2((const upb_refcounted*)r, (upb_refcounted*)from)
-// Freezes all mutable object reachable by ref2() refs from the given roots.
-// This will split refcounting groups into precise SCC groups, so that
-// refcounting of frozen objects can be more aggressive. If memory allocation
-// fails, or if more than 2**31 mutable objects are reachable from "roots", or
-// if the maximum depth of the graph exceeds "maxdepth", false is returned and
-// the objects are unchanged.
-//
-// After this operation succeeds, the objects are frozen/const, and may not be
-// used through non-const pointers. In particular, they may not be passed as
-// the second parameter of upb_refcounted_{ref,unref}2(). On the upside, all
-// operations on frozen refcounteds are threadsafe, and objects will be freed
-// at the precise moment that they become unreachable.
-//
-// Caller must own refs on each object in the "roots" list.
+/* Freezes all mutable object reachable by ref2() refs from the given roots.
+ * This will split refcounting groups into precise SCC groups, so that
+ * refcounting of frozen objects can be more aggressive. If memory allocation
+ * fails, or if more than 2**31 mutable objects are reachable from "roots", or
+ * if the maximum depth of the graph exceeds "maxdepth", false is returned and
+ * the objects are unchanged.
+ *
+ * After this operation succeeds, the objects are frozen/const, and may not be
+ * used through non-const pointers. In particular, they may not be passed as
+ * the second parameter of upb_refcounted_{ref,unref}2(). On the upside, all
+ * operations on frozen refcounteds are threadsafe, and objects will be freed
+ * at the precise moment that they become unreachable.
+ *
+ * Caller must own refs on each object in the "roots" list. */
bool upb_refcounted_freeze(upb_refcounted *const*roots, int n, upb_status *s,
int maxdepth);
-// Shared by all compiled-in refcounted objects.
+/* Shared by all compiled-in refcounted objects. */
extern uint32_t static_refcount;
-UPB_END_EXTERN_C // }
-
-#ifdef UPB_DEBUG_REFS
-#define UPB_REFCOUNT_INIT(refs, ref2s) \
- {&static_refcount, NULL, NULL, 0, true, refs, ref2s}
-#else
-#define UPB_REFCOUNT_INIT(refs, ref2s) {&static_refcount, NULL, NULL, 0, true}
-#endif
+UPB_END_EXTERN_C
#ifdef __cplusplus
-// C++ Wrappers.
+/* C++ Wrappers. */
namespace upb {
inline bool RefCounted::IsFrozen() const {
return upb_refcounted_isfrozen(this);
@@ -1126,10 +1260,10 @@ inline void RefCounted::DonateRef(const void *from, const void *to) const {
inline void RefCounted::CheckRef(const void *owner) const {
upb_refcounted_checkref(this, owner);
}
-} // namespace upb
+} /* namespace upb */
#endif
-#endif // UPB_REFCOUNT_H_
+#endif /* UPB_REFCOUNT_H_ */
#ifdef __cplusplus
#include <cstring>
@@ -1145,114 +1279,90 @@ class OneofDef;
}
#endif
-UPB_DECLARE_TYPE(upb::Def, upb_def);
-UPB_DECLARE_TYPE(upb::EnumDef, upb_enumdef);
-UPB_DECLARE_TYPE(upb::FieldDef, upb_fielddef);
-UPB_DECLARE_TYPE(upb::MessageDef, upb_msgdef);
-UPB_DECLARE_TYPE(upb::OneofDef, upb_oneofdef);
-
-// Maximum field number allowed for FieldDefs. This is an inherent limit of the
-// protobuf wire format.
-#define UPB_MAX_FIELDNUMBER ((1 << 29) - 1)
+UPB_DECLARE_DERIVED_TYPE(upb::Def, upb::RefCounted, upb_def, upb_refcounted)
-// The maximum message depth that the type graph can have. This is a resource
-// limit for the C stack since we sometimes need to recursively traverse the
-// graph. Cycles are ok; the traversal will stop when it detects a cycle, but
-// we must hit the cycle before the maximum depth is reached.
-//
-// If having a single static limit is too inflexible, we can add another variant
-// of Def::Freeze that allows specifying this as a parameter.
+/* The maximum message depth that the type graph can have. This is a resource
+ * limit for the C stack since we sometimes need to recursively traverse the
+ * graph. Cycles are ok; the traversal will stop when it detects a cycle, but
+ * we must hit the cycle before the maximum depth is reached.
+ *
+ * If having a single static limit is too inflexible, we can add another variant
+ * of Def::Freeze that allows specifying this as a parameter. */
#define UPB_MAX_MESSAGE_DEPTH 64
/* upb::Def: base class for defs *********************************************/
-// All the different kind of defs we support. These correspond 1:1 with
-// declarations in a .proto file.
+/* All the different kind of defs we support. These correspond 1:1 with
+ * declarations in a .proto file. */
typedef enum {
UPB_DEF_MSG,
UPB_DEF_FIELD,
UPB_DEF_ENUM,
UPB_DEF_ONEOF,
- UPB_DEF_SERVICE, // Not yet implemented.
- UPB_DEF_ANY = -1, // Wildcard for upb_symtab_get*()
+ UPB_DEF_SERVICE, /* Not yet implemented. */
+ UPB_DEF_ANY = -1 /* Wildcard for upb_symtab_get*() */
} upb_deftype_t;
-// The base class of all defs. Its base is upb::RefCounted (use upb::upcast()
-// to convert).
-UPB_DEFINE_CLASS1(upb::Def, upb::RefCounted,
+#ifdef __cplusplus
+
+/* The base class of all defs. Its base is upb::RefCounted (use upb::upcast()
+ * to convert). */
+class upb::Def {
public:
typedef upb_deftype_t Type;
Def* Dup(const void *owner) const;
- // Functionality from upb::RefCounted.
- bool IsFrozen() const;
- void Ref(const void* owner) const;
- void Unref(const void* owner) const;
- void DonateRef(const void* from, const void* to) const;
- void CheckRef(const void* owner) const;
+ /* upb::RefCounted methods like Ref()/Unref(). */
+ UPB_REFCOUNTED_CPPMETHODS
Type def_type() const;
- // "fullname" is the def's fully-qualified name (eg. foo.bar.Message).
+ /* "fullname" is the def's fully-qualified name (eg. foo.bar.Message). */
const char *full_name() const;
- // The def must be mutable. Caller retains ownership of fullname. Defs are
- // not required to have a name; if a def has no name when it is frozen, it
- // will remain an anonymous def. On failure, returns false and details in "s"
- // if non-NULL.
+ /* The def must be mutable. Caller retains ownership of fullname. Defs are
+ * not required to have a name; if a def has no name when it is frozen, it
+ * will remain an anonymous def. On failure, returns false and details in "s"
+ * if non-NULL. */
bool set_full_name(const char* fullname, upb::Status* s);
bool set_full_name(const std::string &fullname, upb::Status* s);
- // Freezes the given defs; this validates all constraints and marks the defs
- // as frozen (read-only). "defs" may not contain any fielddefs, but fields
- // of any msgdefs will be frozen.
- //
- // Symbolic references to sub-types and enum defaults must have already been
- // resolved. Any mutable defs reachable from any of "defs" must also be in
- // the list; more formally, "defs" must be a transitive closure of mutable
- // defs.
- //
- // After this operation succeeds, the finalized defs must only be accessed
- // through a const pointer!
+ /* Freezes the given defs; this validates all constraints and marks the defs
+ * as frozen (read-only). "defs" may not contain any fielddefs, but fields
+ * of any msgdefs will be frozen.
+ *
+ * Symbolic references to sub-types and enum defaults must have already been
+ * resolved. Any mutable defs reachable from any of "defs" must also be in
+ * the list; more formally, "defs" must be a transitive closure of mutable
+ * defs.
+ *
+ * After this operation succeeds, the finalized defs must only be accessed
+ * through a const pointer! */
static bool Freeze(Def* const* defs, int n, Status* status);
static bool Freeze(const std::vector<Def*>& defs, Status* status);
private:
- UPB_DISALLOW_POD_OPS(Def, upb::Def);
-,
-UPB_DEFINE_STRUCT(upb_def, upb_refcounted,
- const char *fullname;
- upb_deftype_t type : 8;
- // Used as a flag during the def's mutable stage. Must be false unless
- // it is currently being used by a function on the stack. This allows
- // us to easily determine which defs were passed into the function's
- // current invocation.
- bool came_from_user;
-));
+ UPB_DISALLOW_POD_OPS(Def, upb::Def)
+};
-#define UPB_DEF_INIT(name, type, refs, ref2s) \
- { UPB_REFCOUNT_INIT(refs, ref2s), name, type, false }
+#endif /* __cplusplus */
-UPB_BEGIN_EXTERN_C // {
+UPB_BEGIN_EXTERN_C
-// Native C API.
+/* Native C API. */
upb_def *upb_def_dup(const upb_def *def, const void *owner);
-// From upb_refcounted.
-bool upb_def_isfrozen(const upb_def *def);
-void upb_def_ref(const upb_def *def, const void *owner);
-void upb_def_unref(const upb_def *def, const void *owner);
-void upb_def_donateref(const upb_def *def, const void *from, const void *to);
-void upb_def_checkref(const upb_def *def, const void *owner);
+/* Include upb_refcounted methods like upb_def_ref()/upb_def_unref(). */
+UPB_REFCOUNTED_CMETHODS(upb_def, upb_def_upcast)
upb_deftype_t upb_def_type(const upb_def *d);
const char *upb_def_fullname(const upb_def *d);
bool upb_def_setfullname(upb_def *def, const char *fullname, upb_status *s);
bool upb_def_freeze(upb_def *const *defs, int n, upb_status *s);
-UPB_END_EXTERN_C // }
+UPB_END_EXTERN_C
/* upb::Def casts *************************************************************/
@@ -1285,14 +1395,14 @@ UPB_END_EXTERN_C // }
inline const cpptype *dyn_cast<const cpptype *, Def>(Def * def) { \
return upb_dyncast_##cname(def); \
} \
- } // namespace upb
+ } /* namespace upb */
#else
#define UPB_CPP_CASTS(cname, cpptype)
-#endif
+#endif /* __cplusplus */
-// Dynamic casts, for determining if a def is of a particular type at runtime.
-// Downcasts, for when some wants to assert that a def is of a particular type.
-// These are only checked if we are building debug.
+/* Dynamic casts, for determining if a def is of a particular type at runtime.
+ * Downcasts, for when some wants to assert that a def is of a particular type.
+ * These are only checked if we are building debug. */
#define UPB_DEF_CASTS(lower, upper, cpptype) \
UPB_INLINE const upb_##lower *upb_dyncast_##lower(const upb_def *def) { \
if (upb_def_type(def) != UPB_DEF_##upper) return NULL; \
@@ -1311,16 +1421,30 @@ UPB_END_EXTERN_C // }
UPB_CPP_CASTS(lower, cpptype)
#define UPB_DEFINE_DEF(cppname, lower, upper, cppmethods, members) \
- UPB_DEFINE_CLASS2(cppname, upb::Def, upb::RefCounted, UPB_QUOTE(cppmethods), \
+ UPB_DEFINE_CLASS2(cppname, upb::Def, upb::RefCounted, cppmethods, \
members) \
UPB_DEF_CASTS(lower, upper, cppname)
+#define UPB_DECLARE_DEF_TYPE(cppname, lower, upper) \
+ UPB_DECLARE_DERIVED_TYPE2(cppname, upb::Def, upb::RefCounted, \
+ upb_ ## lower, upb_def, upb_refcounted) \
+ UPB_DEF_CASTS(lower, upper, cppname)
+
+UPB_DECLARE_DEF_TYPE(upb::FieldDef, fielddef, FIELD)
+UPB_DECLARE_DEF_TYPE(upb::MessageDef, msgdef, MSG)
+UPB_DECLARE_DEF_TYPE(upb::EnumDef, enumdef, ENUM)
+UPB_DECLARE_DEF_TYPE(upb::OneofDef, oneofdef, ONEOF)
+
+#undef UPB_DECLARE_DEF_TYPE
+#undef UPB_DEF_CASTS
+#undef UPB_CPP_CASTS
+
/* upb::FieldDef **************************************************************/
-// The types a field can have. Note that this list is not identical to the
-// types defined in descriptor.proto, which gives INT32 and SINT32 separate
-// types (we distinguish the two with the "integer encoding" enum below).
+/* The types a field can have. Note that this list is not identical to the
+ * types defined in descriptor.proto, which gives INT32 and SINT32 separate
+ * types (we distinguish the two with the "integer encoding" enum below). */
typedef enum {
UPB_TYPE_FLOAT = 1,
UPB_TYPE_DOUBLE = 2,
@@ -1328,29 +1452,29 @@ typedef enum {
UPB_TYPE_STRING = 4,
UPB_TYPE_BYTES = 5,
UPB_TYPE_MESSAGE = 6,
- UPB_TYPE_ENUM = 7, // Enum values are int32.
+ UPB_TYPE_ENUM = 7, /* Enum values are int32. */
UPB_TYPE_INT32 = 8,
UPB_TYPE_UINT32 = 9,
UPB_TYPE_INT64 = 10,
- UPB_TYPE_UINT64 = 11,
+ UPB_TYPE_UINT64 = 11
} upb_fieldtype_t;
-// The repeated-ness of each field; this matches descriptor.proto.
+/* The repeated-ness of each field; this matches descriptor.proto. */
typedef enum {
UPB_LABEL_OPTIONAL = 1,
UPB_LABEL_REQUIRED = 2,
- UPB_LABEL_REPEATED = 3,
+ UPB_LABEL_REPEATED = 3
} upb_label_t;
-// How integers should be encoded in serializations that offer multiple
-// integer encoding methods.
+/* How integers should be encoded in serializations that offer multiple
+ * integer encoding methods. */
typedef enum {
UPB_INTFMT_VARIABLE = 1,
UPB_INTFMT_FIXED = 2,
- UPB_INTFMT_ZIGZAG = 3, // Only for signed types (INT32/INT64).
+ UPB_INTFMT_ZIGZAG = 3 /* Only for signed types (INT32/INT64). */
} upb_intfmt_t;
-// Descriptor types, as defined in descriptor.proto.
+/* Descriptor types, as defined in descriptor.proto. */
typedef enum {
UPB_DESCRIPTOR_TYPE_DOUBLE = 1,
UPB_DESCRIPTOR_TYPE_FLOAT = 2,
@@ -1369,128 +1493,129 @@ typedef enum {
UPB_DESCRIPTOR_TYPE_SFIXED32 = 15,
UPB_DESCRIPTOR_TYPE_SFIXED64 = 16,
UPB_DESCRIPTOR_TYPE_SINT32 = 17,
- UPB_DESCRIPTOR_TYPE_SINT64 = 18,
+ UPB_DESCRIPTOR_TYPE_SINT64 = 18
} upb_descriptortype_t;
+/* Maximum field number allowed for FieldDefs. This is an inherent limit of the
+ * protobuf wire format. */
+#define UPB_MAX_FIELDNUMBER ((1 << 29) - 1)
+
+#ifdef __cplusplus
-// A upb_fielddef describes a single field in a message. It is most often
-// found as a part of a upb_msgdef, but can also stand alone to represent
-// an extension.
-//
-// Its base class is upb::Def (use upb::upcast() to convert).
-UPB_DEFINE_DEF(upb::FieldDef, fielddef, FIELD,
+/* A upb_fielddef describes a single field in a message. It is most often
+ * found as a part of a upb_msgdef, but can also stand alone to represent
+ * an extension.
+ *
+ * Its base class is upb::Def (use upb::upcast() to convert). */
+class upb::FieldDef {
public:
typedef upb_fieldtype_t Type;
typedef upb_label_t Label;
typedef upb_intfmt_t IntegerFormat;
typedef upb_descriptortype_t DescriptorType;
- // These return true if the given value is a valid member of the enumeration.
+ /* These return true if the given value is a valid member of the enumeration. */
static bool CheckType(int32_t val);
static bool CheckLabel(int32_t val);
static bool CheckDescriptorType(int32_t val);
static bool CheckIntegerFormat(int32_t val);
- // These convert to the given enumeration; they require that the value is
- // valid.
+ /* These convert to the given enumeration; they require that the value is
+ * valid. */
static Type ConvertType(int32_t val);
static Label ConvertLabel(int32_t val);
static DescriptorType ConvertDescriptorType(int32_t val);
static IntegerFormat ConvertIntegerFormat(int32_t val);
- // Returns NULL if memory allocation failed.
+ /* Returns NULL if memory allocation failed. */
static reffed_ptr<FieldDef> New();
- // Duplicates the given field, returning NULL if memory allocation failed.
- // When a fielddef is duplicated, the subdef (if any) is made symbolic if it
- // wasn't already. If the subdef is set but has no name (which is possible
- // since msgdefs are not required to have a name) the new fielddef's subdef
- // will be unset.
+ /* Duplicates the given field, returning NULL if memory allocation failed.
+ * When a fielddef is duplicated, the subdef (if any) is made symbolic if it
+ * wasn't already. If the subdef is set but has no name (which is possible
+ * since msgdefs are not required to have a name) the new fielddef's subdef
+ * will be unset. */
FieldDef* Dup(const void* owner) const;
- // Functionality from upb::RefCounted.
- bool IsFrozen() const;
- void Ref(const void* owner) const;
- void Unref(const void* owner) const;
- void DonateRef(const void* from, const void* to) const;
- void CheckRef(const void* owner) const;
+ /* upb::RefCounted methods like Ref()/Unref(). */
+ UPB_REFCOUNTED_CPPMETHODS
- // Functionality from upb::Def.
+ /* Functionality from upb::Def. */
const char* full_name() const;
- bool type_is_set() const; // Whether set_[descriptor_]type() has been called.
- Type type() const; // Requires that type_is_set() == true.
- Label label() const; // Defaults to UPB_LABEL_OPTIONAL.
- const char* name() const; // NULL if uninitialized.
- uint32_t number() const; // Returns 0 if uninitialized.
+ bool type_is_set() const; /* set_[descriptor_]type() has been called? */
+ Type type() const; /* Requires that type_is_set() == true. */
+ Label label() const; /* Defaults to UPB_LABEL_OPTIONAL. */
+ const char* name() const; /* NULL if uninitialized. */
+ uint32_t number() const; /* Returns 0 if uninitialized. */
bool is_extension() const;
- // For UPB_TYPE_MESSAGE fields only where is_tag_delimited() == false,
- // indicates whether this field should have lazy parsing handlers that yield
- // the unparsed string for the submessage.
- //
- // TODO(haberman): I think we want to move this into a FieldOptions container
- // when we add support for custom options (the FieldOptions struct will
- // contain both regular FieldOptions like "lazy" *and* custom options).
+ /* For UPB_TYPE_MESSAGE fields only where is_tag_delimited() == false,
+ * indicates whether this field should have lazy parsing handlers that yield
+ * the unparsed string for the submessage.
+ *
+ * TODO(haberman): I think we want to move this into a FieldOptions container
+ * when we add support for custom options (the FieldOptions struct will
+ * contain both regular FieldOptions like "lazy" *and* custom options). */
bool lazy() const;
- // For non-string, non-submessage fields, this indicates whether binary
- // protobufs are encoded in packed or non-packed format.
- //
- // TODO(haberman): see note above about putting options like this into a
- // FieldOptions container.
+ /* For non-string, non-submessage fields, this indicates whether binary
+ * protobufs are encoded in packed or non-packed format.
+ *
+ * TODO(haberman): see note above about putting options like this into a
+ * FieldOptions container. */
bool packed() const;
- // An integer that can be used as an index into an array of fields for
- // whatever message this field belongs to. Guaranteed to be less than
- // f->containing_type()->field_count(). May only be accessed once the def has
- // been finalized.
+ /* An integer that can be used as an index into an array of fields for
+ * whatever message this field belongs to. Guaranteed to be less than
+ * f->containing_type()->field_count(). May only be accessed once the def has
+ * been finalized. */
int index() const;
- // The MessageDef to which this field belongs.
- //
- // If this field has been added to a MessageDef, that message can be retrieved
- // directly (this is always the case for frozen FieldDefs).
- //
- // If the field has not yet been added to a MessageDef, you can set the name
- // of the containing type symbolically instead. This is mostly useful for
- // extensions, where the extension is declared separately from the message.
+ /* The MessageDef to which this field belongs.
+ *
+ * If this field has been added to a MessageDef, that message can be retrieved
+ * directly (this is always the case for frozen FieldDefs).
+ *
+ * If the field has not yet been added to a MessageDef, you can set the name
+ * of the containing type symbolically instead. This is mostly useful for
+ * extensions, where the extension is declared separately from the message. */
const MessageDef* containing_type() const;
const char* containing_type_name();
- // The OneofDef to which this field belongs, or NULL if this field is not part
- // of a oneof.
+ /* The OneofDef to which this field belongs, or NULL if this field is not part
+ * of a oneof. */
const OneofDef* containing_oneof() const;
- // The field's type according to the enum in descriptor.proto. This is not
- // the same as UPB_TYPE_*, because it distinguishes between (for example)
- // INT32 and SINT32, whereas our "type" enum does not. This return of
- // descriptor_type() is a function of type(), integer_format(), and
- // is_tag_delimited(). Likewise set_descriptor_type() sets all three
- // appropriately.
+ /* The field's type according to the enum in descriptor.proto. This is not
+ * the same as UPB_TYPE_*, because it distinguishes between (for example)
+ * INT32 and SINT32, whereas our "type" enum does not. This return of
+ * descriptor_type() is a function of type(), integer_format(), and
+ * is_tag_delimited(). Likewise set_descriptor_type() sets all three
+ * appropriately. */
DescriptorType descriptor_type() const;
- // Convenient field type tests.
+ /* Convenient field type tests. */
bool IsSubMessage() const;
bool IsString() const;
bool IsSequence() const;
bool IsPrimitive() const;
bool IsMap() const;
- // How integers are encoded. Only meaningful for integer types.
- // Defaults to UPB_INTFMT_VARIABLE, and is reset when "type" changes.
+ /* How integers are encoded. Only meaningful for integer types.
+ * Defaults to UPB_INTFMT_VARIABLE, and is reset when "type" changes. */
IntegerFormat integer_format() const;
- // Whether a submessage field is tag-delimited or not (if false, then
- // length-delimited). May only be set when type() == UPB_TYPE_MESSAGE.
+ /* Whether a submessage field is tag-delimited or not (if false, then
+ * length-delimited). May only be set when type() == UPB_TYPE_MESSAGE. */
bool is_tag_delimited() const;
- // Returns the non-string default value for this fielddef, which may either
- // be something the client set explicitly or the "default default" (0 for
- // numbers, empty for strings). The field's type indicates the type of the
- // returned value, except for enum fields that are still mutable.
- //
- // Requires that the given function matches the field's current type.
+ /* Returns the non-string default value for this fielddef, which may either
+ * be something the client set explicitly or the "default default" (0 for
+ * numbers, empty for strings). The field's type indicates the type of the
+ * returned value, except for enum fields that are still mutable.
+ *
+ * Requires that the given function matches the field's current type. */
int64_t default_int64() const;
int32_t default_int32() const;
uint64_t default_uint64() const;
@@ -1499,83 +1624,81 @@ UPB_DEFINE_DEF(upb::FieldDef, fielddef, FIELD,
float default_float() const;
double default_double() const;
- // The resulting string is always NULL-terminated. If non-NULL, the length
- // will be stored in *len.
+ /* The resulting string is always NULL-terminated. If non-NULL, the length
+ * will be stored in *len. */
const char *default_string(size_t* len) const;
- // For frozen UPB_TYPE_ENUM fields, enum defaults can always be read as either
- // string or int32, and both of these methods will always return true.
- //
- // For mutable UPB_TYPE_ENUM fields, the story is a bit more complicated.
- // Enum defaults are unusual. They can be specified either as string or int32,
- // but to be valid the enum must have that value as a member. And if no
- // default is specified, the "default default" comes from the EnumDef.
- //
- // We allow reading the default as either an int32 or a string, but only if
- // we have a meaningful value to report. We have a meaningful value if it was
- // set explicitly, or if we could get the "default default" from the EnumDef.
- // Also if you explicitly set the name and we find the number in the EnumDef
+ /* For frozen UPB_TYPE_ENUM fields, enum defaults can always be read as either
+ * string or int32, and both of these methods will always return true.
+ *
+ * For mutable UPB_TYPE_ENUM fields, the story is a bit more complicated.
+ * Enum defaults are unusual. They can be specified either as string or int32,
+ * but to be valid the enum must have that value as a member. And if no
+ * default is specified, the "default default" comes from the EnumDef.
+ *
+ * We allow reading the default as either an int32 or a string, but only if
+ * we have a meaningful value to report. We have a meaningful value if it was
+ * set explicitly, or if we could get the "default default" from the EnumDef.
+ * Also if you explicitly set the name and we find the number in the EnumDef */
bool EnumHasStringDefault() const;
bool EnumHasInt32Default() const;
- // Submessage and enum fields must reference a "subdef", which is the
- // upb::MessageDef or upb::EnumDef that defines their type. Note that when
- // the FieldDef is mutable it may not have a subdef *yet*, but this function
- // still returns true to indicate that the field's type requires a subdef.
+ /* Submessage and enum fields must reference a "subdef", which is the
+ * upb::MessageDef or upb::EnumDef that defines their type. Note that when
+ * the FieldDef is mutable it may not have a subdef *yet*, but this function
+ * still returns true to indicate that the field's type requires a subdef. */
bool HasSubDef() const;
- // Returns the enum or submessage def for this field, if any. The field's
- // type must match (ie. you may only call enum_subdef() for fields where
- // type() == UPB_TYPE_ENUM). Returns NULL if the subdef has not been set or
- // is currently set symbolically.
+ /* Returns the enum or submessage def for this field, if any. The field's
+ * type must match (ie. you may only call enum_subdef() for fields where
+ * type() == UPB_TYPE_ENUM). Returns NULL if the subdef has not been set or
+ * is currently set symbolically. */
const EnumDef* enum_subdef() const;
const MessageDef* message_subdef() const;
- // Returns the generic subdef for this field. Requires that HasSubDef() (ie.
- // only works for UPB_TYPE_ENUM and UPB_TYPE_MESSAGE fields).
+ /* Returns the generic subdef for this field. Requires that HasSubDef() (ie.
+ * only works for UPB_TYPE_ENUM and UPB_TYPE_MESSAGE fields). */
const Def* subdef() const;
- // Returns the symbolic name of the subdef. If the subdef is currently set
- // unresolved (ie. set symbolically) returns the symbolic name. If it has
- // been resolved to a specific subdef, returns the name from that subdef.
+ /* Returns the symbolic name of the subdef. If the subdef is currently set
+ * unresolved (ie. set symbolically) returns the symbolic name. If it has
+ * been resolved to a specific subdef, returns the name from that subdef. */
const char* subdef_name() const;
- //////////////////////////////////////////////////////////////////////////////
- // Setters (non-const methods), only valid for mutable FieldDefs!
- //////////////////////////////////////////////////////////////////////////////
+ /* Setters (non-const methods), only valid for mutable FieldDefs! ***********/
bool set_full_name(const char* fullname, upb::Status* s);
bool set_full_name(const std::string& fullname, upb::Status* s);
- // This may only be called if containing_type() == NULL (ie. the field has not
- // been added to a message yet).
+ /* This may only be called if containing_type() == NULL (ie. the field has not
+ * been added to a message yet). */
bool set_containing_type_name(const char *name, Status* status);
bool set_containing_type_name(const std::string& name, Status* status);
- // Defaults to false. When we freeze, we ensure that this can only be true
- // for length-delimited message fields. Prior to freezing this can be true or
- // false with no restrictions.
+ /* Defaults to false. When we freeze, we ensure that this can only be true
+ * for length-delimited message fields. Prior to freezing this can be true or
+ * false with no restrictions. */
void set_lazy(bool lazy);
- // Defaults to true. Sets whether this field is encoded in packed format.
+ /* Defaults to true. Sets whether this field is encoded in packed format. */
void set_packed(bool packed);
- // "type" or "descriptor_type" MUST be set explicitly before the fielddef is
- // finalized. These setters require that the enum value is valid; if the
- // value did not come directly from an enum constant, the caller should
- // validate it first with the functions above (CheckFieldType(), etc).
+ /* "type" or "descriptor_type" MUST be set explicitly before the fielddef is
+ * finalized. These setters require that the enum value is valid; if the
+ * value did not come directly from an enum constant, the caller should
+ * validate it first with the functions above (CheckFieldType(), etc). */
void set_type(Type type);
void set_label(Label label);
void set_descriptor_type(DescriptorType type);
void set_is_extension(bool is_extension);
- // "number" and "name" must be set before the FieldDef is added to a
- // MessageDef, and may not be set after that.
- //
- // "name" is the same as full_name()/set_full_name(), but since fielddefs
- // most often use simple, non-qualified names, we provide this accessor
- // also. Generally only extensions will want to think of this name as
- // fully-qualified.
+ /* "number" and "name" must be set before the FieldDef is added to a
+ * MessageDef, and may not be set after that.
+ *
+ * "name" is the same as full_name()/set_full_name(), but since fielddefs
+ * most often use simple, non-qualified names, we provide this accessor
+ * also. Generally only extensions will want to think of this name as
+ * fully-qualified. */
bool set_number(uint32_t number, upb::Status* s);
bool set_name(const char* name, upb::Status* s);
bool set_name(const std::string& name, upb::Status* s);
@@ -1583,12 +1706,12 @@ UPB_DEFINE_DEF(upb::FieldDef, fielddef, FIELD,
void set_integer_format(IntegerFormat format);
bool set_tag_delimited(bool tag_delimited, upb::Status* s);
- // Sets default value for the field. The call must exactly match the type
- // of the field. Enum fields may use either setint32 or setstring to set
- // the default numerically or symbolically, respectively, but symbolic
- // defaults must be resolved before finalizing (see ResolveEnumDefault()).
- //
- // Changing the type of a field will reset its default.
+ /* Sets default value for the field. The call must exactly match the type
+ * of the field. Enum fields may use either setint32 or setstring to set
+ * the default numerically or symbolically, respectively, but symbolic
+ * defaults must be resolved before finalizing (see ResolveEnumDefault()).
+ *
+ * Changing the type of a field will reset its default. */
void set_default_int64(int64_t val);
void set_default_int32(int32_t val);
void set_default_uint64(uint64_t val);
@@ -1600,15 +1723,15 @@ UPB_DEFINE_DEF(upb::FieldDef, fielddef, FIELD,
bool set_default_string(const std::string &str, Status *s);
void set_default_cstr(const char *str, Status *s);
- // Before a fielddef is frozen, its subdef may be set either directly (with a
- // upb::Def*) or symbolically. Symbolic refs must be resolved before the
- // containing msgdef can be frozen (see upb_resolve() above). upb always
- // guarantees that any def reachable from a live def will also be kept alive.
- //
- // Both methods require that upb_hassubdef(f) (so the type must be set prior
- // to calling these methods). Returns false if this is not the case, or if
- // the given subdef is not of the correct type. The subdef is reset if the
- // field's type is changed. The subdef can be set to NULL to clear it.
+ /* Before a fielddef is frozen, its subdef may be set either directly (with a
+ * upb::Def*) or symbolically. Symbolic refs must be resolved before the
+ * containing msgdef can be frozen (see upb_resolve() above). upb always
+ * guarantees that any def reachable from a live def will also be kept alive.
+ *
+ * Both methods require that upb_hassubdef(f) (so the type must be set prior
+ * to calling these methods). Returns false if this is not the case, or if
+ * the given subdef is not of the correct type. The subdef is reset if the
+ * field's type is changed. The subdef can be set to NULL to clear it. */
bool set_subdef(const Def* subdef, Status* s);
bool set_enum_subdef(const EnumDef* subdef, Status* s);
bool set_message_subdef(const MessageDef* subdef, Status* s);
@@ -1616,66 +1739,21 @@ UPB_DEFINE_DEF(upb::FieldDef, fielddef, FIELD,
bool set_subdef_name(const std::string &name, Status* s);
private:
- UPB_DISALLOW_POD_OPS(FieldDef, upb::FieldDef);
-,
-UPB_DEFINE_STRUCT(upb_fielddef, upb_def,
- union {
- int64_t sint;
- uint64_t uint;
- double dbl;
- float flt;
- void *bytes;
- } defaultval;
- union {
- const upb_msgdef *def; // If !msg_is_symbolic.
- char *name; // If msg_is_symbolic.
- } msg;
- union {
- const upb_def *def; // If !subdef_is_symbolic.
- char *name; // If subdef_is_symbolic.
- } sub; // The msgdef or enumdef for this field, if upb_hassubdef(f).
- bool subdef_is_symbolic;
- bool msg_is_symbolic;
- const upb_oneofdef *oneof;
- bool default_is_string;
- bool type_is_set_; // False until type is explicitly set.
- bool is_extension_;
- bool lazy_;
- bool packed_;
- upb_intfmt_t intfmt;
- bool tagdelim;
- upb_fieldtype_t type_;
- upb_label_t label_;
- uint32_t number_;
- uint32_t selector_base; // Used to index into a upb::Handlers table.
- uint32_t index_;
-));
+ UPB_DISALLOW_POD_OPS(FieldDef, upb::FieldDef)
+};
-#define UPB_FIELDDEF_INIT(label, type, intfmt, tagdelim, is_extension, lazy, \
- packed, name, num, msgdef, subdef, selector_base, \
- index, defaultval, refs, ref2s) \
- { \
- UPB_DEF_INIT(name, UPB_DEF_FIELD, refs, ref2s), defaultval, {msgdef}, \
- {subdef}, NULL, false, false, \
- type == UPB_TYPE_STRING || type == UPB_TYPE_BYTES, true, is_extension, \
- lazy, packed, intfmt, tagdelim, type, label, num, selector_base, index \
- }
+# endif /* defined(__cplusplus) */
-UPB_BEGIN_EXTERN_C // {
+UPB_BEGIN_EXTERN_C
-// Native C API.
+/* Native C API. */
upb_fielddef *upb_fielddef_new(const void *owner);
upb_fielddef *upb_fielddef_dup(const upb_fielddef *f, const void *owner);
-// From upb_refcounted.
-bool upb_fielddef_isfrozen(const upb_fielddef *f);
-void upb_fielddef_ref(const upb_fielddef *f, const void *owner);
-void upb_fielddef_unref(const upb_fielddef *f, const void *owner);
-void upb_fielddef_donateref(const upb_fielddef *f, const void *from,
- const void *to);
-void upb_fielddef_checkref(const upb_fielddef *f, const void *owner);
+/* Include upb_refcounted methods like upb_fielddef_ref(). */
+UPB_REFCOUNTED_CMETHODS(upb_fielddef, upb_fielddef_upcast2)
-// From upb_def.
+/* Methods from upb_def. */
const char *upb_fielddef_fullname(const upb_fielddef *f);
bool upb_fielddef_setfullname(upb_fielddef *f, const char *fullname,
upb_status *s);
@@ -1754,7 +1832,7 @@ bool upb_fielddef_checktype(int32_t type);
bool upb_fielddef_checkdescriptortype(int32_t type);
bool upb_fielddef_checkintfmt(int32_t fmt);
-UPB_END_EXTERN_C // }
+UPB_END_EXTERN_C
/* upb::MessageDef ************************************************************/
@@ -1762,66 +1840,64 @@ UPB_END_EXTERN_C // }
typedef upb_inttable_iter upb_msg_field_iter;
typedef upb_strtable_iter upb_msg_oneof_iter;
-// Structure that describes a single .proto message type.
-//
-// Its base class is upb::Def (use upb::upcast() to convert).
-UPB_DEFINE_DEF(upb::MessageDef, msgdef, MSG, UPB_QUOTE(
+#ifdef __cplusplus
+
+/* Structure that describes a single .proto message type.
+ *
+ * Its base class is upb::Def (use upb::upcast() to convert). */
+class upb::MessageDef {
public:
- // Returns NULL if memory allocation failed.
+ /* Returns NULL if memory allocation failed. */
static reffed_ptr<MessageDef> New();
- // Functionality from upb::RefCounted.
- bool IsFrozen() const;
- void Ref(const void* owner) const;
- void Unref(const void* owner) const;
- void DonateRef(const void* from, const void* to) const;
- void CheckRef(const void* owner) const;
+ /* upb::RefCounted methods like Ref()/Unref(). */
+ UPB_REFCOUNTED_CPPMETHODS
- // Functionality from upb::Def.
+ /* Functionality from upb::Def. */
const char* full_name() const;
bool set_full_name(const char* fullname, Status* s);
bool set_full_name(const std::string& fullname, Status* s);
- // Call to freeze this MessageDef.
- // WARNING: this will fail if this message has any unfrozen submessages!
- // Messages with cycles must be frozen as a batch using upb::Def::Freeze().
+ /* Call to freeze this MessageDef.
+ * WARNING: this will fail if this message has any unfrozen submessages!
+ * Messages with cycles must be frozen as a batch using upb::Def::Freeze(). */
bool Freeze(Status* s);
- // The number of fields that belong to the MessageDef.
+ /* The number of fields that belong to the MessageDef. */
int field_count() const;
- // The number of oneofs that belong to the MessageDef.
+ /* The number of oneofs that belong to the MessageDef. */
int oneof_count() const;
- // Adds a field (upb_fielddef object) to a msgdef. Requires that the msgdef
- // and the fielddefs are mutable. The fielddef's name and number must be
- // set, and the message may not already contain any field with this name or
- // number, and this fielddef may not be part of another message. In error
- // cases false is returned and the msgdef is unchanged.
- //
- // If the given field is part of a oneof, this call succeeds if and only if
- // that oneof is already part of this msgdef. (Note that adding a oneof to a
- // msgdef automatically adds all of its fields to the msgdef at the time that
- // the oneof is added, so it is usually more idiomatic to add the oneof's
- // fields first then add the oneof to the msgdef. This case is supported for
- // convenience.)
- //
- // If |f| is already part of this MessageDef, this method performs no action
- // and returns true (success). Thus, this method is idempotent.
+ /* Adds a field (upb_fielddef object) to a msgdef. Requires that the msgdef
+ * and the fielddefs are mutable. The fielddef's name and number must be
+ * set, and the message may not already contain any field with this name or
+ * number, and this fielddef may not be part of another message. In error
+ * cases false is returned and the msgdef is unchanged.
+ *
+ * If the given field is part of a oneof, this call succeeds if and only if
+ * that oneof is already part of this msgdef. (Note that adding a oneof to a
+ * msgdef automatically adds all of its fields to the msgdef at the time that
+ * the oneof is added, so it is usually more idiomatic to add the oneof's
+ * fields first then add the oneof to the msgdef. This case is supported for
+ * convenience.)
+ *
+ * If |f| is already part of this MessageDef, this method performs no action
+ * and returns true (success). Thus, this method is idempotent. */
bool AddField(FieldDef* f, Status* s);
bool AddField(const reffed_ptr<FieldDef>& f, Status* s);
- // Adds a oneof (upb_oneofdef object) to a msgdef. Requires that the msgdef,
- // oneof, and any fielddefs are mutable, that the fielddefs contained in the
- // oneof do not have any name or number conflicts with existing fields in the
- // msgdef, and that the oneof's name is unique among all oneofs in the msgdef.
- // If the oneof is added successfully, all of its fields will be added
- // directly to the msgdef as well. In error cases, false is returned and the
- // msgdef is unchanged.
+ /* Adds a oneof (upb_oneofdef object) to a msgdef. Requires that the msgdef,
+ * oneof, and any fielddefs are mutable, that the fielddefs contained in the
+ * oneof do not have any name or number conflicts with existing fields in the
+ * msgdef, and that the oneof's name is unique among all oneofs in the msgdef.
+ * If the oneof is added successfully, all of its fields will be added
+ * directly to the msgdef as well. In error cases, false is returned and the
+ * msgdef is unchanged. */
bool AddOneof(OneofDef* o, Status* s);
bool AddOneof(const reffed_ptr<OneofDef>& o, Status* s);
- // These return NULL if the field is not found.
+ /* These return NULL if the field is not found. */
FieldDef* FindFieldByNumber(uint32_t number);
FieldDef* FindFieldByName(const char *name, size_t len);
const FieldDef* FindFieldByNumber(uint32_t number) const;
@@ -1863,21 +1939,21 @@ UPB_DEFINE_DEF(upb::MessageDef, msgdef, MSG, UPB_QUOTE(
return FindOneofByName(str.c_str(), str.size());
}
- // Returns a new msgdef that is a copy of the given msgdef (and a copy of all
- // the fields) but with any references to submessages broken and replaced
- // with just the name of the submessage. Returns NULL if memory allocation
- // failed.
- //
- // TODO(haberman): which is more useful, keeping fields resolved or
- // unresolving them? If there's no obvious answer, Should this functionality
- // just be moved into symtab.c?
+ /* Returns a new msgdef that is a copy of the given msgdef (and a copy of all
+ * the fields) but with any references to submessages broken and replaced
+ * with just the name of the submessage. Returns NULL if memory allocation
+ * failed.
+ *
+ * TODO(haberman): which is more useful, keeping fields resolved or
+ * unresolving them? If there's no obvious answer, Should this functionality
+ * just be moved into symtab.c? */
MessageDef* Dup(const void* owner) const;
- // Is this message a map entry?
+ /* Is this message a map entry? */
void setmapentry(bool map_entry);
bool mapentry() const;
- // Iteration over fields. The order is undefined.
+ /* Iteration over fields. The order is undefined. */
class field_iterator
: public std::iterator<std::forward_iterator_tag, FieldDef*> {
public:
@@ -1908,7 +1984,7 @@ UPB_DEFINE_DEF(upb::MessageDef, msgdef, MSG, UPB_QUOTE(
upb_msg_field_iter iter_;
};
- // Iteration over oneofs. The order is undefined.
+ /* Iteration over oneofs. The order is undefined. */
class oneof_iterator
: public std::iterator<std::forward_iterator_tag, FieldDef*> {
public:
@@ -1991,52 +2067,21 @@ UPB_DEFINE_DEF(upb::MessageDef, msgdef, MSG, UPB_QUOTE(
ConstOneofAccessor oneofs() const { return ConstOneofAccessor(this); }
private:
- UPB_DISALLOW_POD_OPS(MessageDef, upb::MessageDef);
-),
-UPB_DEFINE_STRUCT(upb_msgdef, upb_def,
- size_t selector_count;
- uint32_t submsg_field_count;
-
- // Tables for looking up fields by number and name.
- upb_inttable itof; // int to field
- upb_strtable ntof; // name to field
-
- // Tables for looking up oneofs by name.
- upb_strtable ntoo; // name to oneof
-
- // Is this a map-entry message?
- // TODO: set this flag properly for static descriptors; regenerate
- // descriptor.upb.c.
- bool map_entry;
-
- // TODO(haberman): proper extension ranges (there can be multiple).
-));
+ UPB_DISALLOW_POD_OPS(MessageDef, upb::MessageDef)
+};
-// TODO: also support static initialization of the oneofs table. This will be
-// needed if we compile in descriptors that contain oneofs.
-#define UPB_MSGDEF_INIT(name, selector_count, submsg_field_count, itof, ntof, \
- refs, ref2s) \
- { \
- UPB_DEF_INIT(name, UPB_DEF_MSG, refs, ref2s), selector_count, \
- submsg_field_count, itof, ntof, \
- UPB_EMPTY_STRTABLE_INIT(UPB_CTYPE_PTR), false \
- }
+#endif /* __cplusplus */
-UPB_BEGIN_EXTERN_C // {
+UPB_BEGIN_EXTERN_C
-// Returns NULL if memory allocation failed.
+/* Returns NULL if memory allocation failed. */
upb_msgdef *upb_msgdef_new(const void *owner);
-// From upb_refcounted.
-bool upb_msgdef_isfrozen(const upb_msgdef *m);
-void upb_msgdef_ref(const upb_msgdef *m, const void *owner);
-void upb_msgdef_unref(const upb_msgdef *m, const void *owner);
-void upb_msgdef_donateref(const upb_msgdef *m, const void *from,
- const void *to);
-void upb_msgdef_checkref(const upb_msgdef *m, const void *owner);
+/* Include upb_refcounted methods like upb_msgdef_ref(). */
+UPB_REFCOUNTED_CMETHODS(upb_msgdef, upb_msgdef_upcast2)
+
bool upb_msgdef_freeze(upb_msgdef *m, upb_status *status);
-// From upb_def.
const char *upb_msgdef_fullname(const upb_msgdef *m);
bool upb_msgdef_setfullname(upb_msgdef *m, const char *fullname, upb_status *s);
@@ -2046,10 +2091,10 @@ bool upb_msgdef_addfield(upb_msgdef *m, upb_fielddef *f, const void *ref_donor,
bool upb_msgdef_addoneof(upb_msgdef *m, upb_oneofdef *o, const void *ref_donor,
upb_status *s);
-// Field lookup in a couple of different variations:
-// - itof = int to field
-// - ntof = name to field
-// - ntofz = name to field, null-terminated string.
+/* Field lookup in a couple of different variations:
+ * - itof = int to field
+ * - ntof = name to field
+ * - ntofz = name to field, null-terminated string. */
const upb_fielddef *upb_msgdef_itof(const upb_msgdef *m, uint32_t i);
const upb_fielddef *upb_msgdef_ntof(const upb_msgdef *m, const char *name,
size_t len);
@@ -2069,9 +2114,9 @@ UPB_INLINE upb_fielddef *upb_msgdef_ntof_mutable(upb_msgdef *m,
return (upb_fielddef *)upb_msgdef_ntof(m, name, len);
}
-// Oneof lookup:
-// - ntoo = name to oneof
-// - ntooz = name to oneof, null-terminated string.
+/* Oneof lookup:
+ * - ntoo = name to oneof
+ * - ntooz = name to oneof, null-terminated string. */
const upb_oneofdef *upb_msgdef_ntoo(const upb_msgdef *m, const char *name,
size_t len);
int upb_msgdef_numoneofs(const upb_msgdef *m);
@@ -2089,7 +2134,7 @@ UPB_INLINE upb_oneofdef *upb_msgdef_ntoo_mutable(upb_msgdef *m,
void upb_msgdef_setmapentry(upb_msgdef *m, bool map_entry);
bool upb_msgdef_mapentry(const upb_msgdef *m);
-// Well-known field tag numbers for map-entry messages.
+/* Well-known field tag numbers for map-entry messages. */
#define UPB_MAPENTRY_KEY 1
#define UPB_MAPENTRY_VALUE 2
@@ -2097,95 +2142,94 @@ const upb_oneofdef *upb_msgdef_findoneof(const upb_msgdef *m,
const char *name);
int upb_msgdef_numoneofs(const upb_msgdef *m);
-// upb_msg_field_iter i;
-// for(upb_msg_field_begin(&i, m);
-// !upb_msg_field_done(&i);
-// upb_msg_field_next(&i)) {
-// upb_fielddef *f = upb_msg_iter_field(&i);
-// // ...
-// }
-//
-// For C we don't have separate iterators for const and non-const.
-// It is the caller's responsibility to cast the upb_fielddef* to
-// const if the upb_msgdef* is const.
+/* upb_msg_field_iter i;
+ * for(upb_msg_field_begin(&i, m);
+ * !upb_msg_field_done(&i);
+ * upb_msg_field_next(&i)) {
+ * upb_fielddef *f = upb_msg_iter_field(&i);
+ * // ...
+ * }
+ *
+ * For C we don't have separate iterators for const and non-const.
+ * It is the caller's responsibility to cast the upb_fielddef* to
+ * const if the upb_msgdef* is const. */
void upb_msg_field_begin(upb_msg_field_iter *iter, const upb_msgdef *m);
void upb_msg_field_next(upb_msg_field_iter *iter);
bool upb_msg_field_done(const upb_msg_field_iter *iter);
upb_fielddef *upb_msg_iter_field(const upb_msg_field_iter *iter);
void upb_msg_field_iter_setdone(upb_msg_field_iter *iter);
-// Similar to above, we also support iterating through the oneofs in a msgdef.
+/* Similar to above, we also support iterating through the oneofs in a
+ * msgdef. */
void upb_msg_oneof_begin(upb_msg_oneof_iter *iter, const upb_msgdef *m);
void upb_msg_oneof_next(upb_msg_oneof_iter *iter);
bool upb_msg_oneof_done(const upb_msg_oneof_iter *iter);
upb_oneofdef *upb_msg_iter_oneof(const upb_msg_oneof_iter *iter);
void upb_msg_oneof_iter_setdone(upb_msg_oneof_iter *iter);
-UPB_END_EXTERN_C // }
+UPB_END_EXTERN_C
/* upb::EnumDef ***************************************************************/
typedef upb_strtable_iter upb_enum_iter;
-// Class that represents an enum. Its base class is upb::Def (convert with
-// upb::upcast()).
-UPB_DEFINE_DEF(upb::EnumDef, enumdef, ENUM,
+#ifdef __cplusplus
+
+/* Class that represents an enum. Its base class is upb::Def (convert with
+ * upb::upcast()). */
+class upb::EnumDef {
public:
- // Returns NULL if memory allocation failed.
+ /* Returns NULL if memory allocation failed. */
static reffed_ptr<EnumDef> New();
- // Functionality from upb::RefCounted.
- bool IsFrozen() const;
- void Ref(const void* owner) const;
- void Unref(const void* owner) const;
- void DonateRef(const void* from, const void* to) const;
- void CheckRef(const void* owner) const;
+ /* upb::RefCounted methods like Ref()/Unref(). */
+ UPB_REFCOUNTED_CPPMETHODS
- // Functionality from upb::Def.
+ /* Functionality from upb::Def. */
const char* full_name() const;
bool set_full_name(const char* fullname, Status* s);
bool set_full_name(const std::string& fullname, Status* s);
- // Call to freeze this EnumDef.
+ /* Call to freeze this EnumDef. */
bool Freeze(Status* s);
- // The value that is used as the default when no field default is specified.
- // If not set explicitly, the first value that was added will be used.
- // The default value must be a member of the enum.
- // Requires that value_count() > 0.
+ /* The value that is used as the default when no field default is specified.
+ * If not set explicitly, the first value that was added will be used.
+ * The default value must be a member of the enum.
+ * Requires that value_count() > 0. */
int32_t default_value() const;
- // Sets the default value. If this value is not valid, returns false and an
- // error message in status.
+ /* Sets the default value. If this value is not valid, returns false and an
+ * error message in status. */
bool set_default_value(int32_t val, Status* status);
- // Returns the number of values currently defined in the enum. Note that
- // multiple names can refer to the same number, so this may be greater than
- // the total number of unique numbers.
+ /* Returns the number of values currently defined in the enum. Note that
+ * multiple names can refer to the same number, so this may be greater than
+ * the total number of unique numbers. */
int value_count() const;
- // Adds a single name/number pair to the enum. Fails if this name has
- // already been used by another value.
+ /* Adds a single name/number pair to the enum. Fails if this name has
+ * already been used by another value. */
bool AddValue(const char* name, int32_t num, Status* status);
bool AddValue(const std::string& name, int32_t num, Status* status);
- // Lookups from name to integer, returning true if found.
+ /* Lookups from name to integer, returning true if found. */
bool FindValueByName(const char* name, int32_t* num) const;
- // Finds the name corresponding to the given number, or NULL if none was
- // found. If more than one name corresponds to this number, returns the
- // first one that was added.
+ /* Finds the name corresponding to the given number, or NULL if none was
+ * found. If more than one name corresponds to this number, returns the
+ * first one that was added. */
const char* FindValueByNumber(int32_t num) const;
- // Returns a new EnumDef with all the same values. The new EnumDef will be
- // owned by the given owner.
+ /* Returns a new EnumDef with all the same values. The new EnumDef will be
+ * owned by the given owner. */
EnumDef* Dup(const void* owner) const;
- // Iteration over name/value pairs. The order is undefined.
- // Adding an enum val invalidates any iterators.
- //
- // TODO: make compatible with range-for, with elements as pairs?
+ /* Iteration over name/value pairs. The order is undefined.
+ * Adding an enum val invalidates any iterators.
+ *
+ * TODO: make compatible with range-for, with elements as pairs? */
class Iterator {
public:
explicit Iterator(const EnumDef*);
@@ -2200,33 +2244,23 @@ UPB_DEFINE_DEF(upb::EnumDef, enumdef, ENUM,
};
private:
- UPB_DISALLOW_POD_OPS(EnumDef, upb::EnumDef);
-,
-UPB_DEFINE_STRUCT(upb_enumdef, upb_def,
- upb_strtable ntoi;
- upb_inttable iton;
- int32_t defaultval;
-));
+ UPB_DISALLOW_POD_OPS(EnumDef, upb::EnumDef)
+};
-#define UPB_ENUMDEF_INIT(name, ntoi, iton, defaultval, refs, ref2s) \
- { UPB_DEF_INIT(name, UPB_DEF_ENUM, refs, ref2s), ntoi, iton, defaultval }
+#endif /* __cplusplus */
-UPB_BEGIN_EXTERN_C // {
+UPB_BEGIN_EXTERN_C
-// Native C API.
+/* Native C API. */
upb_enumdef *upb_enumdef_new(const void *owner);
upb_enumdef *upb_enumdef_dup(const upb_enumdef *e, const void *owner);
-// From upb_refcounted.
-void upb_enumdef_unref(const upb_enumdef *e, const void *owner);
-bool upb_enumdef_isfrozen(const upb_enumdef *e);
-void upb_enumdef_ref(const upb_enumdef *e, const void *owner);
-void upb_enumdef_donateref(const upb_enumdef *m, const void *from,
- const void *to);
-void upb_enumdef_checkref(const upb_enumdef *e, const void *owner);
+/* Include upb_refcounted methods like upb_enumdef_ref(). */
+UPB_REFCOUNTED_CMETHODS(upb_enumdef, upb_enumdef_upcast2)
+
bool upb_enumdef_freeze(upb_enumdef *e, upb_status *status);
-// From upb_def.
+/* From upb_def. */
const char *upb_enumdef_fullname(const upb_enumdef *e);
bool upb_enumdef_setfullname(upb_enumdef *e, const char *fullname,
upb_status *s);
@@ -2237,10 +2271,11 @@ int upb_enumdef_numvals(const upb_enumdef *e);
bool upb_enumdef_addval(upb_enumdef *e, const char *name, int32_t num,
upb_status *status);
-// Enum lookups:
-// - ntoi: look up a name with specified length.
-// - ntoiz: look up a name provided as a null-terminated string.
-// - iton: look up an integer, returning the name as a null-terminated string.
+/* Enum lookups:
+ * - ntoi: look up a name with specified length.
+ * - ntoiz: look up a name provided as a null-terminated string.
+ * - iton: look up an integer, returning the name as a null-terminated
+ * string. */
bool upb_enumdef_ntoi(const upb_enumdef *e, const char *name, size_t len,
int32_t *num);
UPB_INLINE bool upb_enumdef_ntoiz(const upb_enumdef *e,
@@ -2249,66 +2284,65 @@ UPB_INLINE bool upb_enumdef_ntoiz(const upb_enumdef *e,
}
const char *upb_enumdef_iton(const upb_enumdef *e, int32_t num);
-// upb_enum_iter i;
-// for(upb_enum_begin(&i, e); !upb_enum_done(&i); upb_enum_next(&i)) {
-// // ...
-// }
+/* upb_enum_iter i;
+ * for(upb_enum_begin(&i, e); !upb_enum_done(&i); upb_enum_next(&i)) {
+ * // ...
+ * }
+ */
void upb_enum_begin(upb_enum_iter *iter, const upb_enumdef *e);
void upb_enum_next(upb_enum_iter *iter);
bool upb_enum_done(upb_enum_iter *iter);
const char *upb_enum_iter_name(upb_enum_iter *iter);
int32_t upb_enum_iter_number(upb_enum_iter *iter);
-UPB_END_EXTERN_C // }
+UPB_END_EXTERN_C
/* upb::OneofDef **************************************************************/
typedef upb_inttable_iter upb_oneof_iter;
-// Class that represents a oneof. Its base class is upb::Def (convert with
-// upb::upcast()).
-UPB_DEFINE_DEF(upb::OneofDef, oneofdef, ONEOF, UPB_QUOTE(
+#ifdef __cplusplus
+
+/* Class that represents a oneof. Its base class is upb::Def (convert with
+ * upb::upcast()). */
+class upb::OneofDef {
public:
- // Returns NULL if memory allocation failed.
+ /* Returns NULL if memory allocation failed. */
static reffed_ptr<OneofDef> New();
- // Functionality from upb::RefCounted.
- bool IsFrozen() const;
- void Ref(const void* owner) const;
- void Unref(const void* owner) const;
- void DonateRef(const void* from, const void* to) const;
- void CheckRef(const void* owner) const;
+ /* upb::RefCounted methods like Ref()/Unref(). */
+ UPB_REFCOUNTED_CPPMETHODS
- // Functionality from upb::Def.
+ /* Functionality from upb::Def. */
const char* full_name() const;
- // Returns the MessageDef that owns this OneofDef.
+ /* Returns the MessageDef that owns this OneofDef. */
const MessageDef* containing_type() const;
- // Returns the name of this oneof. This is the name used to look up the oneof
- // by name once added to a message def.
+ /* Returns the name of this oneof. This is the name used to look up the oneof
+ * by name once added to a message def. */
const char* name() const;
bool set_name(const char* name, Status* s);
- // Returns the number of fields currently defined in the oneof.
+ /* Returns the number of fields currently defined in the oneof. */
int field_count() const;
- // Adds a field to the oneof. The field must not have been added to any other
- // oneof or msgdef. If the oneof is not yet part of a msgdef, then when the
- // oneof is eventually added to a msgdef, all fields added to the oneof will
- // also be added to the msgdef at that time. If the oneof is already part of a
- // msgdef, the field must either be a part of that msgdef already, or must not
- // be a part of any msgdef; in the latter case, the field is added to the
- // msgdef as a part of this operation.
- //
- // The field may only have an OPTIONAL label, never REQUIRED or REPEATED.
- //
- // If |f| is already part of this MessageDef, this method performs no action
- // and returns true (success). Thus, this method is idempotent.
+ /* Adds a field to the oneof. The field must not have been added to any other
+ * oneof or msgdef. If the oneof is not yet part of a msgdef, then when the
+ * oneof is eventually added to a msgdef, all fields added to the oneof will
+ * also be added to the msgdef at that time. If the oneof is already part of a
+ * msgdef, the field must either be a part of that msgdef already, or must not
+ * be a part of any msgdef; in the latter case, the field is added to the
+ * msgdef as a part of this operation.
+ *
+ * The field may only have an OPTIONAL label, never REQUIRED or REPEATED.
+ *
+ * If |f| is already part of this MessageDef, this method performs no action
+ * and returns true (success). Thus, this method is idempotent. */
bool AddField(FieldDef* field, Status* s);
bool AddField(const reffed_ptr<FieldDef>& field, Status* s);
- // Looks up by name.
+ /* Looks up by name. */
const FieldDef* FindFieldByName(const char* name, size_t len) const;
FieldDef* FindFieldByName(const char* name, size_t len);
const FieldDef* FindFieldByName(const char* name) const {
@@ -2327,14 +2361,14 @@ UPB_DEFINE_DEF(upb::OneofDef, oneofdef, ONEOF, UPB_QUOTE(
return FindFieldByName(str.c_str(), str.size());
}
- // Looks up by tag number.
+ /* Looks up by tag number. */
const FieldDef* FindFieldByNumber(uint32_t num) const;
- // Returns a new OneofDef with all the same fields. The OneofDef will be owned
- // by the given owner.
+ /* Returns a new OneofDef with all the same fields. The OneofDef will be owned
+ * by the given owner. */
OneofDef* Dup(const void* owner) const;
- // Iteration over fields. The order is undefined.
+ /* Iteration over fields. The order is undefined. */
class iterator : public std::iterator<std::forward_iterator_tag, FieldDef*> {
public:
explicit iterator(OneofDef* md);
@@ -2370,30 +2404,19 @@ UPB_DEFINE_DEF(upb::OneofDef, oneofdef, ONEOF, UPB_QUOTE(
const_iterator end() const;
private:
- UPB_DISALLOW_POD_OPS(OneofDef, upb::OneofDef);
-),
-UPB_DEFINE_STRUCT(upb_oneofdef, upb_def,
- upb_strtable ntof;
- upb_inttable itof;
- const upb_msgdef *parent;
-));
+ UPB_DISALLOW_POD_OPS(OneofDef, upb::OneofDef)
+};
-#define UPB_ONEOFDEF_INIT(name, ntof, itof, refs, ref2s) \
- { UPB_DEF_INIT(name, UPB_DEF_ENUM, refs, ref2s), ntof, itof }
+#endif /* __cplusplus */
-UPB_BEGIN_EXTERN_C // {
+UPB_BEGIN_EXTERN_C
-// Native C API.
+/* Native C API. */
upb_oneofdef *upb_oneofdef_new(const void *owner);
upb_oneofdef *upb_oneofdef_dup(const upb_oneofdef *o, const void *owner);
-// From upb_refcounted.
-void upb_oneofdef_unref(const upb_oneofdef *o, const void *owner);
-bool upb_oneofdef_isfrozen(const upb_oneofdef *e);
-void upb_oneofdef_ref(const upb_oneofdef *o, const void *owner);
-void upb_oneofdef_donateref(const upb_oneofdef *m, const void *from,
- const void *to);
-void upb_oneofdef_checkref(const upb_oneofdef *o, const void *owner);
+/* Include upb_refcounted methods like upb_oneofdef_ref(). */
+UPB_REFCOUNTED_CMETHODS(upb_oneofdef, upb_oneofdef_upcast2)
const char *upb_oneofdef_name(const upb_oneofdef *o);
bool upb_oneofdef_setname(upb_oneofdef *o, const char *name, upb_status *s);
@@ -2404,10 +2427,10 @@ bool upb_oneofdef_addfield(upb_oneofdef *o, upb_fielddef *f,
const void *ref_donor,
upb_status *s);
-// Oneof lookups:
-// - ntof: look up a field by name.
-// - ntofz: look up a field by name (as a null-terminated string).
-// - itof: look up a field by number.
+/* Oneof lookups:
+ * - ntof: look up a field by name.
+ * - ntofz: look up a field by name (as a null-terminated string).
+ * - itof: look up a field by number. */
const upb_fielddef *upb_oneofdef_ntof(const upb_oneofdef *o,
const char *name, size_t length);
UPB_INLINE const upb_fielddef *upb_oneofdef_ntofz(const upb_oneofdef *o,
@@ -2416,17 +2439,18 @@ UPB_INLINE const upb_fielddef *upb_oneofdef_ntofz(const upb_oneofdef *o,
}
const upb_fielddef *upb_oneofdef_itof(const upb_oneofdef *o, uint32_t num);
-// upb_oneof_iter i;
-// for(upb_oneof_begin(&i, e); !upb_oneof_done(&i); upb_oneof_next(&i)) {
-// // ...
-// }
+/* upb_oneof_iter i;
+ * for(upb_oneof_begin(&i, e); !upb_oneof_done(&i); upb_oneof_next(&i)) {
+ * // ...
+ * }
+ */
void upb_oneof_begin(upb_oneof_iter *iter, const upb_oneofdef *o);
void upb_oneof_next(upb_oneof_iter *iter);
bool upb_oneof_done(upb_oneof_iter *iter);
upb_fielddef *upb_oneof_iter_field(const upb_oneof_iter *iter);
void upb_oneof_iter_setdone(upb_oneof_iter *iter);
-UPB_END_EXTERN_C // }
+UPB_END_EXTERN_C
#ifdef __cplusplus
@@ -2435,21 +2459,12 @@ UPB_INLINE const char* upb_safecstr(const std::string& str) {
return str.c_str();
}
-// Inline C++ wrappers.
+/* Inline C++ wrappers. */
namespace upb {
inline Def* Def::Dup(const void* owner) const {
return upb_def_dup(this, owner);
}
-inline bool Def::IsFrozen() const { return upb_def_isfrozen(this); }
-inline void Def::Ref(const void* owner) const { upb_def_ref(this, owner); }
-inline void Def::Unref(const void* owner) const { upb_def_unref(this, owner); }
-inline void Def::DonateRef(const void* from, const void* to) const {
- upb_def_donateref(this, from, to);
-}
-inline void Def::CheckRef(const void* owner) const {
- upb_def_checkref(this, owner);
-}
inline Def::Type Def::def_type() const { return upb_def_type(this); }
inline const char* Def::full_name() const { return upb_def_fullname(this); }
inline bool Def::set_full_name(const char* fullname, Status* s) {
@@ -2501,19 +2516,6 @@ inline reffed_ptr<FieldDef> FieldDef::New() {
inline FieldDef* FieldDef::Dup(const void* owner) const {
return upb_fielddef_dup(this, owner);
}
-inline bool FieldDef::IsFrozen() const { return upb_fielddef_isfrozen(this); }
-inline void FieldDef::Ref(const void* owner) const {
- upb_fielddef_ref(this, owner);
-}
-inline void FieldDef::Unref(const void* owner) const {
- upb_fielddef_unref(this, owner);
-}
-inline void FieldDef::DonateRef(const void* from, const void* to) const {
- upb_fielddef_donateref(this, from, to);
-}
-inline void FieldDef::CheckRef(const void* owner) const {
- upb_fielddef_checkref(this, owner);
-}
inline const char* FieldDef::full_name() const {
return upb_fielddef_fullname(this);
}
@@ -2679,19 +2681,6 @@ inline reffed_ptr<MessageDef> MessageDef::New() {
upb_msgdef *m = upb_msgdef_new(&m);
return reffed_ptr<MessageDef>(m, &m);
}
-inline bool MessageDef::IsFrozen() const { return upb_msgdef_isfrozen(this); }
-inline void MessageDef::Ref(const void* owner) const {
- return upb_msgdef_ref(this, owner);
-}
-inline void MessageDef::Unref(const void* owner) const {
- return upb_msgdef_unref(this, owner);
-}
-inline void MessageDef::DonateRef(const void* from, const void* to) const {
- return upb_msgdef_donateref(this, from, to);
-}
-inline void MessageDef::CheckRef(const void* owner) const {
- return upb_msgdef_checkref(this, owner);
-}
inline const char *MessageDef::full_name() const {
return upb_msgdef_fullname(this);
}
@@ -2879,19 +2868,6 @@ inline reffed_ptr<EnumDef> EnumDef::New() {
upb_enumdef *e = upb_enumdef_new(&e);
return reffed_ptr<EnumDef>(e, &e);
}
-inline bool EnumDef::IsFrozen() const { return upb_enumdef_isfrozen(this); }
-inline void EnumDef::Ref(const void* owner) const {
- return upb_enumdef_ref(this, owner);
-}
-inline void EnumDef::Unref(const void* owner) const {
- return upb_enumdef_unref(this, owner);
-}
-inline void EnumDef::DonateRef(const void* from, const void* to) const {
- return upb_enumdef_donateref(this, from, to);
-}
-inline void EnumDef::CheckRef(const void* owner) const {
- return upb_enumdef_checkref(this, owner);
-}
inline const char* EnumDef::full_name() const {
return upb_enumdef_fullname(this);
}
@@ -2944,19 +2920,6 @@ inline reffed_ptr<OneofDef> OneofDef::New() {
upb_oneofdef *o = upb_oneofdef_new(&o);
return reffed_ptr<OneofDef>(o, &o);
}
-inline bool OneofDef::IsFrozen() const { return upb_oneofdef_isfrozen(this); }
-inline void OneofDef::Ref(const void* owner) const {
- return upb_oneofdef_ref(this, owner);
-}
-inline void OneofDef::Unref(const void* owner) const {
- return upb_oneofdef_unref(this, owner);
-}
-inline void OneofDef::DonateRef(const void* from, const void* to) const {
- return upb_oneofdef_donateref(this, from, to);
-}
-inline void OneofDef::CheckRef(const void* owner) const {
- return upb_oneofdef_checkref(this, owner);
-}
inline const char* OneofDef::full_name() const {
return upb_oneofdef_name(this);
}
@@ -3038,1027 +3001,185 @@ inline bool OneofDef::const_iterator::operator!=(
return !(*this == other);
}
-} // namespace upb
+} /* namespace upb */
#endif
-#undef UPB_DEFINE_DEF
-#undef UPB_DEF_CASTS
-#undef UPB_CPP_CASTS
-
#endif /* UPB_DEF_H_ */
-// This file contains accessors for a set of compiled-in defs.
-// Note that unlike Google's protobuf, it does *not* define
-// generated classes or any other kind of data structure for
-// actually storing protobufs. It only contains *defs* which
-// let you reflect over a protobuf *schema*.
-//
-// This file was generated by upbc (the upb compiler).
-// Do not edit -- your changes will be discarded when the file is
-// regenerated.
-
-#ifndef GOOGLE_PROTOBUF_DESCRIPTOR_UPB_H_
-#define GOOGLE_PROTOBUF_DESCRIPTOR_UPB_H_
-
/*
* upb - a minimalist implementation of protocol buffers.
*
- * Copyright (c) 2009-2012 Google Inc. See LICENSE for details.
+ * Copyright (c) 2015 Google Inc. See LICENSE for details.
* Author: Josh Haberman <jhaberman@gmail.com>
*
- * A symtab (symbol table) stores a name->def map of upb_defs. Clients could
- * always create such tables themselves, but upb_symtab has logic for resolving
- * symbolic references, and in particular, for keeping a whole set of consistent
- * defs when replacing some subset of those defs. This logic is nontrivial.
+ * This file contains definitions of structs that should be considered private
+ * and NOT stable across versions of upb.
*
- * This is a mixed C/C++ interface that offers a full API to both languages.
- * See the top-level README for more information.
+ * The only reason they are declared here and not in .c files is to allow upb
+ * and the application (if desired) to embed statically-initialized instances
+ * of structures like defs.
+ *
+ * If you include this file, all guarantees of ABI compatibility go out the
+ * window! Any code that includes this file needs to recompile against the
+ * exact same version of upb that they are linking against.
+ *
+ * You also need to recompile if you change the value of the UPB_DEBUG_REFS
+ * flag.
*/
-#ifndef UPB_SYMTAB_H_
-#define UPB_SYMTAB_H_
-
-
-#ifdef __cplusplus
-#include <vector>
-namespace upb { class SymbolTable; }
-#endif
-
-UPB_DECLARE_TYPE(upb::SymbolTable, upb_symtab);
-
-typedef struct {
- UPB_PRIVATE_FOR_CPP
- upb_strtable_iter iter;
- upb_deftype_t type;
-} upb_symtab_iter;
-
-// Non-const methods in upb::SymbolTable are NOT thread-safe.
-UPB_DEFINE_CLASS1(upb::SymbolTable, upb::RefCounted,
- public:
- // Returns a new symbol table with a single ref owned by "owner."
- // Returns NULL if memory allocation failed.
- static reffed_ptr<SymbolTable> New();
-
- // Functionality from upb::RefCounted.
- bool IsFrozen() const;
- void Ref(const void* owner) const;
- void Unref(const void* owner) const;
- void DonateRef(const void *from, const void *to) const;
- void CheckRef(const void *owner) const;
-
- // For all lookup functions, the returned pointer is not owned by the
- // caller; it may be invalidated by any non-const call or unref of the
- // SymbolTable! To protect against this, take a ref if desired.
-
- // Freezes the symbol table: prevents further modification of it.
- // After the Freeze() operation is successful, the SymbolTable must only be
- // accessed via a const pointer.
- //
- // Unlike with upb::MessageDef/upb::EnumDef/etc, freezing a SymbolTable is not
- // a necessary step in using a SymbolTable. If you have no need for it to be
- // immutable, there is no need to freeze it ever. However sometimes it is
- // useful, and SymbolTables that are statically compiled into the binary are
- // always frozen by nature.
- void Freeze();
-
- // Resolves the given symbol using the rules described in descriptor.proto,
- // namely:
- //
- // If the name starts with a '.', it is fully-qualified. Otherwise,
- // C++-like scoping rules are used to find the type (i.e. first the nested
- // types within this message are searched, then within the parent, on up
- // to the root namespace).
- //
- // If not found, returns NULL.
- const Def* Resolve(const char* base, const char* sym) const;
-
- // Finds an entry in the symbol table with this exact name. If not found,
- // returns NULL.
- const Def* Lookup(const char *sym) const;
- const MessageDef* LookupMessage(const char *sym) const;
- const EnumDef* LookupEnum(const char *sym) const;
-
- // TODO: introduce a C++ iterator, but make it nice and templated so that if
- // you ask for an iterator of MessageDef the iterated elements are strongly
- // typed as MessageDef*.
-
- // Adds the given mutable defs to the symtab, resolving all symbols
- // (including enum default values) and finalizing the defs. Only one def per
- // name may be in the list, but defs can replace existing defs in the symtab.
- // All defs must have a name -- anonymous defs are not allowed. Anonymous
- // defs can still be frozen by calling upb_def_freeze() directly.
- //
- // Any existing defs that can reach defs that are being replaced will
- // themselves be replaced also, so that the resulting set of defs is fully
- // consistent.
- //
- // This logic implemented in this method is a convenience; ultimately it
- // calls some combination of upb_fielddef_setsubdef(), upb_def_dup(), and
- // upb_freeze(), any of which the client could call themself. However, since
- // the logic for doing so is nontrivial, we provide it here.
- //
- // The entire operation either succeeds or fails. If the operation fails,
- // the symtab is unchanged, false is returned, and status indicates the
- // error. The caller passes a ref on all defs to the symtab (even if the
- // operation fails).
- //
- // TODO(haberman): currently failure will leave the symtab unchanged, but may
- // leave the defs themselves partially resolved. Does this matter? If so we
- // could do a prepass that ensures that all symbols are resolvable and bail
- // if not, so we don't mutate anything until we know the operation will
- // succeed.
- //
- // TODO(haberman): since the defs must be mutable, refining a frozen def
- // requires making mutable copies of the entire tree. This is wasteful if
- // only a few messages are changing. We may want to add a way of adding a
- // tree of frozen defs to the symtab (perhaps an alternate constructor where
- // you pass the root of the tree?)
- bool Add(Def*const* defs, int n, void* ref_donor, upb_status* status);
-
- bool Add(const std::vector<Def*>& defs, void *owner, Status* status) {
- return Add((Def*const*)&defs[0], defs.size(), owner, status);
- }
-
- private:
- UPB_DISALLOW_POD_OPS(SymbolTable, upb::SymbolTable);
-,
-UPB_DEFINE_STRUCT(upb_symtab, upb_refcounted,
- upb_strtable symtab;
-));
-
-#define UPB_SYMTAB_INIT(symtab, refs, ref2s) \
- { UPB_REFCOUNT_INIT(refs, ref2s), symtab }
-
-UPB_BEGIN_EXTERN_C // {
-
-// Native C API.
-// From upb_refcounted.
-bool upb_symtab_isfrozen(const upb_symtab *s);
-void upb_symtab_ref(const upb_symtab *s, const void *owner);
-void upb_symtab_unref(const upb_symtab *s, const void *owner);
-void upb_symtab_donateref(
- const upb_symtab *s, const void *from, const void *to);
-void upb_symtab_checkref(const upb_symtab *s, const void *owner);
-
-upb_symtab *upb_symtab_new(const void *owner);
-void upb_symtab_freeze(upb_symtab *s);
-const upb_def *upb_symtab_resolve(const upb_symtab *s, const char *base,
- const char *sym);
-const upb_def *upb_symtab_lookup(const upb_symtab *s, const char *sym);
-const upb_msgdef *upb_symtab_lookupmsg(const upb_symtab *s, const char *sym);
-const upb_enumdef *upb_symtab_lookupenum(const upb_symtab *s, const char *sym);
-bool upb_symtab_add(upb_symtab *s, upb_def *const*defs, int n, void *ref_donor,
- upb_status *status);
-
-// upb_symtab_iter i;
-// for(upb_symtab_begin(&i, s, type); !upb_symtab_done(&i);
-// upb_symtab_next(&i)) {
-// const upb_def *def = upb_symtab_iter_def(&i);
-// // ...
-// }
-//
-// For C we don't have separate iterators for const and non-const.
-// It is the caller's responsibility to cast the upb_fielddef* to
-// const if the upb_msgdef* is const.
-void upb_symtab_begin(upb_symtab_iter *iter, const upb_symtab *s,
- upb_deftype_t type);
-void upb_symtab_next(upb_symtab_iter *iter);
-bool upb_symtab_done(const upb_symtab_iter *iter);
-const upb_def *upb_symtab_iter_def(const upb_symtab_iter *iter);
-UPB_END_EXTERN_C // }
+#ifndef UPB_STATICINIT_H_
+#define UPB_STATICINIT_H_
#ifdef __cplusplus
-// C++ inline wrappers.
-namespace upb {
-inline reffed_ptr<SymbolTable> SymbolTable::New() {
- upb_symtab *s = upb_symtab_new(&s);
- return reffed_ptr<SymbolTable>(s, &s);
-}
-
-inline bool SymbolTable::IsFrozen() const {
- return upb_symtab_isfrozen(this);
-}
-inline void SymbolTable::Ref(const void *owner) const {
- upb_symtab_ref(this, owner);
-}
-inline void SymbolTable::Unref(const void *owner) const {
- upb_symtab_unref(this, owner);
-}
-inline void SymbolTable::DonateRef(const void *from, const void *to) const {
- upb_symtab_donateref(this, from, to);
-}
-inline void SymbolTable::CheckRef(const void *owner) const {
- upb_symtab_checkref(this, owner);
-}
-
-inline void SymbolTable::Freeze() {
- return upb_symtab_freeze(this);
-}
-inline const Def *SymbolTable::Resolve(const char *base,
- const char *sym) const {
- return upb_symtab_resolve(this, base, sym);
-}
-inline const Def* SymbolTable::Lookup(const char *sym) const {
- return upb_symtab_lookup(this, sym);
-}
-inline const MessageDef *SymbolTable::LookupMessage(const char *sym) const {
- return upb_symtab_lookupmsg(this, sym);
-}
-inline bool SymbolTable::Add(
- Def*const* defs, int n, void* ref_donor, upb_status* status) {
- return upb_symtab_add(this, (upb_def*const*)defs, n, ref_donor, status);
-}
-} // namespace upb
+/* Because of how we do our typedefs, this header can't be included from C++. */
+#error This file cannot be included from C++
#endif
-#endif /* UPB_SYMTAB_H_ */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Enums
-
-typedef enum {
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_LABEL_OPTIONAL = 1,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_LABEL_REQUIRED = 2,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_LABEL_REPEATED = 3,
-} google_protobuf_FieldDescriptorProto_Label;
-
-typedef enum {
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_DOUBLE = 1,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_FLOAT = 2,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_INT64 = 3,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_UINT64 = 4,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_INT32 = 5,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_FIXED64 = 6,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_FIXED32 = 7,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_BOOL = 8,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_STRING = 9,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_GROUP = 10,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_MESSAGE = 11,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_BYTES = 12,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_UINT32 = 13,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_ENUM = 14,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_SFIXED32 = 15,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_SFIXED64 = 16,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_SINT32 = 17,
- GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_SINT64 = 18,
-} google_protobuf_FieldDescriptorProto_Type;
-
-typedef enum {
- GOOGLE_PROTOBUF_FIELDOPTIONS_STRING = 0,
- GOOGLE_PROTOBUF_FIELDOPTIONS_CORD = 1,
- GOOGLE_PROTOBUF_FIELDOPTIONS_STRING_PIECE = 2,
-} google_protobuf_FieldOptions_CType;
-
-typedef enum {
- GOOGLE_PROTOBUF_FILEOPTIONS_SPEED = 1,
- GOOGLE_PROTOBUF_FILEOPTIONS_CODE_SIZE = 2,
- GOOGLE_PROTOBUF_FILEOPTIONS_LITE_RUNTIME = 3,
-} google_protobuf_FileOptions_OptimizeMode;
-
-// Selectors
-
-// google.protobuf.DescriptorProto
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_FIELD_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NESTED_TYPE_STARTSUBMSG 3
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_ENUM_TYPE_STARTSUBMSG 4
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_RANGE_STARTSUBMSG 5
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_STARTSUBMSG 6
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_OPTIONS_STARTSUBMSG 7
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_FIELD_STARTSEQ 8
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_FIELD_ENDSEQ 9
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_FIELD_ENDSUBMSG 10
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NESTED_TYPE_STARTSEQ 11
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NESTED_TYPE_ENDSEQ 12
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NESTED_TYPE_ENDSUBMSG 13
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_ENUM_TYPE_STARTSEQ 14
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_ENUM_TYPE_ENDSEQ 15
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_ENUM_TYPE_ENDSUBMSG 16
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_RANGE_STARTSEQ 17
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_RANGE_ENDSEQ 18
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_RANGE_ENDSUBMSG 19
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_STARTSEQ 20
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_ENDSEQ 21
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_ENDSUBMSG 22
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_OPTIONS_ENDSUBMSG 23
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NAME_STRING 24
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NAME_STARTSTR 25
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NAME_ENDSTR 26
-
-// google.protobuf.DescriptorProto.ExtensionRange
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSIONRANGE_START_INT32 2
-#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSIONRANGE_END_INT32 3
-
-// google.protobuf.EnumDescriptorProto
-#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_VALUE_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_OPTIONS_STARTSUBMSG 3
-#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_VALUE_STARTSEQ 4
-#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_VALUE_ENDSEQ 5
-#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_VALUE_ENDSUBMSG 6
-#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_OPTIONS_ENDSUBMSG 7
-#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_NAME_STRING 8
-#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_NAME_STARTSTR 9
-#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_NAME_ENDSTR 10
-
-// google.protobuf.EnumOptions
-#define SEL_GOOGLE_PROTOBUF_ENUMOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_ENUMOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
-#define SEL_GOOGLE_PROTOBUF_ENUMOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
-#define SEL_GOOGLE_PROTOBUF_ENUMOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
-#define SEL_GOOGLE_PROTOBUF_ENUMOPTIONS_ALLOW_ALIAS_BOOL 6
-
-// google.protobuf.EnumValueDescriptorProto
-#define SEL_GOOGLE_PROTOBUF_ENUMVALUEDESCRIPTORPROTO_OPTIONS_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_ENUMVALUEDESCRIPTORPROTO_OPTIONS_ENDSUBMSG 3
-#define SEL_GOOGLE_PROTOBUF_ENUMVALUEDESCRIPTORPROTO_NAME_STRING 4
-#define SEL_GOOGLE_PROTOBUF_ENUMVALUEDESCRIPTORPROTO_NAME_STARTSTR 5
-#define SEL_GOOGLE_PROTOBUF_ENUMVALUEDESCRIPTORPROTO_NAME_ENDSTR 6
-#define SEL_GOOGLE_PROTOBUF_ENUMVALUEDESCRIPTORPROTO_NUMBER_INT32 7
-
-// google.protobuf.EnumValueOptions
-#define SEL_GOOGLE_PROTOBUF_ENUMVALUEOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_ENUMVALUEOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
-#define SEL_GOOGLE_PROTOBUF_ENUMVALUEOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
-#define SEL_GOOGLE_PROTOBUF_ENUMVALUEOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
-
-// google.protobuf.FieldDescriptorProto
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_OPTIONS_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_OPTIONS_ENDSUBMSG 3
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_NAME_STRING 4
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_NAME_STARTSTR 5
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_NAME_ENDSTR 6
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_EXTENDEE_STRING 7
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_EXTENDEE_STARTSTR 8
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_EXTENDEE_ENDSTR 9
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_NUMBER_INT32 10
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_LABEL_INT32 11
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_INT32 12
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_NAME_STRING 13
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_NAME_STARTSTR 14
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_NAME_ENDSTR 15
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_DEFAULT_VALUE_STRING 16
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_DEFAULT_VALUE_STARTSTR 17
-#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_DEFAULT_VALUE_ENDSTR 18
-
-// google.protobuf.FieldOptions
-#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
-#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
-#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
-#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_CTYPE_INT32 6
-#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_PACKED_BOOL 7
-#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_DEPRECATED_BOOL 8
-#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_LAZY_BOOL 9
-#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_EXPERIMENTAL_MAP_KEY_STRING 10
-#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_EXPERIMENTAL_MAP_KEY_STARTSTR 11
-#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_EXPERIMENTAL_MAP_KEY_ENDSTR 12
-#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_WEAK_BOOL 13
-
-// google.protobuf.FileDescriptorProto
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_MESSAGE_TYPE_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_ENUM_TYPE_STARTSUBMSG 3
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_SERVICE_STARTSUBMSG 4
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_EXTENSION_STARTSUBMSG 5
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_OPTIONS_STARTSUBMSG 6
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_SOURCE_CODE_INFO_STARTSUBMSG 7
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_MESSAGE_TYPE_STARTSEQ 8
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_MESSAGE_TYPE_ENDSEQ 9
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_MESSAGE_TYPE_ENDSUBMSG 10
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_ENUM_TYPE_STARTSEQ 11
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_ENUM_TYPE_ENDSEQ 12
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_ENUM_TYPE_ENDSUBMSG 13
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_SERVICE_STARTSEQ 14
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_SERVICE_ENDSEQ 15
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_SERVICE_ENDSUBMSG 16
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_EXTENSION_STARTSEQ 17
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_EXTENSION_ENDSEQ 18
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_EXTENSION_ENDSUBMSG 19
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_OPTIONS_ENDSUBMSG 20
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_SOURCE_CODE_INFO_ENDSUBMSG 21
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_NAME_STRING 22
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_NAME_STARTSTR 23
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_NAME_ENDSTR 24
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_PACKAGE_STRING 25
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_PACKAGE_STARTSTR 26
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_PACKAGE_ENDSTR 27
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_DEPENDENCY_STARTSEQ 28
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_DEPENDENCY_ENDSEQ 29
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_DEPENDENCY_STRING 30
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_DEPENDENCY_STARTSTR 31
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_DEPENDENCY_ENDSTR 32
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_PUBLIC_DEPENDENCY_STARTSEQ 33
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_PUBLIC_DEPENDENCY_ENDSEQ 34
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_PUBLIC_DEPENDENCY_INT32 35
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_WEAK_DEPENDENCY_STARTSEQ 36
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_WEAK_DEPENDENCY_ENDSEQ 37
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_WEAK_DEPENDENCY_INT32 38
-
-// google.protobuf.FileDescriptorSet
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORSET_FILE_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORSET_FILE_STARTSEQ 3
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORSET_FILE_ENDSEQ 4
-#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORSET_FILE_ENDSUBMSG 5
-
-// google.protobuf.FileOptions
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_PACKAGE_STRING 6
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_PACKAGE_STARTSTR 7
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_PACKAGE_ENDSTR 8
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_OUTER_CLASSNAME_STRING 9
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_OUTER_CLASSNAME_STARTSTR 10
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_OUTER_CLASSNAME_ENDSTR 11
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_OPTIMIZE_FOR_INT32 12
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_MULTIPLE_FILES_BOOL 13
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_GO_PACKAGE_STRING 14
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_GO_PACKAGE_STARTSTR 15
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_GO_PACKAGE_ENDSTR 16
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_CC_GENERIC_SERVICES_BOOL 17
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_GENERIC_SERVICES_BOOL 18
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_PY_GENERIC_SERVICES_BOOL 19
-#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_GENERATE_EQUALS_AND_HASH_BOOL 20
-
-// google.protobuf.MessageOptions
-#define SEL_GOOGLE_PROTOBUF_MESSAGEOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_MESSAGEOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
-#define SEL_GOOGLE_PROTOBUF_MESSAGEOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
-#define SEL_GOOGLE_PROTOBUF_MESSAGEOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
-#define SEL_GOOGLE_PROTOBUF_MESSAGEOPTIONS_MESSAGE_SET_WIRE_FORMAT_BOOL 6
-#define SEL_GOOGLE_PROTOBUF_MESSAGEOPTIONS_NO_STANDARD_DESCRIPTOR_ACCESSOR_BOOL 7
-
-// google.protobuf.MethodDescriptorProto
-#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_OPTIONS_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_OPTIONS_ENDSUBMSG 3
-#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_NAME_STRING 4
-#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_NAME_STARTSTR 5
-#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_NAME_ENDSTR 6
-#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_INPUT_TYPE_STRING 7
-#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_INPUT_TYPE_STARTSTR 8
-#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_INPUT_TYPE_ENDSTR 9
-#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_OUTPUT_TYPE_STRING 10
-#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_OUTPUT_TYPE_STARTSTR 11
-#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_OUTPUT_TYPE_ENDSTR 12
-
-// google.protobuf.MethodOptions
-#define SEL_GOOGLE_PROTOBUF_METHODOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_METHODOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
-#define SEL_GOOGLE_PROTOBUF_METHODOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
-#define SEL_GOOGLE_PROTOBUF_METHODOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
-
-// google.protobuf.ServiceDescriptorProto
-#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_METHOD_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_OPTIONS_STARTSUBMSG 3
-#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_METHOD_STARTSEQ 4
-#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_METHOD_ENDSEQ 5
-#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_METHOD_ENDSUBMSG 6
-#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_OPTIONS_ENDSUBMSG 7
-#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_NAME_STRING 8
-#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_NAME_STARTSTR 9
-#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_NAME_ENDSTR 10
-
-// google.protobuf.ServiceOptions
-#define SEL_GOOGLE_PROTOBUF_SERVICEOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_SERVICEOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
-#define SEL_GOOGLE_PROTOBUF_SERVICEOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
-#define SEL_GOOGLE_PROTOBUF_SERVICEOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
+/* upb_refcounted *************************************************************/
-// google.protobuf.SourceCodeInfo
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_STARTSEQ 3
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_ENDSEQ 4
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_ENDSUBMSG 5
-// google.protobuf.SourceCodeInfo.Location
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_PATH_STARTSEQ 2
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_PATH_ENDSEQ 3
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_PATH_INT32 4
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_SPAN_STARTSEQ 5
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_SPAN_ENDSEQ 6
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_SPAN_INT32 7
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_LEADING_COMMENTS_STRING 8
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_LEADING_COMMENTS_STARTSTR 9
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_LEADING_COMMENTS_ENDSTR 10
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_TRAILING_COMMENTS_STRING 11
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_TRAILING_COMMENTS_STARTSTR 12
-#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_TRAILING_COMMENTS_ENDSTR 13
+/* upb_def ********************************************************************/
-// google.protobuf.UninterpretedOption
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAME_STARTSUBMSG 2
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAME_STARTSEQ 3
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAME_ENDSEQ 4
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAME_ENDSUBMSG 5
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_IDENTIFIER_VALUE_STRING 6
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_IDENTIFIER_VALUE_STARTSTR 7
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_IDENTIFIER_VALUE_ENDSTR 8
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_POSITIVE_INT_VALUE_UINT64 9
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NEGATIVE_INT_VALUE_INT64 10
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_DOUBLE_VALUE_DOUBLE 11
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_STRING_VALUE_STRING 12
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_STRING_VALUE_STARTSTR 13
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_STRING_VALUE_ENDSTR 14
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_AGGREGATE_VALUE_STRING 15
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_AGGREGATE_VALUE_STARTSTR 16
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_AGGREGATE_VALUE_ENDSTR 17
+struct upb_def {
+ upb_refcounted base;
-// google.protobuf.UninterpretedOption.NamePart
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAMEPART_NAME_PART_STRING 2
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAMEPART_NAME_PART_STARTSTR 3
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAMEPART_NAME_PART_ENDSTR 4
-#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAMEPART_IS_EXTENSION_BOOL 5
+ const char *fullname;
+ char type; /* A upb_deftype_t (char to save space) */
-const upb_symtab *upbdefs_google_protobuf_descriptor(const void *owner);
+ /* Used as a flag during the def's mutable stage. Must be false unless
+ * it is currently being used by a function on the stack. This allows
+ * us to easily determine which defs were passed into the function's
+ * current invocation. */
+ bool came_from_user;
+};
-// MessageDefs
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_DescriptorProto(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.DescriptorProto");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_DescriptorProto_ExtensionRange(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.DescriptorProto.ExtensionRange");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_EnumDescriptorProto(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.EnumDescriptorProto");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_EnumOptions(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.EnumOptions");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_EnumValueDescriptorProto(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.EnumValueDescriptorProto");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_EnumValueOptions(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.EnumValueOptions");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_FieldDescriptorProto(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.FieldDescriptorProto");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_FieldOptions(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.FieldOptions");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_FileDescriptorProto(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.FileDescriptorProto");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_FileDescriptorSet(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.FileDescriptorSet");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_FileOptions(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.FileOptions");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_MessageOptions(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.MessageOptions");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_MethodDescriptorProto(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.MethodDescriptorProto");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_MethodOptions(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.MethodOptions");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_ServiceDescriptorProto(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.ServiceDescriptorProto");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_ServiceOptions(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.ServiceOptions");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_SourceCodeInfo(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.SourceCodeInfo");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_SourceCodeInfo_Location(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.SourceCodeInfo.Location");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_UninterpretedOption(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.UninterpretedOption");
- assert(m);
- return m;
-}
-UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_UninterpretedOption_NamePart(const upb_symtab *s) {
- const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.UninterpretedOption.NamePart");
- assert(m);
- return m;
-}
+#define UPB_DEF_INIT(name, type, refs, ref2s) \
+ { UPB_REFCOUNT_INIT(refs, ref2s), name, type, false }
-// EnumDefs
-UPB_INLINE const upb_enumdef *upbdefs_google_protobuf_FieldDescriptorProto_Label(const upb_symtab *s) {
- const upb_enumdef *e = upb_symtab_lookupenum(s, "google.protobuf.FieldDescriptorProto.Label");
- assert(e);
- return e;
-}
-UPB_INLINE const upb_enumdef *upbdefs_google_protobuf_FieldDescriptorProto_Type(const upb_symtab *s) {
- const upb_enumdef *e = upb_symtab_lookupenum(s, "google.protobuf.FieldDescriptorProto.Type");
- assert(e);
- return e;
-}
-UPB_INLINE const upb_enumdef *upbdefs_google_protobuf_FieldOptions_CType(const upb_symtab *s) {
- const upb_enumdef *e = upb_symtab_lookupenum(s, "google.protobuf.FieldOptions.CType");
- assert(e);
- return e;
-}
-UPB_INLINE const upb_enumdef *upbdefs_google_protobuf_FileOptions_OptimizeMode(const upb_symtab *s) {
- const upb_enumdef *e = upb_symtab_lookupenum(s, "google.protobuf.FileOptions.OptimizeMode");
- assert(e);
- return e;
-}
+/* upb_fielddef ***************************************************************/
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_ExtensionRange_end(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto_ExtensionRange(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_ExtensionRange_start(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto_ExtensionRange(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_enum_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 4); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_extension(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 6); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_extension_range(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 5); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_field(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_nested_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 3); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 7); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumDescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumDescriptorProto(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumDescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumDescriptorProto(s), 3); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumDescriptorProto_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumDescriptorProto(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumOptions_allow_alias(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumOptions(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumOptions(s), 999); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumValueDescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumValueDescriptorProto(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumValueDescriptorProto_number(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumValueDescriptorProto(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumValueDescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumValueDescriptorProto(s), 3); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumValueOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumValueOptions(s), 999); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_default_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 7); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_extendee(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_label(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 4); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_number(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 3); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 8); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 5); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_type_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 6); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_ctype(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_deprecated(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 3); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_experimental_map_key(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 9); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_lazy(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 5); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_packed(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 999); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_weak(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 10); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_dependency(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 3); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_enum_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 5); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_extension(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 7); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_message_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 4); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 8); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_package(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_public_dependency(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 10); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_service(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 6); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_source_code_info(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 9); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_weak_dependency(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 11); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorSet_file(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorSet(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_cc_generic_services(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 16); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_go_package(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 11); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_java_generate_equals_and_hash(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 20); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_java_generic_services(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 17); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_java_multiple_files(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 10); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_java_outer_classname(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 8); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_java_package(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_optimize_for(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 9); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_py_generic_services(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 18); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 999); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MessageOptions_message_set_wire_format(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MessageOptions(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MessageOptions_no_standard_descriptor_accessor(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MessageOptions(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MessageOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MessageOptions(s), 999); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MethodDescriptorProto_input_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MethodDescriptorProto(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MethodDescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MethodDescriptorProto(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MethodDescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MethodDescriptorProto(s), 4); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MethodDescriptorProto_output_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MethodDescriptorProto(s), 3); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MethodOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MethodOptions(s), 999); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_ServiceDescriptorProto_method(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_ServiceDescriptorProto(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_ServiceDescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_ServiceDescriptorProto(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_ServiceDescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_ServiceDescriptorProto(s), 3); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_ServiceOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_ServiceOptions(s), 999); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_SourceCodeInfo_Location_leading_comments(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_SourceCodeInfo_Location(s), 3); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_SourceCodeInfo_Location_path(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_SourceCodeInfo_Location(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_SourceCodeInfo_Location_span(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_SourceCodeInfo_Location(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_SourceCodeInfo_Location_trailing_comments(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_SourceCodeInfo_Location(s), 4); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_SourceCodeInfo_location(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_SourceCodeInfo(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_NamePart_is_extension(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption_NamePart(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_NamePart_name_part(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption_NamePart(s), 1); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_aggregate_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 8); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_double_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 6); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_identifier_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 3); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 2); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_negative_int_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 5); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_positive_int_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 4); }
-UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_string_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 7); }
+struct upb_fielddef {
+ upb_def base;
-#ifdef __cplusplus
-}; // extern "C"
-#endif
+ union {
+ int64_t sint;
+ uint64_t uint;
+ double dbl;
+ float flt;
+ void *bytes;
+ } defaultval;
+ union {
+ const upb_msgdef *def; /* If !msg_is_symbolic. */
+ char *name; /* If msg_is_symbolic. */
+ } msg;
+ union {
+ const upb_def *def; /* If !subdef_is_symbolic. */
+ char *name; /* If subdef_is_symbolic. */
+ } sub; /* The msgdef or enumdef for this field, if upb_hassubdef(f). */
+ bool subdef_is_symbolic;
+ bool msg_is_symbolic;
+ const upb_oneofdef *oneof;
+ bool default_is_string;
+ bool type_is_set_; /* False until type is explicitly set. */
+ bool is_extension_;
+ bool lazy_;
+ bool packed_;
+ upb_intfmt_t intfmt;
+ bool tagdelim;
+ upb_fieldtype_t type_;
+ upb_label_t label_;
+ uint32_t number_;
+ uint32_t selector_base; /* Used to index into a upb::Handlers table. */
+ uint32_t index_;
+};
-#ifdef __cplusplus
+#define UPB_FIELDDEF_INIT(label, type, intfmt, tagdelim, is_extension, lazy, \
+ packed, name, num, msgdef, subdef, selector_base, \
+ index, defaultval, refs, ref2s) \
+ { \
+ UPB_DEF_INIT(name, UPB_DEF_FIELD, refs, ref2s), defaultval, {msgdef}, \
+ {subdef}, NULL, false, false, \
+ type == UPB_TYPE_STRING || type == UPB_TYPE_BYTES, true, is_extension, \
+ lazy, packed, intfmt, tagdelim, type, label, num, selector_base, index \
+ }
-namespace upbdefs {
-namespace google {
-namespace protobuf {
-namespace descriptor {
-inline upb::reffed_ptr<const upb::SymbolTable> SymbolTable() {
- const upb::SymbolTable* s = upbdefs_google_protobuf_descriptor(&s);
- return upb::reffed_ptr<const upb::SymbolTable>(s, &s);
-}
-} // namespace descriptor
-} // namespace protobuf
-} // namespace google
-#define RETURN_REFFED(type, func) \
- const type* obj = func(upbdefs::google::protobuf::descriptor::SymbolTable().get()); \
- return upb::reffed_ptr<const type>(obj);
+/* upb_msgdef *****************************************************************/
-namespace google {
-namespace protobuf {
-namespace DescriptorProto {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_DescriptorProto) }
-inline upb::reffed_ptr<const upb::FieldDef> enum_type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_enum_type) }
-inline upb::reffed_ptr<const upb::FieldDef> extension() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_extension) }
-inline upb::reffed_ptr<const upb::FieldDef> extension_range() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_extension_range) }
-inline upb::reffed_ptr<const upb::FieldDef> field() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_field) }
-inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_name) }
-inline upb::reffed_ptr<const upb::FieldDef> nested_type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_nested_type) }
-inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_options) }
-} // namespace DescriptorProto
-} // namespace protobuf
-} // namespace google
+struct upb_msgdef {
+ upb_def base;
-namespace google {
-namespace protobuf {
-namespace DescriptorProto {
-namespace ExtensionRange {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_DescriptorProto_ExtensionRange) }
-inline upb::reffed_ptr<const upb::FieldDef> end() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_ExtensionRange_end) }
-inline upb::reffed_ptr<const upb::FieldDef> start() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_ExtensionRange_start) }
-} // namespace ExtensionRange
-} // namespace DescriptorProto
-} // namespace protobuf
-} // namespace google
+ size_t selector_count;
+ uint32_t submsg_field_count;
-namespace google {
-namespace protobuf {
-namespace EnumDescriptorProto {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_EnumDescriptorProto) }
-inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumDescriptorProto_name) }
-inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumDescriptorProto_options) }
-inline upb::reffed_ptr<const upb::FieldDef> value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumDescriptorProto_value) }
-} // namespace EnumDescriptorProto
-} // namespace protobuf
-} // namespace google
+ /* Tables for looking up fields by number and name. */
+ upb_inttable itof; /* int to field */
+ upb_strtable ntof; /* name to field */
-namespace google {
-namespace protobuf {
-namespace EnumOptions {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_EnumOptions) }
-inline upb::reffed_ptr<const upb::FieldDef> allow_alias() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumOptions_allow_alias) }
-inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumOptions_uninterpreted_option) }
-} // namespace EnumOptions
-} // namespace protobuf
-} // namespace google
+ /* Tables for looking up oneofs by name. */
+ upb_strtable ntoo; /* name to oneof */
-namespace google {
-namespace protobuf {
-namespace EnumValueDescriptorProto {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_EnumValueDescriptorProto) }
-inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumValueDescriptorProto_name) }
-inline upb::reffed_ptr<const upb::FieldDef> number() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumValueDescriptorProto_number) }
-inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumValueDescriptorProto_options) }
-} // namespace EnumValueDescriptorProto
-} // namespace protobuf
-} // namespace google
+ /* Is this a map-entry message?
+ * TODO: set this flag properly for static descriptors; regenerate
+ * descriptor.upb.c. */
+ bool map_entry;
-namespace google {
-namespace protobuf {
-namespace EnumValueOptions {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_EnumValueOptions) }
-inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumValueOptions_uninterpreted_option) }
-} // namespace EnumValueOptions
-} // namespace protobuf
-} // namespace google
+ /* TODO(haberman): proper extension ranges (there can be multiple). */
+};
-namespace google {
-namespace protobuf {
-namespace FieldDescriptorProto {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_FieldDescriptorProto) }
-inline upb::reffed_ptr<const upb::FieldDef> default_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_default_value) }
-inline upb::reffed_ptr<const upb::FieldDef> extendee() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_extendee) }
-inline upb::reffed_ptr<const upb::FieldDef> label() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_label) }
-inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_name) }
-inline upb::reffed_ptr<const upb::FieldDef> number() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_number) }
-inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_options) }
-inline upb::reffed_ptr<const upb::FieldDef> type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_type) }
-inline upb::reffed_ptr<const upb::FieldDef> type_name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_type_name) }
-inline upb::reffed_ptr<const upb::EnumDef> Label() { RETURN_REFFED(upb::EnumDef, upbdefs_google_protobuf_FieldDescriptorProto_Label) }
-inline upb::reffed_ptr<const upb::EnumDef> Type() { RETURN_REFFED(upb::EnumDef, upbdefs_google_protobuf_FieldDescriptorProto_Type) }
-} // namespace FieldDescriptorProto
-} // namespace protobuf
-} // namespace google
+/* TODO: also support static initialization of the oneofs table. This will be
+ * needed if we compile in descriptors that contain oneofs. */
+#define UPB_MSGDEF_INIT(name, selector_count, submsg_field_count, itof, ntof, \
+ refs, ref2s) \
+ { \
+ UPB_DEF_INIT(name, UPB_DEF_MSG, refs, ref2s), selector_count, \
+ submsg_field_count, itof, ntof, \
+ UPB_EMPTY_STRTABLE_INIT(UPB_CTYPE_PTR), false \
+ }
-namespace google {
-namespace protobuf {
-namespace FieldOptions {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_FieldOptions) }
-inline upb::reffed_ptr<const upb::FieldDef> ctype() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_ctype) }
-inline upb::reffed_ptr<const upb::FieldDef> deprecated() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_deprecated) }
-inline upb::reffed_ptr<const upb::FieldDef> experimental_map_key() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_experimental_map_key) }
-inline upb::reffed_ptr<const upb::FieldDef> lazy() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_lazy) }
-inline upb::reffed_ptr<const upb::FieldDef> packed() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_packed) }
-inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_uninterpreted_option) }
-inline upb::reffed_ptr<const upb::FieldDef> weak() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_weak) }
-inline upb::reffed_ptr<const upb::EnumDef> CType() { RETURN_REFFED(upb::EnumDef, upbdefs_google_protobuf_FieldOptions_CType) }
-} // namespace FieldOptions
-} // namespace protobuf
-} // namespace google
-namespace google {
-namespace protobuf {
-namespace FileDescriptorProto {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_FileDescriptorProto) }
-inline upb::reffed_ptr<const upb::FieldDef> dependency() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_dependency) }
-inline upb::reffed_ptr<const upb::FieldDef> enum_type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_enum_type) }
-inline upb::reffed_ptr<const upb::FieldDef> extension() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_extension) }
-inline upb::reffed_ptr<const upb::FieldDef> message_type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_message_type) }
-inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_name) }
-inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_options) }
-inline upb::reffed_ptr<const upb::FieldDef> package() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_package) }
-inline upb::reffed_ptr<const upb::FieldDef> public_dependency() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_public_dependency) }
-inline upb::reffed_ptr<const upb::FieldDef> service() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_service) }
-inline upb::reffed_ptr<const upb::FieldDef> source_code_info() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_source_code_info) }
-inline upb::reffed_ptr<const upb::FieldDef> weak_dependency() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_weak_dependency) }
-} // namespace FileDescriptorProto
-} // namespace protobuf
-} // namespace google
+/* upb_enumdef ****************************************************************/
-namespace google {
-namespace protobuf {
-namespace FileDescriptorSet {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_FileDescriptorSet) }
-inline upb::reffed_ptr<const upb::FieldDef> file() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorSet_file) }
-} // namespace FileDescriptorSet
-} // namespace protobuf
-} // namespace google
+struct upb_enumdef {
+ upb_def base;
-namespace google {
-namespace protobuf {
-namespace FileOptions {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_FileOptions) }
-inline upb::reffed_ptr<const upb::FieldDef> cc_generic_services() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_cc_generic_services) }
-inline upb::reffed_ptr<const upb::FieldDef> go_package() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_go_package) }
-inline upb::reffed_ptr<const upb::FieldDef> java_generate_equals_and_hash() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_java_generate_equals_and_hash) }
-inline upb::reffed_ptr<const upb::FieldDef> java_generic_services() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_java_generic_services) }
-inline upb::reffed_ptr<const upb::FieldDef> java_multiple_files() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_java_multiple_files) }
-inline upb::reffed_ptr<const upb::FieldDef> java_outer_classname() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_java_outer_classname) }
-inline upb::reffed_ptr<const upb::FieldDef> java_package() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_java_package) }
-inline upb::reffed_ptr<const upb::FieldDef> optimize_for() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_optimize_for) }
-inline upb::reffed_ptr<const upb::FieldDef> py_generic_services() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_py_generic_services) }
-inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_uninterpreted_option) }
-inline upb::reffed_ptr<const upb::EnumDef> OptimizeMode() { RETURN_REFFED(upb::EnumDef, upbdefs_google_protobuf_FileOptions_OptimizeMode) }
-} // namespace FileOptions
-} // namespace protobuf
-} // namespace google
+ upb_strtable ntoi;
+ upb_inttable iton;
+ int32_t defaultval;
+};
-namespace google {
-namespace protobuf {
-namespace MessageOptions {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_MessageOptions) }
-inline upb::reffed_ptr<const upb::FieldDef> message_set_wire_format() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MessageOptions_message_set_wire_format) }
-inline upb::reffed_ptr<const upb::FieldDef> no_standard_descriptor_accessor() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MessageOptions_no_standard_descriptor_accessor) }
-inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MessageOptions_uninterpreted_option) }
-} // namespace MessageOptions
-} // namespace protobuf
-} // namespace google
+#define UPB_ENUMDEF_INIT(name, ntoi, iton, defaultval, refs, ref2s) \
+ { UPB_DEF_INIT(name, UPB_DEF_ENUM, refs, ref2s), ntoi, iton, defaultval }
-namespace google {
-namespace protobuf {
-namespace MethodDescriptorProto {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_MethodDescriptorProto) }
-inline upb::reffed_ptr<const upb::FieldDef> input_type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MethodDescriptorProto_input_type) }
-inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MethodDescriptorProto_name) }
-inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MethodDescriptorProto_options) }
-inline upb::reffed_ptr<const upb::FieldDef> output_type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MethodDescriptorProto_output_type) }
-} // namespace MethodDescriptorProto
-} // namespace protobuf
-} // namespace google
-namespace google {
-namespace protobuf {
-namespace MethodOptions {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_MethodOptions) }
-inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MethodOptions_uninterpreted_option) }
-} // namespace MethodOptions
-} // namespace protobuf
-} // namespace google
+/* upb_oneofdef ***************************************************************/
-namespace google {
-namespace protobuf {
-namespace ServiceDescriptorProto {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_ServiceDescriptorProto) }
-inline upb::reffed_ptr<const upb::FieldDef> method() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_ServiceDescriptorProto_method) }
-inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_ServiceDescriptorProto_name) }
-inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_ServiceDescriptorProto_options) }
-} // namespace ServiceDescriptorProto
-} // namespace protobuf
-} // namespace google
+struct upb_oneofdef {
+ upb_def base;
-namespace google {
-namespace protobuf {
-namespace ServiceOptions {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_ServiceOptions) }
-inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_ServiceOptions_uninterpreted_option) }
-} // namespace ServiceOptions
-} // namespace protobuf
-} // namespace google
+ upb_strtable ntof;
+ upb_inttable itof;
+ const upb_msgdef *parent;
+};
-namespace google {
-namespace protobuf {
-namespace SourceCodeInfo {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_SourceCodeInfo) }
-inline upb::reffed_ptr<const upb::FieldDef> location() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_SourceCodeInfo_location) }
-} // namespace SourceCodeInfo
-} // namespace protobuf
-} // namespace google
+#define UPB_ONEOFDEF_INIT(name, ntof, itof, refs, ref2s) \
+ { UPB_DEF_INIT(name, UPB_DEF_ENUM, refs, ref2s), ntof, itof }
-namespace google {
-namespace protobuf {
-namespace SourceCodeInfo {
-namespace Location {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_SourceCodeInfo_Location) }
-inline upb::reffed_ptr<const upb::FieldDef> leading_comments() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_SourceCodeInfo_Location_leading_comments) }
-inline upb::reffed_ptr<const upb::FieldDef> path() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_SourceCodeInfo_Location_path) }
-inline upb::reffed_ptr<const upb::FieldDef> span() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_SourceCodeInfo_Location_span) }
-inline upb::reffed_ptr<const upb::FieldDef> trailing_comments() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_SourceCodeInfo_Location_trailing_comments) }
-} // namespace Location
-} // namespace SourceCodeInfo
-} // namespace protobuf
-} // namespace google
-namespace google {
-namespace protobuf {
-namespace UninterpretedOption {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_UninterpretedOption) }
-inline upb::reffed_ptr<const upb::FieldDef> aggregate_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_aggregate_value) }
-inline upb::reffed_ptr<const upb::FieldDef> double_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_double_value) }
-inline upb::reffed_ptr<const upb::FieldDef> identifier_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_identifier_value) }
-inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_name) }
-inline upb::reffed_ptr<const upb::FieldDef> negative_int_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_negative_int_value) }
-inline upb::reffed_ptr<const upb::FieldDef> positive_int_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_positive_int_value) }
-inline upb::reffed_ptr<const upb::FieldDef> string_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_string_value) }
-} // namespace UninterpretedOption
-} // namespace protobuf
-} // namespace google
+/* upb_symtab *****************************************************************/
-namespace google {
-namespace protobuf {
-namespace UninterpretedOption {
-namespace NamePart {
-inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_UninterpretedOption_NamePart) }
-inline upb::reffed_ptr<const upb::FieldDef> is_extension() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_NamePart_is_extension) }
-inline upb::reffed_ptr<const upb::FieldDef> name_part() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_NamePart_name_part) }
-} // namespace NamePart
-} // namespace UninterpretedOption
-} // namespace protobuf
-} // namespace google
+struct upb_symtab {
+ upb_refcounted base;
-} // namespace upbdefs
+ upb_strtable symtab;
+};
+#define UPB_SYMTAB_INIT(symtab, refs, ref2s) \
+ { UPB_REFCOUNT_INIT(refs, ref2s), symtab }
-#undef RETURN_REFFED
-#endif // __cplusplus
-#endif // GOOGLE_PROTOBUF_DESCRIPTOR_UPB_H_
+#endif /* UPB_STATICINIT_H_ */
/*
* upb - a minimalist implementation of protocol buffers.
*
@@ -4092,25 +3213,26 @@ class HandlerAttributes;
class Handlers;
template <class T> class Handler;
template <class T> struct CanonicalType;
-} // namespace upb
+} /* namespace upb */
#endif
-UPB_DECLARE_TYPE(upb::BufferHandle, upb_bufhandle);
-UPB_DECLARE_TYPE(upb::BytesHandler, upb_byteshandler);
-UPB_DECLARE_TYPE(upb::HandlerAttributes, upb_handlerattr);
-UPB_DECLARE_TYPE(upb::Handlers, upb_handlers);
-
-// The maximum depth that the handler graph can have. This is a resource limit
-// for the C stack since we sometimes need to recursively traverse the graph.
-// Cycles are ok; the traversal will stop when it detects a cycle, but we must
-// hit the cycle before the maximum depth is reached.
-//
-// If having a single static limit is too inflexible, we can add another variant
-// of Handlers::Freeze that allows specifying this as a parameter.
+UPB_DECLARE_TYPE(upb::BufferHandle, upb_bufhandle)
+UPB_DECLARE_TYPE(upb::BytesHandler, upb_byteshandler)
+UPB_DECLARE_TYPE(upb::HandlerAttributes, upb_handlerattr)
+UPB_DECLARE_DERIVED_TYPE(upb::Handlers, upb::RefCounted,
+ upb_handlers, upb_refcounted)
+
+/* The maximum depth that the handler graph can have. This is a resource limit
+ * for the C stack since we sometimes need to recursively traverse the graph.
+ * Cycles are ok; the traversal will stop when it detects a cycle, but we must
+ * hit the cycle before the maximum depth is reached.
+ *
+ * If having a single static limit is too inflexible, we can add another variant
+ * of Handlers::Freeze that allows specifying this as a parameter. */
#define UPB_MAX_HANDLER_DEPTH 64
-// All the different types of handlers that can be registered.
-// Only needed for the advanced functions in upb::Handlers.
+/* All the different types of handlers that can be registered.
+ * Only needed for the advanced functions in upb::Handlers. */
typedef enum {
UPB_HANDLER_INT32,
UPB_HANDLER_INT64,
@@ -4125,25 +3247,25 @@ typedef enum {
UPB_HANDLER_STARTSUBMSG,
UPB_HANDLER_ENDSUBMSG,
UPB_HANDLER_STARTSEQ,
- UPB_HANDLER_ENDSEQ,
+ UPB_HANDLER_ENDSEQ
} upb_handlertype_t;
#define UPB_HANDLER_MAX (UPB_HANDLER_ENDSEQ+1)
#define UPB_BREAK NULL
-// A convenient definition for when no closure is needed.
+/* A convenient definition for when no closure is needed. */
extern char _upb_noclosure;
#define UPB_NO_CLOSURE &_upb_noclosure
-// A selector refers to a specific field handler in the Handlers object
-// (for example: the STARTSUBMSG handler for field "field15").
+/* A selector refers to a specific field handler in the Handlers object
+ * (for example: the STARTSUBMSG handler for field "field15"). */
typedef int32_t upb_selector_t;
UPB_BEGIN_EXTERN_C
-// Forward-declares for C inline accessors. We need to declare these here
-// so we can "friend" them in the class declarations in C++.
+/* Forward-declares for C inline accessors. We need to declare these here
+ * so we can "friend" them in the class declarations in C++. */
UPB_INLINE upb_func *upb_handlers_gethandler(const upb_handlers *h,
upb_selector_t s);
UPB_INLINE const void *upb_handlerattr_handlerdata(const upb_handlerattr *attr);
@@ -4162,104 +3284,111 @@ UPB_INLINE const char *upb_bufhandle_buf(const upb_bufhandle *h);
UPB_END_EXTERN_C
-// Static selectors for upb::Handlers.
+/* Static selectors for upb::Handlers. */
#define UPB_STARTMSG_SELECTOR 0
#define UPB_ENDMSG_SELECTOR 1
#define UPB_STATIC_SELECTOR_COUNT 2
-// Static selectors for upb::BytesHandler.
+/* Static selectors for upb::BytesHandler. */
#define UPB_STARTSTR_SELECTOR 0
#define UPB_STRING_SELECTOR 1
#define UPB_ENDSTR_SELECTOR 2
typedef void upb_handlerfree(void *d);
-// A set of attributes that accompanies a handler's function pointer.
-UPB_DEFINE_CLASS0(upb::HandlerAttributes,
+#ifdef __cplusplus
+
+/* A set of attributes that accompanies a handler's function pointer. */
+class upb::HandlerAttributes {
public:
HandlerAttributes();
~HandlerAttributes();
- // Sets the handler data that will be passed as the second parameter of the
- // handler. To free this pointer when the handlers are freed, call
- // Handlers::AddCleanup().
+ /* Sets the handler data that will be passed as the second parameter of the
+ * handler. To free this pointer when the handlers are freed, call
+ * Handlers::AddCleanup(). */
bool SetHandlerData(const void *handler_data);
const void* handler_data() const;
- // Use this to specify the type of the closure. This will be checked against
- // all other closure types for handler that use the same closure.
- // Registration will fail if this does not match all other non-NULL closure
- // types.
+ /* Use this to specify the type of the closure. This will be checked against
+ * all other closure types for handler that use the same closure.
+ * Registration will fail if this does not match all other non-NULL closure
+ * types. */
bool SetClosureType(const void *closure_type);
const void* closure_type() const;
- // Use this to specify the type of the returned closure. Only used for
- // Start*{String,SubMessage,Sequence} handlers. This must match the closure
- // type of any handlers that use it (for example, the StringBuf handler must
- // match the closure returned from StartString).
+ /* Use this to specify the type of the returned closure. Only used for
+ * Start*{String,SubMessage,Sequence} handlers. This must match the closure
+ * type of any handlers that use it (for example, the StringBuf handler must
+ * match the closure returned from StartString). */
bool SetReturnClosureType(const void *return_closure_type);
const void* return_closure_type() const;
- // Set to indicate that the handler always returns "ok" (either "true" or a
- // non-NULL closure). This is a hint that can allow code generators to
- // generate more efficient code.
+ /* Set to indicate that the handler always returns "ok" (either "true" or a
+ * non-NULL closure). This is a hint that can allow code generators to
+ * generate more efficient code. */
bool SetAlwaysOk(bool always_ok);
bool always_ok() const;
private:
friend UPB_INLINE const void * ::upb_handlerattr_handlerdata(
const upb_handlerattr *attr);
-,
-UPB_DEFINE_STRUCT0(upb_handlerattr,
+#else
+struct upb_handlerattr {
+#endif
const void *handler_data_;
const void *closure_type_;
const void *return_closure_type_;
bool alwaysok_;
-));
+};
#define UPB_HANDLERATTR_INITIALIZER {NULL, NULL, NULL, false}
typedef struct {
upb_func *func;
- // It is wasteful to include the entire attributes here:
- //
- // * Some of the information is redundant (like storing the closure type
- // separately for each handler that must match).
- // * Some of the info is only needed prior to freeze() (like closure types).
- // * alignment padding wastes a lot of space for alwaysok_.
- //
- // If/when the size and locality of handlers is an issue, we can optimize this
- // not to store the entire attr like this. We do not expose the table's
- // layout to allow this optimization in the future.
+
+ /* It is wasteful to include the entire attributes here:
+ *
+ * * Some of the information is redundant (like storing the closure type
+ * separately for each handler that must match).
+ * * Some of the info is only needed prior to freeze() (like closure types).
+ * * alignment padding wastes a lot of space for alwaysok_.
+ *
+ * If/when the size and locality of handlers is an issue, we can optimize this
+ * not to store the entire attr like this. We do not expose the table's
+ * layout to allow this optimization in the future. */
upb_handlerattr attr;
} upb_handlers_tabent;
-// Extra information about a buffer that is passed to a StringBuf handler.
-// TODO(haberman): allow the handle to be pinned so that it will outlive
-// the handler invocation.
-UPB_DEFINE_CLASS0(upb::BufferHandle,
+#ifdef __cplusplus
+
+/* Extra information about a buffer that is passed to a StringBuf handler.
+ * TODO(haberman): allow the handle to be pinned so that it will outlive
+ * the handler invocation. */
+class upb::BufferHandle {
public:
BufferHandle();
~BufferHandle();
- // The beginning of the buffer. This may be different than the pointer
- // passed to a StringBuf handler because the handler may receive data
- // that is from the middle or end of a larger buffer.
+ /* The beginning of the buffer. This may be different than the pointer
+ * passed to a StringBuf handler because the handler may receive data
+ * that is from the middle or end of a larger buffer. */
const char* buffer() const;
- // The offset within the attached object where this buffer begins. Only
- // meaningful if there is an attached object.
+ /* The offset within the attached object where this buffer begins. Only
+ * meaningful if there is an attached object. */
size_t object_offset() const;
- // Note that object_offset is the offset of "buf" within the attached object.
+ /* Note that object_offset is the offset of "buf" within the attached
+ * object. */
void SetBuffer(const char* buf, size_t object_offset);
- // The BufferHandle can have an "attached object", which can be used to
- // tunnel through a pointer to the buffer's underlying representation.
+ /* The BufferHandle can have an "attached object", which can be used to
+ * tunnel through a pointer to the buffer's underlying representation. */
template <class T>
void SetAttachedObject(const T* obj);
- // Returns NULL if the attached object is not of this type.
+ /* Returns NULL if the attached object is not of this type. */
template <class T>
const T* GetAttachedObject() const;
@@ -4274,26 +3403,29 @@ UPB_DEFINE_CLASS0(upb::BufferHandle,
friend UPB_INLINE const void* ::upb_bufhandle_objtype(
const upb_bufhandle *h);
friend UPB_INLINE const char* ::upb_bufhandle_buf(const upb_bufhandle *h);
-,
-UPB_DEFINE_STRUCT0(upb_bufhandle,
+#else
+struct upb_bufhandle {
+#endif
const char *buf_;
const void *obj_;
const void *objtype_;
size_t objofs_;
-));
-
-// A upb::Handlers object represents the set of handlers associated with a
-// message in the graph of messages. You can think of it as a big virtual
-// table with functions corresponding to all the events that can fire while
-// parsing or visiting a message of a specific type.
-//
-// Any handlers that are not set behave as if they had successfully consumed
-// the value. Any unset Start* handlers will propagate their closure to the
-// inner frame.
-//
-// The easiest way to create the *Handler objects needed by the Set* methods is
-// with the UpbBind() and UpbMakeHandler() macros; see below.
-UPB_DEFINE_CLASS1(upb::Handlers, upb::RefCounted,
+};
+
+#ifdef __cplusplus
+
+/* A upb::Handlers object represents the set of handlers associated with a
+ * message in the graph of messages. You can think of it as a big virtual
+ * table with functions corresponding to all the events that can fire while
+ * parsing or visiting a message of a specific type.
+ *
+ * Any handlers that are not set behave as if they had successfully consumed
+ * the value. Any unset Start* handlers will propagate their closure to the
+ * inner frame.
+ *
+ * The easiest way to create the *Handler objects needed by the Set* methods is
+ * with the UpbBind() and UpbMakeHandler() macros; see below. */
+class upb::Handlers {
public:
typedef upb_selector_t Selector;
typedef upb_handlertype_t Type;
@@ -4318,95 +3450,94 @@ UPB_DEFINE_CLASS1(upb::Handlers, upb::RefCounted,
typedef ValueHandler<double>::H DoubleHandler;
typedef ValueHandler<bool>::H BoolHandler;
- // Any function pointer can be converted to this and converted back to its
- // correct type.
+ /* Any function pointer can be converted to this and converted back to its
+ * correct type. */
typedef void GenericFunction();
typedef void HandlersCallback(const void *closure, upb_handlers *h);
- // Returns a new handlers object for the given frozen msgdef.
- // Returns NULL if memory allocation failed.
+ /* Returns a new handlers object for the given frozen msgdef.
+ * Returns NULL if memory allocation failed. */
static reffed_ptr<Handlers> New(const MessageDef *m);
- // Convenience function for registering a graph of handlers that mirrors the
- // graph of msgdefs for some message. For "m" and all its children a new set
- // of handlers will be created and the given callback will be invoked,
- // allowing the client to register handlers for this message. Note that any
- // subhandlers set by the callback will be overwritten.
+ /* Convenience function for registering a graph of handlers that mirrors the
+ * graph of msgdefs for some message. For "m" and all its children a new set
+ * of handlers will be created and the given callback will be invoked,
+ * allowing the client to register handlers for this message. Note that any
+ * subhandlers set by the callback will be overwritten. */
static reffed_ptr<const Handlers> NewFrozen(const MessageDef *m,
HandlersCallback *callback,
const void *closure);
- // Functionality from upb::RefCounted.
- bool IsFrozen() const;
- void Ref(const void* owner) const;
- void Unref(const void* owner) const;
- void DonateRef(const void *from, const void *to) const;
- void CheckRef(const void *owner) const;
+ /* Functionality from upb::RefCounted. */
+ UPB_REFCOUNTED_CPPMETHODS
- // All handler registration functions return bool to indicate success or
- // failure; details about failures are stored in this status object. If a
- // failure does occur, it must be cleared before the Handlers are frozen,
- // otherwise the freeze() operation will fail. The functions may *only* be
- // used while the Handlers are mutable.
+ /* All handler registration functions return bool to indicate success or
+ * failure; details about failures are stored in this status object. If a
+ * failure does occur, it must be cleared before the Handlers are frozen,
+ * otherwise the freeze() operation will fail. The functions may *only* be
+ * used while the Handlers are mutable. */
const Status* status();
void ClearError();
- // Call to freeze these Handlers. Requires that any SubHandlers are already
- // frozen. For cycles, you must use the static version below and freeze the
- // whole graph at once.
+ /* Call to freeze these Handlers. Requires that any SubHandlers are already
+ * frozen. For cycles, you must use the static version below and freeze the
+ * whole graph at once. */
bool Freeze(Status* s);
- // Freezes the given set of handlers. You may not freeze a handler without
- // also freezing any handlers they point to.
+ /* Freezes the given set of handlers. You may not freeze a handler without
+ * also freezing any handlers they point to. */
static bool Freeze(Handlers*const* handlers, int n, Status* s);
static bool Freeze(const std::vector<Handlers*>& handlers, Status* s);
- // Returns the msgdef associated with this handlers object.
+ /* Returns the msgdef associated with this handlers object. */
const MessageDef* message_def() const;
- // Adds the given pointer and function to the list of cleanup functions that
- // will be run when these handlers are freed. If this pointer has previously
- // been registered, the function returns false and does nothing.
+ /* Adds the given pointer and function to the list of cleanup functions that
+ * will be run when these handlers are freed. If this pointer has previously
+ * been registered, the function returns false and does nothing. */
bool AddCleanup(void *ptr, upb_handlerfree *cleanup);
- // Sets the startmsg handler for the message, which is defined as follows:
- //
- // bool startmsg(MyType* closure) {
- // // Called when the message begins. Returns true if processing should
- // // continue.
- // return true;
- // }
+ /* Sets the startmsg handler for the message, which is defined as follows:
+ *
+ * bool startmsg(MyType* closure) {
+ * // Called when the message begins. Returns true if processing should
+ * // continue.
+ * return true;
+ * }
+ */
bool SetStartMessageHandler(const StartMessageHandler& handler);
- // Sets the endmsg handler for the message, which is defined as follows:
- //
- // bool endmsg(MyType* closure, upb_status *status) {
- // // Called when processing of this message ends, whether in success or
- // // failure. "status" indicates the final status of processing, and
- // // can also be modified in-place to update the final status.
- // }
+ /* Sets the endmsg handler for the message, which is defined as follows:
+ *
+ * bool endmsg(MyType* closure, upb_status *status) {
+ * // Called when processing of this message ends, whether in success or
+ * // failure. "status" indicates the final status of processing, and
+ * // can also be modified in-place to update the final status.
+ * }
+ */
bool SetEndMessageHandler(const EndMessageHandler& handler);
- // Sets the value handler for the given field, which is defined as follows
- // (this is for an int32 field; other field types will pass their native
- // C/C++ type for "val"):
- //
- // bool OnValue(MyClosure* c, const MyHandlerData* d, int32_t val) {
- // // Called when the field's value is encountered. "d" contains
- // // whatever data was bound to this field when it was registered.
- // // Returns true if processing should continue.
- // return true;
- // }
- //
- // handers->SetInt32Handler(f, UpbBind(OnValue, new MyHandlerData(...)));
- //
- // The value type must exactly match f->type().
- // For example, a handler that takes an int32_t parameter may only be used for
- // fields of type UPB_TYPE_INT32 and UPB_TYPE_ENUM.
- //
- // Returns false if the handler failed to register; in this case the cleanup
- // handler (if any) will be called immediately.
+ /* Sets the value handler for the given field, which is defined as follows
+ * (this is for an int32 field; other field types will pass their native
+ * C/C++ type for "val"):
+ *
+ * bool OnValue(MyClosure* c, const MyHandlerData* d, int32_t val) {
+ * // Called when the field's value is encountered. "d" contains
+ * // whatever data was bound to this field when it was registered.
+ * // Returns true if processing should continue.
+ * return true;
+ * }
+ *
+ * handers->SetInt32Handler(f, UpbBind(OnValue, new MyHandlerData(...)));
+ *
+ * The value type must exactly match f->type().
+ * For example, a handler that takes an int32_t parameter may only be used for
+ * fields of type UPB_TYPE_INT32 and UPB_TYPE_ENUM.
+ *
+ * Returns false if the handler failed to register; in this case the cleanup
+ * handler (if any) will be called immediately.
+ */
bool SetInt32Handler (const FieldDef* f, const Int32Handler& h);
bool SetInt64Handler (const FieldDef* f, const Int64Handler& h);
bool SetUInt32Handler(const FieldDef* f, const UInt32Handler& h);
@@ -4415,240 +3546,247 @@ UPB_DEFINE_CLASS1(upb::Handlers, upb::RefCounted,
bool SetDoubleHandler(const FieldDef* f, const DoubleHandler& h);
bool SetBoolHandler (const FieldDef* f, const BoolHandler& h);
- // Like the previous, but templated on the type on the value (ie. int32).
- // This is mostly useful to call from other templates. To call this you must
- // specify the template parameter explicitly, ie:
- // h->SetValueHandler<T>(f, UpbBind(MyHandler<T>, MyData));
+ /* Like the previous, but templated on the type on the value (ie. int32).
+ * This is mostly useful to call from other templates. To call this you must
+ * specify the template parameter explicitly, ie:
+ * h->SetValueHandler<T>(f, UpbBind(MyHandler<T>, MyData)); */
template <class T>
bool SetValueHandler(
const FieldDef *f,
const typename ValueHandler<typename CanonicalType<T>::Type>::H& handler);
- // Sets handlers for a string field, which are defined as follows:
- //
- // MySubClosure* startstr(MyClosure* c, const MyHandlerData* d,
- // size_t size_hint) {
- // // Called when a string value begins. The return value indicates the
- // // closure for the string. "size_hint" indicates the size of the
- // // string if it is known, however if the string is length-delimited
- // // and the end-of-string is not available size_hint will be zero.
- // // This case is indistinguishable from the case where the size is
- // // known to be zero.
- // //
- // // TODO(haberman): is it important to distinguish these cases?
- // // If we had ssize_t as a type we could make -1 "unknown", but
- // // ssize_t is POSIX (not ANSI) and therefore less portable.
- // // In practice I suspect it won't be important to distinguish.
- // return closure;
- // }
- //
- // size_t str(MyClosure* closure, const MyHandlerData* d,
- // const char *str, size_t len) {
- // // Called for each buffer of string data; the multiple physical buffers
- // // are all part of the same logical string. The return value indicates
- // // how many bytes were consumed. If this number is less than "len",
- // // this will also indicate that processing should be halted for now,
- // // like returning false or UPB_BREAK from any other callback. If
- // // number is greater than "len", the excess bytes will be skipped over
- // // and not passed to the callback.
- // return len;
- // }
- //
- // bool endstr(MyClosure* c, const MyHandlerData* d) {
- // // Called when a string value ends. Return value indicates whether
- // // processing should continue.
- // return true;
- // }
+ /* Sets handlers for a string field, which are defined as follows:
+ *
+ * MySubClosure* startstr(MyClosure* c, const MyHandlerData* d,
+ * size_t size_hint) {
+ * // Called when a string value begins. The return value indicates the
+ * // closure for the string. "size_hint" indicates the size of the
+ * // string if it is known, however if the string is length-delimited
+ * // and the end-of-string is not available size_hint will be zero.
+ * // This case is indistinguishable from the case where the size is
+ * // known to be zero.
+ * //
+ * // TODO(haberman): is it important to distinguish these cases?
+ * // If we had ssize_t as a type we could make -1 "unknown", but
+ * // ssize_t is POSIX (not ANSI) and therefore less portable.
+ * // In practice I suspect it won't be important to distinguish.
+ * return closure;
+ * }
+ *
+ * size_t str(MyClosure* closure, const MyHandlerData* d,
+ * const char *str, size_t len) {
+ * // Called for each buffer of string data; the multiple physical buffers
+ * // are all part of the same logical string. The return value indicates
+ * // how many bytes were consumed. If this number is less than "len",
+ * // this will also indicate that processing should be halted for now,
+ * // like returning false or UPB_BREAK from any other callback. If
+ * // number is greater than "len", the excess bytes will be skipped over
+ * // and not passed to the callback.
+ * return len;
+ * }
+ *
+ * bool endstr(MyClosure* c, const MyHandlerData* d) {
+ * // Called when a string value ends. Return value indicates whether
+ * // processing should continue.
+ * return true;
+ * }
+ */
bool SetStartStringHandler(const FieldDef* f, const StartStringHandler& h);
bool SetStringHandler(const FieldDef* f, const StringHandler& h);
bool SetEndStringHandler(const FieldDef* f, const EndFieldHandler& h);
- // Sets the startseq handler, which is defined as follows:
- //
- // MySubClosure *startseq(MyClosure* c, const MyHandlerData* d) {
- // // Called when a sequence (repeated field) begins. The returned
- // // pointer indicates the closure for the sequence (or UPB_BREAK
- // // to interrupt processing).
- // return closure;
- // }
- //
- // h->SetStartSequenceHandler(f, UpbBind(startseq, new MyHandlerData(...)));
- //
- // Returns "false" if "f" does not belong to this message or is not a
- // repeated field.
+ /* Sets the startseq handler, which is defined as follows:
+ *
+ * MySubClosure *startseq(MyClosure* c, const MyHandlerData* d) {
+ * // Called when a sequence (repeated field) begins. The returned
+ * // pointer indicates the closure for the sequence (or UPB_BREAK
+ * // to interrupt processing).
+ * return closure;
+ * }
+ *
+ * h->SetStartSequenceHandler(f, UpbBind(startseq, new MyHandlerData(...)));
+ *
+ * Returns "false" if "f" does not belong to this message or is not a
+ * repeated field.
+ */
bool SetStartSequenceHandler(const FieldDef* f, const StartFieldHandler& h);
- // Sets the startsubmsg handler for the given field, which is defined as
- // follows:
- //
- // MySubClosure* startsubmsg(MyClosure* c, const MyHandlerData* d) {
- // // Called when a submessage begins. The returned pointer indicates the
- // // closure for the sequence (or UPB_BREAK to interrupt processing).
- // return closure;
- // }
- //
- // h->SetStartSubMessageHandler(f, UpbBind(startsubmsg,
- // new MyHandlerData(...)));
- //
- // Returns "false" if "f" does not belong to this message or is not a
- // submessage/group field.
+ /* Sets the startsubmsg handler for the given field, which is defined as
+ * follows:
+ *
+ * MySubClosure* startsubmsg(MyClosure* c, const MyHandlerData* d) {
+ * // Called when a submessage begins. The returned pointer indicates the
+ * // closure for the sequence (or UPB_BREAK to interrupt processing).
+ * return closure;
+ * }
+ *
+ * h->SetStartSubMessageHandler(f, UpbBind(startsubmsg,
+ * new MyHandlerData(...)));
+ *
+ * Returns "false" if "f" does not belong to this message or is not a
+ * submessage/group field.
+ */
bool SetStartSubMessageHandler(const FieldDef* f, const StartFieldHandler& h);
- // Sets the endsubmsg handler for the given field, which is defined as
- // follows:
- //
- // bool endsubmsg(MyClosure* c, const MyHandlerData* d) {
- // // Called when a submessage ends. Returns true to continue processing.
- // return true;
- // }
- //
- // Returns "false" if "f" does not belong to this message or is not a
- // submessage/group field.
+ /* Sets the endsubmsg handler for the given field, which is defined as
+ * follows:
+ *
+ * bool endsubmsg(MyClosure* c, const MyHandlerData* d) {
+ * // Called when a submessage ends. Returns true to continue processing.
+ * return true;
+ * }
+ *
+ * Returns "false" if "f" does not belong to this message or is not a
+ * submessage/group field.
+ */
bool SetEndSubMessageHandler(const FieldDef *f, const EndFieldHandler &h);
- // Starts the endsubseq handler for the given field, which is defined as
- // follows:
- //
- // bool endseq(MyClosure* c, const MyHandlerData* d) {
- // // Called when a sequence ends. Returns true continue processing.
- // return true;
- // }
- //
- // Returns "false" if "f" does not belong to this message or is not a
- // repeated field.
+ /* Starts the endsubseq handler for the given field, which is defined as
+ * follows:
+ *
+ * bool endseq(MyClosure* c, const MyHandlerData* d) {
+ * // Called when a sequence ends. Returns true continue processing.
+ * return true;
+ * }
+ *
+ * Returns "false" if "f" does not belong to this message or is not a
+ * repeated field.
+ */
bool SetEndSequenceHandler(const FieldDef* f, const EndFieldHandler& h);
- // Sets or gets the object that specifies handlers for the given field, which
- // must be a submessage or group. Returns NULL if no handlers are set.
+ /* Sets or gets the object that specifies handlers for the given field, which
+ * must be a submessage or group. Returns NULL if no handlers are set. */
bool SetSubHandlers(const FieldDef* f, const Handlers* sub);
const Handlers* GetSubHandlers(const FieldDef* f) const;
- // Equivalent to GetSubHandlers, but takes the STARTSUBMSG selector for the
- // field.
+ /* Equivalent to GetSubHandlers, but takes the STARTSUBMSG selector for the
+ * field. */
const Handlers* GetSubHandlers(Selector startsubmsg) const;
- // A selector refers to a specific field handler in the Handlers object
- // (for example: the STARTSUBMSG handler for field "field15").
- // On success, returns true and stores the selector in "s".
- // If the FieldDef or Type are invalid, returns false.
- // The returned selector is ONLY valid for Handlers whose MessageDef
- // contains this FieldDef.
+ /* A selector refers to a specific field handler in the Handlers object
+ * (for example: the STARTSUBMSG handler for field "field15").
+ * On success, returns true and stores the selector in "s".
+ * If the FieldDef or Type are invalid, returns false.
+ * The returned selector is ONLY valid for Handlers whose MessageDef
+ * contains this FieldDef. */
static bool GetSelector(const FieldDef* f, Type type, Selector* s);
- // Given a START selector of any kind, returns the corresponding END selector.
+ /* Given a START selector of any kind, returns the corresponding END selector. */
static Selector GetEndSelector(Selector start_selector);
- // Returns the function pointer for this handler. It is the client's
- // responsibility to cast to the correct function type before calling it.
+ /* Returns the function pointer for this handler. It is the client's
+ * responsibility to cast to the correct function type before calling it. */
GenericFunction* GetHandler(Selector selector);
- // Sets the given attributes to the attributes for this selector.
+ /* Sets the given attributes to the attributes for this selector. */
bool GetAttributes(Selector selector, HandlerAttributes* attr);
- // Returns the handler data that was registered with this handler.
+ /* Returns the handler data that was registered with this handler. */
const void* GetHandlerData(Selector selector);
- // Could add any of the following functions as-needed, with some minor
- // implementation changes:
- //
- // const FieldDef* GetFieldDef(Selector selector);
- // static bool IsSequence(Selector selector);
+ /* Could add any of the following functions as-needed, with some minor
+ * implementation changes:
+ *
+ * const FieldDef* GetFieldDef(Selector selector);
+ * static bool IsSequence(Selector selector); */
private:
- UPB_DISALLOW_POD_OPS(Handlers, upb::Handlers);
+ UPB_DISALLOW_POD_OPS(Handlers, upb::Handlers)
friend UPB_INLINE GenericFunction *::upb_handlers_gethandler(
const upb_handlers *h, upb_selector_t s);
friend UPB_INLINE const void *::upb_handlers_gethandlerdata(
const upb_handlers *h, upb_selector_t s);
+#else
+struct upb_handlers {
+#endif
+ upb_refcounted base;
-,
-UPB_DEFINE_STRUCT(upb_handlers, upb_refcounted,
const upb_msgdef *msg;
const upb_handlers **sub;
const void *top_closure_type;
upb_inttable cleanup_;
- upb_status status_; // Used only when mutable.
- upb_handlers_tabent table[1]; // Dynamically-sized field handler array.
-));
-
+ upb_status status_; /* Used only when mutable. */
+ upb_handlers_tabent table[1]; /* Dynamically-sized field handler array. */
+};
#ifdef __cplusplus
namespace upb {
-// Convenience macros for creating a Handler object that is wrapped with a
-// type-safe wrapper function that converts the "void*" parameters/returns
-// of the underlying C API into nice C++ function.
-//
-// Sample usage:
-// void OnValue1(MyClosure* c, const MyHandlerData* d, int32_t val) {
-// // do stuff ...
-// }
-//
-// // Handler that doesn't need any data bound to it.
-// void OnValue2(MyClosure* c, int32_t val) {
-// // do stuff ...
-// }
-//
-// // Handler that returns bool so it can return failure if necessary.
-// bool OnValue3(MyClosure* c, int32_t val) {
-// // do stuff ...
-// return ok;
-// }
-//
-// // Member function handler.
-// class MyClosure {
-// public:
-// void OnValue(int32_t val) {
-// // do stuff ...
-// }
-// };
-//
-// // Takes ownership of the MyHandlerData.
-// handlers->SetInt32Handler(f1, UpbBind(OnValue1, new MyHandlerData(...)));
-// handlers->SetInt32Handler(f2, UpbMakeHandler(OnValue2));
-// handlers->SetInt32Handler(f1, UpbMakeHandler(OnValue3));
-// handlers->SetInt32Handler(f2, UpbMakeHandler(&MyClosure::OnValue));
+/* Convenience macros for creating a Handler object that is wrapped with a
+ * type-safe wrapper function that converts the "void*" parameters/returns
+ * of the underlying C API into nice C++ function.
+ *
+ * Sample usage:
+ * void OnValue1(MyClosure* c, const MyHandlerData* d, int32_t val) {
+ * // do stuff ...
+ * }
+ *
+ * // Handler that doesn't need any data bound to it.
+ * void OnValue2(MyClosure* c, int32_t val) {
+ * // do stuff ...
+ * }
+ *
+ * // Handler that returns bool so it can return failure if necessary.
+ * bool OnValue3(MyClosure* c, int32_t val) {
+ * // do stuff ...
+ * return ok;
+ * }
+ *
+ * // Member function handler.
+ * class MyClosure {
+ * public:
+ * void OnValue(int32_t val) {
+ * // do stuff ...
+ * }
+ * };
+ *
+ * // Takes ownership of the MyHandlerData.
+ * handlers->SetInt32Handler(f1, UpbBind(OnValue1, new MyHandlerData(...)));
+ * handlers->SetInt32Handler(f2, UpbMakeHandler(OnValue2));
+ * handlers->SetInt32Handler(f1, UpbMakeHandler(OnValue3));
+ * handlers->SetInt32Handler(f2, UpbMakeHandler(&MyClosure::OnValue));
+ */
#ifdef UPB_CXX11
-// In C++11, the "template" disambiguator can appear even outside templates,
-// so all calls can safely use this pair of macros.
+/* In C++11, the "template" disambiguator can appear even outside templates,
+ * so all calls can safely use this pair of macros. */
#define UpbMakeHandler(f) upb::MatchFunc(f).template GetFunc<f>()
-// We have to be careful to only evaluate "d" once.
+/* We have to be careful to only evaluate "d" once. */
#define UpbBind(f, d) upb::MatchFunc(f).template GetFunc<f>((d))
#else
-// Prior to C++11, the "template" disambiguator may only appear inside a
-// template, so the regular macro must not use "template"
+/* Prior to C++11, the "template" disambiguator may only appear inside a
+ * template, so the regular macro must not use "template" */
#define UpbMakeHandler(f) upb::MatchFunc(f).GetFunc<f>()
#define UpbBind(f, d) upb::MatchFunc(f).GetFunc<f>((d))
-#endif // UPB_CXX11
+#endif /* UPB_CXX11 */
-// This macro must be used in C++98 for calls from inside a template. But we
-// define this variant in all cases; code that wants to be compatible with both
-// C++98 and C++11 should always use this macro when calling from a template.
+/* This macro must be used in C++98 for calls from inside a template. But we
+ * define this variant in all cases; code that wants to be compatible with both
+ * C++98 and C++11 should always use this macro when calling from a template. */
#define UpbMakeHandlerT(f) upb::MatchFunc(f).template GetFunc<f>()
-// We have to be careful to only evaluate "d" once.
+/* We have to be careful to only evaluate "d" once. */
#define UpbBindT(f, d) upb::MatchFunc(f).template GetFunc<f>((d))
-// Handler: a struct that contains the (handler, data, deleter) tuple that is
-// used to register all handlers. Users can Make() these directly but it's
-// more convenient to use the UpbMakeHandler/UpbBind macros above.
+/* Handler: a struct that contains the (handler, data, deleter) tuple that is
+ * used to register all handlers. Users can Make() these directly but it's
+ * more convenient to use the UpbMakeHandler/UpbBind macros above. */
template <class T> class Handler {
public:
- // The underlying, handler function signature that upb uses internally.
+ /* The underlying, handler function signature that upb uses internally. */
typedef T FuncPtr;
- // Intentionally implicit.
+ /* Intentionally implicit. */
template <class F> Handler(F func);
~Handler();
@@ -4660,7 +3798,7 @@ template <class T> class Handler {
}
}
- UPB_DISALLOW_COPY_AND_ASSIGN(Handler);
+ UPB_DISALLOW_COPY_AND_ASSIGN(Handler)
friend class Handlers;
FuncPtr handler_;
mutable HandlerAttributes attr_;
@@ -4669,15 +3807,15 @@ template <class T> class Handler {
upb_handlerfree *cleanup_func_;
};
-} // namespace upb
+} /* namespace upb */
-#endif // __cplusplus
+#endif /* __cplusplus */
UPB_BEGIN_EXTERN_C
-// Native C API.
+/* Native C API. */
-// Handler function typedefs.
+/* Handler function typedefs. */
typedef bool upb_startmsg_handlerfunc(void *c, const void*);
typedef bool upb_endmsg_handlerfunc(void *c, const void *, upb_status *status);
typedef void* upb_startfield_handlerfunc(void *c, const void *hd);
@@ -4694,10 +3832,10 @@ typedef void *upb_startstr_handlerfunc(void *c, const void *hd,
typedef size_t upb_string_handlerfunc(void *c, const void *hd, const char *buf,
size_t n, const upb_bufhandle* handle);
-// upb_bufhandle
+/* upb_bufhandle */
size_t upb_bufhandle_objofs(const upb_bufhandle *h);
-// upb_handlerattr
+/* upb_handlerattr */
void upb_handlerattr_init(upb_handlerattr *attr);
void upb_handlerattr_uninit(upb_handlerattr *attr);
@@ -4715,7 +3853,7 @@ UPB_INLINE const void *upb_handlerattr_handlerdata(
return attr->handler_data_;
}
-// upb_handlers
+/* upb_handlers */
typedef void upb_handlers_callback(const void *closure, upb_handlers *h);
upb_handlers *upb_handlers_new(const upb_msgdef *m,
const void *owner);
@@ -4723,12 +3861,9 @@ const upb_handlers *upb_handlers_newfrozen(const upb_msgdef *m,
const void *owner,
upb_handlers_callback *callback,
const void *closure);
-bool upb_handlers_isfrozen(const upb_handlers *h);
-void upb_handlers_ref(const upb_handlers *h, const void *owner);
-void upb_handlers_unref(const upb_handlers *h, const void *owner);
-void upb_handlers_donateref(const upb_handlers *h, const void *from,
- const void *to);
-void upb_handlers_checkref(const upb_handlers *h, const void *owner);
+
+/* Include refcounted methods like upb_handlers_ref(). */
+UPB_REFCOUNTED_CMETHODS(upb_handlers, upb_handlers_upcast)
const upb_status *upb_handlers_status(upb_handlers *h);
void upb_handlers_clearerr(upb_handlers *h);
@@ -4799,26 +3934,29 @@ UPB_INLINE const void *upb_handlers_gethandlerdata(const upb_handlers *h,
return upb_handlerattr_handlerdata(&h->table[s].attr);
}
-// Handler types for single fields.
-// Right now we only have one for TYPE_BYTES but ones for other types
-// should follow.
-//
-// These follow the same handlers protocol for fields of a message.
-UPB_DEFINE_CLASS0(upb::BytesHandler,
+#ifdef __cplusplus
+
+/* Handler types for single fields.
+ * Right now we only have one for TYPE_BYTES but ones for other types
+ * should follow.
+ *
+ * These follow the same handlers protocol for fields of a message. */
+class upb::BytesHandler {
public:
BytesHandler();
~BytesHandler();
-,
-UPB_DEFINE_STRUCT0(upb_byteshandler,
+#else
+struct upb_byteshandler {
+#endif
upb_handlers_tabent table[3];
-));
+};
void upb_byteshandler_init(upb_byteshandler *h);
-// Caller must ensure that "d" outlives the handlers.
-// TODO(haberman): should this have a "freeze" operation? It's not necessary
-// for memory management, but could be useful to force immutability and provide
-// a convenient moment to verify that all registration succeeded.
+/* Caller must ensure that "d" outlives the handlers.
+ * TODO(haberman): should this have a "freeze" operation? It's not necessary
+ * for memory management, but could be useful to force immutability and provide
+ * a convenient moment to verify that all registration succeeded. */
bool upb_byteshandler_setstartstr(upb_byteshandler *h,
upb_startstr_handlerfunc *func, void *d);
bool upb_byteshandler_setstring(upb_byteshandler *h,
@@ -4826,7 +3964,7 @@ bool upb_byteshandler_setstring(upb_byteshandler *h,
bool upb_byteshandler_setendstr(upb_byteshandler *h,
upb_endfield_handlerfunc *func, void *d);
-// "Static" methods
+/* "Static" methods */
bool upb_handlers_freeze(upb_handlers *const *handlers, int n, upb_status *s);
upb_handlertype_t upb_handlers_getprimitivehandlertype(const upb_fielddef *f);
bool upb_handlers_getselector(const upb_fielddef *f, upb_handlertype_t type,
@@ -4835,7 +3973,7 @@ UPB_INLINE upb_selector_t upb_handlers_getendselector(upb_selector_t start) {
return start + 1;
}
-// Internal-only.
+/* Internal-only. */
uint32_t upb_handlers_selectorbaseoffset(const upb_fielddef *f);
uint32_t upb_handlers_selectorcount(const upb_fielddef *f);
@@ -4856,21 +3994,56 @@ UPB_END_EXTERN_C
#include <limits.h>
-// Type detection and typedefs for integer types.
-// For platforms where there are multiple 32-bit or 64-bit types, we need to be
-// able to enumerate them so we can properly create overloads for all variants.
-//
-// If any platform existed where there were three integer types with the same
-// size, this would have to become more complicated. For example, short, int,
-// and long could all be 32-bits. Even more diabolically, short, int, long,
-// and long long could all be 64 bits and still be standard-compliant.
-// However, few platforms are this strange, and it's unlikely that upb will be
-// used on the strangest ones.
-
-// Can't count on stdint.h limits like INT32_MAX, because in C++ these are
-// only defined when __STDC_LIMIT_MACROS are defined before the *first* include
-// of stdint.h. We can't guarantee that someone else didn't include these first
-// without defining __STDC_LIMIT_MACROS.
+/* C inline methods. */
+
+/* upb_bufhandle */
+UPB_INLINE void upb_bufhandle_init(upb_bufhandle *h) {
+ h->obj_ = NULL;
+ h->objtype_ = NULL;
+ h->buf_ = NULL;
+ h->objofs_ = 0;
+}
+UPB_INLINE void upb_bufhandle_uninit(upb_bufhandle *h) {
+ UPB_UNUSED(h);
+}
+UPB_INLINE void upb_bufhandle_setobj(upb_bufhandle *h, const void *obj,
+ const void *type) {
+ h->obj_ = obj;
+ h->objtype_ = type;
+}
+UPB_INLINE void upb_bufhandle_setbuf(upb_bufhandle *h, const char *buf,
+ size_t ofs) {
+ h->buf_ = buf;
+ h->objofs_ = ofs;
+}
+UPB_INLINE const void *upb_bufhandle_obj(const upb_bufhandle *h) {
+ return h->obj_;
+}
+UPB_INLINE const void *upb_bufhandle_objtype(const upb_bufhandle *h) {
+ return h->objtype_;
+}
+UPB_INLINE const char *upb_bufhandle_buf(const upb_bufhandle *h) {
+ return h->buf_;
+}
+
+
+#ifdef __cplusplus
+
+/* Type detection and typedefs for integer types.
+ * For platforms where there are multiple 32-bit or 64-bit types, we need to be
+ * able to enumerate them so we can properly create overloads for all variants.
+ *
+ * If any platform existed where there were three integer types with the same
+ * size, this would have to become more complicated. For example, short, int,
+ * and long could all be 32-bits. Even more diabolically, short, int, long,
+ * and long long could all be 64 bits and still be standard-compliant.
+ * However, few platforms are this strange, and it's unlikely that upb will be
+ * used on the strangest ones. */
+
+/* Can't count on stdint.h limits like INT32_MAX, because in C++ these are
+ * only defined when __STDC_LIMIT_MACROS are defined before the *first* include
+ * of stdint.h. We can't guarantee that someone else didn't include these first
+ * without defining __STDC_LIMIT_MACROS. */
#define UPB_INT32_MAX 0x7fffffffLL
#define UPB_INT32_MIN (-UPB_INT32_MAX - 1)
#define UPB_INT64_MAX 0x7fffffffffffffffLL
@@ -4892,8 +4065,8 @@ UPB_END_EXTERN_C
#define UPB_LLONG_IS_64BITS 1
#endif
-// We use macros instead of typedefs so we can undefine them later and avoid
-// leaking them outside this header file.
+/* We use macros instead of typedefs so we can undefine them later and avoid
+ * leaking them outside this header file. */
#if UPB_INT_IS_32BITS
#define UPB_INT32_T int
#define UPB_UINT32_T unsigned int
@@ -4902,12 +4075,12 @@ UPB_END_EXTERN_C
#define UPB_TWO_32BIT_TYPES 1
#define UPB_INT32ALT_T long
#define UPB_UINT32ALT_T unsigned long
-#endif // UPB_LONG_IS_32BITS
+#endif /* UPB_LONG_IS_32BITS */
-#elif UPB_LONG_IS_32BITS // && !UPB_INT_IS_32BITS
+#elif UPB_LONG_IS_32BITS /* && !UPB_INT_IS_32BITS */
#define UPB_INT32_T long
#define UPB_UINT32_T unsigned long
-#endif // UPB_INT_IS_32BITS
+#endif /* UPB_INT_IS_32BITS */
#if UPB_LONG_IS_64BITS
@@ -4918,12 +4091,12 @@ UPB_END_EXTERN_C
#define UPB_TWO_64BIT_TYPES 1
#define UPB_INT64ALT_T long long
#define UPB_UINT64ALT_T unsigned long long
-#endif // UPB_LLONG_IS_64BITS
+#endif /* UPB_LLONG_IS_64BITS */
-#elif UPB_LLONG_IS_64BITS // && !UPB_LONG_IS_64BITS
+#elif UPB_LLONG_IS_64BITS /* && !UPB_LONG_IS_64BITS */
#define UPB_INT64_T long long
#define UPB_UINT64_T unsigned long long
-#endif // UPB_LONG_IS_64BITS
+#endif /* UPB_LONG_IS_64BITS */
#undef UPB_INT32_MAX
#undef UPB_INT32_MIN
@@ -4934,56 +4107,22 @@ UPB_END_EXTERN_C
#undef UPB_LONG_IS_64BITS
#undef UPB_LLONG_IS_64BITS
-// C inline methods.
-
-// upb_bufhandle
-UPB_INLINE void upb_bufhandle_init(upb_bufhandle *h) {
- h->obj_ = NULL;
- h->objtype_ = NULL;
- h->buf_ = NULL;
- h->objofs_ = 0;
-}
-UPB_INLINE void upb_bufhandle_uninit(upb_bufhandle *h) {
- UPB_UNUSED(h);
-}
-UPB_INLINE void upb_bufhandle_setobj(upb_bufhandle *h, const void *obj,
- const void *type) {
- h->obj_ = obj;
- h->objtype_ = type;
-}
-UPB_INLINE void upb_bufhandle_setbuf(upb_bufhandle *h, const char *buf,
- size_t ofs) {
- h->buf_ = buf;
- h->objofs_ = ofs;
-}
-UPB_INLINE const void *upb_bufhandle_obj(const upb_bufhandle *h) {
- return h->obj_;
-}
-UPB_INLINE const void *upb_bufhandle_objtype(const upb_bufhandle *h) {
- return h->objtype_;
-}
-UPB_INLINE const char *upb_bufhandle_buf(const upb_bufhandle *h) {
- return h->buf_;
-}
-
-
-#ifdef __cplusplus
namespace upb {
typedef void CleanupFunc(void *ptr);
-// Template to remove "const" from "const T*" and just return "T*".
-//
-// We define a nonsense default because otherwise it will fail to instantiate as
-// a function parameter type even in cases where we don't expect any caller to
-// actually match the overload.
+/* Template to remove "const" from "const T*" and just return "T*".
+ *
+ * We define a nonsense default because otherwise it will fail to instantiate as
+ * a function parameter type even in cases where we don't expect any caller to
+ * actually match the overload. */
class CouldntRemoveConst {};
template <class T> struct remove_constptr { typedef CouldntRemoveConst type; };
template <class T> struct remove_constptr<const T *> { typedef T *type; };
-// Template that we use below to remove a template specialization from
-// consideration if it matches a specific type.
+/* Template that we use below to remove a template specialization from
+ * consideration if it matches a specific type. */
template <class T, class U> struct disable_if_same { typedef void Type; };
template <class T> struct disable_if_same<T, T> {};
@@ -5020,27 +4159,27 @@ bool is_same<T, U>::value = false;
template<class T>
bool is_same<T, T>::value = true;
-// FuncInfo ////////////////////////////////////////////////////////////////////
+/* FuncInfo *******************************************************************/
-// Info about the user's original, pre-wrapped function.
+/* Info about the user's original, pre-wrapped function. */
template <class C, class R = void>
struct FuncInfo {
- // The type of the closure that the function takes (its first param).
+ /* The type of the closure that the function takes (its first param). */
typedef C Closure;
- // The return type.
+ /* The return type. */
typedef R Return;
};
-// Func ////////////////////////////////////////////////////////////////////////
+/* Func ***********************************************************************/
-// Func1, Func2, Func3: Template classes representing a function and its
-// signature.
-//
-// Since the function is a template parameter, calling the function can be
-// inlined at compile-time and does not require a function pointer at runtime.
-// These functions are not bound to a handler data so have no data or cleanup
-// handler.
+/* Func1, Func2, Func3: Template classes representing a function and its
+ * signature.
+ *
+ * Since the function is a template parameter, calling the function can be
+ * inlined at compile-time and does not require a function pointer at runtime.
+ * These functions are not bound to a handler data so have no data or cleanup
+ * handler. */
struct UnboundFunc {
CleanupFunc *GetCleanup() { return NULL; }
void *GetData() { return NULL; }
@@ -5085,13 +4224,13 @@ struct Func5 : public UnboundFunc {
}
};
-// BoundFunc ///////////////////////////////////////////////////////////////////
+/* BoundFunc ******************************************************************/
-// BoundFunc2, BoundFunc3: Like Func2/Func3 except also contains a value that
-// shall be bound to the function's second parameter.
-//
-// Note that the second parameter is a const pointer, but our stored bound value
-// is non-const so we can free it when the handlers are destroyed.
+/* BoundFunc2, BoundFunc3: Like Func2/Func3 except also contains a value that
+ * shall be bound to the function's second parameter.
+ *
+ * Note that the second parameter is a const pointer, but our stored bound value
+ * is non-const so we can free it when the handlers are destroyed. */
template <class T>
struct BoundFunc {
typedef typename remove_constptr<T>::type MutableP2;
@@ -5131,13 +4270,13 @@ struct BoundFunc5 : public BoundFunc<P2> {
explicit BoundFunc5(typename Base::MutableP2 arg) : Base(arg) {}
};
-// FuncSig /////////////////////////////////////////////////////////////////////
+/* FuncSig ********************************************************************/
-// FuncSig1, FuncSig2, FuncSig3: template classes reflecting a function
-// *signature*, but without a specific function attached.
-//
-// These classes contain member functions that can be invoked with a
-// specific function to return a Func/BoundFunc class.
+/* FuncSig1, FuncSig2, FuncSig3: template classes reflecting a function
+ * *signature*, but without a specific function attached.
+ *
+ * These classes contain member functions that can be invoked with a
+ * specific function to return a Func/BoundFunc class. */
template <class R, class P1>
struct FuncSig1 {
template <R F(P1)>
@@ -5202,41 +4341,41 @@ struct FuncSig5 {
}
};
-// Overloaded template function that can construct the appropriate FuncSig*
-// class given a function pointer by deducing the template parameters.
+/* Overloaded template function that can construct the appropriate FuncSig*
+ * class given a function pointer by deducing the template parameters. */
template <class R, class P1>
inline FuncSig1<R, P1> MatchFunc(R (*f)(P1)) {
- UPB_UNUSED(f); // Only used for template parameter deduction.
+ UPB_UNUSED(f); /* Only used for template parameter deduction. */
return FuncSig1<R, P1>();
}
template <class R, class P1, class P2>
inline FuncSig2<R, P1, P2> MatchFunc(R (*f)(P1, P2)) {
- UPB_UNUSED(f); // Only used for template parameter deduction.
+ UPB_UNUSED(f); /* Only used for template parameter deduction. */
return FuncSig2<R, P1, P2>();
}
template <class R, class P1, class P2, class P3>
inline FuncSig3<R, P1, P2, P3> MatchFunc(R (*f)(P1, P2, P3)) {
- UPB_UNUSED(f); // Only used for template parameter deduction.
+ UPB_UNUSED(f); /* Only used for template parameter deduction. */
return FuncSig3<R, P1, P2, P3>();
}
template <class R, class P1, class P2, class P3, class P4>
inline FuncSig4<R, P1, P2, P3, P4> MatchFunc(R (*f)(P1, P2, P3, P4)) {
- UPB_UNUSED(f); // Only used for template parameter deduction.
+ UPB_UNUSED(f); /* Only used for template parameter deduction. */
return FuncSig4<R, P1, P2, P3, P4>();
}
template <class R, class P1, class P2, class P3, class P4, class P5>
inline FuncSig5<R, P1, P2, P3, P4, P5> MatchFunc(R (*f)(P1, P2, P3, P4, P5)) {
- UPB_UNUSED(f); // Only used for template parameter deduction.
+ UPB_UNUSED(f); /* Only used for template parameter deduction. */
return FuncSig5<R, P1, P2, P3, P4, P5>();
}
-// MethodSig ///////////////////////////////////////////////////////////////////
+/* MethodSig ******************************************************************/
-// CallMethod*: a function template that calls a given method.
+/* CallMethod*: a function template that calls a given method. */
template <class R, class C, R (C::*F)()>
R CallMethod0(C *obj) {
return ((*obj).*F)();
@@ -5263,10 +4402,10 @@ R CallMethod4(C *obj, P1 arg1, P2 arg2, P3 arg3, P4 arg4) {
return ((*obj).*F)(arg1, arg2, arg3, arg4);
}
-// MethodSig: like FuncSig, but for member functions.
-//
-// GetFunc() returns a normal FuncN object, so after calling GetFunc() no
-// more logic is required to special-case methods.
+/* MethodSig: like FuncSig, but for member functions.
+ *
+ * GetFunc() returns a normal FuncN object, so after calling GetFunc() no
+ * more logic is required to special-case methods. */
template <class R, class C>
struct MethodSig0 {
template <R (C::*F)()>
@@ -5347,61 +4486,61 @@ struct MethodSig4 {
template <class R, class C>
inline MethodSig0<R, C> MatchFunc(R (C::*f)()) {
- UPB_UNUSED(f); // Only used for template parameter deduction.
+ UPB_UNUSED(f); /* Only used for template parameter deduction. */
return MethodSig0<R, C>();
}
template <class R, class C, class P1>
inline MethodSig1<R, C, P1> MatchFunc(R (C::*f)(P1)) {
- UPB_UNUSED(f); // Only used for template parameter deduction.
+ UPB_UNUSED(f); /* Only used for template parameter deduction. */
return MethodSig1<R, C, P1>();
}
template <class R, class C, class P1, class P2>
inline MethodSig2<R, C, P1, P2> MatchFunc(R (C::*f)(P1, P2)) {
- UPB_UNUSED(f); // Only used for template parameter deduction.
+ UPB_UNUSED(f); /* Only used for template parameter deduction. */
return MethodSig2<R, C, P1, P2>();
}
template <class R, class C, class P1, class P2, class P3>
inline MethodSig3<R, C, P1, P2, P3> MatchFunc(R (C::*f)(P1, P2, P3)) {
- UPB_UNUSED(f); // Only used for template parameter deduction.
+ UPB_UNUSED(f); /* Only used for template parameter deduction. */
return MethodSig3<R, C, P1, P2, P3>();
}
template <class R, class C, class P1, class P2, class P3, class P4>
inline MethodSig4<R, C, P1, P2, P3, P4> MatchFunc(R (C::*f)(P1, P2, P3, P4)) {
- UPB_UNUSED(f); // Only used for template parameter deduction.
+ UPB_UNUSED(f); /* Only used for template parameter deduction. */
return MethodSig4<R, C, P1, P2, P3, P4>();
}
-// MaybeWrapReturn /////////////////////////////////////////////////////////////
+/* MaybeWrapReturn ************************************************************/
-// Template class that attempts to wrap the return value of the function so it
-// matches the expected type. There are two main adjustments it may make:
-//
-// 1. If the function returns void, make it return the expected type and with
-// a value that always indicates success.
-// 2. If the function returns bool, make it return the expected type with a
-// value that indicates success or failure.
-//
-// The "expected type" for return is:
-// 1. void* for start handlers. If the closure parameter has a different type
-// we will cast it to void* for the return in the success case.
-// 2. size_t for string buffer handlers.
-// 3. bool for everything else.
+/* Template class that attempts to wrap the return value of the function so it
+ * matches the expected type. There are two main adjustments it may make:
+ *
+ * 1. If the function returns void, make it return the expected type and with
+ * a value that always indicates success.
+ * 2. If the function returns bool, make it return the expected type with a
+ * value that indicates success or failure.
+ *
+ * The "expected type" for return is:
+ * 1. void* for start handlers. If the closure parameter has a different type
+ * we will cast it to void* for the return in the success case.
+ * 2. size_t for string buffer handlers.
+ * 3. bool for everything else. */
-// Template parameters are FuncN type and desired return type.
+/* Template parameters are FuncN type and desired return type. */
template <class F, class R, class Enable = void>
struct MaybeWrapReturn;
-// If the return type matches, return the given function unwrapped.
+/* If the return type matches, return the given function unwrapped. */
template <class F>
struct MaybeWrapReturn<F, typename F::Return> {
typedef F Func;
};
-// Function wrapper that munges the return value from void to (bool)true.
+/* Function wrapper that munges the return value from void to (bool)true. */
template <class P1, class P2, void F(P1, P2)>
bool ReturnTrue2(P1 p1, P2 p2) {
F(p1, p2);
@@ -5414,7 +4553,7 @@ bool ReturnTrue3(P1 p1, P2 p2, P3 p3) {
return true;
}
-// Function wrapper that munges the return value from void to (void*)arg1
+/* Function wrapper that munges the return value from void to (void*)arg1 */
template <class P1, class P2, void F(P1, P2)>
void *ReturnClosure2(P1 p1, P2 p2) {
F(p1, p2);
@@ -5427,7 +4566,7 @@ void *ReturnClosure3(P1 p1, P2 p2, P3 p3) {
return p1;
}
-// Function wrapper that munges the return value from R to void*.
+/* Function wrapper that munges the return value from R to void*. */
template <class R, class P1, class P2, R F(P1, P2)>
void *CastReturnToVoidPtr2(P1 p1, P2 p2) {
return F(p1, p2);
@@ -5438,7 +4577,7 @@ void *CastReturnToVoidPtr3(P1 p1, P2 p2, P3 p3) {
return F(p1, p2, p3);
}
-// Function wrapper that munges the return value from bool to void*.
+/* Function wrapper that munges the return value from bool to void*. */
template <class P1, class P2, bool F(P1, P2)>
void *ReturnClosureOrBreak2(P1 p1, P2 p2) {
return F(p1, p2) ? p1 : UPB_BREAK;
@@ -5449,7 +4588,7 @@ void *ReturnClosureOrBreak3(P1 p1, P2 p2, P3 p3) {
return F(p1, p2, p3) ? p1 : UPB_BREAK;
}
-// For the string callback, which takes five params, returns the size param.
+/* For the string callback, which takes five params, returns the size param. */
template <class P1, class P2,
void F(P1, P2, const char *, size_t, const BufferHandle *)>
size_t ReturnStringLen(P1 p1, P2 p2, const char *p3, size_t p4,
@@ -5458,8 +4597,8 @@ size_t ReturnStringLen(P1 p1, P2 p2, const char *p3, size_t p4,
return p4;
}
-// For the string callback, which takes five params, returns the size param or
-// zero.
+/* For the string callback, which takes five params, returns the size param or
+ * zero. */
template <class P1, class P2,
bool F(P1, P2, const char *, size_t, const BufferHandle *)>
size_t ReturnNOr0(P1 p1, P2 p2, const char *p3, size_t p4,
@@ -5467,8 +4606,8 @@ size_t ReturnNOr0(P1 p1, P2 p2, const char *p3, size_t p4,
return F(p1, p2, p3, p4, p5) ? p4 : 0;
}
-// If we have a function returning void but want a function returning bool, wrap
-// it in a function that returns true.
+/* If we have a function returning void but want a function returning bool, wrap
+ * it in a function that returns true. */
template <class P1, class P2, void F(P1, P2), class I>
struct MaybeWrapReturn<Func2<void, P1, P2, F, I>, bool> {
typedef Func2<bool, P1, P2, ReturnTrue2<P1, P2, F>, I> Func;
@@ -5479,8 +4618,8 @@ struct MaybeWrapReturn<Func3<void, P1, P2, P3, F, I>, bool> {
typedef Func3<bool, P1, P2, P3, ReturnTrue3<P1, P2, P3, F>, I> Func;
};
-// If our function returns void but we want one returning void*, wrap it in a
-// function that returns the first argument.
+/* If our function returns void but we want one returning void*, wrap it in a
+ * function that returns the first argument. */
template <class P1, class P2, void F(P1, P2), class I>
struct MaybeWrapReturn<Func2<void, P1, P2, F, I>, void *> {
typedef Func2<void *, P1, P2, ReturnClosure2<P1, P2, F>, I> Func;
@@ -5491,8 +4630,8 @@ struct MaybeWrapReturn<Func3<void, P1, P2, P3, F, I>, void *> {
typedef Func3<void *, P1, P2, P3, ReturnClosure3<P1, P2, P3, F>, I> Func;
};
-// If our function returns R* but we want one returning void*, wrap it in a
-// function that casts to void*.
+/* If our function returns R* but we want one returning void*, wrap it in a
+ * function that casts to void*. */
template <class R, class P1, class P2, R *F(P1, P2), class I>
struct MaybeWrapReturn<Func2<R *, P1, P2, F, I>, void *,
typename disable_if_same<R *, void *>::Type> {
@@ -5506,8 +4645,8 @@ struct MaybeWrapReturn<Func3<R *, P1, P2, P3, F, I>, void *,
Func;
};
-// If our function returns bool but we want one returning void*, wrap it in a
-// function that returns either the first param or UPB_BREAK.
+/* If our function returns bool but we want one returning void*, wrap it in a
+ * function that returns either the first param or UPB_BREAK. */
template <class P1, class P2, bool F(P1, P2), class I>
struct MaybeWrapReturn<Func2<bool, P1, P2, F, I>, void *> {
typedef Func2<void *, P1, P2, ReturnClosureOrBreak2<P1, P2, F>, I> Func;
@@ -5519,8 +4658,8 @@ struct MaybeWrapReturn<Func3<bool, P1, P2, P3, F, I>, void *> {
Func;
};
-// If our function returns void but we want one returning size_t, wrap it in a
-// function that returns the size argument.
+/* If our function returns void but we want one returning size_t, wrap it in a
+ * function that returns the size argument. */
template <class P1, class P2,
void F(P1, P2, const char *, size_t, const BufferHandle *), class I>
struct MaybeWrapReturn<
@@ -5530,8 +4669,8 @@ struct MaybeWrapReturn<
ReturnStringLen<P1, P2, F>, I> Func;
};
-// If our function returns bool but we want one returning size_t, wrap it in a
-// function that returns either 0 or the buf size.
+/* If our function returns bool but we want one returning size_t, wrap it in a
+ * function that returns either 0 or the buf size. */
template <class P1, class P2,
bool F(P1, P2, const char *, size_t, const BufferHandle *), class I>
struct MaybeWrapReturn<
@@ -5541,16 +4680,16 @@ struct MaybeWrapReturn<
ReturnNOr0<P1, P2, F>, I> Func;
};
-// ConvertParams ///////////////////////////////////////////////////////////////
+/* ConvertParams **************************************************************/
-// Template class that converts the function parameters if necessary, and
-// ignores the HandlerData parameter if appropriate.
-//
-// Template parameter is the are FuncN function type.
+/* Template class that converts the function parameters if necessary, and
+ * ignores the HandlerData parameter if appropriate.
+ *
+ * Template parameter is the are FuncN function type. */
template <class F, class T>
struct ConvertParams;
-// Function that discards the handler data parameter.
+/* Function that discards the handler data parameter. */
template <class R, class P1, R F(P1)>
R IgnoreHandlerData2(void *p1, const void *hd) {
UPB_UNUSED(hd);
@@ -5584,7 +4723,7 @@ R IgnoreHandlerDataIgnoreHandle(void *p1, const void *hd, const char *p2,
return F(static_cast<P1>(p1), p2, p3);
}
-// Function that casts the handler data parameter.
+/* Function that casts the handler data parameter. */
template <class R, class P1, class P2, R F(P1, P2)>
R CastHandlerData2(void *c, const void *hd) {
return F(static_cast<P1>(c), static_cast<P2>(hd));
@@ -5609,7 +4748,7 @@ R CastHandlerDataIgnoreHandle(void *c, const void *hd, const char *p3,
return F(static_cast<P1>(c), static_cast<P2>(hd), p3, p4);
}
-// For unbound functions, ignore the handler data.
+/* For unbound functions, ignore the handler data. */
template <class R, class P1, R F(P1), class I, class T>
struct ConvertParams<Func1<R, P1, F, I>, T> {
typedef Func2<R, void *, const void *, IgnoreHandlerData2<R, P1, F>, I> Func;
@@ -5623,8 +4762,8 @@ struct ConvertParams<Func2<R, P1, P2, F, I>,
IgnoreHandlerData3<R, P1, P3_2, P2, F>, I> Func;
};
-// For StringBuffer only; this ignores both the handler data and the
-// BufferHandle.
+/* For StringBuffer only; this ignores both the handler data and the
+ * BufferHandle. */
template <class R, class P1, R F(P1, const char *, size_t), class I, class T>
struct ConvertParams<Func3<R, P1, const char *, size_t, F, I>, T> {
typedef Func5<R, void *, const void *, const char *, size_t,
@@ -5639,7 +4778,7 @@ struct ConvertParams<Func4<R, P1, P2, P3, P4, F, I>, T> {
IgnoreHandlerData5<R, P1, P2, P3, P4, F>, I> Func;
};
-// For bound functions, cast the handler data.
+/* For bound functions, cast the handler data. */
template <class R, class P1, class P2, R F(P1, P2), class I, class T>
struct ConvertParams<BoundFunc2<R, P1, P2, F, I>, T> {
typedef Func2<R, void *, const void *, CastHandlerData2<R, P1, P2, F>, I>
@@ -5654,7 +4793,7 @@ struct ConvertParams<BoundFunc3<R, P1, P2, P3, F, I>,
CastHandlerData3<R, P1, P2, P3_2, P3, F>, I> Func;
};
-// For StringBuffer only; this ignores the BufferHandle.
+/* For StringBuffer only; this ignores the BufferHandle. */
template <class R, class P1, class P2, R F(P1, P2, const char *, size_t),
class I, class T>
struct ConvertParams<BoundFunc4<R, P1, P2, const char *, size_t, F, I>, T> {
@@ -5670,8 +4809,8 @@ struct ConvertParams<BoundFunc5<R, P1, P2, P3, P4, P5, F, I>, T> {
CastHandlerData5<R, P1, P2, P3, P4, P5, F>, I> Func;
};
-// utype/ltype are upper/lower-case, ctype is canonical C type, vtype is
-// variant C type.
+/* utype/ltype are upper/lower-case, ctype is canonical C type, vtype is
+ * variant C type. */
#define TYPE_METHODS(utype, ltype, ctype, vtype) \
template <> struct CanonicalType<vtype> { \
typedef ctype Type; \
@@ -5686,22 +4825,22 @@ struct ConvertParams<BoundFunc5<R, P1, P2, P3, P4, P5, F, I>, T> {
return upb_handlers_set##ltype(this, f, handler.handler_, &handler.attr_); \
} \
-TYPE_METHODS(Double, double, double, double);
-TYPE_METHODS(Float, float, float, float);
-TYPE_METHODS(UInt64, uint64, uint64_t, UPB_UINT64_T);
-TYPE_METHODS(UInt32, uint32, uint32_t, UPB_UINT32_T);
-TYPE_METHODS(Int64, int64, int64_t, UPB_INT64_T);
-TYPE_METHODS(Int32, int32, int32_t, UPB_INT32_T);
-TYPE_METHODS(Bool, bool, bool, bool);
+TYPE_METHODS(Double, double, double, double)
+TYPE_METHODS(Float, float, float, float)
+TYPE_METHODS(UInt64, uint64, uint64_t, UPB_UINT64_T)
+TYPE_METHODS(UInt32, uint32, uint32_t, UPB_UINT32_T)
+TYPE_METHODS(Int64, int64, int64_t, UPB_INT64_T)
+TYPE_METHODS(Int32, int32, int32_t, UPB_INT32_T)
+TYPE_METHODS(Bool, bool, bool, bool)
#ifdef UPB_TWO_32BIT_TYPES
-TYPE_METHODS(Int32, int32, int32_t, UPB_INT32ALT_T);
-TYPE_METHODS(UInt32, uint32, uint32_t, UPB_UINT32ALT_T);
+TYPE_METHODS(Int32, int32, int32_t, UPB_INT32ALT_T)
+TYPE_METHODS(UInt32, uint32, uint32_t, UPB_UINT32ALT_T)
#endif
#ifdef UPB_TWO_64BIT_TYPES
-TYPE_METHODS(Int64, int64, int64_t, UPB_INT64ALT_T);
-TYPE_METHODS(UInt64, uint64, uint64_t, UPB_UINT64ALT_T);
+TYPE_METHODS(Int64, int64, int64_t, UPB_INT64ALT_T)
+TYPE_METHODS(UInt64, uint64, uint64_t, UPB_UINT64ALT_T)
#endif
#undef TYPE_METHODS
@@ -5709,7 +4848,8 @@ template <> struct CanonicalType<Status*> {
typedef Status* Type;
};
-// Type methods that are only one-per-canonical-type and not one-per-cvariant.
+/* Type methods that are only one-per-canonical-type and not
+ * one-per-cvariant. */
#define TYPE_METHODS(utype, ctype) \
inline bool Handlers::Set##utype##Handler(const FieldDef *f, \
@@ -5717,13 +4857,13 @@ template <> struct CanonicalType<Status*> {
return SetValueHandler<ctype>(f, h); \
} \
-TYPE_METHODS(Double, double);
-TYPE_METHODS(Float, float);
-TYPE_METHODS(UInt64, uint64_t);
-TYPE_METHODS(UInt32, uint32_t);
-TYPE_METHODS(Int64, int64_t);
-TYPE_METHODS(Int32, int32_t);
-TYPE_METHODS(Bool, bool);
+TYPE_METHODS(Double, double)
+TYPE_METHODS(Float, float)
+TYPE_METHODS(UInt64, uint64_t)
+TYPE_METHODS(UInt32, uint32_t)
+TYPE_METHODS(Int64, int64_t)
+TYPE_METHODS(Int32, int32_t)
+TYPE_METHODS(Bool, bool)
#undef TYPE_METHODS
template <class F> struct ReturnOf;
@@ -5766,23 +4906,23 @@ inline Handler<T>::Handler(F func)
ReturnWrappedFunc;
handler_ = ReturnWrappedFunc().Call;
- // Set attributes based on what templates can statically tell us about the
- // user's function.
+ /* Set attributes based on what templates can statically tell us about the
+ * user's function. */
- // If the original function returns void, then we know that we wrapped it to
- // always return ok.
+ /* If the original function returns void, then we know that we wrapped it to
+ * always return ok. */
bool always_ok = is_same<typename F::FuncInfo::Return, void>::value;
attr_.SetAlwaysOk(always_ok);
- // Closure parameter and return type.
+ /* Closure parameter and return type. */
attr_.SetClosureType(UniquePtrForType<typename F::FuncInfo::Closure>());
- // We use the closure type (from the first parameter) if the return type is
- // void or bool, since these are the two cases we wrap to return the closure's
- // type anyway.
- //
- // This is all nonsense for non START* handlers, but it doesn't matter because
- // in that case the value will be ignored.
+ /* We use the closure type (from the first parameter) if the return type is
+ * void or bool, since these are the two cases we wrap to return the closure's
+ * type anyway.
+ *
+ * This is all nonsense for non START* handlers, but it doesn't matter because
+ * in that case the value will be ignored. */
typedef typename FirstUnlessVoidOrBool<typename F::FuncInfo::Return,
typename F::FuncInfo::Closure>::value
EffectiveReturn;
@@ -5853,19 +4993,6 @@ inline reffed_ptr<const Handlers> Handlers::NewFrozen(
const upb_handlers *h = upb_handlers_newfrozen(m, &h, callback, closure);
return reffed_ptr<const Handlers>(h, &h);
}
-inline bool Handlers::IsFrozen() const { return upb_handlers_isfrozen(this); }
-inline void Handlers::Ref(const void *owner) const {
- upb_handlers_ref(this, owner);
-}
-inline void Handlers::Unref(const void *owner) const {
- upb_handlers_unref(this, owner);
-}
-inline void Handlers::DonateRef(const void *from, const void *to) const {
- upb_handlers_donateref(this, from, to);
-}
-inline void Handlers::CheckRef(const void *owner) const {
- upb_handlers_checkref(this, owner);
-}
inline const Status* Handlers::status() {
return upb_handlers_status(this);
}
@@ -5981,9 +5108,9 @@ inline BytesHandler::BytesHandler() {
inline BytesHandler::~BytesHandler() {}
-} // namespace upb
+} /* namespace upb */
-#endif // __cplusplus
+#endif /* __cplusplus */
#undef UPB_TWO_32BIT_TYPES
@@ -5997,9 +5124,9 @@ inline BytesHandler::~BytesHandler() {}
#undef UPB_INT64ALT_T
#undef UPB_UINT64ALT_T
-#endif // UPB_HANDLERS_INL_H_
+#endif /* UPB_HANDLERS_INL_H_ */
-#endif // UPB_HANDLERS_H
+#endif /* UPB_HANDLERS_H */
/*
* upb - a minimalist implementation of protocol buffers.
*
@@ -6028,32 +5155,34 @@ class SeededAllocator;
}
#endif
-UPB_DECLARE_TYPE(upb::Environment, upb_env);
-UPB_DECLARE_TYPE(upb::SeededAllocator, upb_seededalloc);
+UPB_DECLARE_TYPE(upb::Environment, upb_env)
+UPB_DECLARE_TYPE(upb::SeededAllocator, upb_seededalloc)
typedef void *upb_alloc_func(void *ud, void *ptr, size_t oldsize, size_t size);
typedef void upb_cleanup_func(void *ud);
typedef bool upb_error_func(void *ud, const upb_status *status);
-// An environment is *not* thread-safe.
-UPB_DEFINE_CLASS0(upb::Environment,
+#ifdef __cplusplus
+
+/* An environment is *not* thread-safe. */
+class upb::Environment {
public:
Environment();
~Environment();
- // Set a custom memory allocation function for the environment. May ONLY
- // be called before any calls to Malloc()/Realloc()/AddCleanup() below.
- // If this is not called, the system realloc() function will be used.
- // The given user pointer "ud" will be passed to the allocation function.
- //
- // The allocation function will not receive corresponding "free" calls. it
- // must ensure that the memory is valid for the lifetime of the Environment,
- // but it may be reclaimed any time thereafter. The likely usage is that
- // "ud" points to a stateful allocator, and that the allocator frees all
- // memory, arena-style, when it is destroyed. In this case the allocator must
- // outlive the Environment. Another possibility is that the allocation
- // function returns GC-able memory that is guaranteed to be GC-rooted for the
- // life of the Environment.
+ /* Set a custom memory allocation function for the environment. May ONLY
+ * be called before any calls to Malloc()/Realloc()/AddCleanup() below.
+ * If this is not called, the system realloc() function will be used.
+ * The given user pointer "ud" will be passed to the allocation function.
+ *
+ * The allocation function will not receive corresponding "free" calls. it
+ * must ensure that the memory is valid for the lifetime of the Environment,
+ * but it may be reclaimed any time thereafter. The likely usage is that
+ * "ud" points to a stateful allocator, and that the allocator frees all
+ * memory, arena-style, when it is destroyed. In this case the allocator must
+ * outlive the Environment. Another possibility is that the allocation
+ * function returns GC-able memory that is guaranteed to be GC-rooted for the
+ * life of the Environment. */
void SetAllocationFunction(upb_alloc_func* alloc, void* ud);
template<class T>
@@ -6061,74 +5190,76 @@ UPB_DEFINE_CLASS0(upb::Environment,
SetAllocationFunction(allocator->GetAllocationFunction(), allocator);
}
- // Set a custom error reporting function.
+ /* Set a custom error reporting function. */
void SetErrorFunction(upb_error_func* func, void* ud);
- // Set the error reporting function to simply copy the status to the given
- // status and abort.
+ /* Set the error reporting function to simply copy the status to the given
+ * status and abort. */
void ReportErrorsTo(Status* status);
- // Returns true if all allocations and AddCleanup() calls have succeeded,
- // and no errors were reported with ReportError() (except ones that recovered
- // successfully).
+ /* Returns true if all allocations and AddCleanup() calls have succeeded,
+ * and no errors were reported with ReportError() (except ones that recovered
+ * successfully). */
bool ok() const;
- //////////////////////////////////////////////////////////////////////////////
- // Functions for use by encoders/decoders.
+ /* Functions for use by encoders/decoders. **********************************/
- // Reports an error to this environment's callback, returning true if
- // the caller should try to recover.
+ /* Reports an error to this environment's callback, returning true if
+ * the caller should try to recover. */
bool ReportError(const Status* status);
- // Allocate memory. Uses the environment's allocation function.
- //
- // There is no need to free(). All memory will be freed automatically, but is
- // guaranteed to outlive the Environment.
+ /* Allocate memory. Uses the environment's allocation function.
+ *
+ * There is no need to free(). All memory will be freed automatically, but is
+ * guaranteed to outlive the Environment. */
void* Malloc(size_t size);
- // Reallocate memory. Preserves "oldsize" bytes from the existing buffer
- // Requires: oldsize <= existing_size.
- //
- // TODO(haberman): should we also enforce that oldsize <= size?
+ /* Reallocate memory. Preserves "oldsize" bytes from the existing buffer
+ * Requires: oldsize <= existing_size.
+ *
+ * TODO(haberman): should we also enforce that oldsize <= size? */
void* Realloc(void* ptr, size_t oldsize, size_t size);
- // Add a cleanup function to run when the environment is destroyed.
- // Returns false on out-of-memory.
- //
- // The first call to AddCleanup() after SetAllocationFunction() is guaranteed
- // to return true -- this makes it possible to robustly set a cleanup handler
- // for a custom allocation function.
+ /* Add a cleanup function to run when the environment is destroyed.
+ * Returns false on out-of-memory.
+ *
+ * The first call to AddCleanup() after SetAllocationFunction() is guaranteed
+ * to return true -- this makes it possible to robustly set a cleanup handler
+ * for a custom allocation function. */
bool AddCleanup(upb_cleanup_func* func, void* ud);
- // Total number of bytes that have been allocated. It is undefined what
- // Realloc() does to this counter.
+ /* Total number of bytes that have been allocated. It is undefined what
+ * Realloc() does to this counter. */
size_t BytesAllocated() const;
private:
- UPB_DISALLOW_COPY_AND_ASSIGN(Environment);
-,
-UPB_DEFINE_STRUCT0(upb_env,
+ UPB_DISALLOW_COPY_AND_ASSIGN(Environment)
+
+#else
+struct upb_env {
+#endif /* __cplusplus */
+
bool ok_;
size_t bytes_allocated;
- // Alloc function.
+ /* Alloc function. */
upb_alloc_func *alloc;
void *alloc_ud;
- // Error-reporting function.
+ /* Error-reporting function. */
upb_error_func *err;
void *err_ud;
- // Userdata for default alloc func.
+ /* Userdata for default alloc func. */
void *default_alloc_ud;
- // Cleanup entries. Pointer to a cleanup_ent, defined in env.c
+ /* Cleanup entries. Pointer to a cleanup_ent, defined in env.c */
void *cleanup_head;
- // For future expansion, since the size of this struct is exposed to users.
+ /* For future expansion, since the size of this struct is exposed to users. */
void *future1;
void *future2;
-));
+};
UPB_BEGIN_EXTERN_C
@@ -6146,46 +5277,51 @@ size_t upb_env_bytesallocated(const upb_env *e);
UPB_END_EXTERN_C
-// An allocator that allocates from an initial memory region (likely the stack)
-// before falling back to another allocator.
-UPB_DEFINE_CLASS0(upb::SeededAllocator,
+#ifdef __cplusplus
+
+/* An allocator that allocates from an initial memory region (likely the stack)
+ * before falling back to another allocator. */
+class upb::SeededAllocator {
public:
SeededAllocator(void *mem, size_t len);
~SeededAllocator();
- // Set a custom fallback memory allocation function for the allocator, to use
- // once the initial region runs out.
- //
- // May ONLY be called before GetAllocationFunction(). If this is not
- // called, the system realloc() will be the fallback allocator.
+ /* Set a custom fallback memory allocation function for the allocator, to use
+ * once the initial region runs out.
+ *
+ * May ONLY be called before GetAllocationFunction(). If this is not
+ * called, the system realloc() will be the fallback allocator. */
void SetFallbackAllocator(upb_alloc_func *alloc, void *ud);
- // Gets the allocation function for this allocator.
+ /* Gets the allocation function for this allocator. */
upb_alloc_func* GetAllocationFunction();
private:
- UPB_DISALLOW_COPY_AND_ASSIGN(SeededAllocator);
-,
-UPB_DEFINE_STRUCT0(upb_seededalloc,
- // Fallback alloc function.
+ UPB_DISALLOW_COPY_AND_ASSIGN(SeededAllocator)
+
+#else
+struct upb_seededalloc {
+#endif /* __cplusplus */
+
+ /* Fallback alloc function. */
upb_alloc_func *alloc;
upb_cleanup_func *alloc_cleanup;
void *alloc_ud;
bool need_cleanup;
bool returned_allocfunc;
- // Userdata for default alloc func.
+ /* Userdata for default alloc func. */
void *default_alloc_ud;
- // Pointers for the initial memory region.
+ /* Pointers for the initial memory region. */
char *mem_base;
char *mem_ptr;
char *mem_limit;
- // For future expansion, since the size of this struct is exposed to users.
+ /* For future expansion, since the size of this struct is exposed to users. */
void *future1;
void *future2;
-));
+};
UPB_BEGIN_EXTERN_C
@@ -6250,11 +5386,11 @@ inline upb_alloc_func *SeededAllocator::GetAllocationFunction() {
return upb_seededalloc_getallocfunc(this);
}
-} // namespace upb
+} /* namespace upb */
-#endif // __cplusplus
+#endif /* __cplusplus */
-#endif // UPB_ENV_H_
+#endif /* UPB_ENV_H_ */
/*
* upb - a minimalist implementation of protocol buffers.
*
@@ -6286,88 +5422,90 @@ class Sink;
}
#endif
-UPB_DECLARE_TYPE(upb::BufferSource, upb_bufsrc);
-UPB_DECLARE_TYPE(upb::BytesSink, upb_bytessink);
-UPB_DECLARE_TYPE(upb::Sink, upb_sink);
-
-// A upb::Sink is an object that binds a upb::Handlers object to some runtime
-// state. It represents an endpoint to which data can be sent.
-//
-// TODO(haberman): right now all of these functions take selectors. Should they
-// take selectorbase instead?
-//
-// ie. instead of calling:
-// sink->StartString(FOO_FIELD_START_STRING, ...)
-// a selector base would let you say:
-// sink->StartString(FOO_FIELD, ...)
-//
-// This would make call sites a little nicer and require emitting fewer selector
-// definitions in .h files.
-//
-// But the current scheme has the benefit that you can retrieve a function
-// pointer for any handler with handlers->GetHandler(selector), without having
-// to have a separate GetHandler() function for each handler type. The JIT
-// compiler uses this. To accommodate we'd have to expose a separate
-// GetHandler() for every handler type.
-//
-// Also to ponder: selectors right now are independent of a specific Handlers
-// instance. In other words, they allocate a number to every possible handler
-// that *could* be registered, without knowing anything about what handlers
-// *are* registered. That means that using selectors as table offsets prohibits
-// us from compacting the handler table at Freeze() time. If the table is very
-// sparse, this could be wasteful.
-//
-// Having another selector-like thing that is specific to a Handlers instance
-// would allow this compacting, but then it would be impossible to write code
-// ahead-of-time that can be bound to any Handlers instance at runtime. For
-// example, a .proto file parser written as straight C will not know what
-// Handlers it will be bound to, so when it calls sink->StartString() what
-// selector will it pass? It needs a selector like we have today, that is
-// independent of any particular upb::Handlers.
-//
-// Is there a way then to allow Handlers table compaction?
-UPB_DEFINE_CLASS0(upb::Sink,
+UPB_DECLARE_TYPE(upb::BufferSource, upb_bufsrc)
+UPB_DECLARE_TYPE(upb::BytesSink, upb_bytessink)
+UPB_DECLARE_TYPE(upb::Sink, upb_sink)
+
+#ifdef __cplusplus
+
+/* A upb::Sink is an object that binds a upb::Handlers object to some runtime
+ * state. It represents an endpoint to which data can be sent.
+ *
+ * TODO(haberman): right now all of these functions take selectors. Should they
+ * take selectorbase instead?
+ *
+ * ie. instead of calling:
+ * sink->StartString(FOO_FIELD_START_STRING, ...)
+ * a selector base would let you say:
+ * sink->StartString(FOO_FIELD, ...)
+ *
+ * This would make call sites a little nicer and require emitting fewer selector
+ * definitions in .h files.
+ *
+ * But the current scheme has the benefit that you can retrieve a function
+ * pointer for any handler with handlers->GetHandler(selector), without having
+ * to have a separate GetHandler() function for each handler type. The JIT
+ * compiler uses this. To accommodate we'd have to expose a separate
+ * GetHandler() for every handler type.
+ *
+ * Also to ponder: selectors right now are independent of a specific Handlers
+ * instance. In other words, they allocate a number to every possible handler
+ * that *could* be registered, without knowing anything about what handlers
+ * *are* registered. That means that using selectors as table offsets prohibits
+ * us from compacting the handler table at Freeze() time. If the table is very
+ * sparse, this could be wasteful.
+ *
+ * Having another selector-like thing that is specific to a Handlers instance
+ * would allow this compacting, but then it would be impossible to write code
+ * ahead-of-time that can be bound to any Handlers instance at runtime. For
+ * example, a .proto file parser written as straight C will not know what
+ * Handlers it will be bound to, so when it calls sink->StartString() what
+ * selector will it pass? It needs a selector like we have today, that is
+ * independent of any particular upb::Handlers.
+ *
+ * Is there a way then to allow Handlers table compaction? */
+class upb::Sink {
public:
- // Constructor with no initialization; must be Reset() before use.
+ /* Constructor with no initialization; must be Reset() before use. */
Sink() {}
- // Constructs a new sink for the given frozen handlers and closure.
- //
- // TODO: once the Handlers know the expected closure type, verify that T
- // matches it.
+ /* Constructs a new sink for the given frozen handlers and closure.
+ *
+ * TODO: once the Handlers know the expected closure type, verify that T
+ * matches it. */
template <class T> Sink(const Handlers* handlers, T* closure);
- // Resets the value of the sink.
+ /* Resets the value of the sink. */
template <class T> void Reset(const Handlers* handlers, T* closure);
- // Returns the top-level object that is bound to this sink.
- //
- // TODO: once the Handlers know the expected closure type, verify that T
- // matches it.
+ /* Returns the top-level object that is bound to this sink.
+ *
+ * TODO: once the Handlers know the expected closure type, verify that T
+ * matches it. */
template <class T> T* GetObject() const;
- // Functions for pushing data into the sink.
- //
- // These return false if processing should stop (either due to error or just
- // to suspend).
- //
- // These may not be called from within one of the same sink's handlers (in
- // other words, handlers are not re-entrant).
-
- // Should be called at the start and end of every message; both the top-level
- // message and submessages. This means that submessages should use the
- // following sequence:
- // sink->StartSubMessage(startsubmsg_selector);
- // sink->StartMessage();
- // // ...
- // sink->EndMessage(&status);
- // sink->EndSubMessage(endsubmsg_selector);
+ /* Functions for pushing data into the sink.
+ *
+ * These return false if processing should stop (either due to error or just
+ * to suspend).
+ *
+ * These may not be called from within one of the same sink's handlers (in
+ * other words, handlers are not re-entrant). */
+
+ /* Should be called at the start and end of every message; both the top-level
+ * message and submessages. This means that submessages should use the
+ * following sequence:
+ * sink->StartSubMessage(startsubmsg_selector);
+ * sink->StartMessage();
+ * // ...
+ * sink->EndMessage(&status);
+ * sink->EndSubMessage(endsubmsg_selector); */
bool StartMessage();
bool EndMessage(Status* status);
- // Putting of individual values. These work for both repeated and
- // non-repeated fields, but for repeated fields you must wrap them in
- // calls to StartSequence()/EndSequence().
+ /* Putting of individual values. These work for both repeated and
+ * non-repeated fields, but for repeated fields you must wrap them in
+ * calls to StartSequence()/EndSequence(). */
bool PutInt32(Handlers::Selector s, int32_t val);
bool PutInt64(Handlers::Selector s, int64_t val);
bool PutUInt32(Handlers::Selector s, uint32_t val);
@@ -6376,92 +5514,101 @@ UPB_DEFINE_CLASS0(upb::Sink,
bool PutDouble(Handlers::Selector s, double val);
bool PutBool(Handlers::Selector s, bool val);
- // Putting of string/bytes values. Each string can consist of zero or more
- // non-contiguous buffers of data.
- //
- // For StartString(), the function will write a sink for the string to "sub."
- // The sub-sink must be used for any/all PutStringBuffer() calls.
+ /* Putting of string/bytes values. Each string can consist of zero or more
+ * non-contiguous buffers of data.
+ *
+ * For StartString(), the function will write a sink for the string to "sub."
+ * The sub-sink must be used for any/all PutStringBuffer() calls. */
bool StartString(Handlers::Selector s, size_t size_hint, Sink* sub);
size_t PutStringBuffer(Handlers::Selector s, const char *buf, size_t len,
const BufferHandle *handle);
bool EndString(Handlers::Selector s);
- // For submessage fields.
- //
- // For StartSubMessage(), the function will write a sink for the string to
- // "sub." The sub-sink must be used for any/all handlers called within the
- // submessage.
+ /* For submessage fields.
+ *
+ * For StartSubMessage(), the function will write a sink for the string to
+ * "sub." The sub-sink must be used for any/all handlers called within the
+ * submessage. */
bool StartSubMessage(Handlers::Selector s, Sink* sub);
bool EndSubMessage(Handlers::Selector s);
- // For repeated fields of any type, the sequence of values must be wrapped in
- // these calls.
- //
- // For StartSequence(), the function will write a sink for the string to
- // "sub." The sub-sink must be used for any/all handlers called within the
- // sequence.
+ /* For repeated fields of any type, the sequence of values must be wrapped in
+ * these calls.
+ *
+ * For StartSequence(), the function will write a sink for the string to
+ * "sub." The sub-sink must be used for any/all handlers called within the
+ * sequence. */
bool StartSequence(Handlers::Selector s, Sink* sub);
bool EndSequence(Handlers::Selector s);
- // Copy and assign specifically allowed.
- // We don't even bother making these members private because so many
- // functions need them and this is mainly just a dumb data container anyway.
-,
-UPB_DEFINE_STRUCT0(upb_sink,
+ /* Copy and assign specifically allowed.
+ * We don't even bother making these members private because so many
+ * functions need them and this is mainly just a dumb data container anyway.
+ */
+#else
+struct upb_sink {
+#endif
const upb_handlers *handlers;
void *closure;
-));
+};
-UPB_DEFINE_CLASS0(upb::BytesSink,
+#ifdef __cplusplus
+class upb::BytesSink {
public:
BytesSink() {}
- // Constructs a new sink for the given frozen handlers and closure.
- //
- // TODO(haberman): once the Handlers know the expected closure type, verify
- // that T matches it.
+ /* Constructs a new sink for the given frozen handlers and closure.
+ *
+ * TODO(haberman): once the Handlers know the expected closure type, verify
+ * that T matches it. */
template <class T> BytesSink(const BytesHandler* handler, T* closure);
- // Resets the value of the sink.
+ /* Resets the value of the sink. */
template <class T> void Reset(const BytesHandler* handler, T* closure);
bool Start(size_t size_hint, void **subc);
size_t PutBuffer(void *subc, const char *buf, size_t len,
const BufferHandle *handle);
bool End();
-,
-UPB_DEFINE_STRUCT0(upb_bytessink,
+#else
+struct upb_bytessink {
+#endif
const upb_byteshandler *handler;
void *closure;
-));
+};
+
+#ifdef __cplusplus
-// A class for pushing a flat buffer of data to a BytesSink.
-// You can construct an instance of this to get a resumable source,
-// or just call the static PutBuffer() to do a non-resumable push all in one go.
-UPB_DEFINE_CLASS0(upb::BufferSource,
+/* A class for pushing a flat buffer of data to a BytesSink.
+ * You can construct an instance of this to get a resumable source,
+ * or just call the static PutBuffer() to do a non-resumable push all in one
+ * go. */
+class upb::BufferSource {
public:
BufferSource();
BufferSource(const char* buf, size_t len, BytesSink* sink);
- // Returns true if the entire buffer was pushed successfully. Otherwise the
- // next call to PutNext() will resume where the previous one left off.
- // TODO(haberman): implement this.
+ /* Returns true if the entire buffer was pushed successfully. Otherwise the
+ * next call to PutNext() will resume where the previous one left off.
+ * TODO(haberman): implement this. */
bool PutNext();
- // A static version; with this version is it not possible to resume in the
- // case of failure or a partially-consumed buffer.
+ /* A static version; with this version is it not possible to resume in the
+ * case of failure or a partially-consumed buffer. */
static bool PutBuffer(const char* buf, size_t len, BytesSink* sink);
template <class T> static bool PutBuffer(const T& str, BytesSink* sink) {
return PutBuffer(str.c_str(), str.size(), sink);
}
-,
-UPB_DEFINE_STRUCT0(upb_bufsrc,
-));
+#else
+struct upb_bufsrc {
+ char dummy;
+#endif
+};
-UPB_BEGIN_EXTERN_C // {
+UPB_BEGIN_EXTERN_C
-// Inline definitions.
+/* Inline definitions. */
UPB_INLINE void upb_bytessink_reset(upb_bytessink *s, const upb_byteshandler *h,
void *closure) {
@@ -6471,10 +5618,11 @@ UPB_INLINE void upb_bytessink_reset(upb_bytessink *s, const upb_byteshandler *h,
UPB_INLINE bool upb_bytessink_start(upb_bytessink *s, size_t size_hint,
void **subc) {
+ typedef upb_startstr_handlerfunc func;
+ func *start;
*subc = s->closure;
if (!s->handler) return true;
- upb_startstr_handlerfunc *start =
- (upb_startstr_handlerfunc *)s->handler->table[UPB_STARTSTR_SELECTOR].func;
+ start = (func *)s->handler->table[UPB_STARTSTR_SELECTOR].func;
if (!start) return true;
*subc = start(s->closure, upb_handlerattr_handlerdata(
@@ -6486,9 +5634,10 @@ UPB_INLINE bool upb_bytessink_start(upb_bytessink *s, size_t size_hint,
UPB_INLINE size_t upb_bytessink_putbuf(upb_bytessink *s, void *subc,
const char *buf, size_t size,
const upb_bufhandle* handle) {
+ typedef upb_string_handlerfunc func;
+ func *putbuf;
if (!s->handler) return true;
- upb_string_handlerfunc *putbuf =
- (upb_string_handlerfunc *)s->handler->table[UPB_STRING_SELECTOR].func;
+ putbuf = (func *)s->handler->table[UPB_STRING_SELECTOR].func;
if (!putbuf) return true;
return putbuf(subc, upb_handlerattr_handlerdata(
@@ -6497,9 +5646,10 @@ UPB_INLINE size_t upb_bytessink_putbuf(upb_bytessink *s, void *subc,
}
UPB_INLINE bool upb_bytessink_end(upb_bytessink *s) {
+ typedef upb_endfield_handlerfunc func;
+ func *end;
if (!s->handler) return true;
- upb_endfield_handlerfunc *end =
- (upb_endfield_handlerfunc *)s->handler->table[UPB_ENDSTR_SELECTOR].func;
+ end = (func *)s->handler->table[UPB_ENDSTR_SELECTOR].func;
if (!end) return true;
return end(s->closure,
@@ -6510,10 +5660,11 @@ UPB_INLINE bool upb_bytessink_end(upb_bytessink *s) {
UPB_INLINE bool upb_bufsrc_putbuf(const char *buf, size_t len,
upb_bytessink *sink) {
void *subc;
+ bool ret;
upb_bufhandle handle;
upb_bufhandle_init(&handle);
upb_bufhandle_setbuf(&handle, buf, 0);
- bool ret = upb_bytessink_start(sink, len, &subc);
+ ret = upb_bytessink_start(sink, len, &subc);
if (ret && len != 0) {
ret = (upb_bytessink_putbuf(sink, subc, buf, len, &handle) == len);
}
@@ -6527,21 +5678,23 @@ UPB_INLINE bool upb_bufsrc_putbuf(const char *buf, size_t len,
#define PUTVAL(type, ctype) \
UPB_INLINE bool upb_sink_put##type(upb_sink *s, upb_selector_t sel, \
ctype val) { \
+ typedef upb_##type##_handlerfunc functype; \
+ functype *func; \
+ const void *hd; \
if (!s->handlers) return true; \
- upb_##type##_handlerfunc *func = \
- (upb_##type##_handlerfunc *)upb_handlers_gethandler(s->handlers, sel); \
+ func = (functype *)upb_handlers_gethandler(s->handlers, sel); \
if (!func) return true; \
- const void *hd = upb_handlers_gethandlerdata(s->handlers, sel); \
+ hd = upb_handlers_gethandlerdata(s->handlers, sel); \
return func(s->closure, hd, val); \
}
-PUTVAL(int32, int32_t);
-PUTVAL(int64, int64_t);
-PUTVAL(uint32, uint32_t);
-PUTVAL(uint64, uint64_t);
-PUTVAL(float, float);
-PUTVAL(double, double);
-PUTVAL(bool, bool);
+PUTVAL(int32, int32_t)
+PUTVAL(int64, int64_t)
+PUTVAL(uint32, uint32_t)
+PUTVAL(uint64, uint64_t)
+PUTVAL(float, float)
+PUTVAL(double, double)
+PUTVAL(bool, bool)
#undef PUTVAL
UPB_INLINE void upb_sink_reset(upb_sink *s, const upb_handlers *h, void *c) {
@@ -6552,114 +5705,129 @@ UPB_INLINE void upb_sink_reset(upb_sink *s, const upb_handlers *h, void *c) {
UPB_INLINE size_t upb_sink_putstring(upb_sink *s, upb_selector_t sel,
const char *buf, size_t n,
const upb_bufhandle *handle) {
+ typedef upb_string_handlerfunc func;
+ func *handler;
+ const void *hd;
if (!s->handlers) return n;
- upb_string_handlerfunc *handler =
- (upb_string_handlerfunc *)upb_handlers_gethandler(s->handlers, sel);
+ handler = (func *)upb_handlers_gethandler(s->handlers, sel);
if (!handler) return n;
- const void *hd = upb_handlers_gethandlerdata(s->handlers, sel);
+ hd = upb_handlers_gethandlerdata(s->handlers, sel);
return handler(s->closure, hd, buf, n, handle);
}
UPB_INLINE bool upb_sink_startmsg(upb_sink *s) {
+ typedef upb_startmsg_handlerfunc func;
+ func *startmsg;
+ const void *hd;
if (!s->handlers) return true;
- upb_startmsg_handlerfunc *startmsg =
- (upb_startmsg_handlerfunc *)upb_handlers_gethandler(s->handlers,
- UPB_STARTMSG_SELECTOR);
+ startmsg = (func*)upb_handlers_gethandler(s->handlers, UPB_STARTMSG_SELECTOR);
+
if (!startmsg) return true;
- const void *hd =
- upb_handlers_gethandlerdata(s->handlers, UPB_STARTMSG_SELECTOR);
+ hd = upb_handlers_gethandlerdata(s->handlers, UPB_STARTMSG_SELECTOR);
return startmsg(s->closure, hd);
}
UPB_INLINE bool upb_sink_endmsg(upb_sink *s, upb_status *status) {
+ typedef upb_endmsg_handlerfunc func;
+ func *endmsg;
+ const void *hd;
if (!s->handlers) return true;
- upb_endmsg_handlerfunc *endmsg =
- (upb_endmsg_handlerfunc *)upb_handlers_gethandler(s->handlers,
- UPB_ENDMSG_SELECTOR);
+ endmsg = (func *)upb_handlers_gethandler(s->handlers, UPB_ENDMSG_SELECTOR);
if (!endmsg) return true;
- const void *hd =
- upb_handlers_gethandlerdata(s->handlers, UPB_ENDMSG_SELECTOR);
+ hd = upb_handlers_gethandlerdata(s->handlers, UPB_ENDMSG_SELECTOR);
return endmsg(s->closure, hd, status);
}
UPB_INLINE bool upb_sink_startseq(upb_sink *s, upb_selector_t sel,
upb_sink *sub) {
+ typedef upb_startfield_handlerfunc func;
+ func *startseq;
+ const void *hd;
sub->closure = s->closure;
sub->handlers = s->handlers;
if (!s->handlers) return true;
- upb_startfield_handlerfunc *startseq =
- (upb_startfield_handlerfunc*)upb_handlers_gethandler(s->handlers, sel);
+ startseq = (func*)upb_handlers_gethandler(s->handlers, sel);
if (!startseq) return true;
- const void *hd = upb_handlers_gethandlerdata(s->handlers, sel);
+ hd = upb_handlers_gethandlerdata(s->handlers, sel);
sub->closure = startseq(s->closure, hd);
return sub->closure ? true : false;
}
UPB_INLINE bool upb_sink_endseq(upb_sink *s, upb_selector_t sel) {
+ typedef upb_endfield_handlerfunc func;
+ func *endseq;
+ const void *hd;
if (!s->handlers) return true;
- upb_endfield_handlerfunc *endseq =
- (upb_endfield_handlerfunc*)upb_handlers_gethandler(s->handlers, sel);
+ endseq = (func*)upb_handlers_gethandler(s->handlers, sel);
if (!endseq) return true;
- const void *hd = upb_handlers_gethandlerdata(s->handlers, sel);
+ hd = upb_handlers_gethandlerdata(s->handlers, sel);
return endseq(s->closure, hd);
}
UPB_INLINE bool upb_sink_startstr(upb_sink *s, upb_selector_t sel,
size_t size_hint, upb_sink *sub) {
+ typedef upb_startstr_handlerfunc func;
+ func *startstr;
+ const void *hd;
sub->closure = s->closure;
sub->handlers = s->handlers;
if (!s->handlers) return true;
- upb_startstr_handlerfunc *startstr =
- (upb_startstr_handlerfunc*)upb_handlers_gethandler(s->handlers, sel);
+ startstr = (func*)upb_handlers_gethandler(s->handlers, sel);
if (!startstr) return true;
- const void *hd = upb_handlers_gethandlerdata(s->handlers, sel);
+ hd = upb_handlers_gethandlerdata(s->handlers, sel);
sub->closure = startstr(s->closure, hd, size_hint);
return sub->closure ? true : false;
}
UPB_INLINE bool upb_sink_endstr(upb_sink *s, upb_selector_t sel) {
+ typedef upb_endfield_handlerfunc func;
+ func *endstr;
+ const void *hd;
if (!s->handlers) return true;
- upb_endfield_handlerfunc *endstr =
- (upb_endfield_handlerfunc*)upb_handlers_gethandler(s->handlers, sel);
+ endstr = (func*)upb_handlers_gethandler(s->handlers, sel);
if (!endstr) return true;
- const void *hd = upb_handlers_gethandlerdata(s->handlers, sel);
+ hd = upb_handlers_gethandlerdata(s->handlers, sel);
return endstr(s->closure, hd);
}
UPB_INLINE bool upb_sink_startsubmsg(upb_sink *s, upb_selector_t sel,
upb_sink *sub) {
+ typedef upb_startfield_handlerfunc func;
+ func *startsubmsg;
+ const void *hd;
sub->closure = s->closure;
if (!s->handlers) {
sub->handlers = NULL;
return true;
}
sub->handlers = upb_handlers_getsubhandlers_sel(s->handlers, sel);
- upb_startfield_handlerfunc *startsubmsg =
- (upb_startfield_handlerfunc*)upb_handlers_gethandler(s->handlers, sel);
+ startsubmsg = (func*)upb_handlers_gethandler(s->handlers, sel);
if (!startsubmsg) return true;
- const void *hd = upb_handlers_gethandlerdata(s->handlers, sel);
+ hd = upb_handlers_gethandlerdata(s->handlers, sel);
sub->closure = startsubmsg(s->closure, hd);
return sub->closure ? true : false;
}
UPB_INLINE bool upb_sink_endsubmsg(upb_sink *s, upb_selector_t sel) {
+ typedef upb_endfield_handlerfunc func;
+ func *endsubmsg;
+ const void *hd;
if (!s->handlers) return true;
- upb_endfield_handlerfunc *endsubmsg =
- (upb_endfield_handlerfunc*)upb_handlers_gethandler(s->handlers, sel);
+ endsubmsg = (func*)upb_handlers_gethandler(s->handlers, sel);
if (!endsubmsg) return s->closure;
- const void *hd = upb_handlers_gethandlerdata(s->handlers, sel);
+ hd = upb_handlers_gethandlerdata(s->handlers, sel);
return endsubmsg(s->closure, hd);
}
-UPB_END_EXTERN_C // }
+UPB_END_EXTERN_C
#ifdef __cplusplus
@@ -6748,7 +5916,7 @@ inline bool BufferSource::PutBuffer(const char *buf, size_t len,
return upb_bufsrc_putbuf(buf, len, sink);
}
-} // namespace upb
+} /* namespace upb */
#endif
#endif
@@ -6785,33 +5953,33 @@ namespace upb {
struct Shim {
typedef upb_shim_data Data;
- // Sets a handler for the given field that writes the value to the given
- // offset and, if hasbit >= 0, sets a bit at the given bit offset. Returns
- // true if the handler was set successfully.
+ /* Sets a handler for the given field that writes the value to the given
+ * offset and, if hasbit >= 0, sets a bit at the given bit offset. Returns
+ * true if the handler was set successfully. */
static bool Set(Handlers *h, const FieldDef *f, size_t ofs, int32_t hasbit);
- // If this handler is a shim, returns the corresponding upb::Shim::Data and
- // stores the type in "type". Otherwise returns NULL.
+ /* If this handler is a shim, returns the corresponding upb::Shim::Data and
+ * stores the type in "type". Otherwise returns NULL. */
static const Data* GetData(const Handlers* h, Handlers::Selector s,
FieldDef::Type* type);
};
-} // namespace upb
+} /* namespace upb */
#endif
-UPB_BEGIN_EXTERN_C // {
+UPB_BEGIN_EXTERN_C
-// C API.
+/* C API. */
bool upb_shim_set(upb_handlers *h, const upb_fielddef *f, size_t offset,
int32_t hasbit);
const upb_shim_data *upb_shim_getdata(const upb_handlers *h, upb_selector_t s,
upb_fieldtype_t *type);
-UPB_END_EXTERN_C // }
+UPB_END_EXTERN_C
#ifdef __cplusplus
-// C++ Wrappers.
+/* C++ Wrappers. */
namespace upb {
inline bool Shim::Set(Handlers* h, const FieldDef* f, size_t ofs,
int32_t hasbit) {
@@ -6821,10 +5989,198 @@ inline const Shim::Data* Shim::GetData(const Handlers* h, Handlers::Selector s,
FieldDef::Type* type) {
return upb_shim_getdata(h, s, type);
}
-} // namespace upb
+} /* namespace upb */
+#endif
+
+#endif /* UPB_SHIM_H */
+/*
+ * upb - a minimalist implementation of protocol buffers.
+ *
+ * Copyright (c) 2009-2012 Google Inc. See LICENSE for details.
+ * Author: Josh Haberman <jhaberman@gmail.com>
+ *
+ * A symtab (symbol table) stores a name->def map of upb_defs. Clients could
+ * always create such tables themselves, but upb_symtab has logic for resolving
+ * symbolic references, and in particular, for keeping a whole set of consistent
+ * defs when replacing some subset of those defs. This logic is nontrivial.
+ *
+ * This is a mixed C/C++ interface that offers a full API to both languages.
+ * See the top-level README for more information.
+ */
+
+#ifndef UPB_SYMTAB_H_
+#define UPB_SYMTAB_H_
+
+
+#ifdef __cplusplus
+#include <vector>
+namespace upb { class SymbolTable; }
+#endif
+
+UPB_DECLARE_DERIVED_TYPE(upb::SymbolTable, upb::RefCounted,
+ upb_symtab, upb_refcounted)
+
+typedef struct {
+ UPB_PRIVATE_FOR_CPP
+ upb_strtable_iter iter;
+ upb_deftype_t type;
+} upb_symtab_iter;
+
+#ifdef __cplusplus
+
+/* Non-const methods in upb::SymbolTable are NOT thread-safe. */
+class upb::SymbolTable {
+ public:
+ /* Returns a new symbol table with a single ref owned by "owner."
+ * Returns NULL if memory allocation failed. */
+ static reffed_ptr<SymbolTable> New();
+
+ /* Include RefCounted base methods. */
+ UPB_REFCOUNTED_CPPMETHODS
+
+ /* For all lookup functions, the returned pointer is not owned by the
+ * caller; it may be invalidated by any non-const call or unref of the
+ * SymbolTable! To protect against this, take a ref if desired. */
+
+ /* Freezes the symbol table: prevents further modification of it.
+ * After the Freeze() operation is successful, the SymbolTable must only be
+ * accessed via a const pointer.
+ *
+ * Unlike with upb::MessageDef/upb::EnumDef/etc, freezing a SymbolTable is not
+ * a necessary step in using a SymbolTable. If you have no need for it to be
+ * immutable, there is no need to freeze it ever. However sometimes it is
+ * useful, and SymbolTables that are statically compiled into the binary are
+ * always frozen by nature. */
+ void Freeze();
+
+ /* Resolves the given symbol using the rules described in descriptor.proto,
+ * namely:
+ *
+ * If the name starts with a '.', it is fully-qualified. Otherwise,
+ * C++-like scoping rules are used to find the type (i.e. first the nested
+ * types within this message are searched, then within the parent, on up
+ * to the root namespace).
+ *
+ * If not found, returns NULL. */
+ const Def* Resolve(const char* base, const char* sym) const;
+
+ /* Finds an entry in the symbol table with this exact name. If not found,
+ * returns NULL. */
+ const Def* Lookup(const char *sym) const;
+ const MessageDef* LookupMessage(const char *sym) const;
+ const EnumDef* LookupEnum(const char *sym) const;
+
+ /* TODO: introduce a C++ iterator, but make it nice and templated so that if
+ * you ask for an iterator of MessageDef the iterated elements are strongly
+ * typed as MessageDef*. */
+
+ /* Adds the given mutable defs to the symtab, resolving all symbols
+ * (including enum default values) and finalizing the defs. Only one def per
+ * name may be in the list, but defs can replace existing defs in the symtab.
+ * All defs must have a name -- anonymous defs are not allowed. Anonymous
+ * defs can still be frozen by calling upb_def_freeze() directly.
+ *
+ * Any existing defs that can reach defs that are being replaced will
+ * themselves be replaced also, so that the resulting set of defs is fully
+ * consistent.
+ *
+ * This logic implemented in this method is a convenience; ultimately it
+ * calls some combination of upb_fielddef_setsubdef(), upb_def_dup(), and
+ * upb_freeze(), any of which the client could call themself. However, since
+ * the logic for doing so is nontrivial, we provide it here.
+ *
+ * The entire operation either succeeds or fails. If the operation fails,
+ * the symtab is unchanged, false is returned, and status indicates the
+ * error. The caller passes a ref on all defs to the symtab (even if the
+ * operation fails).
+ *
+ * TODO(haberman): currently failure will leave the symtab unchanged, but may
+ * leave the defs themselves partially resolved. Does this matter? If so we
+ * could do a prepass that ensures that all symbols are resolvable and bail
+ * if not, so we don't mutate anything until we know the operation will
+ * succeed.
+ *
+ * TODO(haberman): since the defs must be mutable, refining a frozen def
+ * requires making mutable copies of the entire tree. This is wasteful if
+ * only a few messages are changing. We may want to add a way of adding a
+ * tree of frozen defs to the symtab (perhaps an alternate constructor where
+ * you pass the root of the tree?) */
+ bool Add(Def*const* defs, int n, void* ref_donor, upb_status* status);
+
+ bool Add(const std::vector<Def*>& defs, void *owner, Status* status) {
+ return Add((Def*const*)&defs[0], defs.size(), owner, status);
+ }
+
+ private:
+ UPB_DISALLOW_POD_OPS(SymbolTable, upb::SymbolTable)
+};
+
+#endif /* __cplusplus */
+
+UPB_BEGIN_EXTERN_C
+
+/* Native C API. */
+
+/* Include refcounted methods like upb_symtab_ref(). */
+UPB_REFCOUNTED_CMETHODS(upb_symtab, upb_symtab_upcast)
+
+upb_symtab *upb_symtab_new(const void *owner);
+void upb_symtab_freeze(upb_symtab *s);
+const upb_def *upb_symtab_resolve(const upb_symtab *s, const char *base,
+ const char *sym);
+const upb_def *upb_symtab_lookup(const upb_symtab *s, const char *sym);
+const upb_msgdef *upb_symtab_lookupmsg(const upb_symtab *s, const char *sym);
+const upb_enumdef *upb_symtab_lookupenum(const upb_symtab *s, const char *sym);
+bool upb_symtab_add(upb_symtab *s, upb_def *const*defs, int n, void *ref_donor,
+ upb_status *status);
+
+/* upb_symtab_iter i;
+ * for(upb_symtab_begin(&i, s, type); !upb_symtab_done(&i);
+ * upb_symtab_next(&i)) {
+ * const upb_def *def = upb_symtab_iter_def(&i);
+ * // ...
+ * }
+ *
+ * For C we don't have separate iterators for const and non-const.
+ * It is the caller's responsibility to cast the upb_fielddef* to
+ * const if the upb_msgdef* is const. */
+void upb_symtab_begin(upb_symtab_iter *iter, const upb_symtab *s,
+ upb_deftype_t type);
+void upb_symtab_next(upb_symtab_iter *iter);
+bool upb_symtab_done(const upb_symtab_iter *iter);
+const upb_def *upb_symtab_iter_def(const upb_symtab_iter *iter);
+
+UPB_END_EXTERN_C
+
+#ifdef __cplusplus
+/* C++ inline wrappers. */
+namespace upb {
+inline reffed_ptr<SymbolTable> SymbolTable::New() {
+ upb_symtab *s = upb_symtab_new(&s);
+ return reffed_ptr<SymbolTable>(s, &s);
+}
+
+inline void SymbolTable::Freeze() {
+ return upb_symtab_freeze(this);
+}
+inline const Def *SymbolTable::Resolve(const char *base,
+ const char *sym) const {
+ return upb_symtab_resolve(this, base, sym);
+}
+inline const Def* SymbolTable::Lookup(const char *sym) const {
+ return upb_symtab_lookup(this, sym);
+}
+inline const MessageDef *SymbolTable::LookupMessage(const char *sym) const {
+ return upb_symtab_lookupmsg(this, sym);
+}
+inline bool SymbolTable::Add(
+ Def*const* defs, int n, void* ref_donor, upb_status* status) {
+ return upb_symtab_add(this, (upb_def*const*)defs, n, ref_donor, status);
+}
+} /* namespace upb */
#endif
-#endif // UPB_SHIM_H
+#endif /* UPB_SYMTAB_H_ */
/*
* upb - a minimalist implementation of protocol buffers.
*
@@ -6843,52 +6199,52 @@ inline const Shim::Data* Shim::GetData(const Handlers* h, Handlers::Selector s,
namespace upb {
namespace descriptor {
class Reader;
-} // namespace descriptor
-} // namespace upb
+} /* namespace descriptor */
+} /* namespace upb */
#endif
-UPB_DECLARE_TYPE(upb::descriptor::Reader, upb_descreader);
+UPB_DECLARE_TYPE(upb::descriptor::Reader, upb_descreader)
#ifdef __cplusplus
-// Class that receives descriptor data according to the descriptor.proto schema
-// and use it to build upb::Defs corresponding to that schema.
+/* Class that receives descriptor data according to the descriptor.proto schema
+ * and use it to build upb::Defs corresponding to that schema. */
class upb::descriptor::Reader {
public:
- // These handlers must have come from NewHandlers() and must outlive the
- // Reader.
- //
- // TODO: generate the handlers statically (like we do with the
- // descriptor.proto defs) so that there is no need to pass this parameter (or
- // to build/memory-manage the handlers at runtime at all). Unfortunately this
- // is a bit tricky to implement for Handlers, but necessary to simplify this
- // interface.
+ /* These handlers must have come from NewHandlers() and must outlive the
+ * Reader.
+ *
+ * TODO: generate the handlers statically (like we do with the
+ * descriptor.proto defs) so that there is no need to pass this parameter (or
+ * to build/memory-manage the handlers at runtime at all). Unfortunately this
+ * is a bit tricky to implement for Handlers, but necessary to simplify this
+ * interface. */
static Reader* Create(Environment* env, const Handlers* handlers);
- // The reader's input; this is where descriptor.proto data should be sent.
+ /* The reader's input; this is where descriptor.proto data should be sent. */
Sink* input();
- // Returns an array of all defs that have been parsed, and transfers ownership
- // of them to "owner". The number of defs is stored in *n. Ownership of the
- // returned array is retained and is invalidated by any other call into
- // Reader.
- //
- // These defs are not frozen or resolved; they are ready to be added to a
- // symtab.
+ /* Returns an array of all defs that have been parsed, and transfers ownership
+ * of them to "owner". The number of defs is stored in *n. Ownership of the
+ * returned array is retained and is invalidated by any other call into
+ * Reader.
+ *
+ * These defs are not frozen or resolved; they are ready to be added to a
+ * symtab. */
upb::Def** GetDefs(void* owner, int* n);
- // Builds and returns handlers for the reader, owned by "owner."
+ /* Builds and returns handlers for the reader, owned by "owner." */
static Handlers* NewHandlers(const void* owner);
private:
- UPB_DISALLOW_POD_OPS(Reader, upb::descriptor::Reader);
+ UPB_DISALLOW_POD_OPS(Reader, upb::descriptor::Reader)
};
#endif
UPB_BEGIN_EXTERN_C
-// C API.
+/* C API. */
upb_descreader *upb_descreader_create(upb_env *e, const upb_handlers *h);
upb_sink *upb_descreader_input(upb_descreader *r);
upb_def **upb_descreader_getdefs(upb_descreader *r, void *owner, int *n);
@@ -6897,7 +6253,7 @@ const upb_handlers *upb_descreader_newhandlers(const void *owner);
UPB_END_EXTERN_C
#ifdef __cplusplus
-// C++ implementation details. /////////////////////////////////////////////////
+/* C++ implementation details. ************************************************/
namespace upb {
namespace descriptor {
inline Reader* Reader::Create(Environment* e, const Handlers *h) {
@@ -6907,11 +6263,809 @@ inline Sink* Reader::input() { return upb_descreader_input(this); }
inline upb::Def** Reader::GetDefs(void* owner, int* n) {
return upb_descreader_getdefs(this, owner, n);
}
-} // namespace descriptor
-} // namespace upb
+} /* namespace descriptor */
+} /* namespace upb */
#endif
-#endif // UPB_DESCRIPTOR_H
+#endif /* UPB_DESCRIPTOR_H */
+/* This file contains accessors for a set of compiled-in defs.
+ * Note that unlike Google's protobuf, it does *not* define
+ * generated classes or any other kind of data structure for
+ * actually storing protobufs. It only contains *defs* which
+ * let you reflect over a protobuf *schema*.
+ */
+/* This file was generated by upbc (the upb compiler).
+ * Do not edit -- your changes will be discarded when the file is
+ * regenerated. */
+
+#ifndef GOOGLE_PROTOBUF_DESCRIPTOR_UPB_H_
+#define GOOGLE_PROTOBUF_DESCRIPTOR_UPB_H_
+
+
+#ifdef __cplusplus
+UPB_BEGIN_EXTERN_C
+#endif
+
+/* Enums */
+
+typedef enum {
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_LABEL_OPTIONAL = 1,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_LABEL_REQUIRED = 2,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_LABEL_REPEATED = 3
+} google_protobuf_FieldDescriptorProto_Label;
+
+typedef enum {
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_DOUBLE = 1,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_FLOAT = 2,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_INT64 = 3,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_UINT64 = 4,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_INT32 = 5,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_FIXED64 = 6,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_FIXED32 = 7,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_BOOL = 8,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_STRING = 9,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_GROUP = 10,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_MESSAGE = 11,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_BYTES = 12,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_UINT32 = 13,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_ENUM = 14,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_SFIXED32 = 15,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_SFIXED64 = 16,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_SINT32 = 17,
+ GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_SINT64 = 18
+} google_protobuf_FieldDescriptorProto_Type;
+
+typedef enum {
+ GOOGLE_PROTOBUF_FIELDOPTIONS_STRING = 0,
+ GOOGLE_PROTOBUF_FIELDOPTIONS_CORD = 1,
+ GOOGLE_PROTOBUF_FIELDOPTIONS_STRING_PIECE = 2
+} google_protobuf_FieldOptions_CType;
+
+typedef enum {
+ GOOGLE_PROTOBUF_FILEOPTIONS_SPEED = 1,
+ GOOGLE_PROTOBUF_FILEOPTIONS_CODE_SIZE = 2,
+ GOOGLE_PROTOBUF_FILEOPTIONS_LITE_RUNTIME = 3
+} google_protobuf_FileOptions_OptimizeMode;
+
+/* Selectors */
+
+/* google.protobuf.DescriptorProto */
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_FIELD_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NESTED_TYPE_STARTSUBMSG 3
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_ENUM_TYPE_STARTSUBMSG 4
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_RANGE_STARTSUBMSG 5
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_STARTSUBMSG 6
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_OPTIONS_STARTSUBMSG 7
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_FIELD_STARTSEQ 8
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_FIELD_ENDSEQ 9
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_FIELD_ENDSUBMSG 10
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NESTED_TYPE_STARTSEQ 11
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NESTED_TYPE_ENDSEQ 12
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NESTED_TYPE_ENDSUBMSG 13
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_ENUM_TYPE_STARTSEQ 14
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_ENUM_TYPE_ENDSEQ 15
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_ENUM_TYPE_ENDSUBMSG 16
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_RANGE_STARTSEQ 17
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_RANGE_ENDSEQ 18
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_RANGE_ENDSUBMSG 19
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_STARTSEQ 20
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_ENDSEQ 21
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSION_ENDSUBMSG 22
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_OPTIONS_ENDSUBMSG 23
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NAME_STRING 24
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NAME_STARTSTR 25
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_NAME_ENDSTR 26
+
+/* google.protobuf.DescriptorProto.ExtensionRange */
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSIONRANGE_START_INT32 2
+#define SEL_GOOGLE_PROTOBUF_DESCRIPTORPROTO_EXTENSIONRANGE_END_INT32 3
+
+/* google.protobuf.EnumDescriptorProto */
+#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_VALUE_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_OPTIONS_STARTSUBMSG 3
+#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_VALUE_STARTSEQ 4
+#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_VALUE_ENDSEQ 5
+#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_VALUE_ENDSUBMSG 6
+#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_OPTIONS_ENDSUBMSG 7
+#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_NAME_STRING 8
+#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_NAME_STARTSTR 9
+#define SEL_GOOGLE_PROTOBUF_ENUMDESCRIPTORPROTO_NAME_ENDSTR 10
+
+/* google.protobuf.EnumOptions */
+#define SEL_GOOGLE_PROTOBUF_ENUMOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_ENUMOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
+#define SEL_GOOGLE_PROTOBUF_ENUMOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
+#define SEL_GOOGLE_PROTOBUF_ENUMOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
+#define SEL_GOOGLE_PROTOBUF_ENUMOPTIONS_ALLOW_ALIAS_BOOL 6
+
+/* google.protobuf.EnumValueDescriptorProto */
+#define SEL_GOOGLE_PROTOBUF_ENUMVALUEDESCRIPTORPROTO_OPTIONS_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_ENUMVALUEDESCRIPTORPROTO_OPTIONS_ENDSUBMSG 3
+#define SEL_GOOGLE_PROTOBUF_ENUMVALUEDESCRIPTORPROTO_NAME_STRING 4
+#define SEL_GOOGLE_PROTOBUF_ENUMVALUEDESCRIPTORPROTO_NAME_STARTSTR 5
+#define SEL_GOOGLE_PROTOBUF_ENUMVALUEDESCRIPTORPROTO_NAME_ENDSTR 6
+#define SEL_GOOGLE_PROTOBUF_ENUMVALUEDESCRIPTORPROTO_NUMBER_INT32 7
+
+/* google.protobuf.EnumValueOptions */
+#define SEL_GOOGLE_PROTOBUF_ENUMVALUEOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_ENUMVALUEOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
+#define SEL_GOOGLE_PROTOBUF_ENUMVALUEOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
+#define SEL_GOOGLE_PROTOBUF_ENUMVALUEOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
+
+/* google.protobuf.FieldDescriptorProto */
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_OPTIONS_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_OPTIONS_ENDSUBMSG 3
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_NAME_STRING 4
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_NAME_STARTSTR 5
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_NAME_ENDSTR 6
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_EXTENDEE_STRING 7
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_EXTENDEE_STARTSTR 8
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_EXTENDEE_ENDSTR 9
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_NUMBER_INT32 10
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_LABEL_INT32 11
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_INT32 12
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_NAME_STRING 13
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_NAME_STARTSTR 14
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_NAME_ENDSTR 15
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_DEFAULT_VALUE_STRING 16
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_DEFAULT_VALUE_STARTSTR 17
+#define SEL_GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_DEFAULT_VALUE_ENDSTR 18
+
+/* google.protobuf.FieldOptions */
+#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
+#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
+#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
+#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_CTYPE_INT32 6
+#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_PACKED_BOOL 7
+#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_DEPRECATED_BOOL 8
+#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_LAZY_BOOL 9
+#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_EXPERIMENTAL_MAP_KEY_STRING 10
+#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_EXPERIMENTAL_MAP_KEY_STARTSTR 11
+#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_EXPERIMENTAL_MAP_KEY_ENDSTR 12
+#define SEL_GOOGLE_PROTOBUF_FIELDOPTIONS_WEAK_BOOL 13
+
+/* google.protobuf.FileDescriptorProto */
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_MESSAGE_TYPE_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_ENUM_TYPE_STARTSUBMSG 3
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_SERVICE_STARTSUBMSG 4
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_EXTENSION_STARTSUBMSG 5
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_OPTIONS_STARTSUBMSG 6
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_SOURCE_CODE_INFO_STARTSUBMSG 7
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_MESSAGE_TYPE_STARTSEQ 8
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_MESSAGE_TYPE_ENDSEQ 9
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_MESSAGE_TYPE_ENDSUBMSG 10
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_ENUM_TYPE_STARTSEQ 11
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_ENUM_TYPE_ENDSEQ 12
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_ENUM_TYPE_ENDSUBMSG 13
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_SERVICE_STARTSEQ 14
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_SERVICE_ENDSEQ 15
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_SERVICE_ENDSUBMSG 16
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_EXTENSION_STARTSEQ 17
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_EXTENSION_ENDSEQ 18
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_EXTENSION_ENDSUBMSG 19
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_OPTIONS_ENDSUBMSG 20
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_SOURCE_CODE_INFO_ENDSUBMSG 21
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_NAME_STRING 22
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_NAME_STARTSTR 23
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_NAME_ENDSTR 24
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_PACKAGE_STRING 25
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_PACKAGE_STARTSTR 26
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_PACKAGE_ENDSTR 27
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_DEPENDENCY_STARTSEQ 28
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_DEPENDENCY_ENDSEQ 29
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_DEPENDENCY_STRING 30
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_DEPENDENCY_STARTSTR 31
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_DEPENDENCY_ENDSTR 32
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_PUBLIC_DEPENDENCY_STARTSEQ 33
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_PUBLIC_DEPENDENCY_ENDSEQ 34
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_PUBLIC_DEPENDENCY_INT32 35
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_WEAK_DEPENDENCY_STARTSEQ 36
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_WEAK_DEPENDENCY_ENDSEQ 37
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORPROTO_WEAK_DEPENDENCY_INT32 38
+
+/* google.protobuf.FileDescriptorSet */
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORSET_FILE_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORSET_FILE_STARTSEQ 3
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORSET_FILE_ENDSEQ 4
+#define SEL_GOOGLE_PROTOBUF_FILEDESCRIPTORSET_FILE_ENDSUBMSG 5
+
+/* google.protobuf.FileOptions */
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_PACKAGE_STRING 6
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_PACKAGE_STARTSTR 7
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_PACKAGE_ENDSTR 8
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_OUTER_CLASSNAME_STRING 9
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_OUTER_CLASSNAME_STARTSTR 10
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_OUTER_CLASSNAME_ENDSTR 11
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_OPTIMIZE_FOR_INT32 12
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_MULTIPLE_FILES_BOOL 13
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_GO_PACKAGE_STRING 14
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_GO_PACKAGE_STARTSTR 15
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_GO_PACKAGE_ENDSTR 16
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_CC_GENERIC_SERVICES_BOOL 17
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_GENERIC_SERVICES_BOOL 18
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_PY_GENERIC_SERVICES_BOOL 19
+#define SEL_GOOGLE_PROTOBUF_FILEOPTIONS_JAVA_GENERATE_EQUALS_AND_HASH_BOOL 20
+
+/* google.protobuf.MessageOptions */
+#define SEL_GOOGLE_PROTOBUF_MESSAGEOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_MESSAGEOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
+#define SEL_GOOGLE_PROTOBUF_MESSAGEOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
+#define SEL_GOOGLE_PROTOBUF_MESSAGEOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
+#define SEL_GOOGLE_PROTOBUF_MESSAGEOPTIONS_MESSAGE_SET_WIRE_FORMAT_BOOL 6
+#define SEL_GOOGLE_PROTOBUF_MESSAGEOPTIONS_NO_STANDARD_DESCRIPTOR_ACCESSOR_BOOL 7
+
+/* google.protobuf.MethodDescriptorProto */
+#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_OPTIONS_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_OPTIONS_ENDSUBMSG 3
+#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_NAME_STRING 4
+#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_NAME_STARTSTR 5
+#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_NAME_ENDSTR 6
+#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_INPUT_TYPE_STRING 7
+#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_INPUT_TYPE_STARTSTR 8
+#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_INPUT_TYPE_ENDSTR 9
+#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_OUTPUT_TYPE_STRING 10
+#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_OUTPUT_TYPE_STARTSTR 11
+#define SEL_GOOGLE_PROTOBUF_METHODDESCRIPTORPROTO_OUTPUT_TYPE_ENDSTR 12
+
+/* google.protobuf.MethodOptions */
+#define SEL_GOOGLE_PROTOBUF_METHODOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_METHODOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
+#define SEL_GOOGLE_PROTOBUF_METHODOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
+#define SEL_GOOGLE_PROTOBUF_METHODOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
+
+/* google.protobuf.ServiceDescriptorProto */
+#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_METHOD_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_OPTIONS_STARTSUBMSG 3
+#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_METHOD_STARTSEQ 4
+#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_METHOD_ENDSEQ 5
+#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_METHOD_ENDSUBMSG 6
+#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_OPTIONS_ENDSUBMSG 7
+#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_NAME_STRING 8
+#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_NAME_STARTSTR 9
+#define SEL_GOOGLE_PROTOBUF_SERVICEDESCRIPTORPROTO_NAME_ENDSTR 10
+
+/* google.protobuf.ServiceOptions */
+#define SEL_GOOGLE_PROTOBUF_SERVICEOPTIONS_UNINTERPRETED_OPTION_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_SERVICEOPTIONS_UNINTERPRETED_OPTION_STARTSEQ 3
+#define SEL_GOOGLE_PROTOBUF_SERVICEOPTIONS_UNINTERPRETED_OPTION_ENDSEQ 4
+#define SEL_GOOGLE_PROTOBUF_SERVICEOPTIONS_UNINTERPRETED_OPTION_ENDSUBMSG 5
+
+/* google.protobuf.SourceCodeInfo */
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_STARTSEQ 3
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_ENDSEQ 4
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_ENDSUBMSG 5
+
+/* google.protobuf.SourceCodeInfo.Location */
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_PATH_STARTSEQ 2
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_PATH_ENDSEQ 3
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_PATH_INT32 4
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_SPAN_STARTSEQ 5
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_SPAN_ENDSEQ 6
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_SPAN_INT32 7
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_LEADING_COMMENTS_STRING 8
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_LEADING_COMMENTS_STARTSTR 9
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_LEADING_COMMENTS_ENDSTR 10
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_TRAILING_COMMENTS_STRING 11
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_TRAILING_COMMENTS_STARTSTR 12
+#define SEL_GOOGLE_PROTOBUF_SOURCECODEINFO_LOCATION_TRAILING_COMMENTS_ENDSTR 13
+
+/* google.protobuf.UninterpretedOption */
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAME_STARTSUBMSG 2
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAME_STARTSEQ 3
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAME_ENDSEQ 4
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAME_ENDSUBMSG 5
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_IDENTIFIER_VALUE_STRING 6
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_IDENTIFIER_VALUE_STARTSTR 7
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_IDENTIFIER_VALUE_ENDSTR 8
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_POSITIVE_INT_VALUE_UINT64 9
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NEGATIVE_INT_VALUE_INT64 10
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_DOUBLE_VALUE_DOUBLE 11
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_STRING_VALUE_STRING 12
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_STRING_VALUE_STARTSTR 13
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_STRING_VALUE_ENDSTR 14
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_AGGREGATE_VALUE_STRING 15
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_AGGREGATE_VALUE_STARTSTR 16
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_AGGREGATE_VALUE_ENDSTR 17
+
+/* google.protobuf.UninterpretedOption.NamePart */
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAMEPART_NAME_PART_STRING 2
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAMEPART_NAME_PART_STARTSTR 3
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAMEPART_NAME_PART_ENDSTR 4
+#define SEL_GOOGLE_PROTOBUF_UNINTERPRETEDOPTION_NAMEPART_IS_EXTENSION_BOOL 5
+
+const upb_symtab *upbdefs_google_protobuf_descriptor(const void *owner);
+
+/* MessageDefs */
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_DescriptorProto(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.DescriptorProto");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_DescriptorProto_ExtensionRange(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.DescriptorProto.ExtensionRange");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_EnumDescriptorProto(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.EnumDescriptorProto");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_EnumOptions(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.EnumOptions");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_EnumValueDescriptorProto(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.EnumValueDescriptorProto");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_EnumValueOptions(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.EnumValueOptions");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_FieldDescriptorProto(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.FieldDescriptorProto");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_FieldOptions(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.FieldOptions");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_FileDescriptorProto(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.FileDescriptorProto");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_FileDescriptorSet(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.FileDescriptorSet");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_FileOptions(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.FileOptions");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_MessageOptions(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.MessageOptions");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_MethodDescriptorProto(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.MethodDescriptorProto");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_MethodOptions(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.MethodOptions");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_ServiceDescriptorProto(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.ServiceDescriptorProto");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_ServiceOptions(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.ServiceOptions");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_SourceCodeInfo(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.SourceCodeInfo");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_SourceCodeInfo_Location(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.SourceCodeInfo.Location");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_UninterpretedOption(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.UninterpretedOption");
+ assert(m);
+ return m;
+}
+UPB_INLINE const upb_msgdef *upbdefs_google_protobuf_UninterpretedOption_NamePart(const upb_symtab *s) {
+ const upb_msgdef *m = upb_symtab_lookupmsg(s, "google.protobuf.UninterpretedOption.NamePart");
+ assert(m);
+ return m;
+}
+
+
+/* EnumDefs */
+UPB_INLINE const upb_enumdef *upbdefs_google_protobuf_FieldDescriptorProto_Label(const upb_symtab *s) {
+ const upb_enumdef *e = upb_symtab_lookupenum(s, "google.protobuf.FieldDescriptorProto.Label");
+ assert(e);
+ return e;
+}
+UPB_INLINE const upb_enumdef *upbdefs_google_protobuf_FieldDescriptorProto_Type(const upb_symtab *s) {
+ const upb_enumdef *e = upb_symtab_lookupenum(s, "google.protobuf.FieldDescriptorProto.Type");
+ assert(e);
+ return e;
+}
+UPB_INLINE const upb_enumdef *upbdefs_google_protobuf_FieldOptions_CType(const upb_symtab *s) {
+ const upb_enumdef *e = upb_symtab_lookupenum(s, "google.protobuf.FieldOptions.CType");
+ assert(e);
+ return e;
+}
+UPB_INLINE const upb_enumdef *upbdefs_google_protobuf_FileOptions_OptimizeMode(const upb_symtab *s) {
+ const upb_enumdef *e = upb_symtab_lookupenum(s, "google.protobuf.FileOptions.OptimizeMode");
+ assert(e);
+ return e;
+}
+
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_ExtensionRange_end(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto_ExtensionRange(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_ExtensionRange_start(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto_ExtensionRange(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_enum_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 4); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_extension(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 6); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_extension_range(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 5); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_field(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_nested_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 3); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_DescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_DescriptorProto(s), 7); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumDescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumDescriptorProto(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumDescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumDescriptorProto(s), 3); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumDescriptorProto_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumDescriptorProto(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumOptions_allow_alias(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumOptions(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumOptions(s), 999); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumValueDescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumValueDescriptorProto(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumValueDescriptorProto_number(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumValueDescriptorProto(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumValueDescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumValueDescriptorProto(s), 3); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_EnumValueOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_EnumValueOptions(s), 999); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_default_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 7); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_extendee(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_label(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 4); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_number(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 3); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 8); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 5); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldDescriptorProto_type_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldDescriptorProto(s), 6); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_ctype(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_deprecated(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 3); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_experimental_map_key(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 9); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_lazy(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 5); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_packed(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 999); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FieldOptions_weak(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FieldOptions(s), 10); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_dependency(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 3); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_enum_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 5); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_extension(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 7); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_message_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 4); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 8); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_package(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_public_dependency(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 10); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_service(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 6); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_source_code_info(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 9); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorProto_weak_dependency(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorProto(s), 11); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileDescriptorSet_file(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileDescriptorSet(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_cc_generic_services(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 16); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_go_package(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 11); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_java_generate_equals_and_hash(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 20); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_java_generic_services(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 17); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_java_multiple_files(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 10); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_java_outer_classname(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 8); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_java_package(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_optimize_for(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 9); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_py_generic_services(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 18); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_FileOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_FileOptions(s), 999); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MessageOptions_message_set_wire_format(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MessageOptions(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MessageOptions_no_standard_descriptor_accessor(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MessageOptions(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MessageOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MessageOptions(s), 999); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MethodDescriptorProto_input_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MethodDescriptorProto(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MethodDescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MethodDescriptorProto(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MethodDescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MethodDescriptorProto(s), 4); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MethodDescriptorProto_output_type(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MethodDescriptorProto(s), 3); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_MethodOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_MethodOptions(s), 999); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_ServiceDescriptorProto_method(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_ServiceDescriptorProto(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_ServiceDescriptorProto_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_ServiceDescriptorProto(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_ServiceDescriptorProto_options(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_ServiceDescriptorProto(s), 3); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_ServiceOptions_uninterpreted_option(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_ServiceOptions(s), 999); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_SourceCodeInfo_Location_leading_comments(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_SourceCodeInfo_Location(s), 3); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_SourceCodeInfo_Location_path(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_SourceCodeInfo_Location(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_SourceCodeInfo_Location_span(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_SourceCodeInfo_Location(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_SourceCodeInfo_Location_trailing_comments(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_SourceCodeInfo_Location(s), 4); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_SourceCodeInfo_location(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_SourceCodeInfo(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_NamePart_is_extension(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption_NamePart(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_NamePart_name_part(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption_NamePart(s), 1); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_aggregate_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 8); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_double_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 6); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_identifier_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 3); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_name(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 2); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_negative_int_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 5); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_positive_int_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 4); }
+UPB_INLINE const upb_fielddef *upbdefs_google_protobuf_UninterpretedOption_string_value(const upb_symtab *s) { return upb_msgdef_itof(upbdefs_google_protobuf_UninterpretedOption(s), 7); }
+
+UPB_END_EXTERN_C
+
+#ifdef __cplusplus
+
+namespace upbdefs {
+namespace google {
+namespace protobuf {
+namespace descriptor {
+inline upb::reffed_ptr<const upb::SymbolTable> SymbolTable() {
+ const upb::SymbolTable* s = upbdefs_google_protobuf_descriptor(&s);
+ return upb::reffed_ptr<const upb::SymbolTable>(s, &s);
+}
+} /* namespace descriptor */
+} /* namespace protobuf */
+} /* namespace google */
+
+#define RETURN_REFFED(type, func) \
+ const type* obj = func(upbdefs::google::protobuf::descriptor::SymbolTable().get()); \
+ return upb::reffed_ptr<const type>(obj);
+
+namespace google {
+namespace protobuf {
+namespace DescriptorProto {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_DescriptorProto) }
+inline upb::reffed_ptr<const upb::FieldDef> enum_type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_enum_type) }
+inline upb::reffed_ptr<const upb::FieldDef> extension() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_extension) }
+inline upb::reffed_ptr<const upb::FieldDef> extension_range() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_extension_range) }
+inline upb::reffed_ptr<const upb::FieldDef> field() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_field) }
+inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_name) }
+inline upb::reffed_ptr<const upb::FieldDef> nested_type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_nested_type) }
+inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_options) }
+} /* namespace DescriptorProto */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace DescriptorProto {
+namespace ExtensionRange {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_DescriptorProto_ExtensionRange) }
+inline upb::reffed_ptr<const upb::FieldDef> end() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_ExtensionRange_end) }
+inline upb::reffed_ptr<const upb::FieldDef> start() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_DescriptorProto_ExtensionRange_start) }
+} /* namespace ExtensionRange */
+} /* namespace DescriptorProto */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace EnumDescriptorProto {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_EnumDescriptorProto) }
+inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumDescriptorProto_name) }
+inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumDescriptorProto_options) }
+inline upb::reffed_ptr<const upb::FieldDef> value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumDescriptorProto_value) }
+} /* namespace EnumDescriptorProto */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace EnumOptions {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_EnumOptions) }
+inline upb::reffed_ptr<const upb::FieldDef> allow_alias() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumOptions_allow_alias) }
+inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumOptions_uninterpreted_option) }
+} /* namespace EnumOptions */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace EnumValueDescriptorProto {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_EnumValueDescriptorProto) }
+inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumValueDescriptorProto_name) }
+inline upb::reffed_ptr<const upb::FieldDef> number() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumValueDescriptorProto_number) }
+inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumValueDescriptorProto_options) }
+} /* namespace EnumValueDescriptorProto */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace EnumValueOptions {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_EnumValueOptions) }
+inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_EnumValueOptions_uninterpreted_option) }
+} /* namespace EnumValueOptions */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace FieldDescriptorProto {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_FieldDescriptorProto) }
+inline upb::reffed_ptr<const upb::FieldDef> default_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_default_value) }
+inline upb::reffed_ptr<const upb::FieldDef> extendee() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_extendee) }
+inline upb::reffed_ptr<const upb::FieldDef> label() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_label) }
+inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_name) }
+inline upb::reffed_ptr<const upb::FieldDef> number() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_number) }
+inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_options) }
+inline upb::reffed_ptr<const upb::FieldDef> type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_type) }
+inline upb::reffed_ptr<const upb::FieldDef> type_name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldDescriptorProto_type_name) }
+inline upb::reffed_ptr<const upb::EnumDef> Label() { RETURN_REFFED(upb::EnumDef, upbdefs_google_protobuf_FieldDescriptorProto_Label) }
+inline upb::reffed_ptr<const upb::EnumDef> Type() { RETURN_REFFED(upb::EnumDef, upbdefs_google_protobuf_FieldDescriptorProto_Type) }
+} /* namespace FieldDescriptorProto */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace FieldOptions {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_FieldOptions) }
+inline upb::reffed_ptr<const upb::FieldDef> ctype() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_ctype) }
+inline upb::reffed_ptr<const upb::FieldDef> deprecated() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_deprecated) }
+inline upb::reffed_ptr<const upb::FieldDef> experimental_map_key() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_experimental_map_key) }
+inline upb::reffed_ptr<const upb::FieldDef> lazy() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_lazy) }
+inline upb::reffed_ptr<const upb::FieldDef> packed() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_packed) }
+inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_uninterpreted_option) }
+inline upb::reffed_ptr<const upb::FieldDef> weak() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FieldOptions_weak) }
+inline upb::reffed_ptr<const upb::EnumDef> CType() { RETURN_REFFED(upb::EnumDef, upbdefs_google_protobuf_FieldOptions_CType) }
+} /* namespace FieldOptions */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace FileDescriptorProto {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_FileDescriptorProto) }
+inline upb::reffed_ptr<const upb::FieldDef> dependency() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_dependency) }
+inline upb::reffed_ptr<const upb::FieldDef> enum_type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_enum_type) }
+inline upb::reffed_ptr<const upb::FieldDef> extension() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_extension) }
+inline upb::reffed_ptr<const upb::FieldDef> message_type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_message_type) }
+inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_name) }
+inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_options) }
+inline upb::reffed_ptr<const upb::FieldDef> package() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_package) }
+inline upb::reffed_ptr<const upb::FieldDef> public_dependency() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_public_dependency) }
+inline upb::reffed_ptr<const upb::FieldDef> service() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_service) }
+inline upb::reffed_ptr<const upb::FieldDef> source_code_info() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_source_code_info) }
+inline upb::reffed_ptr<const upb::FieldDef> weak_dependency() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorProto_weak_dependency) }
+} /* namespace FileDescriptorProto */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace FileDescriptorSet {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_FileDescriptorSet) }
+inline upb::reffed_ptr<const upb::FieldDef> file() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileDescriptorSet_file) }
+} /* namespace FileDescriptorSet */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace FileOptions {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_FileOptions) }
+inline upb::reffed_ptr<const upb::FieldDef> cc_generic_services() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_cc_generic_services) }
+inline upb::reffed_ptr<const upb::FieldDef> go_package() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_go_package) }
+inline upb::reffed_ptr<const upb::FieldDef> java_generate_equals_and_hash() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_java_generate_equals_and_hash) }
+inline upb::reffed_ptr<const upb::FieldDef> java_generic_services() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_java_generic_services) }
+inline upb::reffed_ptr<const upb::FieldDef> java_multiple_files() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_java_multiple_files) }
+inline upb::reffed_ptr<const upb::FieldDef> java_outer_classname() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_java_outer_classname) }
+inline upb::reffed_ptr<const upb::FieldDef> java_package() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_java_package) }
+inline upb::reffed_ptr<const upb::FieldDef> optimize_for() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_optimize_for) }
+inline upb::reffed_ptr<const upb::FieldDef> py_generic_services() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_py_generic_services) }
+inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_FileOptions_uninterpreted_option) }
+inline upb::reffed_ptr<const upb::EnumDef> OptimizeMode() { RETURN_REFFED(upb::EnumDef, upbdefs_google_protobuf_FileOptions_OptimizeMode) }
+} /* namespace FileOptions */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace MessageOptions {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_MessageOptions) }
+inline upb::reffed_ptr<const upb::FieldDef> message_set_wire_format() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MessageOptions_message_set_wire_format) }
+inline upb::reffed_ptr<const upb::FieldDef> no_standard_descriptor_accessor() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MessageOptions_no_standard_descriptor_accessor) }
+inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MessageOptions_uninterpreted_option) }
+} /* namespace MessageOptions */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace MethodDescriptorProto {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_MethodDescriptorProto) }
+inline upb::reffed_ptr<const upb::FieldDef> input_type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MethodDescriptorProto_input_type) }
+inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MethodDescriptorProto_name) }
+inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MethodDescriptorProto_options) }
+inline upb::reffed_ptr<const upb::FieldDef> output_type() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MethodDescriptorProto_output_type) }
+} /* namespace MethodDescriptorProto */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace MethodOptions {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_MethodOptions) }
+inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_MethodOptions_uninterpreted_option) }
+} /* namespace MethodOptions */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace ServiceDescriptorProto {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_ServiceDescriptorProto) }
+inline upb::reffed_ptr<const upb::FieldDef> method() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_ServiceDescriptorProto_method) }
+inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_ServiceDescriptorProto_name) }
+inline upb::reffed_ptr<const upb::FieldDef> options() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_ServiceDescriptorProto_options) }
+} /* namespace ServiceDescriptorProto */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace ServiceOptions {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_ServiceOptions) }
+inline upb::reffed_ptr<const upb::FieldDef> uninterpreted_option() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_ServiceOptions_uninterpreted_option) }
+} /* namespace ServiceOptions */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace SourceCodeInfo {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_SourceCodeInfo) }
+inline upb::reffed_ptr<const upb::FieldDef> location() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_SourceCodeInfo_location) }
+} /* namespace SourceCodeInfo */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace SourceCodeInfo {
+namespace Location {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_SourceCodeInfo_Location) }
+inline upb::reffed_ptr<const upb::FieldDef> leading_comments() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_SourceCodeInfo_Location_leading_comments) }
+inline upb::reffed_ptr<const upb::FieldDef> path() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_SourceCodeInfo_Location_path) }
+inline upb::reffed_ptr<const upb::FieldDef> span() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_SourceCodeInfo_Location_span) }
+inline upb::reffed_ptr<const upb::FieldDef> trailing_comments() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_SourceCodeInfo_Location_trailing_comments) }
+} /* namespace Location */
+} /* namespace SourceCodeInfo */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace UninterpretedOption {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_UninterpretedOption) }
+inline upb::reffed_ptr<const upb::FieldDef> aggregate_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_aggregate_value) }
+inline upb::reffed_ptr<const upb::FieldDef> double_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_double_value) }
+inline upb::reffed_ptr<const upb::FieldDef> identifier_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_identifier_value) }
+inline upb::reffed_ptr<const upb::FieldDef> name() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_name) }
+inline upb::reffed_ptr<const upb::FieldDef> negative_int_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_negative_int_value) }
+inline upb::reffed_ptr<const upb::FieldDef> positive_int_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_positive_int_value) }
+inline upb::reffed_ptr<const upb::FieldDef> string_value() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_string_value) }
+} /* namespace UninterpretedOption */
+} /* namespace protobuf */
+} /* namespace google */
+
+namespace google {
+namespace protobuf {
+namespace UninterpretedOption {
+namespace NamePart {
+inline upb::reffed_ptr<const upb::MessageDef> MessageDef() { RETURN_REFFED(upb::MessageDef, upbdefs_google_protobuf_UninterpretedOption_NamePart) }
+inline upb::reffed_ptr<const upb::FieldDef> is_extension() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_NamePart_is_extension) }
+inline upb::reffed_ptr<const upb::FieldDef> name_part() { RETURN_REFFED(upb::FieldDef, upbdefs_google_protobuf_UninterpretedOption_NamePart_name_part) }
+} /* namespace NamePart */
+} /* namespace UninterpretedOption */
+} /* namespace protobuf */
+} /* namespace google */
+
+} /* namespace upbdefs */
+
+
+#undef RETURN_REFFED
+#endif /* __cplusplus */
+
+#endif /* GOOGLE_PROTOBUF_DESCRIPTOR_UPB_H_ */
/*
* upb - a minimalist implementation of protocol buffers.
*
@@ -6953,134 +7107,111 @@ class CodeCache;
class Decoder;
class DecoderMethod;
class DecoderMethodOptions;
-} // namespace pb
-} // namespace upb
+} /* namespace pb */
+} /* namespace upb */
#endif
-UPB_DECLARE_TYPE(upb::pb::CodeCache, upb_pbcodecache);
-UPB_DECLARE_TYPE(upb::pb::Decoder, upb_pbdecoder);
-UPB_DECLARE_TYPE(upb::pb::DecoderMethod, upb_pbdecodermethod);
-UPB_DECLARE_TYPE(upb::pb::DecoderMethodOptions, upb_pbdecodermethodopts);
+UPB_DECLARE_TYPE(upb::pb::CodeCache, upb_pbcodecache)
+UPB_DECLARE_TYPE(upb::pb::Decoder, upb_pbdecoder)
+UPB_DECLARE_TYPE(upb::pb::DecoderMethodOptions, upb_pbdecodermethodopts)
+
+UPB_DECLARE_DERIVED_TYPE(upb::pb::DecoderMethod, upb::RefCounted,
+ upb_pbdecodermethod, upb_refcounted)
-// The parameters one uses to construct a DecoderMethod.
-// TODO(haberman): move allowjit here? Seems more convenient for users.
-UPB_DEFINE_CLASS0(upb::pb::DecoderMethodOptions,
+#ifdef __cplusplus
+
+/* The parameters one uses to construct a DecoderMethod.
+ * TODO(haberman): move allowjit here? Seems more convenient for users.
+ * TODO(haberman): move this to be heap allocated for ABI stability. */
+class upb::pb::DecoderMethodOptions {
public:
- // Parameter represents the destination handlers that this method will push
- // to.
+ /* Parameter represents the destination handlers that this method will push
+ * to. */
explicit DecoderMethodOptions(const Handlers* dest_handlers);
- // Should the decoder push submessages to lazy handlers for fields that have
- // them? The caller should set this iff the lazy handlers expect data that is
- // in protobuf binary format and the caller wishes to lazy parse it.
+ /* Should the decoder push submessages to lazy handlers for fields that have
+ * them? The caller should set this iff the lazy handlers expect data that is
+ * in protobuf binary format and the caller wishes to lazy parse it. */
void set_lazy(bool lazy);
-,
-UPB_DEFINE_STRUCT0(upb_pbdecodermethodopts,
+#else
+struct upb_pbdecodermethodopts {
+#endif
const upb_handlers *handlers;
bool lazy;
-));
+};
+
+#ifdef __cplusplus
-// Represents the code to parse a protobuf according to a destination Handlers.
-UPB_DEFINE_CLASS1(upb::pb::DecoderMethod, upb::RefCounted,
+/* Represents the code to parse a protobuf according to a destination
+ * Handlers. */
+class upb::pb::DecoderMethod {
public:
- // From upb::ReferenceCounted.
- void Ref(const void* owner) const;
- void Unref(const void* owner) const;
- void DonateRef(const void* from, const void* to) const;
- void CheckRef(const void* owner) const;
-
- // The destination handlers that are statically bound to this method.
- // This method is only capable of outputting to a sink that uses these
- // handlers.
+ /* Include base methods from upb::ReferenceCounted. */
+ UPB_REFCOUNTED_CPPMETHODS
+
+ /* The destination handlers that are statically bound to this method.
+ * This method is only capable of outputting to a sink that uses these
+ * handlers. */
const Handlers* dest_handlers() const;
- // The input handlers for this decoder method.
+ /* The input handlers for this decoder method. */
const BytesHandler* input_handler() const;
- // Whether this method is native.
+ /* Whether this method is native. */
bool is_native() const;
- // Convenience method for generating a DecoderMethod without explicitly
- // creating a CodeCache.
+ /* Convenience method for generating a DecoderMethod without explicitly
+ * creating a CodeCache. */
static reffed_ptr<const DecoderMethod> New(const DecoderMethodOptions& opts);
private:
- UPB_DISALLOW_POD_OPS(DecoderMethod, upb::pb::DecoderMethod);
-,
-UPB_DEFINE_STRUCT(upb_pbdecodermethod, upb_refcounted,
- // While compiling, the base is relative in "ofs", after compiling it is
- // absolute in "ptr".
- union {
- uint32_t ofs; // PC offset of method.
- void *ptr; // Pointer to bytecode or machine code for this method.
- } code_base;
-
- // The decoder method group to which this method belongs. We own a ref.
- // Owning a ref on the entire group is more coarse-grained than is strictly
- // necessary; all we truly require is that methods we directly reference
- // outlive us, while the group could contain many other messages we don't
- // require. But the group represents the messages that were
- // allocated+compiled together, so it makes the most sense to free them
- // together also.
- const upb_refcounted *group;
-
- // Whether this method is native code or bytecode.
- bool is_native_;
-
- // The handler one calls to invoke this method.
- upb_byteshandler input_handler_;
-
- // The destination handlers this method is bound to. We own a ref.
- const upb_handlers *dest_handlers_;
+ UPB_DISALLOW_POD_OPS(DecoderMethod, upb::pb::DecoderMethod)
+};
- // Dispatch table -- used by both bytecode decoder and JIT when encountering a
- // field number that wasn't the one we were expecting to see. See
- // decoder.int.h for the layout of this table.
- upb_inttable dispatch;
-));
+#endif
-// Preallocation hint: decoder won't allocate more bytes than this when first
-// constructed. This hint may be an overestimate for some build configurations.
-// But if the decoder library is upgraded without recompiling the application,
-// it may be an underestimate.
+/* Preallocation hint: decoder won't allocate more bytes than this when first
+ * constructed. This hint may be an overestimate for some build configurations.
+ * But if the decoder library is upgraded without recompiling the application,
+ * it may be an underestimate. */
#define UPB_PB_DECODER_SIZE 4400
#ifdef __cplusplus
-// A Decoder receives binary protobuf data on its input sink and pushes the
-// decoded data to its output sink.
+/* A Decoder receives binary protobuf data on its input sink and pushes the
+ * decoded data to its output sink. */
class upb::pb::Decoder {
public:
- // Constructs a decoder instance for the given method, which must outlive this
- // decoder. Any errors during parsing will be set on the given status, which
- // must also outlive this decoder.
- //
- // The sink must match the given method.
+ /* Constructs a decoder instance for the given method, which must outlive this
+ * decoder. Any errors during parsing will be set on the given status, which
+ * must also outlive this decoder.
+ *
+ * The sink must match the given method. */
static Decoder* Create(Environment* env, const DecoderMethod* method,
Sink* output);
- // Returns the DecoderMethod this decoder is parsing from.
+ /* Returns the DecoderMethod this decoder is parsing from. */
const DecoderMethod* method() const;
- // The sink on which this decoder receives input.
+ /* The sink on which this decoder receives input. */
BytesSink* input();
- // Returns number of bytes successfully parsed.
- //
- // This can be useful for determining the stream position where an error
- // occurred.
- //
- // This value may not be up-to-date when called from inside a parsing
- // callback.
+ /* Returns number of bytes successfully parsed.
+ *
+ * This can be useful for determining the stream position where an error
+ * occurred.
+ *
+ * This value may not be up-to-date when called from inside a parsing
+ * callback. */
uint64_t BytesParsed() const;
- // Gets/sets the parsing nexting limit. If the total number of nested
- // submessages and repeated fields hits this limit, parsing will fail. This
- // is a resource limit that controls the amount of memory used by the parsing
- // stack.
- //
- // Setting the limit will fail if the parser is currently suspended at a depth
- // greater than this, or if memory allocation of the stack fails.
+ /* Gets/sets the parsing nexting limit. If the total number of nested
+ * submessages and repeated fields hits this limit, parsing will fail. This
+ * is a resource limit that controls the amount of memory used by the parsing
+ * stack.
+ *
+ * Setting the limit will fail if the parser is currently suspended at a depth
+ * greater than this, or if memory allocation of the stack fails. */
size_t max_nesting() const;
bool set_max_nesting(size_t max);
@@ -7089,57 +7220,62 @@ class upb::pb::Decoder {
static const size_t kSize = UPB_PB_DECODER_SIZE;
private:
- UPB_DISALLOW_POD_OPS(Decoder, upb::pb::Decoder);
+ UPB_DISALLOW_POD_OPS(Decoder, upb::pb::Decoder)
};
-#endif // __cplusplus
+#endif /* __cplusplus */
-// A class for caching protobuf processing code, whether bytecode for the
-// interpreted decoder or machine code for the JIT.
-//
-// This class is not thread-safe.
-UPB_DEFINE_CLASS0(upb::pb::CodeCache,
+#ifdef __cplusplus
+
+/* A class for caching protobuf processing code, whether bytecode for the
+ * interpreted decoder or machine code for the JIT.
+ *
+ * This class is not thread-safe.
+ *
+ * TODO(haberman): move this to be heap allocated for ABI stability. */
+class upb::pb::CodeCache {
public:
CodeCache();
~CodeCache();
- // Whether the cache is allowed to generate machine code. Defaults to true.
- // There is no real reason to turn it off except for testing or if you are
- // having a specific problem with the JIT.
- //
- // Note that allow_jit = true does not *guarantee* that the code will be JIT
- // compiled. If this platform is not supported or the JIT was not compiled
- // in, the code may still be interpreted.
+ /* Whether the cache is allowed to generate machine code. Defaults to true.
+ * There is no real reason to turn it off except for testing or if you are
+ * having a specific problem with the JIT.
+ *
+ * Note that allow_jit = true does not *guarantee* that the code will be JIT
+ * compiled. If this platform is not supported or the JIT was not compiled
+ * in, the code may still be interpreted. */
bool allow_jit() const;
- // This may only be called when the object is first constructed, and prior to
- // any code generation, otherwise returns false and does nothing.
+ /* This may only be called when the object is first constructed, and prior to
+ * any code generation, otherwise returns false and does nothing. */
bool set_allow_jit(bool allow);
- // Returns a DecoderMethod that can push data to the given handlers.
- // If a suitable method already exists, it will be returned from the cache.
- //
- // Specifying the destination handlers here allows the DecoderMethod to be
- // statically bound to the destination handlers if possible, which can allow
- // more efficient decoding. However the returned method may or may not
- // actually be statically bound. But in all cases, the returned method can
- // push data to the given handlers.
+ /* Returns a DecoderMethod that can push data to the given handlers.
+ * If a suitable method already exists, it will be returned from the cache.
+ *
+ * Specifying the destination handlers here allows the DecoderMethod to be
+ * statically bound to the destination handlers if possible, which can allow
+ * more efficient decoding. However the returned method may or may not
+ * actually be statically bound. But in all cases, the returned method can
+ * push data to the given handlers. */
const DecoderMethod *GetDecoderMethod(const DecoderMethodOptions& opts);
- // If/when someone needs to explicitly create a dynamically-bound
- // DecoderMethod*, we can add a method to get it here.
+ /* If/when someone needs to explicitly create a dynamically-bound
+ * DecoderMethod*, we can add a method to get it here. */
private:
- UPB_DISALLOW_COPY_AND_ASSIGN(CodeCache);
-,
-UPB_DEFINE_STRUCT0(upb_pbcodecache,
+ UPB_DISALLOW_COPY_AND_ASSIGN(CodeCache)
+#else
+struct upb_pbcodecache {
+#endif
bool allow_jit_;
- // Array of mgroups.
+ /* Array of mgroups. */
upb_inttable groups;
-));
+};
-UPB_BEGIN_EXTERN_C // {
+UPB_BEGIN_EXTERN_C
upb_pbdecoder *upb_pbdecoder_create(upb_env *e,
const upb_pbdecodermethod *method,
@@ -7155,12 +7291,10 @@ void upb_pbdecodermethodopts_init(upb_pbdecodermethodopts *opts,
const upb_handlers *h);
void upb_pbdecodermethodopts_setlazy(upb_pbdecodermethodopts *opts, bool lazy);
-void upb_pbdecodermethod_ref(const upb_pbdecodermethod *m, const void *owner);
-void upb_pbdecodermethod_unref(const upb_pbdecodermethod *m, const void *owner);
-void upb_pbdecodermethod_donateref(const upb_pbdecodermethod *m,
- const void *from, const void *to);
-void upb_pbdecodermethod_checkref(const upb_pbdecodermethod *m,
- const void *owner);
+
+/* Include refcounted methods like upb_pbdecodermethod_ref(). */
+UPB_REFCOUNTED_CMETHODS(upb_pbdecodermethod, upb_pbdecodermethod_upcast)
+
const upb_handlers *upb_pbdecodermethod_desthandlers(
const upb_pbdecodermethod *m);
const upb_byteshandler *upb_pbdecodermethod_inputhandler(
@@ -7176,7 +7310,7 @@ bool upb_pbcodecache_setallowjit(upb_pbcodecache *c, bool allow);
const upb_pbdecodermethod *upb_pbcodecache_getdecodermethod(
upb_pbcodecache *c, const upb_pbdecodermethodopts *opts);
-UPB_END_EXTERN_C // }
+UPB_END_EXTERN_C
#ifdef __cplusplus
@@ -7184,7 +7318,7 @@ namespace upb {
namespace pb {
-// static
+/* static */
inline Decoder* Decoder::Create(Environment* env, const DecoderMethod* m,
Sink* sink) {
return upb_pbdecoder_create(env, m, sink);
@@ -7213,18 +7347,6 @@ inline void DecoderMethodOptions::set_lazy(bool lazy) {
upb_pbdecodermethodopts_setlazy(this, lazy);
}
-inline void DecoderMethod::Ref(const void *owner) const {
- upb_pbdecodermethod_ref(this, owner);
-}
-inline void DecoderMethod::Unref(const void *owner) const {
- upb_pbdecodermethod_unref(this, owner);
-}
-inline void DecoderMethod::DonateRef(const void *from, const void *to) const {
- upb_pbdecodermethod_donateref(this, from, to);
-}
-inline void DecoderMethod::CheckRef(const void *owner) const {
- upb_pbdecodermethod_checkref(this, owner);
-}
inline const Handlers* DecoderMethod::dest_handlers() const {
return upb_pbdecodermethod_desthandlers(this);
}
@@ -7234,7 +7356,7 @@ inline const BytesHandler* DecoderMethod::input_handler() const {
inline bool DecoderMethod::is_native() const {
return upb_pbdecodermethod_isnative(this);
}
-// static
+/* static */
inline reffed_ptr<const DecoderMethod> DecoderMethod::New(
const DecoderMethodOptions &opts) {
const upb_pbdecodermethod *m = upb_pbdecodermethod_new(&opts, &m);
@@ -7258,33 +7380,44 @@ inline const DecoderMethod *CodeCache::GetDecoderMethod(
return upb_pbcodecache_getdecodermethod(this, &opts);
}
-} // namespace pb
-} // namespace upb
+} /* namespace pb */
+} /* namespace upb */
-#endif // __cplusplus
+#endif /* __cplusplus */
#endif /* UPB_DECODER_H_ */
-// Opcode definitions. The canonical meaning of each opcode is its
-// implementation in the interpreter (the JIT is written to match this).
-//
-// All instructions have the opcode in the low byte.
-// Instruction format for most instructions is:
-//
-// +-------------------+--------+
-// | arg (24) | op (8) |
-// +-------------------+--------+
-//
-// Exceptions are indicated below. A few opcodes are multi-word.
+/* C++ names are not actually used since this type isn't exposed to users. */
+#ifdef __cplusplus
+namespace upb {
+namespace pb {
+class MessageGroup;
+} /* namespace pb */
+} /* namespace upb */
+#endif
+UPB_DECLARE_DERIVED_TYPE(upb::pb::MessageGroup, upb::RefCounted,
+ mgroup, upb_refcounted)
+
+/* Opcode definitions. The canonical meaning of each opcode is its
+ * implementation in the interpreter (the JIT is written to match this).
+ *
+ * All instructions have the opcode in the low byte.
+ * Instruction format for most instructions is:
+ *
+ * +-------------------+--------+
+ * | arg (24) | op (8) |
+ * +-------------------+--------+
+ *
+ * Exceptions are indicated below. A few opcodes are multi-word. */
typedef enum {
- // Opcodes 1-8, 13, 15-18 parse their respective descriptor types.
- // Arg for all of these is the upb selector for this field.
+ /* Opcodes 1-8, 13, 15-18 parse their respective descriptor types.
+ * Arg for all of these is the upb selector for this field. */
#define T(type) OP_PARSE_ ## type = UPB_DESCRIPTOR_TYPE_ ## type
T(DOUBLE), T(FLOAT), T(INT64), T(UINT64), T(INT32), T(FIXED64), T(FIXED32),
T(BOOL), T(UINT32), T(SFIXED32), T(SFIXED64), T(SINT32), T(SINT64),
#undef T
- OP_STARTMSG = 9, // No arg.
- OP_ENDMSG = 10, // No arg.
+ OP_STARTMSG = 9, /* No arg. */
+ OP_ENDMSG = 10, /* No arg. */
OP_STARTSEQ = 11,
OP_ENDSEQ = 12,
OP_STARTSUBMSG = 14,
@@ -7293,148 +7426,185 @@ typedef enum {
OP_STRING = 21,
OP_ENDSTR = 22,
- OP_PUSHTAGDELIM = 23, // No arg.
- OP_PUSHLENDELIM = 24, // No arg.
- OP_POP = 25, // No arg.
- OP_SETDELIM = 26, // No arg.
- OP_SETBIGGROUPNUM = 27, // two words: | unused (24) | opc || groupnum (32) |
+ OP_PUSHTAGDELIM = 23, /* No arg. */
+ OP_PUSHLENDELIM = 24, /* No arg. */
+ OP_POP = 25, /* No arg. */
+ OP_SETDELIM = 26, /* No arg. */
+ OP_SETBIGGROUPNUM = 27, /* two words:
+ * | unused (24) | opc (8) |
+ * | groupnum (32) | */
OP_CHECKDELIM = 28,
OP_CALL = 29,
OP_RET = 30,
OP_BRANCH = 31,
- // Different opcodes depending on how many bytes expected.
- OP_TAG1 = 32, // | expected tag (16) | jump target (8) | opc (8) |
- OP_TAG2 = 33, // | expected tag (16) | jump target (8) | opc (8) |
- OP_TAGN = 34, // three words:
- // | unused (16) | jump target(8) | opc (8) |
- // | expected tag 1 (32) |
- // | expected tag 2 (32) |
+ /* Different opcodes depending on how many bytes expected. */
+ OP_TAG1 = 32, /* | match tag (16) | jump target (8) | opc (8) | */
+ OP_TAG2 = 33, /* | match tag (16) | jump target (8) | opc (8) | */
+ OP_TAGN = 34, /* three words: */
+ /* | unused (16) | jump target(8) | opc (8) | */
+ /* | match tag 1 (32) | */
+ /* | match tag 2 (32) | */
- OP_SETDISPATCH = 35, // N words:
- // | unused (24) | opc |
- // | upb_inttable* (32 or 64) |
+ OP_SETDISPATCH = 35, /* N words: */
+ /* | unused (24) | opc | */
+ /* | upb_inttable* (32 or 64) | */
- OP_DISPATCH = 36, // No arg.
+ OP_DISPATCH = 36, /* No arg. */
- OP_HALT = 37, // No arg.
+ OP_HALT = 37 /* No arg. */
} opcode;
#define OP_MAX OP_HALT
UPB_INLINE opcode getop(uint32_t instr) { return instr & 0xff; }
-// Method group; represents a set of decoder methods that had their code
-// emitted together, and must therefore be freed together. Immutable once
-// created. It is possible we may want to expose this to users at some point.
-//
-// Overall ownership of Decoder objects looks like this:
-//
-// +----------+
-// | | <---> DecoderMethod
-// | method |
-// CodeCache ---> | group | <---> DecoderMethod
-// | |
-// | (mgroup) | <---> DecoderMethod
-// +----------+
-typedef struct {
+/* Method group; represents a set of decoder methods that had their code
+ * emitted together, and must therefore be freed together. Immutable once
+ * created. It is possible we may want to expose this to users at some point.
+ *
+ * Overall ownership of Decoder objects looks like this:
+ *
+ * +----------+
+ * | | <---> DecoderMethod
+ * | method |
+ * CodeCache ---> | group | <---> DecoderMethod
+ * | |
+ * | (mgroup) | <---> DecoderMethod
+ * +----------+
+ */
+struct mgroup {
upb_refcounted base;
- // Maps upb_msgdef/upb_handlers -> upb_pbdecodermethod. We own refs on the
- // methods.
+ /* Maps upb_msgdef/upb_handlers -> upb_pbdecodermethod. We own refs on the
+ * methods. */
upb_inttable methods;
- // When we add the ability to link to previously existing mgroups, we'll
- // need an array of mgroups we reference here, and own refs on them.
+ /* When we add the ability to link to previously existing mgroups, we'll
+ * need an array of mgroups we reference here, and own refs on them. */
- // The bytecode for our methods, if any exists. Owned by us.
+ /* The bytecode for our methods, if any exists. Owned by us. */
uint32_t *bytecode;
uint32_t *bytecode_end;
#ifdef UPB_USE_JIT_X64
- // JIT-generated machine code, if any.
+ /* JIT-generated machine code, if any. */
upb_string_handlerfunc *jit_code;
- // The size of the jit_code (required to munmap()).
+ /* The size of the jit_code (required to munmap()). */
size_t jit_size;
char *debug_info;
void *dl;
#endif
-} mgroup;
-
-// The maximum that any submessages can be nested. Matches proto2's limit.
-// This specifies the size of the decoder's statically-sized array and therefore
-// setting it high will cause the upb::pb::Decoder object to be larger.
-//
-// If necessary we can add a runtime-settable property to Decoder that allow
-// this to be larger than the compile-time setting, but this would add
-// complexity, particularly since we would have to decide how/if to give users
-// the ability to set a custom memory allocation function.
+};
+
+/* The maximum that any submessages can be nested. Matches proto2's limit.
+ * This specifies the size of the decoder's statically-sized array and therefore
+ * setting it high will cause the upb::pb::Decoder object to be larger.
+ *
+ * If necessary we can add a runtime-settable property to Decoder that allow
+ * this to be larger than the compile-time setting, but this would add
+ * complexity, particularly since we would have to decide how/if to give users
+ * the ability to set a custom memory allocation function. */
#define UPB_DECODER_MAX_NESTING 64
-// Internal-only struct used by the decoder.
+/* Internal-only struct used by the decoder. */
typedef struct {
- // Space optimization note: we store two pointers here that the JIT
- // doesn't need at all; the upb_handlers* inside the sink and
- // the dispatch table pointer. We can optimze so that the JIT uses
- // smaller stack frames than the interpreter. The only thing we need
- // to guarantee is that the fallback routines can find end_ofs.
+ /* Space optimization note: we store two pointers here that the JIT
+ * doesn't need at all; the upb_handlers* inside the sink and
+ * the dispatch table pointer. We can optimze so that the JIT uses
+ * smaller stack frames than the interpreter. The only thing we need
+ * to guarantee is that the fallback routines can find end_ofs. */
upb_sink sink;
- // The absolute stream offset of the end-of-frame delimiter.
- // Non-delimited frames (groups and non-packed repeated fields) reuse the
- // delimiter of their parent, even though the frame may not end there.
- //
- // NOTE: the JIT stores a slightly different value here for non-top frames.
- // It stores the value relative to the end of the enclosed message. But the
- // top frame is still stored the same way, which is important for ensuring
- // that calls from the JIT into C work correctly.
+ /* The absolute stream offset of the end-of-frame delimiter.
+ * Non-delimited frames (groups and non-packed repeated fields) reuse the
+ * delimiter of their parent, even though the frame may not end there.
+ *
+ * NOTE: the JIT stores a slightly different value here for non-top frames.
+ * It stores the value relative to the end of the enclosed message. But the
+ * top frame is still stored the same way, which is important for ensuring
+ * that calls from the JIT into C work correctly. */
uint64_t end_ofs;
const uint32_t *base;
- // 0 indicates a length-delimited field.
- // A positive number indicates a known group.
- // A negative number indicates an unknown group.
+ /* 0 indicates a length-delimited field.
+ * A positive number indicates a known group.
+ * A negative number indicates an unknown group. */
int32_t groupnum;
- upb_inttable *dispatch; // Not used by the JIT.
+ upb_inttable *dispatch; /* Not used by the JIT. */
} upb_pbdecoder_frame;
+struct upb_pbdecodermethod {
+ upb_refcounted base;
+
+ /* While compiling, the base is relative in "ofs", after compiling it is
+ * absolute in "ptr". */
+ union {
+ uint32_t ofs; /* PC offset of method. */
+ void *ptr; /* Pointer to bytecode or machine code for this method. */
+ } code_base;
+
+ /* The decoder method group to which this method belongs. We own a ref.
+ * Owning a ref on the entire group is more coarse-grained than is strictly
+ * necessary; all we truly require is that methods we directly reference
+ * outlive us, while the group could contain many other messages we don't
+ * require. But the group represents the messages that were
+ * allocated+compiled together, so it makes the most sense to free them
+ * together also. */
+ const upb_refcounted *group;
+
+ /* Whether this method is native code or bytecode. */
+ bool is_native_;
+
+ /* The handler one calls to invoke this method. */
+ upb_byteshandler input_handler_;
+
+ /* The destination handlers this method is bound to. We own a ref. */
+ const upb_handlers *dest_handlers_;
+
+ /* Dispatch table -- used by both bytecode decoder and JIT when encountering a
+ * field number that wasn't the one we were expecting to see. See
+ * decoder.int.h for the layout of this table. */
+ upb_inttable dispatch;
+};
+
struct upb_pbdecoder {
upb_env *env;
- // Our input sink.
+ /* Our input sink. */
upb_bytessink input_;
- // The decoder method we are parsing with (owned).
+ /* The decoder method we are parsing with (owned). */
const upb_pbdecodermethod *method_;
size_t call_len;
const uint32_t *pc, *last;
- // Current input buffer and its stream offset.
+ /* Current input buffer and its stream offset. */
const char *buf, *ptr, *end, *checkpoint;
- // End of the delimited region, relative to ptr, or NULL if not in this buf.
+ /* End of the delimited region, relative to ptr, NULL if not in this buf. */
const char *delim_end;
- // End of the delimited region, relative to ptr, or end if not in this buf.
+ /* End of the delimited region, relative to ptr, end if not in this buf. */
const char *data_end;
- // Overall stream offset of "buf."
+ /* Overall stream offset of "buf." */
uint64_t bufstart_ofs;
- // Buffer for residual bytes not parsed from the previous buffer.
- // The maximum number of residual bytes we require is 12; a five-byte
- // unknown tag plus an eight-byte value, less one because the value
- // is only a partial value.
+ /* Buffer for residual bytes not parsed from the previous buffer.
+ * The maximum number of residual bytes we require is 12; a five-byte
+ * unknown tag plus an eight-byte value, less one because the value
+ * is only a partial value. */
char residual[12];
char *residual_end;
- // Stores the user buffer passed to our decode function.
+ /* Stores the user buffer passed to our decode function. */
const char *buf_param;
size_t size_param;
const upb_bufhandle *handle;
- // Our internal stack.
+ /* Our internal stack. */
upb_pbdecoder_frame *stack, *top, *limit;
const uint32_t **callstack;
size_t stack_size;
@@ -7442,22 +7612,22 @@ struct upb_pbdecoder {
upb_status *status;
#ifdef UPB_USE_JIT_X64
- // Used momentarily by the generated code to store a value while a user
- // function is called.
+ /* Used momentarily by the generated code to store a value while a user
+ * function is called. */
uint32_t tmp_len;
const void *saved_rsp;
#endif
};
-// Decoder entry points; used as handlers.
+/* Decoder entry points; used as handlers. */
void *upb_pbdecoder_startbc(void *closure, const void *pc, size_t size_hint);
void *upb_pbdecoder_startjit(void *closure, const void *hd, size_t size_hint);
size_t upb_pbdecoder_decode(void *closure, const void *hd, const char *buf,
size_t size, const upb_bufhandle *handle);
bool upb_pbdecoder_end(void *closure, const void *handler_data);
-// Decoder-internal functions that the JIT calls to handle fallback paths.
+/* Decoder-internal functions that the JIT calls to handle fallback paths. */
int32_t upb_pbdecoder_resume(upb_pbdecoder *d, void *p, const char *buf,
size_t size, const upb_bufhandle *handle);
size_t upb_pbdecoder_suspend(upb_pbdecoder *d);
@@ -7469,41 +7639,42 @@ int32_t upb_pbdecoder_decode_f32(upb_pbdecoder *d, uint32_t *u32);
int32_t upb_pbdecoder_decode_f64(upb_pbdecoder *d, uint64_t *u64);
void upb_pbdecoder_seterr(upb_pbdecoder *d, const char *msg);
-// Error messages that are shared between the bytecode and JIT decoders.
+/* Error messages that are shared between the bytecode and JIT decoders. */
extern const char *kPbDecoderStackOverflow;
-// Access to decoderplan members needed by the decoder.
+/* Access to decoderplan members needed by the decoder. */
const char *upb_pbdecoder_getopname(unsigned int op);
-// JIT codegen entry point.
+/* JIT codegen entry point. */
void upb_pbdecoder_jit(mgroup *group);
void upb_pbdecoder_freejit(mgroup *group);
+UPB_REFCOUNTED_CMETHODS(mgroup, mgroup_upcast)
-// A special label that means "do field dispatch for this message and branch to
-// wherever that takes you."
+/* A special label that means "do field dispatch for this message and branch to
+ * wherever that takes you." */
#define LABEL_DISPATCH 0
-// A special slot in the dispatch table that stores the epilogue (ENDMSG and/or
-// RET) for branching to when we find an appropriate ENDGROUP tag.
+/* A special slot in the dispatch table that stores the epilogue (ENDMSG and/or
+ * RET) for branching to when we find an appropriate ENDGROUP tag. */
#define DISPATCH_ENDMSG 0
-// It's important to use this invalid wire type instead of 0 (which is a valid
-// wire type).
+/* It's important to use this invalid wire type instead of 0 (which is a valid
+ * wire type). */
#define NO_WIRE_TYPE 0xff
-// The dispatch table layout is:
-// [field number] -> [ 48-bit offset ][ 8-bit wt2 ][ 8-bit wt1 ]
-//
-// If wt1 matches, jump to the 48-bit offset. If wt2 matches, lookup
-// (UPB_MAX_FIELDNUMBER + fieldnum) and jump there.
-//
-// We need two wire types because of packed/non-packed compatibility. A
-// primitive repeated field can use either wire type and be valid. While we
-// could key the table on fieldnum+wiretype, the table would be 8x sparser.
-//
-// Storing two wire types in the primary value allows us to quickly rule out
-// the second wire type without needing to do a separate lookup (this case is
-// less common than an unknown field).
+/* The dispatch table layout is:
+ * [field number] -> [ 48-bit offset ][ 8-bit wt2 ][ 8-bit wt1 ]
+ *
+ * If wt1 matches, jump to the 48-bit offset. If wt2 matches, lookup
+ * (UPB_MAX_FIELDNUMBER + fieldnum) and jump there.
+ *
+ * We need two wire types because of packed/non-packed compatibility. A
+ * primitive repeated field can use either wire type and be valid. While we
+ * could key the table on fieldnum+wiretype, the table would be 8x sparser.
+ *
+ * Storing two wire types in the primary value allows us to quickly rule out
+ * the second wire type without needing to do a separate lookup (this case is
+ * less common than an unknown field). */
UPB_INLINE uint64_t upb_pbdecoder_packdispatch(uint64_t ofs, uint8_t wt1,
uint8_t wt2) {
return (ofs << 16) | (wt2 << 8) | wt1;
@@ -7516,20 +7687,20 @@ UPB_INLINE void upb_pbdecoder_unpackdispatch(uint64_t dispatch, uint64_t *ofs,
*ofs = dispatch >> 16;
}
-// All of the functions in decoder.c that return int32_t return values according
-// to the following scheme:
-// 1. negative values indicate a return code from the following list.
-// 2. positive values indicate that error or end of buffer was hit, and
-// that the decode function should immediately return the given value
-// (the decoder state has already been suspended and is ready to be
-// resumed).
+/* All of the functions in decoder.c that return int32_t return values according
+ * to the following scheme:
+ * 1. negative values indicate a return code from the following list.
+ * 2. positive values indicate that error or end of buffer was hit, and
+ * that the decode function should immediately return the given value
+ * (the decoder state has already been suspended and is ready to be
+ * resumed). */
#define DECODE_OK -1
-#define DECODE_MISMATCH -2 // Used only from checktag_slow().
-#define DECODE_ENDGROUP -3 // Used only from checkunknown().
+#define DECODE_MISMATCH -2 /* Used only from checktag_slow(). */
+#define DECODE_ENDGROUP -3 /* Used only from checkunknown(). */
#define CHECK_RETURN(x) { int32_t ret = x; if (ret >= 0) return ret; }
-#endif // UPB_DECODER_INT_H_
+#endif /* UPB_DECODER_INT_H_ */
/*
* upb - a minimalist implementation of protocol buffers.
*
@@ -7551,25 +7722,25 @@ UPB_INLINE void upb_pbdecoder_unpackdispatch(uint64_t dispatch, uint64_t *ofs,
extern "C" {
#endif
-// A list of types as they are encoded on-the-wire.
+/* A list of types as they are encoded on-the-wire. */
typedef enum {
UPB_WIRE_TYPE_VARINT = 0,
UPB_WIRE_TYPE_64BIT = 1,
UPB_WIRE_TYPE_DELIMITED = 2,
UPB_WIRE_TYPE_START_GROUP = 3,
UPB_WIRE_TYPE_END_GROUP = 4,
- UPB_WIRE_TYPE_32BIT = 5,
+ UPB_WIRE_TYPE_32BIT = 5
} upb_wiretype_t;
#define UPB_MAX_WIRE_TYPE 5
-// The maximum number of bytes that it takes to encode a 64-bit varint.
-// Note that with a better encoding this could be 9 (TODO: write up a
-// wiki document about this).
+/* The maximum number of bytes that it takes to encode a 64-bit varint.
+ * Note that with a better encoding this could be 9 (TODO: write up a
+ * wiki document about this). */
#define UPB_PB_VARINT_MAX_LEN 10
-// Array of the "native" (ie. non-packed-repeated) wire type for the given a
-// descriptor type (upb_descriptortype_t).
+/* Array of the "native" (ie. non-packed-repeated) wire type for the given a
+ * descriptor type (upb_descriptortype_t). */
extern const uint8_t upb_pb_native_wire_types[];
/* Zig-zag encoding/decoding **************************************************/
@@ -7585,44 +7756,59 @@ UPB_INLINE uint64_t upb_zzenc_64(int64_t n) { return (n << 1) ^ (n >> 63); }
/* Decoding *******************************************************************/
-// All decoding functions return this struct by value.
+/* All decoding functions return this struct by value. */
typedef struct {
- const char *p; // NULL if the varint was unterminated.
+ const char *p; /* NULL if the varint was unterminated. */
uint64_t val;
} upb_decoderet;
-// Four functions for decoding a varint of at most eight bytes. They are all
-// functionally identical, but are implemented in different ways and likely have
-// different performance profiles. We keep them around for performance testing.
-//
-// Note that these functions may not read byte-by-byte, so they must not be used
-// unless there are at least eight bytes left in the buffer!
+UPB_INLINE upb_decoderet upb_decoderet_make(const char *p, uint64_t val) {
+ upb_decoderet ret;
+ ret.p = p;
+ ret.val = val;
+ return ret;
+}
+
+/* Four functions for decoding a varint of at most eight bytes. They are all
+ * functionally identical, but are implemented in different ways and likely have
+ * different performance profiles. We keep them around for performance testing.
+ *
+ * Note that these functions may not read byte-by-byte, so they must not be used
+ * unless there are at least eight bytes left in the buffer! */
upb_decoderet upb_vdecode_max8_branch32(upb_decoderet r);
upb_decoderet upb_vdecode_max8_branch64(upb_decoderet r);
upb_decoderet upb_vdecode_max8_wright(upb_decoderet r);
upb_decoderet upb_vdecode_max8_massimino(upb_decoderet r);
-// Template for a function that checks the first two bytes with branching
-// and dispatches 2-10 bytes with a separate function. Note that this may read
-// up to 10 bytes, so it must not be used unless there are at least ten bytes
-// left in the buffer!
+/* Template for a function that checks the first two bytes with branching
+ * and dispatches 2-10 bytes with a separate function. Note that this may read
+ * up to 10 bytes, so it must not be used unless there are at least ten bytes
+ * left in the buffer! */
#define UPB_VARINT_DECODER_CHECK2(name, decode_max8_function) \
UPB_INLINE upb_decoderet upb_vdecode_check2_ ## name(const char *_p) { \
uint8_t *p = (uint8_t*)_p; \
- if ((*p & 0x80) == 0) { upb_decoderet r = {_p + 1, *p & 0x7fU}; return r; } \
- upb_decoderet r = {_p + 2, (*p & 0x7fU) | ((*(p + 1) & 0x7fU) << 7)}; \
- if ((*(p + 1) & 0x80) == 0) return r; \
+ upb_decoderet r; \
+ if ((*p & 0x80) == 0) { \
+ /* Common case: one-byte varint. */ \
+ return upb_decoderet_make(_p + 1, *p & 0x7fU); \
+ } \
+ r = upb_decoderet_make(_p + 2, (*p & 0x7fU) | ((*(p + 1) & 0x7fU) << 7)); \
+ if ((*(p + 1) & 0x80) == 0) { \
+ /* Two-byte varint. */ \
+ return r; \
+ } \
+ /* Longer varint, fallback to out-of-line function. */ \
return decode_max8_function(r); \
}
-UPB_VARINT_DECODER_CHECK2(branch32, upb_vdecode_max8_branch32);
-UPB_VARINT_DECODER_CHECK2(branch64, upb_vdecode_max8_branch64);
-UPB_VARINT_DECODER_CHECK2(wright, upb_vdecode_max8_wright);
-UPB_VARINT_DECODER_CHECK2(massimino, upb_vdecode_max8_massimino);
+UPB_VARINT_DECODER_CHECK2(branch32, upb_vdecode_max8_branch32)
+UPB_VARINT_DECODER_CHECK2(branch64, upb_vdecode_max8_branch64)
+UPB_VARINT_DECODER_CHECK2(wright, upb_vdecode_max8_wright)
+UPB_VARINT_DECODER_CHECK2(massimino, upb_vdecode_max8_massimino)
#undef UPB_VARINT_DECODER_CHECK2
-// Our canonical functions for decoding varints, based on the currently
-// favored best-performing implementations.
+/* Our canonical functions for decoding varints, based on the currently
+ * favored best-performing implementations. */
UPB_INLINE upb_decoderet upb_vdecode_fast(const char *p) {
if (sizeof(long) == 8)
return upb_vdecode_check2_branch64(p);
@@ -7639,7 +7825,7 @@ UPB_INLINE upb_decoderet upb_vdecode_max8_fast(upb_decoderet r) {
UPB_INLINE int upb_value_size(uint64_t val) {
#ifdef __GNUC__
- int high_bit = 63 - __builtin_clzll(val); // 0-based, undef if val == 0.
+ int high_bit = 63 - __builtin_clzll(val); /* 0-based, undef if val == 0. */
#else
int high_bit = 0;
uint64_t tmp = val;
@@ -7648,13 +7834,14 @@ UPB_INLINE int upb_value_size(uint64_t val) {
return val == 0 ? 1 : high_bit / 8 + 1;
}
-// Encodes a 64-bit varint into buf (which must be >=UPB_PB_VARINT_MAX_LEN
-// bytes long), returning how many bytes were used.
-//
-// TODO: benchmark and optimize if necessary.
+/* Encodes a 64-bit varint into buf (which must be >=UPB_PB_VARINT_MAX_LEN
+ * bytes long), returning how many bytes were used.
+ *
+ * TODO: benchmark and optimize if necessary. */
UPB_INLINE size_t upb_vencode64(uint64_t val, char *buf) {
+ size_t i;
if (val == 0) { buf[0] = 0; return 1; }
- size_t i = 0;
+ i = 0;
while (val) {
uint8_t byte = val & 0x7fU;
val >>= 7;
@@ -7669,7 +7856,7 @@ UPB_INLINE size_t upb_varint_size(uint64_t val) {
return upb_vencode64(val, buf);
}
-// Encodes a 32-bit varint, *not* sign-extended.
+/* Encodes a 32-bit varint, *not* sign-extended. */
UPB_INLINE uint64_t upb_vencode32(uint32_t val) {
char buf[UPB_PB_VARINT_MAX_LEN];
size_t bytes = upb_vencode64(val, buf);
@@ -7707,35 +7894,35 @@ UPB_INLINE uint64_t upb_vencode32(uint32_t val) {
namespace upb {
namespace pb {
class Encoder;
-} // namespace pb
-} // namespace upb
+} /* namespace pb */
+} /* namespace upb */
#endif
-UPB_DECLARE_TYPE(upb::pb::Encoder, upb_pb_encoder);
+UPB_DECLARE_TYPE(upb::pb::Encoder, upb_pb_encoder)
#define UPB_PBENCODER_MAX_NESTING 100
/* upb::pb::Encoder ***********************************************************/
-// Preallocation hint: decoder won't allocate more bytes than this when first
-// constructed. This hint may be an overestimate for some build configurations.
-// But if the decoder library is upgraded without recompiling the application,
-// it may be an underestimate.
+/* Preallocation hint: decoder won't allocate more bytes than this when first
+ * constructed. This hint may be an overestimate for some build configurations.
+ * But if the decoder library is upgraded without recompiling the application,
+ * it may be an underestimate. */
#define UPB_PB_ENCODER_SIZE 768
#ifdef __cplusplus
class upb::pb::Encoder {
public:
- // Creates a new encoder in the given environment. The Handlers must have
- // come from NewHandlers() below.
+ /* Creates a new encoder in the given environment. The Handlers must have
+ * come from NewHandlers() below. */
static Encoder* Create(Environment* env, const Handlers* handlers,
BytesSink* output);
- // The input to the encoder.
+ /* The input to the encoder. */
Sink* input();
- // Creates a new set of handlers for this MessageDef.
+ /* Creates a new set of handlers for this MessageDef. */
static reffed_ptr<const Handlers> NewHandlers(const MessageDef* msg);
static const size_t kSize = UPB_PB_ENCODER_SIZE;
@@ -7772,8 +7959,8 @@ inline reffed_ptr<const Handlers> Encoder::NewHandlers(
const Handlers* h = upb_pb_encoder_newhandlers(md, &h);
return reffed_ptr<const Handlers>(h, &h);
}
-} // namespace pb
-} // namespace upb
+} /* namespace pb */
+} /* namespace upb */
#endif
@@ -7812,23 +7999,23 @@ inline reffed_ptr<const Handlers> Encoder::NewHandlers(
extern "C" {
#endif
-// Loads all defs from the given protobuf binary descriptor, setting default
-// accessors and a default layout on all messages. The caller owns the
-// returned array of defs, which will be of length *n. On error NULL is
-// returned and status is set (if non-NULL).
+/* Loads all defs from the given protobuf binary descriptor, setting default
+ * accessors and a default layout on all messages. The caller owns the
+ * returned array of defs, which will be of length *n. On error NULL is
+ * returned and status is set (if non-NULL). */
upb_def **upb_load_defs_from_descriptor(const char *str, size_t len, int *n,
void *owner, upb_status *status);
-// Like the previous but also adds the loaded defs to the given symtab.
+/* Like the previous but also adds the loaded defs to the given symtab. */
bool upb_load_descriptor_into_symtab(upb_symtab *symtab, const char *str,
size_t len, upb_status *status);
-// Like the previous but also reads the descriptor from the given filename.
+/* Like the previous but also reads the descriptor from the given filename. */
bool upb_load_descriptor_file_into_symtab(upb_symtab *symtab, const char *fname,
upb_status *status);
-// Reads the given filename into a character string, returning NULL if there
-// was an error.
+/* Reads the given filename into a character string, returning NULL if there
+ * was an error. */
char *upb_readfile(const char *filename, size_t *len);
#ifdef __cplusplus
@@ -7836,8 +8023,8 @@ char *upb_readfile(const char *filename, size_t *len);
namespace upb {
-// All routines that load descriptors expect the descriptor to be a
-// FileDescriptorSet.
+/* All routines that load descriptors expect the descriptor to be a
+ * FileDescriptorSet. */
inline bool LoadDescriptorFileIntoSymtab(SymbolTable* s, const char *fname,
Status* status) {
return upb_load_descriptor_file_into_symtab(s, fname, status);
@@ -7848,17 +8035,17 @@ inline bool LoadDescriptorIntoSymtab(SymbolTable* s, const char* str,
return upb_load_descriptor_into_symtab(s, str, len, status);
}
-// Templated so it can accept both string and std::string.
+/* Templated so it can accept both string and std::string. */
template <typename T>
bool LoadDescriptorIntoSymtab(SymbolTable* s, const T& desc, Status* status) {
return upb_load_descriptor_into_symtab(s, desc.c_str(), desc.size(), status);
}
-} // namespace upb
+} /* namespace upb */
#endif
-#endif
+#endif /* UPB_GLUE_H */
/*
* upb - a minimalist implementation of protocol buffers.
*
@@ -7874,18 +8061,18 @@ bool LoadDescriptorIntoSymtab(SymbolTable* s, const T& desc, Status* status) {
namespace upb {
namespace pb {
class TextPrinter;
-} // namespace pb
-} // namespace upb
+} /* namespace pb */
+} /* namespace upb */
#endif
-UPB_DECLARE_TYPE(upb::pb::TextPrinter, upb_textprinter);
+UPB_DECLARE_TYPE(upb::pb::TextPrinter, upb_textprinter)
#ifdef __cplusplus
class upb::pb::TextPrinter {
public:
- // The given handlers must have come from NewHandlers(). It must outlive the
- // TextPrinter.
+ /* The given handlers must have come from NewHandlers(). It must outlive the
+ * TextPrinter. */
static TextPrinter *Create(Environment *env, const upb::Handlers *handlers,
BytesSink *output);
@@ -7893,8 +8080,8 @@ class upb::pb::TextPrinter {
Sink* input();
- // If handler caching becomes a requirement we can add a code cache as in
- // decoder.h
+ /* If handler caching becomes a requirement we can add a code cache as in
+ * decoder.h */
static reffed_ptr<const Handlers> NewHandlers(const MessageDef* md);
};
@@ -7902,7 +8089,7 @@ class upb::pb::TextPrinter {
UPB_BEGIN_EXTERN_C
-// C API.
+/* C API. */
upb_textprinter *upb_textprinter_create(upb_env *env, const upb_handlers *h,
upb_bytessink *output);
void upb_textprinter_setsingleline(upb_textprinter *p, bool single_line);
@@ -7933,8 +8120,8 @@ inline reffed_ptr<const Handlers> TextPrinter::NewHandlers(
const Handlers* h = upb_textprinter_newhandlers(md, &h);
return reffed_ptr<const Handlers>(h, &h);
}
-} // namespace pb
-} // namespace upb
+} /* namespace pb */
+} /* namespace upb */
#endif
@@ -7957,23 +8144,24 @@ inline reffed_ptr<const Handlers> TextPrinter::NewHandlers(
namespace upb {
namespace json {
class Parser;
-} // namespace json
-} // namespace upb
+} /* namespace json */
+} /* namespace upb */
#endif
-UPB_DECLARE_TYPE(upb::json::Parser, upb_json_parser);
+UPB_DECLARE_TYPE(upb::json::Parser, upb_json_parser)
/* upb::json::Parser **********************************************************/
-// Preallocation hint: parser won't allocate more bytes than this when first
-// constructed. This hint may be an overestimate for some build configurations.
-// But if the parser library is upgraded without recompiling the application,
-// it may be an underestimate.
+/* Preallocation hint: parser won't allocate more bytes than this when first
+ * constructed. This hint may be an overestimate for some build configurations.
+ * But if the parser library is upgraded without recompiling the application,
+ * it may be an underestimate. */
#define UPB_JSON_PARSER_SIZE 3568
#ifdef __cplusplus
-// Parses an incoming BytesStream, pushing the results to the destination sink.
+/* Parses an incoming BytesStream, pushing the results to the destination
+ * sink. */
class upb::json::Parser {
public:
static Parser* Create(Environment* env, Sink* output);
@@ -7981,7 +8169,7 @@ class upb::json::Parser {
BytesSink* input();
private:
- UPB_DISALLOW_POD_OPS(Parser, upb::json::Parser);
+ UPB_DISALLOW_POD_OPS(Parser, upb::json::Parser)
};
#endif
@@ -8003,13 +8191,13 @@ inline Parser* Parser::Create(Environment* env, Sink* output) {
inline BytesSink* Parser::input() {
return upb_json_parser_input(this);
}
-} // namespace json
-} // namespace upb
+} /* namespace json */
+} /* namespace upb */
#endif
-#endif // UPB_JSON_PARSER_H_
+#endif /* UPB_JSON_PARSER_H_ */
/*
* upb - a minimalist implementation of protocol buffers.
*
@@ -8028,11 +8216,11 @@ inline BytesSink* Parser::input() {
namespace upb {
namespace json {
class Printer;
-} // namespace json
-} // namespace upb
+} /* namespace json */
+} /* namespace upb */
#endif
-UPB_DECLARE_TYPE(upb::json::Printer, upb_json_printer);
+UPB_DECLARE_TYPE(upb::json::Printer, upb_json_printer)
/* upb::json::Printer *********************************************************/
@@ -8041,29 +8229,29 @@ UPB_DECLARE_TYPE(upb::json::Printer, upb_json_printer);
#ifdef __cplusplus
-// Prints an incoming stream of data to a BytesSink in JSON format.
+/* Prints an incoming stream of data to a BytesSink in JSON format. */
class upb::json::Printer {
public:
static Printer* Create(Environment* env, const upb::Handlers* handlers,
BytesSink* output);
- // The input to the printer.
+ /* The input to the printer. */
Sink* input();
- // Returns handlers for printing according to the specified schema.
+ /* Returns handlers for printing according to the specified schema. */
static reffed_ptr<const Handlers> NewHandlers(const upb::MessageDef* md);
static const size_t kSize = UPB_JSON_PRINTER_SIZE;
private:
- UPB_DISALLOW_POD_OPS(Printer, upb::json::Printer);
+ UPB_DISALLOW_POD_OPS(Printer, upb::json::Printer)
};
#endif
UPB_BEGIN_EXTERN_C
-// Native C API.
+/* Native C API. */
upb_json_printer *upb_json_printer_create(upb_env *e, const upb_handlers *h,
upb_bytessink *output);
upb_sink *upb_json_printer_input(upb_json_printer *p);
@@ -8086,9 +8274,9 @@ inline reffed_ptr<const Handlers> Printer::NewHandlers(
const Handlers* h = upb_json_printer_newhandlers(md, &h);
return reffed_ptr<const Handlers>(h, &h);
}
-} // namespace json
-} // namespace upb
+} /* namespace json */
+} /* namespace upb */
#endif
-#endif // UPB_JSON_TYPED_PRINTER_H_
+#endif /* UPB_JSON_TYPED_PRINTER_H_ */
diff --git a/src/Makefile.am b/src/Makefile.am
index 0dc18916..3c2d244f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -4,17 +4,25 @@ if HAVE_ZLIB
GZCHECKPROGRAMS = zcgzip zcgunzip
GZHEADERS = google/protobuf/io/gzip_stream.h
GZTESTS = google/protobuf/io/gzip_stream_unittest.sh
+ZLIB_DEF = -DHAVE_ZLIB=1
else
GZCHECKPROGRAMS =
GZHEADERS =
GZTESTS =
+ZLIB_DEF =
+endif
+
+if HAVE_PTHREAD
+PTHREAD_DEF = -DHAVE_PTHREAD=1
+else
+PTHREAD_DEF =
endif
if GCC
# These are good warnings to turn on by default
-NO_OPT_CXXFLAGS = $(PTHREAD_CFLAGS) -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare
+NO_OPT_CXXFLAGS = $(PTHREAD_CFLAGS) $(PTHREAD_DEF) $(ZLIB_DEF) -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare
else
-NO_OPT_CXXFLAGS = $(PTHREAD_CFLAGS)
+NO_OPT_CXXFLAGS = $(PTHREAD_CFLAGS) $(PTHREAD_DEF) $(ZLIB_DEF)
endif
AM_CXXFLAGS = $(NO_OPT_CXXFLAGS) $(PROTOBUF_OPT_FLAG)
@@ -41,24 +49,12 @@ nobase_dist_proto_DATA = google/protobuf/descriptor.proto \
clean-local:
rm -f *.loT
-public_config = google/protobuf/stubs/pbconfig.h
-
-CLEANFILES = $(protoc_outputs) $(public_config) unittest_proto_middleman \
+CLEANFILES = $(protoc_outputs) unittest_proto_middleman \
testzip.jar testzip.list testzip.proto testzip.zip
MAINTAINERCLEANFILES = \
Makefile.in
-# Generate and distribute a minimum config.h file to make hash_map work.
-# The autoheader config has too much info, which might conflict with other
-# macros applications might include. Thus, we create a stubs/pbconfig.h, that
-# only #defines what we really need, and prefix it with GOOGLE_PROTOBUF_ to
-# avoid conflicts.
-$(public_config): $(top_builddir)/config.h $(top_srcdir)/config.h.include
- echo "// Note: Google Protobuf internal only. Do NOT include." > $@
- cat $(top_builddir)/config.h | grep -f $(top_srcdir)/config.h.include | \
- sed 's,#define , #define GOOGLE_PROTOBUF_,' >> $@
-
nobase_include_HEADERS = \
google/protobuf/stubs/atomic_sequence_num.h \
google/protobuf/stubs/atomicops.h \
@@ -80,6 +76,7 @@ nobase_include_HEADERS = \
google/protobuf/stubs/fastmem.h \
google/protobuf/stubs/hash.h \
google/protobuf/stubs/once.h \
+ google/protobuf/stubs/pbconfig.h \
google/protobuf/stubs/platform_macros.h \
google/protobuf/stubs/shared_ptr.h \
google/protobuf/stubs/singleton.h \
@@ -147,14 +144,11 @@ nobase_include_HEADERS = \
google/protobuf/compiler/java/java_names.h \
google/protobuf/compiler/javanano/javanano_generator.h \
google/protobuf/compiler/objectivec/objectivec_generator.h \
- google/protobuf/compiler/objectivec/objectivec_helpers.h \
+ google/protobuf/compiler/objectivec/objectivec_helpers.h \
google/protobuf/compiler/python/python_generator.h \
google/protobuf/compiler/ruby/ruby_generator.h \
google/protobuf/compiler/csharp/csharp_generator.h
-nobase_nodist_include_HEADERS = \
- $(public_config)
-
lib_LTLIBRARIES = libprotobuf-lite.la libprotobuf.la libprotoc.la
libprotobuf_lite_la_LIBADD = $(PTHREAD_LIBS)
@@ -180,7 +174,6 @@ libprotobuf_lite_la_SOURCES = \
google/protobuf/io/coded_stream_inl.h \
google/protobuf/io/zero_copy_stream.cc \
google/protobuf/io/zero_copy_stream_impl_lite.cc
-nodist_libprotobuf_lite_la_SOURCES = $(public_config)
libprotobuf_la_LIBADD = $(PTHREAD_LIBS)
libprotobuf_la_LDFLAGS = -version-info 10:0:0 -export-dynamic -no-undefined
@@ -408,6 +401,7 @@ protoc_inputs = \
google/protobuf/unittest_drop_unknown_fields.proto \
google/protobuf/unittest_embed_optimize_for.proto \
google/protobuf/unittest_empty.proto \
+ google/protobuf/unittest_enormous_descriptor.proto \
google/protobuf/unittest_import_lite.proto \
google/protobuf/unittest_import.proto \
google/protobuf/unittest_import_public_lite.proto \
@@ -449,8 +443,7 @@ EXTRA_DIST = \
google/protobuf/compiler/ruby/ruby_generated_code.proto \
google/protobuf/compiler/ruby/ruby_generated_code.rb \
google/protobuf/compiler/package_info.h \
- google/protobuf/compiler/zip_output_unittest.sh \
- google/protobuf/unittest_enormous_descriptor.proto
+ google/protobuf/compiler/zip_output_unittest.sh
protoc_lite_outputs = \
google/protobuf/map_lite_unittest.pb.cc \
@@ -482,6 +475,8 @@ protoc_outputs = \
google/protobuf/unittest_embed_optimize_for.pb.h \
google/protobuf/unittest_empty.pb.cc \
google/protobuf/unittest_empty.pb.h \
+ google/protobuf/unittest_enormous_descriptor.pb.cc \
+ google/protobuf/unittest_enormous_descriptor.pb.h \
google/protobuf/unittest_import.pb.cc \
google/protobuf/unittest_import.pb.h \
google/protobuf/unittest_import_public.pb.cc \
@@ -513,7 +508,7 @@ protoc_outputs = \
google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.cc \
google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h
-BUILT_SOURCES = $(public_config) $(protoc_outputs)
+BUILT_SOURCES = $(protoc_outputs)
if USE_EXTERNAL_PROTOC
diff --git a/src/google/protobuf/arena.cc b/src/google/protobuf/arena.cc
index 96009645..ed1c5ef2 100755
--- a/src/google/protobuf/arena.cc
+++ b/src/google/protobuf/arena.cc
@@ -43,7 +43,7 @@ Arena::ThreadCache& Arena::thread_cache() {
static GOOGLE_THREAD_LOCAL ThreadCache thread_cache_ = { -1, NULL };
return thread_cache_;
}
-#elif defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE)
+#elif defined(GOOGLE_PROTOBUF_NO_THREADLOCAL)
Arena::ThreadCache& Arena::thread_cache() {
static internal::ThreadLocalStorage<ThreadCache>* thread_cache_ =
new internal::ThreadLocalStorage<ThreadCache>();
diff --git a/src/google/protobuf/arena.h b/src/google/protobuf/arena.h
index 6c3f606e..51149bae 100644
--- a/src/google/protobuf/arena.h
+++ b/src/google/protobuf/arena.h
@@ -39,6 +39,7 @@
#include <google/protobuf/stubs/atomic_sequence_num.h>
#include <google/protobuf/stubs/atomicops.h>
#include <google/protobuf/stubs/common.h>
+#include <google/protobuf/stubs/platform_macros.h>
#include <google/protobuf/stubs/type_traits.h>
namespace google {
@@ -528,7 +529,7 @@ class LIBPROTOBUF_EXPORT Arena {
// Thread local variables cannot be exposed through DLL interface but we can
// wrap them in static functions.
static ThreadCache& thread_cache();
-#elif defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE)
+#elif defined(GOOGLE_PROTOBUF_NO_THREADLOCAL)
// Android ndk does not support GOOGLE_THREAD_LOCAL keyword so we use a custom thread
// local storage class we implemented.
// iOS also does not support the GOOGLE_THREAD_LOCAL keyword.
diff --git a/src/google/protobuf/compiler/cpp/cpp_file.cc b/src/google/protobuf/compiler/cpp/cpp_file.cc
index b997a51a..1f0a8205 100644
--- a/src/google/protobuf/compiler/cpp/cpp_file.cc
+++ b/src/google/protobuf/compiler/cpp/cpp_file.cc
@@ -434,20 +434,52 @@ void FileGenerator::GenerateBuildDescriptors(io::Printer* printer) {
string file_data;
file_proto.SerializeToString(&file_data);
- printer->Print(
- "::google::protobuf::DescriptorPool::InternalAddGeneratedFile(");
-
- // Only write 40 bytes per line.
- static const int kBytesPerLine = 40;
- for (int i = 0; i < file_data.size(); i += kBytesPerLine) {
- printer->Print("\n \"$data$\"",
- "data",
- EscapeTrigraphs(
- CEscape(file_data.substr(i, kBytesPerLine))));
+ // Workaround for MSVC: "Error C1091: compiler limit: string exceeds 65535
+ // bytes in length". Declare a static array of characters rather than use a
+ // string literal.
+ if (file_data.size() > 65535) {
+ printer->Print(
+ "static const char descriptor[] = {\n");
+ printer->Indent();
+
+ // Only write 25 bytes per line.
+ static const int kBytesPerLine = 25;
+ for (int i = 0; i < file_data.size();) {
+ for (int j = 0; j < kBytesPerLine && i < file_data.size(); ++i, ++j) {
+ printer->Print(
+ "$char$, ",
+ "char", SimpleItoa(file_data[i]));
+ }
+ printer->Print(
+ "\n");
+ }
+
+ printer->Outdent();
+ printer->Print(
+ "};\n");
+
+ printer->Print(
+ "::google::protobuf::DescriptorPool::InternalAddGeneratedFile(descriptor, $size$);\n",
+ "size", SimpleItoa(file_data.size()));
+
+ } else {
+
+ printer->Print(
+ "::google::protobuf::DescriptorPool::InternalAddGeneratedFile(");
+
+ // Only write 40 bytes per line.
+ static const int kBytesPerLine = 40;
+ for (int i = 0; i < file_data.size(); i += kBytesPerLine) {
+ printer->Print("\n \"$data$\"",
+ "data",
+ EscapeTrigraphs(
+ CEscape(file_data.substr(i, kBytesPerLine))));
+ }
+ printer->Print(
+ ", $size$);\n",
+ "size", SimpleItoa(file_data.size()));
+
}
- printer->Print(
- ", $size$);\n",
- "size", SimpleItoa(file_data.size()));
// Call MessageFactory::InternalRegisterGeneratedFile().
printer->Print(
diff --git a/src/google/protobuf/compiler/cpp/cpp_message.cc b/src/google/protobuf/compiler/cpp/cpp_message.cc
index 212fe2e1..af85919a 100644
--- a/src/google/protobuf/compiler/cpp/cpp_message.cc
+++ b/src/google/protobuf/compiler/cpp/cpp_message.cc
@@ -3510,7 +3510,7 @@ GenerateByteSize(io::Printer* printer) {
} else {
if (HasFieldPresence(descriptor_->file())) {
printer->Print(
- "if (_has_bits_[$index$ / 32] & $mask$) {\n",
+ "if (_has_bits_[$index$ / 32] & $mask$u) {\n",
"index", SimpleItoa(i),
"mask", SimpleItoa(mask));
printer->Indent();
diff --git a/src/google/protobuf/compiler/cpp/cpp_unittest.cc b/src/google/protobuf/compiler/cpp/cpp_unittest.cc
index b11fb21a..bd1c0fde 100644
--- a/src/google/protobuf/compiler/cpp/cpp_unittest.cc
+++ b/src/google/protobuf/compiler/cpp/cpp_unittest.cc
@@ -55,6 +55,7 @@
#include <google/protobuf/unittest.pb.h>
#include <google/protobuf/unittest_optimize_for.pb.h>
#include <google/protobuf/unittest_embed_optimize_for.pb.h>
+#include <google/protobuf/unittest_enormous_descriptor.pb.h>
#include <google/protobuf/unittest_no_generic_services.pb.h>
#include <google/protobuf/test_util.h>
#include <google/protobuf/compiler/cpp/cpp_helpers.h>
@@ -130,6 +131,17 @@ TEST(GeneratedDescriptorTest, IdenticalDescriptors) {
generated_decsriptor_proto.DebugString());
}
+// Test that generated code has proper descriptors:
+// Touch a descriptor generated from an enormous message to validate special
+// handling for descriptors exceeding the C++ standard's recommended minimum
+// limit for string literal size
+TEST(GeneratedDescriptorTest, EnormousDescriptor) {
+ const Descriptor* generated_descriptor =
+ TestEnormousDescriptor::descriptor();
+
+ EXPECT_TRUE(generated_descriptor != NULL);
+}
+
#endif // !PROTOBUF_TEST_NO_DESCRIPTORS
// ===================================================================
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc b/src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc
index d6609692..30a13ddb 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc
+++ b/src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc
@@ -55,8 +55,6 @@ void SetEnumVariables(const FieldDescriptor* descriptor,
(descriptor->file() != descriptor->enum_type()->file())) {
(*variables)["property_type"] = "enum " + type;
}
- // TODO(thomasvl): Make inclusion of descriptor compile time and output
- // both of these. Note: Extensions currently have to have the EnumDescription.
(*variables)["enum_verifier"] = type + "_IsValidValue";
(*variables)["enum_desc_func"] = type + "_EnumDescriptor";
@@ -74,11 +72,9 @@ EnumFieldGenerator::~EnumFieldGenerator() {}
void EnumFieldGenerator::GenerateFieldDescriptionTypeSpecific(
io::Printer* printer) const {
- // TODO(thomasvl): Output the CPP check to use descFunc or validator based
- // on final compile.
printer->Print(
variables_,
- " .typeSpecific.enumDescFunc = $enum_desc_func$,\n");
+ " .dataTypeSpecific.enumDescFunc = $enum_desc_func$,\n");
}
void EnumFieldGenerator::GenerateCFunctionDeclarations(
@@ -103,7 +99,7 @@ void EnumFieldGenerator::GenerateCFunctionImplementations(
"int32_t $owning_message_class$_$capitalized_name$_RawValue($owning_message_class$ *message) {\n"
" GPBDescriptor *descriptor = [$owning_message_class$ descriptor];\n"
" GPBFieldDescriptor *field = [descriptor fieldWithNumber:$field_number_name$];\n"
- " return GPBGetInt32IvarWithField(message, field);\n"
+ " return GPBGetMessageInt32Field(message, field);\n"
"}\n"
"\n"
"void Set$owning_message_class$_$capitalized_name$_RawValue($owning_message_class$ *message, int32_t value) {\n"
@@ -137,11 +133,9 @@ RepeatedEnumFieldGenerator::~RepeatedEnumFieldGenerator() {}
void RepeatedEnumFieldGenerator::GenerateFieldDescriptionTypeSpecific(
io::Printer* printer) const {
- // TODO(thomasvl): Output the CPP check to use descFunc or validator based
- // on final compile.
printer->Print(
variables_,
- " .typeSpecific.enumDescFunc = $enum_desc_func$,\n");
+ " .dataTypeSpecific.enumDescFunc = $enum_desc_func$,\n");
}
} // namespace objectivec
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_extension.cc b/src/google/protobuf/compiler/objectivec/objectivec_extension.cc
index 76137c80..4e348393 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_extension.cc
+++ b/src/google/protobuf/compiler/objectivec/objectivec_extension.cc
@@ -46,24 +46,6 @@ ExtensionGenerator::ExtensionGenerator(const string& root_class_name,
: method_name_(ExtensionMethodName(descriptor)),
root_class_and_method_name_(root_class_name + "_" + method_name_),
descriptor_(descriptor) {
- // Extensions can be filtered via the method they are accessed off the
- // file's Root with.
- if (FilterClass(root_class_and_method_name_)) {
- filter_reason_ =
- string("Extension |") + root_class_and_method_name_ + "| was not whitelisted.";
- } else {
- // Extensions that add a Message field also require that field be allowed
- // by the filter, or they aren't usable.
- ObjectiveCType objc_type = GetObjectiveCType(descriptor_);
- if (objc_type == OBJECTIVECTYPE_MESSAGE) {
- const string message_class_name(ClassName(descriptor_->message_type()));
- if (FilterClass(message_class_name)) {
- filter_reason_ = string("Extension |") + root_class_and_method_name_ +
- "| needs message |" + message_class_name +
- "|, which was not whitelisted.";
- }
- }
- }
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.
@@ -77,10 +59,6 @@ ExtensionGenerator::ExtensionGenerator(const string& root_class_name,
ExtensionGenerator::~ExtensionGenerator() {}
void ExtensionGenerator::GenerateMembersHeader(io::Printer* printer) {
- if (IsFiltered()) {
- printer->Print("// $filter_reason$\n\n", "filter_reason", filter_reason_);
- return;
- }
map<string, string> vars;
vars["method_name"] = method_name_;
SourceLocation location;
@@ -91,15 +69,11 @@ void ExtensionGenerator::GenerateMembersHeader(io::Printer* printer) {
}
printer->Print(vars,
"$comments$"
- "+ (GPBExtensionField*)$method_name$;\n");
+ "+ (GPBExtensionDescriptor *)$method_name$;\n");
}
void ExtensionGenerator::GenerateStaticVariablesInitialization(
- io::Printer* printer, bool* out_generated, bool root) {
- if (IsFiltered()) {
- return;
- }
- *out_generated = true;
+ io::Printer* printer) {
map<string, string> vars;
vars["root_class_and_method_name"] = root_class_and_method_name_;
vars["extended_type"] = ClassName(descriptor_->containing_type());
@@ -122,14 +96,14 @@ void ExtensionGenerator::GenerateStaticVariablesInitialization(
vars["type"] = "NULL";
}
- vars["default_name"] = GPBValueFieldName(descriptor_);
+ vars["default_name"] = GPBGenericValueFieldName(descriptor_);
if (descriptor_->is_repeated()) {
vars["default"] = "nil";
} else {
vars["default"] = DefaultValue(descriptor_);
}
string type = GetCapitalizedType(descriptor_);
- vars["extension_type"] = string("GPBType") + type;
+ vars["extension_type"] = string("GPBDataType") + type;
if (objc_type == OBJECTIVECTYPE_ENUM) {
vars["enum_desc_func_name"] =
@@ -141,7 +115,7 @@ void ExtensionGenerator::GenerateStaticVariablesInitialization(
printer->Print(vars,
"{\n"
" .singletonName = GPBStringifySymbol($root_class_and_method_name$),\n"
- " .type = $extension_type$,\n"
+ " .dataType = $extension_type$,\n"
" .extendedClass = GPBStringifySymbol($extended_type$),\n"
" .fieldNumber = $number$,\n"
" .defaultValue.$default_name$ = $default$,\n"
@@ -152,9 +126,6 @@ void ExtensionGenerator::GenerateStaticVariablesInitialization(
}
void ExtensionGenerator::GenerateRegistrationSource(io::Printer* printer) {
- if (IsFiltered()) {
- return;
- }
printer->Print(
"[registry addExtension:$root_class_and_method_name$];\n",
"root_class_and_method_name", root_class_and_method_name_);
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_extension.h b/src/google/protobuf/compiler/objectivec/objectivec_extension.h
index 553f0887..e361e639 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_extension.h
+++ b/src/google/protobuf/compiler/objectivec/objectivec_extension.h
@@ -52,16 +52,12 @@ class ExtensionGenerator {
~ExtensionGenerator();
void GenerateMembersHeader(io::Printer* printer);
- void GenerateStaticVariablesInitialization(io::Printer* printer,
- bool* out_generated, bool root);
+ void GenerateStaticVariablesInitialization(io::Printer* printer);
void GenerateRegistrationSource(io::Printer* printer);
- bool IsFiltered() const { return filter_reason_.length() > 0; }
-
private:
string method_name_;
string root_class_and_method_name_;
- string filter_reason_;
const FieldDescriptor* descriptor_;
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ExtensionGenerator);
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_field.cc b/src/google/protobuf/compiler/objectivec/objectivec_field.cc
index c5f05653..0f96a4e6 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_field.cc
+++ b/src/google/protobuf/compiler/objectivec/objectivec_field.cc
@@ -87,18 +87,16 @@ void SetCommonFieldVariables(const FieldDescriptor* descriptor,
field_flags.push_back("GPBFieldHasDefaultValue");
if (needs_custom_name) field_flags.push_back("GPBFieldTextFormatNameCustom");
if (descriptor->type() == FieldDescriptor::TYPE_ENUM) {
- // TODO(thomasvl): Output the CPP check to use descFunc or validator based
- // on final compile.
field_flags.push_back("GPBFieldHasEnumDescriptor");
}
(*variables)["fieldflags"] = BuildFlagsString(field_flags);
(*variables)["default"] = DefaultValue(descriptor);
- (*variables)["default_name"] = GPBValueFieldName(descriptor);
+ (*variables)["default_name"] = GPBGenericValueFieldName(descriptor);
- (*variables)["typeSpecific_name"] = "className";
- (*variables)["typeSpecific_value"] = "NULL";
+ (*variables)["dataTypeSpecific_name"] = "className";
+ (*variables)["dataTypeSpecific_value"] = "NULL";
string field_options = descriptor->options().SerializeAsString();
// Must convert to a standard byte order for packing length into
@@ -117,45 +115,6 @@ void SetCommonFieldVariables(const FieldDescriptor* descriptor,
(*variables)["storage_attribute"] = "";
}
-// A field generator that writes nothing.
-class EmptyFieldGenerator : public FieldGenerator {
- public:
- EmptyFieldGenerator(const FieldDescriptor* descriptor, const string& reason)
- : FieldGenerator(descriptor), reason_(reason) {}
- virtual ~EmptyFieldGenerator() {}
-
- virtual void GenerateFieldStorageDeclaration(io::Printer* printer) const {}
- virtual void GeneratePropertyDeclaration(io::Printer* printer) const {
- string name = FieldName(descriptor_);
- string type;
- switch (GetObjectiveCType(descriptor_)) {
- case OBJECTIVECTYPE_MESSAGE:
- type = ClassName(descriptor_->message_type()) + " *";
- break;
-
- case OBJECTIVECTYPE_ENUM:
- type = EnumName(descriptor_->enum_type()) + " ";
- break;
-
- default:
- type = string(descriptor_->type_name()) + " ";
- break;
- }
- printer->Print("// Field |$type$$name$| $reason$\n\n", "type", type, "name",
- name, "reason", reason_);
- }
-
- virtual void GenerateFieldNumberConstant(io::Printer* printer) const {}
- virtual void GeneratePropertyImplementation(io::Printer* printer) const {}
- virtual void GenerateFieldDescription(io::Printer* printer) const {}
-
- virtual bool WantsHasProperty(void) const { return false; }
-
- private:
- string reason_;
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EmptyFieldGenerator);
-};
-
} // namespace
FieldGenerator* FieldGenerator::Make(const FieldDescriptor* field) {
@@ -163,12 +122,7 @@ FieldGenerator* FieldGenerator::Make(const FieldDescriptor* field) {
if (field->is_repeated()) {
switch (GetObjectiveCType(field)) {
case OBJECTIVECTYPE_MESSAGE: {
- string type = ClassName(field->message_type());
- if (FilterClass(type)) {
- string reason =
- "Filtered by |" + type + "| not being whitelisted.";
- result = new EmptyFieldGenerator(field, reason);
- } else if (field->is_map()) {
+ if (field->is_map()) {
result = new MapFieldGenerator(field);
} else {
result = new RepeatedMessageFieldGenerator(field);
@@ -185,14 +139,7 @@ FieldGenerator* FieldGenerator::Make(const FieldDescriptor* field) {
} else {
switch (GetObjectiveCType(field)) {
case OBJECTIVECTYPE_MESSAGE: {
- string type = ClassName(field->message_type());
- if (FilterClass(type)) {
- string reason =
- "Filtered by |" + type + "| not being whitelisted.";
- result = new EmptyFieldGenerator(field, reason);
- } else {
- result = new MessageFieldGenerator(field);
- }
+ result = new MessageFieldGenerator(field);
break;
}
case OBJECTIVECTYPE_ENUM:
@@ -249,11 +196,17 @@ void FieldGenerator::GenerateFieldDescription(
" .number = $field_number_name$,\n"
" .hasIndex = $has_index$,\n"
" .flags = $fieldflags$,\n"
- " .type = GPBType$field_type$,\n"
- " .offset = offsetof($classname$_Storage, $name$),\n"
+ " .dataType = GPBDataType$field_type$,\n"
+ " .offset = offsetof($classname$__storage_, $name$),\n"
" .defaultValue.$default_name$ = $default$,\n");
- // " .typeSpecific.value* = [something],"
+ // TODO(thomasvl): It might be useful to add a CPP wrapper to support
+ // compiling away the EnumDescriptors. To do that, we'd need a #if here
+ // to control setting the descriptor vs. the validator, and above in
+ // SetCommonFieldVariables() we'd want to wrap how we add
+ // GPBFieldHasDefaultValue to the flags.
+
+ // " .dataTypeSpecific.value* = [something],"
GenerateFieldDescriptionTypeSpecific(printer);
const string& field_options(variables_.find("fieldoptions")->second);
@@ -280,7 +233,7 @@ void FieldGenerator::GenerateFieldDescriptionTypeSpecific(
io::Printer* printer) const {
printer->Print(
variables_,
- " .typeSpecific.$typeSpecific_name$ = $typeSpecific_value$,\n");
+ " .dataTypeSpecific.$dataTypeSpecific_name$ = $dataTypeSpecific_value$,\n");
}
void FieldGenerator::SetOneofIndexBase(int index_base) {
@@ -410,22 +363,24 @@ void RepeatedFieldGenerator::GenerateFieldStorageDeclaration(
void RepeatedFieldGenerator::GeneratePropertyImplementation(
io::Printer* printer) const {
- printer->Print(variables_, "@dynamic $name$;\n");
+ printer->Print(variables_, "@dynamic $name$, $name$_Count;\n");
}
void RepeatedFieldGenerator::GeneratePropertyDeclaration(
io::Printer* printer) const {
- // Repeated fields don't need the has* properties, but this has the same
- // logic as ObjCObjFieldGenerator::GeneratePropertyDeclaration() for dealing
- // with needing Objective C's rules around storage name conventions (init*,
- // new*, etc.)
+ // Repeated fields don't need the has* properties, but they do expose a
+ // *Count (to check without autocreation). So for the field property we need
+ // the same logic as ObjCObjFieldGenerator::GeneratePropertyDeclaration() for
+ // dealing with needing Objective C's rules around storage name conventions
+ // (init*, new*, etc.)
printer->Print(
variables_,
"$comments$"
"$array_comment$"
- "@property(nonatomic, readwrite, strong) $array_storage_type$ *$name$$storage_attribute$;\n");
+ "@property(nonatomic, readwrite, strong) $array_storage_type$ *$name$$storage_attribute$;\n"
+ "@property(nonatomic, readonly) NSUInteger $name$_Count;\n");
if (IsInitName(variables_.find("name")->second)) {
// If property name starts with init we need to annotate it to get past ARC.
// http://stackoverflow.com/questions/18723226/how-do-i-annotate-an-objective-c-property-with-an-objc-method-family/18723227#18723227
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_file.cc b/src/google/protobuf/compiler/objectivec/objectivec_file.cc
index d04eee85..1955c053 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_file.cc
+++ b/src/google/protobuf/compiler/objectivec/objectivec_file.cc
@@ -54,35 +54,24 @@ namespace objectivec {
FileGenerator::FileGenerator(const FileDescriptor *file)
: file_(file),
root_class_name_(FileClassName(file)),
- is_filtered_(true),
- all_extensions_filtered_(true),
is_public_dep_(false) {
- // Validate the objc prefix, do this even if the file's contents are filtered
- // to catch a bad prefix as soon as it is found.
+ // Validate the objc prefix.
ValidateObjCClassPrefix(file_);
for (int i = 0; i < file_->enum_type_count(); i++) {
EnumGenerator *generator = new EnumGenerator(file_->enum_type(i));
- // The enums are exposed via C functions, so they will dead strip if
- // not used.
- is_filtered_ &= false;
enum_generators_.push_back(generator);
}
for (int i = 0; i < file_->message_type_count(); i++) {
MessageGenerator *generator =
new MessageGenerator(root_class_name_, file_->message_type(i));
- is_filtered_ &= generator->IsFiltered();
- is_filtered_ &= generator->IsSubContentFiltered();
message_generators_.push_back(generator);
}
for (int i = 0; i < file_->extension_count(); i++) {
ExtensionGenerator *generator =
new ExtensionGenerator(root_class_name_, file_->extension(i));
- is_filtered_ &= generator->IsFiltered();
- all_extensions_filtered_ &= generator->IsFiltered();
extension_generators_.push_back(generator);
}
- // If there is nothing in the file we filter it.
}
FileGenerator::~FileGenerator() {
@@ -116,8 +105,7 @@ void FileGenerator::GenerateHeader(io::Printer *printer) {
"protoc_gen_objc_version",
SimpleItoa(GOOGLE_PROTOBUF_OBJC_GEN_VERSION));
- const vector<FileGenerator *> &dependency_generators =
- DependencyGenerators();
+ const vector<FileGenerator *> &dependency_generators = DependencyGenerators();
for (vector<FileGenerator *>::const_iterator iter =
dependency_generators.begin();
iter != dependency_generators.end(); ++iter) {
@@ -133,19 +121,17 @@ void FileGenerator::GenerateHeader(io::Printer *printer) {
printer->Print("CF_EXTERN_C_BEGIN\n\n");
- if (!IsFiltered()) {
- set<string> fwd_decls;
- for (vector<MessageGenerator *>::iterator iter = message_generators_.begin();
- iter != message_generators_.end(); ++iter) {
- (*iter)->DetermineForwardDeclarations(&fwd_decls);
- }
- for (set<string>::const_iterator i(fwd_decls.begin());
- i != fwd_decls.end(); ++i) {
- printer->Print("$value$;\n", "value", *i);
- }
- if (fwd_decls.begin() != fwd_decls.end()) {
- printer->Print("\n");
- }
+ set<string> fwd_decls;
+ for (vector<MessageGenerator *>::iterator iter = message_generators_.begin();
+ iter != message_generators_.end(); ++iter) {
+ (*iter)->DetermineForwardDeclarations(&fwd_decls);
+ }
+ for (set<string>::const_iterator i(fwd_decls.begin());
+ i != fwd_decls.end(); ++i) {
+ printer->Print("$value$;\n", "value", *i);
+ }
+ if (fwd_decls.begin() != fwd_decls.end()) {
+ printer->Print("\n");
}
// need to write out all enums first
@@ -160,36 +146,27 @@ void FileGenerator::GenerateHeader(io::Printer *printer) {
}
// For extensions to chain together, the Root gets created even if there
- // are no extensions. So if the entire file isn't filtered away, output it.
- if (!IsFiltered()) {
- printer->Print(
- "\n"
- "#pragma mark - $root_class_name$\n"
- "\n"
- "@interface $root_class_name$ : GPBRootObject\n"
- "\n"
- "// The base class provides:\n"
- "// + (GPBExtensionRegistry *)extensionRegistry;\n"
- "// which is an GPBExtensionRegistry that includes all the extensions defined by\n"
- "// this file and all files that it depends on.\n"
- "\n"
- "@end\n"
- "\n",
- "root_class_name", root_class_name_);
- }
+ // are no extensions.
+ printer->Print(
+ "\n"
+ "#pragma mark - $root_class_name$\n"
+ "\n"
+ "@interface $root_class_name$ : GPBRootObject\n"
+ "\n"
+ "// The base class provides:\n"
+ "// + (GPBExtensionRegistry *)extensionRegistry;\n"
+ "// which is an GPBExtensionRegistry that includes all the extensions defined by\n"
+ "// this file and all files that it depends on.\n"
+ "\n"
+ "@end\n"
+ "\n",
+ "root_class_name", root_class_name_);
if (extension_generators_.size() > 0) {
- // The dynamic methods block is only needed if there are extensions. If
- // they are all filtered, output the @interface as a comment so there is
- // something left in the header for anyone that looks.
- const char *root_line_prefix = "";
- if (AreAllExtensionsFiltered()) {
- root_line_prefix = "// ";
- }
+ // The dynamic methods block is only needed if there are extensions.
printer->Print(
- "$root_line_prefix$@interface $root_class_name$ (DynamicMethods)\n",
- "root_class_name", root_class_name_,
- "root_line_prefix", root_line_prefix);
+ "@interface $root_class_name$ (DynamicMethods)\n",
+ "root_class_name", root_class_name_);
for (vector<ExtensionGenerator *>::iterator iter =
extension_generators_.begin();
@@ -197,8 +174,7 @@ void FileGenerator::GenerateHeader(io::Printer *printer) {
(*iter)->GenerateMembersHeader(printer);
}
- printer->Print("$root_line_prefix$@end\n\n",
- "root_line_prefix", root_line_prefix);
+ printer->Print("@end\n\n");
} // extension_generators_.size() > 0
for (vector<MessageGenerator *>::iterator iter = message_generators_.begin();
@@ -239,136 +215,119 @@ void FileGenerator::GenerateSource(io::Printer *printer) {
"// @@protoc_insertion_point(imports)\n"
"\n");
- if (IsFiltered()) {
- printer->Print(
- "// File empty because all messages, extensions and enum have been filtered.\n"
- "\n"
- "\n"
- "// Dummy symbol that will be stripped but will avoid linker warnings about\n"
- "// no symbols in the .o form compiling this file.\n"
- "static int $root_class_name$_dummy __attribute__((unused,used)) = 0;\n"
- "\n"
- "// @@protoc_insertion_point(global_scope)\n",
- "root_class_name", root_class_name_);
- return;
- }
-
printer->Print(
"#pragma mark - $root_class_name$\n"
"\n"
"@implementation $root_class_name$\n\n",
"root_class_name", root_class_name_);
- bool generated_extensions = false;
- if (file_->extension_count() + file_->message_type_count() +
- file_->dependency_count() >
- 0) {
- ostringstream extensions_stringstream;
-
- if (file_->extension_count() + file_->message_type_count() > 0) {
- io::OstreamOutputStream extensions_outputstream(&extensions_stringstream);
- io::Printer extensions_printer(&extensions_outputstream, '$');
- extensions_printer.Print(
- "static GPBExtensionDescription descriptions[] = {\n");
- extensions_printer.Indent();
- for (vector<ExtensionGenerator *>::iterator iter =
- extension_generators_.begin();
- iter != extension_generators_.end(); ++iter) {
- (*iter)->GenerateStaticVariablesInitialization(
- &extensions_printer, &generated_extensions, true);
- }
- for (vector<MessageGenerator *>::iterator iter =
- message_generators_.begin();
- iter != message_generators_.end(); ++iter) {
- (*iter)->GenerateStaticVariablesInitialization(&extensions_printer,
- &generated_extensions);
- }
- extensions_printer.Outdent();
- extensions_printer.Print("};\n");
- if (generated_extensions) {
- extensions_printer.Print(
- "for (size_t i = 0; i < sizeof(descriptions) / sizeof(descriptions[0]); ++i) {\n"
- " GPBExtensionField *extension = [[GPBExtensionField alloc] initWithDescription:&descriptions[i]];\n"
- " [registry addExtension:extension];\n"
- " [self globallyRegisterExtension:extension];\n"
- " [extension release];\n"
- "}\n");
- } else {
- extensions_printer.Print("#pragma unused (descriptions)\n");
- }
- const vector<FileGenerator *> &dependency_generators =
- DependencyGenerators();
- if (dependency_generators.size()) {
- for (vector<FileGenerator *>::const_iterator iter =
- dependency_generators.begin();
- iter != dependency_generators.end(); ++iter) {
- if (!(*iter)->IsFiltered()) {
- extensions_printer.Print(
- "[registry addExtensions:[$dependency$ extensionRegistry]];\n",
- "dependency", (*iter)->RootClassName());
- generated_extensions = true;
- }
- }
- } else if (!generated_extensions) {
- extensions_printer.Print("#pragma unused (registry)\n");
- }
+ // Generate the extension initialization structures for the top level and
+ // any nested messages.
+ ostringstream extensions_stringstream;
+ if (file_->extension_count() + file_->message_type_count() > 0) {
+ io::OstreamOutputStream extensions_outputstream(&extensions_stringstream);
+ io::Printer extensions_printer(&extensions_outputstream, '$');
+ for (vector<ExtensionGenerator *>::iterator iter =
+ extension_generators_.begin();
+ iter != extension_generators_.end(); ++iter) {
+ (*iter)->GenerateStaticVariablesInitialization(&extensions_printer);
+ }
+ for (vector<MessageGenerator *>::iterator iter =
+ message_generators_.begin();
+ iter != message_generators_.end(); ++iter) {
+ (*iter)->GenerateStaticVariablesInitialization(&extensions_printer);
}
+ extensions_stringstream.flush();
+ }
- if (generated_extensions) {
+ // If there were any extensions or this file has any dependencies, output
+ // a registry to override to create the file specific registry.
+ const string& extensions_str = extensions_stringstream.str();
+ if (extensions_str.length() > 0 || file_->dependency_count() > 0) {
+ printer->Print(
+ "+ (GPBExtensionRegistry*)extensionRegistry {\n"
+ " // This is called by +initialize so there is no need to worry\n"
+ " // about thread safety and initialization of registry.\n"
+ " static GPBExtensionRegistry* registry = nil;\n"
+ " if (!registry) {\n"
+ " GPBDebugCheckRuntimeVersion();\n"
+ " registry = [[GPBExtensionRegistry alloc] init];\n");
+
+ printer->Indent();
+ printer->Indent();
+
+ if (extensions_str.length() > 0) {
printer->Print(
- "+ (GPBExtensionRegistry*)extensionRegistry {\n"
- " // This is called by +initialize so there is no need to worry\n"
- " // about thread safety and initialization of registry.\n"
- " static GPBExtensionRegistry* registry = nil;\n"
- " if (!registry) {\n"
- " registry = [[GPBExtensionRegistry alloc] init];\n");
-
- printer->Indent();
+ "static GPBExtensionDescription descriptions[] = {\n");
printer->Indent();
-
- extensions_stringstream.flush();
- printer->Print(extensions_stringstream.str().c_str());
- printer->Outdent();
+ printer->Print(extensions_str.c_str());
printer->Outdent();
+ printer->Print(
+ "};\n"
+ "for (size_t i = 0; i < sizeof(descriptions) / sizeof(descriptions[0]); ++i) {\n"
+ " GPBExtensionDescriptor *extension =\n"
+ " [[GPBExtensionDescriptor alloc] initWithExtensionDescription:&descriptions[i]];\n"
+ " [registry addExtension:extension];\n"
+ " [self globallyRegisterExtension:extension];\n"
+ " [extension release];\n"
+ "}\n");
+ }
+ const vector<FileGenerator *> &dependency_generators =
+ DependencyGenerators();
+ for (vector<FileGenerator *>::const_iterator iter =
+ dependency_generators.begin();
+ iter != dependency_generators.end(); ++iter) {
printer->Print(
- " }\n"
- " return registry;\n"
- "}\n"
- "\n");
+ "[registry addExtensions:[$dependency$ extensionRegistry]];\n",
+ "dependency", (*iter)->RootClassName());
}
+
+ printer->Outdent();
+ printer->Outdent();
+
+ printer->Print(
+ " }\n"
+ " return registry;\n"
+ "}\n"
+ "\n");
}
printer->Print("@end\n\n");
-
- string syntax;
- switch (file_->syntax()) {
- case FileDescriptor::SYNTAX_UNKNOWN:
- syntax = "GPBFileSyntaxUnknown";
- break;
- case FileDescriptor::SYNTAX_PROTO2:
- syntax = "GPBFileSyntaxProto2";
- break;
- case FileDescriptor::SYNTAX_PROTO3:
- syntax = "GPBFileSyntaxProto3";
- break;
+ // File descriptor only needed if there are messages to use it.
+ if (message_generators_.size() > 0) {
+ string syntax;
+ switch (file_->syntax()) {
+ case FileDescriptor::SYNTAX_UNKNOWN:
+ syntax = "GPBFileSyntaxUnknown";
+ break;
+ case FileDescriptor::SYNTAX_PROTO2:
+ syntax = "GPBFileSyntaxProto2";
+ break;
+ case FileDescriptor::SYNTAX_PROTO3:
+ syntax = "GPBFileSyntaxProto3";
+ break;
+ }
+ printer->Print(
+ "#pragma mark - $root_class_name$_FileDescriptor\n"
+ "\n"
+ "static GPBFileDescriptor *$root_class_name$_FileDescriptor(void) {\n"
+ " // This is called by +initialize so there is no need to worry\n"
+ " // about thread safety of the singleton.\n"
+ " static GPBFileDescriptor *descriptor = NULL;\n"
+ " if (!descriptor) {\n"
+ " GPBDebugCheckRuntimeVersion();\n"
+ " descriptor = [[GPBFileDescriptor alloc] initWithPackage:@\"$package$\"\n"
+ " syntax:$syntax$];\n"
+ " }\n"
+ " return descriptor;\n"
+ "}\n"
+ "\n",
+ "root_class_name", root_class_name_,
+ "package", file_->package(),
+ "syntax", syntax);
}
- printer->Print(
- "static GPBFileDescriptor *$root_class_name$_FileDescriptor(void) {\n"
- " // This is called by +initialize so there is no need to worry\n"
- " // about thread safety of the singleton.\n"
- " static GPBFileDescriptor *descriptor = NULL;\n"
- " if (!descriptor) {\n"
- " descriptor = [[GPBFileDescriptor alloc] initWithPackage:@\"$package$\"\n"
- " syntax:$syntax$];\n"
- " }\n"
- " return descriptor;\n"
- "}\n"
- "\n",
- "root_class_name", root_class_name_,
- "package", file_->package(),
- "syntax", syntax);
for (vector<EnumGenerator *>::iterator iter = enum_generators_.begin();
iter != enum_generators_.end(); ++iter) {
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_file.h b/src/google/protobuf/compiler/objectivec/objectivec_file.h
index 95d17bfd..1bb4f0ea 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_file.h
+++ b/src/google/protobuf/compiler/objectivec/objectivec_file.h
@@ -64,8 +64,6 @@ class FileGenerator {
const string& RootClassName() const { return root_class_name_; }
const string Path() const;
- bool IsFiltered() const { return is_filtered_; }
- bool AreAllExtensionsFiltered() const { return all_extensions_filtered_; }
bool IsPublicDependency() const { return is_public_dep_; }
protected:
@@ -84,8 +82,6 @@ class FileGenerator {
vector<EnumGenerator*> enum_generators_;
vector<MessageGenerator*> message_generators_;
vector<ExtensionGenerator*> extension_generators_;
- bool is_filtered_;
- bool all_extensions_filtered_;
bool is_public_dep_;
const vector<FileGenerator*>& DependencyGenerators();
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_generator.cc b/src/google/protobuf/compiler/objectivec/objectivec_generator.cc
index 17776715..85e438f4 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_generator.cc
+++ b/src/google/protobuf/compiler/objectivec/objectivec_generator.cc
@@ -58,10 +58,6 @@ bool ObjectiveCGenerator::Generate(const FileDescriptor* file,
return false;
}
- if (!InitializeClassWhitelist(error)) {
- return false;
- }
-
FileGenerator file_generator(file);
string filepath = FilePath(file);
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc b/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc
index 6d6e5959..9b645f09 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc
+++ b/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc
@@ -50,8 +50,6 @@ namespace objectivec {
namespace {
-hash_set<string> gClassWhitelist;
-
// islower()/isupper()/tolower()/toupper() change based on locale.
//
// src/google/protobuf/stubs/strutil.h:150 has the same pattern. For the
@@ -580,7 +578,7 @@ string GetCapitalizedType(const FieldDescriptor* field) {
case FieldDescriptor::TYPE_STRING:
return "String";
case FieldDescriptor::TYPE_BYTES:
- return "Data";
+ return "Bytes";
case FieldDescriptor::TYPE_ENUM:
return "Enum";
case FieldDescriptor::TYPE_GROUP:
@@ -684,8 +682,9 @@ static string HandleExtremeFloatingPoint(string val, bool add_float_suffix) {
}
}
-string GPBValueFieldName(const FieldDescriptor* field) {
- // Returns the field within the GPBValue union to use for the given field.
+string GPBGenericValueFieldName(const FieldDescriptor* field) {
+ // Returns the field within the GPBGenericValue union to use for the given
+ // field.
if (field->is_repeated()) {
return "valueMessage";
}
@@ -831,60 +830,6 @@ string BuildCommentsString(const SourceLocation& location) {
return final_comments;
}
-bool InitializeClassWhitelist(string* error) {
- const char* env_var_value = getenv("GPB_OBJC_CLASS_WHITELIST_PATHS");
- if (env_var_value == NULL) {
- return true;
- }
-
- // The values are joined with ';' in case we ever want to make this a
- // generator parameter also (instead of env var), and generator parameter
- // parsing already has meaning for ',' and ':'.
- vector<string> file_paths = Split(env_var_value, ";", true);
-
- for (vector<string>::const_iterator i = file_paths.begin();
- i != file_paths.end(); ++i) {
- const string& file_path = *i;
-
- ifstream stream(file_path.c_str(), ifstream::in);
- if (!stream.good()) {
- if (error != NULL) {
- stringstream err_stream;
- err_stream << endl << file_path << ":0:0: error: Unable to open";
- *error = err_stream.str();
- return false;
- }
- }
-
- string input_line;
- while (stream.good()) {
- getline(stream, input_line);
- string trimmed_line(TrimString(input_line));
- if (trimmed_line.length() == 0) {
- // Skip empty lines
- continue;
- }
- if (trimmed_line[0] == '/' || trimmed_line[0] == '#') {
- // Skip comments and potential preprocessor symbols
- continue;
- }
- gClassWhitelist.insert(trimmed_line);
- }
- }
- return true;
-}
-
-bool FilterClass(const string& name) {
- if (gClassWhitelist.count(name) > 0) {
- // Whitelisted, don't filter.
- return false;
- }
-
- // If there was no list, default to everything in.
- // If there was a list, default to everything out.
- return gClassWhitelist.size() > 0;
-}
-
void TextFormatDecodeData::AddString(int32 key,
const string& input_for_decode,
const string& desired_output) {
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_helpers.h b/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
index 19317698..10d51a34 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
+++ b/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
@@ -138,16 +138,13 @@ inline ObjectiveCType GetObjectiveCType(const FieldDescriptor* field) {
bool IsPrimitiveType(const FieldDescriptor* field);
bool IsReferenceType(const FieldDescriptor* field);
-string GPBValueFieldName(const FieldDescriptor* field);
+string GPBGenericValueFieldName(const FieldDescriptor* field);
string DefaultValue(const FieldDescriptor* field);
string BuildFlagsString(const vector<string>& strings);
string BuildCommentsString(const SourceLocation& location);
-bool InitializeClassWhitelist(string* error);
-bool FilterClass(const string& name);
-
// Generate decode data needed for ObjC's GPBDecodeTextFormatName() to transform
// the input into the the expected output.
class LIBPROTOC_EXPORT TextFormatDecodeData {
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc b/src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc
index b091b77a..dc1cef55 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc
+++ b/src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc
@@ -242,6 +242,14 @@ TEST(ObjCHelperDeathTest, TextFormatDecodeData_Failures) {
}
#endif // PROTOBUF_HAS_DEATH_TEST
+// TODO(thomasvl): Should probably add some unittests for all the special cases
+// of name mangling (class name, field name, enum names). Rather than doing
+// this with an ObjC test in the objectivec directory, we should be able to
+// use src/google/protobuf/compiler/importer* (like other tests) to support a
+// virtual file system to feed in protos, once we have the Descriptor tree, the
+// tests could use the helper methods for generating names and validate the
+// right things are happening.
+
} // namespace
} // namespace objectivec
} // namespace compiler
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_message.cc b/src/google/protobuf/compiler/objectivec/objectivec_message.cc
index 52e583bf..32671d42 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_message.cc
+++ b/src/google/protobuf/compiler/objectivec/objectivec_message.cc
@@ -178,49 +178,25 @@ MessageGenerator::MessageGenerator(const string& root_classname,
: root_classname_(root_classname),
descriptor_(descriptor),
field_generators_(descriptor),
- class_name_(ClassName(descriptor_)),
- sub_content_filtered_(true) {
- if (FilterClass(class_name_)) {
- filter_reason_ =
- string("Message |") + class_name_ + "| was not whitelisted.";
+ class_name_(ClassName(descriptor_)) {
+ for (int i = 0; i < descriptor_->extension_count(); i++) {
+ extension_generators_.push_back(
+ new ExtensionGenerator(class_name_, descriptor_->extension(i)));
}
- if (!IsFiltered()) {
- // No need to generate extensions if this message is filtered
- for (int i = 0; i < descriptor_->extension_count(); i++) {
- extension_generators_.push_back(
- new ExtensionGenerator(class_name_, descriptor_->extension(i)));
- }
- // No need to generate oneofs if this message is filtered.
- for (int i = 0; i < descriptor_->oneof_decl_count(); i++) {
- OneofGenerator* generator = new OneofGenerator(descriptor_->oneof_decl(i));
- oneof_generators_.push_back(generator);
- }
+
+ for (int i = 0; i < descriptor_->oneof_decl_count(); i++) {
+ OneofGenerator* generator = new OneofGenerator(descriptor_->oneof_decl(i));
+ oneof_generators_.push_back(generator);
}
- // We may have enums of this message that are used even if the message
- // itself is filtered.
for (int i = 0; i < descriptor_->enum_type_count(); i++) {
EnumGenerator* generator = new EnumGenerator(descriptor_->enum_type(i));
- // The enums are exposed via C functions, so they will dead strip if
- // not used.
- sub_content_filtered_ &= false;
enum_generators_.push_back(generator);
}
- // We may have nested messages that are used even if the message itself
- // is filtered.
for (int i = 0; i < descriptor_->nested_type_count(); i++) {
- const Descriptor* nested_descriptor = descriptor_->nested_type(i);
MessageGenerator* generator =
- new MessageGenerator(root_classname_, nested_descriptor);
- // Don't check map entries for being filtered, as they don't directly
- // generate anything in Objective C. In theory, they only should include
- // references to other toplevel types, but we still make the generators
- // to be safe.
- if (!IsMapEntryMessage(nested_descriptor)) {
- sub_content_filtered_ &= generator->IsFiltered();
- }
- sub_content_filtered_ &= generator->IsSubContentFiltered();
+ new MessageGenerator(root_classname_, descriptor_->nested_type(i));
nested_message_generators_.push_back(generator);
}
}
@@ -236,31 +212,26 @@ MessageGenerator::~MessageGenerator() {
}
void MessageGenerator::GenerateStaticVariablesInitialization(
- io::Printer* printer, bool* out_generated) {
- if (!IsFiltered()) {
- // Skip extensions if we are filtered.
- for (vector<ExtensionGenerator*>::iterator iter =
- extension_generators_.begin();
- iter != extension_generators_.end(); ++iter) {
- (*iter)->GenerateStaticVariablesInitialization(printer, out_generated,
- false);
- }
+ io::Printer* printer) {
+ for (vector<ExtensionGenerator*>::iterator iter =
+ extension_generators_.begin();
+ iter != extension_generators_.end(); ++iter) {
+ (*iter)->GenerateStaticVariablesInitialization(printer);
}
- // Generating sub messages is perfectly fine though.
for (vector<MessageGenerator*>::iterator iter =
nested_message_generators_.begin();
iter != nested_message_generators_.end(); ++iter) {
- (*iter)->GenerateStaticVariablesInitialization(printer, out_generated);
+ (*iter)->GenerateStaticVariablesInitialization(printer);
}
}
void MessageGenerator::DetermineForwardDeclarations(set<string>* fwd_decls) {
- if (!IsFiltered() && !IsMapEntryMessage(descriptor_)) {
+ if (!IsMapEntryMessage(descriptor_)) {
for (int i = 0; i < descriptor_->field_count(); i++) {
const FieldDescriptor* fieldDescriptor = descriptor_->field(i);
- // If it is a the field is repeated, the type will be and *Array,
- // and we don't need any forward decl.
+ // If it is a the field is repeated, the type will be and *Array, and we
+ // don't need any forward decl.
if (fieldDescriptor->is_repeated()) {
continue;
}
@@ -291,12 +262,10 @@ void MessageGenerator::GenerateEnumHeader(io::Printer* printer) {
void MessageGenerator::GenerateExtensionRegistrationSource(
io::Printer* printer) {
- if (!IsFiltered()) {
- for (vector<ExtensionGenerator*>::iterator iter =
- extension_generators_.begin();
- iter != extension_generators_.end(); ++iter) {
- (*iter)->GenerateRegistrationSource(printer);
- }
+ for (vector<ExtensionGenerator*>::iterator iter =
+ extension_generators_.begin();
+ iter != extension_generators_.end(); ++iter) {
+ (*iter)->GenerateRegistrationSource(printer);
}
for (vector<MessageGenerator*>::iterator iter =
@@ -317,101 +286,84 @@ void MessageGenerator::GenerateMessageHeader(io::Printer* printer) {
return;
}
- if (IsFiltered()) {
- printer->Print("// $filter_reason$\n\n",
- "filter_reason", filter_reason_);
- } else {
- printer->Print(
- "#pragma mark - $classname$\n"
- "\n",
- "classname", class_name_);
+ printer->Print(
+ "#pragma mark - $classname$\n"
+ "\n",
+ "classname", class_name_);
- if (descriptor_->field_count()) {
- // Even if there are fields, they could be filtered away, so always use
- // a buffer to confirm we have something.
- ostringstream fieldnumber_stringstream;
- {
- scoped_array<const FieldDescriptor*> sorted_fields(
- SortFieldsByNumber(descriptor_));
-
- io::OstreamOutputStream fieldnumber_outputstream(
- &fieldnumber_stringstream);
- io::Printer fieldnumber_printer(&fieldnumber_outputstream, '$');
- for (int i = 0; i < descriptor_->field_count(); i++) {
- field_generators_.get(sorted_fields[i])
- .GenerateFieldNumberConstant(&fieldnumber_printer);
- }
- fieldnumber_stringstream.flush();
- }
- const string& fieldnumber_str = fieldnumber_stringstream.str();
- if (fieldnumber_str.length()) {
- printer->Print("typedef GPB_ENUM($classname$_FieldNumber) {\n",
- "classname", class_name_);
- printer->Indent();
- printer->Print(fieldnumber_str.c_str());
- printer->Outdent();
- printer->Print("};\n\n");
- }
- }
+ if (descriptor_->field_count()) {
+ scoped_array<const FieldDescriptor*> sorted_fields(
+ SortFieldsByNumber(descriptor_));
- for (vector<OneofGenerator*>::iterator iter = oneof_generators_.begin();
- iter != oneof_generators_.end(); ++iter) {
- (*iter)->GenerateCaseEnum(printer);
- }
+ printer->Print("typedef GPB_ENUM($classname$_FieldNumber) {\n",
+ "classname", class_name_);
+ printer->Indent();
- string message_comments;
- SourceLocation location;
- if (descriptor_->GetSourceLocation(&location)) {
- message_comments = BuildCommentsString(location);
- } else {
- message_comments = "";
+ for (int i = 0; i < descriptor_->field_count(); i++) {
+ field_generators_.get(sorted_fields[i])
+ .GenerateFieldNumberConstant(printer);
}
- printer->Print(
- "$comments$@interface $classname$ : GPBMessage\n\n",
- "classname", class_name_,
- "comments", message_comments);
+ printer->Outdent();
+ printer->Print("};\n\n");
+ }
- vector<char> seen_oneofs(descriptor_->oneof_decl_count(), 0);
- for (int i = 0; i < descriptor_->field_count(); i++) {
- const FieldDescriptor* field = descriptor_->field(i);
- if (field->containing_oneof() != NULL) {
- const int oneof_index = field->containing_oneof()->index();
- if (!seen_oneofs[oneof_index]) {
- seen_oneofs[oneof_index] = 1;
- oneof_generators_[oneof_index]->GeneratePublicCasePropertyDeclaration(
- printer);
- }
+ for (vector<OneofGenerator*>::iterator iter = oneof_generators_.begin();
+ iter != oneof_generators_.end(); ++iter) {
+ (*iter)->GenerateCaseEnum(printer);
+ }
+
+ string message_comments;
+ SourceLocation location;
+ if (descriptor_->GetSourceLocation(&location)) {
+ message_comments = BuildCommentsString(location);
+ } else {
+ message_comments = "";
+ }
+
+ printer->Print(
+ "$comments$@interface $classname$ : GPBMessage\n\n",
+ "classname", class_name_,
+ "comments", message_comments);
+
+ vector<char> seen_oneofs(descriptor_->oneof_decl_count(), 0);
+ for (int i = 0; i < descriptor_->field_count(); i++) {
+ const FieldDescriptor* field = descriptor_->field(i);
+ if (field->containing_oneof() != NULL) {
+ const int oneof_index = field->containing_oneof()->index();
+ if (!seen_oneofs[oneof_index]) {
+ seen_oneofs[oneof_index] = 1;
+ oneof_generators_[oneof_index]->GeneratePublicCasePropertyDeclaration(
+ printer);
}
- field_generators_.get(field)
- .GeneratePropertyDeclaration(printer);
}
+ field_generators_.get(field).GeneratePropertyDeclaration(printer);
+ }
- printer->Print("@end\n\n");
+ printer->Print("@end\n\n");
- for (int i = 0; i < descriptor_->field_count(); i++) {
- field_generators_.get(descriptor_->field(i))
- .GenerateCFunctionDeclarations(printer);
- }
+ for (int i = 0; i < descriptor_->field_count(); i++) {
+ field_generators_.get(descriptor_->field(i))
+ .GenerateCFunctionDeclarations(printer);
+ }
- if (!oneof_generators_.empty()) {
- for (vector<OneofGenerator*>::iterator iter = oneof_generators_.begin();
- iter != oneof_generators_.end(); ++iter) {
- (*iter)->GenerateClearFunctionDeclaration(printer);
- }
- printer->Print("\n");
+ if (!oneof_generators_.empty()) {
+ for (vector<OneofGenerator*>::iterator iter = oneof_generators_.begin();
+ iter != oneof_generators_.end(); ++iter) {
+ (*iter)->GenerateClearFunctionDeclaration(printer);
}
+ printer->Print("\n");
+ }
- if (descriptor_->extension_count() > 0) {
- printer->Print("@interface $classname$ (DynamicMethods)\n\n",
- "classname", class_name_);
- for (vector<ExtensionGenerator*>::iterator iter =
- extension_generators_.begin();
- iter != extension_generators_.end(); ++iter) {
- (*iter)->GenerateMembersHeader(printer);
- }
- printer->Print("@end\n\n");
+ if (descriptor_->extension_count() > 0) {
+ printer->Print("@interface $classname$ (DynamicMethods)\n\n",
+ "classname", class_name_);
+ for (vector<ExtensionGenerator*>::iterator iter =
+ extension_generators_.begin();
+ iter != extension_generators_.end(); ++iter) {
+ (*iter)->GenerateMembersHeader(printer);
}
+ printer->Print("@end\n\n");
}
for (vector<MessageGenerator*>::iterator iter =
@@ -422,7 +374,7 @@ void MessageGenerator::GenerateMessageHeader(io::Printer* printer) {
}
void MessageGenerator::GenerateSource(io::Printer* printer) {
- if (!IsFiltered() && !IsMapEntryMessage(descriptor_)) {
+ if (!IsMapEntryMessage(descriptor_)) {
printer->Print(
"#pragma mark - $classname$\n"
"\n",
@@ -454,6 +406,23 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
sort(sorted_extensions.begin(), sorted_extensions.end(),
ExtensionRangeOrdering());
+ // TODO(thomasvl): Finish optimizing has bit. The current behavior is as
+ // follows:
+ // 1. objectivec_field.cc's SetCommonFieldVariables() defaults the has_index
+ // to the field's index in the list of fields.
+ // 2. RepeatedFieldGenerator::RepeatedFieldGenerator() sets has_index to
+ // GPBNoHasBit because repeated fields & map<> fields don't use the has
+ // bit.
+ // 3. FieldGenerator::SetOneofIndexBase() overrides has_bit with a negative
+ // index that groups all the elements on of the oneof.
+ // So in has_storage, we need enough bits for the single fields that aren't
+ // in any oneof, and then one int32 for each oneof (to store the field
+ // number). So we could save a little space by not using the field's index
+ // and instead make a second pass only assigning indexes for the fields
+ // that would need it. The only savings would come when messages have over
+ // a multiple of 32 fields with some number being repeated or in oneofs to
+ // drop the count below that 32 multiple; so it hasn't seemed worth doing
+ // at the moment.
size_t num_has_bits = descriptor_->field_count();
size_t sizeof_has_storage = (num_has_bits + 31) / 32;
// Tell all the fields the oneof base.
@@ -467,7 +436,7 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
printer->Print(
"\n"
- "typedef struct $classname$_Storage {\n"
+ "typedef struct $classname$__storage_ {\n"
" uint32_t _has_storage_[$sizeof_has_storage$];\n",
"classname", class_name_,
"sizeof_has_storage", SimpleItoa(sizeof_has_storage));
@@ -479,14 +448,14 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
}
printer->Outdent();
- printer->Print("} $classname$_Storage;\n\n", "classname", class_name_);
+ printer->Print("} $classname$__storage_;\n\n", "classname", class_name_);
printer->Print(
"// This method is threadsafe because it is initially called\n"
"// in +initialize for each subclass.\n"
"+ (GPBDescriptor *)descriptor {\n"
- " static GPBDescriptor *descriptor = NULL;\n"
+ " static GPBDescriptor *descriptor = nil;\n"
" if (!descriptor) {\n");
bool has_oneofs = oneof_generators_.size();
@@ -507,30 +476,45 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
" };\n");
}
- printer->Print(
- " static GPBMessageFieldDescription fields[] = {\n");
- printer->Indent();
- printer->Indent();
- printer->Indent();
TextFormatDecodeData text_format_decode_data;
- for (int i = 0; i < descriptor_->field_count(); ++i) {
- const FieldGenerator& field_generator =
- field_generators_.get(sorted_fields[i]);
- field_generator.GenerateFieldDescription(printer);
- if (field_generator.needs_textformat_name_support()) {
- text_format_decode_data.AddString(sorted_fields[i]->number(),
- field_generator.generated_objc_name(),
- field_generator.raw_field_name());
+ bool has_fields = descriptor_->field_count() > 0;
+ if (has_fields) {
+ // TODO(thomasvl): The plugin's FieldGenerator::GenerateFieldDescription()
+ // wraps the fieldOptions's value of this structure in an CPP gate so
+ // they can be compiled away; but that still results in a const char* in
+ // the structure for a NULL pointer for every message field. If the
+ // fieldOptions are moved to a separate payload like the TextFormat extra
+ // data is, then it would shrink that static data shrinking the binaries
+ // a little more.
+ // TODO(thomasvl): proto3 syntax doens't need a defaultValue in the
+ // structure because primitive types are always zero. If we add a second
+ // structure and a different initializer, we can avoid the wasted static
+ // storage for every field in a proto3 message.
+ printer->Print(
+ " static GPBMessageFieldDescription fields[] = {\n");
+ printer->Indent();
+ printer->Indent();
+ printer->Indent();
+ for (int i = 0; i < descriptor_->field_count(); ++i) {
+ const FieldGenerator& field_generator =
+ field_generators_.get(sorted_fields[i]);
+ field_generator.GenerateFieldDescription(printer);
+ if (field_generator.needs_textformat_name_support()) {
+ text_format_decode_data.AddString(sorted_fields[i]->number(),
+ field_generator.generated_objc_name(),
+ field_generator.raw_field_name());
+ }
}
+ printer->Outdent();
+ printer->Outdent();
+ printer->Outdent();
+ printer->Print(
+ " };\n");
}
- printer->Outdent();
- printer->Outdent();
- printer->Outdent();
bool has_enums = enum_generators_.size();
if (has_enums) {
printer->Print(
- " };\n"
" static GPBMessageEnumDescription enums[] = {\n");
printer->Indent();
printer->Indent();
@@ -543,12 +527,13 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
printer->Outdent();
printer->Outdent();
printer->Outdent();
+ printer->Print(
+ " };\n");
}
bool has_extensions = sorted_extensions.size();
if (has_extensions) {
printer->Print(
- " };\n"
" static GPBExtensionRange ranges[] = {\n");
printer->Indent();
printer->Indent();
@@ -561,11 +546,16 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
printer->Outdent();
printer->Outdent();
printer->Outdent();
+ printer->Print(
+ " };\n");
}
map<string, string> vars;
vars["classname"] = class_name_;
vars["rootclassname"] = root_classname_;
+ vars["fields"] = has_fields ? "fields" : "NULL";
+ vars["fields_count"] =
+ has_fields ? "sizeof(fields) / sizeof(GPBMessageFieldDescription)" : "0";
vars["oneofs"] = has_oneofs ? "oneofs" : "NULL";
vars["oneof_count"] =
has_oneofs ? "sizeof(oneofs) / sizeof(GPBMessageOneofDescription)" : "0";
@@ -578,23 +568,23 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
vars["wireformat"] =
descriptor_->options().message_set_wire_format() ? "YES" : "NO";
- printer->Print(" };\n");
if (text_format_decode_data.num_entries() == 0) {
printer->Print(
vars,
- " descriptor = [GPBDescriptor allocDescriptorForClass:[$classname$ class]\n"
- " rootClass:[$rootclassname$ class]\n"
- " file:$rootclassname$_FileDescriptor()\n"
- " fields:fields\n"
- " fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)\n"
- " oneofs:$oneofs$\n"
- " oneofCount:$oneof_count$\n"
- " enums:$enums$\n"
- " enumCount:$enum_count$\n"
- " ranges:$ranges$\n"
- " rangeCount:$range_count$\n"
- " storageSize:sizeof($classname$_Storage)\n"
- " wireFormat:$wireformat$];\n");
+ " GPBDescriptor *localDescriptor =\n"
+ " [GPBDescriptor allocDescriptorForClass:[$classname$ class]\n"
+ " rootClass:[$rootclassname$ class]\n"
+ " file:$rootclassname$_FileDescriptor()\n"
+ " fields:$fields$\n"
+ " fieldCount:$fields_count$\n"
+ " oneofs:$oneofs$\n"
+ " oneofCount:$oneof_count$\n"
+ " enums:$enums$\n"
+ " enumCount:$enum_count$\n"
+ " ranges:$ranges$\n"
+ " rangeCount:$range_count$\n"
+ " storageSize:sizeof($classname$__storage_)\n"
+ " wireFormat:$wireformat$];\n");
} else {
vars["extraTextFormatInfo"] = CEscape(text_format_decode_data.Data());
printer->Print(
@@ -604,26 +594,29 @@ void MessageGenerator::GenerateSource(io::Printer* printer) {
"#else\n"
" static const char *extraTextFormatInfo = \"$extraTextFormatInfo$\";\n"
"#endif // GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS\n"
- " descriptor = [GPBDescriptor allocDescriptorForClass:[$classname$ class]\n"
- " rootClass:[$rootclassname$ class]\n"
- " file:$rootclassname$_FileDescriptor()\n"
- " fields:fields\n"
- " fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)\n"
- " oneofs:$oneofs$\n"
- " oneofCount:$oneof_count$\n"
- " enums:$enums$\n"
- " enumCount:$enum_count$\n"
- " ranges:$ranges$\n"
- " rangeCount:$range_count$\n"
- " storageSize:sizeof($classname$_Storage)\n"
- " wireFormat:$wireformat$\n"
- " extraTextFormatInfo:extraTextFormatInfo];\n");
+ " GPBDescriptor *localDescriptor =\n"
+ " [GPBDescriptor allocDescriptorForClass:[$classname$ class]\n"
+ " rootClass:[$rootclassname$ class]\n"
+ " file:$rootclassname$_FileDescriptor()\n"
+ " fields:$fields$\n"
+ " fieldCount:$fields_count$\n"
+ " oneofs:$oneofs$\n"
+ " oneofCount:$oneof_count$\n"
+ " enums:$enums$\n"
+ " enumCount:$enum_count$\n"
+ " ranges:$ranges$\n"
+ " rangeCount:$range_count$\n"
+ " storageSize:sizeof($classname$__storage_)\n"
+ " wireFormat:$wireformat$\n"
+ " extraTextFormatInfo:extraTextFormatInfo];\n");
}
printer->Print(
- " }\n"
- " return descriptor;\n"
- "}\n\n"
- "@end\n\n");
+ " NSAssert(descriptor == nil, @\"Startup recursed!\");\n"
+ " descriptor = localDescriptor;\n"
+ " }\n"
+ " return descriptor;\n"
+ "}\n\n"
+ "@end\n\n");
for (int i = 0; i < descriptor_->field_count(); i++) {
field_generators_.get(descriptor_->field(i))
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_message.h b/src/google/protobuf/compiler/objectivec/objectivec_message.h
index 8d03c0b8..06b536ff 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_message.h
+++ b/src/google/protobuf/compiler/objectivec/objectivec_message.h
@@ -57,20 +57,13 @@ class MessageGenerator {
MessageGenerator(const string& root_classname, const Descriptor* descriptor);
~MessageGenerator();
- void GenerateStaticVariablesInitialization(io::Printer* printer,
- bool* out_generated);
+ void GenerateStaticVariablesInitialization(io::Printer* printer);
void GenerateEnumHeader(io::Printer* printer);
void GenerateMessageHeader(io::Printer* printer);
void GenerateSource(io::Printer* printer);
void GenerateExtensionRegistrationSource(io::Printer* printer);
void DetermineForwardDeclarations(set<string>* fwd_decls);
- // This only speaks for this message, not sub message/enums.
- bool IsFiltered() const { return filter_reason_.length() > 0; }
- // This message being filtered doesn't effect this, instead it covers if
- // there are any nested messages or enums.
- bool IsSubContentFiltered() const { return sub_content_filtered_; }
-
private:
void GenerateParseFromMethodsHeader(io::Printer* printer);
@@ -87,8 +80,6 @@ class MessageGenerator {
const Descriptor* descriptor_;
FieldGeneratorMap field_generators_;
const string class_name_;
- string filter_reason_;
- bool sub_content_filtered_;
vector<ExtensionGenerator*> extension_generators_;
vector<EnumGenerator*> enum_generators_;
vector<MessageGenerator*> nested_message_generators_;
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_message_field.cc b/src/google/protobuf/compiler/objectivec/objectivec_message_field.cc
index 2e3bdfdb..f2ce4e5b 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_message_field.cc
+++ b/src/google/protobuf/compiler/objectivec/objectivec_message_field.cc
@@ -53,7 +53,7 @@ void SetMessageVariables(const FieldDescriptor* descriptor,
(*variables)["group_or_message"] =
(descriptor->type() == FieldDescriptor::TYPE_GROUP) ? "Group" : "Message";
- (*variables)["typeSpecific_value"] = "GPBStringifySymbol(" + message_type + ")";
+ (*variables)["dataTypeSpecific_value"] = "GPBStringifySymbol(" + message_type + ")";
}
} // namespace
diff --git a/src/google/protobuf/compiler/plugin.pb.cc b/src/google/protobuf/compiler/plugin.pb.cc
index 344ed450..e7890fae 100644
--- a/src/google/protobuf/compiler/plugin.pb.cc
+++ b/src/google/protobuf/compiler/plugin.pb.cc
@@ -913,7 +913,7 @@ void CodeGeneratorResponse_File::SerializeWithCachedSizes(
int CodeGeneratorResponse_File::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 7) {
+ if (_has_bits_[0 / 32] & 7u) {
// optional string name = 1;
if (has_name()) {
total_size += 1 +
diff --git a/src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc b/src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc
index 6c203ab6..1b04cb32 100644
--- a/src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc
+++ b/src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc
@@ -47,6 +47,7 @@ namespace {
string FindRubyTestDir(const string& file) {
// Inspired by TestSourceDir() in src/google/protobuf/testing/googletest.cc.
+#ifndef GOOGLE_THIRD_PARTY_PROTOBUF
string prefix = ".";
while (!File::Exists(prefix + "/src/google/protobuf/compiler/ruby" + file)) {
if (!File::Exists(prefix)) {
@@ -57,6 +58,9 @@ string FindRubyTestDir(const string& file) {
prefix += "/..";
}
return prefix + "/src/google/protobuf/compiler/ruby";
+#else
+ return "third_party/protobuf/src/google/protobuf/compiler/ruby";
+#endif // GOOGLE_THIRD_PARTY_PROTOBUF
}
// This test is a simple golden-file test over the output of the Ruby code
diff --git a/src/google/protobuf/descriptor.pb.cc b/src/google/protobuf/descriptor.pb.cc
index 755c2617..30b3a3a7 100644
--- a/src/google/protobuf/descriptor.pb.cc
+++ b/src/google/protobuf/descriptor.pb.cc
@@ -753,9 +753,10 @@ void protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto() {
"ion\032\206\001\n\010Location\022\020\n\004path\030\001 \003(\005B\002\020\001\022\020\n\004sp"
"an\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\031leading_det"
- "ached_comments\030\006 \003(\tBY\n\023com.google.proto"
- "bufB\020DescriptorProtosH\001\242\002\003GPB\252\002\'Google.P"
- "rotocolBuffers.DescriptorProtos", 4951);
+ "ached_comments\030\006 \003(\tBe\n\023com.google.proto"
+ "bufB\020DescriptorProtosH\001Z\ndescriptor\242\002\003GP"
+ "B\252\002\'Google.ProtocolBuffers.DescriptorPro"
+ "tos", 4963);
::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
"google/protobuf/descriptor.proto", &protobuf_RegisterTypes);
FileDescriptorSet::default_instance_ = new FileDescriptorSet();
@@ -1648,7 +1649,7 @@ void FileDescriptorProto::SerializeWithCachedSizes(
int FileDescriptorProto::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 3) {
+ if (_has_bits_[0 / 32] & 3u) {
// optional string name = 1;
if (has_name()) {
total_size += 1 +
@@ -1664,7 +1665,7 @@ int FileDescriptorProto::ByteSize() const {
}
}
- if (_has_bits_[9 / 32] & 3584) {
+ if (_has_bits_[9 / 32] & 3584u) {
// optional .google.protobuf.FileOptions options = 8;
if (has_options()) {
total_size += 1 +
@@ -2534,7 +2535,7 @@ void DescriptorProto_ExtensionRange::SerializeWithCachedSizes(
int DescriptorProto_ExtensionRange::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 3) {
+ if (_has_bits_[0 / 32] & 3u) {
// optional int32 start = 1;
if (has_start()) {
total_size += 1 +
@@ -2817,7 +2818,7 @@ void DescriptorProto_ReservedRange::SerializeWithCachedSizes(
int DescriptorProto_ReservedRange::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 3) {
+ if (_has_bits_[0 / 32] & 3u) {
// optional int32 start = 1;
if (has_start()) {
total_size += 1 +
@@ -3373,7 +3374,7 @@ void DescriptorProto::SerializeWithCachedSizes(
int DescriptorProto::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 129) {
+ if (_has_bits_[0 / 32] & 129u) {
// optional string name = 1;
if (has_name()) {
total_size += 1 +
@@ -4558,7 +4559,7 @@ void FieldDescriptorProto::SerializeWithCachedSizes(
int FieldDescriptorProto::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 255) {
+ if (_has_bits_[0 / 32] & 255u) {
// optional string name = 1;
if (has_name()) {
total_size += 1 +
@@ -5633,7 +5634,7 @@ void EnumDescriptorProto::SerializeWithCachedSizes(
int EnumDescriptorProto::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 5) {
+ if (_has_bits_[0 / 32] & 5u) {
// optional string name = 1;
if (has_name()) {
total_size += 1 +
@@ -6102,7 +6103,7 @@ void EnumValueDescriptorProto::SerializeWithCachedSizes(
int EnumValueDescriptorProto::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 7) {
+ if (_has_bits_[0 / 32] & 7u) {
// optional string name = 1;
if (has_name()) {
total_size += 1 +
@@ -6569,7 +6570,7 @@ void ServiceDescriptorProto::SerializeWithCachedSizes(
int ServiceDescriptorProto::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 5) {
+ if (_has_bits_[0 / 32] & 5u) {
// optional string name = 1;
if (has_name()) {
total_size += 1 +
@@ -7165,7 +7166,7 @@ void MethodDescriptorProto::SerializeWithCachedSizes(
int MethodDescriptorProto::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 63) {
+ if (_has_bits_[0 / 32] & 63u) {
// optional string name = 1;
if (has_name()) {
total_size += 1 +
@@ -8240,7 +8241,7 @@ void FileOptions::SerializeWithCachedSizes(
int FileOptions::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 255) {
+ if (_has_bits_[0 / 32] & 255u) {
// optional string java_package = 1;
if (has_java_package()) {
total_size += 1 +
@@ -8289,7 +8290,7 @@ int FileOptions::ByteSize() const {
}
}
- if (_has_bits_[8 / 32] & 16128) {
+ if (_has_bits_[8 / 32] & 16128u) {
// optional bool java_generic_services = 17 [default = false];
if (has_java_generic_services()) {
total_size += 2 + 1;
@@ -9279,7 +9280,7 @@ void MessageOptions::SerializeWithCachedSizes(
int MessageOptions::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 15) {
+ if (_has_bits_[0 / 32] & 15u) {
// optional bool message_set_wire_format = 1 [default = false];
if (has_message_set_wire_format()) {
total_size += 1 + 1;
@@ -9939,7 +9940,7 @@ void FieldOptions::SerializeWithCachedSizes(
int FieldOptions::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 63) {
+ if (_has_bits_[0 / 32] & 63u) {
// optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
if (has_ctype()) {
total_size += 1 +
@@ -10498,7 +10499,7 @@ void EnumOptions::SerializeWithCachedSizes(
int EnumOptions::ByteSize() const {
int total_size = 0;
- if (_has_bits_[0 / 32] & 3) {
+ if (_has_bits_[0 / 32] & 3u) {
// optional bool allow_alias = 2;
if (has_allow_alias()) {
total_size += 1 + 1;
@@ -12410,7 +12411,7 @@ void UninterpretedOption::SerializeWithCachedSizes(
int UninterpretedOption::ByteSize() const {
int total_size = 0;
- if (_has_bits_[1 / 32] & 126) {
+ if (_has_bits_[1 / 32] & 126u) {
// optional string identifier_value = 3;
if (has_identifier_value()) {
total_size += 1 +
@@ -13248,7 +13249,7 @@ void SourceCodeInfo_Location::SerializeWithCachedSizes(
int SourceCodeInfo_Location::ByteSize() const {
int total_size = 0;
- if (_has_bits_[2 / 32] & 12) {
+ if (_has_bits_[2 / 32] & 12u) {
// optional string leading_comments = 3;
if (has_leading_comments()) {
total_size += 1 +
diff --git a/src/google/protobuf/descriptor.proto b/src/google/protobuf/descriptor.proto
index 97741b6a..82de7b09 100644
--- a/src/google/protobuf/descriptor.proto
+++ b/src/google/protobuf/descriptor.proto
@@ -40,6 +40,7 @@
syntax = "proto2";
package google.protobuf;
+option go_package = "descriptor";
option java_package = "com.google.protobuf";
option java_outer_classname = "DescriptorProtos";
option csharp_namespace = "Google.Protobuf.DescriptorProtos";
diff --git a/src/google/protobuf/io/gzip_stream.cc b/src/google/protobuf/io/gzip_stream.cc
index c9f4ca7f..dd7c036e 100644
--- a/src/google/protobuf/io/gzip_stream.cc
+++ b/src/google/protobuf/io/gzip_stream.cc
@@ -33,8 +33,6 @@
// This file contains the implementation of classes GzipInputStream and
// GzipOutputStream.
-#include "config.h"
-
#if HAVE_ZLIB
#include <google/protobuf/io/gzip_stream.h>
diff --git a/src/google/protobuf/io/zero_copy_stream_unittest.cc b/src/google/protobuf/io/zero_copy_stream_unittest.cc
index dd3d1285..f2e5b629 100644
--- a/src/google/protobuf/io/zero_copy_stream_unittest.cc
+++ b/src/google/protobuf/io/zero_copy_stream_unittest.cc
@@ -46,8 +46,6 @@
// "parametized tests" so that one set of tests can be used on all the
// implementations.
-#include "config.h"
-
#ifdef _MSC_VER
#include <io.h>
#else
diff --git a/src/google/protobuf/stubs/atomicops.h b/src/google/protobuf/stubs/atomicops.h
index bbe2d845..cd20caac 100644
--- a/src/google/protobuf/stubs/atomicops.h
+++ b/src/google/protobuf/stubs/atomicops.h
@@ -56,6 +56,7 @@
// Don't include this file for people not concerned about thread safety.
#ifndef GOOGLE_PROTOBUF_NO_THREAD_SAFETY
+#include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/platform_macros.h>
namespace google {
diff --git a/src/google/protobuf/stubs/common.cc b/src/google/protobuf/stubs/common.cc
index 54e00ccb..22cc5aa1 100644
--- a/src/google/protobuf/stubs/common.cc
+++ b/src/google/protobuf/stubs/common.cc
@@ -36,8 +36,6 @@
#include <errno.h>
#include <vector>
-#include "config.h"
-
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN // We only need minimal includes
#include <windows.h>
diff --git a/src/google/protobuf/stubs/common.h b/src/google/protobuf/stubs/common.h
index 3acaeba1..49d16020 100644
--- a/src/google/protobuf/stubs/common.h
+++ b/src/google/protobuf/stubs/common.h
@@ -62,6 +62,8 @@
#include <exception>
#endif
+#include <google/protobuf/stubs/platform_macros.h>
+
#if defined(__APPLE__)
#include <TargetConditionals.h> // for TARGET_OS_IPHONE
#endif
@@ -258,7 +260,7 @@ static const uint64 kuint64max = GOOGLE_ULONGLONG(0xFFFFFFFFFFFFFFFF);
#ifndef GOOGLE_PREDICT_FALSE
#ifdef __GNUC__
// Provided at least since GCC 3.0.
-#define GOOGLE_PREDICT_FALSE(x) (__builtin_expect(!!(x), 1))
+#define GOOGLE_PREDICT_FALSE(x) (__builtin_expect(x, 0))
#else
#define GOOGLE_PREDICT_FALSE
#endif
@@ -1174,11 +1176,7 @@ class LIBPROTOBUF_EXPORT MutexLockMaybe {
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MutexLockMaybe);
};
-#if defined(__ANDROID__) || defined(GOOGLE_PROTOBUF_OS_ANDROID) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || defined(GOOGLE_PROTOBUF_OS_IPHONE)
-// Android ndk does not support the __thread keyword very well yet. Here
-// we use pthread_key_create()/pthread_getspecific()/... methods for
-// TLS support on android.
-// iOS also does not support the __thread keyword.
+#if defined(GOOGLE_PROTOBUF_NO_THREADLOCAL)
template<typename T>
class ThreadLocalStorage {
public:
diff --git a/src/google/protobuf/stubs/common_unittest.cc b/src/google/protobuf/stubs/common_unittest.cc
index 5f458e98..f9e2cfd4 100644
--- a/src/google/protobuf/stubs/common_unittest.cc
+++ b/src/google/protobuf/stubs/common_unittest.cc
@@ -39,8 +39,6 @@
#include <google/protobuf/testing/googletest.h>
#include <gtest/gtest.h>
-#include "config.h"
-
namespace google {
namespace protobuf {
namespace {
diff --git a/src/google/protobuf/stubs/pbconfig.h b/src/google/protobuf/stubs/pbconfig.h
new file mode 100644
index 00000000..0f21c560
--- /dev/null
+++ b/src/google/protobuf/stubs/pbconfig.h
@@ -0,0 +1,142 @@
+// 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_STUBS_PBCONFIG_H__
+#define GOOGLE_PROTOBUF_STUBS_PBCONFIG_H__
+
+#define GOOGLE_PROTOBUF_HAVE_HASH_MAP 1
+#define GOOGLE_PROTOBUF_HAVE_HASH_SET 1
+
+// Use C++11 unordered_{map|set} if available.
+#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X)
+# define GOOGLE_PROTOBUF_HAS_CXX11_HASH
+
+// For XCode >= 4.6: the compiler is clang with libc++.
+// For earlier XCode version: the compiler is gcc-4.2.1 with libstdc++.
+// libc++ provides <unordered_map> and friends even in non C++11 mode,
+// and it does not provide the tr1 library. Therefore the following macro
+// checks against this special case.
+// Note that we should not test the __APPLE_CC__ version number or the
+// __clang__ macro, since the new compiler can still use -stdlib=libstdc++, in
+// which case <unordered_map> is not compilable without -std=c++11
+#elif defined(__APPLE_CC__)
+# if defined(_LIBCPP_VERSION)
+# define GOOGLE_PROTOBUF_HAS_CXX11_HASH
+# elif __GNUC__ >= 4
+# define GOOGLE_PROTOBUF_HAS_TR1
+# else
+// Not tested for gcc < 4... These setting can compile under 4.2.1 though.
+# define GOOGLE_PROTOBUF_HASH_NAMESPACE __gnu_cxx
+# define GOOGLE_PROTOBUF_HASH_MAP_H <ext/hash_map>
+# define GOOGLE_PROTOBUF_HASH_MAP_CLASS hash_map
+# define GOOGLE_PROTOBUF_HASH_SET_H <ext/hash_set>
+# define GOOGLE_PROTOBUF_HASH_SET_CLASS hash_set
+# endif
+
+// Version checks for gcc.
+#elif defined(__GNUC__)
+// For GCC 4.x+, use tr1::unordered_map/set; otherwise, follow the
+// instructions from:
+// https://gcc.gnu.org/onlinedocs/libstdc++/manual/backwards.html
+# if __GNUC__ >= 4
+# define GOOGLE_PROTOBUF_HAS_TR1
+# elif __GNUC__ >= 3
+# define GOOGLE_PROTOBUF_HASH_MAP_H <backward/hash_map>
+# define GOOGLE_PROTOBUF_HASH_MAP_CLASS hash_map
+# define GOOGLE_PROTOBUF_HASH_SET_H <backward/hash_set>
+# define GOOGLE_PROTOBUF_HASH_SET_CLASS hash_set
+# if __GNUC__ == 3 && __GNUC_MINOR__ == 0
+# define GOOGLE_PROTOBUF_HASH_NAMESPACE std // GCC 3.0
+# else
+# define GOOGLE_PROTOBUF_HASH_NAMESPACE __gnu_cxx // GCC 3.1 and later
+# endif
+# else
+# define GOOGLE_PROTOBUF_HASH_NAMESPACE
+# define GOOGLE_PROTOBUF_HASH_MAP_H <hash_map>
+# define GOOGLE_PROTOBUF_HASH_MAP_CLASS hash_map
+# define GOOGLE_PROTOBUF_HASH_SET_H <hash_set>
+# define GOOGLE_PROTOBUF_HASH_SET_CLASS hash_set
+# endif
+
+// Version checks for MSC.
+// Apparently Microsoft decided to move hash_map *back* to the std namespace in
+// MSVC 2010:
+// http://blogs.msdn.com/vcblog/archive/2009/05/25/stl-breaking-changes-in-visual-studio-2010-beta-1.aspx
+// And.. they are moved back to stdext in MSVC 2013 (haven't checked 2012). That
+// said, use unordered_map for MSVC 2010 and beyond is our safest bet.
+#elif defined(_MSC_VER)
+# if _MSC_VER >= 1600 // Since Visual Studio 2010
+# define GOOGLE_PROTOBUF_HAS_CXX11_HASH
+# define GOOGLE_PROTOBUF_HASH_COMPARE std::hash_compare
+# elif _MSC_VER >= 1500 // Since Visual Studio 2008
+# define GOOGLE_PROTOBUF_HAS_TR1
+# define GOOGLE_PROTOBUF_HASH_COMPARE stdext::hash_compare
+# elif _MSC_VER >= 1310
+# define GOOGLE_PROTOBUF_HASH_NAMESPACE stdext
+# define GOOGLE_PROTOBUF_HASH_MAP_H <hash_map>
+# define GOOGLE_PROTOBUF_HASH_MAP_CLASS hash_map
+# define GOOGLE_PROTOBUF_HASH_SET_H <hash_set>
+# define GOOGLE_PROTOBUF_HASH_SET_CLASS hash_set
+# define GOOGLE_PROTOBUF_HASH_COMPARE stdext::hash_compare
+# else
+# define GOOGLE_PROTOBUF_HASH_NAMESPACE std
+# define GOOGLE_PROTOBUF_HASH_MAP_H <hash_map>
+# define GOOGLE_PROTOBUF_HASH_MAP_CLASS hash_map
+# define GOOGLE_PROTOBUF_HASH_SET_H <hash_set>
+# define GOOGLE_PROTOBUF_HASH_SET_CLASS hash_set
+# define GOOGLE_PROTOBUF_HASH_COMPARE stdext::hash_compare
+# endif
+
+// **ADD NEW COMPILERS SUPPORT HERE.**
+// For other compilers, undefine the macro and fallback to use std::map, in
+// google/protobuf/stubs/hash.h
+#else
+# undef GOOGLE_PROTOBUF_HAVE_HASH_MAP
+# undef GOOGLE_PROTOBUF_HAVE_HASH_SET
+#endif
+
+#if defined(GOOGLE_PROTOBUF_HAS_CXX11_HASH)
+# define GOOGLE_PROTOBUF_HASH_NAMESPACE std
+# define GOOGLE_PROTOBUF_HASH_MAP_H <unordered_map>
+# define GOOGLE_PROTOBUF_HASH_MAP_CLASS unordered_map
+# define GOOGLE_PROTOBUF_HASH_SET_H <unordered_set>
+# define GOOGLE_PROTOBUF_HASH_SET_CLASS unordered_set
+#elif defined(GOOGLE_PROTOBUF_HAS_TR1)
+# define GOOGLE_PROTOBUF_HASH_NAMESPACE std::tr1
+# define GOOGLE_PROTOBUF_HASH_MAP_H <tr1/unordered_map>
+# define GOOGLE_PROTOBUF_HASH_MAP_CLASS unordered_map
+# define GOOGLE_PROTOBUF_HASH_SET_H <tr1/unordered_set>
+# define GOOGLE_PROTOBUF_HASH_SET_CLASS unordered_set
+#endif
+
+#undef GOOGLE_PROTOBUF_HAS_CXX11_HASH
+#undef GOOGLE_PROTOBUF_HAS_TR1
+
+#endif // GOOGLE_PROTOBUF_STUBS_PBCONFIG_H__
diff --git a/src/google/protobuf/stubs/platform_macros.h b/src/google/protobuf/stubs/platform_macros.h
index 2ce7fc8f..9e0344d8 100644
--- a/src/google/protobuf/stubs/platform_macros.h
+++ b/src/google/protobuf/stubs/platform_macros.h
@@ -31,8 +31,6 @@
#ifndef GOOGLE_PROTOBUF_PLATFORM_MACROS_H_
#define GOOGLE_PROTOBUF_PLATFORM_MACROS_H_
-#include <google/protobuf/stubs/common.h>
-
#define GOOGLE_PROTOBUF_PLATFORM_ERROR \
#error "Host platform was not detected as supported by protobuf"
@@ -111,4 +109,12 @@ GOOGLE_PROTOBUF_PLATFORM_ERROR
#undef GOOGLE_PROTOBUF_PLATFORM_ERROR
+#if defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE)
+// Android ndk does not support the __thread keyword very well yet. Here
+// we use pthread_key_create()/pthread_getspecific()/... methods for
+// TLS support on android.
+// iOS also does not support the __thread keyword.
+#define GOOGLE_PROTOBUF_NO_THREADLOCAL
+#endif
+
#endif // GOOGLE_PROTOBUF_PLATFORM_MACROS_H_
diff --git a/src/google/protobuf/testing/zcgunzip.cc b/src/google/protobuf/testing/zcgunzip.cc
index daf74ff1..c9d085c8 100644
--- a/src/google/protobuf/testing/zcgunzip.cc
+++ b/src/google/protobuf/testing/zcgunzip.cc
@@ -38,8 +38,6 @@
// Reads gzip stream on standard input and writes decompressed data to standard
// output.
-#include "config.h"
-
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/src/google/protobuf/testing/zcgzip.cc b/src/google/protobuf/testing/zcgzip.cc
index a4101999..e910f321 100644
--- a/src/google/protobuf/testing/zcgzip.cc
+++ b/src/google/protobuf/testing/zcgzip.cc
@@ -38,8 +38,6 @@
// Reads data on standard input and writes compressed gzip stream to standard
// output.
-#include "config.h"
-
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
diff --git a/travis.sh b/travis.sh
index 26efc879..4aa67344 100755
--- a/travis.sh
+++ b/travis.sh
@@ -1,5 +1,13 @@
#!/usr/bin/env bash
+# Note: travis currently does not support testing more than one language so the
+# .travis.yml 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.
+
+# .travis.yml uses matrix.exclude to block the cases where app-get can't be
+# use to install things.
+
build_cpp() {
./autogen.sh
./configure
@@ -28,12 +36,6 @@ build_csharp() {
}
use_java() {
- if [ `uname` != "Linux" ]; then
- # 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.
- echo "Java not tested on OS X."
- exit 0 # success
- fi
version=$1
case "$version" in
jdk6)
diff --git a/vsprojects/config.h b/vsprojects/config.h
deleted file mode 100755
index a93bb033..00000000
--- a/vsprojects/config.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* protobuf config.h for MSVC. On other platforms, this is generated
- * automatically by autoheader / autoconf / configure. */
-
-#include <google/protobuf/stubs/pbconfig.h>
-
-#define HASH_MAP_H GOOGLE_PROTOBUF_HASH_MAP_H
-#define HASH_NAMESPACE GOOGLE_PROTOBUF_HASH_NAMESPACE
-#define HASH_SET_H GOOGLE_PROTOBUF_HASH_SET_H
-
-#ifdef GOOGLE_PROTOBUF_HAVE_HASH_MAP
-#define HAVE_HASH_MAP GOOGLE_PROTOBUF_HAVE_HASH_MAP
-#endif
-
-#ifdef GOOGLE_PROTOBUF_HAVE_HASH_SET
-#define HAVE_HASH_SET GOOGLE_PROTOBUF_HAVE_HASH_SET
-#endif
-
-/* define if you want to use zlib. See readme.txt for additional
- * requirements. */
-// #define HAVE_ZLIB 1
diff --git a/vsprojects/convert2008to2005.sh b/vsprojects/convert2008to2005.sh
deleted file mode 100755
index 60eccaf3..00000000
--- a/vsprojects/convert2008to2005.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#! /bin/sh -e
-
-# This script downgrades MSVC 2008 projects to MSVC 2005 projects, allowing
-# people with MSVC 2005 to open them. Otherwise, MSVC 2005 simply refuses to
-# open projects created with 2008. We run this as part of our release process.
-# If you obtained the code direct from version control and you want to use
-# MSVC 2005, you may have to run this manually. (Hint: Use Cygwin or MSYS.)
-
-for file in *.sln; do
- echo "downgrading $file..."
- sed -i -re 's/Format Version 10.00/Format Version 9.00/g;
- s/Visual Studio 2008/Visual Studio 2005/g;' $file
-done
-
-for file in *.vcproj; do
- echo "downgrading $file..."
- sed -i -re 's/Version="9.00"/Version="8.00"/g;' $file
-done
-
-# Yes, really, that's it.
diff --git a/vsprojects/extract_includes.bat b/vsprojects/extract_includes.bat
deleted file mode 100755
index 989fef4b..00000000
--- a/vsprojects/extract_includes.bat
+++ /dev/null
@@ -1,102 +0,0 @@
-md include
-md include\google
-md include\google\protobuf
-md include\google\protobuf\stubs
-md include\google\protobuf\io
-md include\google\protobuf\compiler
-md include\google\protobuf\compiler\cpp
-md include\google\protobuf\compiler\java
-md include\google\protobuf\compiler\javanano
-md include\google\protobuf\compiler\python
-md include\google\protobuf\compiler\ruby
-copy ..\src\google\protobuf\any.pb.h include\google\protobuf\any.pb.h
-copy ..\src\google\protobuf\api.pb.h include\google\protobuf\api.pb.h
-copy ..\src\google\protobuf\any.h include\google\protobuf\any.h
-copy ..\src\google\protobuf\arena.h include\google\protobuf\arena.h
-copy ..\src\google\protobuf\arenastring.h include\google\protobuf\arenastring.h
-copy ..\src\google\protobuf\compiler\code_generator.h include\google\protobuf\compiler\code_generator.h
-copy ..\src\google\protobuf\compiler\command_line_interface.h include\google\protobuf\compiler\command_line_interface.h
-copy ..\src\google\protobuf\compiler\cpp\cpp_generator.h include\google\protobuf\compiler\cpp\cpp_generator.h
-copy ..\src\google\protobuf\compiler\csharp\csharp_generator.h include\google\protobuf\compiler\csharp\csharp_generator.h
-copy ..\src\google\protobuf\compiler\importer.h include\google\protobuf\compiler\importer.h
-copy ..\src\google\protobuf\compiler\java\java_generator.h include\google\protobuf\compiler\java\java_generator.h
-copy ..\src\google\protobuf\compiler\java\java_names.h include\google\protobuf\compiler\java\java_names.h
-copy ..\src\google\protobuf\compiler\javanano\javanano_generator.h include\google\protobuf\compiler\javanano\javanano_generator.h
-copy ..\src\google\protobuf\compiler\objectivec\objectivec_generator.h include\google\protobuf\compiler\objectivec\objectivec_generator.h
-copy ..\src\google\protobuf\compiler\objectivec\objectivec_helpers.h include\google\protobuf\compiler\objectivec\objectivec_helpers.h
-copy ..\src\google\protobuf\compiler\parser.h include\google\protobuf\compiler\parser.h
-copy ..\src\google\protobuf\compiler\plugin.h include\google\protobuf\compiler\plugin.h
-copy ..\src\google\protobuf\compiler\plugin.pb.h include\google\protobuf\compiler\plugin.pb.h
-copy ..\src\google\protobuf\compiler\python\python_generator.h include\google\protobuf\compiler\python\python_generator.h
-copy ..\src\google\protobuf\compiler\ruby\ruby_generator.h include\google\protobuf\compiler\ruby\ruby_generator.h
-copy ..\src\google\protobuf\descriptor_database.h include\google\protobuf\descriptor_database.h
-copy ..\src\google\protobuf\descriptor.h include\google\protobuf\descriptor.h
-copy ..\src\google\protobuf\descriptor.pb.h include\google\protobuf\descriptor.pb.h
-copy ..\src\google\protobuf\dynamic_message.h include\google\protobuf\dynamic_message.h
-copy ..\src\google\protobuf\empty.pb.h include\google\protobuf\empty.pb.h
-copy ..\src\google\protobuf\extension_set.h include\google\protobuf\extension_set.h
-copy ..\src\google\protobuf\field_mask.pb.h include\google\protobuf\field_mask.pb.h
-copy ..\src\google\protobuf\generated_enum_reflection.h include\google\protobuf\generated_enum_reflection.h
-copy ..\src\google\protobuf\generated_enum_util.h include\google\protobuf\generated_enum_util.h
-copy ..\src\google\protobuf\generated_message_reflection.h include\google\protobuf\generated_message_reflection.h
-copy ..\src\google\protobuf\generated_message_util.h include\google\protobuf\generated_message_util.h
-copy ..\src\google\protobuf\io\coded_stream.h include\google\protobuf\io\coded_stream.h
-copy ..\src\google\protobuf\io\gzip_stream.h include\google\protobuf\io\gzip_stream.h
-copy ..\src\google\protobuf\io\printer.h include\google\protobuf\io\printer.h
-copy ..\src\google\protobuf\io\strtod.h include\google\protobuf\io\strtod.h
-copy ..\src\google\protobuf\io\tokenizer.h include\google\protobuf\io\tokenizer.h
-copy ..\src\google\protobuf\io\zero_copy_stream.h include\google\protobuf\io\zero_copy_stream.h
-copy ..\src\google\protobuf\io\zero_copy_stream_impl.h include\google\protobuf\io\zero_copy_stream_impl.h
-copy ..\src\google\protobuf\io\zero_copy_stream_impl_lite.h include\google\protobuf\io\zero_copy_stream_impl_lite.h
-copy ..\src\google\protobuf\map_entry.h include\google\protobuf\map_entry.h
-copy ..\src\google\protobuf\map_entry_lite.h include\google\protobuf\map_entry_lite.h
-copy ..\src\google\protobuf\map_field.h include\google\protobuf\map_field.h
-copy ..\src\google\protobuf\map_field_inl.h include\google\protobuf\map_field_inl.h
-copy ..\src\google\protobuf\map_field_lite.h include\google\protobuf\map_field_lite.h
-copy ..\src\google\protobuf\map.h include\google\protobuf\map.h
-copy ..\src\google\protobuf\map_type_handler.h include\google\protobuf\map_type_handler.h
-copy ..\src\google\protobuf\message.h include\google\protobuf\message.h
-copy ..\src\google\protobuf\message_lite.h include\google\protobuf\message_lite.h
-copy ..\src\google\protobuf\metadata.h include\google\protobuf\metadata.h
-copy ..\src\google\protobuf\reflection.h include\google\protobuf\reflection.h
-copy ..\src\google\protobuf\reflection_ops.h include\google\protobuf\reflection_ops.h
-copy ..\src\google\protobuf\repeated_field.h include\google\protobuf\repeated_field.h
-copy ..\src\google\protobuf\repeated_field_reflection.h include\google\protobuf\repeated_field_reflection.h
-copy ..\src\google\protobuf\service.h include\google\protobuf\service.h
-copy ..\src\google\protobuf\source_context.pb.h include\google\protobuf\source_context.pb.h
-copy ..\src\google\protobuf\struct.pb.h include\google\protobuf\struct.pb.h
-copy ..\src\google\protobuf\stubs\atomicops.h include\google\protobuf\stubs\atomicops.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_aix.h include\google\protobuf\stubs\atomicops_internals_aix.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_arm64_gcc.h include\google\protobuf\stubs\atomicops_internals_arm64_gcc.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_arm_gcc.h include\google\protobuf\stubs\atomicops_internals_arm_gcc.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_arm_qnx.h include\google\protobuf\stubs\atomicops_internals_arm_qnx.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_atomicword_compat.h include\google\protobuf\stubs\atomicops_internals_atomicword_compat.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_generic_gcc.h include\google\protobuf\stubs\atomicops_internals_generic_gcc.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_macosx.h include\google\protobuf\stubs\atomicops_internals_macosx.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_mips_gcc.h include\google\protobuf\stubs\atomicops_internals_mips_gcc.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_pnacl.h include\google\protobuf\stubs\atomicops_internals_pnacl.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_solaris.h include\google\protobuf\stubs\atomicops_internals_solaris.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_tsan.h include\google\protobuf\stubs\atomicops_internals_tsan.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_x86_gcc.h include\google\protobuf\stubs\atomicops_internals_x86_gcc.h
-copy ..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h include\google\protobuf\stubs\atomicops_internals_x86_msvc.h
-copy ..\src\google\protobuf\stubs\atomic_sequence_num.h include\google\protobuf\stubs\atomic_sequence_num.h
-copy ..\src\google\protobuf\stubs\casts.h include\google\protobuf\stubs\casts.h
-copy ..\src\google\protobuf\stubs\common.h include\google\protobuf\stubs\common.h
-copy ..\src\google\protobuf\stubs\fastmem.h include\google\protobuf\stubs\fastmem.h
-copy ..\src\google\protobuf\stubs\hash.h include\google\protobuf\stubs\hash.h
-copy ..\src\google\protobuf\stubs\once.h include\google\protobuf\stubs\once.h
-copy ..\src\google\protobuf\stubs\platform_macros.h include\google\protobuf\stubs\platform_macros.h
-copy ..\src\google\protobuf\stubs\shared_ptr.h include\google\protobuf\stubs\shared_ptr.h
-copy ..\src\google\protobuf\stubs\singleton.h include\google\protobuf\stubs\singleton.h
-copy ..\src\google\protobuf\stubs\stl_util.h include\google\protobuf\stubs\stl_util.h
-copy ..\src\google\protobuf\stubs\template_util.h include\google\protobuf\stubs\template_util.h
-copy ..\src\google\protobuf\stubs\type_traits.h include\google\protobuf\stubs\type_traits.h
-copy ..\src\google\protobuf\text_format.h include\google\protobuf\text_format.h
-copy ..\src\google\protobuf\timestamp.pb.h include\google\protobuf\timestamp.pb.h
-copy ..\src\google\protobuf\type.pb.h include\google\protobuf\type.pb.h
-copy ..\src\google\protobuf\unknown_field_set.h include\google\protobuf\unknown_field_set.h
-copy ..\src\google\protobuf\wire_format.h include\google\protobuf\wire_format.h
-copy ..\src\google\protobuf\wire_format_lite.h include\google\protobuf\wire_format_lite.h
-copy ..\src\google\protobuf\wire_format_lite_inl.h include\google\protobuf\wire_format_lite_inl.h
-copy ..\src\google\protobuf\wrappers.pb.h include\google\protobuf\wrappers.pb.h
-copy google\protobuf\stubs\pbconfig.h include\google\protobuf\stubs\pbconfig.h
diff --git a/vsprojects/google/protobuf/stubs/pbconfig.h b/vsprojects/google/protobuf/stubs/pbconfig.h
deleted file mode 100755
index 9629f2e4..00000000
--- a/vsprojects/google/protobuf/stubs/pbconfig.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* protobuf config.h for MSVC. On other platforms, this is generated
- * automatically by autoheader / autoconf / configure. */
-
-// NOTE: if you add new macros in this file manually, please propagate the macro
-// to vsprojects/config.h.
-
-/* the namespace of hash_map/hash_set */
-// Apparently Microsoft decided to move hash_map *back* to the std namespace
-// in MSVC 2010:
-// http://blogs.msdn.com/vcblog/archive/2009/05/25/stl-breaking-changes-in-visual-studio-2010-beta-1.aspx
-// And.. they are moved back to stdext in MSVC 2013 (haven't checked 2012). That
-// said, use unordered_map for MSVC 2010 and beyond is our safest bet.
-#if _MSC_VER >= 1600 // Since Visual Studio 2010
-#define GOOGLE_PROTOBUF_HASH_NAMESPACE std
-#define GOOGLE_PROTOBUF_HASH_MAP_H <unordered_map>
-#define GOOGLE_PROTOBUF_HASH_MAP_CLASS unordered_map
-#define GOOGLE_PROTOBUF_HASH_SET_H <unordered_set>
-#define GOOGLE_PROTOBUF_HASH_SET_CLASS unordered_set
-#define GOOGLE_PROTOBUF_HASH_COMPARE std::hash_compare
-#elif _MSC_VER >= 1500 // Since Visual Studio 2008
-#define GOOGLE_PROTOBUF_HASH_NAMESPACE std::tr1
-#define GOOGLE_PROTOBUF_HASH_MAP_H <unordered_map>
-#define GOOGLE_PROTOBUF_HASH_MAP_CLASS unordered_map
-#define GOOGLE_PROTOBUF_HASH_SET_H <unordered_set>
-#define GOOGLE_PROTOBUF_HASH_SET_CLASS unordered_set
-#define GOOGLE_PROTOBUF_HASH_COMPARE stdext::hash_compare
-#elif _MSC_VER >= 1310
-#define GOOGLE_PROTOBUF_HASH_NAMESPACE stdext
-#define GOOGLE_PROTOBUF_HASH_MAP_H <hash_map>
-#define GOOGLE_PROTOBUF_HASH_MAP_CLASS hash_map
-#define GOOGLE_PROTOBUF_HASH_SET_H <hash_set>
-#define GOOGLE_PROTOBUF_HASH_SET_CLASS hash_set
-#define GOOGLE_PROTOBUF_HASH_COMPARE stdext::hash_compare
-#else
-#define GOOGLE_PROTOBUF_HASH_NAMESPACE std
-#define GOOGLE_PROTOBUF_HASH_MAP_H <hash_map>
-#define GOOGLE_PROTOBUF_HASH_MAP_CLASS hash_map
-#define GOOGLE_PROTOBUF_HASH_SET_H <hash_set>
-#define GOOGLE_PROTOBUF_HASH_SET_CLASS hash_set
-#define GOOGLE_PROTOBUF_HASH_COMPARE stdext::hash_compare
-#endif
-
-/* the location of <hash_set> */
-
-/* define if the compiler has hash_map */
-#define GOOGLE_PROTOBUF_HAVE_HASH_MAP 1
-
-/* define if the compiler has hash_set */
-#define GOOGLE_PROTOBUF_HAVE_HASH_SET 1
diff --git a/vsprojects/libprotobuf-lite.vcproj b/vsprojects/libprotobuf-lite.vcproj
deleted file mode 100644
index be20dd0b..00000000
--- a/vsprojects/libprotobuf-lite.vcproj
+++ /dev/null
@@ -1,208 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="libprotobuf-lite"
- ProjectGUID="{49EA010D-706F-4BE2-A397-77854B72A040}"
- Keyword="Win32Proj"
- TargetFrameworkVersion="0"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="4"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- Optimization="0"
- AdditionalIncludeDirectories="../src;."
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="4"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- AdditionalIncludeDirectories="../src;."
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File RelativePath=".\config.h"></File>
- <File RelativePath=".\google\protobuf\stubs\pbconfig.h"></File>
- <File RelativePath="..\src\google\protobuf\extension_set.h"></File>
- <File RelativePath="..\src\google\protobuf\generated_message_util.h"></File>
- <File RelativePath="..\src\google\protobuf\generated_enum_util.h"></File>
- <File RelativePath="..\src\google\protobuf\io\coded_stream.h"></File>
- <File RelativePath="..\src\google\protobuf\io\zero_copy_stream.h"></File>
- <File RelativePath="..\src\google\protobuf\io\zero_copy_stream_impl_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\map_entry_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\map_field_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\message_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\repeated_field.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\atomicops.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\common.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\once.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\platform_macros.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\stl_util.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\template_util.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\type_traits.h"></File>
- <File RelativePath="..\src\google\protobuf\wire_format_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\wire_format_lite_inl.h"></File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File RelativePath="..\src\google\protobuf\arena.cc"></File>
- <File RelativePath="..\src\google\protobuf\arenastring.cc"></File>
- <File RelativePath="..\src\google\protobuf\extension_set.cc"></File>
- <File RelativePath="..\src\google\protobuf\generated_message_util.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\coded_stream.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\coded_stream_inl.h"></File>
- <File RelativePath="..\src\google\protobuf\io\zero_copy_stream.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc"></File>
- <File RelativePath="..\src\google\protobuf\message_lite.cc"></File>
- <File RelativePath="..\src\google\protobuf\repeated_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\atomicops_internals_x86_gcc.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\common.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\hash.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\map_util.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\once.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\shared_ptr.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\stringprintf.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\stringprintf.h"></File>
- <File RelativePath="..\src\google\protobuf\wire_format_lite.cc"></File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vsprojects/libprotobuf.vcproj b/vsprojects/libprotobuf.vcproj
deleted file mode 100644
index 0daec6d9..00000000
--- a/vsprojects/libprotobuf.vcproj
+++ /dev/null
@@ -1,266 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="libprotobuf"
- ProjectGUID="{3E283F37-A4ED-41B7-A3E6-A2D89D131A30}"
- Keyword="Win32Proj"
- TargetFrameworkVersion="0"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="4"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- Optimization="0"
- AdditionalIncludeDirectories="../src;."
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="4"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- AdditionalIncludeDirectories="../src;."
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOBUF_EXPORTS;"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File RelativePath=".\config.h"></File>
- <File RelativePath=".\google\protobuf\stubs\pbconfig.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\importer.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\parser.h"></File>
- <File RelativePath="..\src\google\protobuf\descriptor.h"></File>
- <File RelativePath="..\src\google\protobuf\descriptor.pb.h"></File>
- <File RelativePath="..\src\google\protobuf\descriptor_database.h"></File>
- <File RelativePath="..\src\google\protobuf\dynamic_message.h"></File>
- <File RelativePath="..\src\google\protobuf\extension_set.h"></File>
- <File RelativePath="..\src\google\protobuf\generated_enum_util.h"></File>
- <File RelativePath="..\src\google\protobuf\generated_message_reflection.h"></File>
- <File RelativePath="..\src\google\protobuf\generated_message_util.h"></File>
- <File RelativePath="..\src\google\protobuf\io\coded_stream.h"></File>
- <File RelativePath="..\src\google\protobuf\io\gzip_stream.h"></File>
- <File RelativePath="..\src\google\protobuf\io\strtod.h"></File>
- <File RelativePath="..\src\google\protobuf\io\printer.h"></File>
- <File RelativePath="..\src\google\protobuf\io\tokenizer.h"></File>
- <File RelativePath="..\src\google\protobuf\io\zero_copy_stream.h"></File>
- <File RelativePath="..\src\google\protobuf\io\zero_copy_stream_impl.h"></File>
- <File RelativePath="..\src\google\protobuf\io\zero_copy_stream_impl_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\map_entry_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\map_field_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\message.h"></File>
- <File RelativePath="..\src\google\protobuf\message_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\reflection_ops.h"></File>
- <File RelativePath="..\src\google\protobuf\repeated_field.h"></File>
- <File RelativePath="..\src\google\protobuf\service.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\atomicops.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\common.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\map_util.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\once.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\platform_macros.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\stl_util.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\strutil.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\substitute.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\template_util.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\type_traits.h"></File>
- <File RelativePath="..\src\google\protobuf\text_format.h"></File>
- <File RelativePath="..\src\google\protobuf\unknown_field_set.h"></File>
- <File RelativePath="..\src\google\protobuf\wire_format.h"></File>
- <File RelativePath="..\src\google\protobuf\wire_format_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\wire_format_lite_inl.h"></File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File RelativePath="..\src\google\protobuf\arena.cc"></File>
- <File RelativePath="..\src\google\protobuf\arenastring.cc"></File>
- <File RelativePath="..\src\google\protobuf\extension_set.cc"></File>
- <File RelativePath="..\src\google\protobuf\generated_message_util.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\coded_stream.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\coded_stream_inl.h"></File>
- <File RelativePath="..\src\google\protobuf\io\zero_copy_stream.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\zero_copy_stream_impl_lite.cc"></File>
- <File RelativePath="..\src\google\protobuf\message_lite.cc"></File>
- <File RelativePath="..\src\google\protobuf\repeated_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\atomicops_internals_x86_gcc.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\common.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\hash.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\map_util.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\once.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\shared_ptr.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\stringprintf.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\stringprintf.h"></File>
- <File RelativePath="..\src\google\protobuf\wire_format_lite.cc"></File>
- <File RelativePath="..\src\google\protobuf\any.pb.cc"></File>
- <File RelativePath="..\src\google\protobuf\any.cc"></File>
- <File RelativePath="..\src\google\protobuf\api.pb.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\importer.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\parser.cc"></File>
- <File RelativePath="..\src\google\protobuf\descriptor.cc"></File>
- <File RelativePath="..\src\google\protobuf\descriptor_database.cc"></File>
- <File RelativePath="..\src\google\protobuf\descriptor.pb.cc"></File>
- <File RelativePath="..\src\google\protobuf\duration.pb.cc"></File>
- <File RelativePath="..\src\google\protobuf\dynamic_message.cc"></File>
- <File RelativePath="..\src\google\protobuf\empty.pb.cc"></File>
- <File RelativePath="..\src\google\protobuf\extension_set_heavy.cc"></File>
- <File RelativePath="..\src\google\protobuf\field_mask.pb.cc"></File>
- <File RelativePath="..\src\google\protobuf\generated_message_reflection.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\gzip_stream.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\printer.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\strtod.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\tokenizer.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\zero_copy_stream_impl.cc"></File>
- <File RelativePath="..\src\google\protobuf\map_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\message.cc"></File>
- <File RelativePath="..\src\google\protobuf\reflection_internal.h"></File>
- <File RelativePath="..\src\google\protobuf\reflection_ops.cc"></File>
- <File RelativePath="..\src\google\protobuf\service.cc"></File>
- <File RelativePath="..\src\google\protobuf\source_context.pb.cc"></File>
- <File RelativePath="..\src\google\protobuf\struct.pb.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\structurally_valid.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\strutil.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\strutil.h"></File>
- <File RelativePath="..\src\google\protobuf\stubs\substitute.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\substitute.h"></File>
- <File RelativePath="..\src\google\protobuf\text_format.cc"></File>
- <File RelativePath="..\src\google\protobuf\type.pb.cc"></File>
- <File RelativePath="..\src\google\protobuf\timestamp.pb.cc"></File>
- <File RelativePath="..\src\google\protobuf\unknown_field_set.cc"></File>
- <File RelativePath="..\src\google\protobuf\wire_format.cc"></File>
- <File RelativePath="..\src\google\protobuf\wrappers.pb.cc"></File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vsprojects/libprotoc.vcproj b/vsprojects/libprotoc.vcproj
deleted file mode 100644
index c530ef0a..00000000
--- a/vsprojects/libprotoc.vcproj
+++ /dev/null
@@ -1,338 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="libprotoc"
- ProjectGUID="{B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}"
- Keyword="Win32Proj"
- TargetFrameworkVersion="0"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="4"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- Optimization="0"
- AdditionalIncludeDirectories="../src;."
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="4"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- AdditionalIncludeDirectories="../src;."
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File RelativePath="..\src\google\protobuf\compiler\code_generator.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\command_line_interface.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\subprocess.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\zip_writer.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\plugin.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\plugin.pb.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_enum.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_enum_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_extension.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_file.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_generator.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_helpers.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_map_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_message.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_message_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_options.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_service.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_string_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_enum.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_enum_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_field_base.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_generator.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_helpers.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_message.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_message_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_primitive_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_repeated_enum_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_repeated_message_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_repeated_primitive_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_source_generator_base.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_umbrella_class.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_context.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_enum.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_enum_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_enum_field_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_extension.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_file.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_generator.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_generator_factory.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_helpers.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_lazy_message_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_lazy_message_field_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_map_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_map_field_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_message.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_message_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_message_builder.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_message_builder_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_message_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_message_field_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_name_resolver.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_primitive_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_primitive_field_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_service.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_shared_code_generator.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_string_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_string_field_lite.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_doc_comment.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_enum_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_enum.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_extension.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_file.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_generator.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_helpers.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_map_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_message_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_message.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_params.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_primitive_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_enum.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_enum_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_extension.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_file.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_generator.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_helpers.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_map_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_message.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_message_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_oneof.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_primitive_field.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\python\python_generator.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\ruby\ruby_generator.h"></File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File RelativePath="..\src\google\protobuf\compiler\code_generator.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\command_line_interface.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\plugin.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\plugin.pb.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\subprocess.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\zip_writer.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_enum.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_enum_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_extension.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_file.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_generator.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_helpers.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_map_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_message.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_message_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_primitive_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_service.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_string_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_enum.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_enum_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_field_base.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_generator.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_helpers.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_message.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_message_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_primitive_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_repeated_enum_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_repeated_message_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_repeated_primitive_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_source_generator_base.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_umbrella_class.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_context.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_doc_comment.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_enum.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_enum_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_enum_field_lite.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_extension.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_file.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_generator.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_generator_factory.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_helpers.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_lazy_message_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_lazy_message_field_lite.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_map_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_map_field_lite.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_message.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_message_lite.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_message_builder.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_message_builder_lite.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_message_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_message_field_lite.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_name_resolver.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_primitive_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_primitive_field_lite.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_service.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_shared_code_generator.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_string_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_string_field_lite.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_enum.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_enum_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_extension.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_file.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_generator.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_helpers.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_map_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_message.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_message_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_primitive_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_enum.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_enum_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_extension.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_file.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_generator.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_helpers.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_map_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_message.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_message_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_oneof.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_primitive_field.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\python\python_generator.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\ruby\ruby_generator.cc"></File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vsprojects/lite-test.vcproj b/vsprojects/lite-test.vcproj
deleted file mode 100644
index aba212b1..00000000
--- a/vsprojects/lite-test.vcproj
+++ /dev/null
@@ -1,332 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="lite-test"
- ProjectGUID="{12015ACE-42BE-4952-A5A0-44A9A46908E2}"
- RootNamespace="tests"
- Keyword="Win32Proj"
- TargetFrameworkVersion="0"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- Description=""
- CommandLine=""
- AdditionalDependencies=""
- Outputs=""
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- Optimization="0"
- AdditionalIncludeDirectories="../src;.;../gtest/include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_VARIADIC_MAX=10;"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- Description=""
- CommandLine=""
- AdditionalDependencies=""
- Outputs=""
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- AdditionalIncludeDirectories="../src;.;../gtest/include"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_VARIADIC_MAX=10;"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File RelativePath=".\google\protobuf\map_lite_unittest.pb.h"></File>
- <File RelativePath=".\google\protobuf\unittest_import_lite.pb.h"></File>
- <File RelativePath=".\google\protobuf\unittest_import_public_lite.pb.h"></File>
- <File RelativePath=".\google\protobuf\unittest_lite.pb.h"></File>
- <File RelativePath="..\src\google\protobuf\arena_test_util.h"></File>
- <File RelativePath="..\src\google\protobuf\map_lite_test_util.h"></File>
- <File RelativePath="..\src\google\protobuf\test_util_lite.h"></File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File RelativePath=".\google\protobuf\map_lite_unittest.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_import_lite.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_import_public_lite.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_lite.pb.cc"></File>
- <File RelativePath="..\src\google\protobuf\arena_test_util.cc"></File>
- <File RelativePath="..\src\google\protobuf\lite_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\map_lite_test_util.cc"></File>
- <File RelativePath="..\src\google\protobuf\test_util_lite.cc"></File>
- </Filter>
- <File
- RelativePath="..\src\google\protobuf\map_lite_unittest.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating map_lite_unittest.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/map_lite_unittest.proto&#x0D;&#x0A;"
- Outputs="google\protobuf\map_lite_unittest.pb.h;google\protobuf\map_lite_unittest.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating map_lite_unittest.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/map_lite_unittest.proto&#x0D;&#x0A;"
- Outputs="google\protobuf\map_lite_unittest.pb.h;google\protobuf\map_lite_unittest.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_lite.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_lite.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite.proto&#x0D;&#x0A;"
- Outputs="google\protobuf\unittest_lite.pb.h;google\protobuf\unittest_lite.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_lite.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite.proto&#x0D;&#x0A;"
- Outputs="google\protobuf\unittest_lite.pb.h;google\protobuf\unittest_lite.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_import_lite.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_import_lite.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_lite.proto&#x0D;&#x0A;"
- Outputs="google\protobuf\unittest_import_lite.pb.h;google\protobuf\unittest_import_lite.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_import_lite.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_lite.proto&#x0D;&#x0A;"
- Outputs="google\protobuf\unittest_import_lite.pb.h;google\protobuf\unittest_import_lite.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_import_public_lite.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_import_public_lite.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public_lite.proto&#x0D;&#x0A;"
- Outputs="google\protobuf\unittest_import_public_lite.pb.h;google\protobuf\unittest_import_public_lite.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_import_public_lite.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public_lite.proto&#x0D;&#x0A;"
- Outputs="google\protobuf\unittest_import_public_lite.pb.h;google\protobuf\unittest_import_public_lite.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\map_lite_unittest.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating map_lite_unittest.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/map_lite_unittest.proto&#x0D;&#x0A;"
- Outputs="google\protobuf\map_lite_unittest.pb.h;google\protobuf\map_lite_unittest.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating map_lite_unittest.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/map_lite_unittest.proto&#x0D;&#x0A;"
- Outputs="google\protobuf\map_lite_unittest.pb.h;google\protobuf\map_lite_unittest.pb.cc"
- />
- </FileConfiguration>
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vsprojects/protobuf.sln b/vsprojects/protobuf.sln
deleted file mode 100644
index 567dee62..00000000
--- a/vsprojects/protobuf.sln
+++ /dev/null
@@ -1,92 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libprotobuf", "libprotobuf.vcproj", "{3E283F37-A4ED-41B7-A3E6-A2D89D131A30}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libprotoc", "libprotoc.vcproj", "{B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}"
- ProjectSection(ProjectDependencies) = postProject
- {3E283F37-A4ED-41B7-A3E6-A2D89D131A30} = {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "protoc", "protoc.vcproj", "{1738D5F6-ED1E-47E0-B2F0-456864B93C1E}"
- ProjectSection(ProjectDependencies) = postProject
- {B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE} = {B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}
- {3E283F37-A4ED-41B7-A3E6-A2D89D131A30} = {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tests", "tests.vcproj", "{4DF72760-C055-40A5-A77E-30A17E2AC2DB}"
- ProjectSection(ProjectDependencies) = postProject
- {B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE} = {B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}
- {3E283F37-A4ED-41B7-A3E6-A2D89D131A30} = {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}
- {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7} = {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}
- {3AF54C8A-10BF-4332-9147-F68ED9862032} = {3AF54C8A-10BF-4332-9147-F68ED9862032}
- {CBBD34E5-02B0-40D5-B6D8-BFEA83E18B32} = {CBBD34E5-02B0-40D5-B6D8-BFEA83E18B32}
- {1738D5F6-ED1E-47E0-B2F0-456864B93C1E} = {1738D5F6-ED1E-47E0-B2F0-456864B93C1E}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "..\gtest\msvc\gtest.vcproj", "{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_main", "..\gtest\msvc\gtest_main.vcproj", "{3AF54C8A-10BF-4332-9147-F68ED9862032}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libprotobuf-lite", "libprotobuf-lite.vcproj", "{49EA010D-706F-4BE2-A397-77854B72A040}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lite-test", "lite-test.vcproj", "{12015ACE-42BE-4952-A5A0-44A9A46908E2}"
- ProjectSection(ProjectDependencies) = postProject
- {49EA010D-706F-4BE2-A397-77854B72A040} = {49EA010D-706F-4BE2-A397-77854B72A040}
- {1738D5F6-ED1E-47E0-B2F0-456864B93C1E} = {1738D5F6-ED1E-47E0-B2F0-456864B93C1E}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_plugin", "test_plugin.vcproj", "{CBBD34E5-02B0-40D5-B6D8-BFEA83E18B32}"
- ProjectSection(ProjectDependencies) = postProject
- {B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE} = {B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}
- {3E283F37-A4ED-41B7-A3E6-A2D89D131A30} = {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}
- {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7} = {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}
- EndProjectSection
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.Debug|Win32.ActiveCfg = Debug|Win32
- {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.Debug|Win32.Build.0 = Debug|Win32
- {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.Release|Win32.ActiveCfg = Release|Win32
- {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.Release|Win32.Build.0 = Release|Win32
- {B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}.Debug|Win32.ActiveCfg = Debug|Win32
- {B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}.Debug|Win32.Build.0 = Debug|Win32
- {B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}.Release|Win32.ActiveCfg = Release|Win32
- {B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}.Release|Win32.Build.0 = Release|Win32
- {1738D5F6-ED1E-47E0-B2F0-456864B93C1E}.Debug|Win32.ActiveCfg = Debug|Win32
- {1738D5F6-ED1E-47E0-B2F0-456864B93C1E}.Debug|Win32.Build.0 = Debug|Win32
- {1738D5F6-ED1E-47E0-B2F0-456864B93C1E}.Release|Win32.ActiveCfg = Release|Win32
- {1738D5F6-ED1E-47E0-B2F0-456864B93C1E}.Release|Win32.Build.0 = Release|Win32
- {4DF72760-C055-40A5-A77E-30A17E2AC2DB}.Debug|Win32.ActiveCfg = Debug|Win32
- {4DF72760-C055-40A5-A77E-30A17E2AC2DB}.Debug|Win32.Build.0 = Debug|Win32
- {4DF72760-C055-40A5-A77E-30A17E2AC2DB}.Release|Win32.ActiveCfg = Release|Win32
- {4DF72760-C055-40A5-A77E-30A17E2AC2DB}.Release|Win32.Build.0 = Release|Win32
- {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug|Win32.ActiveCfg = Debug|Win32
- {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug|Win32.Build.0 = Debug|Win32
- {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release|Win32.ActiveCfg = Release|Win32
- {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release|Win32.Build.0 = Release|Win32
- {3AF54C8A-10BF-4332-9147-F68ED9862032}.Debug|Win32.ActiveCfg = Debug|Win32
- {3AF54C8A-10BF-4332-9147-F68ED9862032}.Debug|Win32.Build.0 = Debug|Win32
- {3AF54C8A-10BF-4332-9147-F68ED9862032}.Release|Win32.ActiveCfg = Release|Win32
- {3AF54C8A-10BF-4332-9147-F68ED9862032}.Release|Win32.Build.0 = Release|Win32
- {49EA010D-706F-4BE2-A397-77854B72A040}.Debug|Win32.ActiveCfg = Debug|Win32
- {49EA010D-706F-4BE2-A397-77854B72A040}.Debug|Win32.Build.0 = Debug|Win32
- {49EA010D-706F-4BE2-A397-77854B72A040}.Release|Win32.ActiveCfg = Release|Win32
- {49EA010D-706F-4BE2-A397-77854B72A040}.Release|Win32.Build.0 = Release|Win32
- {12015ACE-42BE-4952-A5A0-44A9A46908E2}.Debug|Win32.ActiveCfg = Debug|Win32
- {12015ACE-42BE-4952-A5A0-44A9A46908E2}.Debug|Win32.Build.0 = Debug|Win32
- {12015ACE-42BE-4952-A5A0-44A9A46908E2}.Release|Win32.ActiveCfg = Release|Win32
- {12015ACE-42BE-4952-A5A0-44A9A46908E2}.Release|Win32.Build.0 = Release|Win32
- {CBBD34E5-02B0-40D5-B6D8-BFEA83E18B32}.Debug|Win32.ActiveCfg = Debug|Win32
- {CBBD34E5-02B0-40D5-B6D8-BFEA83E18B32}.Debug|Win32.Build.0 = Debug|Win32
- {CBBD34E5-02B0-40D5-B6D8-BFEA83E18B32}.Release|Win32.ActiveCfg = Release|Win32
- {CBBD34E5-02B0-40D5-B6D8-BFEA83E18B32}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/vsprojects/protoc.vcproj b/vsprojects/protoc.vcproj
deleted file mode 100644
index 4359e238..00000000
--- a/vsprojects/protoc.vcproj
+++ /dev/null
@@ -1,192 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="protoc"
- ProjectGUID="{1738D5F6-ED1E-47E0-B2F0-456864B93C1E}"
- Keyword="Win32Proj"
- TargetFrameworkVersion="0"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- Optimization="0"
- AdditionalIncludeDirectories="../src;."
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- AdditionalIncludeDirectories="../src;."
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\src\google\protobuf\compiler\main.cc"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vsprojects/readme.txt b/vsprojects/readme.txt
deleted file mode 100644
index ad342497..00000000
--- a/vsprojects/readme.txt
+++ /dev/null
@@ -1,121 +0,0 @@
-This directory contains project files for compiling Protocol Buffers using
-MSVC. This is not the recommended way to do Protocol Buffer development --
-we prefer to develop under a Unix-like environment -- but it may be more
-accessible to those who primarily work with MSVC.
-
-Compiling and Installing
-========================
-
-0) Check whether a gtest directory exists in the upper level directory. If
- you checkout the code from github via "git clone", this gtest directory
- won't exist and you won't be able to build the tests described below. To
- avoid this problem consider downloading one of the release tar balls which
- contains gtest already and copying the gest directory from there to your
- protobuf directory:
- https://github.com/google/protobuf/releases
-1) Open protobuf.sln in Microsoft Visual Studio.
-2) Choose "Debug" or "Release" configuration as desired.*
-3) From the Build menu, choose "Build Solution". Wait for compiling to finish.
-4) From a command shell, run tests.exe and lite-test.exe and check that all
- tests pass.
-5) Run extract_includes.bat to copy all the public headers into a separate
- "include" directory (under the top-level package directory).
-6) Copy the contents of the include directory to wherever you want to put
- headers.
-7) Copy protoc.exe wherever you put build tools (probably somewhere in your
- PATH).
-8) Copy libprotobuf.lib, libprotobuf-lite.lib, and libprotoc.lib wherever you
- put libraries.
-
-* To avoid conflicts between the MSVC debug and release runtime libraries, when
- compiling a debug build of your application, you may need to link against a
- debug build of libprotobuf.lib. Similarly, release builds should link against
- release libs.
-
-DLLs vs. static linking
-=======================
-
-Static linking is now the default for the Protocol Buffer libraries. Due to
-issues with Win32's use of a separate heap for each DLL, as well as binary
-compatibility issues between different versions of MSVC's STL library, it is
-recommended that you use static linkage only. However, it is possible to
-build libprotobuf and libprotoc as DLLs if you really want. To do this,
-do the following:
-
- 1) Open protobuf.sln in MSVC.
- 2) For each of the projects libprotobuf, libprotobuf-lite, and libprotoc, do
- the following:
- 2a) Right-click the project and choose "properties".
- 2b) From the side bar, choose "General", under "Configuration Properties".
- 2c) Change the "Configuration Type" to "Dynamic Library (.dll)".
- 2d) From the side bar, choose "Preprocessor", under "C/C++".
- 2e) Add PROTOBUF_USE_DLLS to the list of preprocessor defines.
- 3) When compiling your project, make sure to #define PROTOBUF_USE_DLLS.
-
-When distributing your software to end users, we strongly recommend that you
-do NOT install libprotobuf.dll or libprotoc.dll to any shared location.
-Instead, keep these libraries next to your binaries, in your application's
-own install directory. C++ makes it very difficult to maintain binary
-compatibility between releases, so it is likely that future versions of these
-libraries will *not* be usable as drop-in replacements.
-
-If your project is itself a DLL intended for use by third-party software, we
-recommend that you do NOT expose protocol buffer objects in your library's
-public interface, and that you statically link protocol buffers into your
-library.
-
-ZLib support
-============
-
-If you want to include GzipInputStream and GzipOutputStream
-(google/protobuf/io/gzip_stream.h) in libprotoc, you will need to do a few
-additional steps:
-
-1) Obtain a copy of the zlib library. The pre-compiled DLL at zlib.net works.
-2) Make sure zlib's two headers are in your include path and that the .lib file
- is in your library path. You could place all three files directly into the
- vsproject directory to compile libprotobuf, but they need to be visible to
- your own project as well, so you should probably just put them into the
- VC shared icnlude and library directories.
-3) Right-click on the "tests" project and choose "properties". Navigate the
- sidebar to "Configuration Properties" -> "Linker" -> "Input".
-4) Under "Additional Dependencies", add the name of the zlib .lib file (e.g.
- zdll.lib). Make sure to update both the Debug and Release configurations.
-5) If you are compiling libprotobuf and libprotoc as DLLs (see previous
- section), repeat steps 2 and 3 for the libprotobuf and libprotoc projects.
- If you are compiling them as static libraries, then you will need to link
- against the zlib library directly from your own app.
-6) Edit config.h (in the vsprojects directory) and un-comment the line that
- #defines HAVE_ZLIB. (Or, alternatively, define this macro via the project
- settings.)
-
-Notes on Compiler Warnings
-==========================
-
-The following warnings have been disabled while building the protobuf libraries
-and compiler. You may have to disable some of them in your own project as
-well, or live with them.
-
-C4018 - 'expression' : signed/unsigned mismatch
-C4146 - unary minus operator applied to unsigned type, result still unsigned
-C4244 - Conversion from 'type1' to 'type2', possible loss of data.
-C4251 - 'identifier' : class 'type' needs to have dll-interface to be used by
- clients of class 'type2'
-C4267 - Conversion from 'size_t' to 'type', possible loss of data.
-C4305 - 'identifier' : truncation from 'type1' to 'type2'
-C4355 - 'this' : used in base member initializer list
-C4800 - 'type' : forcing value to bool 'true' or 'false' (performance warning)
-C4996 - 'function': was declared deprecated
-
-C4251 is of particular note, if you are compiling the Protocol Buffer library
-as a DLL (see previous section). The protocol buffer library uses templates in
-its public interfaces. MSVC does not provide any reasonable way to export
-template classes from a DLL. However, in practice, it appears that exporting
-templates is not necessary anyway. Since the complete definition of any
-template is available in the header files, anyone importing the DLL will just
-end up compiling instances of the templates into their own binary. The
-Protocol Buffer implementation does not rely on static template members being
-unique, so there should be no problem with this, but MSVC prints warning
-nevertheless. So, we disable it. Unfortunately, this warning will also be
-produced when compiling code which merely uses protocol buffers, meaning you
-may have to disable it in your code too.
diff --git a/vsprojects/test_plugin.vcproj b/vsprojects/test_plugin.vcproj
deleted file mode 100755
index 549f9503..00000000
--- a/vsprojects/test_plugin.vcproj
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="test_plugin"
- ProjectGUID="{CBBD34E5-02B0-40D5-B6D8-BFEA83E18B32}"
- RootNamespace="test_plugin"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- Description=""
- CommandLine=""
- AdditionalDependencies=""
- Outputs=""
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- Optimization="0"
- AdditionalIncludeDirectories="../src;.;../gtest/include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_VARIADIC_MAX=10;"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- Description=""
- CommandLine=""
- AdditionalDependencies=""
- Outputs=""
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- AdditionalIncludeDirectories="../src;.;../gtest/include"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_VARIADIC_MAX=10;"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- >
- <File
- RelativePath="..\src\google\protobuf\compiler\mock_code_generator.h"
- >
- </File>
- <File
- RelativePath="..\src\google\protobuf\testing\file.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- >
- <File
- RelativePath="..\src\google\protobuf\compiler\test_plugin.cc"
- >
- </File>
- <File
- RelativePath="..\src\google\protobuf\compiler\mock_code_generator.cc"
- >
- </File>
- <File
- RelativePath="..\src\google\protobuf\testing\file.cc"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vsprojects/tests.vcproj b/vsprojects/tests.vcproj
deleted file mode 100644
index 792a3fd8..00000000
--- a/vsprojects/tests.vcproj
+++ /dev/null
@@ -1,964 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="tests"
- ProjectGUID="{4DF72760-C055-40A5-A77E-30A17E2AC2DB}"
- RootNamespace="tests"
- Keyword="Win32Proj"
- TargetFrameworkVersion="0"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- Description=""
- CommandLine=""
- AdditionalDependencies=""
- Outputs=""
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- Optimization="0"
- AdditionalIncludeDirectories="../src;.;../gtest/include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_VARIADIC_MAX=10;"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="$(OutDir)\$(ProjectName)"
- ConfigurationType="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- Description=""
- CommandLine=""
- AdditionalDependencies=""
- Outputs=""
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
- AdditionalIncludeDirectories="../src;.;../gtest/include"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_VARIADIC_MAX=10;"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File RelativePath=".\google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.h"></File>
- <File RelativePath=".\google\protobuf\unittest.pb.h"></File>
- <File RelativePath=".\google\protobuf\unittest_custom_options.pb.h"></File>
- <File RelativePath=".\google\protobuf\unittest_embed_optimize_for.pb.h"></File>
- <File RelativePath=".\google\protobuf\unittest_import.pb.h"></File>
- <File RelativePath=".\google\protobuf\unittest_import_public.pb.h"></File>
- <File RelativePath=".\google\protobuf\unittest_lite_imports_nonline.pb.h"></File>
- <File RelativePath=".\google\protobuf\unittest_mset.pb.h"></File>
- <File RelativePath=".\google\protobuf\unittest_no_generic_services.pb.h"></File>
- <File RelativePath=".\google\protobuf\unittest_optimize_for.pb.h"></File>
- <File RelativePath="..\src\google\protobuf\testing\file.h"></File>
- <File RelativePath="..\src\google\protobuf\testing\googletest.h"></File>
- <File RelativePath="..\src\google\protobuf\test_util.h"></File>
- <File RelativePath="..\src\google\protobuf\map_test_util_impl.h"></File>
- <File RelativePath="..\src\google\protobuf\map_test_util.h"></File>
- <File RelativePath="..\src\google\protobuf\arena_test_util.h"></File>
- <File RelativePath="..\src\google\protobuf\compiler\mock_code_generator.h"></File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File RelativePath=".\google\protobuf\map_lite_unittest.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_import_lite.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_lite.pb.cc"></File>
- <File RelativePath=".\google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc"></File>
- <File RelativePath=".\google\protobuf\compiler\cpp\cpp_test_large_enum_value.pb.cc"></File>
- <File RelativePath=".\google\protobuf\any_test.pb.cc"></File>
- <File RelativePath=".\google\protobuf\map_proto2_unittest.pb.cc"></File>
- <File RelativePath=".\google\protobuf\map_unittest.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_arena.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_custom_options.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_drop_unknown_fields.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_embed_optimize_for.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_empty.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_import.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_import_public_lite.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_import_public.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_lite_imports_nonlite.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_mset.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_no_arena_import.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_no_arena.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_no_field_presence.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_no_generic_services.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_optimize_for.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_preserve_unknown_enum2.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_preserve_unknown_enum.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_proto3_arena.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest_well_known_types.pb.cc"></File>
- <File RelativePath=".\google\protobuf\unittest.pb.cc"></File>
- <File RelativePath="..\src\google\protobuf\any_test.cc"></File>
- <File RelativePath="..\src\google\protobuf\arenastring_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\arena_test_util.cc"></File>
- <File RelativePath="..\src\google\protobuf\arena_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\command_line_interface_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_bootstrap_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_plugin_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\cpp\cpp_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\csharp\csharp_generator_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\importer_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_doc_comment_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\java\java_plugin_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\mock_code_generator.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_helpers_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\parser_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\compiler\python\python_plugin_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\descriptor_database_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\descriptor_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\drop_unknown_fields_test.cc"></File>
- <File RelativePath="..\src\google\protobuf\dynamic_message_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\extension_set_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\generated_message_reflection_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\coded_stream_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\printer_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\tokenizer_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\io\zero_copy_stream_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\map_field_test.cc"></File>
- <File RelativePath="..\src\google\protobuf\map_test.cc"></File>
- <File RelativePath="..\src\google\protobuf\map_test_util.cc"></File>
- <File RelativePath="..\src\google\protobuf\message_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\no_field_presence_test.cc"></File>
- <File RelativePath="..\src\google\protobuf\preserve_unknown_enum_test.cc"></File>
- <File RelativePath="..\src\google\protobuf\proto3_arena_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\reflection_ops_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\repeated_field_reflection_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\repeated_field_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\common_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\once_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\stringprintf_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\structurally_valid_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\strutil_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\template_util_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\stubs\type_traits_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\testing\file.cc"></File>
- <File RelativePath="..\src\google\protobuf\testing\googletest.cc"></File>
- <File RelativePath="..\src\google\protobuf\test_util.cc"></File>
- <File RelativePath="..\src\google\protobuf\text_format_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\unknown_field_set_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\well_known_types_unittest.cc"></File>
- <File RelativePath="..\src\google\protobuf\wire_format_unittest.cc"></File>
- </Filter>
- <File
- RelativePath="..\src\google\protobuf\any_test.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating any_test.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/any_test.proto"
- Outputs="google\protobuf\any_test.pb.h;google\protobuf\any_test.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating any_test.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/any_test.proto"
- Outputs="google\protobuf\any_test.pb.h;google\protobuf\any_test.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_preserve_unknown_enum2.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_preserve_unknown_enum2.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_preserve_unknown_enum2.proto"
- Outputs="google\protobuf\unittest_preserve_unknown_enum2.pb.h;google\protobuf\unittest_preserve_unknown_enum2.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_preserve_unknown_enum2.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_preserve_unknown_enum2.proto"
- Outputs="google\protobuf\unittest_preserve_unknown_enum2.pb.h;google\protobuf\unittest_preserve_unknown_enum2.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_well_known_types.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_well_known_types.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_well_known_types.proto"
- Outputs="google\protobuf\unittest_well_known_types.pb.h;google\protobuf\unittest_well_known_types.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_well_known_types.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_well_known_types.proto"
- Outputs="google\protobuf\unittest_well_known_types.pb.h;google\protobuf\unittest_well_known_types.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\map_lite_unittest.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating map_lite_unittest.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/map_lite_unittest.proto"
- Outputs="google\protobuf\map_lite_unittest.pb.h;google\protobuf\map_lite_unittest.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating map_lite_unittest.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/map_lite_unittest.proto"
- Outputs="google\protobuf\map_lite_unittest.pb.h;google\protobuf\map_lite_unittest.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\map_proto2_unittest.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating map_proto2_unittest.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/map_proto2_unittest.proto"
- Outputs="google\protobuf\map_proto2_unittest.pb.h;google\protobuf\map_proto2_unittest.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating map_proto2_unittest.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/map_proto2_unittest.proto"
- Outputs="google\protobuf\map_proto2_unittest.pb.h;google\protobuf\map_proto2_unittest.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\map_unittest.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating map_unittest.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/map_unittest.proto"
- Outputs="google\protobuf\map_unittest.pb.h;google\protobuf\map_unittest.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating map_unittest.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/map_unittest.proto"
- Outputs="google\protobuf\map_unittest.pb.h;google\protobuf\map_unittest.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest.proto"
- Outputs="google\protobuf\unittest.pb.h;google\protobuf\unittest.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest.proto"
- Outputs="google\protobuf\unittest.pb.h;google\protobuf\unittest.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_arena.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_arena.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_arena.proto"
- Outputs="google\protobuf\unittest_arena.pb.h;google\protobuf\unittest_arena.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_arena.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_arena.proto"
- Outputs="google\protobuf\unittest_arena.pb.h;google\protobuf\unittest_arena.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_custom_options.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_custom_options.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_custom_options.proto"
- Outputs="google\protobuf\unittest_custom_options.pb.h;google\protobuf\unittest_custom_options.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_custom_options.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_custom_options.proto"
- Outputs="google\protobuf\unittest_custom_options.pb.h;google\protobuf\unittest_custom_options.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_drop_unknown_fields.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_drop_unknown_fields.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_drop_unknown_fields.proto"
- Outputs="google\protobuf\unittest_drop_unknown_fields.pb.h;google\protobuf\unittest_drop_unknown_fields.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_drop_unknown_fields.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_drop_unknown_fields.proto"
- Outputs="google\protobuf\unittest_drop_unknown_fields.pb.h;google\protobuf\unittest_drop_unknown_fields.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_embed_optimize_for.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_embed_optimize_for.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_embed_optimize_for.proto"
- Outputs="google\protobuf\unittest_embed_optimize_for.pb.h;google\protobuf\unittest_embed_optimize_for.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_embed_optimize_for.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_embed_optimize_for.proto"
- Outputs="google\protobuf\unittest_embed_optimize_for.pb.h;google\protobuf\unittest_embed_optimize_for.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_empty.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_empty.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_empty.proto"
- Outputs="google\protobuf\unittest_empty.pb.h;google\protobuf\unittest_empty.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_empty.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_empty.proto"
- Outputs="google\protobuf\unittest_empty.pb.h;google\protobuf\unittest_empty.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_import_lite.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_import_lite.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_lite.proto"
- Outputs="google\protobuf\unittest_import_lite.pb.h;google\protobuf\unittest_import_lite.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_import_lite.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_lite.proto"
- Outputs="google\protobuf\unittest_import_lite.pb.h;google\protobuf\unittest_import_lite.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_import.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_import.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import.proto"
- Outputs="google\protobuf\unittest_import.pb.h;google\protobuf\unittest_import.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_import.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import.proto"
- Outputs="google\protobuf\unittest_import.pb.h;google\protobuf\unittest_import.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_import_public_lite.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_import_public_lite.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public_lite.proto"
- Outputs="google\protobuf\unittest_import_public_lite.pb.h;google\protobuf\unittest_import_public_lite.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_import_public_lite.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public_lite.proto"
- Outputs="google\protobuf\unittest_import_public_lite.pb.h;google\protobuf\unittest_import_public_lite.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_import_public.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_import_public.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public.proto"
- Outputs="google\protobuf\unittest_import_public.pb.h;google\protobuf\unittest_import_public.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_import_public.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_import_public.proto"
- Outputs="google\protobuf\unittest_import_public.pb.h;google\protobuf\unittest_import_public.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_lite_imports_nonlite.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_lite_imports_nonlite.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite_imports_nonlite.proto"
- Outputs="google\protobuf\unittest_lite_imports_nonlite.pb.h;google\protobuf\unittest_lite_imports_nonlite.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_lite_imports_nonlite.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite_imports_nonlite.proto"
- Outputs="google\protobuf\unittest_lite_imports_nonlite.pb.h;google\protobuf\unittest_lite_imports_nonlite.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_lite.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_lite.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite.proto"
- Outputs="google\protobuf\unittest_lite.pb.h;google\protobuf\unittest_lite.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_lite.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_lite.proto"
- Outputs="google\protobuf\unittest_lite.pb.h;google\protobuf\unittest_lite.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_mset.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_mset.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_mset.proto"
- Outputs="google\protobuf\unittest_mset.pb.h;google\protobuf\unittest_mset.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_mset.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_mset.proto"
- Outputs="google\protobuf\unittest_mset.pb.h;google\protobuf\unittest_mset.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_no_arena_import.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_no_arena_import.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_arena_import.proto"
- Outputs="google\protobuf\unittest_no_arena_import.pb.h;google\protobuf\unittest_no_arena_import.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_no_arena_import.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_arena_import.proto"
- Outputs="google\protobuf\unittest_no_arena_import.pb.h;google\protobuf\unittest_no_arena_import.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_no_arena.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_no_arena.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_arena.proto"
- Outputs="google\protobuf\unittest_no_arena.pb.h;google\protobuf\unittest_no_arena.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_no_arena.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_arena.proto"
- Outputs="google\protobuf\unittest_no_arena.pb.h;google\protobuf\unittest_no_arena.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_no_field_presence.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_no_field_presence.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_field_presence.proto"
- Outputs="google\protobuf\unittest_no_field_presence.pb.h;google\protobuf\unittest_no_field_presence.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_no_field_presence.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_field_presence.proto"
- Outputs="google\protobuf\unittest_no_field_presence.pb.h;google\protobuf\unittest_no_field_presence.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_no_generic_services.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_no_generic_services.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_generic_services.proto"
- Outputs="google\protobuf\unittest_no_generic_services.pb.h;google\protobuf\unittest_no_generic_services.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_no_generic_services.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_no_generic_services.proto"
- Outputs="google\protobuf\unittest_no_generic_services.pb.h;google\protobuf\unittest_no_generic_services.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_optimize_for.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_optimize_for.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_optimize_for.proto"
- Outputs="google\protobuf\unittest_optimize_for.pb.h;google\protobuf\unittest_optimize_for.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_optimize_for.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_optimize_for.proto"
- Outputs="google\protobuf\unittest_optimize_for.pb.h;google\protobuf\unittest_optimize_for.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_preserve_unknown_enum.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_preserve_unknown_enum.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_preserve_unknown_enum.proto"
- Outputs="google\protobuf\unittest_preserve_unknown_enum.pb.h;google\protobuf\unittest_preserve_unknown_enum.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_preserve_unknown_enum.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_preserve_unknown_enum.proto"
- Outputs="google\protobuf\unittest_preserve_unknown_enum.pb.h;google\protobuf\unittest_preserve_unknown_enum.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\unittest_proto3_arena.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_proto3_arena.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_proto3_arena.proto"
- Outputs="google\protobuf\unittest_proto3_arena.pb.h;google\protobuf\unittest_proto3_arena.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating unittest_proto3_arena.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/unittest_proto3_arena.proto"
- Outputs="google\protobuf\unittest_proto3_arena.pb.h;google\protobuf\unittest_proto3_arena.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\compiler\cpp\cpp_test_bad_identifiers.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating cpp_test_bad_identifiers.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto"
- Outputs="google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.h;google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating cpp_test_bad_identifiers.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto"
- Outputs="google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.h;google\protobuf\compiler\cpp\cpp_test_bad_identifiers.pb.cc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\google\protobuf\compiler\cpp\cpp_test_large_enum_value.proto"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating cpp_test_large_enum_value.pb.{h,cc}..."
- CommandLine="Debug\protoc -I../src --cpp_out=. ../src/google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto"
- Outputs="google\protobuf\compiler\cpp\cpp_test_large_enum_value.pb.h;google\protobuf\compiler\cpp\cpp_test_large_enum_value.pb.cc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- Description="Generating cpp_test_large_enum_value.pb.{h,cc}..."
- CommandLine="Release\protoc -I../src --cpp_out=. ../src/google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto"
- Outputs="google\protobuf\compiler\cpp\cpp_test_large_enum_value.pb.h;google\protobuf\compiler\cpp\cpp_test_large_enum_value.pb.cc"
- />
- </FileConfiguration>
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>