protoc 2.6.1.1 → 2.6.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. checksums.yaml +4 -4
  2. data/ext/protoc/Makefile.in +10 -13
  3. data/ext/protoc/extconf.rb +0 -1
  4. data/ext/protoc/protobuf/CHANGES.txt +593 -0
  5. data/ext/protoc/protobuf/CONTRIBUTORS.txt +93 -0
  6. data/ext/protoc/protobuf/INSTALL.txt +237 -0
  7. data/ext/protoc/protobuf/LICENSE +33 -0
  8. data/ext/protoc/protobuf/Makefile.am +267 -0
  9. data/ext/protoc/protobuf/README.md +167 -0
  10. data/ext/protoc/protobuf/autogen.sh +41 -0
  11. data/ext/protoc/protobuf/benchmarks/ProtoBench.java +203 -0
  12. data/ext/protoc/protobuf/benchmarks/google_message1.dat +0 -0
  13. data/ext/protoc/protobuf/benchmarks/google_message2.dat +0 -0
  14. data/ext/protoc/protobuf/benchmarks/google_size.proto +136 -0
  15. data/ext/protoc/protobuf/benchmarks/google_speed.proto +136 -0
  16. data/ext/protoc/protobuf/benchmarks/readme.txt +50 -0
  17. data/ext/protoc/protobuf/configure.ac +159 -0
  18. data/ext/protoc/protobuf/editors/README.txt +5 -0
  19. data/ext/protoc/protobuf/editors/proto.vim +105 -0
  20. data/ext/protoc/protobuf/editors/protobuf-mode.el +220 -0
  21. data/ext/protoc/protobuf/examples/AddPerson.java +95 -0
  22. data/ext/protoc/protobuf/examples/ListPeople.java +50 -0
  23. data/ext/protoc/protobuf/examples/Makefile +58 -0
  24. data/ext/protoc/protobuf/examples/README.txt +29 -0
  25. data/ext/protoc/protobuf/examples/add_person.cc +95 -0
  26. data/ext/protoc/protobuf/examples/add_person.py +58 -0
  27. data/ext/protoc/protobuf/examples/addressbook.proto +30 -0
  28. data/ext/protoc/protobuf/examples/list_people.cc +68 -0
  29. data/ext/protoc/protobuf/examples/list_people.py +38 -0
  30. data/ext/protoc/protobuf/generate_descriptor_proto.sh +33 -0
  31. data/ext/protoc/protobuf/java/README.txt +96 -0
  32. data/ext/protoc/protobuf/java/pom.xml +217 -0
  33. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessage.java +466 -0
  34. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessageLite.java +355 -0
  35. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractParser.java +253 -0
  36. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingRpcChannel.java +51 -0
  37. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingService.java +64 -0
  38. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BoundedByteString.java +163 -0
  39. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ByteString.java +1022 -0
  40. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedInputStream.java +1311 -0
  41. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedOutputStream.java +1297 -0
  42. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Descriptors.java +2238 -0
  43. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/DynamicMessage.java +622 -0
  44. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Extension.java +96 -0
  45. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistry.java +392 -0
  46. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistryLite.java +185 -0
  47. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/FieldSet.java +907 -0
  48. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessage.java +2213 -0
  49. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessageLite.java +949 -0
  50. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Internal.java +391 -0
  51. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java +122 -0
  52. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyField.java +154 -0
  53. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyFieldLite.java +176 -0
  54. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringArrayList.java +367 -0
  55. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringList.java +163 -0
  56. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LiteralByteString.java +362 -0
  57. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Message.java +244 -0
  58. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLite.java +320 -0
  59. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java +60 -0
  60. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageOrBuilder.java +143 -0
  61. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageReflection.java +931 -0
  62. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Parser.java +261 -0
  63. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolMessageEnum.java +58 -0
  64. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolStringList.java +48 -0
  65. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java +696 -0
  66. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RopeByteString.java +957 -0
  67. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcCallback.java +47 -0
  68. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcChannel.java +71 -0
  69. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcController.java +118 -0
  70. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcUtil.java +134 -0
  71. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Service.java +117 -0
  72. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ServiceException.java +52 -0
  73. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SingleFieldBuilder.java +241 -0
  74. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SmallSortedMap.java +618 -0
  75. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/TextFormat.java +1984 -0
  76. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UninitializedMessageException.java +99 -0
  77. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnknownFieldSet.java +995 -0
  78. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java +205 -0
  79. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Utf8.java +349 -0
  80. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/WireFormat.java +163 -0
  81. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/AbstractMessageTest.java +527 -0
  82. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/BoundedByteStringTest.java +68 -0
  83. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ByteStringTest.java +759 -0
  84. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CheckUtf8Test.java +141 -0
  85. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java +769 -0
  86. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java +401 -0
  87. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java +80 -0
  88. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DescriptorsTest.java +735 -0
  89. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DynamicMessageTest.java +326 -0
  90. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java +48 -0
  91. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/GeneratedMessageTest.java +1515 -0
  92. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8Test.java +180 -0
  93. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java +421 -0
  94. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java +134 -0
  95. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldTest.java +121 -0
  96. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java +319 -0
  97. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java +174 -0
  98. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java +143 -0
  99. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java +85 -0
  100. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteTest.java +148 -0
  101. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteralByteStringTest.java +396 -0
  102. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/MessageTest.java +353 -0
  103. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/NestedBuildersTest.java +185 -0
  104. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ParserTest.java +381 -0
  105. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java +190 -0
  106. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java +97 -0
  107. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringTest.java +115 -0
  108. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ServiceTest.java +320 -0
  109. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java +155 -0
  110. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SmallSortedMapTest.java +420 -0
  111. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestBadIdentifiers.java +96 -0
  112. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestUtil.java +4124 -0
  113. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TextFormatTest.java +994 -0
  114. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java +653 -0
  115. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java +227 -0
  116. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/WireFormatTest.java +606 -0
  117. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lazy_fields_lite.proto +61 -0
  118. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto +55 -0
  119. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/multiple_files_test.proto +77 -0
  120. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_builders_test.proto +53 -0
  121. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension.proto +46 -0
  122. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension_lite.proto +48 -0
  123. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension.proto +49 -0
  124. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto +50 -0
  125. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test.proto +38 -0
  126. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test2.proto +42 -0
  127. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test3.proto +43 -0
  128. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_bad_identifiers.proto +157 -0
  129. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8.proto +50 -0
  130. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8_size.proto +51 -0
  131. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_custom_options.proto +43 -0
  132. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_extra_interfaces.proto +60 -0
  133. data/ext/protoc/protobuf/m4/ac_system_extensions.m4 +37 -0
  134. data/ext/protoc/protobuf/m4/acx_check_suncc.m4 +75 -0
  135. data/ext/protoc/protobuf/m4/acx_pthread.m4 +397 -0
  136. data/ext/protoc/protobuf/m4/stl_hash.m4 +72 -0
  137. data/ext/protoc/protobuf/more_tests/Makefile +41 -0
  138. data/ext/protoc/protobuf/post_process_dist.sh +60 -0
  139. data/ext/protoc/protobuf/protobuf-lite.pc.in +13 -0
  140. data/ext/protoc/protobuf/protobuf.pc.in +14 -0
  141. data/ext/protoc/protobuf/python/README.txt +105 -0
  142. data/ext/protoc/protobuf/python/ez_setup.py +284 -0
  143. data/ext/protoc/protobuf/python/google/__init__.py +1 -0
  144. data/ext/protoc/protobuf/python/google/protobuf/__init__.py +0 -0
  145. data/ext/protoc/protobuf/python/google/protobuf/descriptor.py +849 -0
  146. data/ext/protoc/protobuf/python/google/protobuf/descriptor_database.py +137 -0
  147. data/ext/protoc/protobuf/python/google/protobuf/descriptor_pool.py +643 -0
  148. data/ext/protoc/protobuf/python/google/protobuf/internal/__init__.py +0 -0
  149. data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.cc +139 -0
  150. data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.py +89 -0
  151. data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation_default_test.py +63 -0
  152. data/ext/protoc/protobuf/python/google/protobuf/internal/containers.py +269 -0
  153. data/ext/protoc/protobuf/python/google/protobuf/internal/cpp_message.py +663 -0
  154. data/ext/protoc/protobuf/python/google/protobuf/internal/decoder.py +831 -0
  155. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_database_test.py +63 -0
  156. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test.py +564 -0
  157. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test1.proto +94 -0
  158. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test2.proto +70 -0
  159. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_python_test.py +54 -0
  160. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_test.py +669 -0
  161. data/ext/protoc/protobuf/python/google/protobuf/internal/encoder.py +788 -0
  162. data/ext/protoc/protobuf/python/google/protobuf/internal/enum_type_wrapper.py +89 -0
  163. data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test1.proto +57 -0
  164. data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test2.proto +92 -0
  165. data/ext/protoc/protobuf/python/google/protobuf/internal/generator_test.py +343 -0
  166. data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_python_test.py +54 -0
  167. data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_test.py +131 -0
  168. data/ext/protoc/protobuf/python/google/protobuf/internal/message_listener.py +78 -0
  169. data/ext/protoc/protobuf/python/google/protobuf/internal/message_python_test.py +54 -0
  170. data/ext/protoc/protobuf/python/google/protobuf/internal/message_test.py +681 -0
  171. data/ext/protoc/protobuf/python/google/protobuf/internal/missing_enum_values.proto +50 -0
  172. data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions.proto +58 -0
  173. data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions_dynamic.proto +49 -0
  174. data/ext/protoc/protobuf/python/google/protobuf/internal/more_messages.proto +51 -0
  175. data/ext/protoc/protobuf/python/google/protobuf/internal/python_message.py +1251 -0
  176. data/ext/protoc/protobuf/python/google/protobuf/internal/reflection_test.py +2934 -0
  177. data/ext/protoc/protobuf/python/google/protobuf/internal/service_reflection_test.py +136 -0
  178. data/ext/protoc/protobuf/python/google/protobuf/internal/symbol_database_test.py +120 -0
  179. data/ext/protoc/protobuf/python/google/protobuf/internal/test_bad_identifiers.proto +52 -0
  180. data/ext/protoc/protobuf/python/google/protobuf/internal/test_util.py +662 -0
  181. data/ext/protoc/protobuf/python/google/protobuf/internal/text_encoding_test.py +68 -0
  182. data/ext/protoc/protobuf/python/google/protobuf/internal/text_format_test.py +743 -0
  183. data/ext/protoc/protobuf/python/google/protobuf/internal/type_checkers.py +328 -0
  184. data/ext/protoc/protobuf/python/google/protobuf/internal/unknown_fields_test.py +231 -0
  185. data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format.py +268 -0
  186. data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format_test.py +253 -0
  187. data/ext/protoc/protobuf/python/google/protobuf/message.py +284 -0
  188. data/ext/protoc/protobuf/python/google/protobuf/message_factory.py +155 -0
  189. data/ext/protoc/protobuf/python/google/protobuf/pyext/README +6 -0
  190. data/ext/protoc/protobuf/python/google/protobuf/pyext/__init__.py +0 -0
  191. data/ext/protoc/protobuf/python/google/protobuf/pyext/cpp_message.py +61 -0
  192. data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.cc +357 -0
  193. data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.h +96 -0
  194. data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor_cpp2_test.py +58 -0
  195. data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.cc +338 -0
  196. data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.h +123 -0
  197. data/ext/protoc/protobuf/python/google/protobuf/pyext/message.cc +2561 -0
  198. data/ext/protoc/protobuf/python/google/protobuf/pyext/message.h +305 -0
  199. data/ext/protoc/protobuf/python/google/protobuf/pyext/message_factory_cpp2_test.py +56 -0
  200. data/ext/protoc/protobuf/python/google/protobuf/pyext/proto2_api_test.proto +38 -0
  201. data/ext/protoc/protobuf/python/google/protobuf/pyext/python.proto +66 -0
  202. data/ext/protoc/protobuf/python/google/protobuf/pyext/python_protobuf.h +57 -0
  203. data/ext/protoc/protobuf/python/google/protobuf/pyext/reflection_cpp2_generated_test.py +94 -0
  204. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc +763 -0
  205. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.h +172 -0
  206. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.cc +825 -0
  207. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.h +112 -0
  208. data/ext/protoc/protobuf/python/google/protobuf/pyext/scoped_pyobject_ptr.h +95 -0
  209. data/ext/protoc/protobuf/python/google/protobuf/reflection.py +205 -0
  210. data/ext/protoc/protobuf/python/google/protobuf/service.py +226 -0
  211. data/ext/protoc/protobuf/python/google/protobuf/service_reflection.py +284 -0
  212. data/ext/protoc/protobuf/python/google/protobuf/symbol_database.py +185 -0
  213. data/ext/protoc/protobuf/python/google/protobuf/text_encoding.py +110 -0
  214. data/ext/protoc/protobuf/python/google/protobuf/text_format.py +873 -0
  215. data/ext/protoc/protobuf/python/mox.py +1401 -0
  216. data/ext/protoc/protobuf/python/setup.py +201 -0
  217. data/ext/protoc/protobuf/python/stubout.py +140 -0
  218. data/ext/protoc/protobuf/src/Makefile.am +418 -0
  219. data/ext/protoc/protobuf/src/google/protobuf/SEBS +240 -0
  220. data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.cc +84 -0
  221. data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.h +145 -0
  222. data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.cc +1603 -0
  223. data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.h +378 -0
  224. data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface_unittest.cc +1654 -0
  225. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc +158 -0
  226. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.cc +288 -0
  227. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.h +103 -0
  228. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.cc +431 -0
  229. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.h +122 -0
  230. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.cc +210 -0
  231. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.h +86 -0
  232. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.cc +166 -0
  233. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.h +185 -0
  234. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.cc +665 -0
  235. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.h +99 -0
  236. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.cc +125 -0
  237. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
  238. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.cc +494 -0
  239. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.h +206 -0
  240. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.cc +2645 -0
  241. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.h +175 -0
  242. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.cc +375 -0
  243. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.h +121 -0
  244. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_options.h +58 -0
  245. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc +123 -0
  246. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc +451 -0
  247. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +123 -0
  248. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.cc +334 -0
  249. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
  250. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.cc +642 -0
  251. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.h +127 -0
  252. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto +132 -0
  253. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc +2074 -0
  254. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.h +51 -0
  255. data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.cc +480 -0
  256. data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.h +317 -0
  257. data/ext/protoc/protobuf/src/google/protobuf/compiler/importer_unittest.cc +617 -0
  258. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.cc +195 -0
  259. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.h +95 -0
  260. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.cc +233 -0
  261. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.h +69 -0
  262. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment_unittest.cc +67 -0
  263. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.cc +333 -0
  264. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.h +99 -0
  265. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.cc +778 -0
  266. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.h +158 -0
  267. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.cc +207 -0
  268. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.h +109 -0
  269. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.cc +213 -0
  270. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.h +162 -0
  271. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.cc +534 -0
  272. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.h +115 -0
  273. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.cc +158 -0
  274. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.h +72 -0
  275. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.cc +77 -0
  276. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.h +101 -0
  277. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.cc +737 -0
  278. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.h +322 -0
  279. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.cc +826 -0
  280. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.h +121 -0
  281. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.cc +1666 -0
  282. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.h +140 -0
  283. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.cc +1343 -0
  284. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.h +173 -0
  285. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.cc +266 -0
  286. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.h +124 -0
  287. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_plugin_unittest.cc +124 -0
  288. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.cc +877 -0
  289. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.h +160 -0
  290. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.cc +473 -0
  291. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.h +135 -0
  292. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.cc +201 -0
  293. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.h +90 -0
  294. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.cc +1056 -0
  295. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.h +160 -0
  296. data/ext/protoc/protobuf/src/google/protobuf/compiler/main.cc +61 -0
  297. data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.cc +240 -0
  298. data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.h +117 -0
  299. data/ext/protoc/protobuf/src/google/protobuf/compiler/package_info.h +64 -0
  300. data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.cc +1750 -0
  301. data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.h +522 -0
  302. data/ext/protoc/protobuf/src/google/protobuf/compiler/parser_unittest.cc +2612 -0
  303. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.cc +163 -0
  304. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.h +72 -0
  305. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.cc +1148 -0
  306. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.h +897 -0
  307. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.proto +147 -0
  308. data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.cc +1262 -0
  309. data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.h +166 -0
  310. data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_plugin_unittest.cc +118 -0
  311. data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.cc +463 -0
  312. data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.h +108 -0
  313. data/ext/protoc/protobuf/src/google/protobuf/compiler/test_plugin.cc +51 -0
  314. data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_output_unittest.sh +91 -0
  315. data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.cc +218 -0
  316. data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.h +93 -0
  317. data/ext/protoc/protobuf/src/google/protobuf/descriptor.cc +5420 -0
  318. data/ext/protoc/protobuf/src/google/protobuf/descriptor.h +1691 -0
  319. data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.cc +9135 -0
  320. data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.h +6761 -0
  321. data/ext/protoc/protobuf/src/google/protobuf/descriptor.proto +687 -0
  322. data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.cc +543 -0
  323. data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.h +369 -0
  324. data/ext/protoc/protobuf/src/google/protobuf/descriptor_database_unittest.cc +748 -0
  325. data/ext/protoc/protobuf/src/google/protobuf/descriptor_pb2_test.py +54 -0
  326. data/ext/protoc/protobuf/src/google/protobuf/descriptor_unittest.cc +5501 -0
  327. data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.cc +764 -0
  328. data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.h +148 -0
  329. data/ext/protoc/protobuf/src/google/protobuf/dynamic_message_unittest.cc +230 -0
  330. data/ext/protoc/protobuf/src/google/protobuf/extension_set.cc +1663 -0
  331. data/ext/protoc/protobuf/src/google/protobuf/extension_set.h +1234 -0
  332. data/ext/protoc/protobuf/src/google/protobuf/extension_set_heavy.cc +734 -0
  333. data/ext/protoc/protobuf/src/google/protobuf/extension_set_unittest.cc +1095 -0
  334. data/ext/protoc/protobuf/src/google/protobuf/generated_enum_reflection.h +91 -0
  335. data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.cc +1683 -0
  336. data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.h +504 -0
  337. data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc +795 -0
  338. data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.cc +65 -0
  339. data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.h +113 -0
  340. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.cc +914 -0
  341. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.h +1220 -0
  342. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_inl.h +69 -0
  343. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_unittest.cc +1378 -0
  344. data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.cc +326 -0
  345. data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.h +209 -0
  346. data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream_unittest.sh +44 -0
  347. data/ext/protoc/protobuf/src/google/protobuf/io/package_info.h +54 -0
  348. data/ext/protoc/protobuf/src/google/protobuf/io/printer.cc +198 -0
  349. data/ext/protoc/protobuf/src/google/protobuf/io/printer.h +136 -0
  350. data/ext/protoc/protobuf/src/google/protobuf/io/printer_unittest.cc +285 -0
  351. data/ext/protoc/protobuf/src/google/protobuf/io/strtod.cc +113 -0
  352. data/ext/protoc/protobuf/src/google/protobuf/io/strtod.h +50 -0
  353. data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.cc +1127 -0
  354. data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.h +402 -0
  355. data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer_unittest.cc +999 -0
  356. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.cc +57 -0
  357. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.h +248 -0
  358. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc +473 -0
  359. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.h +358 -0
  360. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc +405 -0
  361. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.h +354 -0
  362. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_unittest.cc +965 -0
  363. data/ext/protoc/protobuf/src/google/protobuf/lite_unittest.cc +350 -0
  364. data/ext/protoc/protobuf/src/google/protobuf/message.cc +358 -0
  365. data/ext/protoc/protobuf/src/google/protobuf/message.h +866 -0
  366. data/ext/protoc/protobuf/src/google/protobuf/message_lite.cc +335 -0
  367. data/ext/protoc/protobuf/src/google/protobuf/message_lite.h +247 -0
  368. data/ext/protoc/protobuf/src/google/protobuf/message_unittest.cc +427 -0
  369. data/ext/protoc/protobuf/src/google/protobuf/package_info.h +64 -0
  370. data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.cc +269 -0
  371. data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.h +81 -0
  372. data/ext/protoc/protobuf/src/google/protobuf/reflection_ops_unittest.cc +475 -0
  373. data/ext/protoc/protobuf/src/google/protobuf/repeated_field.cc +87 -0
  374. data/ext/protoc/protobuf/src/google/protobuf/repeated_field.h +1603 -0
  375. data/ext/protoc/protobuf/src/google/protobuf/repeated_field_reflection_unittest.cc +195 -0
  376. data/ext/protoc/protobuf/src/google/protobuf/repeated_field_unittest.cc +1442 -0
  377. data/ext/protoc/protobuf/src/google/protobuf/service.cc +46 -0
  378. data/ext/protoc/protobuf/src/google/protobuf/service.h +291 -0
  379. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops.h +227 -0
  380. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm64_gcc.h +325 -0
  381. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_gcc.h +151 -0
  382. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_qnx.h +146 -0
  383. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_atomicword_compat.h +122 -0
  384. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h +137 -0
  385. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_macosx.h +225 -0
  386. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_mips_gcc.h +313 -0
  387. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_pnacl.h +73 -0
  388. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_solaris.h +188 -0
  389. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_tsan.h +219 -0
  390. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc +137 -0
  391. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h +293 -0
  392. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc +112 -0
  393. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.h +150 -0
  394. data/ext/protoc/protobuf/src/google/protobuf/stubs/common.cc +395 -0
  395. data/ext/protoc/protobuf/src/google/protobuf/stubs/common.h +1226 -0
  396. data/ext/protoc/protobuf/src/google/protobuf/stubs/common_unittest.cc +357 -0
  397. data/ext/protoc/protobuf/src/google/protobuf/stubs/hash.h +232 -0
  398. data/ext/protoc/protobuf/src/google/protobuf/stubs/map_util.h +771 -0
  399. data/ext/protoc/protobuf/src/google/protobuf/stubs/once.cc +99 -0
  400. data/ext/protoc/protobuf/src/google/protobuf/stubs/once.h +166 -0
  401. data/ext/protoc/protobuf/src/google/protobuf/stubs/once_unittest.cc +253 -0
  402. data/ext/protoc/protobuf/src/google/protobuf/stubs/platform_macros.h +103 -0
  403. data/ext/protoc/protobuf/src/google/protobuf/stubs/shared_ptr.h +470 -0
  404. data/ext/protoc/protobuf/src/google/protobuf/stubs/stl_util.h +121 -0
  405. data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.cc +175 -0
  406. data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.h +76 -0
  407. data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf_unittest.cc +152 -0
  408. data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid.cc +536 -0
  409. data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid_unittest.cc +40 -0
  410. data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.cc +1279 -0
  411. data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.h +562 -0
  412. data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil_unittest.cc +73 -0
  413. data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.cc +134 -0
  414. data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.h +170 -0
  415. data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util.h +138 -0
  416. data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util_unittest.cc +130 -0
  417. data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits.h +336 -0
  418. data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits_unittest.cc +628 -0
  419. data/ext/protoc/protobuf/src/google/protobuf/test_util.cc +3345 -0
  420. data/ext/protoc/protobuf/src/google/protobuf/test_util.h +215 -0
  421. data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.cc +1585 -0
  422. data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.h +101 -0
  423. data/ext/protoc/protobuf/src/google/protobuf/testdata/bad_utf8_string +1 -0
  424. data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message +0 -0
  425. data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message_oneof_implemented +0 -0
  426. data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_packed_fields_message +0 -0
  427. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data.txt +134 -0
  428. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_oneof_implemented.txt +129 -0
  429. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy.txt +134 -0
  430. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy_oneof.txt +129 -0
  431. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data.txt +134 -0
  432. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data_pointy.txt +134 -0
  433. data/ext/protoc/protobuf/src/google/protobuf/testing/file.cc +194 -0
  434. data/ext/protoc/protobuf/src/google/protobuf/testing/file.h +97 -0
  435. data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.cc +255 -0
  436. data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.h +102 -0
  437. data/ext/protoc/protobuf/src/google/protobuf/testing/zcgunzip.cc +73 -0
  438. data/ext/protoc/protobuf/src/google/protobuf/testing/zcgzip.cc +79 -0
  439. data/ext/protoc/protobuf/src/google/protobuf/text_format.cc +1746 -0
  440. data/ext/protoc/protobuf/src/google/protobuf/text_format.h +473 -0
  441. data/ext/protoc/protobuf/src/google/protobuf/text_format_unittest.cc +1479 -0
  442. data/ext/protoc/protobuf/src/google/protobuf/unittest.proto +861 -0
  443. data/ext/protoc/protobuf/src/google/protobuf/unittest_custom_options.proto +393 -0
  444. data/ext/protoc/protobuf/src/google/protobuf/unittest_embed_optimize_for.proto +50 -0
  445. data/ext/protoc/protobuf/src/google/protobuf/unittest_empty.proto +37 -0
  446. data/ext/protoc/protobuf/src/google/protobuf/unittest_enormous_descriptor.proto +1046 -0
  447. data/ext/protoc/protobuf/src/google/protobuf/unittest_import.proto +64 -0
  448. data/ext/protoc/protobuf/src/google/protobuf/unittest_import_lite.proto +51 -0
  449. data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public.proto +40 -0
  450. data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public_lite.proto +42 -0
  451. data/ext/protoc/protobuf/src/google/protobuf/unittest_lite.proto +384 -0
  452. data/ext/protoc/protobuf/src/google/protobuf/unittest_lite_imports_nonlite.proto +43 -0
  453. data/ext/protoc/protobuf/src/google/protobuf/unittest_mset.proto +83 -0
  454. data/ext/protoc/protobuf/src/google/protobuf/unittest_no_generic_services.proto +53 -0
  455. data/ext/protoc/protobuf/src/google/protobuf/unittest_optimize_for.proto +66 -0
  456. data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.cc +265 -0
  457. data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.h +318 -0
  458. data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set_unittest.cc +599 -0
  459. data/ext/protoc/protobuf/src/google/protobuf/wire_format.cc +1101 -0
  460. data/ext/protoc/protobuf/src/google/protobuf/wire_format.h +336 -0
  461. data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.cc +471 -0
  462. data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.h +661 -0
  463. data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite_inl.h +860 -0
  464. data/ext/protoc/protobuf/src/google/protobuf/wire_format_unittest.cc +1120 -0
  465. data/ext/protoc/protobuf/src/solaris/libstdc++.la +51 -0
  466. data/ext/protoc/protobuf/vsprojects/config.h +29 -0
  467. data/ext/protoc/protobuf/vsprojects/convert2008to2005.sh +20 -0
  468. data/ext/protoc/protobuf/vsprojects/extract_includes.bat +50 -0
  469. data/ext/protoc/protobuf/vsprojects/libprotobuf-lite.vcproj +302 -0
  470. data/ext/protoc/protobuf/vsprojects/libprotobuf.vcproj +470 -0
  471. data/ext/protoc/protobuf/vsprojects/libprotoc.vcproj +466 -0
  472. data/ext/protoc/protobuf/vsprojects/lite-test.vcproj +305 -0
  473. data/ext/protoc/protobuf/vsprojects/protobuf.sln +92 -0
  474. data/ext/protoc/protobuf/vsprojects/protoc.vcproj +192 -0
  475. data/ext/protoc/protobuf/vsprojects/readme.txt +114 -0
  476. data/ext/protoc/protobuf/vsprojects/test_plugin.vcproj +209 -0
  477. data/ext/protoc/protobuf/vsprojects/tests.vcproj +681 -0
  478. data/lib/protoc/version.rb +1 -1
  479. metadata +480 -3
@@ -0,0 +1,147 @@
1
+ // Protocol Buffers - Google's data interchange format
2
+ // Copyright 2008 Google Inc. All rights reserved.
3
+ // https://developers.google.com/protocol-buffers/
4
+ //
5
+ // Redistribution and use in source and binary forms, with or without
6
+ // modification, are permitted provided that the following conditions are
7
+ // met:
8
+ //
9
+ // * Redistributions of source code must retain the above copyright
10
+ // notice, this list of conditions and the following disclaimer.
11
+ // * Redistributions in binary form must reproduce the above
12
+ // copyright notice, this list of conditions and the following disclaimer
13
+ // in the documentation and/or other materials provided with the
14
+ // distribution.
15
+ // * Neither the name of Google Inc. nor the names of its
16
+ // contributors may be used to endorse or promote products derived from
17
+ // this software without specific prior written permission.
18
+ //
19
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+
31
+ // Author: kenton@google.com (Kenton Varda)
32
+ //
33
+ // WARNING: The plugin interface is currently EXPERIMENTAL and is subject to
34
+ // change.
35
+ //
36
+ // protoc (aka the Protocol Compiler) can be extended via plugins. A plugin is
37
+ // just a program that reads a CodeGeneratorRequest from stdin and writes a
38
+ // CodeGeneratorResponse to stdout.
39
+ //
40
+ // Plugins written using C++ can use google/protobuf/compiler/plugin.h instead
41
+ // of dealing with the raw protocol defined here.
42
+ //
43
+ // A plugin executable needs only to be placed somewhere in the path. The
44
+ // plugin should be named "protoc-gen-$NAME", and will then be used when the
45
+ // flag "--${NAME}_out" is passed to protoc.
46
+
47
+ package google.protobuf.compiler;
48
+ option java_package = "com.google.protobuf.compiler";
49
+ option java_outer_classname = "PluginProtos";
50
+
51
+ import "google/protobuf/descriptor.proto";
52
+
53
+ // An encoded CodeGeneratorRequest is written to the plugin's stdin.
54
+ message CodeGeneratorRequest {
55
+ // The .proto files that were explicitly listed on the command-line. The
56
+ // code generator should generate code only for these files. Each file's
57
+ // descriptor will be included in proto_file, below.
58
+ repeated string file_to_generate = 1;
59
+
60
+ // The generator parameter passed on the command-line.
61
+ optional string parameter = 2;
62
+
63
+ // FileDescriptorProtos for all files in files_to_generate and everything
64
+ // they import. The files will appear in topological order, so each file
65
+ // appears before any file that imports it.
66
+ //
67
+ // protoc guarantees that all proto_files will be written after
68
+ // the fields above, even though this is not technically guaranteed by the
69
+ // protobuf wire format. This theoretically could allow a plugin to stream
70
+ // in the FileDescriptorProtos and handle them one by one rather than read
71
+ // the entire set into memory at once. However, as of this writing, this
72
+ // is not similarly optimized on protoc's end -- it will store all fields in
73
+ // memory at once before sending them to the plugin.
74
+ repeated FileDescriptorProto proto_file = 15;
75
+ }
76
+
77
+ // The plugin writes an encoded CodeGeneratorResponse to stdout.
78
+ message CodeGeneratorResponse {
79
+ // Error message. If non-empty, code generation failed. The plugin process
80
+ // should exit with status code zero even if it reports an error in this way.
81
+ //
82
+ // This should be used to indicate errors in .proto files which prevent the
83
+ // code generator from generating correct code. Errors which indicate a
84
+ // problem in protoc itself -- such as the input CodeGeneratorRequest being
85
+ // unparseable -- should be reported by writing a message to stderr and
86
+ // exiting with a non-zero status code.
87
+ optional string error = 1;
88
+
89
+ // Represents a single generated file.
90
+ message File {
91
+ // The file name, relative to the output directory. The name must not
92
+ // contain "." or ".." components and must be relative, not be absolute (so,
93
+ // the file cannot lie outside the output directory). "/" must be used as
94
+ // the path separator, not "\".
95
+ //
96
+ // If the name is omitted, the content will be appended to the previous
97
+ // file. This allows the generator to break large files into small chunks,
98
+ // and allows the generated text to be streamed back to protoc so that large
99
+ // files need not reside completely in memory at one time. Note that as of
100
+ // this writing protoc does not optimize for this -- it will read the entire
101
+ // CodeGeneratorResponse before writing files to disk.
102
+ optional string name = 1;
103
+
104
+ // If non-empty, indicates that the named file should already exist, and the
105
+ // content here is to be inserted into that file at a defined insertion
106
+ // point. This feature allows a code generator to extend the output
107
+ // produced by another code generator. The original generator may provide
108
+ // insertion points by placing special annotations in the file that look
109
+ // like:
110
+ // @@protoc_insertion_point(NAME)
111
+ // The annotation can have arbitrary text before and after it on the line,
112
+ // which allows it to be placed in a comment. NAME should be replaced with
113
+ // an identifier naming the point -- this is what other generators will use
114
+ // as the insertion_point. Code inserted at this point will be placed
115
+ // immediately above the line containing the insertion point (thus multiple
116
+ // insertions to the same point will come out in the order they were added).
117
+ // The double-@ is intended to make it unlikely that the generated code
118
+ // could contain things that look like insertion points by accident.
119
+ //
120
+ // For example, the C++ code generator places the following line in the
121
+ // .pb.h files that it generates:
122
+ // // @@protoc_insertion_point(namespace_scope)
123
+ // This line appears within the scope of the file's package namespace, but
124
+ // outside of any particular class. Another plugin can then specify the
125
+ // insertion_point "namespace_scope" to generate additional classes or
126
+ // other declarations that should be placed in this scope.
127
+ //
128
+ // Note that if the line containing the insertion point begins with
129
+ // whitespace, the same whitespace will be added to every line of the
130
+ // inserted text. This is useful for languages like Python, where
131
+ // indentation matters. In these languages, the insertion point comment
132
+ // should be indented the same amount as any inserted code will need to be
133
+ // in order to work correctly in that context.
134
+ //
135
+ // The code generator that generates the initial file and the one which
136
+ // inserts into it must both run as part of a single invocation of protoc.
137
+ // Code generators are executed in the order in which they appear on the
138
+ // command line.
139
+ //
140
+ // If |insertion_point| is present, |name| must also be present.
141
+ optional string insertion_point = 2;
142
+
143
+ // The file contents.
144
+ optional string content = 15;
145
+ }
146
+ repeated File file = 15;
147
+ }
@@ -0,0 +1,1262 @@
1
+ // Protocol Buffers - Google's data interchange format
2
+ // Copyright 2008 Google Inc. All rights reserved.
3
+ // https://developers.google.com/protocol-buffers/
4
+ //
5
+ // Redistribution and use in source and binary forms, with or without
6
+ // modification, are permitted provided that the following conditions are
7
+ // met:
8
+ //
9
+ // * Redistributions of source code must retain the above copyright
10
+ // notice, this list of conditions and the following disclaimer.
11
+ // * Redistributions in binary form must reproduce the above
12
+ // copyright notice, this list of conditions and the following disclaimer
13
+ // in the documentation and/or other materials provided with the
14
+ // distribution.
15
+ // * Neither the name of Google Inc. nor the names of its
16
+ // contributors may be used to endorse or promote products derived from
17
+ // this software without specific prior written permission.
18
+ //
19
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+
31
+ //#PY25 compatible generated code for GAE.
32
+ // Copyright 2007 Google Inc. All Rights Reserved.
33
+ // Author: robinson@google.com (Will Robinson)
34
+ //
35
+ // This module outputs pure-Python protocol message classes that will
36
+ // largely be constructed at runtime via the metaclass in reflection.py.
37
+ // In other words, our job is basically to output a Python equivalent
38
+ // of the C++ *Descriptor objects, and fix up all circular references
39
+ // within these objects.
40
+ //
41
+ // Note that the runtime performance of protocol message classes created in
42
+ // this way is expected to be lousy. The plan is to create an alternate
43
+ // generator that outputs a Python/C extension module that lets
44
+ // performance-minded Python code leverage the fast C++ implementation
45
+ // directly.
46
+
47
+ #include <limits>
48
+ #include <map>
49
+ #include <utility>
50
+ #include <memory>
51
+ #include <string>
52
+ #include <vector>
53
+
54
+ #include <google/protobuf/compiler/python/python_generator.h>
55
+ #include <google/protobuf/descriptor.pb.h>
56
+
57
+ #include <google/protobuf/stubs/common.h>
58
+ #include <google/protobuf/stubs/stringprintf.h>
59
+ #include <google/protobuf/io/printer.h>
60
+ #include <google/protobuf/descriptor.h>
61
+ #include <google/protobuf/io/zero_copy_stream.h>
62
+ #include <google/protobuf/stubs/strutil.h>
63
+ #include <google/protobuf/stubs/substitute.h>
64
+
65
+ namespace google {
66
+ namespace protobuf {
67
+ namespace compiler {
68
+ namespace python {
69
+
70
+ namespace {
71
+
72
+ // Returns a copy of |filename| with any trailing ".protodevel" or ".proto
73
+ // suffix stripped.
74
+ // TODO(robinson): Unify with copy in compiler/cpp/internal/helpers.cc.
75
+ string StripProto(const string& filename) {
76
+ const char* suffix = HasSuffixString(filename, ".protodevel")
77
+ ? ".protodevel" : ".proto";
78
+ return StripSuffixString(filename, suffix);
79
+ }
80
+
81
+
82
+ // Returns the Python module name expected for a given .proto filename.
83
+ string ModuleName(const string& filename) {
84
+ string basename = StripProto(filename);
85
+ StripString(&basename, "-", '_');
86
+ StripString(&basename, "/", '.');
87
+ return basename + "_pb2";
88
+ }
89
+
90
+
91
+ // Returns the name of all containing types for descriptor,
92
+ // in order from outermost to innermost, followed by descriptor's
93
+ // own name. Each name is separated by |separator|.
94
+ template <typename DescriptorT>
95
+ string NamePrefixedWithNestedTypes(const DescriptorT& descriptor,
96
+ const string& separator) {
97
+ string name = descriptor.name();
98
+ for (const Descriptor* current = descriptor.containing_type();
99
+ current != NULL; current = current->containing_type()) {
100
+ name = current->name() + separator + name;
101
+ }
102
+ return name;
103
+ }
104
+
105
+
106
+ // Name of the class attribute where we store the Python
107
+ // descriptor.Descriptor instance for the generated class.
108
+ // Must stay consistent with the _DESCRIPTOR_KEY constant
109
+ // in proto2/public/reflection.py.
110
+ const char kDescriptorKey[] = "DESCRIPTOR";
111
+
112
+
113
+ // Does the file have top-level enums?
114
+ inline bool HasTopLevelEnums(const FileDescriptor *file) {
115
+ return file->enum_type_count() > 0;
116
+ }
117
+
118
+
119
+ // Should we generate generic services for this file?
120
+ inline bool HasGenericServices(const FileDescriptor *file) {
121
+ return file->service_count() > 0 &&
122
+ file->options().py_generic_services();
123
+ }
124
+
125
+
126
+ // Prints the common boilerplate needed at the top of every .py
127
+ // file output by this generator.
128
+ void PrintTopBoilerplate(
129
+ io::Printer* printer, const FileDescriptor* file, bool descriptor_proto) {
130
+ // TODO(robinson): Allow parameterization of Python version?
131
+ printer->Print(
132
+ "# Generated by the protocol buffer compiler. DO NOT EDIT!\n"
133
+ "# source: $filename$\n"
134
+ "\nimport sys\n_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))" //##PY25
135
+ "\n",
136
+ "filename", file->name());
137
+ if (HasTopLevelEnums(file)) {
138
+ printer->Print(
139
+ "from google.protobuf.internal import enum_type_wrapper\n");
140
+ }
141
+ printer->Print(
142
+ "from google.protobuf import descriptor as _descriptor\n"
143
+ "from google.protobuf import message as _message\n"
144
+ "from google.protobuf import reflection as _reflection\n"
145
+ "from google.protobuf import symbol_database as "
146
+ "_symbol_database\n");
147
+ if (HasGenericServices(file)) {
148
+ printer->Print(
149
+ "from google.protobuf import service as _service\n"
150
+ "from google.protobuf import service_reflection\n");
151
+ }
152
+
153
+ // Avoid circular imports if this module is descriptor_pb2.
154
+ if (!descriptor_proto) {
155
+ printer->Print(
156
+ "from google.protobuf import descriptor_pb2\n");
157
+ }
158
+ printer->Print(
159
+ "# @@protoc_insertion_point(imports)\n\n"
160
+ "_sym_db = _symbol_database.Default()\n");
161
+ printer->Print("\n\n");
162
+ }
163
+
164
+
165
+ // Returns a Python literal giving the default value for a field.
166
+ // If the field specifies no explicit default value, we'll return
167
+ // the default default value for the field type (zero for numbers,
168
+ // empty string for strings, empty list for repeated fields, and
169
+ // None for non-repeated, composite fields).
170
+ //
171
+ // TODO(robinson): Unify with code from
172
+ // //compiler/cpp/internal/primitive_field.cc
173
+ // //compiler/cpp/internal/enum_field.cc
174
+ // //compiler/cpp/internal/string_field.cc
175
+ string StringifyDefaultValue(const FieldDescriptor& field) {
176
+ if (field.is_repeated()) {
177
+ return "[]";
178
+ }
179
+
180
+ switch (field.cpp_type()) {
181
+ case FieldDescriptor::CPPTYPE_INT32:
182
+ return SimpleItoa(field.default_value_int32());
183
+ case FieldDescriptor::CPPTYPE_UINT32:
184
+ return SimpleItoa(field.default_value_uint32());
185
+ case FieldDescriptor::CPPTYPE_INT64:
186
+ return SimpleItoa(field.default_value_int64());
187
+ case FieldDescriptor::CPPTYPE_UINT64:
188
+ return SimpleItoa(field.default_value_uint64());
189
+ case FieldDescriptor::CPPTYPE_DOUBLE: {
190
+ double value = field.default_value_double();
191
+ if (value == numeric_limits<double>::infinity()) {
192
+ // Python pre-2.6 on Windows does not parse "inf" correctly. However,
193
+ // a numeric literal that is too big for a double will become infinity.
194
+ return "1e10000";
195
+ } else if (value == -numeric_limits<double>::infinity()) {
196
+ // See above.
197
+ return "-1e10000";
198
+ } else if (value != value) {
199
+ // infinity * 0 = nan
200
+ return "(1e10000 * 0)";
201
+ } else {
202
+ return SimpleDtoa(value);
203
+ }
204
+ }
205
+ case FieldDescriptor::CPPTYPE_FLOAT: {
206
+ float value = field.default_value_float();
207
+ if (value == numeric_limits<float>::infinity()) {
208
+ // Python pre-2.6 on Windows does not parse "inf" correctly. However,
209
+ // a numeric literal that is too big for a double will become infinity.
210
+ return "1e10000";
211
+ } else if (value == -numeric_limits<float>::infinity()) {
212
+ // See above.
213
+ return "-1e10000";
214
+ } else if (value != value) {
215
+ // infinity - infinity = nan
216
+ return "(1e10000 * 0)";
217
+ } else {
218
+ return SimpleFtoa(value);
219
+ }
220
+ }
221
+ case FieldDescriptor::CPPTYPE_BOOL:
222
+ return field.default_value_bool() ? "True" : "False";
223
+ case FieldDescriptor::CPPTYPE_ENUM:
224
+ return SimpleItoa(field.default_value_enum()->number());
225
+ case FieldDescriptor::CPPTYPE_STRING:
226
+ //##!PY25 return "b\"" + CEscape(field.default_value_string()) +
227
+ //##!PY25 (field.type() != FieldDescriptor::TYPE_STRING ? "\"" :
228
+ //##!PY25 "\".decode('utf-8')");
229
+ return "_b(\"" + CEscape(field.default_value_string()) + //##PY25
230
+ (field.type() != FieldDescriptor::TYPE_STRING ? "\")" : //##PY25
231
+ "\").decode('utf-8')"); //##PY25
232
+ case FieldDescriptor::CPPTYPE_MESSAGE:
233
+ return "None";
234
+ }
235
+ // (We could add a default case above but then we wouldn't get the nice
236
+ // compiler warning when a new type is added.)
237
+ GOOGLE_LOG(FATAL) << "Not reached.";
238
+ return "";
239
+ }
240
+
241
+
242
+
243
+ } // namespace
244
+
245
+
246
+ Generator::Generator() : file_(NULL) {
247
+ }
248
+
249
+ Generator::~Generator() {
250
+ }
251
+
252
+ bool Generator::Generate(const FileDescriptor* file,
253
+ const string& parameter,
254
+ GeneratorContext* context,
255
+ string* error) const {
256
+
257
+ // Completely serialize all Generate() calls on this instance. The
258
+ // thread-safety constraints of the CodeGenerator interface aren't clear so
259
+ // just be as conservative as possible. It's easier to relax this later if
260
+ // we need to, but I doubt it will be an issue.
261
+ // TODO(kenton): The proper thing to do would be to allocate any state on
262
+ // the stack and use that, so that the Generator class itself does not need
263
+ // to have any mutable members. Then it is implicitly thread-safe.
264
+ MutexLock lock(&mutex_);
265
+ file_ = file;
266
+ string module_name = ModuleName(file->name());
267
+ string filename = module_name;
268
+ StripString(&filename, ".", '/');
269
+ filename += ".py";
270
+
271
+ FileDescriptorProto fdp;
272
+ file_->CopyTo(&fdp);
273
+ fdp.SerializeToString(&file_descriptor_serialized_);
274
+
275
+
276
+ scoped_ptr<io::ZeroCopyOutputStream> output(context->Open(filename));
277
+ GOOGLE_CHECK(output.get());
278
+ io::Printer printer(output.get(), '$');
279
+ printer_ = &printer;
280
+
281
+ PrintTopBoilerplate(printer_, file_, GeneratingDescriptorProto());
282
+ PrintImports();
283
+ PrintFileDescriptor();
284
+ PrintTopLevelEnums();
285
+ PrintTopLevelExtensions();
286
+ PrintAllNestedEnumsInFile();
287
+ PrintMessageDescriptors();
288
+ FixForeignFieldsInDescriptors();
289
+ PrintMessages();
290
+ // We have to fix up the extensions after the message classes themselves,
291
+ // since they need to call static RegisterExtension() methods on these
292
+ // classes.
293
+ FixForeignFieldsInExtensions();
294
+ // Descriptor options may have custom extensions. These custom options
295
+ // can only be successfully parsed after we register corresponding
296
+ // extensions. Therefore we parse all options again here to recognize
297
+ // custom options that may be unknown when we define the descriptors.
298
+ FixAllDescriptorOptions();
299
+ if (HasGenericServices(file)) {
300
+ PrintServices();
301
+ }
302
+
303
+ printer.Print(
304
+ "# @@protoc_insertion_point(module_scope)\n");
305
+
306
+ return !printer.failed();
307
+ }
308
+
309
+ // Prints Python imports for all modules imported by |file|.
310
+ void Generator::PrintImports() const {
311
+ for (int i = 0; i < file_->dependency_count(); ++i) {
312
+ string module_name = ModuleName(file_->dependency(i)->name());
313
+ printer_->Print("import $module$\n", "module",
314
+ module_name);
315
+ }
316
+ printer_->Print("\n");
317
+
318
+ // Print public imports.
319
+ for (int i = 0; i < file_->public_dependency_count(); ++i) {
320
+ string module_name = ModuleName(file_->public_dependency(i)->name());
321
+ printer_->Print("from $module$ import *\n", "module", module_name);
322
+ }
323
+ printer_->Print("\n");
324
+ }
325
+
326
+ // Prints the single file descriptor for this file.
327
+ void Generator::PrintFileDescriptor() const {
328
+ map<string, string> m;
329
+ m["descriptor_name"] = kDescriptorKey;
330
+ m["name"] = file_->name();
331
+ m["package"] = file_->package();
332
+ const char file_descriptor_template[] =
333
+ "$descriptor_name$ = _descriptor.FileDescriptor(\n"
334
+ " name='$name$',\n"
335
+ " package='$package$',\n";
336
+ printer_->Print(m, file_descriptor_template);
337
+ printer_->Indent();
338
+ printer_->Print(
339
+ //##!PY25 "serialized_pb=b'$value$'\n",
340
+ "serialized_pb=_b('$value$')\n", //##PY25
341
+ "value", strings::CHexEscape(file_descriptor_serialized_));
342
+ if (file_->dependency_count() != 0) {
343
+ printer_->Print(",\ndependencies=[");
344
+ for (int i = 0; i < file_->dependency_count(); ++i) {
345
+ string module_name = ModuleName(file_->dependency(i)->name());
346
+ printer_->Print("$module_name$.DESCRIPTOR,", "module_name", module_name);
347
+ }
348
+ printer_->Print("]");
349
+ }
350
+
351
+ // TODO(falk): Also print options and fix the message_type, enum_type,
352
+ // service and extension later in the generation.
353
+
354
+ printer_->Outdent();
355
+ printer_->Print(")\n");
356
+ printer_->Print("_sym_db.RegisterFileDescriptor($name$)\n", "name",
357
+ kDescriptorKey);
358
+ printer_->Print("\n");
359
+ }
360
+
361
+ // Prints descriptors and module-level constants for all top-level
362
+ // enums defined in |file|.
363
+ void Generator::PrintTopLevelEnums() const {
364
+ vector<pair<string, int> > top_level_enum_values;
365
+ for (int i = 0; i < file_->enum_type_count(); ++i) {
366
+ const EnumDescriptor& enum_descriptor = *file_->enum_type(i);
367
+ PrintEnum(enum_descriptor);
368
+ printer_->Print("$name$ = "
369
+ "enum_type_wrapper.EnumTypeWrapper($descriptor_name$)",
370
+ "name", enum_descriptor.name(),
371
+ "descriptor_name",
372
+ ModuleLevelDescriptorName(enum_descriptor));
373
+ printer_->Print("\n");
374
+
375
+ for (int j = 0; j < enum_descriptor.value_count(); ++j) {
376
+ const EnumValueDescriptor& value_descriptor = *enum_descriptor.value(j);
377
+ top_level_enum_values.push_back(
378
+ make_pair(value_descriptor.name(), value_descriptor.number()));
379
+ }
380
+ }
381
+
382
+ for (int i = 0; i < top_level_enum_values.size(); ++i) {
383
+ printer_->Print("$name$ = $value$\n",
384
+ "name", top_level_enum_values[i].first,
385
+ "value", SimpleItoa(top_level_enum_values[i].second));
386
+ }
387
+ printer_->Print("\n");
388
+ }
389
+
390
+ // Prints all enums contained in all message types in |file|.
391
+ void Generator::PrintAllNestedEnumsInFile() const {
392
+ for (int i = 0; i < file_->message_type_count(); ++i) {
393
+ PrintNestedEnums(*file_->message_type(i));
394
+ }
395
+ }
396
+
397
+ // Prints a Python statement assigning the appropriate module-level
398
+ // enum name to a Python EnumDescriptor object equivalent to
399
+ // enum_descriptor.
400
+ void Generator::PrintEnum(const EnumDescriptor& enum_descriptor) const {
401
+ map<string, string> m;
402
+ string module_level_descriptor_name =
403
+ ModuleLevelDescriptorName(enum_descriptor);
404
+ m["descriptor_name"] = module_level_descriptor_name;
405
+ m["name"] = enum_descriptor.name();
406
+ m["full_name"] = enum_descriptor.full_name();
407
+ m["file"] = kDescriptorKey;
408
+ const char enum_descriptor_template[] =
409
+ "$descriptor_name$ = _descriptor.EnumDescriptor(\n"
410
+ " name='$name$',\n"
411
+ " full_name='$full_name$',\n"
412
+ " filename=None,\n"
413
+ " file=$file$,\n"
414
+ " values=[\n";
415
+ string options_string;
416
+ enum_descriptor.options().SerializeToString(&options_string);
417
+ printer_->Print(m, enum_descriptor_template);
418
+ printer_->Indent();
419
+ printer_->Indent();
420
+ for (int i = 0; i < enum_descriptor.value_count(); ++i) {
421
+ PrintEnumValueDescriptor(*enum_descriptor.value(i));
422
+ printer_->Print(",\n");
423
+ }
424
+ printer_->Outdent();
425
+ printer_->Print("],\n");
426
+ printer_->Print("containing_type=None,\n");
427
+ printer_->Print("options=$options_value$,\n",
428
+ "options_value",
429
+ OptionsValue("EnumOptions", options_string));
430
+ EnumDescriptorProto edp;
431
+ PrintSerializedPbInterval(enum_descriptor, edp);
432
+ printer_->Outdent();
433
+ printer_->Print(")\n");
434
+ printer_->Print("_sym_db.RegisterEnumDescriptor($name$)\n", "name",
435
+ module_level_descriptor_name);
436
+ printer_->Print("\n");
437
+ }
438
+
439
+ // Recursively prints enums in nested types within descriptor, then
440
+ // prints enums contained at the top level in descriptor.
441
+ void Generator::PrintNestedEnums(const Descriptor& descriptor) const {
442
+ for (int i = 0; i < descriptor.nested_type_count(); ++i) {
443
+ PrintNestedEnums(*descriptor.nested_type(i));
444
+ }
445
+
446
+ for (int i = 0; i < descriptor.enum_type_count(); ++i) {
447
+ PrintEnum(*descriptor.enum_type(i));
448
+ }
449
+ }
450
+
451
+ void Generator::PrintTopLevelExtensions() const {
452
+ const bool is_extension = true;
453
+ for (int i = 0; i < file_->extension_count(); ++i) {
454
+ const FieldDescriptor& extension_field = *file_->extension(i);
455
+ string constant_name = extension_field.name() + "_FIELD_NUMBER";
456
+ UpperString(&constant_name);
457
+ printer_->Print("$constant_name$ = $number$\n",
458
+ "constant_name", constant_name,
459
+ "number", SimpleItoa(extension_field.number()));
460
+ printer_->Print("$name$ = ", "name", extension_field.name());
461
+ PrintFieldDescriptor(extension_field, is_extension);
462
+ printer_->Print("\n");
463
+ }
464
+ printer_->Print("\n");
465
+ }
466
+
467
+ // Prints Python equivalents of all Descriptors in |file|.
468
+ void Generator::PrintMessageDescriptors() const {
469
+ for (int i = 0; i < file_->message_type_count(); ++i) {
470
+ PrintDescriptor(*file_->message_type(i));
471
+ printer_->Print("\n");
472
+ }
473
+ }
474
+
475
+ void Generator::PrintServices() const {
476
+ for (int i = 0; i < file_->service_count(); ++i) {
477
+ PrintServiceDescriptor(*file_->service(i));
478
+ PrintServiceClass(*file_->service(i));
479
+ PrintServiceStub(*file_->service(i));
480
+ printer_->Print("\n");
481
+ }
482
+ }
483
+
484
+ void Generator::PrintServiceDescriptor(
485
+ const ServiceDescriptor& descriptor) const {
486
+ printer_->Print("\n");
487
+ string service_name = ModuleLevelServiceDescriptorName(descriptor);
488
+ string options_string;
489
+ descriptor.options().SerializeToString(&options_string);
490
+
491
+ printer_->Print(
492
+ "$service_name$ = _descriptor.ServiceDescriptor(\n",
493
+ "service_name", service_name);
494
+ printer_->Indent();
495
+ map<string, string> m;
496
+ m["name"] = descriptor.name();
497
+ m["full_name"] = descriptor.full_name();
498
+ m["file"] = kDescriptorKey;
499
+ m["index"] = SimpleItoa(descriptor.index());
500
+ m["options_value"] = OptionsValue("ServiceOptions", options_string);
501
+ const char required_function_arguments[] =
502
+ "name='$name$',\n"
503
+ "full_name='$full_name$',\n"
504
+ "file=$file$,\n"
505
+ "index=$index$,\n"
506
+ "options=$options_value$,\n";
507
+ printer_->Print(m, required_function_arguments);
508
+
509
+ ServiceDescriptorProto sdp;
510
+ PrintSerializedPbInterval(descriptor, sdp);
511
+
512
+ printer_->Print("methods=[\n");
513
+ for (int i = 0; i < descriptor.method_count(); ++i) {
514
+ const MethodDescriptor* method = descriptor.method(i);
515
+ method->options().SerializeToString(&options_string);
516
+
517
+ m.clear();
518
+ m["name"] = method->name();
519
+ m["full_name"] = method->full_name();
520
+ m["index"] = SimpleItoa(method->index());
521
+ m["serialized_options"] = CEscape(options_string);
522
+ m["input_type"] = ModuleLevelDescriptorName(*(method->input_type()));
523
+ m["output_type"] = ModuleLevelDescriptorName(*(method->output_type()));
524
+ m["options_value"] = OptionsValue("MethodOptions", options_string);
525
+ printer_->Print("_descriptor.MethodDescriptor(\n");
526
+ printer_->Indent();
527
+ printer_->Print(
528
+ m,
529
+ "name='$name$',\n"
530
+ "full_name='$full_name$',\n"
531
+ "index=$index$,\n"
532
+ "containing_service=None,\n"
533
+ "input_type=$input_type$,\n"
534
+ "output_type=$output_type$,\n"
535
+ "options=$options_value$,\n");
536
+ printer_->Outdent();
537
+ printer_->Print("),\n");
538
+ }
539
+
540
+ printer_->Outdent();
541
+ printer_->Print("])\n\n");
542
+ }
543
+
544
+ void Generator::PrintServiceClass(const ServiceDescriptor& descriptor) const {
545
+ // Print the service.
546
+ printer_->Print("$class_name$ = service_reflection.GeneratedServiceType("
547
+ "'$class_name$', (_service.Service,), dict(\n",
548
+ "class_name", descriptor.name());
549
+ printer_->Indent();
550
+ printer_->Print(
551
+ "$descriptor_key$ = $descriptor_name$,\n",
552
+ "descriptor_key", kDescriptorKey,
553
+ "descriptor_name", ModuleLevelServiceDescriptorName(descriptor));
554
+ printer_->Print(
555
+ "__module__ = '$module_name$'\n",
556
+ "module_name", ModuleName(file_->name()));
557
+ printer_->Print("))\n\n");
558
+ printer_->Outdent();
559
+ }
560
+
561
+ void Generator::PrintServiceStub(const ServiceDescriptor& descriptor) const {
562
+ // Print the service stub.
563
+ printer_->Print("$class_name$_Stub = "
564
+ "service_reflection.GeneratedServiceStubType("
565
+ "'$class_name$_Stub', ($class_name$,), dict(\n",
566
+ "class_name", descriptor.name());
567
+ printer_->Indent();
568
+ printer_->Print(
569
+ "$descriptor_key$ = $descriptor_name$,\n",
570
+ "descriptor_key", kDescriptorKey,
571
+ "descriptor_name", ModuleLevelServiceDescriptorName(descriptor));
572
+ printer_->Print(
573
+ "__module__ = '$module_name$'\n",
574
+ "module_name", ModuleName(file_->name()));
575
+ printer_->Print("))\n\n");
576
+ printer_->Outdent();
577
+ }
578
+
579
+ // Prints statement assigning ModuleLevelDescriptorName(message_descriptor)
580
+ // to a Python Descriptor object for message_descriptor.
581
+ //
582
+ // Mutually recursive with PrintNestedDescriptors().
583
+ void Generator::PrintDescriptor(const Descriptor& message_descriptor) const {
584
+ PrintNestedDescriptors(message_descriptor);
585
+
586
+ printer_->Print("\n");
587
+ printer_->Print("$descriptor_name$ = _descriptor.Descriptor(\n",
588
+ "descriptor_name",
589
+ ModuleLevelDescriptorName(message_descriptor));
590
+ printer_->Indent();
591
+ map<string, string> m;
592
+ m["name"] = message_descriptor.name();
593
+ m["full_name"] = message_descriptor.full_name();
594
+ m["file"] = kDescriptorKey;
595
+ const char required_function_arguments[] =
596
+ "name='$name$',\n"
597
+ "full_name='$full_name$',\n"
598
+ "filename=None,\n"
599
+ "file=$file$,\n"
600
+ "containing_type=None,\n";
601
+ printer_->Print(m, required_function_arguments);
602
+ PrintFieldsInDescriptor(message_descriptor);
603
+ PrintExtensionsInDescriptor(message_descriptor);
604
+
605
+ // Nested types
606
+ printer_->Print("nested_types=[");
607
+ for (int i = 0; i < message_descriptor.nested_type_count(); ++i) {
608
+ const string nested_name = ModuleLevelDescriptorName(
609
+ *message_descriptor.nested_type(i));
610
+ printer_->Print("$name$, ", "name", nested_name);
611
+ }
612
+ printer_->Print("],\n");
613
+
614
+ // Enum types
615
+ printer_->Print("enum_types=[\n");
616
+ printer_->Indent();
617
+ for (int i = 0; i < message_descriptor.enum_type_count(); ++i) {
618
+ const string descriptor_name = ModuleLevelDescriptorName(
619
+ *message_descriptor.enum_type(i));
620
+ printer_->Print(descriptor_name.c_str());
621
+ printer_->Print(",\n");
622
+ }
623
+ printer_->Outdent();
624
+ printer_->Print("],\n");
625
+ string options_string;
626
+ message_descriptor.options().SerializeToString(&options_string);
627
+ printer_->Print(
628
+ "options=$options_value$,\n"
629
+ "is_extendable=$extendable$",
630
+ "options_value", OptionsValue("MessageOptions", options_string),
631
+ "extendable", message_descriptor.extension_range_count() > 0 ?
632
+ "True" : "False");
633
+ printer_->Print(",\n");
634
+
635
+ // Extension ranges
636
+ printer_->Print("extension_ranges=[");
637
+ for (int i = 0; i < message_descriptor.extension_range_count(); ++i) {
638
+ const Descriptor::ExtensionRange* range =
639
+ message_descriptor.extension_range(i);
640
+ printer_->Print("($start$, $end$), ",
641
+ "start", SimpleItoa(range->start),
642
+ "end", SimpleItoa(range->end));
643
+ }
644
+ printer_->Print("],\n");
645
+ printer_->Print("oneofs=[\n");
646
+ printer_->Indent();
647
+ for (int i = 0; i < message_descriptor.oneof_decl_count(); ++i) {
648
+ const OneofDescriptor* desc = message_descriptor.oneof_decl(i);
649
+ map<string, string> m;
650
+ m["name"] = desc->name();
651
+ m["full_name"] = desc->full_name();
652
+ m["index"] = SimpleItoa(desc->index());
653
+ printer_->Print(
654
+ m,
655
+ "_descriptor.OneofDescriptor(\n"
656
+ " name='$name$', full_name='$full_name$',\n"
657
+ " index=$index$, containing_type=None, fields=[]),\n");
658
+ }
659
+ printer_->Outdent();
660
+ printer_->Print("],\n");
661
+ // Serialization of proto
662
+ DescriptorProto edp;
663
+ PrintSerializedPbInterval(message_descriptor, edp);
664
+
665
+ printer_->Outdent();
666
+ printer_->Print(")\n");
667
+ }
668
+
669
+ // Prints Python Descriptor objects for all nested types contained in
670
+ // message_descriptor.
671
+ //
672
+ // Mutually recursive with PrintDescriptor().
673
+ void Generator::PrintNestedDescriptors(
674
+ const Descriptor& containing_descriptor) const {
675
+ for (int i = 0; i < containing_descriptor.nested_type_count(); ++i) {
676
+ PrintDescriptor(*containing_descriptor.nested_type(i));
677
+ }
678
+ }
679
+
680
+ // Prints all messages in |file|.
681
+ void Generator::PrintMessages() const {
682
+ for (int i = 0; i < file_->message_type_count(); ++i) {
683
+ vector<string> to_register;
684
+ PrintMessage(*file_->message_type(i), "", &to_register);
685
+ for (int j = 0; j < to_register.size(); ++j) {
686
+ printer_->Print("_sym_db.RegisterMessage($name$)\n", "name",
687
+ to_register[j]);
688
+ }
689
+ printer_->Print("\n");
690
+ }
691
+ }
692
+
693
+ // Prints a Python class for the given message descriptor. We defer to the
694
+ // metaclass to do almost all of the work of actually creating a useful class.
695
+ // The purpose of this function and its many helper functions above is merely
696
+ // to output a Python version of the descriptors, which the metaclass in
697
+ // reflection.py will use to construct the meat of the class itself.
698
+ //
699
+ // Mutually recursive with PrintNestedMessages().
700
+ // Collect nested message names to_register for the symbol_database.
701
+ void Generator::PrintMessage(const Descriptor& message_descriptor,
702
+ const string& prefix,
703
+ vector<string>* to_register) const {
704
+ string qualified_name(prefix + message_descriptor.name());
705
+ to_register->push_back(qualified_name);
706
+ printer_->Print(
707
+ "$name$ = _reflection.GeneratedProtocolMessageType('$name$', "
708
+ "(_message.Message,), dict(\n",
709
+ "name", message_descriptor.name());
710
+ printer_->Indent();
711
+
712
+ PrintNestedMessages(message_descriptor, qualified_name + ".", to_register);
713
+ map<string, string> m;
714
+ m["descriptor_key"] = kDescriptorKey;
715
+ m["descriptor_name"] = ModuleLevelDescriptorName(message_descriptor);
716
+ printer_->Print(m, "$descriptor_key$ = $descriptor_name$,\n");
717
+ printer_->Print("__module__ = '$module_name$'\n",
718
+ "module_name", ModuleName(file_->name()));
719
+ printer_->Print("# @@protoc_insertion_point(class_scope:$full_name$)\n",
720
+ "full_name", message_descriptor.full_name());
721
+ printer_->Print("))\n");
722
+ printer_->Outdent();
723
+ }
724
+
725
+ // Prints all nested messages within |containing_descriptor|.
726
+ // Mutually recursive with PrintMessage().
727
+ void Generator::PrintNestedMessages(const Descriptor& containing_descriptor,
728
+ const string& prefix,
729
+ vector<string>* to_register) const {
730
+ for (int i = 0; i < containing_descriptor.nested_type_count(); ++i) {
731
+ printer_->Print("\n");
732
+ PrintMessage(*containing_descriptor.nested_type(i), prefix, to_register);
733
+ printer_->Print(",\n");
734
+ }
735
+ }
736
+
737
+ // Recursively fixes foreign fields in all nested types in |descriptor|, then
738
+ // sets the message_type and enum_type of all message and enum fields to point
739
+ // to their respective descriptors.
740
+ // Args:
741
+ // descriptor: descriptor to print fields for.
742
+ // containing_descriptor: if descriptor is a nested type, this is its
743
+ // containing type, or NULL if this is a root/top-level type.
744
+ void Generator::FixForeignFieldsInDescriptor(
745
+ const Descriptor& descriptor,
746
+ const Descriptor* containing_descriptor) const {
747
+ for (int i = 0; i < descriptor.nested_type_count(); ++i) {
748
+ FixForeignFieldsInDescriptor(*descriptor.nested_type(i), &descriptor);
749
+ }
750
+
751
+ for (int i = 0; i < descriptor.field_count(); ++i) {
752
+ const FieldDescriptor& field_descriptor = *descriptor.field(i);
753
+ FixForeignFieldsInField(&descriptor, field_descriptor, "fields_by_name");
754
+ }
755
+
756
+ FixContainingTypeInDescriptor(descriptor, containing_descriptor);
757
+ for (int i = 0; i < descriptor.enum_type_count(); ++i) {
758
+ const EnumDescriptor& enum_descriptor = *descriptor.enum_type(i);
759
+ FixContainingTypeInDescriptor(enum_descriptor, &descriptor);
760
+ }
761
+ for (int i = 0; i < descriptor.oneof_decl_count(); ++i) {
762
+ map<string, string> m;
763
+ const OneofDescriptor* oneof = descriptor.oneof_decl(i);
764
+ m["descriptor_name"] = ModuleLevelDescriptorName(descriptor);
765
+ m["oneof_name"] = oneof->name();
766
+ for (int j = 0; j < oneof->field_count(); ++j) {
767
+ m["field_name"] = oneof->field(j)->name();
768
+ printer_->Print(
769
+ m,
770
+ "$descriptor_name$.oneofs_by_name['$oneof_name$'].fields.append(\n"
771
+ " $descriptor_name$.fields_by_name['$field_name$'])\n");
772
+ printer_->Print(
773
+ m,
774
+ "$descriptor_name$.fields_by_name['$field_name$'].containing_oneof = "
775
+ "$descriptor_name$.oneofs_by_name['$oneof_name$']\n");
776
+ }
777
+ }
778
+ }
779
+
780
+ void Generator::AddMessageToFileDescriptor(const Descriptor& descriptor) const {
781
+ map<string, string> m;
782
+ m["descriptor_name"] = kDescriptorKey;
783
+ m["message_name"] = descriptor.name();
784
+ m["message_descriptor_name"] = ModuleLevelDescriptorName(descriptor);
785
+ const char file_descriptor_template[] =
786
+ "$descriptor_name$.message_types_by_name['$message_name$'] = "
787
+ "$message_descriptor_name$\n";
788
+ printer_->Print(m, file_descriptor_template);
789
+ }
790
+
791
+ void Generator::AddEnumToFileDescriptor(
792
+ const EnumDescriptor& descriptor) const {
793
+ map<string, string> m;
794
+ m["descriptor_name"] = kDescriptorKey;
795
+ m["enum_name"] = descriptor.name();
796
+ m["enum_descriptor_name"] = ModuleLevelDescriptorName(descriptor);
797
+ const char file_descriptor_template[] =
798
+ "$descriptor_name$.enum_types_by_name['$enum_name$'] = "
799
+ "$enum_descriptor_name$\n";
800
+ printer_->Print(m, file_descriptor_template);
801
+ }
802
+
803
+ void Generator::AddExtensionToFileDescriptor(
804
+ const FieldDescriptor& descriptor) const {
805
+ map<string, string> m;
806
+ m["descriptor_name"] = kDescriptorKey;
807
+ m["field_name"] = descriptor.name();
808
+ const char file_descriptor_template[] =
809
+ "$descriptor_name$.extensions_by_name['$field_name$'] = "
810
+ "$field_name$\n";
811
+ printer_->Print(m, file_descriptor_template);
812
+ }
813
+
814
+ // Sets any necessary message_type and enum_type attributes
815
+ // for the Python version of |field|.
816
+ //
817
+ // containing_type may be NULL, in which case this is a module-level field.
818
+ //
819
+ // python_dict_name is the name of the Python dict where we should
820
+ // look the field up in the containing type. (e.g., fields_by_name
821
+ // or extensions_by_name). We ignore python_dict_name if containing_type
822
+ // is NULL.
823
+ void Generator::FixForeignFieldsInField(const Descriptor* containing_type,
824
+ const FieldDescriptor& field,
825
+ const string& python_dict_name) const {
826
+ const string field_referencing_expression = FieldReferencingExpression(
827
+ containing_type, field, python_dict_name);
828
+ map<string, string> m;
829
+ m["field_ref"] = field_referencing_expression;
830
+ const Descriptor* foreign_message_type = field.message_type();
831
+ if (foreign_message_type) {
832
+ m["foreign_type"] = ModuleLevelDescriptorName(*foreign_message_type);
833
+ printer_->Print(m, "$field_ref$.message_type = $foreign_type$\n");
834
+ }
835
+ const EnumDescriptor* enum_type = field.enum_type();
836
+ if (enum_type) {
837
+ m["enum_type"] = ModuleLevelDescriptorName(*enum_type);
838
+ printer_->Print(m, "$field_ref$.enum_type = $enum_type$\n");
839
+ }
840
+ }
841
+
842
+ // Returns the module-level expression for the given FieldDescriptor.
843
+ // Only works for fields in the .proto file this Generator is generating for.
844
+ //
845
+ // containing_type may be NULL, in which case this is a module-level field.
846
+ //
847
+ // python_dict_name is the name of the Python dict where we should
848
+ // look the field up in the containing type. (e.g., fields_by_name
849
+ // or extensions_by_name). We ignore python_dict_name if containing_type
850
+ // is NULL.
851
+ string Generator::FieldReferencingExpression(
852
+ const Descriptor* containing_type,
853
+ const FieldDescriptor& field,
854
+ const string& python_dict_name) const {
855
+ // We should only ever be looking up fields in the current file.
856
+ // The only things we refer to from other files are message descriptors.
857
+ GOOGLE_CHECK_EQ(field.file(), file_) << field.file()->name() << " vs. "
858
+ << file_->name();
859
+ if (!containing_type) {
860
+ return field.name();
861
+ }
862
+ return strings::Substitute(
863
+ "$0.$1['$2']",
864
+ ModuleLevelDescriptorName(*containing_type),
865
+ python_dict_name, field.name());
866
+ }
867
+
868
+ // Prints containing_type for nested descriptors or enum descriptors.
869
+ template <typename DescriptorT>
870
+ void Generator::FixContainingTypeInDescriptor(
871
+ const DescriptorT& descriptor,
872
+ const Descriptor* containing_descriptor) const {
873
+ if (containing_descriptor != NULL) {
874
+ const string nested_name = ModuleLevelDescriptorName(descriptor);
875
+ const string parent_name = ModuleLevelDescriptorName(
876
+ *containing_descriptor);
877
+ printer_->Print(
878
+ "$nested_name$.containing_type = $parent_name$\n",
879
+ "nested_name", nested_name,
880
+ "parent_name", parent_name);
881
+ }
882
+ }
883
+
884
+ // Prints statements setting the message_type and enum_type fields in the
885
+ // Python descriptor objects we've already output in ths file. We must
886
+ // do this in a separate step due to circular references (otherwise, we'd
887
+ // just set everything in the initial assignment statements).
888
+ void Generator::FixForeignFieldsInDescriptors() const {
889
+ for (int i = 0; i < file_->message_type_count(); ++i) {
890
+ FixForeignFieldsInDescriptor(*file_->message_type(i), NULL);
891
+ }
892
+ for (int i = 0; i < file_->message_type_count(); ++i) {
893
+ AddMessageToFileDescriptor(*file_->message_type(i));
894
+ }
895
+ for (int i = 0; i < file_->enum_type_count(); ++i) {
896
+ AddEnumToFileDescriptor(*file_->enum_type(i));
897
+ }
898
+ for (int i = 0; i < file_->extension_count(); ++i) {
899
+ AddExtensionToFileDescriptor(*file_->extension(i));
900
+ }
901
+ printer_->Print("\n");
902
+ }
903
+
904
+ // We need to not only set any necessary message_type fields, but
905
+ // also need to call RegisterExtension() on each message we're
906
+ // extending.
907
+ void Generator::FixForeignFieldsInExtensions() const {
908
+ // Top-level extensions.
909
+ for (int i = 0; i < file_->extension_count(); ++i) {
910
+ FixForeignFieldsInExtension(*file_->extension(i));
911
+ }
912
+ // Nested extensions.
913
+ for (int i = 0; i < file_->message_type_count(); ++i) {
914
+ FixForeignFieldsInNestedExtensions(*file_->message_type(i));
915
+ }
916
+ printer_->Print("\n");
917
+ }
918
+
919
+ void Generator::FixForeignFieldsInExtension(
920
+ const FieldDescriptor& extension_field) const {
921
+ GOOGLE_CHECK(extension_field.is_extension());
922
+ // extension_scope() will be NULL for top-level extensions, which is
923
+ // exactly what FixForeignFieldsInField() wants.
924
+ FixForeignFieldsInField(extension_field.extension_scope(), extension_field,
925
+ "extensions_by_name");
926
+
927
+ map<string, string> m;
928
+ // Confusingly, for FieldDescriptors that happen to be extensions,
929
+ // containing_type() means "extended type."
930
+ // On the other hand, extension_scope() will give us what we normally
931
+ // mean by containing_type().
932
+ m["extended_message_class"] = ModuleLevelMessageName(
933
+ *extension_field.containing_type());
934
+ m["field"] = FieldReferencingExpression(extension_field.extension_scope(),
935
+ extension_field,
936
+ "extensions_by_name");
937
+ printer_->Print(m, "$extended_message_class$.RegisterExtension($field$)\n");
938
+ }
939
+
940
+ void Generator::FixForeignFieldsInNestedExtensions(
941
+ const Descriptor& descriptor) const {
942
+ // Recursively fix up extensions in all nested types.
943
+ for (int i = 0; i < descriptor.nested_type_count(); ++i) {
944
+ FixForeignFieldsInNestedExtensions(*descriptor.nested_type(i));
945
+ }
946
+ // Fix up extensions directly contained within this type.
947
+ for (int i = 0; i < descriptor.extension_count(); ++i) {
948
+ FixForeignFieldsInExtension(*descriptor.extension(i));
949
+ }
950
+ }
951
+
952
+ // Returns a Python expression that instantiates a Python EnumValueDescriptor
953
+ // object for the given C++ descriptor.
954
+ void Generator::PrintEnumValueDescriptor(
955
+ const EnumValueDescriptor& descriptor) const {
956
+ // TODO(robinson): Fix up EnumValueDescriptor "type" fields.
957
+ // More circular references. ::sigh::
958
+ string options_string;
959
+ descriptor.options().SerializeToString(&options_string);
960
+ map<string, string> m;
961
+ m["name"] = descriptor.name();
962
+ m["index"] = SimpleItoa(descriptor.index());
963
+ m["number"] = SimpleItoa(descriptor.number());
964
+ m["options"] = OptionsValue("EnumValueOptions", options_string);
965
+ printer_->Print(
966
+ m,
967
+ "_descriptor.EnumValueDescriptor(\n"
968
+ " name='$name$', index=$index$, number=$number$,\n"
969
+ " options=$options$,\n"
970
+ " type=None)");
971
+ }
972
+
973
+ // Returns a Python expression that calls descriptor._ParseOptions using
974
+ // the given descriptor class name and serialized options protobuf string.
975
+ string Generator::OptionsValue(
976
+ const string& class_name, const string& serialized_options) const {
977
+ if (serialized_options.length() == 0 || GeneratingDescriptorProto()) {
978
+ return "None";
979
+ } else {
980
+ string full_class_name = "descriptor_pb2." + class_name;
981
+ //##!PY25 return "_descriptor._ParseOptions(" + full_class_name + "(), b'"
982
+ //##!PY25 + CEscape(serialized_options)+ "')";
983
+ return "_descriptor._ParseOptions(" + full_class_name + "(), _b('" //##PY25
984
+ + CEscape(serialized_options)+ "'))"; //##PY25
985
+ }
986
+ }
987
+
988
+ // Prints an expression for a Python FieldDescriptor for |field|.
989
+ void Generator::PrintFieldDescriptor(
990
+ const FieldDescriptor& field, bool is_extension) const {
991
+ string options_string;
992
+ field.options().SerializeToString(&options_string);
993
+ map<string, string> m;
994
+ m["name"] = field.name();
995
+ m["full_name"] = field.full_name();
996
+ m["index"] = SimpleItoa(field.index());
997
+ m["number"] = SimpleItoa(field.number());
998
+ m["type"] = SimpleItoa(field.type());
999
+ m["cpp_type"] = SimpleItoa(field.cpp_type());
1000
+ m["label"] = SimpleItoa(field.label());
1001
+ m["has_default_value"] = field.has_default_value() ? "True" : "False";
1002
+ m["default_value"] = StringifyDefaultValue(field);
1003
+ m["is_extension"] = is_extension ? "True" : "False";
1004
+ m["options"] = OptionsValue("FieldOptions", options_string);
1005
+ // We always set message_type and enum_type to None at this point, and then
1006
+ // these fields in correctly after all referenced descriptors have been
1007
+ // defined and/or imported (see FixForeignFieldsInDescriptors()).
1008
+ const char field_descriptor_decl[] =
1009
+ "_descriptor.FieldDescriptor(\n"
1010
+ " name='$name$', full_name='$full_name$', index=$index$,\n"
1011
+ " number=$number$, type=$type$, cpp_type=$cpp_type$, label=$label$,\n"
1012
+ " has_default_value=$has_default_value$, default_value=$default_value$,\n"
1013
+ " message_type=None, enum_type=None, containing_type=None,\n"
1014
+ " is_extension=$is_extension$, extension_scope=None,\n"
1015
+ " options=$options$)";
1016
+ printer_->Print(m, field_descriptor_decl);
1017
+ }
1018
+
1019
+ // Helper for Print{Fields,Extensions}InDescriptor().
1020
+ void Generator::PrintFieldDescriptorsInDescriptor(
1021
+ const Descriptor& message_descriptor,
1022
+ bool is_extension,
1023
+ const string& list_variable_name,
1024
+ int (Descriptor::*CountFn)() const,
1025
+ const FieldDescriptor* (Descriptor::*GetterFn)(int) const) const {
1026
+ printer_->Print("$list$=[\n", "list", list_variable_name);
1027
+ printer_->Indent();
1028
+ for (int i = 0; i < (message_descriptor.*CountFn)(); ++i) {
1029
+ PrintFieldDescriptor(*(message_descriptor.*GetterFn)(i),
1030
+ is_extension);
1031
+ printer_->Print(",\n");
1032
+ }
1033
+ printer_->Outdent();
1034
+ printer_->Print("],\n");
1035
+ }
1036
+
1037
+ // Prints a statement assigning "fields" to a list of Python FieldDescriptors,
1038
+ // one for each field present in message_descriptor.
1039
+ void Generator::PrintFieldsInDescriptor(
1040
+ const Descriptor& message_descriptor) const {
1041
+ const bool is_extension = false;
1042
+ PrintFieldDescriptorsInDescriptor(
1043
+ message_descriptor, is_extension, "fields",
1044
+ &Descriptor::field_count, &Descriptor::field);
1045
+ }
1046
+
1047
+ // Prints a statement assigning "extensions" to a list of Python
1048
+ // FieldDescriptors, one for each extension present in message_descriptor.
1049
+ void Generator::PrintExtensionsInDescriptor(
1050
+ const Descriptor& message_descriptor) const {
1051
+ const bool is_extension = true;
1052
+ PrintFieldDescriptorsInDescriptor(
1053
+ message_descriptor, is_extension, "extensions",
1054
+ &Descriptor::extension_count, &Descriptor::extension);
1055
+ }
1056
+
1057
+ bool Generator::GeneratingDescriptorProto() const {
1058
+ return file_->name() == "google/protobuf/descriptor.proto";
1059
+ }
1060
+
1061
+ // Returns the unique Python module-level identifier given to a descriptor.
1062
+ // This name is module-qualified iff the given descriptor describes an
1063
+ // entity that doesn't come from the current file.
1064
+ template <typename DescriptorT>
1065
+ string Generator::ModuleLevelDescriptorName(
1066
+ const DescriptorT& descriptor) const {
1067
+ // FIXME(robinson):
1068
+ // We currently don't worry about collisions with underscores in the type
1069
+ // names, so these would collide in nasty ways if found in the same file:
1070
+ // OuterProto.ProtoA.ProtoB
1071
+ // OuterProto_ProtoA.ProtoB # Underscore instead of period.
1072
+ // As would these:
1073
+ // OuterProto.ProtoA_.ProtoB
1074
+ // OuterProto.ProtoA._ProtoB # Leading vs. trailing underscore.
1075
+ // (Contrived, but certainly possible).
1076
+ //
1077
+ // The C++ implementation doesn't guard against this either. Leaving
1078
+ // it for now...
1079
+ string name = NamePrefixedWithNestedTypes(descriptor, "_");
1080
+ UpperString(&name);
1081
+ // Module-private for now. Easy to make public later; almost impossible
1082
+ // to make private later.
1083
+ name = "_" + name;
1084
+ // We now have the name relative to its own module. Also qualify with
1085
+ // the module name iff this descriptor is from a different .proto file.
1086
+ if (descriptor.file() != file_) {
1087
+ name = ModuleName(descriptor.file()->name()) + "." + name;
1088
+ }
1089
+ return name;
1090
+ }
1091
+
1092
+ // Returns the name of the message class itself, not the descriptor.
1093
+ // Like ModuleLevelDescriptorName(), module-qualifies the name iff
1094
+ // the given descriptor describes an entity that doesn't come from
1095
+ // the current file.
1096
+ string Generator::ModuleLevelMessageName(const Descriptor& descriptor) const {
1097
+ string name = NamePrefixedWithNestedTypes(descriptor, ".");
1098
+ if (descriptor.file() != file_) {
1099
+ name = ModuleName(descriptor.file()->name()) + "." + name;
1100
+ }
1101
+ return name;
1102
+ }
1103
+
1104
+ // Returns the unique Python module-level identifier given to a service
1105
+ // descriptor.
1106
+ string Generator::ModuleLevelServiceDescriptorName(
1107
+ const ServiceDescriptor& descriptor) const {
1108
+ string name = descriptor.name();
1109
+ UpperString(&name);
1110
+ name = "_" + name;
1111
+ if (descriptor.file() != file_) {
1112
+ name = ModuleName(descriptor.file()->name()) + "." + name;
1113
+ }
1114
+ return name;
1115
+ }
1116
+
1117
+ // Prints standard constructor arguments serialized_start and serialized_end.
1118
+ // Args:
1119
+ // descriptor: The cpp descriptor to have a serialized reference.
1120
+ // proto: A proto
1121
+ // Example printer output:
1122
+ // serialized_start=41,
1123
+ // serialized_end=43,
1124
+ //
1125
+ template <typename DescriptorT, typename DescriptorProtoT>
1126
+ void Generator::PrintSerializedPbInterval(
1127
+ const DescriptorT& descriptor, DescriptorProtoT& proto) const {
1128
+ descriptor.CopyTo(&proto);
1129
+ string sp;
1130
+ proto.SerializeToString(&sp);
1131
+ int offset = file_descriptor_serialized_.find(sp);
1132
+ GOOGLE_CHECK_GE(offset, 0);
1133
+
1134
+ printer_->Print("serialized_start=$serialized_start$,\n"
1135
+ "serialized_end=$serialized_end$,\n",
1136
+ "serialized_start", SimpleItoa(offset),
1137
+ "serialized_end", SimpleItoa(offset + sp.size()));
1138
+ }
1139
+
1140
+ namespace {
1141
+ void PrintDescriptorOptionsFixingCode(const string& descriptor,
1142
+ const string& options,
1143
+ io::Printer* printer) {
1144
+ // TODO(xiaofeng): I have added a method _SetOptions() to DescriptorBase
1145
+ // in proto2 python runtime but it couldn't be used here because appengine
1146
+ // uses a snapshot version of the library in which the new method is not
1147
+ // yet present. After appengine has synced their runtime library, the code
1148
+ // below should be cleaned up to use _SetOptions().
1149
+ printer->Print(
1150
+ "$descriptor$.has_options = True\n"
1151
+ "$descriptor$._options = $options$\n",
1152
+ "descriptor", descriptor, "options", options);
1153
+ }
1154
+ } // namespace
1155
+
1156
+ // Prints expressions that set the options field of all descriptors.
1157
+ void Generator::FixAllDescriptorOptions() const {
1158
+ // Prints an expression that sets the file descriptor's options.
1159
+ string file_options = OptionsValue(
1160
+ "FileOptions", file_->options().SerializeAsString());
1161
+ if (file_options != "None") {
1162
+ PrintDescriptorOptionsFixingCode(kDescriptorKey, file_options, printer_);
1163
+ }
1164
+ // Prints expressions that set the options for all top level enums.
1165
+ for (int i = 0; i < file_->enum_type_count(); ++i) {
1166
+ const EnumDescriptor& enum_descriptor = *file_->enum_type(i);
1167
+ FixOptionsForEnum(enum_descriptor);
1168
+ }
1169
+ // Prints expressions that set the options for all top level extensions.
1170
+ for (int i = 0; i < file_->extension_count(); ++i) {
1171
+ const FieldDescriptor& field = *file_->extension(i);
1172
+ FixOptionsForField(field);
1173
+ }
1174
+ // Prints expressions that set the options for all messages, nested enums,
1175
+ // nested extensions and message fields.
1176
+ for (int i = 0; i < file_->message_type_count(); ++i) {
1177
+ FixOptionsForMessage(*file_->message_type(i));
1178
+ }
1179
+ }
1180
+
1181
+ // Prints expressions that set the options for an enum descriptor and its
1182
+ // value descriptors.
1183
+ void Generator::FixOptionsForEnum(const EnumDescriptor& enum_descriptor) const {
1184
+ string descriptor_name = ModuleLevelDescriptorName(enum_descriptor);
1185
+ string enum_options = OptionsValue(
1186
+ "EnumOptions", enum_descriptor.options().SerializeAsString());
1187
+ if (enum_options != "None") {
1188
+ PrintDescriptorOptionsFixingCode(descriptor_name, enum_options, printer_);
1189
+ }
1190
+ for (int i = 0; i < enum_descriptor.value_count(); ++i) {
1191
+ const EnumValueDescriptor& value_descriptor = *enum_descriptor.value(i);
1192
+ string value_options = OptionsValue(
1193
+ "EnumValueOptions", value_descriptor.options().SerializeAsString());
1194
+ if (value_options != "None") {
1195
+ PrintDescriptorOptionsFixingCode(
1196
+ StringPrintf("%s.values_by_name[\"%s\"]", descriptor_name.c_str(),
1197
+ value_descriptor.name().c_str()),
1198
+ value_options, printer_);
1199
+ }
1200
+ }
1201
+ }
1202
+
1203
+ // Prints expressions that set the options for field descriptors (including
1204
+ // extensions).
1205
+ void Generator::FixOptionsForField(
1206
+ const FieldDescriptor& field) const {
1207
+ string field_options = OptionsValue(
1208
+ "FieldOptions", field.options().SerializeAsString());
1209
+ if (field_options != "None") {
1210
+ string field_name;
1211
+ if (field.is_extension()) {
1212
+ if (field.extension_scope() == NULL) {
1213
+ // Top level extensions.
1214
+ field_name = field.name();
1215
+ } else {
1216
+ field_name = FieldReferencingExpression(
1217
+ field.extension_scope(), field, "extensions_by_name");
1218
+ }
1219
+ } else {
1220
+ field_name = FieldReferencingExpression(
1221
+ field.containing_type(), field, "fields_by_name");
1222
+ }
1223
+ PrintDescriptorOptionsFixingCode(field_name, field_options, printer_);
1224
+ }
1225
+ }
1226
+
1227
+ // Prints expressions that set the options for a message and all its inner
1228
+ // types (nested messages, nested enums, extensions, fields).
1229
+ void Generator::FixOptionsForMessage(const Descriptor& descriptor) const {
1230
+ // Nested messages.
1231
+ for (int i = 0; i < descriptor.nested_type_count(); ++i) {
1232
+ FixOptionsForMessage(*descriptor.nested_type(i));
1233
+ }
1234
+ // Enums.
1235
+ for (int i = 0; i < descriptor.enum_type_count(); ++i) {
1236
+ FixOptionsForEnum(*descriptor.enum_type(i));
1237
+ }
1238
+ // Fields.
1239
+ for (int i = 0; i < descriptor.field_count(); ++i) {
1240
+ const FieldDescriptor& field = *descriptor.field(i);
1241
+ FixOptionsForField(field);
1242
+ }
1243
+ // Extensions.
1244
+ for (int i = 0; i < descriptor.extension_count(); ++i) {
1245
+ const FieldDescriptor& field = *descriptor.extension(i);
1246
+ FixOptionsForField(field);
1247
+ }
1248
+ // Message option for this message.
1249
+ string message_options = OptionsValue(
1250
+ "MessageOptions", descriptor.options().SerializeAsString());
1251
+ if (message_options != "None") {
1252
+ string descriptor_name = ModuleLevelDescriptorName(descriptor);
1253
+ PrintDescriptorOptionsFixingCode(descriptor_name,
1254
+ message_options,
1255
+ printer_);
1256
+ }
1257
+ }
1258
+
1259
+ } // namespace python
1260
+ } // namespace compiler
1261
+ } // namespace protobuf
1262
+ } // namespace google