protobuf 2.8.0.beta9 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (204) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +0 -1
  3. data/{UPGRADING.md → CHANGES.md} +20 -12
  4. data/LICENSE.txt +14 -0
  5. data/README.md +60 -74
  6. data/bin/protoc-gen-ruby +26 -0
  7. data/bin/rprotoc +4 -58
  8. data/lib/protobuf.rb +15 -13
  9. data/lib/protobuf/code_generator.rb +41 -0
  10. data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +51 -0
  11. data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +248 -0
  12. data/lib/protobuf/field/base_field.rb +0 -1
  13. data/lib/protobuf/field/bytes_field.rb +1 -1
  14. data/lib/protobuf/field/message_field.rb +2 -4
  15. data/lib/protobuf/field/varint_field.rb +4 -7
  16. data/lib/protobuf/generators/base.rb +71 -0
  17. data/lib/protobuf/generators/enum_generator.rb +31 -0
  18. data/lib/protobuf/generators/extension_generator.rb +28 -0
  19. data/lib/protobuf/generators/field_generator.rb +132 -0
  20. data/lib/protobuf/generators/file_generator.rb +140 -0
  21. data/lib/protobuf/generators/group_generator.rb +113 -0
  22. data/lib/protobuf/generators/message_generator.rb +99 -0
  23. data/lib/protobuf/generators/printable.rb +161 -0
  24. data/lib/protobuf/generators/service_generator.rb +27 -0
  25. data/lib/protobuf/lifecycle.rb +7 -3
  26. data/lib/protobuf/message.rb +51 -34
  27. data/lib/protobuf/rpc/connectors/common.rb +4 -6
  28. data/lib/protobuf/rpc/server.rb +1 -1
  29. data/lib/protobuf/rpc/servers/zmq/server.rb +2 -2
  30. data/lib/protobuf/rpc/servers/zmq/worker.rb +2 -2
  31. data/lib/protobuf/rpc/service.rb +3 -3
  32. data/lib/protobuf/rpc/service_directory.rb +24 -12
  33. data/lib/protobuf/version.rb +1 -1
  34. data/proto/google/protobuf/compiler/plugin.proto +147 -0
  35. data/proto/google/protobuf/descriptor.proto +620 -0
  36. data/protobuf.gemspec +12 -21
  37. data/spec/bin/protoc-gen-ruby_spec.rb +18 -0
  38. data/spec/data/data.bin +3 -0
  39. data/{test/data/unk.png → spec/data/types.bin} +0 -0
  40. data/spec/encoding/all_types_spec.rb +91 -0
  41. data/spec/encoding/extreme_values_spec.rb +0 -0
  42. data/spec/lib/protobuf/code_generator_spec.rb +60 -0
  43. data/spec/lib/protobuf/generators/base_spec.rb +87 -0
  44. data/spec/lib/protobuf/generators/enum_generator_spec.rb +45 -0
  45. data/spec/lib/protobuf/generators/extension_generator_spec.rb +43 -0
  46. data/spec/lib/protobuf/generators/field_generator_spec.rb +99 -0
  47. data/spec/lib/protobuf/generators/file_generator_spec.rb +29 -0
  48. data/spec/lib/protobuf/generators/message_generator_spec.rb +0 -0
  49. data/spec/lib/protobuf/generators/service_generator_spec.rb +43 -0
  50. data/spec/lib/protobuf/lifecycle_spec.rb +31 -1
  51. data/spec/lib/protobuf/logger_spec.rb +5 -0
  52. data/spec/lib/protobuf/message_spec.rb +22 -8
  53. data/spec/lib/protobuf/rpc/connectors/common_spec.rb +1 -1
  54. data/spec/lib/protobuf/rpc/service_directory_spec.rb +45 -7
  55. data/spec/lib/protobuf/rpc/service_spec.rb +3 -3
  56. data/spec/spec_helper.rb +15 -16
  57. data/spec/support/test/all_types.data.bin +0 -0
  58. data/spec/support/test/all_types.data.txt +119 -0
  59. data/spec/support/test/defaults.pb.rb +25 -0
  60. data/spec/support/test/defaults.proto +9 -0
  61. data/spec/support/test/enum.pb.rb +10 -8
  62. data/spec/support/test/extended.pb.rb +5 -3
  63. data/spec/support/test/extreme_values.data.bin +0 -0
  64. data/spec/support/test/google_unittest.pb.rb +543 -0
  65. data/spec/support/test/google_unittest.proto +713 -0
  66. data/spec/support/test/google_unittest_import.pb.rb +37 -0
  67. data/{ext/protobuf-2.4.1/src/google/protobuf/io/package_info.h → spec/support/test/google_unittest_import.proto} +27 -17
  68. data/spec/support/test/google_unittest_import_public.pb.rb +8 -0
  69. data/{ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream_inl.h → spec/support/test/google_unittest_import_public.proto} +5 -31
  70. data/spec/support/test/multi_field_extensions.pb.rb +29 -7
  71. data/spec/support/test/multi_field_extensions.proto +12 -2
  72. data/spec/support/test/resource.pb.rb +20 -16
  73. metadata +149 -236
  74. data/examples/addressbook.pb.rb +0 -55
  75. data/examples/addressbook.proto +0 -24
  76. data/examples/reading_a_message.rb +0 -32
  77. data/examples/writing_a_message.rb +0 -46
  78. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/code_generator.h +0 -142
  79. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/command_line_interface.h +0 -318
  80. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum.h +0 -99
  81. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum_field.h +0 -103
  82. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_extension.h +0 -85
  83. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_field.h +0 -167
  84. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_file.h +0 -98
  85. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_generator.h +0 -72
  86. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_helpers.h +0 -159
  87. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message.h +0 -170
  88. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message_field.h +0 -102
  89. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +0 -103
  90. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_service.h +0 -118
  91. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_string_field.h +0 -104
  92. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h +0 -2721
  93. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/importer.h +0 -303
  94. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum.h +0 -84
  95. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum_field.h +0 -121
  96. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_extension.h +0 -77
  97. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_field.h +0 -108
  98. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_file.h +0 -101
  99. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_generator.h +0 -72
  100. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_helpers.h +0 -213
  101. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message.h +0 -109
  102. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message_field.h +0 -134
  103. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_primitive_field.h +0 -121
  104. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_service.h +0 -113
  105. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_string_field.h +0 -120
  106. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/mock_code_generator.h +0 -113
  107. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/package_info.h +0 -64
  108. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/parser.h +0 -434
  109. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.h +0 -73
  110. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.pb.h +0 -790
  111. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/python/python_generator.h +0 -156
  112. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/subprocess.h +0 -108
  113. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/zip_writer.h +0 -93
  114. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.h +0 -1367
  115. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.pb.h +0 -5223
  116. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor_database.h +0 -366
  117. data/ext/protobuf-2.4.1/src/google/protobuf/dynamic_message.h +0 -136
  118. data/ext/protobuf-2.4.1/src/google/protobuf/extension_set.h +0 -904
  119. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_reflection.h +0 -424
  120. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_util.h +0 -82
  121. data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream.h +0 -1102
  122. data/ext/protobuf-2.4.1/src/google/protobuf/io/gzip_stream.h +0 -207
  123. data/ext/protobuf-2.4.1/src/google/protobuf/io/printer.h +0 -136
  124. data/ext/protobuf-2.4.1/src/google/protobuf/io/tokenizer.h +0 -313
  125. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream.h +0 -238
  126. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl.h +0 -357
  127. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl_lite.h +0 -340
  128. data/ext/protobuf-2.4.1/src/google/protobuf/message.h +0 -692
  129. data/ext/protobuf-2.4.1/src/google/protobuf/message_lite.h +0 -239
  130. data/ext/protobuf-2.4.1/src/google/protobuf/package_info.h +0 -64
  131. data/ext/protobuf-2.4.1/src/google/protobuf/reflection_ops.h +0 -80
  132. data/ext/protobuf-2.4.1/src/google/protobuf/repeated_field.h +0 -1295
  133. data/ext/protobuf-2.4.1/src/google/protobuf/service.h +0 -291
  134. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/common.h +0 -1211
  135. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/hash.h +0 -220
  136. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/map-util.h +0 -119
  137. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/once.h +0 -123
  138. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/stl_util-inl.h +0 -121
  139. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/strutil.h +0 -457
  140. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/substitute.h +0 -170
  141. data/ext/protobuf-2.4.1/src/google/protobuf/test_util.h +0 -174
  142. data/ext/protobuf-2.4.1/src/google/protobuf/test_util_lite.h +0 -101
  143. data/ext/protobuf-2.4.1/src/google/protobuf/testing/file.h +0 -83
  144. data/ext/protobuf-2.4.1/src/google/protobuf/testing/googletest.h +0 -98
  145. data/ext/protobuf-2.4.1/src/google/protobuf/text_format.h +0 -285
  146. data/ext/protobuf-2.4.1/src/google/protobuf/unittest.pb.h +0 -11915
  147. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_custom_options.pb.h +0 -2895
  148. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_embed_optimize_for.pb.h +0 -211
  149. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_empty.pb.h +0 -56
  150. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import.pb.h +0 -188
  151. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import_lite.pb.h +0 -151
  152. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite.pb.h +0 -4752
  153. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite_imports_nonlite.pb.h +0 -150
  154. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_mset.pb.h +0 -816
  155. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_no_generic_services.pb.h +0 -197
  156. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_optimize_for.pb.h +0 -403
  157. data/ext/protobuf-2.4.1/src/google/protobuf/unknown_field_set.h +0 -268
  158. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format.h +0 -304
  159. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite.h +0 -620
  160. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite_inl.h +0 -774
  161. data/ext/ruby_generator/Makefile +0 -10
  162. data/ext/ruby_generator/RubyGenerator.cpp +0 -544
  163. data/ext/ruby_generator/RubyGenerator.h +0 -206
  164. data/ext/ruby_generator/extconf.rb +0 -35
  165. data/test/data/data_source.py +0 -14
  166. data/test/data/types_source.py +0 -22
  167. data/test/proto/addressbook.pb.rb +0 -66
  168. data/test/proto/addressbook.proto +0 -33
  169. data/test/proto/addressbook_base.pb.rb +0 -58
  170. data/test/proto/addressbook_base.proto +0 -26
  171. data/test/proto/addressbook_ext.pb.rb +0 -20
  172. data/test/proto/addressbook_ext.proto +0 -6
  173. data/test/proto/collision.pb.rb +0 -17
  174. data/test/proto/collision.proto +0 -5
  175. data/test/proto/ext_collision.pb.rb +0 -24
  176. data/test/proto/ext_collision.proto +0 -8
  177. data/test/proto/ext_range.pb.rb +0 -22
  178. data/test/proto/ext_range.proto +0 -7
  179. data/test/proto/float_default.proto +0 -10
  180. data/test/proto/lowercase.pb.rb +0 -30
  181. data/test/proto/lowercase.proto +0 -9
  182. data/test/proto/merge.pb.rb +0 -39
  183. data/test/proto/merge.proto +0 -15
  184. data/test/proto/nested.pb.rb +0 -30
  185. data/test/proto/nested.proto +0 -9
  186. data/test/proto/optional_field.pb.rb +0 -35
  187. data/test/proto/optional_field.proto +0 -12
  188. data/test/proto/packed.pb.rb +0 -22
  189. data/test/proto/packed.proto +0 -6
  190. data/test/proto/rpc.proto +0 -6
  191. data/test/proto/types.pb.rb +0 -84
  192. data/test/proto/types.proto +0 -37
  193. data/test/test_addressbook.rb +0 -56
  194. data/test/test_enum_value.rb +0 -41
  195. data/test/test_extension.rb +0 -36
  196. data/test/test_lowercase.rb +0 -11
  197. data/test/test_message.rb +0 -128
  198. data/test/test_optional_field.rb +0 -103
  199. data/test/test_packed_field.rb +0 -40
  200. data/test/test_parse.rb +0 -15
  201. data/test/test_repeated_types.rb +0 -132
  202. data/test/test_serialize.rb +0 -61
  203. data/test/test_standard_message.rb +0 -96
  204. data/test/test_types.rb +0 -226
@@ -1,120 +0,0 @@
1
- // Protocol Buffers - Google's data interchange format
2
- // Copyright 2008 Google Inc. All rights reserved.
3
- // http://code.google.com/p/protobuf/
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
- // Author: jonp@google.com (Jon Perlow)
33
- // Based on original Protocol Buffers design by
34
- // Sanjay Ghemawat, Jeff Dean, and others.
35
-
36
- #ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_STRING_FIELD_H__
37
- #define GOOGLE_PROTOBUF_COMPILER_JAVA_STRING_FIELD_H__
38
-
39
- #include <map>
40
- #include <string>
41
- #include <google/protobuf/compiler/java/java_field.h>
42
-
43
- namespace google {
44
- namespace protobuf {
45
- namespace compiler {
46
- namespace java {
47
-
48
- class StringFieldGenerator : public FieldGenerator {
49
- public:
50
- explicit StringFieldGenerator(const FieldDescriptor* descriptor,
51
- int messageBitIndex, int builderBitIndex);
52
- ~StringFieldGenerator();
53
-
54
- // implements FieldGenerator ---------------------------------------
55
- int GetNumBitsForMessage() const;
56
- int GetNumBitsForBuilder() const;
57
- void GenerateInterfaceMembers(io::Printer* printer) const;
58
- void GenerateMembers(io::Printer* printer) const;
59
- void GenerateBuilderMembers(io::Printer* printer) const;
60
- void GenerateInitializationCode(io::Printer* printer) const;
61
- void GenerateBuilderClearCode(io::Printer* printer) const;
62
- void GenerateMergingCode(io::Printer* printer) const;
63
- void GenerateBuildingCode(io::Printer* printer) const;
64
- void GenerateParsingCode(io::Printer* printer) const;
65
- void GenerateSerializationCode(io::Printer* printer) const;
66
- void GenerateSerializedSizeCode(io::Printer* printer) const;
67
- void GenerateFieldBuilderInitializationCode(io::Printer* printer) const;
68
- void GenerateEqualsCode(io::Printer* printer) const;
69
- void GenerateHashCode(io::Printer* printer) const;
70
- string GetBoxedType() const;
71
-
72
- private:
73
- const FieldDescriptor* descriptor_;
74
- map<string, string> variables_;
75
- const int messageBitIndex_;
76
- const int builderBitIndex_;
77
-
78
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(StringFieldGenerator);
79
- };
80
-
81
- class RepeatedStringFieldGenerator : public FieldGenerator {
82
- public:
83
- explicit RepeatedStringFieldGenerator(const FieldDescriptor* descriptor,
84
- int messageBitIndex, int builderBitIndex);
85
- ~RepeatedStringFieldGenerator();
86
-
87
- // implements FieldGenerator ---------------------------------------
88
- int GetNumBitsForMessage() const;
89
- int GetNumBitsForBuilder() const;
90
- void GenerateInterfaceMembers(io::Printer* printer) const;
91
- void GenerateMembers(io::Printer* printer) const;
92
- void GenerateBuilderMembers(io::Printer* printer) const;
93
- void GenerateInitializationCode(io::Printer* printer) const;
94
- void GenerateBuilderClearCode(io::Printer* printer) const;
95
- void GenerateMergingCode(io::Printer* printer) const;
96
- void GenerateBuildingCode(io::Printer* printer) const;
97
- void GenerateParsingCode(io::Printer* printer) const;
98
- void GenerateParsingCodeFromPacked(io::Printer* printer) const;
99
- void GenerateSerializationCode(io::Printer* printer) const;
100
- void GenerateSerializedSizeCode(io::Printer* printer) const;
101
- void GenerateFieldBuilderInitializationCode(io::Printer* printer) const;
102
- void GenerateEqualsCode(io::Printer* printer) const;
103
- void GenerateHashCode(io::Printer* printer) const;
104
- string GetBoxedType() const;
105
-
106
- private:
107
- const FieldDescriptor* descriptor_;
108
- map<string, string> variables_;
109
- const int messageBitIndex_;
110
- const int builderBitIndex_;
111
-
112
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedStringFieldGenerator);
113
- };
114
-
115
- } // namespace java
116
- } // namespace compiler
117
- } // namespace protobuf
118
-
119
- } // namespace google
120
- #endif // GOOGLE_PROTOBUF_COMPILER_JAVA_STRING_FIELD_H__
@@ -1,113 +0,0 @@
1
- // Protocol Buffers - Google's data interchange format
2
- // Copyright 2008 Google Inc. All rights reserved.
3
- // http://code.google.com/p/protobuf/
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
- #ifndef GOOGLE_PROTOBUF_COMPILER_MOCK_CODE_GENERATOR_H__
34
- #define GOOGLE_PROTOBUF_COMPILER_MOCK_CODE_GENERATOR_H__
35
-
36
- #include <string>
37
- #include <google/protobuf/compiler/code_generator.h>
38
-
39
- namespace google {
40
- namespace protobuf {
41
- namespace compiler {
42
-
43
- // A mock CodeGenerator, used by command_line_interface_unittest. This is in
44
- // its own file so that it can be used both directly and as a plugin.
45
- //
46
- // Generate() produces some output which can be checked by ExpectCalled(). The
47
- // generator can run in a different process (e.g. a plugin).
48
- //
49
- // If the parameter is "insert=NAMES", the MockCodeGenerator will insert lines
50
- // into the files generated by other MockCodeGenerators instead of creating
51
- // its own file. NAMES is a comma-separated list of the names of those other
52
- // MockCodeGenerators.
53
- //
54
- // MockCodeGenerator will also modify its behavior slightly if the input file
55
- // contains a message type with one of the following names:
56
- // MockCodeGenerator_Error: Causes Generate() to return false and set the
57
- // error message to "Saw message type MockCodeGenerator_Error."
58
- // MockCodeGenerator_Exit: Generate() prints "Saw message type
59
- // MockCodeGenerator_Exit." to stderr and then calls exit(123).
60
- // MockCodeGenerator_Abort: Generate() prints "Saw message type
61
- // MockCodeGenerator_Abort." to stderr and then calls abort().
62
- class MockCodeGenerator : public CodeGenerator {
63
- public:
64
- MockCodeGenerator(const string& name);
65
- virtual ~MockCodeGenerator();
66
-
67
- // Expect (via gTest) that a MockCodeGenerator with the given name was called
68
- // with the given parameters by inspecting the output location.
69
- //
70
- // |insertions| is a comma-separated list of names of MockCodeGenerators which
71
- // should have inserted lines into this file.
72
- // |parsed_file_list| is a comma-separated list of names of the files
73
- // that are being compiled together in this run.
74
- static void ExpectGenerated(const string& name,
75
- const string& parameter,
76
- const string& insertions,
77
- const string& file,
78
- const string& first_message_name,
79
- const string& parsed_file_list,
80
- const string& output_directory);
81
-
82
- // Get the name of the file which would be written by the given generator.
83
- static string GetOutputFileName(const string& generator_name,
84
- const FileDescriptor* file);
85
- static string GetOutputFileName(const string& generator_name,
86
- const string& file);
87
-
88
- // implements CodeGenerator ----------------------------------------
89
-
90
- virtual bool Generate(const FileDescriptor* file,
91
- const string& parameter,
92
- GeneratorContext* context,
93
- string* error) const;
94
-
95
- private:
96
- string name_;
97
-
98
- static string GetOutputFileContent(const string& generator_name,
99
- const string& parameter,
100
- const FileDescriptor* file,
101
- GeneratorContext *context);
102
- static string GetOutputFileContent(const string& generator_name,
103
- const string& parameter,
104
- const string& file,
105
- const string& parsed_file_list,
106
- const string& first_message_name);
107
- };
108
-
109
- } // namespace compiler
110
- } // namespace protobuf
111
-
112
- } // namespace google
113
- #endif // GOOGLE_PROTOBUF_COMPILER_MOCK_CODE_GENERATOR_H__
@@ -1,64 +0,0 @@
1
- // Protocol Buffers - Google's data interchange format
2
- // Copyright 2008 Google Inc. All rights reserved.
3
- // http://code.google.com/p/protobuf/
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
- // Based on original Protocol Buffers design by
33
- // Sanjay Ghemawat, Jeff Dean, and others.
34
- //
35
- // This file exists solely to document the google::protobuf::compiler namespace.
36
- // It is not compiled into anything, but it may be read by an automated
37
- // documentation generator.
38
-
39
- namespace google {
40
-
41
- namespace protobuf {
42
-
43
- // Implementation of the Protocol Buffer compiler.
44
- //
45
- // This package contains code for parsing .proto files and generating code
46
- // based on them. There are two reasons you might be interested in this
47
- // package:
48
- // - You want to parse .proto files at runtime. In this case, you should
49
- // look at importer.h. Since this functionality is widely useful, it is
50
- // included in the libprotobuf base library; you do not have to link against
51
- // libprotoc.
52
- // - You want to write a custom protocol compiler which generates different
53
- // kinds of code, e.g. code in a different language which is not supported
54
- // by the official compiler. For this purpose, command_line_interface.h
55
- // provides you with a complete compiler front-end, so all you need to do
56
- // is write a custom implementation of CodeGenerator and a trivial main()
57
- // function. You can even make your compiler support the official languages
58
- // in addition to your own. Since this functionality is only useful to those
59
- // writing custom compilers, it is in a separate library called "libprotoc"
60
- // which you will have to link against.
61
- namespace compiler {}
62
-
63
- } // namespace protobuf
64
- } // namespace google
@@ -1,434 +0,0 @@
1
- // Protocol Buffers - Google's data interchange format
2
- // Copyright 2008 Google Inc. All rights reserved.
3
- // http://code.google.com/p/protobuf/
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
- // Based on original Protocol Buffers design by
33
- // Sanjay Ghemawat, Jeff Dean, and others.
34
- //
35
- // Implements parsing of .proto files to FileDescriptorProtos.
36
-
37
- #ifndef GOOGLE_PROTOBUF_COMPILER_PARSER_H__
38
- #define GOOGLE_PROTOBUF_COMPILER_PARSER_H__
39
-
40
- #include <map>
41
- #include <string>
42
- #include <utility>
43
- #include <google/protobuf/stubs/common.h>
44
- #include <google/protobuf/descriptor.h>
45
- #include <google/protobuf/descriptor.pb.h>
46
- #include <google/protobuf/repeated_field.h>
47
- #include <google/protobuf/io/tokenizer.h>
48
-
49
- namespace google {
50
- namespace protobuf { class Message; }
51
-
52
- namespace protobuf {
53
- namespace compiler {
54
-
55
- // Defined in this file.
56
- class Parser;
57
- class SourceLocationTable;
58
-
59
- // Implements parsing of protocol definitions (such as .proto files).
60
- //
61
- // Note that most users will be more interested in the Importer class.
62
- // Parser is a lower-level class which simply converts a single .proto file
63
- // to a FileDescriptorProto. It does not resolve import directives or perform
64
- // many other kinds of validation needed to construct a complete
65
- // FileDescriptor.
66
- class LIBPROTOBUF_EXPORT Parser {
67
- public:
68
- Parser();
69
- ~Parser();
70
-
71
- // Parse the entire input and construct a FileDescriptorProto representing
72
- // it. Returns true if no errors occurred, false otherwise.
73
- bool Parse(io::Tokenizer* input, FileDescriptorProto* file);
74
-
75
- // Optional fetaures:
76
-
77
- // DEPRECATED: New code should use the SourceCodeInfo embedded in the
78
- // FileDescriptorProto.
79
- //
80
- // Requests that locations of certain definitions be recorded to the given
81
- // SourceLocationTable while parsing. This can be used to look up exact line
82
- // and column numbers for errors reported by DescriptorPool during validation.
83
- // Set to NULL (the default) to discard source location information.
84
- void RecordSourceLocationsTo(SourceLocationTable* location_table) {
85
- source_location_table_ = location_table;
86
- }
87
-
88
- // Requests that errors be recorded to the given ErrorCollector while
89
- // parsing. Set to NULL (the default) to discard error messages.
90
- void RecordErrorsTo(io::ErrorCollector* error_collector) {
91
- error_collector_ = error_collector;
92
- }
93
-
94
- // Returns the identifier used in the "syntax = " declaration, if one was
95
- // seen during the last call to Parse(), or the empty string otherwise.
96
- const string& GetSyntaxIdentifier() { return syntax_identifier_; }
97
-
98
- // If set true, input files will be required to begin with a syntax
99
- // identifier. Otherwise, files may omit this. If a syntax identifier
100
- // is provided, it must be 'syntax = "proto2";' and must appear at the
101
- // top of this file regardless of whether or not it was required.
102
- void SetRequireSyntaxIdentifier(bool value) {
103
- require_syntax_identifier_ = value;
104
- }
105
-
106
- // Call SetStopAfterSyntaxIdentifier(true) to tell the parser to stop
107
- // parsing as soon as it has seen the syntax identifier, or lack thereof.
108
- // This is useful for quickly identifying the syntax of the file without
109
- // parsing the whole thing. If this is enabled, no error will be recorded
110
- // if the syntax identifier is something other than "proto2" (since
111
- // presumably the caller intends to deal with that), but other kinds of
112
- // errors (e.g. parse errors) will still be reported. When this is enabled,
113
- // you may pass a NULL FileDescriptorProto to Parse().
114
- void SetStopAfterSyntaxIdentifier(bool value) {
115
- stop_after_syntax_identifier_ = value;
116
- }
117
-
118
- private:
119
- // =================================================================
120
- // Error recovery helpers
121
-
122
- // Consume the rest of the current statement. This consumes tokens
123
- // until it sees one of:
124
- // ';' Consumes the token and returns.
125
- // '{' Consumes the brace then calls SkipRestOfBlock().
126
- // '}' Returns without consuming.
127
- // EOF Returns (can't consume).
128
- // The Parser often calls SkipStatement() after encountering a syntax
129
- // error. This allows it to go on parsing the following lines, allowing
130
- // it to report more than just one error in the file.
131
- void SkipStatement();
132
-
133
- // Consume the rest of the current block, including nested blocks,
134
- // ending after the closing '}' is encountered and consumed, or at EOF.
135
- void SkipRestOfBlock();
136
-
137
- // -----------------------------------------------------------------
138
- // Single-token consuming helpers
139
- //
140
- // These make parsing code more readable.
141
-
142
- // True if the current token is TYPE_END.
143
- inline bool AtEnd();
144
-
145
- // True if the next token matches the given text.
146
- inline bool LookingAt(const char* text);
147
- // True if the next token is of the given type.
148
- inline bool LookingAtType(io::Tokenizer::TokenType token_type);
149
-
150
- // If the next token exactly matches the text given, consume it and return
151
- // true. Otherwise, return false without logging an error.
152
- bool TryConsume(const char* text);
153
-
154
- // These attempt to read some kind of token from the input. If successful,
155
- // they return true. Otherwise they return false and add the given error
156
- // to the error list.
157
-
158
- // Consume a token with the exact text given.
159
- bool Consume(const char* text, const char* error);
160
- // Same as above, but automatically generates the error "Expected \"text\".",
161
- // where "text" is the expected token text.
162
- bool Consume(const char* text);
163
- // Consume a token of type IDENTIFIER and store its text in "output".
164
- bool ConsumeIdentifier(string* output, const char* error);
165
- // Consume an integer and store its value in "output".
166
- bool ConsumeInteger(int* output, const char* error);
167
- // Consume a 64-bit integer and store its value in "output". If the value
168
- // is greater than max_value, an error will be reported.
169
- bool ConsumeInteger64(uint64 max_value, uint64* output, const char* error);
170
- // Consume a number and store its value in "output". This will accept
171
- // tokens of either INTEGER or FLOAT type.
172
- bool ConsumeNumber(double* output, const char* error);
173
- // Consume a string literal and store its (unescaped) value in "output".
174
- bool ConsumeString(string* output, const char* error);
175
-
176
- // -----------------------------------------------------------------
177
- // Error logging helpers
178
-
179
- // Invokes error_collector_->AddError(), if error_collector_ is not NULL.
180
- void AddError(int line, int column, const string& error);
181
-
182
- // Invokes error_collector_->AddError() with the line and column number
183
- // of the current token.
184
- void AddError(const string& error);
185
-
186
- // Records a location in the SourceCodeInfo.location table (see
187
- // descriptor.proto). We use RAII to ensure that the start and end locations
188
- // are recorded -- the constructor records the start location and the
189
- // destructor records the end location. Since the parser is
190
- // recursive-descent, this works out beautifully.
191
- class LIBPROTOBUF_EXPORT LocationRecorder {
192
- public:
193
- // Construct the file's "root" location.
194
- LocationRecorder(Parser* parser);
195
-
196
- // Construct a location that represents a declaration nested within the
197
- // given parent. E.g. a field's location is nested within the location
198
- // for a message type. The parent's path will be copied, so you should
199
- // call AddPath() only to add the path components leading from the parent
200
- // to the child (as opposed to leading from the root to the child).
201
- LocationRecorder(const LocationRecorder& parent);
202
-
203
- // Convenience constructors that call AddPath() one or two times.
204
- LocationRecorder(const LocationRecorder& parent, int path1);
205
- LocationRecorder(const LocationRecorder& parent, int path1, int path2);
206
-
207
- ~LocationRecorder();
208
-
209
- // Add a path component. See SourceCodeInfo.Location.path in
210
- // descriptor.proto.
211
- void AddPath(int path_component);
212
-
213
- // By default the location is considered to start at the current token at
214
- // the time the LocationRecorder is created. StartAt() sets the start
215
- // location to the given token instead.
216
- void StartAt(const io::Tokenizer::Token& token);
217
-
218
- // By default the location is considered to end at the previous token at
219
- // the time the LocationRecorder is destroyed. EndAt() sets the end
220
- // location to the given token instead.
221
- void EndAt(const io::Tokenizer::Token& token);
222
-
223
- // Records the start point of this location to the SourceLocationTable that
224
- // was passed to RecordSourceLocationsTo(), if any. SourceLocationTable
225
- // is an older way of keeping track of source locations which is still
226
- // used in some places.
227
- void RecordLegacyLocation(const Message* descriptor,
228
- DescriptorPool::ErrorCollector::ErrorLocation location);
229
-
230
- private:
231
- Parser* parser_;
232
- SourceCodeInfo::Location* location_;
233
-
234
- void Init(const LocationRecorder& parent);
235
- };
236
-
237
- // =================================================================
238
- // Parsers for various language constructs
239
-
240
- // Parses the "syntax = \"proto2\";" line at the top of the file. Returns
241
- // false if it failed to parse or if the syntax identifier was not
242
- // recognized.
243
- bool ParseSyntaxIdentifier();
244
-
245
- // These methods parse various individual bits of code. They return
246
- // false if they completely fail to parse the construct. In this case,
247
- // it is probably necessary to skip the rest of the statement to recover.
248
- // However, if these methods return true, it does NOT mean that there
249
- // were no errors; only that there were no *syntax* errors. For instance,
250
- // if a service method is defined using proper syntax but uses a primitive
251
- // type as its input or output, ParseMethodField() still returns true
252
- // and only reports the error by calling AddError(). In practice, this
253
- // makes logic much simpler for the caller.
254
-
255
- // Parse a top-level message, enum, service, etc.
256
- bool ParseTopLevelStatement(FileDescriptorProto* file,
257
- const LocationRecorder& root_location);
258
-
259
- // Parse various language high-level language construrcts.
260
- bool ParseMessageDefinition(DescriptorProto* message,
261
- const LocationRecorder& message_location);
262
- bool ParseEnumDefinition(EnumDescriptorProto* enum_type,
263
- const LocationRecorder& enum_location);
264
- bool ParseServiceDefinition(ServiceDescriptorProto* service,
265
- const LocationRecorder& service_location);
266
- bool ParsePackage(FileDescriptorProto* file,
267
- const LocationRecorder& root_location);
268
- bool ParseImport(string* import_filename,
269
- const LocationRecorder& root_location,
270
- int index);
271
- bool ParseOption(Message* options,
272
- const LocationRecorder& options_location);
273
-
274
- // These methods parse the contents of a message, enum, or service type and
275
- // add them to the given object. They consume the entire block including
276
- // the beginning and ending brace.
277
- bool ParseMessageBlock(DescriptorProto* message,
278
- const LocationRecorder& message_location);
279
- bool ParseEnumBlock(EnumDescriptorProto* enum_type,
280
- const LocationRecorder& enum_location);
281
- bool ParseServiceBlock(ServiceDescriptorProto* service,
282
- const LocationRecorder& service_location);
283
-
284
- // Parse one statement within a message, enum, or service block, inclunding
285
- // final semicolon.
286
- bool ParseMessageStatement(DescriptorProto* message,
287
- const LocationRecorder& message_location);
288
- bool ParseEnumStatement(EnumDescriptorProto* message,
289
- const LocationRecorder& enum_location);
290
- bool ParseServiceStatement(ServiceDescriptorProto* message,
291
- const LocationRecorder& service_location);
292
-
293
- // Parse a field of a message. If the field is a group, its type will be
294
- // added to "messages".
295
- //
296
- // parent_location and location_field_number_for_nested_type are needed when
297
- // parsing groups -- we need to generate a nested message type within the
298
- // parent and record its location accordingly. Since the parent could be
299
- // either a FileDescriptorProto or a DescriptorProto, we must pass in the
300
- // correct field number to use.
301
- bool ParseMessageField(FieldDescriptorProto* field,
302
- RepeatedPtrField<DescriptorProto>* messages,
303
- const LocationRecorder& parent_location,
304
- int location_field_number_for_nested_type,
305
- const LocationRecorder& field_location);
306
-
307
- // Parse an "extensions" declaration.
308
- bool ParseExtensions(DescriptorProto* message,
309
- const LocationRecorder& extensions_location);
310
-
311
- // Parse an "extend" declaration. (See also comments for
312
- // ParseMessageField().)
313
- bool ParseExtend(RepeatedPtrField<FieldDescriptorProto>* extensions,
314
- RepeatedPtrField<DescriptorProto>* messages,
315
- const LocationRecorder& parent_location,
316
- int location_field_number_for_nested_type,
317
- const LocationRecorder& extend_location);
318
-
319
- // Parse a single enum value within an enum block.
320
- bool ParseEnumConstant(EnumValueDescriptorProto* enum_value,
321
- const LocationRecorder& enum_value_location);
322
-
323
- // Parse enum constant options, i.e. the list in square brackets at the end
324
- // of the enum constant value definition.
325
- bool ParseEnumConstantOptions(EnumValueDescriptorProto* value,
326
- const LocationRecorder& enum_value_location);
327
-
328
- // Parse a single method within a service definition.
329
- bool ParseServiceMethod(MethodDescriptorProto* method,
330
- const LocationRecorder& method_location);
331
-
332
- // Parse "required", "optional", or "repeated" and fill in "label"
333
- // with the value.
334
- bool ParseLabel(FieldDescriptorProto::Label* label);
335
-
336
- // Parse a type name and fill in "type" (if it is a primitive) or
337
- // "type_name" (if it is not) with the type parsed.
338
- bool ParseType(FieldDescriptorProto::Type* type,
339
- string* type_name);
340
- // Parse a user-defined type and fill in "type_name" with the name.
341
- // If a primitive type is named, it is treated as an error.
342
- bool ParseUserDefinedType(string* type_name);
343
-
344
- // Parses field options, i.e. the stuff in square brackets at the end
345
- // of a field definition. Also parses default value.
346
- bool ParseFieldOptions(FieldDescriptorProto* field,
347
- const LocationRecorder& field_location);
348
-
349
- // Parse the "default" option. This needs special handling because its
350
- // type is the field's type.
351
- bool ParseDefaultAssignment(FieldDescriptorProto* field,
352
- const LocationRecorder& field_location);
353
-
354
- // Parse a single option name/value pair, e.g. "ctype = CORD". The name
355
- // identifies a field of the given Message, and the value of that field
356
- // is set to the parsed value.
357
- bool ParseOptionAssignment(Message* options,
358
- const LocationRecorder& options_location);
359
-
360
- // Parses a single part of a multipart option name. A multipart name consists
361
- // of names separated by dots. Each name is either an identifier or a series
362
- // of identifiers separated by dots and enclosed in parentheses. E.g.,
363
- // "foo.(bar.baz).qux".
364
- bool ParseOptionNamePart(UninterpretedOption* uninterpreted_option,
365
- const LocationRecorder& part_location);
366
-
367
- // Parses a string surrounded by balanced braces. Strips off the outer
368
- // braces and stores the enclosed string in *value.
369
- // E.g.,
370
- // { foo } *value gets 'foo'
371
- // { foo { bar: box } } *value gets 'foo { bar: box }'
372
- // {} *value gets ''
373
- //
374
- // REQUIRES: LookingAt("{")
375
- // When finished successfully, we are looking at the first token past
376
- // the ending brace.
377
- bool ParseUninterpretedBlock(string* value);
378
-
379
- // =================================================================
380
-
381
- io::Tokenizer* input_;
382
- io::ErrorCollector* error_collector_;
383
- SourceCodeInfo* source_code_info_;
384
- SourceLocationTable* source_location_table_; // legacy
385
- bool had_errors_;
386
- bool require_syntax_identifier_;
387
- bool stop_after_syntax_identifier_;
388
- string syntax_identifier_;
389
-
390
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Parser);
391
- };
392
-
393
- // A table mapping (descriptor, ErrorLocation) pairs -- as reported by
394
- // DescriptorPool when validating descriptors -- to line and column numbers
395
- // within the original source code.
396
- //
397
- // This is semi-obsolete: FileDescriptorProto.source_code_info now contains
398
- // far more complete information about source locations. However, as of this
399
- // writing you still need to use SourceLocationTable when integrating with
400
- // DescriptorPool.
401
- class LIBPROTOBUF_EXPORT SourceLocationTable {
402
- public:
403
- SourceLocationTable();
404
- ~SourceLocationTable();
405
-
406
- // Finds the precise location of the given error and fills in *line and
407
- // *column with the line and column numbers. If not found, sets *line to
408
- // -1 and *column to 0 (since line = -1 is used to mean "error has no exact
409
- // location" in the ErrorCollector interface). Returns true if found, false
410
- // otherwise.
411
- bool Find(const Message* descriptor,
412
- DescriptorPool::ErrorCollector::ErrorLocation location,
413
- int* line, int* column) const;
414
-
415
- // Adds a location to the table.
416
- void Add(const Message* descriptor,
417
- DescriptorPool::ErrorCollector::ErrorLocation location,
418
- int line, int column);
419
-
420
- // Clears the contents of the table.
421
- void Clear();
422
-
423
- private:
424
- typedef map<
425
- pair<const Message*, DescriptorPool::ErrorCollector::ErrorLocation>,
426
- pair<int, int> > LocationMap;
427
- LocationMap location_map_;
428
- };
429
-
430
- } // namespace compiler
431
- } // namespace protobuf
432
-
433
- } // namespace google
434
- #endif // GOOGLE_PROTOBUF_COMPILER_PARSER_H__