protovalidate 0.1.0.beta1

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 (1827) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +8 -0
  3. data/CHANGELOG.md +5 -0
  4. data/LICENSE.txt +201 -0
  5. data/NOTICE.md +30 -0
  6. data/README.md +93 -0
  7. data/Rakefile +32 -0
  8. data/ext/protovalidate/Cargo.lock +342 -0
  9. data/ext/protovalidate/Cargo.toml +27 -0
  10. data/ext/protovalidate/build.rs +4 -0
  11. data/ext/protovalidate/extconf.rb +8 -0
  12. data/ext/protovalidate/src/lib.rs +161 -0
  13. data/ext/protovalidate/sys/Cargo.toml +11 -0
  14. data/ext/protovalidate/sys/build.rs +218 -0
  15. data/ext/protovalidate/sys/filelists/absl.txt +126 -0
  16. data/ext/protovalidate/sys/filelists/antlr4.txt +139 -0
  17. data/ext/protovalidate/sys/filelists/celcpp.txt +199 -0
  18. data/ext/protovalidate/sys/filelists/protobuf.txt +83 -0
  19. data/ext/protovalidate/sys/filelists/protovalidate.txt +14 -0
  20. data/ext/protovalidate/sys/filelists/re2.txt +25 -0
  21. data/ext/protovalidate/sys/gen/buf/validate/validate.pb.cc +23621 -0
  22. data/ext/protovalidate/sys/gen/buf/validate/validate.pb.h +27800 -0
  23. data/ext/protovalidate/sys/gen/cel/expr/checked.pb.cc +6286 -0
  24. data/ext/protovalidate/sys/gen/cel/expr/checked.pb.h +6412 -0
  25. data/ext/protovalidate/sys/gen/cel/expr/syntax.pb.cc +7423 -0
  26. data/ext/protovalidate/sys/gen/cel/expr/syntax.pb.h +7510 -0
  27. data/ext/protovalidate/sys/gen/cel/expr/value.pb.cc +2512 -0
  28. data/ext/protovalidate/sys/gen/cel/expr/value.pb.h +2589 -0
  29. data/ext/protovalidate/sys/gen/internal/empty_descriptor_set_embed.inc +1 -0
  30. data/ext/protovalidate/sys/gen/parser/internal/CelBaseVisitor.cpp +9 -0
  31. data/ext/protovalidate/sys/gen/parser/internal/CelBaseVisitor.h +167 -0
  32. data/ext/protovalidate/sys/gen/parser/internal/CelLexer.cpp +308 -0
  33. data/ext/protovalidate/sys/gen/parser/internal/CelLexer.h +57 -0
  34. data/ext/protovalidate/sys/gen/parser/internal/CelParser.cpp +2484 -0
  35. data/ext/protovalidate/sys/gen/parser/internal/CelParser.h +697 -0
  36. data/ext/protovalidate/sys/gen/parser/internal/CelVisitor.cpp +9 -0
  37. data/ext/protovalidate/sys/gen/parser/internal/CelVisitor.h +98 -0
  38. data/ext/protovalidate/sys/shim/pv_shim.cc +260 -0
  39. data/ext/protovalidate/sys/shim/pv_shim.h +84 -0
  40. data/ext/protovalidate/sys/src/lib.rs +176 -0
  41. data/ext/protovalidate/sys/third_party/abseil-cpp/LICENSE +203 -0
  42. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/algorithm/algorithm.h +96 -0
  43. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/algorithm/container.h +2011 -0
  44. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/attributes.h +1100 -0
  45. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/call_once.h +228 -0
  46. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/casts.cc +61 -0
  47. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/casts.h +313 -0
  48. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/config.h +898 -0
  49. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/const_init.h +76 -0
  50. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/dynamic_annotations.h +480 -0
  51. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/fast_type_id.h +73 -0
  52. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  53. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/atomic_hook_test_helper.h +34 -0
  54. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +72 -0
  55. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/cycleclock.h +144 -0
  56. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  57. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +170 -0
  58. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  59. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/endian.h +279 -0
  60. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  61. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/exception_safety_testing.h +1112 -0
  62. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/exception_testing.h +42 -0
  63. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
  64. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  65. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +75 -0
  66. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
  67. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +667 -0
  68. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +133 -0
  69. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +196 -0
  70. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/nullability_traits.h +71 -0
  71. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  72. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/poison.h +59 -0
  73. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/pretty_function.h +33 -0
  74. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +279 -0
  75. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/raw_logging.h +217 -0
  76. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  77. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/scoped_set_env.h +45 -0
  78. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock.cc +225 -0
  79. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock.h +310 -0
  80. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  81. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +71 -0
  82. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  83. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  84. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +95 -0
  85. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +40 -0
  86. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  87. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  88. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +493 -0
  89. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/sysinfo.h +74 -0
  90. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +163 -0
  91. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/thread_identity.h +325 -0
  92. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/tracing.cc +39 -0
  93. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/tracing.h +81 -0
  94. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +68 -0
  95. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +89 -0
  96. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +134 -0
  97. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +118 -0
  98. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  99. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/log_severity.cc +56 -0
  100. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/log_severity.h +185 -0
  101. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/macros.h +259 -0
  102. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/no_destructor.h +191 -0
  103. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/nullability.h +318 -0
  104. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/optimization.h +311 -0
  105. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/options.h +212 -0
  106. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/policy_checks.h +115 -0
  107. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/port.h +25 -0
  108. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/prefetch.h +209 -0
  109. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/thread_annotations.h +333 -0
  110. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/throw_delegate.cc +205 -0
  111. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/throw_delegate.h +65 -0
  112. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/cleanup/cleanup.h +143 -0
  113. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  114. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/btree_map.h +941 -0
  115. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/btree_set.h +872 -0
  116. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/chunked_queue.h +757 -0
  117. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/fixed_array.h +548 -0
  118. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/flat_hash_map.h +714 -0
  119. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/flat_hash_set.h +604 -0
  120. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/hash_container_defaults.h +45 -0
  121. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/inlined_vector.h +1025 -0
  122. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/btree.h +3157 -0
  123. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/btree_container.h +875 -0
  124. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/chunked_queue.h +173 -0
  125. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/common.h +302 -0
  126. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +151 -0
  127. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +275 -0
  128. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/container_memory.h +571 -0
  129. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +281 -0
  130. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hash_generator_testing.h +172 -0
  131. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hash_policy_testing.h +173 -0
  132. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +195 -0
  133. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  134. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hashtable_debug.h +102 -0
  135. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  136. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +316 -0
  137. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +294 -0
  138. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +31 -0
  139. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/heterogeneous_lookup_testing.h +80 -0
  140. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +1094 -0
  141. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/layout.h +828 -0
  142. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
  143. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +380 -0
  144. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +2110 -0
  145. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +4056 -0
  146. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
  147. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/test_allocator.h +387 -0
  148. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/test_instance_tracker.h +274 -0
  149. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/tracked.h +83 -0
  150. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/linked_hash_map.h +666 -0
  151. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/linked_hash_set.h +527 -0
  152. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/node_hash_map.h +710 -0
  153. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/node_hash_set.h +603 -0
  154. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/crc32c.cc +95 -0
  155. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/crc32c.h +192 -0
  156. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +359 -0
  157. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +69 -0
  158. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc.cc +435 -0
  159. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc.h +83 -0
  160. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +319 -0
  161. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  162. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  163. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +131 -0
  164. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  165. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +161 -0
  166. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +122 -0
  167. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +78 -0
  168. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +459 -0
  169. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  170. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +824 -0
  171. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +81 -0
  172. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +195 -0
  173. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/failure_signal_handler.h +121 -0
  174. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +98 -0
  175. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  176. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  177. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/bounded_utf8_length_sequence.h +126 -0
  178. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +258 -0
  179. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +55 -0
  180. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2958 -0
  181. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/demangle.h +76 -0
  182. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +925 -0
  183. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +50 -0
  184. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +413 -0
  185. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +141 -0
  186. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +334 -0
  187. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +70 -0
  188. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stack_consumption.h +50 -0
  189. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +299 -0
  190. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +148 -0
  191. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +96 -0
  192. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +121 -0
  193. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +121 -0
  194. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +270 -0
  195. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +208 -0
  196. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +25 -0
  197. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +81 -0
  198. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +410 -0
  199. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +163 -0
  200. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/utf8_for_code_point.cc +70 -0
  201. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/utf8_for_code_point.h +47 -0
  202. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +209 -0
  203. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  204. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/leak_check.cc +73 -0
  205. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/leak_check.h +150 -0
  206. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/stacktrace.cc +204 -0
  207. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/stacktrace.h +259 -0
  208. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize.cc +62 -0
  209. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  210. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +102 -0
  211. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1708 -0
  212. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +63 -0
  213. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  214. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +99 -0
  215. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/commandlineflag.h +220 -0
  216. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/config.h +68 -0
  217. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/declare.h +77 -0
  218. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/flag.h +307 -0
  219. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  220. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/flag.h +969 -0
  221. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/parse.h +70 -0
  222. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  223. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +64 -0
  224. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  225. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/registry.h +98 -0
  226. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  227. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/usage.h +106 -0
  228. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/marshalling.h +335 -0
  229. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/parse.h +130 -0
  230. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  231. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/usage.h +43 -0
  232. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  233. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/any_invocable.h +335 -0
  234. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/bind_back.h +79 -0
  235. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/bind_front.h +200 -0
  236. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/function_ref.h +249 -0
  237. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +787 -0
  238. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
  239. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/internal/front_binder.h +93 -0
  240. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/internal/function_ref.h +151 -0
  241. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/overload.h +72 -0
  242. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/hash.h +466 -0
  243. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/hash_testing.h +382 -0
  244. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/internal/city.cc +337 -0
  245. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/internal/city.h +78 -0
  246. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/internal/hash.cc +430 -0
  247. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/internal/hash.h +1619 -0
  248. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/internal/spy_hash_state.h +289 -0
  249. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  250. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/absl_check.h +117 -0
  251. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/absl_log.h +115 -0
  252. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +93 -0
  253. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/check.h +210 -0
  254. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/check_test_impl.inc +1035 -0
  255. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/die_if_null.cc +34 -0
  256. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/die_if_null.h +97 -0
  257. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/flags.h +43 -0
  258. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/globals.cc +178 -0
  259. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/globals.h +230 -0
  260. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/initialize.h +45 -0
  261. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/append_truncated.h +75 -0
  262. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/check_impl.h +151 -0
  263. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/check_op.cc +147 -0
  264. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/check_op.h +565 -0
  265. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/conditions.cc +85 -0
  266. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/conditions.h +247 -0
  267. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/config.h +45 -0
  268. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/container.h +312 -0
  269. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/flags.h +59 -0
  270. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/fnmatch.cc +73 -0
  271. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/fnmatch.h +35 -0
  272. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/globals.cc +145 -0
  273. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/globals.h +101 -0
  274. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_format.cc +205 -0
  275. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_format.h +78 -0
  276. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_impl.h +280 -0
  277. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_message.cc +788 -0
  278. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_message.h +469 -0
  279. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +296 -0
  280. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_sink_set.h +54 -0
  281. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/nullguard.cc +35 -0
  282. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/nullguard.h +88 -0
  283. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/nullstream.h +128 -0
  284. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/proto.cc +231 -0
  285. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/proto.h +298 -0
  286. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/strip.h +99 -0
  287. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/structured.h +160 -0
  288. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +115 -0
  289. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/structured_proto.h +108 -0
  290. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/test_actions.h +90 -0
  291. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/test_helpers.h +71 -0
  292. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/test_matchers.h +94 -0
  293. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +347 -0
  294. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/vlog_config.h +164 -0
  295. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/voidify.h +50 -0
  296. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log.h +378 -0
  297. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_basic_test_impl.inc +654 -0
  298. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
  299. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_entry.h +223 -0
  300. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_sink.cc +23 -0
  301. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_sink.h +71 -0
  302. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_sink_registry.h +64 -0
  303. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_streamer.h +208 -0
  304. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/scoped_mock_log.h +203 -0
  305. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/structured.h +75 -0
  306. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/vlog_is_on.h +72 -0
  307. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/memory/memory.h +328 -0
  308. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/meta/internal/constexpr_testing.h +73 -0
  309. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/meta/internal/requires.h +67 -0
  310. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/meta/type_traits.h +646 -0
  311. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/bits.h +262 -0
  312. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/int128.cc +344 -0
  313. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/int128.h +1224 -0
  314. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +303 -0
  315. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +347 -0
  316. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/internal/bits.h +394 -0
  317. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  318. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/profiling/hashtable.h +40 -0
  319. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
  320. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
  321. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/profiling/internal/periodic_sampler.h +211 -0
  322. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/profiling/internal/profile_builder.h +161 -0
  323. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +253 -0
  324. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +202 -0
  325. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/beta_distribution.h +429 -0
  326. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/bit_gen_ref.h +160 -0
  327. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/discrete_distribution.h +249 -0
  328. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/distributions.h +450 -0
  329. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/exponential_distribution.h +166 -0
  330. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/gaussian_distribution.h +276 -0
  331. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/chi_square.h +89 -0
  332. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +83 -0
  333. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/distribution_test_util.h +113 -0
  334. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  335. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/explicit_seed_seq.h +92 -0
  336. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +271 -0
  337. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  338. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  339. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +248 -0
  340. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/mock_helpers.h +134 -0
  341. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/mock_overload_set.h +122 -0
  342. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/mock_validators.h +98 -0
  343. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/nanobenchmark.h +172 -0
  344. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +160 -0
  345. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +287 -0
  346. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/platform.h +158 -0
  347. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/randen.h +96 -0
  348. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  349. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/randen_engine.h +265 -0
  350. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  351. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  352. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  353. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +166 -0
  354. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/seed_material.h +105 -0
  355. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/sequence_urbg.h +60 -0
  356. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/traits.h +170 -0
  357. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  358. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +95 -0
  359. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +253 -0
  360. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/mock_distributions.h +269 -0
  361. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
  362. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/mocking_bit_gen.h +227 -0
  363. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/poisson_distribution.h +262 -0
  364. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/random.h +224 -0
  365. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  366. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/seed_sequences.h +112 -0
  367. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +276 -0
  368. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +204 -0
  369. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/zipf_distribution.h +273 -0
  370. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/internal/status_internal.cc +296 -0
  371. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/internal/status_internal.h +157 -0
  372. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/internal/status_matchers.h +260 -0
  373. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +657 -0
  374. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status.cc +413 -0
  375. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status.h +1174 -0
  376. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status_builder.h +978 -0
  377. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status_macros.h +484 -0
  378. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status_matchers.h +167 -0
  379. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status_payload_printer.cc +36 -0
  380. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status_payload_printer.h +53 -0
  381. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/statusor.cc +106 -0
  382. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/statusor.h +776 -0
  383. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/ascii.cc +296 -0
  384. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/ascii.h +288 -0
  385. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/charconv.cc +1442 -0
  386. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/charconv.h +123 -0
  387. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/charset.h +163 -0
  388. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cord.cc +1601 -0
  389. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cord.h +1773 -0
  390. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cord_analysis.cc +196 -0
  391. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cord_analysis.h +63 -0
  392. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cord_buffer.h +574 -0
  393. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cord_test_helpers.h +122 -0
  394. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cordz_test_helpers.h +152 -0
  395. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/escaping.cc +1183 -0
  396. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/escaping.h +195 -0
  397. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/has_absl_stringify.h +64 -0
  398. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/has_ostream_operator.h +42 -0
  399. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  400. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +357 -0
  401. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +433 -0
  402. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  403. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  404. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  405. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +70 -0
  406. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +942 -0
  407. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1237 -0
  408. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +944 -0
  409. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
  410. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
  411. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
  412. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
  413. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +64 -0
  414. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +47 -0
  415. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
  416. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
  417. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +195 -0
  418. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_test_util.h +205 -0
  419. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +102 -0
  420. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +87 -0
  421. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +165 -0
  422. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +98 -0
  423. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +424 -0
  424. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +295 -0
  425. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_sample_token.h +97 -0
  426. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +88 -0
  427. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  428. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +123 -0
  429. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +99 -0
  430. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +35 -0
  431. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/escaping.cc +68 -0
  432. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/escaping.h +35 -0
  433. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/escaping_test_common.h +133 -0
  434. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/generic_printer.h +115 -0
  435. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/generic_printer_internal.h +444 -0
  436. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/memutil.cc +48 -0
  437. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/memutil.h +40 -0
  438. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/numbers_test_common.h +184 -0
  439. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +43 -0
  440. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +114 -0
  441. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/pow10_helper.h +40 -0
  442. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +114 -0
  443. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  444. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +615 -0
  445. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +653 -0
  446. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +275 -0
  447. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +237 -0
  448. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +98 -0
  449. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +357 -0
  450. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +53 -0
  451. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +456 -0
  452. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +2148 -0
  453. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +37 -0
  454. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +74 -0
  455. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +97 -0
  456. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +140 -0
  457. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +271 -0
  458. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +340 -0
  459. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +524 -0
  460. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/string_constant.h +67 -0
  461. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  462. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +69 -0
  463. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
  464. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/utf8.cc +148 -0
  465. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/utf8.h +64 -0
  466. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/match.cc +133 -0
  467. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/match.h +129 -0
  468. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/numbers.cc +1636 -0
  469. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/numbers.h +363 -0
  470. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
  471. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_cat.cc +247 -0
  472. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_cat.h +668 -0
  473. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_format.h +887 -0
  474. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_join.h +301 -0
  475. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_replace.cc +91 -0
  476. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_replace.h +222 -0
  477. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_split.cc +144 -0
  478. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_split.h +587 -0
  479. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/string_view.h +60 -0
  480. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/strip.h +99 -0
  481. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/substitute.cc +187 -0
  482. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/substitute.h +769 -0
  483. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  484. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  485. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +73 -0
  486. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +107 -0
  487. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +173 -0
  488. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +56 -0
  489. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/futex.h +177 -0
  490. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +107 -0
  491. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.h +63 -0
  492. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +714 -0
  493. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +146 -0
  494. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +220 -0
  495. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +178 -0
  496. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  497. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +124 -0
  498. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +163 -0
  499. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.h +60 -0
  500. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +118 -0
  501. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.h +65 -0
  502. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +87 -0
  503. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.h +56 -0
  504. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/thread_pool.h +96 -0
  505. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +69 -0
  506. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +38 -0
  507. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.h +90 -0
  508. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +147 -0
  509. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.h +72 -0
  510. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/mutex.cc +2833 -0
  511. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/mutex.h +1352 -0
  512. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/notification.cc +85 -0
  513. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/notification.h +133 -0
  514. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/civil_time.cc +200 -0
  515. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/civil_time.h +589 -0
  516. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/clock.cc +603 -0
  517. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/clock.h +81 -0
  518. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/clock_interface.h +93 -0
  519. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/duration.cc +918 -0
  520. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/format.cc +155 -0
  521. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  522. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +644 -0
  523. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +460 -0
  524. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  525. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  526. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
  527. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  528. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  529. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1069 -0
  530. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +47 -0
  531. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +80 -0
  532. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +115 -0
  533. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +97 -0
  534. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +1070 -0
  535. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +128 -0
  536. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +333 -0
  537. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +60 -0
  538. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +217 -0
  539. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
  540. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  541. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  542. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  543. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +115 -0
  544. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +116 -0
  545. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  546. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  547. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/test_util.h +33 -0
  548. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/simulated_clock.h +109 -0
  549. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/time.cc +507 -0
  550. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/time.h +1926 -0
  551. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/any.h +66 -0
  552. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/any_span.h +1067 -0
  553. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/compare.h +506 -0
  554. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/internal/any_span.h +477 -0
  555. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/internal/span.h +140 -0
  556. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/optional.h +68 -0
  557. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
  558. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/source_location.cc +18 -0
  559. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/source_location.h +172 -0
  560. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/span.h +827 -0
  561. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/variant.h +139 -0
  562. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/utility/utility.h +151 -0
  563. data/ext/protovalidate/sys/third_party/antlr4/LICENSE.txt +28 -0
  564. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRErrorListener.cpp +10 -0
  565. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRErrorListener.h +167 -0
  566. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRErrorStrategy.cpp +10 -0
  567. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRErrorStrategy.h +121 -0
  568. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +23 -0
  569. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRFileStream.h +30 -0
  570. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +180 -0
  571. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRInputStream.h +79 -0
  572. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/BailErrorStrategy.cpp +61 -0
  573. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/BailErrorStrategy.h +59 -0
  574. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/BaseErrorListener.cpp +25 -0
  575. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/BaseErrorListener.h +36 -0
  576. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/BufferedTokenStream.cpp +414 -0
  577. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/BufferedTokenStream.h +200 -0
  578. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CharStream.cpp +11 -0
  579. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CharStream.h +37 -0
  580. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CommonToken.cpp +193 -0
  581. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CommonToken.h +158 -0
  582. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CommonTokenFactory.cpp +39 -0
  583. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CommonTokenFactory.h +74 -0
  584. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CommonTokenStream.cpp +78 -0
  585. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CommonTokenStream.h +79 -0
  586. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ConsoleErrorListener.cpp +15 -0
  587. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ConsoleErrorListener.h +35 -0
  588. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +336 -0
  589. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/DefaultErrorStrategy.h +466 -0
  590. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/DiagnosticErrorListener.cpp +84 -0
  591. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/DiagnosticErrorListener.h +80 -0
  592. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Exceptions.cpp +64 -0
  593. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Exceptions.h +99 -0
  594. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/FailedPredicateException.cpp +52 -0
  595. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/FailedPredicateException.h +32 -0
  596. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/FlatHashMap.h +57 -0
  597. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/FlatHashSet.h +57 -0
  598. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/InputMismatchException.cpp +18 -0
  599. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/InputMismatchException.h +24 -0
  600. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/IntStream.cpp +12 -0
  601. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/IntStream.h +218 -0
  602. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/InterpreterRuleContext.cpp +19 -0
  603. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/InterpreterRuleContext.h +45 -0
  604. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Lexer.cpp +294 -0
  605. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Lexer.h +196 -0
  606. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/LexerInterpreter.cpp +60 -0
  607. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/LexerInterpreter.h +46 -0
  608. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/LexerNoViableAltException.cpp +36 -0
  609. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/LexerNoViableAltException.h +31 -0
  610. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ListTokenSource.cpp +92 -0
  611. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ListTokenSource.h +88 -0
  612. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/NoViableAltException.cpp +46 -0
  613. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/NoViableAltException.h +42 -0
  614. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Parser.cpp +670 -0
  615. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Parser.h +461 -0
  616. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ParserInterpreter.cpp +294 -0
  617. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ParserInterpreter.h +173 -0
  618. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ParserRuleContext.cpp +138 -0
  619. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ParserRuleContext.h +147 -0
  620. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ProxyErrorListener.cpp +53 -0
  621. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ProxyErrorListener.h +38 -0
  622. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RecognitionException.cpp +65 -0
  623. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RecognitionException.h +98 -0
  624. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Recognizer.cpp +157 -0
  625. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Recognizer.h +160 -0
  626. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RuleContext.cpp +144 -0
  627. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RuleContext.h +141 -0
  628. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RuleContextWithAltNum.cpp +27 -0
  629. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RuleContextWithAltNum.h +32 -0
  630. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +54 -0
  631. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RuntimeMetaData.h +155 -0
  632. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Token.cpp +9 -0
  633. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Token.h +92 -0
  634. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenFactory.h +30 -0
  635. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenSource.cpp +9 -0
  636. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenSource.h +85 -0
  637. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenStream.cpp +11 -0
  638. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenStream.h +137 -0
  639. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +428 -0
  640. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenStreamRewriter.h +295 -0
  641. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +208 -0
  642. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/UnbufferedCharStream.h +117 -0
  643. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/UnbufferedTokenStream.cpp +270 -0
  644. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/UnbufferedTokenStream.h +115 -0
  645. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Version.h +42 -0
  646. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Vocabulary.cpp +64 -0
  647. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Vocabulary.h +177 -0
  648. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/WritableToken.cpp +9 -0
  649. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/WritableToken.h +23 -0
  650. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/antlr4-common.h +101 -0
  651. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/antlr4-runtime.h +168 -0
  652. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATN.cpp +159 -0
  653. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATN.h +133 -0
  654. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +106 -0
  655. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNConfig.h +157 -0
  656. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +233 -0
  657. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +157 -0
  658. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +39 -0
  659. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +48 -0
  660. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +628 -0
  661. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +32 -0
  662. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +33 -0
  663. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNSimulator.h +71 -0
  664. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNState.cpp +56 -0
  665. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNState.h +139 -0
  666. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNStateType.cpp +33 -0
  667. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNStateType.h +36 -0
  668. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNType.h +20 -0
  669. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +29 -0
  670. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ActionTransition.h +35 -0
  671. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/AmbiguityInfo.cpp +16 -0
  672. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/AmbiguityInfo.h +68 -0
  673. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +129 -0
  674. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +51 -0
  675. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +27 -0
  676. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/AtomTransition.h +33 -0
  677. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +24 -0
  678. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/BasicState.h +23 -0
  679. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/BlockEndState.h +26 -0
  680. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/BlockStartState.h +30 -0
  681. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.cpp +14 -0
  682. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.h +47 -0
  683. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/DecisionEventInfo.cpp +14 -0
  684. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/DecisionEventInfo.h +70 -0
  685. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/DecisionInfo.cpp +25 -0
  686. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/DecisionInfo.h +227 -0
  687. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/DecisionState.cpp +12 -0
  688. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/DecisionState.h +34 -0
  689. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +31 -0
  690. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +42 -0
  691. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ErrorInfo.cpp +15 -0
  692. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ErrorInfo.h +43 -0
  693. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/HashUtils.h +18 -0
  694. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +189 -0
  695. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +76 -0
  696. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +67 -0
  697. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +44 -0
  698. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +621 -0
  699. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +199 -0
  700. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerAction.cpp +15 -0
  701. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerAction.h +100 -0
  702. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +108 -0
  703. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +128 -0
  704. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerActionType.h +57 -0
  705. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +43 -0
  706. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +59 -0
  707. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +45 -0
  708. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +75 -0
  709. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +50 -0
  710. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +76 -0
  711. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +43 -0
  712. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerModeAction.h +57 -0
  713. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +36 -0
  714. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +53 -0
  715. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +36 -0
  716. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +53 -0
  717. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +43 -0
  718. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +57 -0
  719. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +36 -0
  720. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +51 -0
  721. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +43 -0
  722. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +51 -0
  723. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.cpp +16 -0
  724. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.h +42 -0
  725. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LoopEndState.h +26 -0
  726. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +22 -0
  727. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/NotSetTransition.h +27 -0
  728. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +16 -0
  729. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +25 -0
  730. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ParseInfo.cpp +102 -0
  731. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ParseInfo.h +102 -0
  732. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +1413 -0
  733. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +911 -0
  734. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ParserATNSimulatorOptions.h +50 -0
  735. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +29 -0
  736. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +25 -0
  737. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +23 -0
  738. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +35 -0
  739. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +17 -0
  740. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +62 -0
  741. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +24 -0
  742. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredicateTransition.h +50 -0
  743. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +601 -0
  744. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContext.h +225 -0
  745. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContextCache.cpp +56 -0
  746. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContextCache.h +63 -0
  747. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.cpp +167 -0
  748. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.h +101 -0
  749. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContextMergeCacheOptions.h +71 -0
  750. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContextType.h +21 -0
  751. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +202 -0
  752. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionMode.h +436 -0
  753. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +179 -0
  754. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +60 -0
  755. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +26 -0
  756. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/RangeTransition.h +31 -0
  757. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/RuleStartState.h +26 -0
  758. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/RuleStopState.h +27 -0
  759. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +33 -0
  760. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/RuleTransition.h +42 -0
  761. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +418 -0
  762. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SemanticContext.h +237 -0
  763. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SemanticContextType.h +23 -0
  764. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SerializedATNView.h +101 -0
  765. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SetTransition.cpp +28 -0
  766. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SetTransition.h +38 -0
  767. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +79 -0
  768. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +43 -0
  769. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +24 -0
  770. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +37 -0
  771. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +19 -0
  772. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +25 -0
  773. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/TokensStartState.h +24 -0
  774. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/Transition.cpp +36 -0
  775. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/Transition.h +65 -0
  776. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/TransitionType.cpp +27 -0
  777. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/TransitionType.h +33 -0
  778. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +21 -0
  779. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/WildcardTransition.h +27 -0
  780. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/DFA.cpp +115 -0
  781. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/DFA.h +96 -0
  782. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +60 -0
  783. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/DFASerializer.h +32 -0
  784. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/DFAState.cpp +59 -0
  785. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/DFAState.h +154 -0
  786. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +17 -0
  787. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +22 -0
  788. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/internal/Synchronization.cpp +100 -0
  789. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/internal/Synchronization.h +154 -0
  790. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +124 -0
  791. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +33 -0
  792. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/Interval.cpp +61 -0
  793. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/Interval.h +84 -0
  794. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +508 -0
  795. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/IntervalSet.h +190 -0
  796. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +120 -0
  797. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/MurmurHash.h +102 -0
  798. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/Predicate.cpp +4 -0
  799. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/Predicate.h +21 -0
  800. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Any.cpp +8 -0
  801. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Any.h +16 -0
  802. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Arrays.cpp +43 -0
  803. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Arrays.h +149 -0
  804. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/BitSet.h +76 -0
  805. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/CPPUtils.cpp +207 -0
  806. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/CPPUtils.h +65 -0
  807. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Casts.h +34 -0
  808. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Declarations.h +161 -0
  809. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/StringUtils.cpp +38 -0
  810. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/StringUtils.h +16 -0
  811. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Unicode.h +28 -0
  812. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Utf8.cpp +242 -0
  813. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Utf8.h +54 -0
  814. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +129 -0
  815. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ErrorNode.h +24 -0
  816. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +54 -0
  817. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +43 -0
  818. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +66 -0
  819. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.h +53 -0
  820. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTree.cpp +12 -0
  821. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTree.h +111 -0
  822. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeListener.cpp +9 -0
  823. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeListener.h +39 -0
  824. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeProperty.h +50 -0
  825. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeType.h +22 -0
  826. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.cpp +9 -0
  827. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +57 -0
  828. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +48 -0
  829. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +55 -0
  830. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/TerminalNode.h +40 -0
  831. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +54 -0
  832. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +32 -0
  833. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/Trees.cpp +241 -0
  834. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/Trees.h +78 -0
  835. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/Chunk.cpp +9 -0
  836. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/Chunk.h +44 -0
  837. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp +69 -0
  838. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.h +132 -0
  839. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.cpp +64 -0
  840. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.h +105 -0
  841. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +370 -0
  842. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.h +185 -0
  843. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.cpp +77 -0
  844. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.h +117 -0
  845. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/TagChunk.cpp +39 -0
  846. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/TagChunk.h +86 -0
  847. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/TextChunk.cpp +28 -0
  848. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/TextChunk.h +51 -0
  849. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.cpp +36 -0
  850. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.h +80 -0
  851. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPath.cpp +154 -0
  852. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPath.h +86 -0
  853. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathElement.cpp +31 -0
  854. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathElement.h +40 -0
  855. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +180 -0
  856. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +53 -0
  857. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.cpp +13 -0
  858. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.h +22 -0
  859. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.cpp +20 -0
  860. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.h +27 -0
  861. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.cpp +30 -0
  862. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.h +26 -0
  863. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.cpp +20 -0
  864. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.h +25 -0
  865. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.cpp +33 -0
  866. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.h +26 -0
  867. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.cpp +23 -0
  868. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.h +23 -0
  869. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.cpp +24 -0
  870. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.h +23 -0
  871. data/ext/protovalidate/sys/third_party/cel-cpp/LICENSE +202 -0
  872. data/ext/protovalidate/sys/third_party/cel-cpp/base/ast.h +20 -0
  873. data/ext/protovalidate/sys/third_party/cel-cpp/base/attribute.cc +330 -0
  874. data/ext/protovalidate/sys/third_party/cel-cpp/base/attribute.h +278 -0
  875. data/ext/protovalidate/sys/third_party/cel-cpp/base/attribute_set.h +108 -0
  876. data/ext/protovalidate/sys/third_party/cel-cpp/base/builtins.h +106 -0
  877. data/ext/protovalidate/sys/third_party/cel-cpp/base/function.h +20 -0
  878. data/ext/protovalidate/sys/third_party/cel-cpp/base/function_adapter.h +19 -0
  879. data/ext/protovalidate/sys/third_party/cel-cpp/base/function_descriptor.h +20 -0
  880. data/ext/protovalidate/sys/third_party/cel-cpp/base/function_result.h +70 -0
  881. data/ext/protovalidate/sys/third_party/cel-cpp/base/function_result_set.cc +28 -0
  882. data/ext/protovalidate/sys/third_party/cel-cpp/base/function_result_set.h +105 -0
  883. data/ext/protovalidate/sys/third_party/cel-cpp/base/internal/memory_manager_testing.h +54 -0
  884. data/ext/protovalidate/sys/third_party/cel-cpp/base/internal/message_wrapper.h +30 -0
  885. data/ext/protovalidate/sys/third_party/cel-cpp/base/internal/operators.h +91 -0
  886. data/ext/protovalidate/sys/third_party/cel-cpp/base/internal/unknown_set.cc +31 -0
  887. data/ext/protovalidate/sys/third_party/cel-cpp/base/internal/unknown_set.h +131 -0
  888. data/ext/protovalidate/sys/third_party/cel-cpp/base/kind.h +25 -0
  889. data/ext/protovalidate/sys/third_party/cel-cpp/base/operators.h +507 -0
  890. data/ext/protovalidate/sys/third_party/cel-cpp/base/type_provider.h +26 -0
  891. data/ext/protovalidate/sys/third_party/cel-cpp/checker/checker_options.h +110 -0
  892. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/builtins_arena.cc +28 -0
  893. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/builtins_arena.h +29 -0
  894. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/field_path.h +77 -0
  895. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/namespace_generator.h +120 -0
  896. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/proto_type_mask.h +111 -0
  897. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/proto_type_mask_registry.h +83 -0
  898. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/test_ast_helpers.h +31 -0
  899. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/type_check_env.h +249 -0
  900. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/type_checker_builder_impl.h +170 -0
  901. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/type_checker_impl.h +58 -0
  902. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/type_inference_context.h +229 -0
  903. data/ext/protovalidate/sys/third_party/cel-cpp/checker/optional.h +30 -0
  904. data/ext/protovalidate/sys/third_party/cel-cpp/checker/standard_library.h +26 -0
  905. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_check_issue.cc +59 -0
  906. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_check_issue.h +69 -0
  907. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_checker.cc +36 -0
  908. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_checker.h +65 -0
  909. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_checker_builder.h +186 -0
  910. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_checker_builder_factory.h +59 -0
  911. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_checker_subset_factory.h +45 -0
  912. data/ext/protovalidate/sys/third_party/cel-cpp/checker/validation_result.cc +32 -0
  913. data/ext/protovalidate/sys/third_party/cel-cpp/checker/validation_result.h +117 -0
  914. data/ext/protovalidate/sys/third_party/cel-cpp/codelab/checked_expr_conversion_example.h +59 -0
  915. data/ext/protovalidate/sys/third_party/cel-cpp/codelab/exercise1.h +32 -0
  916. data/ext/protovalidate/sys/third_party/cel-cpp/codelab/exercise10.h +46 -0
  917. data/ext/protovalidate/sys/third_party/cel-cpp/codelab/exercise2.h +40 -0
  918. data/ext/protovalidate/sys/third_party/cel-cpp/codelab/exercise4.h +34 -0
  919. data/ext/protovalidate/sys/third_party/cel-cpp/codelab/network_functions.h +197 -0
  920. data/ext/protovalidate/sys/third_party/cel-cpp/common/allocator.h +606 -0
  921. data/ext/protovalidate/sys/third_party/cel-cpp/common/any.cc +38 -0
  922. data/ext/protovalidate/sys/third_party/cel-cpp/common/any.h +90 -0
  923. data/ext/protovalidate/sys/third_party/cel-cpp/common/arena.h +110 -0
  924. data/ext/protovalidate/sys/third_party/cel-cpp/common/arena_string.h +365 -0
  925. data/ext/protovalidate/sys/third_party/cel-cpp/common/arena_string_pool.h +86 -0
  926. data/ext/protovalidate/sys/third_party/cel-cpp/common/arena_string_view.h +239 -0
  927. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/constant_proto.cc +123 -0
  928. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/constant_proto.h +37 -0
  929. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/expr_proto.cc +514 -0
  930. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/expr_proto.h +32 -0
  931. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/metadata.cc +262 -0
  932. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/metadata.h +920 -0
  933. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/navigable_ast_internal.h +311 -0
  934. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/navigable_ast_kinds.cc +80 -0
  935. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/navigable_ast_kinds.h +74 -0
  936. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/source_info_proto.cc +90 -0
  937. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/source_info_proto.h +32 -0
  938. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast.cc +98 -0
  939. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast.h +157 -0
  940. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_proto.cc +547 -0
  941. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_proto.h +52 -0
  942. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_rewrite.cc +389 -0
  943. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_rewrite.h +146 -0
  944. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_traverse.cc +380 -0
  945. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_traverse.h +105 -0
  946. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_visitor.h +118 -0
  947. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_visitor_base.h +88 -0
  948. data/ext/protovalidate/sys/third_party/cel-cpp/common/casting.h +75 -0
  949. data/ext/protovalidate/sys/third_party/cel-cpp/common/constant.cc +101 -0
  950. data/ext/protovalidate/sys/third_party/cel-cpp/common/constant.h +491 -0
  951. data/ext/protovalidate/sys/third_party/cel-cpp/common/container.cc +171 -0
  952. data/ext/protovalidate/sys/third_party/cel-cpp/common/container.h +138 -0
  953. data/ext/protovalidate/sys/third_party/cel-cpp/common/data.h +120 -0
  954. data/ext/protovalidate/sys/third_party/cel-cpp/common/decl.cc +221 -0
  955. data/ext/protovalidate/sys/third_party/cel-cpp/common/decl.h +446 -0
  956. data/ext/protovalidate/sys/third_party/cel-cpp/common/decl_proto.h +50 -0
  957. data/ext/protovalidate/sys/third_party/cel-cpp/common/decl_proto_v1alpha1.h +55 -0
  958. data/ext/protovalidate/sys/third_party/cel-cpp/common/descriptor_pool_type_introspector.cc +244 -0
  959. data/ext/protovalidate/sys/third_party/cel-cpp/common/descriptor_pool_type_introspector.h +106 -0
  960. data/ext/protovalidate/sys/third_party/cel-cpp/common/expr.cc +320 -0
  961. data/ext/protovalidate/sys/third_party/cel-cpp/common/expr.h +1720 -0
  962. data/ext/protovalidate/sys/third_party/cel-cpp/common/expr_factory.h +402 -0
  963. data/ext/protovalidate/sys/third_party/cel-cpp/common/expr_printer.h +57 -0
  964. data/ext/protovalidate/sys/third_party/cel-cpp/common/format_type_name.h +30 -0
  965. data/ext/protovalidate/sys/third_party/cel-cpp/common/function_descriptor.cc +98 -0
  966. data/ext/protovalidate/sys/third_party/cel-cpp/common/function_descriptor.h +124 -0
  967. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/byte_string.cc +1074 -0
  968. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/byte_string.h +688 -0
  969. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/casting.h +237 -0
  970. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/metadata.h +41 -0
  971. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/reference_count.cc +118 -0
  972. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/reference_count.h +406 -0
  973. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/value_conversion.h +115 -0
  974. data/ext/protovalidate/sys/third_party/cel-cpp/common/json.h +35 -0
  975. data/ext/protovalidate/sys/third_party/cel-cpp/common/kind.cc +80 -0
  976. data/ext/protovalidate/sys/third_party/cel-cpp/common/kind.h +76 -0
  977. data/ext/protovalidate/sys/third_party/cel-cpp/common/legacy_value.cc +1324 -0
  978. data/ext/protovalidate/sys/third_party/cel-cpp/common/legacy_value.h +131 -0
  979. data/ext/protovalidate/sys/third_party/cel-cpp/common/memory.cc +83 -0
  980. data/ext/protovalidate/sys/third_party/cel-cpp/common/memory.h +1505 -0
  981. data/ext/protovalidate/sys/third_party/cel-cpp/common/memory_testing.h +71 -0
  982. data/ext/protovalidate/sys/third_party/cel-cpp/common/minimal_descriptor_database.h +32 -0
  983. data/ext/protovalidate/sys/third_party/cel-cpp/common/minimal_descriptor_pool.h +36 -0
  984. data/ext/protovalidate/sys/third_party/cel-cpp/common/native_type.h +26 -0
  985. data/ext/protovalidate/sys/third_party/cel-cpp/common/navigable_ast.cc +202 -0
  986. data/ext/protovalidate/sys/third_party/cel-cpp/common/navigable_ast.h +168 -0
  987. data/ext/protovalidate/sys/third_party/cel-cpp/common/operators.cc +233 -0
  988. data/ext/protovalidate/sys/third_party/cel-cpp/common/operators.h +87 -0
  989. data/ext/protovalidate/sys/third_party/cel-cpp/common/optional_ref.h +163 -0
  990. data/ext/protovalidate/sys/third_party/cel-cpp/common/reference.h +269 -0
  991. data/ext/protovalidate/sys/third_party/cel-cpp/common/reference_count.h +26 -0
  992. data/ext/protovalidate/sys/third_party/cel-cpp/common/signature.cc +640 -0
  993. data/ext/protovalidate/sys/third_party/cel-cpp/common/signature.h +101 -0
  994. data/ext/protovalidate/sys/third_party/cel-cpp/common/source.cc +679 -0
  995. data/ext/protovalidate/sys/third_party/cel-cpp/common/source.h +261 -0
  996. data/ext/protovalidate/sys/third_party/cel-cpp/common/standard_definitions.h +349 -0
  997. data/ext/protovalidate/sys/third_party/cel-cpp/common/type.cc +737 -0
  998. data/ext/protovalidate/sys/third_party/cel-cpp/common/type.h +1303 -0
  999. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_introspector.cc +277 -0
  1000. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_introspector.h +157 -0
  1001. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_kind.h +113 -0
  1002. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_proto.h +39 -0
  1003. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_reflector.h +43 -0
  1004. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_spec_resolver.cc +324 -0
  1005. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_spec_resolver.h +46 -0
  1006. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_testing.h +24 -0
  1007. data/ext/protovalidate/sys/third_party/cel-cpp/common/typeinfo.cc +73 -0
  1008. data/ext/protovalidate/sys/third_party/cel-cpp/common/typeinfo.h +221 -0
  1009. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/any_type.h +74 -0
  1010. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/basic_struct_type.cc +53 -0
  1011. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/basic_struct_type.h +119 -0
  1012. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/bool_type.h +73 -0
  1013. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/bool_wrapper_type.h +79 -0
  1014. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/bytes_type.h +73 -0
  1015. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/bytes_wrapper_type.h +79 -0
  1016. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/double_type.h +73 -0
  1017. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/double_wrapper_type.h +79 -0
  1018. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/duration_type.h +73 -0
  1019. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/dyn_type.h +73 -0
  1020. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/enum_type.cc +43 -0
  1021. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/enum_type.h +128 -0
  1022. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/error_type.h +75 -0
  1023. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/function_type.cc +89 -0
  1024. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/function_type.h +91 -0
  1025. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/function_type_pool.cc +29 -0
  1026. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/function_type_pool.h +102 -0
  1027. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/int_type.h +72 -0
  1028. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/int_wrapper_type.h +78 -0
  1029. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/legacy_type_introspector.h +34 -0
  1030. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/list_type.cc +77 -0
  1031. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/list_type.h +115 -0
  1032. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/list_type_pool.cc +29 -0
  1033. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/list_type_pool.h +80 -0
  1034. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/map_type.cc +122 -0
  1035. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/map_type.h +124 -0
  1036. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/map_type_pool.cc +30 -0
  1037. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/map_type_pool.h +93 -0
  1038. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/message_type.cc +95 -0
  1039. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/message_type.h +209 -0
  1040. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/null_type.h +73 -0
  1041. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/opaque_type.cc +109 -0
  1042. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/opaque_type.h +118 -0
  1043. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/opaque_type_pool.cc +33 -0
  1044. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/opaque_type_pool.h +99 -0
  1045. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/optional_type.cc +68 -0
  1046. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/optional_type.h +114 -0
  1047. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/string_type.h +73 -0
  1048. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/string_wrapper_type.h +86 -0
  1049. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/struct_type.cc +87 -0
  1050. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/struct_type.h +158 -0
  1051. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/timestamp_type.h +73 -0
  1052. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_param_type.h +78 -0
  1053. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_pool.cc +96 -0
  1054. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_pool.h +99 -0
  1055. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_type.cc +74 -0
  1056. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_type.h +92 -0
  1057. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_type_pool.cc +26 -0
  1058. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_type_pool.h +86 -0
  1059. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/types.h +99 -0
  1060. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/uint_type.h +73 -0
  1061. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/uint_wrapper_type.h +79 -0
  1062. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/unknown_type.h +74 -0
  1063. data/ext/protovalidate/sys/third_party/cel-cpp/common/unknown.h +27 -0
  1064. data/ext/protovalidate/sys/third_party/cel-cpp/common/value.cc +2791 -0
  1065. data/ext/protovalidate/sys/third_party/cel-cpp/common/value.h +2947 -0
  1066. data/ext/protovalidate/sys/third_party/cel-cpp/common/value_kind.h +104 -0
  1067. data/ext/protovalidate/sys/third_party/cel-cpp/common/value_testing.h +307 -0
  1068. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/bool_value.cc +97 -0
  1069. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/bool_value.h +111 -0
  1070. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/bytes_value.cc +194 -0
  1071. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/bytes_value.h +338 -0
  1072. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/bytes_value_input_stream.h +133 -0
  1073. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/bytes_value_output_stream.h +176 -0
  1074. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_list_value.cc +614 -0
  1075. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_list_value.h +423 -0
  1076. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_map_value.cc +823 -0
  1077. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_map_value.h +469 -0
  1078. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_struct_value.cc +385 -0
  1079. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_struct_value.h +459 -0
  1080. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_value.h +84 -0
  1081. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/double_value.cc +137 -0
  1082. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/double_value.h +101 -0
  1083. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/duration_value.cc +105 -0
  1084. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/duration_value.h +147 -0
  1085. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/enum_value.h +49 -0
  1086. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/error_value.cc +194 -0
  1087. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/error_value.h +276 -0
  1088. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/int_value.cc +111 -0
  1089. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/int_value.h +117 -0
  1090. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/legacy_list_value.cc +76 -0
  1091. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/legacy_list_value.h +167 -0
  1092. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/legacy_map_value.cc +76 -0
  1093. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/legacy_map_value.h +185 -0
  1094. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/legacy_struct_value.cc +43 -0
  1095. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/legacy_struct_value.h +183 -0
  1096. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/list_value.cc +304 -0
  1097. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/list_value.h +284 -0
  1098. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/list_value_builder.h +110 -0
  1099. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/list_value_variant.h +214 -0
  1100. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/map_value.cc +378 -0
  1101. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/map_value.h +323 -0
  1102. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/map_value_builder.h +110 -0
  1103. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/map_value_variant.h +212 -0
  1104. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/message_value.cc +306 -0
  1105. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/message_value.h +268 -0
  1106. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/null_value.cc +78 -0
  1107. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/null_value.h +96 -0
  1108. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/opaque_value.cc +194 -0
  1109. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/opaque_value.h +338 -0
  1110. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/optional_value.cc +435 -0
  1111. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/optional_value.h +207 -0
  1112. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_json_list_value.cc +486 -0
  1113. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_json_list_value.h +229 -0
  1114. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_json_map_value.cc +439 -0
  1115. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_json_map_value.h +250 -0
  1116. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_json_value.cc +103 -0
  1117. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_json_value.h +40 -0
  1118. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_map_field_value.cc +583 -0
  1119. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_map_field_value.h +242 -0
  1120. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_message_value.cc +411 -0
  1121. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_message_value.h +249 -0
  1122. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_repeated_field_value.cc +365 -0
  1123. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_repeated_field_value.h +220 -0
  1124. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/string_value.cc +1518 -0
  1125. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/string_value.h +489 -0
  1126. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/struct_value.cc +390 -0
  1127. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/struct_value.h +373 -0
  1128. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/struct_value_builder.cc +1552 -0
  1129. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/struct_value_builder.h +35 -0
  1130. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/struct_value_variant.h +205 -0
  1131. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/timestamp_value.cc +105 -0
  1132. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/timestamp_value.h +146 -0
  1133. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/type_value.cc +72 -0
  1134. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/type_value.h +108 -0
  1135. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/uint_value.cc +110 -0
  1136. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/uint_value.h +119 -0
  1137. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/unknown_value.cc +66 -0
  1138. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/unknown_value.h +121 -0
  1139. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/value_builder.cc +1432 -0
  1140. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/value_builder.h +36 -0
  1141. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/value_variant.cc +537 -0
  1142. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/value_variant.h +831 -0
  1143. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/values.h +351 -0
  1144. data/ext/protovalidate/sys/third_party/cel-cpp/compiler/compiler.h +195 -0
  1145. data/ext/protovalidate/sys/third_party/cel-cpp/compiler/compiler_factory.h +70 -0
  1146. data/ext/protovalidate/sys/third_party/cel-cpp/compiler/compiler_library_subset_factory.h +80 -0
  1147. data/ext/protovalidate/sys/third_party/cel-cpp/compiler/optional.h +28 -0
  1148. data/ext/protovalidate/sys/third_party/cel-cpp/compiler/standard_library.h +27 -0
  1149. data/ext/protovalidate/sys/third_party/cel-cpp/env/config.h +173 -0
  1150. data/ext/protovalidate/sys/third_party/cel-cpp/env/env.h +76 -0
  1151. data/ext/protovalidate/sys/third_party/cel-cpp/env/env_runtime.h +85 -0
  1152. data/ext/protovalidate/sys/third_party/cel-cpp/env/env_std_extensions.h +42 -0
  1153. data/ext/protovalidate/sys/third_party/cel-cpp/env/env_yaml.h +74 -0
  1154. data/ext/protovalidate/sys/third_party/cel-cpp/env/internal/ext_registry.h +74 -0
  1155. data/ext/protovalidate/sys/third_party/cel-cpp/env/internal/runtime_ext_registry.h +84 -0
  1156. data/ext/protovalidate/sys/third_party/cel-cpp/env/runtime_std_extensions.h +46 -0
  1157. data/ext/protovalidate/sys/third_party/cel-cpp/env/type_info.h +42 -0
  1158. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/cel_expression_builder_flat_impl.cc +111 -0
  1159. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/cel_expression_builder_flat_impl.h +108 -0
  1160. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/check_ast_extensions.cc +58 -0
  1161. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/check_ast_extensions.h +34 -0
  1162. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/comprehension_vulnerability_check.cc +275 -0
  1163. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/comprehension_vulnerability_check.h +51 -0
  1164. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/constant_folding.cc +280 -0
  1165. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/constant_folding.h +42 -0
  1166. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/flat_expr_builder.cc +2667 -0
  1167. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/flat_expr_builder.h +104 -0
  1168. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/flat_expr_builder_extensions.cc +474 -0
  1169. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/flat_expr_builder_extensions.h +481 -0
  1170. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/instrumentation.h +60 -0
  1171. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/qualified_reference_resolver.cc +359 -0
  1172. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/qualified_reference_resolver.h +53 -0
  1173. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/regex_precompilation_optimization.cc +274 -0
  1174. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/regex_precompilation_optimization.h +29 -0
  1175. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/resolver.cc +222 -0
  1176. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/resolver.h +127 -0
  1177. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/attribute_trail.cc +28 -0
  1178. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/attribute_trail.h +65 -0
  1179. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/attribute_utility.cc +260 -0
  1180. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/attribute_utility.h +179 -0
  1181. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/cel_expression_flat_impl.cc +147 -0
  1182. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/cel_expression_flat_impl.h +175 -0
  1183. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/compiler_constant_step.cc +37 -0
  1184. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/compiler_constant_step.h +76 -0
  1185. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/comprehension_slots.h +153 -0
  1186. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/comprehension_step.cc +685 -0
  1187. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/comprehension_step.h +119 -0
  1188. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/const_value_step.h +31 -0
  1189. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/container_access_step.cc +370 -0
  1190. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/container_access_step.h +26 -0
  1191. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/create_list_step.cc +283 -0
  1192. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/create_list_step.h +40 -0
  1193. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/create_map_step.cc +289 -0
  1194. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/create_map_step.h +59 -0
  1195. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/create_struct_step.cc +270 -0
  1196. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/create_struct_step.h +44 -0
  1197. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/direct_expression_step.cc +34 -0
  1198. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/direct_expression_step.h +99 -0
  1199. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/equality_steps.cc +293 -0
  1200. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/equality_steps.h +45 -0
  1201. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/evaluator_core.cc +178 -0
  1202. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/evaluator_core.h +516 -0
  1203. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/evaluator_stack.cc +92 -0
  1204. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/evaluator_stack.h +327 -0
  1205. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/expression_step_base.h +12 -0
  1206. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/function_step.cc +529 -0
  1207. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/function_step.h +48 -0
  1208. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/ident_step.cc +174 -0
  1209. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/ident_step.h +31 -0
  1210. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/iterator_stack.h +77 -0
  1211. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/jump_step.cc +172 -0
  1212. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/jump_step.h +74 -0
  1213. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/lazy_init_step.cc +236 -0
  1214. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/lazy_init_step.h +87 -0
  1215. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/logic_step.cc +487 -0
  1216. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/logic_step.h +49 -0
  1217. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/optional_or_step.cc +305 -0
  1218. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/optional_or_step.h +51 -0
  1219. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/regex_match_step.cc +135 -0
  1220. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/regex_match_step.h +37 -0
  1221. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/select_step.cc +581 -0
  1222. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/select_step.h +33 -0
  1223. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/shadowable_value_step.cc +98 -0
  1224. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/shadowable_value_step.h +26 -0
  1225. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/ternary_step.cc +194 -0
  1226. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/ternary_step.h +26 -0
  1227. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/trace_step.h +73 -0
  1228. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/adapter_activation_impl.cc +87 -0
  1229. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/adapter_activation_impl.h +68 -0
  1230. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/cel_value_equal.cc +242 -0
  1231. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/cel_value_equal.h +34 -0
  1232. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/errors.cc +64 -0
  1233. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/errors.h +54 -0
  1234. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/interop.h +20 -0
  1235. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/activation.cc +119 -0
  1236. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/activation.h +170 -0
  1237. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/activation_bind_helper.h +60 -0
  1238. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/ast_rewrite.h +175 -0
  1239. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/ast_traverse.h +110 -0
  1240. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/ast_visitor.h +185 -0
  1241. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/ast_visitor_base.h +109 -0
  1242. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/base_activation.h +75 -0
  1243. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/builtin_func_registrar.cc +65 -0
  1244. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/builtin_func_registrar.h +30 -0
  1245. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_attribute.cc +90 -0
  1246. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_attribute.h +64 -0
  1247. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_builtins.h +19 -0
  1248. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_expr_builder_factory.cc +146 -0
  1249. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_expr_builder_factory.h +43 -0
  1250. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_expression.h +144 -0
  1251. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_function.cc +76 -0
  1252. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_function.h +80 -0
  1253. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_function_adapter.h +121 -0
  1254. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_function_adapter_impl.h +407 -0
  1255. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_function_registry.cc +122 -0
  1256. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_function_registry.h +146 -0
  1257. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_number.cc +31 -0
  1258. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_number.h +36 -0
  1259. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_options.cc +51 -0
  1260. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_options.h +233 -0
  1261. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_type_registry.cc +64 -0
  1262. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_type_registry.h +145 -0
  1263. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_value.cc +412 -0
  1264. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_value.h +770 -0
  1265. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_value_internal.h +103 -0
  1266. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_value_producer.h +25 -0
  1267. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/comparison_functions.h +36 -0
  1268. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/container_function_registrar.h +36 -0
  1269. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/container_backed_list_impl.h +44 -0
  1270. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/container_backed_map_impl.cc +131 -0
  1271. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/container_backed_map_impl.h +70 -0
  1272. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/field_access.cc +85 -0
  1273. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/field_access.h +70 -0
  1274. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/field_backed_list_impl.h +33 -0
  1275. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/field_backed_map_impl.h +35 -0
  1276. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/internal_field_backed_list_impl.cc +36 -0
  1277. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/internal_field_backed_list_impl.h +59 -0
  1278. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/internal_field_backed_map_impl.cc +298 -0
  1279. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/internal_field_backed_map_impl.h +77 -0
  1280. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/equality_function_registrar.h +44 -0
  1281. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/extension_func_registrar.h +20 -0
  1282. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/logical_function_registrar.h +36 -0
  1283. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/message_wrapper.h +139 -0
  1284. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/portable_cel_function_adapter.h +72 -0
  1285. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/set_util.h +43 -0
  1286. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/source_position.h +65 -0
  1287. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/string_extension_func_registrar.cc +29 -0
  1288. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/string_extension_func_registrar.h +31 -0
  1289. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/cel_proto_descriptor_pool_builder.h +40 -0
  1290. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/cel_proto_wrap_util.cc +1479 -0
  1291. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/cel_proto_wrap_util.h +45 -0
  1292. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/cel_proto_wrapper.cc +60 -0
  1293. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/cel_proto_wrapper.h +53 -0
  1294. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/field_access_impl.cc +746 -0
  1295. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/field_access_impl.h +80 -0
  1296. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/legacy_type_adapter.h +177 -0
  1297. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/legacy_type_info_apis.h +108 -0
  1298. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/legacy_type_provider.cc +232 -0
  1299. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/legacy_type_provider.h +79 -0
  1300. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/proto_message_type_adapter.cc +708 -0
  1301. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/proto_message_type_adapter.h +137 -0
  1302. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/protobuf_descriptor_type_provider.cc +70 -0
  1303. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/protobuf_descriptor_type_provider.h +67 -0
  1304. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/protobuf_value_factory.h +36 -0
  1305. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/trivial_legacy_type_info.h +54 -0
  1306. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/transform_utility.h +39 -0
  1307. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/unknown_attribute_set.h +20 -0
  1308. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/unknown_function_result_set.cc +1 -0
  1309. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/unknown_function_result_set.h +27 -0
  1310. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/unknown_set.h +22 -0
  1311. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/value_export_util.h +28 -0
  1312. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/bindings_ext.h +46 -0
  1313. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/comprehensions_v2.h +39 -0
  1314. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/comprehensions_v2_functions.h +35 -0
  1315. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/comprehensions_v2_macros.h +34 -0
  1316. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/encoders.h +45 -0
  1317. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/formatting.cc +570 -0
  1318. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/formatting.h +39 -0
  1319. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/lists_functions.h +138 -0
  1320. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/math_ext.h +39 -0
  1321. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/math_ext_decls.h +33 -0
  1322. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/math_ext_macros.h +38 -0
  1323. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/proto_ext.h +42 -0
  1324. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/ast_converters.h +56 -0
  1325. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/bind_proto_to_activation.h +38 -0
  1326. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/enum_adapter.h +30 -0
  1327. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/internal/map_reflection.cc +132 -0
  1328. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/internal/map_reflection.h +67 -0
  1329. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/internal/qualify.cc +457 -0
  1330. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/internal/qualify.h +117 -0
  1331. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/memory_manager.cc +37 -0
  1332. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/memory_manager.h +56 -0
  1333. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/runtime_adapter.h +51 -0
  1334. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/value.h +98 -0
  1335. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/value_testing.h +78 -0
  1336. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/regex_ext.h +131 -0
  1337. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/regex_functions.h +52 -0
  1338. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/select_optimization.cc +958 -0
  1339. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/select_optimization.h +90 -0
  1340. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/sets_functions.h +45 -0
  1341. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/strings.cc +432 -0
  1342. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/strings.h +73 -0
  1343. data/ext/protovalidate/sys/third_party/cel-cpp/internal/align.h +95 -0
  1344. data/ext/protovalidate/sys/third_party/cel-cpp/internal/benchmark.h +20 -0
  1345. data/ext/protovalidate/sys/third_party/cel-cpp/internal/casts.h +50 -0
  1346. data/ext/protovalidate/sys/third_party/cel-cpp/internal/empty_descriptors.cc +73 -0
  1347. data/ext/protovalidate/sys/third_party/cel-cpp/internal/empty_descriptors.h +31 -0
  1348. data/ext/protovalidate/sys/third_party/cel-cpp/internal/equals_text_proto.h +65 -0
  1349. data/ext/protovalidate/sys/third_party/cel-cpp/internal/exceptions.h +35 -0
  1350. data/ext/protovalidate/sys/third_party/cel-cpp/internal/json.cc +2041 -0
  1351. data/ext/protovalidate/sys/third_party/cel-cpp/internal/json.h +141 -0
  1352. data/ext/protovalidate/sys/third_party/cel-cpp/internal/lexis.cc +79 -0
  1353. data/ext/protovalidate/sys/third_party/cel-cpp/internal/lexis.h +32 -0
  1354. data/ext/protovalidate/sys/third_party/cel-cpp/internal/manual.h +91 -0
  1355. data/ext/protovalidate/sys/third_party/cel-cpp/internal/message_equality.cc +1490 -0
  1356. data/ext/protovalidate/sys/third_party/cel-cpp/internal/message_equality.h +54 -0
  1357. data/ext/protovalidate/sys/third_party/cel-cpp/internal/message_type_name.h +56 -0
  1358. data/ext/protovalidate/sys/third_party/cel-cpp/internal/minimal_descriptor_database.h +32 -0
  1359. data/ext/protovalidate/sys/third_party/cel-cpp/internal/minimal_descriptor_pool.h +40 -0
  1360. data/ext/protovalidate/sys/third_party/cel-cpp/internal/names.h +26 -0
  1361. data/ext/protovalidate/sys/third_party/cel-cpp/internal/new.cc +142 -0
  1362. data/ext/protovalidate/sys/third_party/cel-cpp/internal/new.h +61 -0
  1363. data/ext/protovalidate/sys/third_party/cel-cpp/internal/noop_delete.h +53 -0
  1364. data/ext/protovalidate/sys/third_party/cel-cpp/internal/number.h +299 -0
  1365. data/ext/protovalidate/sys/third_party/cel-cpp/internal/overflow.cc +339 -0
  1366. data/ext/protovalidate/sys/third_party/cel-cpp/internal/overflow.h +178 -0
  1367. data/ext/protovalidate/sys/third_party/cel-cpp/internal/parse_text_proto.h +121 -0
  1368. data/ext/protovalidate/sys/third_party/cel-cpp/internal/proto_file_util.h +73 -0
  1369. data/ext/protovalidate/sys/third_party/cel-cpp/internal/proto_matchers.h +140 -0
  1370. data/ext/protovalidate/sys/third_party/cel-cpp/internal/proto_time_encoding.cc +103 -0
  1371. data/ext/protovalidate/sys/third_party/cel-cpp/internal/proto_time_encoding.h +49 -0
  1372. data/ext/protovalidate/sys/third_party/cel-cpp/internal/proto_util.h +87 -0
  1373. data/ext/protovalidate/sys/third_party/cel-cpp/internal/protobuf_runtime_version.h +32 -0
  1374. data/ext/protovalidate/sys/third_party/cel-cpp/internal/re2_options.h +61 -0
  1375. data/ext/protovalidate/sys/third_party/cel-cpp/internal/runfiles.h +36 -0
  1376. data/ext/protovalidate/sys/third_party/cel-cpp/internal/status_builder.h +114 -0
  1377. data/ext/protovalidate/sys/third_party/cel-cpp/internal/status_macros.h +152 -0
  1378. data/ext/protovalidate/sys/third_party/cel-cpp/internal/string_pool.cc +79 -0
  1379. data/ext/protovalidate/sys/third_party/cel-cpp/internal/string_pool.h +59 -0
  1380. data/ext/protovalidate/sys/third_party/cel-cpp/internal/strings.cc +693 -0
  1381. data/ext/protovalidate/sys/third_party/cel-cpp/internal/strings.h +90 -0
  1382. data/ext/protovalidate/sys/third_party/cel-cpp/internal/testing.h +44 -0
  1383. data/ext/protovalidate/sys/third_party/cel-cpp/internal/testing_descriptor_pool.h +35 -0
  1384. data/ext/protovalidate/sys/third_party/cel-cpp/internal/testing_message_factory.h +31 -0
  1385. data/ext/protovalidate/sys/third_party/cel-cpp/internal/time.cc +198 -0
  1386. data/ext/protovalidate/sys/third_party/cel-cpp/internal/time.h +65 -0
  1387. data/ext/protovalidate/sys/third_party/cel-cpp/internal/to_address.h +68 -0
  1388. data/ext/protovalidate/sys/third_party/cel-cpp/internal/unicode.h +28 -0
  1389. data/ext/protovalidate/sys/third_party/cel-cpp/internal/utf8.cc +526 -0
  1390. data/ext/protovalidate/sys/third_party/cel-cpp/internal/utf8.h +82 -0
  1391. data/ext/protovalidate/sys/third_party/cel-cpp/internal/well_known_types.cc +2181 -0
  1392. data/ext/protovalidate/sys/third_party/cel-cpp/internal/well_known_types.h +1593 -0
  1393. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/ast_factory.cc +320 -0
  1394. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/ast_factory.h +174 -0
  1395. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/ast_factory_interface.h +130 -0
  1396. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/lexer.cc +711 -0
  1397. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/lexer.h +286 -0
  1398. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/options.h +29 -0
  1399. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/pratt_parser.cc +226 -0
  1400. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/pratt_parser.h +110 -0
  1401. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/pratt_parser_worker.cc +261 -0
  1402. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/pratt_parser_worker.h +1143 -0
  1403. data/ext/protovalidate/sys/third_party/cel-cpp/parser/macro.cc +561 -0
  1404. data/ext/protovalidate/sys/third_party/cel-cpp/parser/macro.h +229 -0
  1405. data/ext/protovalidate/sys/third_party/cel-cpp/parser/macro_expr_factory.cc +128 -0
  1406. data/ext/protovalidate/sys/third_party/cel-cpp/parser/macro_expr_factory.h +333 -0
  1407. data/ext/protovalidate/sys/third_party/cel-cpp/parser/macro_registry.cc +87 -0
  1408. data/ext/protovalidate/sys/third_party/cel-cpp/parser/macro_registry.h +59 -0
  1409. data/ext/protovalidate/sys/third_party/cel-cpp/parser/options.h +115 -0
  1410. data/ext/protovalidate/sys/third_party/cel-cpp/parser/parser.cc +1995 -0
  1411. data/ext/protovalidate/sys/third_party/cel-cpp/parser/parser.h +102 -0
  1412. data/ext/protovalidate/sys/third_party/cel-cpp/parser/parser_interface.h +160 -0
  1413. data/ext/protovalidate/sys/third_party/cel-cpp/parser/parser_subset_factory.h +41 -0
  1414. data/ext/protovalidate/sys/third_party/cel-cpp/parser/source_factory.h +47 -0
  1415. data/ext/protovalidate/sys/third_party/cel-cpp/parser/standard_macros.h +31 -0
  1416. data/ext/protovalidate/sys/third_party/cel-cpp/policy/cel_policy.h +333 -0
  1417. data/ext/protovalidate/sys/third_party/cel-cpp/policy/cel_policy_parse_context.h +65 -0
  1418. data/ext/protovalidate/sys/third_party/cel-cpp/policy/cel_policy_parse_result.h +105 -0
  1419. data/ext/protovalidate/sys/third_party/cel-cpp/policy/cel_policy_parser.h +40 -0
  1420. data/ext/protovalidate/sys/third_party/cel-cpp/policy/cel_policy_validation_result.h +84 -0
  1421. data/ext/protovalidate/sys/third_party/cel-cpp/policy/compiler.h +50 -0
  1422. data/ext/protovalidate/sys/third_party/cel-cpp/policy/internal/issue_reporter.h +57 -0
  1423. data/ext/protovalidate/sys/third_party/cel-cpp/policy/internal/optimizer_expr_factory.h +419 -0
  1424. data/ext/protovalidate/sys/third_party/cel-cpp/policy/internal/yaml_string_element_scanner.h +40 -0
  1425. data/ext/protovalidate/sys/third_party/cel-cpp/policy/test_util.h +33 -0
  1426. data/ext/protovalidate/sys/third_party/cel-cpp/policy/yaml_policy_parser.h +135 -0
  1427. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/activation.cc +141 -0
  1428. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/activation.h +184 -0
  1429. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/activation_interface.h +109 -0
  1430. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/bind_proto_to_activation.h +174 -0
  1431. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/comprehension_vulnerability_check.h +35 -0
  1432. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/constant_folding.h +69 -0
  1433. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/embedder_context.h +147 -0
  1434. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/function.h +115 -0
  1435. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/function_adapter.h +830 -0
  1436. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/function_overload_reference.h +34 -0
  1437. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/function_provider.h +46 -0
  1438. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/function_registry.cc +263 -0
  1439. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/function_registry.h +160 -0
  1440. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/activation_attribute_matcher_access.cc +61 -0
  1441. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/activation_attribute_matcher_access.h +60 -0
  1442. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/attribute_matcher.h +48 -0
  1443. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/convert_constant.cc +78 -0
  1444. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/convert_constant.h +39 -0
  1445. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/errors.cc +69 -0
  1446. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/errors.h +71 -0
  1447. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/function_adapter.h +232 -0
  1448. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/issue_collector.h +64 -0
  1449. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/legacy_runtime_type_provider.h +37 -0
  1450. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_env.cc +73 -0
  1451. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_env.h +134 -0
  1452. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_env_testing.h +60 -0
  1453. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_friend_access.h +45 -0
  1454. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_impl.cc +159 -0
  1455. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_impl.h +125 -0
  1456. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_type_provider.cc +96 -0
  1457. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_type_provider.h +66 -0
  1458. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/optional_types.h +152 -0
  1459. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/reference_resolver.h +46 -0
  1460. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/regex_precompilation.h +32 -0
  1461. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/register_function_helper.h +99 -0
  1462. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/runtime.h +229 -0
  1463. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/runtime_builder.h +101 -0
  1464. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/runtime_builder_factory.h +65 -0
  1465. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/runtime_issue.h +88 -0
  1466. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/runtime_options.h +209 -0
  1467. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/arithmetic_functions.cc +233 -0
  1468. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/arithmetic_functions.h +35 -0
  1469. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/comparison_functions.cc +272 -0
  1470. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/comparison_functions.h +36 -0
  1471. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/container_functions.cc +136 -0
  1472. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/container_functions.h +36 -0
  1473. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/container_membership_functions.cc +331 -0
  1474. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/container_membership_functions.h +34 -0
  1475. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/equality_functions.cc +612 -0
  1476. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/equality_functions.h +60 -0
  1477. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/logical_functions.cc +66 -0
  1478. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/logical_functions.h +36 -0
  1479. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/regex_functions.cc +56 -0
  1480. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/regex_functions.h +38 -0
  1481. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/string_functions.cc +140 -0
  1482. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/string_functions.h +34 -0
  1483. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/time_functions.cc +499 -0
  1484. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/time_functions.h +56 -0
  1485. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/type_conversion_functions.cc +470 -0
  1486. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/type_conversion_functions.h +34 -0
  1487. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard_functions.h +33 -0
  1488. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard_runtime_builder_factory.h +43 -0
  1489. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/type_registry.cc +84 -0
  1490. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/type_registry.h +155 -0
  1491. data/ext/protovalidate/sys/third_party/cel-cpp/tools/branch_coverage.h +68 -0
  1492. data/ext/protovalidate/sys/third_party/cel-cpp/tools/cel_field_extractor.h +70 -0
  1493. data/ext/protovalidate/sys/third_party/cel-cpp/tools/cel_unparser.h +60 -0
  1494. data/ext/protovalidate/sys/third_party/cel-cpp/tools/descriptor_pool_builder.h +93 -0
  1495. data/ext/protovalidate/sys/third_party/cel-cpp/tools/flatbuffers_backed_impl.h +58 -0
  1496. data/ext/protovalidate/sys/third_party/cel-cpp/tools/navigable_ast.h +169 -0
  1497. data/ext/protovalidate/sys/third_party/cel-cpp/tools/proto_to_predicate.h +48 -0
  1498. data/ext/protovalidate/sys/third_party/cel-cpp/validator/ast_depth_validator.h +27 -0
  1499. data/ext/protovalidate/sys/third_party/cel-cpp/validator/comprehension_nesting_validator.h +31 -0
  1500. data/ext/protovalidate/sys/third_party/cel-cpp/validator/homogeneous_literal_validator.h +38 -0
  1501. data/ext/protovalidate/sys/third_party/cel-cpp/validator/regex_validator.h +53 -0
  1502. data/ext/protovalidate/sys/third_party/cel-cpp/validator/timestamp_literal_validator.h +29 -0
  1503. data/ext/protovalidate/sys/third_party/cel-cpp/validator/validator.cc +85 -0
  1504. data/ext/protovalidate/sys/third_party/cel-cpp/validator/validator.h +151 -0
  1505. data/ext/protovalidate/sys/third_party/protobuf/LICENSE +32 -0
  1506. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/any.cc +65 -0
  1507. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/any.h +161 -0
  1508. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/any.pb.cc +528 -0
  1509. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/any.pb.h +516 -0
  1510. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/any_lite.cc +95 -0
  1511. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/api.pb.cc +1959 -0
  1512. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/api.pb.h +1985 -0
  1513. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena.cc +1004 -0
  1514. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena.h +1238 -0
  1515. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena_align.cc +21 -0
  1516. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena_align.h +199 -0
  1517. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena_allocation_policy.h +102 -0
  1518. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena_cleanup.h +108 -0
  1519. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena_test_util.h +91 -0
  1520. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arenastring.cc +290 -0
  1521. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arenastring.h +545 -0
  1522. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arenaz_sampler.cc +227 -0
  1523. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arenaz_sampler.h +238 -0
  1524. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/annotation_test_util.h +105 -0
  1525. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/code_generator.h +256 -0
  1526. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/code_generator_lite.h +77 -0
  1527. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.h +517 -0
  1528. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/command_line_interface_tester.h +162 -0
  1529. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/importer.cc +594 -0
  1530. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/importer.h +338 -0
  1531. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/mock_code_generator.h +144 -0
  1532. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/notices.h +242 -0
  1533. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/package_info.h +40 -0
  1534. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/parser.cc +2716 -0
  1535. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/parser.h +642 -0
  1536. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/plugin.h +73 -0
  1537. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/plugin.pb.h +2320 -0
  1538. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/retention.h +70 -0
  1539. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/scc.h +155 -0
  1540. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/subprocess.h +91 -0
  1541. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/versions.h +78 -0
  1542. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/zip_writer.h +45 -0
  1543. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/cpp_edition_defaults.h +12 -0
  1544. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/cpp_features.pb.cc +539 -0
  1545. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/cpp_features.pb.h +630 -0
  1546. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor.cc +10801 -0
  1547. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor.h +3417 -0
  1548. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor.pb.cc +18982 -0
  1549. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor.pb.h +23170 -0
  1550. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor_database.cc +1102 -0
  1551. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor_database.h +423 -0
  1552. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor_legacy.h +32 -0
  1553. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor_lite.h +110 -0
  1554. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor_test_utils.h +129 -0
  1555. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor_visitor.h +187 -0
  1556. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/duration.pb.cc +481 -0
  1557. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/duration.pb.h +367 -0
  1558. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/dynamic_message.cc +1104 -0
  1559. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/dynamic_message.h +217 -0
  1560. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/empty.pb.cc +285 -0
  1561. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/empty.pb.h +245 -0
  1562. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/endian.h +192 -0
  1563. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/explicitly_constructed.h +71 -0
  1564. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/extension_set.cc +1925 -0
  1565. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/extension_set.h +1886 -0
  1566. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/extension_set_heavy.cc +459 -0
  1567. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/extension_set_inl.h +274 -0
  1568. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/feature_resolver.cc +637 -0
  1569. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/feature_resolver.h +108 -0
  1570. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/field_access_listener.h +166 -0
  1571. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/field_mask.pb.cc +472 -0
  1572. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/field_mask.pb.h +396 -0
  1573. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/field_with_arena.h +110 -0
  1574. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_enum_reflection.h +187 -0
  1575. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_enum_util.cc +223 -0
  1576. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_enum_util.h +185 -0
  1577. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_bases.cc +88 -0
  1578. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_bases.h +68 -0
  1579. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_reflection.cc +4185 -0
  1580. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_reflection.h +372 -0
  1581. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_tctable_decl.h +615 -0
  1582. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_tctable_full.cc +105 -0
  1583. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_tctable_gen.cc +960 -0
  1584. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_tctable_gen.h +193 -0
  1585. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_tctable_impl.h +1229 -0
  1586. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_tctable_lite.cc +3308 -0
  1587. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_util.cc +434 -0
  1588. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_util.h +445 -0
  1589. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/has_bits.h +138 -0
  1590. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/implicit_weak_message.cc +139 -0
  1591. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/implicit_weak_message.h +266 -0
  1592. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/inlined_string_field.cc +144 -0
  1593. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/inlined_string_field.h +379 -0
  1594. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/internal_feature_helper.cc +28 -0
  1595. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/internal_feature_helper.h +130 -0
  1596. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/internal_metadata_locator.h +291 -0
  1597. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/internal_visibility.h +55 -0
  1598. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/internal_visibility_for_testing.h +27 -0
  1599. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/coded_stream.cc +1045 -0
  1600. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/coded_stream.h +1885 -0
  1601. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/gzip_stream.cc +333 -0
  1602. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/gzip_stream.h +189 -0
  1603. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/io_win32.cc +450 -0
  1604. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/io_win32.h +118 -0
  1605. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/package_info.h +30 -0
  1606. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/printer.cc +842 -0
  1607. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/printer.h +1183 -0
  1608. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/strtod.cc +260 -0
  1609. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/strtod.h +57 -0
  1610. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/test_zero_copy_stream.h +185 -0
  1611. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/tokenizer.cc +1262 -0
  1612. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/tokenizer.h +441 -0
  1613. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_sink.cc +45 -0
  1614. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_sink.h +59 -0
  1615. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_stream.cc +128 -0
  1616. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_stream.h +269 -0
  1617. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc +354 -0
  1618. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl.h +319 -0
  1619. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc +699 -0
  1620. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.h +533 -0
  1621. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/descriptor_traits.h +510 -0
  1622. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/lexer.cc +512 -0
  1623. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/lexer.h +341 -0
  1624. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/message_path.cc +46 -0
  1625. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/message_path.h +61 -0
  1626. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/parser.cc +1437 -0
  1627. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/parser.h +37 -0
  1628. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/parser_traits.h +400 -0
  1629. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/unparser.cc +915 -0
  1630. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/unparser.h +38 -0
  1631. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/unparser_traits.h +414 -0
  1632. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/untyped_message.cc +577 -0
  1633. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/untyped_message.h +246 -0
  1634. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/writer.cc +307 -0
  1635. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/writer.h +214 -0
  1636. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/zero_copy_buffered_stream.cc +152 -0
  1637. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/zero_copy_buffered_stream.h +338 -0
  1638. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/json.cc +137 -0
  1639. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/json.h +200 -0
  1640. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map.cc +297 -0
  1641. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map.h +1787 -0
  1642. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_entry.h +139 -0
  1643. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_field.cc +597 -0
  1644. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_field.h +925 -0
  1645. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_field_lite.h +124 -0
  1646. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_test.inc +4427 -0
  1647. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_test_util.h +617 -0
  1648. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_type_handler.h +374 -0
  1649. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/message.cc +745 -0
  1650. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/message.h +1936 -0
  1651. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/message_lite.cc +807 -0
  1652. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/message_lite.h +1861 -0
  1653. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/message_unittest.inc +2302 -0
  1654. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/message_unittest_legacy_apis.inc +98 -0
  1655. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/metadata.h +13 -0
  1656. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/metadata_lite.h +271 -0
  1657. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/micro_string.cc +376 -0
  1658. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/micro_string.h +649 -0
  1659. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/os_macros_restore.inc +97 -0
  1660. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/os_macros_undef.inc +166 -0
  1661. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/package_info.h +43 -0
  1662. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/parse_context.cc +850 -0
  1663. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/parse_context.h +1883 -0
  1664. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/port.cc +131 -0
  1665. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/port.h +908 -0
  1666. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/port_def.inc +820 -0
  1667. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/port_undef.inc +97 -0
  1668. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/proto3_lite_unittest.inc +127 -0
  1669. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/raw_ptr.cc +29 -0
  1670. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/raw_ptr.h +64 -0
  1671. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection.h +603 -0
  1672. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_internal.h +313 -0
  1673. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_mode.cc +36 -0
  1674. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_mode.h +144 -0
  1675. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_ops.cc +456 -0
  1676. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_ops.h +67 -0
  1677. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_tester.h +127 -0
  1678. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_visit_field_info.h +1378 -0
  1679. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_visit_fields.h +511 -0
  1680. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_field.cc +76 -0
  1681. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_field.h +1814 -0
  1682. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_field_proxy.h +697 -0
  1683. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_field_proxy_iterator.h +236 -0
  1684. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_field_proxy_traits.h +100 -0
  1685. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_field_reflection_unittest.inc +687 -0
  1686. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_ptr_field.cc +251 -0
  1687. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_ptr_field.h +2706 -0
  1688. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/runtime_version.h +27 -0
  1689. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/serial_arena.h +447 -0
  1690. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/service.cc +22 -0
  1691. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/service.h +271 -0
  1692. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/source_context.pb.cc +463 -0
  1693. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/source_context.pb.h +376 -0
  1694. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/string_block.h +181 -0
  1695. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/string_member_robber.h +17 -0
  1696. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/struct.pb.cc +1663 -0
  1697. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/struct.pb.h +1426 -0
  1698. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/stubs/callback.h +584 -0
  1699. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/stubs/common.cc +121 -0
  1700. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/stubs/common.h +94 -0
  1701. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/stubs/platform_macros.h +115 -0
  1702. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/stubs/port.h +228 -0
  1703. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/stubs/status_macros.h +72 -0
  1704. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/symbol_checker.cc +219 -0
  1705. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/symbol_checker.h +142 -0
  1706. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/test_textproto.h +54 -0
  1707. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/test_util.h +3897 -0
  1708. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/test_util2.h +70 -0
  1709. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/test_util_lite.h +86 -0
  1710. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/text_format.cc +3324 -0
  1711. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/text_format.h +925 -0
  1712. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/thread_safe_arena.h +297 -0
  1713. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/timestamp.pb.cc +481 -0
  1714. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/timestamp.pb.h +367 -0
  1715. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/type.pb.cc +3129 -0
  1716. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/type.pb.h +3343 -0
  1717. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/unknown_field_set.cc +351 -0
  1718. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/unknown_field_set.h +464 -0
  1719. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/delimited_message_util.cc +107 -0
  1720. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/delimited_message_util.h +85 -0
  1721. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/field_comparator.cc +237 -0
  1722. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/field_comparator.h +256 -0
  1723. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/field_mask_util.cc +754 -0
  1724. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/field_mask_util.h +242 -0
  1725. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/internal_timeval.h +28 -0
  1726. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/json_util.h +34 -0
  1727. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/message_differencer.cc +2372 -0
  1728. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/message_differencer.h +1002 -0
  1729. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/package_info.h +23 -0
  1730. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/python/field_mask_util_clif_aux.h +32 -0
  1731. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/time_util.cc +563 -0
  1732. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/time_util.h +297 -0
  1733. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/type_resolver.h +56 -0
  1734. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/type_resolver_util.cc +436 -0
  1735. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/type_resolver_util.h +45 -0
  1736. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/varint_shuffle.h +165 -0
  1737. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wire_format.cc +1785 -0
  1738. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wire_format.h +374 -0
  1739. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wire_format_lite.cc +901 -0
  1740. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wire_format_lite.h +1720 -0
  1741. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wire_format_unittest.h +1726 -0
  1742. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wrappers.pb.cc +3203 -0
  1743. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wrappers.pb.h +2317 -0
  1744. data/ext/protovalidate/sys/third_party/protobuf/third_party/utf8_range/utf8_range.c +207 -0
  1745. data/ext/protovalidate/sys/third_party/protobuf/third_party/utf8_range/utf8_range.h +23 -0
  1746. data/ext/protovalidate/sys/third_party/protobuf/third_party/utf8_range/utf8_range_neon.inc +117 -0
  1747. data/ext/protovalidate/sys/third_party/protobuf/third_party/utf8_range/utf8_range_sse.inc +272 -0
  1748. data/ext/protovalidate/sys/third_party/protobuf/third_party/utf8_range/utf8_validity.h +30 -0
  1749. data/ext/protovalidate/sys/third_party/protovalidate-cc/LICENSE +201 -0
  1750. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/cel_rules.h +116 -0
  1751. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/cel_validation_rules.cc +166 -0
  1752. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/cel_validation_rules.h +72 -0
  1753. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/extra_func.cc +482 -0
  1754. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/extra_func.h +31 -0
  1755. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/field_rules.cc +388 -0
  1756. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/field_rules.h +92 -0
  1757. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/ipv4.cc +69 -0
  1758. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/ipv4.h +58 -0
  1759. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/ipv6.cc +143 -0
  1760. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/ipv6.h +51 -0
  1761. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/parser_common.h +256 -0
  1762. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/uri.cc +469 -0
  1763. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/uri.h +25 -0
  1764. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/message_factory.cc +31 -0
  1765. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/message_factory.h +43 -0
  1766. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/message_rules.cc +114 -0
  1767. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/message_rules.h +39 -0
  1768. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/proto_field.h +155 -0
  1769. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/rules.cc +437 -0
  1770. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/rules.h +221 -0
  1771. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/validation_rules.h +153 -0
  1772. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/validator.cc +190 -0
  1773. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/validator.h +156 -0
  1774. data/ext/protovalidate/sys/third_party/re2/LICENSE +27 -0
  1775. data/ext/protovalidate/sys/third_party/re2/re2/bitmap256.cc +43 -0
  1776. data/ext/protovalidate/sys/third_party/re2/re2/bitmap256.h +88 -0
  1777. data/ext/protovalidate/sys/third_party/re2/re2/bitstate.cc +389 -0
  1778. data/ext/protovalidate/sys/third_party/re2/re2/compile.cc +1265 -0
  1779. data/ext/protovalidate/sys/third_party/re2/re2/dfa.cc +2135 -0
  1780. data/ext/protovalidate/sys/third_party/re2/re2/filtered_re2.cc +138 -0
  1781. data/ext/protovalidate/sys/third_party/re2/re2/filtered_re2.h +115 -0
  1782. data/ext/protovalidate/sys/third_party/re2/re2/mimics_pcre.cc +196 -0
  1783. data/ext/protovalidate/sys/third_party/re2/re2/nfa.cc +714 -0
  1784. data/ext/protovalidate/sys/third_party/re2/re2/onepass.cc +623 -0
  1785. data/ext/protovalidate/sys/third_party/re2/re2/parse.cc +2529 -0
  1786. data/ext/protovalidate/sys/third_party/re2/re2/perl_groups.cc +119 -0
  1787. data/ext/protovalidate/sys/third_party/re2/re2/pod_array.h +55 -0
  1788. data/ext/protovalidate/sys/third_party/re2/re2/prefilter.cc +711 -0
  1789. data/ext/protovalidate/sys/third_party/re2/re2/prefilter.h +168 -0
  1790. data/ext/protovalidate/sys/third_party/re2/re2/prefilter_tree.cc +376 -0
  1791. data/ext/protovalidate/sys/third_party/re2/re2/prefilter_tree.h +153 -0
  1792. data/ext/protovalidate/sys/third_party/re2/re2/prog.cc +1181 -0
  1793. data/ext/protovalidate/sys/third_party/re2/re2/prog.h +493 -0
  1794. data/ext/protovalidate/sys/third_party/re2/re2/re2.cc +1355 -0
  1795. data/ext/protovalidate/sys/third_party/re2/re2/re2.h +1074 -0
  1796. data/ext/protovalidate/sys/third_party/re2/re2/regexp.cc +1004 -0
  1797. data/ext/protovalidate/sys/third_party/re2/re2/regexp.h +693 -0
  1798. data/ext/protovalidate/sys/third_party/re2/re2/set.cc +185 -0
  1799. data/ext/protovalidate/sys/third_party/re2/re2/set.h +91 -0
  1800. data/ext/protovalidate/sys/third_party/re2/re2/simplify.cc +689 -0
  1801. data/ext/protovalidate/sys/third_party/re2/re2/sparse_array.h +394 -0
  1802. data/ext/protovalidate/sys/third_party/re2/re2/sparse_set.h +266 -0
  1803. data/ext/protovalidate/sys/third_party/re2/re2/stringpiece.h +18 -0
  1804. data/ext/protovalidate/sys/third_party/re2/re2/tostring.cc +351 -0
  1805. data/ext/protovalidate/sys/third_party/re2/re2/unicode_casefold.cc +604 -0
  1806. data/ext/protovalidate/sys/third_party/re2/re2/unicode_casefold.h +77 -0
  1807. data/ext/protovalidate/sys/third_party/re2/re2/unicode_groups.cc +6517 -0
  1808. data/ext/protovalidate/sys/third_party/re2/re2/unicode_groups.h +66 -0
  1809. data/ext/protovalidate/sys/third_party/re2/re2/walker-inl.h +249 -0
  1810. data/ext/protovalidate/sys/third_party/re2/util/malloc_counter.h +19 -0
  1811. data/ext/protovalidate/sys/third_party/re2/util/pcre.h +671 -0
  1812. data/ext/protovalidate/sys/third_party/re2/util/rune.cc +260 -0
  1813. data/ext/protovalidate/sys/third_party/re2/util/strutil.cc +26 -0
  1814. data/ext/protovalidate/sys/third_party/re2/util/strutil.h +16 -0
  1815. data/ext/protovalidate/sys/third_party/re2/util/utf.h +44 -0
  1816. data/ext/protovalidate/sys/versions.json +15 -0
  1817. data/lib/buf/validate/validate_pb.rb +55 -0
  1818. data/lib/protovalidate/errors.rb +32 -0
  1819. data/lib/protovalidate/native.rb +30 -0
  1820. data/lib/protovalidate/validator.rb +96 -0
  1821. data/lib/protovalidate/version.rb +10 -0
  1822. data/lib/protovalidate/violation.rb +115 -0
  1823. data/lib/protovalidate.rb +48 -0
  1824. data/sig/buf/validate/validate_pb.rbs +64 -0
  1825. data/sig/protovalidate/native.rbs +14 -0
  1826. data/sig/protovalidate.rbs +90 -0
  1827. metadata +1900 -0
@@ -0,0 +1,4185 @@
1
+ // Protocol Buffers - Google's data interchange format
2
+ // Copyright 2008 Google Inc. All rights reserved.
3
+ //
4
+ // Use of this source code is governed by a BSD-style
5
+ // license that can be found in the LICENSE file or at
6
+ // https://developers.google.com/open-source/licenses/bsd
7
+
8
+ // Author: kenton@google.com (Kenton Varda)
9
+ // Based on original Protocol Buffers design by
10
+ // Sanjay Ghemawat, Jeff Dean, and others.
11
+
12
+ #include "google/protobuf/generated_message_reflection.h"
13
+
14
+ #include <algorithm>
15
+ #include <atomic>
16
+ #include <cstddef>
17
+ #include <cstdint>
18
+ #include <cstring>
19
+ #include <new> // IWYU pragma: keep for operator delete
20
+ #include <queue>
21
+ #include <string>
22
+ #include <type_traits>
23
+ #include <utility>
24
+ #include <variant>
25
+ #include <vector>
26
+
27
+ #include "absl/algorithm/container.h"
28
+ #include "absl/base/attributes.h"
29
+ #include "absl/base/call_once.h"
30
+ #include "absl/base/casts.h"
31
+ #include "absl/base/const_init.h"
32
+ #include "absl/container/flat_hash_set.h"
33
+ #include "absl/log/absl_check.h"
34
+ #include "absl/log/absl_log.h"
35
+ #include "absl/strings/ascii.h"
36
+ #include "absl/strings/numbers.h"
37
+ #include "absl/strings/str_cat.h"
38
+ #include "absl/strings/str_format.h"
39
+ #include "absl/strings/str_join.h"
40
+ #include "absl/strings/string_view.h"
41
+ #include "absl/synchronization/mutex.h"
42
+ #include "absl/types/span.h"
43
+ #include "google/protobuf/arena.h"
44
+ #include "google/protobuf/cpp_features.pb.h"
45
+ #include "google/protobuf/descriptor.h"
46
+ #include "google/protobuf/descriptor.pb.h"
47
+ #include "google/protobuf/descriptor_lite.h"
48
+ #include "google/protobuf/extension_set.h"
49
+ #include "google/protobuf/generated_enum_util.h"
50
+ #include "google/protobuf/generated_message_tctable_decl.h"
51
+ #include "google/protobuf/generated_message_tctable_gen.h"
52
+ #include "google/protobuf/generated_message_tctable_impl.h"
53
+ #include "google/protobuf/generated_message_util.h"
54
+ #include "google/protobuf/has_bits.h"
55
+ #include "google/protobuf/inlined_string_field.h"
56
+ #include "google/protobuf/map_field.h"
57
+ #include "google/protobuf/message.h"
58
+ #include "google/protobuf/message_lite.h"
59
+ #include "google/protobuf/micro_string.h"
60
+ #include "google/protobuf/port.h"
61
+ #include "google/protobuf/raw_ptr.h"
62
+ #include "google/protobuf/reflection_visit_fields.h"
63
+ #include "google/protobuf/repeated_field.h"
64
+ #include "google/protobuf/repeated_ptr_field.h"
65
+ #include "google/protobuf/unknown_field_set.h"
66
+
67
+
68
+ // clang-format off
69
+ #include "google/protobuf/port_def.inc"
70
+ // clang-format on
71
+
72
+ #define GOOGLE_PROTOBUF_HAS_ONEOF
73
+
74
+ using google::protobuf::internal::ArenaStringPtr;
75
+ using google::protobuf::internal::DescriptorTable;
76
+ using google::protobuf::internal::ExtensionSet;
77
+ using google::protobuf::internal::GenericTypeHandler;
78
+ using google::protobuf::internal::InlinedStringField;
79
+ using google::protobuf::internal::InternalMetadata;
80
+ using google::protobuf::internal::kNoHasbit;
81
+ using google::protobuf::internal::LazyField;
82
+ using google::protobuf::internal::MapFieldBase;
83
+ using google::protobuf::internal::MessageGlobalsBase;
84
+ using google::protobuf::internal::MicroString;
85
+ using google::protobuf::internal::MigrationSchema;
86
+ using google::protobuf::internal::OnShutdownDelete;
87
+ using google::protobuf::internal::ReflectionSchema;
88
+ using google::protobuf::internal::RepeatedPtrFieldBase;
89
+ using google::protobuf::internal::StringSpaceUsedExcludingSelfLong;
90
+ using google::protobuf::internal::cpp::IsLazilyInitializedFile;
91
+
92
+ namespace google {
93
+ namespace protobuf {
94
+
95
+ namespace {
96
+ bool IsMapFieldInApi(const FieldDescriptor* field) { return field->is_map(); }
97
+
98
+ bool IsMapEntry(const FieldDescriptor* field) {
99
+ return (field->containing_type() != nullptr &&
100
+ field->containing_type()->options().map_entry());
101
+ }
102
+
103
+ Message* MaybeForceCopy(Arena* arena, Message* msg) {
104
+ if (arena != nullptr || msg == nullptr) return msg;
105
+
106
+ Message* copy = msg->New();
107
+ copy->MergeFrom(*msg);
108
+ delete msg;
109
+ return copy;
110
+ }
111
+ } // anonymous namespace
112
+
113
+ namespace internal {
114
+
115
+ void InitializeFileDescriptorDefaultInstances() {
116
+ #if !defined(PROTOBUF_CONSTINIT_DEFAULT_INSTANCES)
117
+ static std::true_type init =
118
+ (InitializeFileDescriptorDefaultInstancesSlow(), std::true_type{});
119
+ (void)init;
120
+ #endif // !defined(PROTOBUF_CONSTINIT_DEFAULT_INSTANCES)
121
+ }
122
+
123
+ void InitializeLazyExtensionSet() {
124
+ }
125
+
126
+ bool ParseNamedEnum(const EnumDescriptor* PROTOBUF_NONNULL descriptor,
127
+ absl::string_view name, int* PROTOBUF_NONNULL value) {
128
+ const EnumValueDescriptor* d = descriptor->FindValueByName(name);
129
+ if (d == nullptr) return false;
130
+ *value = d->number();
131
+ return true;
132
+ }
133
+
134
+ const std::string& NameOfEnum(const EnumDescriptor* PROTOBUF_NONNULL descriptor,
135
+ int value) {
136
+ const EnumValueDescriptor* d = descriptor->FindValueByNumber(value);
137
+ return (d == nullptr ? GetEmptyString() : internal::NameOfEnumAsString(d));
138
+ }
139
+
140
+ // Internal helper routine for NameOfDenseEnum in the header file.
141
+ // Allocates and fills a simple array of string pointers, based on
142
+ // reflection information about the names of the enums. This routine
143
+ // allocates max_val + 1 entries, under the assumption that all the enums
144
+ // fall in the range [min_val .. max_val].
145
+ const std::string** MakeDenseEnumCache(const EnumDescriptor* desc, int min_val,
146
+ int max_val) {
147
+ auto* str_ptrs =
148
+ new const std::string*[static_cast<size_t>(max_val - min_val + 1)]();
149
+ const int count = desc->value_count();
150
+ for (int i = 0; i < count; ++i) {
151
+ const int num = desc->value(i)->number();
152
+ if (str_ptrs[num - min_val] == nullptr) {
153
+ // Don't over-write an existing entry, because in case of duplication, the
154
+ // first one wins.
155
+ str_ptrs[num - min_val] = &internal::NameOfEnumAsString(desc->value(i));
156
+ }
157
+ }
158
+ // Change any unfilled entries to point to the empty string.
159
+ for (int i = 0; i < max_val - min_val + 1; ++i) {
160
+ if (str_ptrs[i] == nullptr) str_ptrs[i] = &GetEmptyStringAlreadyInited();
161
+ }
162
+ return str_ptrs;
163
+ }
164
+
165
+ PROTOBUF_NOINLINE const std::string& NameOfDenseEnumSlow(
166
+ int v, DenseEnumCacheInfo* deci) {
167
+ if (v < deci->min_val || v > deci->max_val)
168
+ return GetEmptyStringAlreadyInited();
169
+
170
+ const std::string** new_cache =
171
+ MakeDenseEnumCache(deci->descriptor_fn(), deci->min_val, deci->max_val);
172
+ const std::string** old_cache = nullptr;
173
+
174
+ if (deci->cache.compare_exchange_strong(old_cache, new_cache,
175
+ std::memory_order_release,
176
+ std::memory_order_acquire)) {
177
+ // We successfully stored our new cache, and the old value was nullptr.
178
+ return *new_cache[v - deci->min_val];
179
+ } else {
180
+ // In the time it took to create our enum cache, another thread also
181
+ // created one, and put it into deci->cache. So delete ours, and
182
+ // use theirs instead.
183
+ delete[] new_cache;
184
+ return *old_cache[v - deci->min_val];
185
+ }
186
+ }
187
+
188
+ bool IsMatchingCType(const FieldDescriptor* field, int ctype) {
189
+ switch (field->cpp_string_type()) {
190
+ case FieldDescriptor::CppStringType::kCord:
191
+ return ctype == FieldOptions::CORD;
192
+ case FieldDescriptor::CppStringType::kView:
193
+ case FieldDescriptor::CppStringType::kString:
194
+ return ctype == FieldOptions::STRING;
195
+ }
196
+ internal::Unreachable();
197
+ }
198
+
199
+ bool AbslParseFlagImpl(absl::string_view text, int& e,
200
+ const EnumDescriptor& desc, std::string& error) {
201
+ if (const auto* value = desc.FindValueByName(text)) {
202
+ e = value->number();
203
+ return true;
204
+ }
205
+
206
+ // Try as lower case
207
+ if (absl::AsciiStrToLower(text) == text) {
208
+ if (const auto* value = desc.FindValueByName(absl::AsciiStrToUpper(text))) {
209
+ e = value->number();
210
+ return true;
211
+ }
212
+ }
213
+
214
+ // Try as a number
215
+ int as_number;
216
+ if (absl::SimpleAtoi(text, &as_number) &&
217
+ desc.FindValueByNumber(as_number) != nullptr) {
218
+ e = as_number;
219
+ return true;
220
+ }
221
+
222
+ std::vector<absl::string_view> supported_values;
223
+ supported_values.reserve(desc.value_count());
224
+ for (int i = 0; i < desc.value_count(); i++) {
225
+ supported_values.push_back(desc.value(i)->name());
226
+ }
227
+ error = absl::StrFormat(
228
+ "Invalid value '%s' for enum '%s'. Supported values are: %s.", text,
229
+ desc.full_name(), absl::StrJoin(supported_values, ", "));
230
+ return false;
231
+ }
232
+
233
+ std::string AbslUnparseFlagImpl(int e, const EnumDescriptor& desc) {
234
+ if (const auto* value = desc.FindValueByNumber(e)) {
235
+ return std::string(value->name());
236
+ }
237
+ return absl::StrCat(e);
238
+ }
239
+
240
+ } // namespace internal
241
+
242
+ // ===================================================================
243
+ // Helpers for reporting usage errors (e.g. trying to use GetInt32() on
244
+ // a string field).
245
+
246
+ namespace {
247
+
248
+ using internal::GetConstPointerAtOffset;
249
+ using internal::GetConstRefAtOffset;
250
+ using internal::GetPointerAtOffset;
251
+
252
+ void ReportReflectionUsageError(const Descriptor* descriptor,
253
+ const FieldDescriptor* field,
254
+ const char* method, const char* description) {
255
+ ABSL_LOG(FATAL) << "Protocol Buffer reflection usage error:\n"
256
+ " Method : google::protobuf::Reflection::"
257
+ << method
258
+ << "\n"
259
+ " Message type: "
260
+ << descriptor->full_name()
261
+ << "\n"
262
+ " Field : "
263
+ << field->full_name()
264
+ << "\n"
265
+ " Problem : "
266
+ << description;
267
+ }
268
+
269
+ #ifndef NDEBUG
270
+ void ReportReflectionUsageMessageError(const Descriptor* expected,
271
+ const Descriptor* actual,
272
+ const FieldDescriptor* field,
273
+ const char* method) {
274
+ ABSL_LOG(FATAL) << absl::StrFormat(
275
+ "Protocol Buffer reflection usage error:\n"
276
+ " Method : google::protobuf::Reflection::%s\n"
277
+ " Expected type: %s\n"
278
+ " Actual type : %s\n"
279
+ " Field : %s\n"
280
+ " Problem : Message is not the right object for reflection",
281
+ method, expected->full_name(), actual->full_name(),
282
+ (field != nullptr ? field->full_name() : "n/a"));
283
+ }
284
+ #endif
285
+
286
+ const char* cpptype_names_[FieldDescriptor::MAX_CPPTYPE + 1] = {
287
+ "INVALID_CPPTYPE", "CPPTYPE_INT32", "CPPTYPE_INT64", "CPPTYPE_UINT32",
288
+ "CPPTYPE_UINT64", "CPPTYPE_DOUBLE", "CPPTYPE_FLOAT", "CPPTYPE_BOOL",
289
+ "CPPTYPE_ENUM", "CPPTYPE_STRING", "CPPTYPE_MESSAGE"};
290
+
291
+ static void ReportReflectionUsageTypeError(
292
+ const Descriptor* descriptor, const FieldDescriptor* field,
293
+ const char* method, FieldDescriptor::CppType expected_type) {
294
+ ABSL_LOG(FATAL)
295
+ << "Protocol Buffer reflection usage error:\n"
296
+ " Method : google::protobuf::Reflection::"
297
+ << method
298
+ << "\n"
299
+ " Message type: "
300
+ << descriptor->full_name()
301
+ << "\n"
302
+ " Field : "
303
+ << field->full_name()
304
+ << "\n"
305
+ " Problem : Field is not the right type for this message:\n"
306
+ " Expected : "
307
+ << cpptype_names_[expected_type]
308
+ << "\n"
309
+ " Field type: "
310
+ << cpptype_names_[field->cpp_type()];
311
+ }
312
+
313
+ static void ReportReflectionUsageEnumTypeError(
314
+ const Descriptor* descriptor, const FieldDescriptor* field,
315
+ const char* method, const EnumValueDescriptor* value) {
316
+ ABSL_LOG(FATAL) << "Protocol Buffer reflection usage error:\n"
317
+ " Method : google::protobuf::Reflection::"
318
+ << method
319
+ << "\n"
320
+ " Message type: "
321
+ << descriptor->full_name()
322
+ << "\n"
323
+ " Field : "
324
+ << field->full_name()
325
+ << "\n"
326
+ " Problem : Enum value did not match field type:\n"
327
+ " Expected : "
328
+ << field->enum_type()->full_name()
329
+ << "\n"
330
+ " Actual : "
331
+ << value->full_name();
332
+ }
333
+
334
+ #define USAGE_CHECK(CONDITION, METHOD, ERROR_DESCRIPTION) \
335
+ if (!(CONDITION)) \
336
+ ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
337
+ #define USAGE_CHECK_EQ(A, B, METHOD, ERROR_DESCRIPTION) \
338
+ USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
339
+ #define USAGE_CHECK_NE(A, B, METHOD, ERROR_DESCRIPTION) \
340
+ USAGE_CHECK((A) != (B), METHOD, ERROR_DESCRIPTION)
341
+
342
+ #define USAGE_CHECK_TYPE(METHOD, CPPTYPE) \
343
+ if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
344
+ ReportReflectionUsageTypeError(descriptor_, field, #METHOD, \
345
+ FieldDescriptor::CPPTYPE_##CPPTYPE)
346
+
347
+ #define USAGE_CHECK_ENUM_VALUE(METHOD) \
348
+ if (value->type() != field->enum_type()) \
349
+ ReportReflectionUsageEnumTypeError(descriptor_, field, #METHOD, value)
350
+
351
+ #ifdef NDEBUG
352
+ // Avoid a virtual method call in optimized builds.
353
+ #define USAGE_CHECK_MESSAGE(METHOD, MESSAGE)
354
+ #define STATIC_USAGE_CHECK_MESSAGE(METHOD, MESSAGE)
355
+ #else
356
+ #define USAGE_CHECK_MESSAGE(METHOD, MESSAGE) \
357
+ if (this != (MESSAGE)->GetReflection()) \
358
+ ReportReflectionUsageMessageError(descriptor_, (MESSAGE)->GetDescriptor(), \
359
+ field, #METHOD)
360
+ #define STATIC_USAGE_CHECK_MESSAGE(METHOD, MESSAGE) \
361
+ if (this != (MESSAGE)->GetReflection()) \
362
+ ReportReflectionUsageMessageError(descriptor_, (MESSAGE)->GetDescriptor(), \
363
+ /*field=*/nullptr, #METHOD)
364
+ #endif
365
+
366
+ #define USAGE_CHECK_MESSAGE_TYPE(METHOD) \
367
+ USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
368
+ "Field does not match message type.");
369
+ #define USAGE_CHECK_SINGULAR(METHOD) \
370
+ USAGE_CHECK_NE(field->is_repeated(), true, METHOD, \
371
+ "Field is repeated; the method requires a singular field.")
372
+ #define USAGE_CHECK_REPEATED(METHOD) \
373
+ USAGE_CHECK_EQ(field->is_repeated(), true, METHOD, \
374
+ "Field is singular; the method requires a repeated field.")
375
+
376
+ #define USAGE_CHECK_ALL(METHOD, LABEL, CPPTYPE) \
377
+ USAGE_CHECK_MESSAGE(METHOD, &message); \
378
+ USAGE_CHECK_MESSAGE_TYPE(METHOD); \
379
+ USAGE_CHECK_##LABEL(METHOD); \
380
+ USAGE_CHECK_TYPE(METHOD, CPPTYPE)
381
+
382
+ #define USAGE_MUTABLE_CHECK_ALL(METHOD, LABEL, CPPTYPE) \
383
+ USAGE_CHECK_MESSAGE(METHOD, message); \
384
+ USAGE_CHECK_MESSAGE_TYPE(METHOD); \
385
+ USAGE_CHECK_##LABEL(METHOD); \
386
+ USAGE_CHECK_TYPE(METHOD, CPPTYPE)
387
+
388
+ #define USAGE_CHECK_EXPOSE_LEGACY_REPEATED_FIELD(intent, METHOD) \
389
+ do { \
390
+ switch (intent) { \
391
+ case GetRepeatedFieldIntent::kExposeDirectly: \
392
+ USAGE_CHECK_EQ( \
393
+ field->CalculateCppRepeatedType(), \
394
+ FieldDescriptor::CppRepeatedType::kRepeated, METHOD, \
395
+ "Field is a proxied repeated field; this method requires a " \
396
+ "legacy repeated field."); \
397
+ break; \
398
+ case GetRepeatedFieldIntent::kHiddenOrInternal: \
399
+ break; \
400
+ } \
401
+ } while (0)
402
+
403
+ } // namespace
404
+
405
+ // ===================================================================
406
+
407
+ Reflection::Reflection(const Descriptor* descriptor,
408
+ const internal::ReflectionSchema& schema,
409
+ const DescriptorPool* pool, MessageFactory* factory)
410
+ : last_non_weak_field_index_(-1),
411
+ descriptor_(descriptor),
412
+ message_factory_(factory),
413
+ descriptor_pool_(
414
+ (pool == nullptr) ? DescriptorPool::internal_generated_pool() : pool),
415
+ schema_(schema) {
416
+ last_non_weak_field_index_ = descriptor_->field_count() - 1;
417
+ }
418
+
419
+ Reflection::~Reflection() {
420
+ // No need to use sized delete. This code path is uncommon and it would not be
421
+ // worth saving or recalculating the size.
422
+ ::operator delete(const_cast<internal::TcParseTableBase*>(tcparse_table_));
423
+ }
424
+
425
+ const UnknownFieldSet& Reflection::GetUnknownFields(
426
+ const Message& message) const {
427
+ STATIC_USAGE_CHECK_MESSAGE(GetUnknownFields, &message);
428
+ return GetInternalMetadata(message).unknown_fields<UnknownFieldSet>(
429
+ UnknownFieldSet::default_instance);
430
+ }
431
+
432
+ UnknownFieldSet* Reflection::MutableUnknownFields(Message* message) const {
433
+ STATIC_USAGE_CHECK_MESSAGE(MutableUnknownFields, message);
434
+ return MutableInternalMetadata(message)
435
+ ->mutable_unknown_fields<UnknownFieldSet>();
436
+ }
437
+
438
+ bool Reflection::IsLazyExtension(const Message& message,
439
+ const FieldDescriptor* field) const {
440
+ USAGE_CHECK_MESSAGE(IsLazyExtension, &message);
441
+ return field->is_extension() &&
442
+ GetExtensionSet(message).HasLazy(field->number());
443
+ }
444
+
445
+ bool Reflection::IsLazilyVerifiedLazyField(const FieldDescriptor* field) const {
446
+ return false;
447
+ }
448
+
449
+ bool Reflection::IsEagerlyVerifiedLazyField(
450
+ const FieldDescriptor* field) const {
451
+ return false;
452
+ }
453
+
454
+ internal::field_layout::TransformValidation Reflection::GetLazyStyle(
455
+ const FieldDescriptor* field) const {
456
+ if (IsEagerlyVerifiedLazyField(field)) {
457
+ return internal::field_layout::kTvEager;
458
+ }
459
+ if (IsLazilyVerifiedLazyField(field)) {
460
+ return internal::field_layout::kTvLazy;
461
+ }
462
+ return {};
463
+ }
464
+
465
+ size_t Reflection::SpaceUsedLong(const Message& message) const {
466
+ STATIC_USAGE_CHECK_MESSAGE(SpaceUsedLong, &message);
467
+ // object_size_ already includes the in-memory representation of each field
468
+ // in the message, so we only need to account for additional memory used by
469
+ // the fields.
470
+ size_t total_size = schema_.GetObjectSize();
471
+
472
+ total_size += GetUnknownFields(message).SpaceUsedExcludingSelfLong();
473
+
474
+ if (schema_.HasExtensionSet()) {
475
+ total_size += GetExtensionSet(message).SpaceUsedExcludingSelfLong();
476
+ }
477
+ for (int i = 0; i <= last_non_weak_field_index_; i++) {
478
+ const FieldDescriptor* field = descriptor_->field(i);
479
+ if (field->is_repeated()) {
480
+ switch (field->cpp_type()) {
481
+ #define HANDLE_TYPE(UPPERCASE, LOWERCASE) \
482
+ case FieldDescriptor::CPPTYPE_##UPPERCASE: \
483
+ total_size += GetRaw<RepeatedField<LOWERCASE>>(message, field) \
484
+ .SpaceUsedExcludingSelfLong(); \
485
+ break
486
+
487
+ HANDLE_TYPE(INT32, int32_t);
488
+ HANDLE_TYPE(INT64, int64_t);
489
+ HANDLE_TYPE(UINT32, uint32_t);
490
+ HANDLE_TYPE(UINT64, uint64_t);
491
+ HANDLE_TYPE(DOUBLE, double);
492
+ HANDLE_TYPE(FLOAT, float);
493
+ HANDLE_TYPE(BOOL, bool);
494
+ HANDLE_TYPE(ENUM, int);
495
+ #undef HANDLE_TYPE
496
+
497
+ case FieldDescriptor::CPPTYPE_STRING:
498
+ switch (field->cpp_string_type()) {
499
+ case FieldDescriptor::CppStringType::kCord:
500
+ total_size += GetRaw<RepeatedField<absl::Cord>>(message, field)
501
+ .SpaceUsedExcludingSelfLong();
502
+ break;
503
+ case FieldDescriptor::CppStringType::kView:
504
+ case FieldDescriptor::CppStringType::kString:
505
+ total_size +=
506
+ GetRaw<RepeatedPtrField<std::string>>(message, field)
507
+ .SpaceUsedExcludingSelfLong();
508
+ break;
509
+ }
510
+ break;
511
+
512
+ case FieldDescriptor::CPPTYPE_MESSAGE:
513
+ if (IsMapFieldInApi(field)) {
514
+ total_size += GetRaw<internal::MapFieldBase>(message, field)
515
+ .SpaceUsedExcludingSelfLong();
516
+ } else {
517
+ // We don't know which subclass of RepeatedPtrFieldBase the type is,
518
+ // so we use RepeatedPtrFieldBase directly.
519
+ total_size +=
520
+ GetRaw<RepeatedPtrFieldBase>(message, field)
521
+ .SpaceUsedExcludingSelfLong<GenericTypeHandler<Message>>();
522
+ }
523
+
524
+ break;
525
+ }
526
+ } else {
527
+ if (schema_.InRealOneof(field) && !HasOneofField(message, field)) {
528
+ continue;
529
+ }
530
+ switch (field->cpp_type()) {
531
+ case FieldDescriptor::CPPTYPE_INT32:
532
+ case FieldDescriptor::CPPTYPE_INT64:
533
+ case FieldDescriptor::CPPTYPE_UINT32:
534
+ case FieldDescriptor::CPPTYPE_UINT64:
535
+ case FieldDescriptor::CPPTYPE_DOUBLE:
536
+ case FieldDescriptor::CPPTYPE_FLOAT:
537
+ case FieldDescriptor::CPPTYPE_BOOL:
538
+ case FieldDescriptor::CPPTYPE_ENUM:
539
+ // Field is inline, so we've already counted it.
540
+ break;
541
+
542
+ case FieldDescriptor::CPPTYPE_STRING: {
543
+ switch (field->cpp_string_type()) {
544
+ case FieldDescriptor::CppStringType::kCord:
545
+ if (schema_.InRealOneof(field)) {
546
+ total_size += GetField<absl::Cord*>(message, field)
547
+ ->EstimatedMemoryUsage();
548
+
549
+ } else {
550
+ // sizeof(absl::Cord) is included to self.
551
+ total_size += GetField<absl::Cord>(message, field)
552
+ .EstimatedMemoryUsage() -
553
+ sizeof(absl::Cord);
554
+ }
555
+ break;
556
+ case FieldDescriptor::CppStringType::kView:
557
+ case FieldDescriptor::CppStringType::kString:
558
+ if (IsInlined(field)) {
559
+ total_size += GetField<InlinedStringField>(message, field)
560
+ .SpaceUsedExcludingSelfLong();
561
+ } else if (IsMicroString(field)) {
562
+ total_size += GetField<MicroString>(message, field)
563
+ .SpaceUsedExcludingSelfLong();
564
+ } else {
565
+ // Initially, the string points to the default value stored
566
+ // in the prototype. Only count the string if it has been
567
+ // changed from the default value.
568
+ // Except oneof fields, those never point to a default instance,
569
+ // and there is no default instance to point to.
570
+ const auto& str = GetField<ArenaStringPtr>(message, field);
571
+ if (!str.IsDefault() || schema_.InRealOneof(field)) {
572
+ // string fields are represented by just a pointer, so also
573
+ // include sizeof(string) as well.
574
+ total_size += sizeof(std::string) +
575
+ StringSpaceUsedExcludingSelfLong(str.Get());
576
+ }
577
+ }
578
+ break;
579
+ }
580
+ break;
581
+ }
582
+
583
+ case FieldDescriptor::CPPTYPE_MESSAGE:
584
+ if (schema_.IsDefaultInstance(message)) {
585
+ // For singular fields, the prototype just stores a pointer to the
586
+ // external type's prototype, so there is no extra memory usage.
587
+ } else {
588
+ const Message* sub_message = GetRaw<const Message*>(message, field);
589
+ if (sub_message != nullptr) {
590
+ total_size += sub_message->SpaceUsedLong();
591
+ }
592
+ }
593
+ break;
594
+ }
595
+ }
596
+ }
597
+ if (internal::DebugHardenFuzzMessageSpaceUsedLong()) {
598
+ // Use both `this` and `dummy` to generate the seed so that the scale factor
599
+ // is both per-object and non-predictable, but consistent across multiple
600
+ // calls in the same binary.
601
+ static bool dummy;
602
+ uintptr_t seed =
603
+ reinterpret_cast<uintptr_t>(&dummy) ^ reinterpret_cast<uintptr_t>(this);
604
+ // Fuzz the size by +/- 50%.
605
+ double scale = (static_cast<double>(seed % 10000) / 10000) + 0.5;
606
+ return total_size * scale;
607
+ } else {
608
+ return total_size;
609
+ }
610
+ }
611
+
612
+ template <bool unsafe_shallow_swap, typename FromType, typename ToType>
613
+ void Reflection::InternalMoveOneofField(const FieldDescriptor* field,
614
+ FromType* from, ToType* to) const {
615
+ switch (field->cpp_type()) {
616
+ case FieldDescriptor::CPPTYPE_INT32:
617
+ to->SetInt32(from->GetInt32());
618
+ break;
619
+ case FieldDescriptor::CPPTYPE_INT64:
620
+ to->SetInt64(from->GetInt64());
621
+ break;
622
+ case FieldDescriptor::CPPTYPE_UINT32:
623
+ to->SetUint32(from->GetUint32());
624
+ break;
625
+ case FieldDescriptor::CPPTYPE_UINT64:
626
+ to->SetUint64(from->GetUint64());
627
+ break;
628
+ case FieldDescriptor::CPPTYPE_FLOAT:
629
+ to->SetFloat(from->GetFloat());
630
+ break;
631
+ case FieldDescriptor::CPPTYPE_DOUBLE:
632
+ to->SetDouble(from->GetDouble());
633
+ break;
634
+ case FieldDescriptor::CPPTYPE_BOOL:
635
+ to->SetBool(from->GetBool());
636
+ break;
637
+ case FieldDescriptor::CPPTYPE_ENUM:
638
+ to->SetEnum(from->GetEnum());
639
+ break;
640
+ case FieldDescriptor::CPPTYPE_MESSAGE:
641
+ if (!unsafe_shallow_swap) {
642
+ to->SetMessage(from->GetMessage());
643
+ } else {
644
+ to->UnsafeSetMessage(from->UnsafeGetMessage());
645
+ }
646
+ break;
647
+ case FieldDescriptor::CPPTYPE_STRING:
648
+ if (!unsafe_shallow_swap) {
649
+ to->SetString(from->GetString());
650
+ break;
651
+ }
652
+ switch (field->cpp_string_type()) {
653
+ case FieldDescriptor::CppStringType::kCord:
654
+ to->SetCord(from->GetCord());
655
+ break;
656
+ case FieldDescriptor::CppStringType::kView:
657
+ case FieldDescriptor::CppStringType::kString:
658
+ if (IsMicroString(field)) {
659
+ to->SetMicroString(from->GetMicroString());
660
+ } else {
661
+ to->SetArenaStringPtr(from->GetArenaStringPtr());
662
+ }
663
+ break;
664
+ }
665
+ break;
666
+ default:
667
+ ABSL_LOG(FATAL) << "unimplemented type: " << field->cpp_type();
668
+ }
669
+ if (unsafe_shallow_swap) {
670
+ // Not clearing oneof case after move may cause unwanted "ClearOneof"
671
+ // where the residual message or string value is deleted and causes
672
+ // use-after-free (only for unsafe swap).
673
+ from->ClearOneofCase();
674
+ }
675
+ }
676
+
677
+ namespace internal {
678
+
679
+ class SwapFieldHelper {
680
+ public:
681
+ template <bool unsafe_shallow_swap>
682
+ static void SwapRepeatedStringField(const Reflection* r, Message* lhs,
683
+ Message* rhs,
684
+ const FieldDescriptor* field);
685
+
686
+ template <bool unsafe_shallow_swap>
687
+ static void SwapInlinedStrings(const Reflection* r, Message* lhs,
688
+ Message* rhs, const FieldDescriptor* field);
689
+
690
+ template <bool unsafe_shallow_swap>
691
+ static void SwapNonInlinedStrings(const Reflection* r, Message* lhs,
692
+ Message* rhs, const FieldDescriptor* field);
693
+
694
+ template <bool unsafe_shallow_swap>
695
+ static void SwapStringField(const Reflection* r, Message* lhs, Message* rhs,
696
+ const FieldDescriptor* field);
697
+
698
+ static void SwapArenaStringPtr(ArenaStringPtr* lhs, Arena* lhs_arena,
699
+ ArenaStringPtr* rhs, Arena* rhs_arena);
700
+
701
+ template <bool unsafe_shallow_swap>
702
+ static void SwapRepeatedMessageField(const Reflection* r, Message* lhs,
703
+ Message* rhs,
704
+ const FieldDescriptor* field);
705
+
706
+ template <bool unsafe_shallow_swap>
707
+ static void SwapMessageField(const Reflection* r, Message* lhs, Message* rhs,
708
+ const FieldDescriptor* field);
709
+
710
+ static void SwapMessage(const Reflection* r, Message* lhs, Arena* lhs_arena,
711
+ Message* rhs, Arena* rhs_arena,
712
+ const FieldDescriptor* field);
713
+
714
+ static void SwapNonMessageNonStringField(const Reflection* r, Message* lhs,
715
+ Message* rhs,
716
+ const FieldDescriptor* field);
717
+ };
718
+
719
+ template <bool unsafe_shallow_swap>
720
+ void SwapFieldHelper::SwapRepeatedStringField(const Reflection* r, Message* lhs,
721
+ Message* rhs,
722
+ const FieldDescriptor* field) {
723
+ Arena* lhs_arena = lhs->GetArena();
724
+ Arena* rhs_arena = rhs->GetArena();
725
+ switch (field->cpp_string_type()) {
726
+ case FieldDescriptor::CppStringType::kCord: {
727
+ auto* lhs_cord = r->MutableRaw<RepeatedField<absl::Cord>>(lhs, field);
728
+ auto* rhs_cord = r->MutableRaw<RepeatedField<absl::Cord>>(rhs, field);
729
+ if (unsafe_shallow_swap) {
730
+ lhs_cord->InternalSwap(rhs_cord);
731
+ } else {
732
+ lhs_cord->Swap(rhs_cord);
733
+ }
734
+ break;
735
+ }
736
+ case FieldDescriptor::CppStringType::kView:
737
+ case FieldDescriptor::CppStringType::kString: {
738
+ auto* lhs_string = r->MutableRaw<RepeatedPtrFieldBase>(lhs, field);
739
+ auto* rhs_string = r->MutableRaw<RepeatedPtrFieldBase>(rhs, field);
740
+ if (unsafe_shallow_swap) {
741
+ lhs_string->InternalSwap(rhs_string);
742
+ } else {
743
+ lhs_string->Swap<GenericTypeHandler<std::string>>(lhs_arena, rhs_string,
744
+ rhs_arena);
745
+ }
746
+ break;
747
+ }
748
+ }
749
+ }
750
+
751
+ template <bool unsafe_shallow_swap>
752
+ void SwapFieldHelper::SwapInlinedStrings(const Reflection* r, Message* lhs,
753
+ Message* rhs,
754
+ const FieldDescriptor* field) {
755
+ // Inlined string field.
756
+ Arena* lhs_arena = lhs->GetArena();
757
+ Arena* rhs_arena = rhs->GetArena();
758
+ auto* lhs_string = r->MutableRaw<InlinedStringField>(lhs, field);
759
+ auto* rhs_string = r->MutableRaw<InlinedStringField>(rhs, field);
760
+ if (unsafe_shallow_swap) {
761
+ ABSL_DCHECK_EQ(lhs_arena, rhs_arena);
762
+ InlinedStringField::InternalSwap(lhs_string, rhs_string, lhs_arena);
763
+ } else {
764
+ const std::string temp = lhs_string->Get();
765
+ lhs_string->Set(rhs_string->Get(), lhs_arena);
766
+ rhs_string->Set(temp, rhs_arena);
767
+ }
768
+ }
769
+
770
+ template <bool unsafe_shallow_swap>
771
+ void SwapFieldHelper::SwapNonInlinedStrings(const Reflection* r, Message* lhs,
772
+ Message* rhs,
773
+ const FieldDescriptor* field) {
774
+ ArenaStringPtr* lhs_string = r->MutableRaw<ArenaStringPtr>(lhs, field);
775
+ ArenaStringPtr* rhs_string = r->MutableRaw<ArenaStringPtr>(rhs, field);
776
+ if (unsafe_shallow_swap) {
777
+ ArenaStringPtr::UnsafeShallowSwap(lhs_string, rhs_string);
778
+ } else {
779
+ SwapFieldHelper::SwapArenaStringPtr(lhs_string, lhs->GetArena(), //
780
+ rhs_string, rhs->GetArena());
781
+ }
782
+ }
783
+
784
+ template <bool unsafe_shallow_swap>
785
+ void SwapFieldHelper::SwapStringField(const Reflection* r, Message* lhs,
786
+ Message* rhs,
787
+ const FieldDescriptor* field) {
788
+ switch (field->cpp_string_type()) {
789
+ case FieldDescriptor::CppStringType::kCord:
790
+ // Always shallow swap for Cord.
791
+ std::swap(*r->MutableRaw<absl::Cord>(lhs, field),
792
+ *r->MutableRaw<absl::Cord>(rhs, field));
793
+ break;
794
+ case FieldDescriptor::CppStringType::kView:
795
+ case FieldDescriptor::CppStringType::kString: {
796
+ if (r->IsInlined(field)) {
797
+ SwapFieldHelper::SwapInlinedStrings<unsafe_shallow_swap>(r, lhs, rhs,
798
+ field);
799
+ } else if (r->IsMicroString(field)) {
800
+ auto* lhs_string = r->MutableRaw<MicroString>(lhs, field);
801
+ auto* rhs_string = r->MutableRaw<MicroString>(rhs, field);
802
+ auto* lhs_arena = lhs->GetArena();
803
+ auto* rhs_arena = rhs->GetArena();
804
+ if (unsafe_shallow_swap || lhs_arena == rhs_arena) {
805
+ lhs_string->InternalSwap(rhs_string);
806
+ } else {
807
+ MicroString tmp;
808
+ tmp.Set(*lhs_string, rhs_arena);
809
+ lhs_string->Set(*rhs_string, lhs_arena);
810
+ if (rhs_arena == nullptr) rhs_string->Destroy();
811
+ *rhs_string = tmp;
812
+ }
813
+ } else {
814
+ SwapFieldHelper::SwapNonInlinedStrings<unsafe_shallow_swap>(r, lhs, rhs,
815
+ field);
816
+ }
817
+ break;
818
+ }
819
+ }
820
+ }
821
+
822
+ void SwapFieldHelper::SwapArenaStringPtr(ArenaStringPtr* lhs, Arena* lhs_arena,
823
+ ArenaStringPtr* rhs,
824
+ Arena* rhs_arena) {
825
+ if (lhs_arena == rhs_arena) {
826
+ ArenaStringPtr::InternalSwap(lhs, rhs, lhs_arena);
827
+ } else if (lhs->IsDefault() && rhs->IsDefault()) {
828
+ // Nothing to do.
829
+ } else if (lhs->IsDefault()) {
830
+ lhs->Set(rhs->Get(), lhs_arena);
831
+ // rhs needs to be destroyed before overwritten.
832
+ rhs->Destroy();
833
+ rhs->InitDefault();
834
+ } else if (rhs->IsDefault()) {
835
+ rhs->Set(lhs->Get(), rhs_arena);
836
+ // lhs needs to be destroyed before overwritten.
837
+ lhs->Destroy();
838
+ lhs->InitDefault();
839
+ } else {
840
+ std::string temp = lhs->Get();
841
+ lhs->Set(rhs->Get(), lhs_arena);
842
+ rhs->Set(std::move(temp), rhs_arena);
843
+ }
844
+ }
845
+
846
+ template <bool unsafe_shallow_swap>
847
+ void SwapFieldHelper::SwapRepeatedMessageField(const Reflection* r,
848
+ Message* lhs, Message* rhs,
849
+ const FieldDescriptor* field) {
850
+ if (IsMapFieldInApi(field)) {
851
+ auto* lhs_map = r->MutableRaw<MapFieldBase>(lhs, field);
852
+ auto* rhs_map = r->MutableRaw<MapFieldBase>(rhs, field);
853
+ if (unsafe_shallow_swap) {
854
+ lhs_map->InternalSwap(rhs_map);
855
+ } else {
856
+ lhs_map->Swap(lhs->GetArena(), rhs_map, rhs->GetArena());
857
+ }
858
+ } else {
859
+ auto* lhs_rm = r->MutableRaw<RepeatedPtrFieldBase>(lhs, field);
860
+ auto* rhs_rm = r->MutableRaw<RepeatedPtrFieldBase>(rhs, field);
861
+ if (unsafe_shallow_swap) {
862
+ lhs_rm->InternalSwap(rhs_rm);
863
+ } else {
864
+ lhs_rm->Swap<GenericTypeHandler<Message>>(lhs->GetArena(), rhs_rm,
865
+ rhs->GetArena());
866
+ }
867
+ }
868
+ }
869
+
870
+ template <bool unsafe_shallow_swap>
871
+ void SwapFieldHelper::SwapMessageField(const Reflection* r, Message* lhs,
872
+ Message* rhs,
873
+ const FieldDescriptor* field) {
874
+ if (unsafe_shallow_swap) {
875
+ std::swap(*r->MutableRaw<Message*>(lhs, field),
876
+ *r->MutableRaw<Message*>(rhs, field));
877
+ } else {
878
+ SwapMessage(r, lhs, lhs->GetArena(), rhs, rhs->GetArena(), field);
879
+ }
880
+ }
881
+
882
+ void SwapFieldHelper::SwapMessage(const Reflection* r, Message* lhs,
883
+ Arena* lhs_arena, Message* rhs,
884
+ Arena* rhs_arena,
885
+ const FieldDescriptor* field) {
886
+ Message** lhs_sub = r->MutableRaw<Message*>(lhs, field);
887
+ Message** rhs_sub = r->MutableRaw<Message*>(rhs, field);
888
+
889
+ if (*lhs_sub == *rhs_sub) return;
890
+
891
+ if (internal::CanUseInternalSwap(lhs_arena, rhs_arena)) {
892
+ std::swap(*lhs_sub, *rhs_sub);
893
+ return;
894
+ }
895
+
896
+ if (*lhs_sub != nullptr && *rhs_sub != nullptr) {
897
+ (*lhs_sub)->GetReflection()->Swap(*lhs_sub, *rhs_sub);
898
+ } else if (*lhs_sub == nullptr && r->HasFieldWithHasbits(*rhs, field)) {
899
+ *lhs_sub = (*rhs_sub)->New(lhs_arena);
900
+ (*lhs_sub)->CopyFrom(**rhs_sub);
901
+ r->ClearField(rhs, field);
902
+ // Ensures has bit is unchanged after ClearField.
903
+ r->SetHasBit(rhs, field);
904
+ } else if (*rhs_sub == nullptr && r->HasFieldWithHasbits(*lhs, field)) {
905
+ *rhs_sub = (*lhs_sub)->New(rhs_arena);
906
+ (*rhs_sub)->CopyFrom(**lhs_sub);
907
+ r->ClearField(lhs, field);
908
+ // Ensures has bit is unchanged after ClearField.
909
+ r->SetHasBit(lhs, field);
910
+ }
911
+ }
912
+
913
+ void SwapFieldHelper::SwapNonMessageNonStringField(
914
+ const Reflection* r, Message* lhs, Message* rhs,
915
+ const FieldDescriptor* field) {
916
+ switch (field->cpp_type()) {
917
+ #define SWAP_VALUES(CPPTYPE, TYPE) \
918
+ case FieldDescriptor::CPPTYPE_##CPPTYPE: \
919
+ std::swap(*r->MutableRaw<TYPE>(lhs, field), \
920
+ *r->MutableRaw<TYPE>(rhs, field)); \
921
+ break;
922
+
923
+ SWAP_VALUES(INT32, int32_t);
924
+ SWAP_VALUES(INT64, int64_t);
925
+ SWAP_VALUES(UINT32, uint32_t);
926
+ SWAP_VALUES(UINT64, uint64_t);
927
+ SWAP_VALUES(FLOAT, float);
928
+ SWAP_VALUES(DOUBLE, double);
929
+ SWAP_VALUES(BOOL, bool);
930
+ SWAP_VALUES(ENUM, int);
931
+ #undef SWAP_VALUES
932
+ default:
933
+ ABSL_LOG(FATAL) << "Unimplemented type: " << field->cpp_type();
934
+ }
935
+ }
936
+
937
+ } // namespace internal
938
+
939
+ void Reflection::SwapField(Message* message1, Message* message2,
940
+ const FieldDescriptor* field) const {
941
+ if (field->is_repeated()) {
942
+ switch (field->cpp_type()) {
943
+ #define SWAP_ARRAYS(CPPTYPE, TYPE) \
944
+ case FieldDescriptor::CPPTYPE_##CPPTYPE: \
945
+ MutableRaw<RepeatedField<TYPE>>(message1, field) \
946
+ ->Swap(MutableRaw<RepeatedField<TYPE>>(message2, field)); \
947
+ break;
948
+
949
+ SWAP_ARRAYS(INT32, int32_t);
950
+ SWAP_ARRAYS(INT64, int64_t);
951
+ SWAP_ARRAYS(UINT32, uint32_t);
952
+ SWAP_ARRAYS(UINT64, uint64_t);
953
+ SWAP_ARRAYS(FLOAT, float);
954
+ SWAP_ARRAYS(DOUBLE, double);
955
+ SWAP_ARRAYS(BOOL, bool);
956
+ SWAP_ARRAYS(ENUM, int);
957
+ #undef SWAP_ARRAYS
958
+
959
+ case FieldDescriptor::CPPTYPE_STRING:
960
+ internal::SwapFieldHelper::SwapRepeatedStringField<false>(
961
+ this, message1, message2, field);
962
+ break;
963
+ case FieldDescriptor::CPPTYPE_MESSAGE:
964
+ internal::SwapFieldHelper::SwapRepeatedMessageField<false>(
965
+ this, message1, message2, field);
966
+ break;
967
+
968
+ default:
969
+ ABSL_LOG(FATAL) << "Unimplemented type: " << field->cpp_type();
970
+ }
971
+ } else {
972
+ switch (field->cpp_type()) {
973
+ case FieldDescriptor::CPPTYPE_MESSAGE:
974
+ internal::SwapFieldHelper::SwapMessageField<false>(this, message1,
975
+ message2, field);
976
+ break;
977
+
978
+ case FieldDescriptor::CPPTYPE_STRING:
979
+ internal::SwapFieldHelper::SwapStringField<false>(this, message1,
980
+ message2, field);
981
+ break;
982
+ default:
983
+ internal::SwapFieldHelper::SwapNonMessageNonStringField(
984
+ this, message1, message2, field);
985
+ }
986
+ }
987
+ }
988
+
989
+ void Reflection::UnsafeShallowSwapField(Message* message1, Message* message2,
990
+ const FieldDescriptor* field) const {
991
+ if (!field->is_repeated()) {
992
+ if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
993
+ internal::SwapFieldHelper::SwapMessageField<true>(this, message1,
994
+ message2, field);
995
+ } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_STRING) {
996
+ internal::SwapFieldHelper::SwapStringField<true>(this, message1, message2,
997
+ field);
998
+ } else {
999
+ internal::SwapFieldHelper::SwapNonMessageNonStringField(this, message1,
1000
+ message2, field);
1001
+ }
1002
+ return;
1003
+ }
1004
+
1005
+ switch (field->cpp_type()) {
1006
+ #define SHALLOW_SWAP_ARRAYS(CPPTYPE, TYPE) \
1007
+ case FieldDescriptor::CPPTYPE_##CPPTYPE: \
1008
+ MutableRaw<RepeatedField<TYPE>>(message1, field) \
1009
+ ->InternalSwap(MutableRaw<RepeatedField<TYPE>>(message2, field)); \
1010
+ break;
1011
+
1012
+ SHALLOW_SWAP_ARRAYS(INT32, int32_t);
1013
+ SHALLOW_SWAP_ARRAYS(INT64, int64_t);
1014
+ SHALLOW_SWAP_ARRAYS(UINT32, uint32_t);
1015
+ SHALLOW_SWAP_ARRAYS(UINT64, uint64_t);
1016
+ SHALLOW_SWAP_ARRAYS(FLOAT, float);
1017
+ SHALLOW_SWAP_ARRAYS(DOUBLE, double);
1018
+ SHALLOW_SWAP_ARRAYS(BOOL, bool);
1019
+ SHALLOW_SWAP_ARRAYS(ENUM, int);
1020
+ #undef SHALLOW_SWAP_ARRAYS
1021
+
1022
+ case FieldDescriptor::CPPTYPE_STRING:
1023
+ internal::SwapFieldHelper::SwapRepeatedStringField<true>(this, message1,
1024
+ message2, field);
1025
+ break;
1026
+ case FieldDescriptor::CPPTYPE_MESSAGE:
1027
+ internal::SwapFieldHelper::SwapRepeatedMessageField<true>(
1028
+ this, message1, message2, field);
1029
+ break;
1030
+
1031
+ default:
1032
+ ABSL_LOG(FATAL) << "Unimplemented type: " << field->cpp_type();
1033
+ }
1034
+ }
1035
+
1036
+ namespace {
1037
+ // This type is defined outside of SwapOneofField to workaround
1038
+ // https://github.com/llvm/llvm-project/issues/59706
1039
+ using SwapOneofFieldVariant =
1040
+ std::variant<int32_t, int64_t, uint32_t, uint64_t, float, double, bool,
1041
+ Message*, ArenaStringPtr, MicroString, absl::Cord*,
1042
+ std::string>;
1043
+ } // namespace
1044
+
1045
+ // Swaps oneof field between lhs and rhs. If unsafe_shallow_swap is true, it
1046
+ // directly swaps oneof values; otherwise, it may involve copy/delete. Note that
1047
+ // two messages may have different oneof cases. So, it has to be done in three
1048
+ // steps (i.e. lhs -> temp, rhs -> lhs, temp -> rhs).
1049
+ template <bool unsafe_shallow_swap>
1050
+ void Reflection::SwapOneofField(Message* lhs, Message* rhs,
1051
+ const OneofDescriptor* oneof_descriptor) const {
1052
+ // Wraps a local variable to temporarily store oneof value.
1053
+ struct LocalVarWrapper {
1054
+ #define LOCAL_VAR_ACCESSOR(type, name) \
1055
+ type Get##name() const { return std::get<type>(val); } \
1056
+ void Set##name(type v) { val.emplace<type>(v); }
1057
+
1058
+ LOCAL_VAR_ACCESSOR(int32_t, Int32);
1059
+ LOCAL_VAR_ACCESSOR(int64_t, Int64);
1060
+ LOCAL_VAR_ACCESSOR(uint32_t, Uint32);
1061
+ LOCAL_VAR_ACCESSOR(uint64_t, Uint64);
1062
+ LOCAL_VAR_ACCESSOR(float, Float);
1063
+ LOCAL_VAR_ACCESSOR(double, Double);
1064
+ LOCAL_VAR_ACCESSOR(bool, Bool);
1065
+ LOCAL_VAR_ACCESSOR(int, Enum);
1066
+ LOCAL_VAR_ACCESSOR(Message*, Message);
1067
+ LOCAL_VAR_ACCESSOR(ArenaStringPtr, ArenaStringPtr);
1068
+ LOCAL_VAR_ACCESSOR(MicroString, MicroString);
1069
+ LOCAL_VAR_ACCESSOR(absl::Cord*, Cord);
1070
+ LOCAL_VAR_ACCESSOR(std::string, String);
1071
+ Message* UnsafeGetMessage() const { return GetMessage(); }
1072
+ void UnsafeSetMessage(Message* v) { SetMessage(v); }
1073
+ void ClearOneofCase() {}
1074
+ SwapOneofFieldVariant val;
1075
+ };
1076
+
1077
+ // Wraps a message pointer to read and write a field.
1078
+ struct MessageWrapper {
1079
+ #define MESSAGE_FIELD_ACCESSOR(type, name) \
1080
+ type Get##name() const { \
1081
+ return reflection->GetField<type>(*message, field); \
1082
+ } \
1083
+ void Set##name(type v) { reflection->SetField<type>(message, field, v); }
1084
+
1085
+ MESSAGE_FIELD_ACCESSOR(int32_t, Int32);
1086
+ MESSAGE_FIELD_ACCESSOR(int64_t, Int64);
1087
+ MESSAGE_FIELD_ACCESSOR(uint32_t, Uint32);
1088
+ MESSAGE_FIELD_ACCESSOR(uint64_t, Uint64);
1089
+ MESSAGE_FIELD_ACCESSOR(float, Float);
1090
+ MESSAGE_FIELD_ACCESSOR(double, Double);
1091
+ MESSAGE_FIELD_ACCESSOR(bool, Bool);
1092
+ MESSAGE_FIELD_ACCESSOR(int, Enum);
1093
+ MESSAGE_FIELD_ACCESSOR(ArenaStringPtr, ArenaStringPtr);
1094
+ MESSAGE_FIELD_ACCESSOR(MicroString, MicroString);
1095
+ MESSAGE_FIELD_ACCESSOR(absl::Cord*, Cord);
1096
+ std::string GetString() const {
1097
+ return reflection->GetString(*message, field);
1098
+ }
1099
+ void SetString(const std::string& v) {
1100
+ reflection->SetString(message, field, v);
1101
+ }
1102
+ Message* GetMessage() const {
1103
+ return reflection->ReleaseMessage(message, field);
1104
+ }
1105
+ void SetMessage(Message* v) {
1106
+ reflection->SetAllocatedMessage(message, v, field);
1107
+ }
1108
+ Message* UnsafeGetMessage() const {
1109
+ return reflection->UnsafeArenaReleaseMessage(message, field);
1110
+ }
1111
+ void UnsafeSetMessage(Message* v) {
1112
+ reflection->UnsafeArenaSetAllocatedMessage(message, v, field);
1113
+ }
1114
+ void ClearOneofCase() {
1115
+ *reflection->MutableOneofCase(message, field->containing_oneof()) = 0;
1116
+ }
1117
+
1118
+ const Reflection* reflection;
1119
+ Message* message;
1120
+ const FieldDescriptor* field;
1121
+ };
1122
+
1123
+ ABSL_DCHECK(!oneof_descriptor->is_synthetic());
1124
+ uint32_t oneof_case_lhs = GetOneofCase(*lhs, oneof_descriptor);
1125
+ uint32_t oneof_case_rhs = GetOneofCase(*rhs, oneof_descriptor);
1126
+
1127
+ LocalVarWrapper temp;
1128
+ MessageWrapper lhs_wrapper, rhs_wrapper;
1129
+ const FieldDescriptor* field_lhs = nullptr;
1130
+ // lhs --> temp
1131
+ if (oneof_case_lhs > 0) {
1132
+ field_lhs = descriptor_->FindFieldByNumber(oneof_case_lhs);
1133
+ lhs_wrapper = {this, lhs, field_lhs};
1134
+ InternalMoveOneofField<unsafe_shallow_swap>(field_lhs, &lhs_wrapper, &temp);
1135
+ }
1136
+ // rhs --> lhs
1137
+ if (oneof_case_rhs > 0) {
1138
+ const FieldDescriptor* f = descriptor_->FindFieldByNumber(oneof_case_rhs);
1139
+ lhs_wrapper = {this, lhs, f};
1140
+ rhs_wrapper = {this, rhs, f};
1141
+ InternalMoveOneofField<unsafe_shallow_swap>(f, &rhs_wrapper, &lhs_wrapper);
1142
+ } else if (!unsafe_shallow_swap) {
1143
+ ClearOneof(lhs, oneof_descriptor);
1144
+ }
1145
+ // temp --> rhs
1146
+ if (oneof_case_lhs > 0) {
1147
+ rhs_wrapper = {this, rhs, field_lhs};
1148
+ InternalMoveOneofField<unsafe_shallow_swap>(field_lhs, &temp, &rhs_wrapper);
1149
+ } else if (!unsafe_shallow_swap) {
1150
+ ClearOneof(rhs, oneof_descriptor);
1151
+ }
1152
+
1153
+ if (unsafe_shallow_swap) {
1154
+ *MutableOneofCase(lhs, oneof_descriptor) = oneof_case_rhs;
1155
+ *MutableOneofCase(rhs, oneof_descriptor) = oneof_case_lhs;
1156
+ }
1157
+ }
1158
+
1159
+ void Reflection::Swap(Message* lhs, Message* rhs) const {
1160
+ if (lhs == rhs) return;
1161
+
1162
+ Arena* lhs_arena = lhs->GetArena();
1163
+ Arena* rhs_arena = rhs->GetArena();
1164
+
1165
+ // TODO: Other Reflection methods should probably check this too.
1166
+ ABSL_CHECK_EQ(lhs->GetReflection(), this)
1167
+ << "First argument to Swap() (of type \""
1168
+ << lhs->GetDescriptor()->full_name()
1169
+ << "\") is not compatible with this reflection object (which is for type "
1170
+ "\""
1171
+ << descriptor_->full_name()
1172
+ << "\"). Note that the exact same class is required; not just the same "
1173
+ "descriptor.";
1174
+ ABSL_CHECK_EQ(rhs->GetReflection(), this)
1175
+ << "Second argument to Swap() (of type \""
1176
+ << rhs->GetDescriptor()->full_name()
1177
+ << "\") is not compatible with this reflection object (which is for type "
1178
+ "\""
1179
+ << descriptor_->full_name()
1180
+ << "\"). Note that the exact same class is required; not just the same "
1181
+ "descriptor.";
1182
+
1183
+ // Check that both messages are in the same arena (or both on the heap). We
1184
+ // need to copy all data if not, due to ownership semantics.
1185
+ if (!internal::CanUseInternalSwap(lhs_arena, rhs_arena)) {
1186
+ // One of the two is guaranteed to have an arena. Switch things around
1187
+ // to guarantee that lhs has an arena.
1188
+ Arena* arena = lhs_arena;
1189
+ if (arena == nullptr) {
1190
+ arena = rhs_arena;
1191
+ std::swap(lhs, rhs); // Swapping names for pointers!
1192
+ }
1193
+
1194
+ Message* temp = lhs->New(arena);
1195
+ temp->MergeFrom(*rhs);
1196
+ rhs->CopyFrom(*lhs);
1197
+ if (internal::DebugHardenForceCopyInSwap()) {
1198
+ lhs->CopyFrom(*temp);
1199
+ if (arena == nullptr) delete temp;
1200
+ } else {
1201
+ Swap(lhs, temp);
1202
+ }
1203
+ return;
1204
+ }
1205
+
1206
+ UnsafeArenaSwap(lhs, rhs);
1207
+ }
1208
+
1209
+ template <bool unsafe_shallow_swap>
1210
+ void Reflection::SwapFieldsImpl(
1211
+ Message* message1, Message* message2,
1212
+ const std::vector<const FieldDescriptor*>& fields) const {
1213
+ if (message1 == message2) return;
1214
+
1215
+ // TODO: Other Reflection methods should probably check this too.
1216
+ ABSL_CHECK_EQ(message1->GetReflection(), this)
1217
+ << "First argument to SwapFields() (of type \""
1218
+ << message1->GetDescriptor()->full_name()
1219
+ << "\") is not compatible with this reflection object (which is for type "
1220
+ "\""
1221
+ << descriptor_->full_name()
1222
+ << "\"). Note that the exact same class is required; not just the same "
1223
+ "descriptor.";
1224
+ ABSL_CHECK_EQ(message2->GetReflection(), this)
1225
+ << "Second argument to SwapFields() (of type \""
1226
+ << message2->GetDescriptor()->full_name()
1227
+ << "\") is not compatible with this reflection object (which is for type "
1228
+ "\""
1229
+ << descriptor_->full_name()
1230
+ << "\"). Note that the exact same class is required; not just the same "
1231
+ "descriptor.";
1232
+
1233
+ absl::flat_hash_set<int> swapped_oneof;
1234
+
1235
+ for (const auto* field : fields) {
1236
+ if (field->is_extension()) {
1237
+ if constexpr (unsafe_shallow_swap) {
1238
+ MutableExtensionSet(message1)->UnsafeShallowSwapExtension(
1239
+ message1->GetArena(), MutableExtensionSet(message2),
1240
+ field->number());
1241
+ } else {
1242
+ const Message* prototype =
1243
+ message_factory_->GetPrototype(message1->GetDescriptor());
1244
+ MutableExtensionSet(message1)->SwapExtension(
1245
+ message1->GetArena(), prototype, MutableExtensionSet(message2),
1246
+ message2->GetArena(), field->number());
1247
+ }
1248
+ continue;
1249
+ } else if (schema_.InRealOneof(field)) {
1250
+ int oneof_index = field->containing_oneof()->index();
1251
+ // Only swap the oneof field once.
1252
+ if (swapped_oneof.insert(oneof_index).second) {
1253
+ SwapOneofField<unsafe_shallow_swap>(message1, message2,
1254
+ field->containing_oneof());
1255
+ }
1256
+ continue;
1257
+ }
1258
+
1259
+ // Swap field.
1260
+ if constexpr (unsafe_shallow_swap) {
1261
+ UnsafeShallowSwapField(message1, message2, field);
1262
+ } else {
1263
+ SwapField(message1, message2, field);
1264
+ }
1265
+ // Swap has bit. We have already checked for oneof already. This has to
1266
+ // be done after SwapField, because SwapField may depend on the
1267
+ // information in has bits.
1268
+ NaiveSwapHasBit(message1, message2, field);
1269
+ }
1270
+ }
1271
+
1272
+ template void Reflection::SwapFieldsImpl<true>(
1273
+ Message* message1, Message* message2,
1274
+ const std::vector<const FieldDescriptor*>& fields) const;
1275
+
1276
+ template void Reflection::SwapFieldsImpl<false>(
1277
+ Message* message1, Message* message2,
1278
+ const std::vector<const FieldDescriptor*>& fields) const;
1279
+
1280
+ void Reflection::SwapFields(
1281
+ Message* message1, Message* message2,
1282
+ const std::vector<const FieldDescriptor*>& fields) const {
1283
+ SwapFieldsImpl<false>(message1, message2, fields);
1284
+ }
1285
+
1286
+ void Reflection::UnsafeShallowSwapFields(
1287
+ Message* message1, Message* message2,
1288
+ const std::vector<const FieldDescriptor*>& fields) const {
1289
+ ABSL_DCHECK_EQ(message1->GetArena(), message2->GetArena());
1290
+
1291
+ SwapFieldsImpl<true>(message1, message2, fields);
1292
+ }
1293
+
1294
+ void Reflection::UnsafeArenaSwapFields(
1295
+ Message* lhs, Message* rhs,
1296
+ const std::vector<const FieldDescriptor*>& fields) const {
1297
+ ABSL_DCHECK_EQ(lhs->GetArena(), rhs->GetArena());
1298
+ UnsafeShallowSwapFields(lhs, rhs, fields);
1299
+ }
1300
+
1301
+ // -------------------------------------------------------------------
1302
+
1303
+ bool Reflection::HasField(const Message& message,
1304
+ const FieldDescriptor* field) const {
1305
+ USAGE_CHECK_MESSAGE(HasField, &message);
1306
+ USAGE_CHECK_MESSAGE_TYPE(HasField);
1307
+
1308
+ if (field->is_extension()) {
1309
+ const auto& ext = GetExtensionSet(message);
1310
+ return field->is_repeated() ? ext.ExtensionSize(field->number()) != 0
1311
+ : ext.Has(field->number());
1312
+ } else {
1313
+ if (schema_.InRealOneof(field)) {
1314
+ return HasOneofField(message, field);
1315
+ } else {
1316
+ return HasFieldWithHasbits(message, field);
1317
+ }
1318
+ }
1319
+ }
1320
+
1321
+ void Reflection::UnsafeArenaSwap(Message* lhs, Message* rhs) const {
1322
+ ABSL_DCHECK_EQ(lhs->GetArena(), rhs->GetArena());
1323
+ InternalSwap(lhs, rhs);
1324
+ }
1325
+
1326
+ void Reflection::InternalSwap(Message* lhs, Message* rhs) const {
1327
+ if (lhs == rhs) return;
1328
+
1329
+ MutableInternalMetadata(lhs)->InternalSwap(MutableInternalMetadata(rhs));
1330
+
1331
+ for (int i = 0; i <= last_non_weak_field_index_; i++) {
1332
+ const FieldDescriptor* field = descriptor_->field(i);
1333
+ if (schema_.InRealOneof(field)) continue;
1334
+ if (schema_.IsSplit(field)) {
1335
+ continue;
1336
+ }
1337
+ UnsafeShallowSwapField(lhs, rhs, field);
1338
+ }
1339
+ if (schema_.IsSplit()) {
1340
+ std::swap(*MutableSplitField(lhs), *MutableSplitField(rhs));
1341
+ }
1342
+ const int oneof_decl_count = descriptor_->real_oneof_decl_count();
1343
+ for (int i = 0; i < oneof_decl_count; i++) {
1344
+ const OneofDescriptor* oneof = descriptor_->real_oneof_decl(i);
1345
+ SwapOneofField<true>(lhs, rhs, oneof);
1346
+ }
1347
+
1348
+ // Swapping bits need to happen after swapping fields, because the latter may
1349
+ // depend on the has bit information.
1350
+ if (schema_.HasHasbits()) {
1351
+ uint32_t* lhs_has_bits = MutableHasBits(lhs);
1352
+ uint32_t* rhs_has_bits = MutableHasBits(rhs);
1353
+
1354
+ uint32_t max_has_bit_index = 0;
1355
+ for (int i = 0; i < descriptor_->field_count(); i++) {
1356
+ const FieldDescriptor* field = descriptor_->field(i);
1357
+ const uint32_t has_bit_index = schema_.HasBitIndex(field);
1358
+ if (has_bit_index != static_cast<uint32_t>(kNoHasbit)) {
1359
+ max_has_bit_index = std::max(max_has_bit_index, has_bit_index);
1360
+ }
1361
+ }
1362
+
1363
+ int has_bits_size = max_has_bit_index / 32 + 1;
1364
+
1365
+ for (int i = 0; i < has_bits_size; i++) {
1366
+ std::swap(lhs_has_bits[i], rhs_has_bits[i]);
1367
+ }
1368
+ }
1369
+
1370
+ if (schema_.HasExtensionSet()) {
1371
+ MutableExtensionSet(lhs)->InternalSwap(MutableExtensionSet(rhs));
1372
+ }
1373
+ }
1374
+
1375
+ void Reflection::MaybePoisonAfterClear(Message& root) const {
1376
+ struct MemBlock {
1377
+ explicit MemBlock(Message& msg)
1378
+ : ptr(static_cast<void*>(&msg)), size(GetSize(msg)) {}
1379
+
1380
+ static uint32_t GetSize(const Message& msg) {
1381
+ return msg.GetReflection()->schema_.GetObjectSize();
1382
+ }
1383
+
1384
+ void* ptr;
1385
+ uint32_t size;
1386
+ };
1387
+
1388
+ bool heap_alloc = root.GetArena() == nullptr;
1389
+ std::vector<MemBlock> nodes;
1390
+
1391
+ nodes.emplace_back(root);
1392
+
1393
+ std::queue<Message*> queue;
1394
+ queue.push(&root);
1395
+
1396
+ while (!queue.empty() && !heap_alloc) {
1397
+ Message* curr = queue.front();
1398
+ queue.pop();
1399
+ internal::VisitMutableMessageFields(*curr, [&](Message& msg) {
1400
+ if (msg.GetArena() == nullptr) {
1401
+ heap_alloc = true;
1402
+ return;
1403
+ }
1404
+
1405
+ nodes.emplace_back(msg);
1406
+ // Also visits child messages.
1407
+ queue.push(&msg);
1408
+ });
1409
+ }
1410
+
1411
+ root.Clear();
1412
+
1413
+ // Heap allocated oneof messages will be freed on clear. So, poisoning
1414
+ // afterwards may cause use-after-free. Bailout.
1415
+ if (heap_alloc) return;
1416
+
1417
+ for (auto it : nodes) {
1418
+ (void)it;
1419
+ internal::PoisonMemoryRegion(it.ptr, it.size);
1420
+ }
1421
+ }
1422
+
1423
+ int Reflection::FieldSize(const Message& message,
1424
+ const FieldDescriptor* field) const {
1425
+ USAGE_CHECK_MESSAGE(FieldSize, &message);
1426
+ USAGE_CHECK_MESSAGE_TYPE(FieldSize);
1427
+ USAGE_CHECK_REPEATED(FieldSize);
1428
+
1429
+ if (field->is_extension()) {
1430
+ return GetExtensionSet(message).ExtensionSize(field->number());
1431
+ } else {
1432
+ switch (field->cpp_type()) {
1433
+ #define HANDLE_TYPE(UPPERCASE, LOWERCASE) \
1434
+ case FieldDescriptor::CPPTYPE_##UPPERCASE: \
1435
+ return GetRaw<RepeatedField<LOWERCASE>>(message, field).size()
1436
+
1437
+ HANDLE_TYPE(INT32, int32_t);
1438
+ HANDLE_TYPE(INT64, int64_t);
1439
+ HANDLE_TYPE(UINT32, uint32_t);
1440
+ HANDLE_TYPE(UINT64, uint64_t);
1441
+ HANDLE_TYPE(DOUBLE, double);
1442
+ HANDLE_TYPE(FLOAT, float);
1443
+ HANDLE_TYPE(BOOL, bool);
1444
+ HANDLE_TYPE(ENUM, int);
1445
+ #undef HANDLE_TYPE
1446
+
1447
+ case FieldDescriptor::CPPTYPE_STRING:
1448
+ if (field->cpp_string_type() == FieldDescriptor::CppStringType::kCord) {
1449
+ return GetRaw<RepeatedField<absl::Cord>>(message, field).size();
1450
+ }
1451
+ ABSL_FALLTHROUGH_INTENDED;
1452
+ case FieldDescriptor::CPPTYPE_MESSAGE:
1453
+ if (IsMapFieldInApi(field)) {
1454
+ const internal::MapFieldBase& map =
1455
+ GetRaw<MapFieldBase>(message, field);
1456
+ if (map.IsRepeatedFieldValid()) {
1457
+ return map.GetRepeatedField().size();
1458
+ } else {
1459
+ // No need to materialize the repeated field if it is out of sync:
1460
+ // its size will be the same as the map's size.
1461
+ return map.size();
1462
+ }
1463
+ } else {
1464
+ return GetRaw<RepeatedPtrFieldBase>(message, field).size();
1465
+ }
1466
+ }
1467
+
1468
+ ABSL_LOG(FATAL) << "Can't get here.";
1469
+ return 0;
1470
+ }
1471
+ }
1472
+
1473
+ void Reflection::ClearField(Message* message,
1474
+ const FieldDescriptor* field) const {
1475
+ USAGE_CHECK_MESSAGE(ClearField, message);
1476
+ USAGE_CHECK_MESSAGE_TYPE(ClearField);
1477
+
1478
+ if (field->is_extension()) {
1479
+ MutableExtensionSet(message)->ClearExtension(field->number());
1480
+ return;
1481
+ } else if (schema_.InRealOneof(field)) {
1482
+ ClearOneofField(message, field);
1483
+ return;
1484
+ } else if (!HasFieldWithHasbits(*message, field)) {
1485
+ // Clear the has bit even if the field is not present. If this is an empty
1486
+ // repeated field with a set has bit, we want to clear the has bit.
1487
+ ClearHasBit(message, field);
1488
+ return;
1489
+ }
1490
+ ClearHasBit(message, field);
1491
+
1492
+ if (field->is_repeated()) {
1493
+ switch (field->cpp_type()) {
1494
+ #define HANDLE_TYPE(UPPERCASE, LOWERCASE) \
1495
+ case FieldDescriptor::CPPTYPE_##UPPERCASE: \
1496
+ MutableRaw<RepeatedField<LOWERCASE>>(message, field)->Clear(); \
1497
+ break
1498
+
1499
+ HANDLE_TYPE(INT32, int32_t);
1500
+ HANDLE_TYPE(INT64, int64_t);
1501
+ HANDLE_TYPE(UINT32, uint32_t);
1502
+ HANDLE_TYPE(UINT64, uint64_t);
1503
+ HANDLE_TYPE(DOUBLE, double);
1504
+ HANDLE_TYPE(FLOAT, float);
1505
+ HANDLE_TYPE(BOOL, bool);
1506
+ HANDLE_TYPE(ENUM, int);
1507
+ #undef HANDLE_TYPE
1508
+
1509
+ case FieldDescriptor::CPPTYPE_STRING: {
1510
+ switch (field->cpp_string_type()) {
1511
+ case FieldDescriptor::CppStringType::kCord:
1512
+ MutableRaw<RepeatedField<absl::Cord>>(message, field)->Clear();
1513
+ break;
1514
+ case FieldDescriptor::CppStringType::kView:
1515
+ case FieldDescriptor::CppStringType::kString:
1516
+ MutableRaw<RepeatedPtrField<std::string>>(message, field)->Clear();
1517
+ break;
1518
+ }
1519
+ break;
1520
+ }
1521
+
1522
+ case FieldDescriptor::CPPTYPE_MESSAGE: {
1523
+ if (IsMapFieldInApi(field)) {
1524
+ MutableRaw<MapFieldBase>(message, field)->Clear();
1525
+ } else {
1526
+ // We don't know which subclass of RepeatedPtrFieldBase the type
1527
+ // is, so we use RepeatedPtrFieldBase directly.
1528
+ MutableRaw<RepeatedPtrFieldBase>(message, field)
1529
+ ->Clear<GenericTypeHandler<Message>>();
1530
+ }
1531
+ break;
1532
+ }
1533
+ }
1534
+ } else {
1535
+ // We need to set the field back to its default value.
1536
+ switch (field->cpp_type()) {
1537
+ #define CLEAR_TYPE(CPPTYPE, TYPE) \
1538
+ case FieldDescriptor::CPPTYPE_##CPPTYPE: \
1539
+ *MutableRaw<TYPE>(message, field) = field->default_value_##TYPE(); \
1540
+ break;
1541
+
1542
+ CLEAR_TYPE(INT32, int32_t);
1543
+ CLEAR_TYPE(INT64, int64_t);
1544
+ CLEAR_TYPE(UINT32, uint32_t);
1545
+ CLEAR_TYPE(UINT64, uint64_t);
1546
+ CLEAR_TYPE(FLOAT, float);
1547
+ CLEAR_TYPE(DOUBLE, double);
1548
+ CLEAR_TYPE(BOOL, bool);
1549
+ #undef CLEAR_TYPE
1550
+
1551
+ case FieldDescriptor::CPPTYPE_ENUM:
1552
+ *MutableRaw<int>(message, field) =
1553
+ field->default_value_enum()->number();
1554
+ break;
1555
+
1556
+ case FieldDescriptor::CPPTYPE_STRING: {
1557
+ switch (field->cpp_string_type()) {
1558
+ case FieldDescriptor::CppStringType::kCord:
1559
+ if (field->has_default_value()) {
1560
+ *MutableRaw<absl::Cord>(message, field) =
1561
+ field->default_value_string();
1562
+ } else {
1563
+ MutableRaw<absl::Cord>(message, field)->Clear();
1564
+ }
1565
+ break;
1566
+ case FieldDescriptor::CppStringType::kView:
1567
+ case FieldDescriptor::CppStringType::kString:
1568
+ if (IsInlined(field)) {
1569
+ // Currently, string with default value can't be inlined. So we
1570
+ // don't have to handle default value here.
1571
+ MutableRaw<InlinedStringField>(message, field)->ClearToEmpty();
1572
+ } else if (IsMicroString(field)) {
1573
+ if (field->has_default_value()) {
1574
+ MutableRaw<MicroString>(message, field)
1575
+ ->ClearToDefault(
1576
+ GetRaw<MicroString>(*schema_.default_instance_, field),
1577
+ message->GetArena());
1578
+ } else {
1579
+ MutableRaw<MicroString>(message, field)->Clear();
1580
+ }
1581
+ } else {
1582
+ auto* str = MutableRaw<ArenaStringPtr>(message, field);
1583
+ str->Destroy();
1584
+ str->InitDefault();
1585
+ }
1586
+ break;
1587
+ }
1588
+ break;
1589
+ }
1590
+
1591
+ case FieldDescriptor::CPPTYPE_MESSAGE:
1592
+ (*MutableRaw<Message*>(message, field))->Clear();
1593
+ break;
1594
+ }
1595
+ }
1596
+ }
1597
+
1598
+ void Reflection::RemoveLast(Message* message,
1599
+ const FieldDescriptor* field) const {
1600
+ USAGE_CHECK_MESSAGE(RemoveLast, message);
1601
+ USAGE_CHECK_MESSAGE_TYPE(RemoveLast);
1602
+ USAGE_CHECK_REPEATED(RemoveLast);
1603
+
1604
+ if (field->is_extension()) {
1605
+ MutableExtensionSet(message)->RemoveLast(field->number());
1606
+ } else {
1607
+ switch (field->cpp_type()) {
1608
+ #define HANDLE_TYPE(UPPERCASE, LOWERCASE) \
1609
+ case FieldDescriptor::CPPTYPE_##UPPERCASE: \
1610
+ MutableRaw<RepeatedField<LOWERCASE>>(message, field)->RemoveLast(); \
1611
+ break
1612
+
1613
+ HANDLE_TYPE(INT32, int32_t);
1614
+ HANDLE_TYPE(INT64, int64_t);
1615
+ HANDLE_TYPE(UINT32, uint32_t);
1616
+ HANDLE_TYPE(UINT64, uint64_t);
1617
+ HANDLE_TYPE(DOUBLE, double);
1618
+ HANDLE_TYPE(FLOAT, float);
1619
+ HANDLE_TYPE(BOOL, bool);
1620
+ HANDLE_TYPE(ENUM, int);
1621
+ #undef HANDLE_TYPE
1622
+
1623
+ case FieldDescriptor::CPPTYPE_STRING:
1624
+ switch (field->cpp_string_type()) {
1625
+ case FieldDescriptor::CppStringType::kCord:
1626
+ MutableRaw<RepeatedField<absl::Cord>>(message, field)->RemoveLast();
1627
+ break;
1628
+ case FieldDescriptor::CppStringType::kView:
1629
+ case FieldDescriptor::CppStringType::kString:
1630
+ MutableRaw<RepeatedPtrField<std::string>>(message, field)
1631
+ ->RemoveLast();
1632
+ break;
1633
+ }
1634
+ break;
1635
+
1636
+ case FieldDescriptor::CPPTYPE_MESSAGE:
1637
+ if (IsMapFieldInApi(field)) {
1638
+ MutableRaw<MapFieldBase>(message, field)
1639
+ ->MutableRepeatedField()
1640
+ ->RemoveLast<GenericTypeHandler<Message>>();
1641
+ } else {
1642
+ MutableRaw<RepeatedPtrFieldBase>(message, field)
1643
+ ->RemoveLast<GenericTypeHandler<Message>>();
1644
+ }
1645
+ break;
1646
+ }
1647
+ }
1648
+ }
1649
+
1650
+ Message* Reflection::ReleaseLast(Message* message,
1651
+ const FieldDescriptor* field) const {
1652
+ USAGE_MUTABLE_CHECK_ALL(ReleaseLast, REPEATED, MESSAGE);
1653
+
1654
+ Arena* arena = message->GetArena();
1655
+ Message* released;
1656
+ if (field->is_extension()) {
1657
+ released = static_cast<Message*>(
1658
+ MutableExtensionSet(message)->ReleaseLast(arena, field->number()));
1659
+ } else {
1660
+ if (IsMapFieldInApi(field)) {
1661
+ released = MutableRaw<MapFieldBase>(message, field)
1662
+ ->MutableRepeatedField()
1663
+ ->ReleaseLast<GenericTypeHandler<Message>>(arena);
1664
+ } else {
1665
+ released = MutableRaw<RepeatedPtrFieldBase>(message, field)
1666
+ ->ReleaseLast<GenericTypeHandler<Message>>(arena);
1667
+ }
1668
+ }
1669
+ if (internal::DebugHardenForceCopyInRelease()) {
1670
+ return MaybeForceCopy(arena, released);
1671
+ } else {
1672
+ return released;
1673
+ }
1674
+ }
1675
+
1676
+ Message* Reflection::UnsafeArenaReleaseLast(
1677
+ Message* message, const FieldDescriptor* field) const {
1678
+ USAGE_MUTABLE_CHECK_ALL(UnsafeArenaReleaseLast, REPEATED, MESSAGE);
1679
+
1680
+ if (field->is_extension()) {
1681
+ return static_cast<Message*>(
1682
+ MutableExtensionSet(message)->UnsafeArenaReleaseLast(
1683
+ message->GetArena(), field->number()));
1684
+ } else {
1685
+ if (IsMapFieldInApi(field)) {
1686
+ return MutableRaw<MapFieldBase>(message, field)
1687
+ ->MutableRepeatedField()
1688
+ ->UnsafeArenaReleaseLast<GenericTypeHandler<Message>>();
1689
+ } else {
1690
+ return MutableRaw<RepeatedPtrFieldBase>(message, field)
1691
+ ->UnsafeArenaReleaseLast<GenericTypeHandler<Message>>();
1692
+ }
1693
+ }
1694
+ }
1695
+
1696
+ void Reflection::SwapElements(Message* message, const FieldDescriptor* field,
1697
+ int index1, int index2) const {
1698
+ USAGE_CHECK_MESSAGE(Swap, message);
1699
+ USAGE_CHECK_MESSAGE_TYPE(Swap);
1700
+ USAGE_CHECK_REPEATED(Swap);
1701
+
1702
+ if (field->is_extension()) {
1703
+ MutableExtensionSet(message)->SwapElements(field->number(), index1, index2);
1704
+ } else {
1705
+ switch (field->cpp_type()) {
1706
+ #define HANDLE_TYPE(UPPERCASE, LOWERCASE) \
1707
+ case FieldDescriptor::CPPTYPE_##UPPERCASE: \
1708
+ MutableRaw<RepeatedField<LOWERCASE>>(message, field) \
1709
+ ->SwapElements(index1, index2); \
1710
+ break
1711
+
1712
+ HANDLE_TYPE(INT32, int32_t);
1713
+ HANDLE_TYPE(INT64, int64_t);
1714
+ HANDLE_TYPE(UINT32, uint32_t);
1715
+ HANDLE_TYPE(UINT64, uint64_t);
1716
+ HANDLE_TYPE(DOUBLE, double);
1717
+ HANDLE_TYPE(FLOAT, float);
1718
+ HANDLE_TYPE(BOOL, bool);
1719
+ HANDLE_TYPE(ENUM, int);
1720
+ #undef HANDLE_TYPE
1721
+
1722
+ case FieldDescriptor::CPPTYPE_STRING:
1723
+ if (field->cpp_string_type() == FieldDescriptor::CppStringType::kCord) {
1724
+ MutableRaw<RepeatedField<absl::Cord>>(message, field)
1725
+ ->SwapElements(index1, index2);
1726
+ break;
1727
+ }
1728
+ ABSL_FALLTHROUGH_INTENDED;
1729
+ case FieldDescriptor::CPPTYPE_MESSAGE:
1730
+ if (IsMapFieldInApi(field)) {
1731
+ MutableRaw<MapFieldBase>(message, field)
1732
+ ->MutableRepeatedField()
1733
+ ->SwapElements(index1, index2);
1734
+ } else {
1735
+ MutableRaw<RepeatedPtrFieldBase>(message, field)
1736
+ ->SwapElements(index1, index2);
1737
+ }
1738
+ break;
1739
+ }
1740
+ }
1741
+ }
1742
+
1743
+ namespace {
1744
+ // Comparison functor for sorting FieldDescriptors by field number.
1745
+ struct FieldNumberSorter {
1746
+ bool operator()(const FieldDescriptor* left,
1747
+ const FieldDescriptor* right) const {
1748
+ return left->number() < right->number();
1749
+ }
1750
+ };
1751
+
1752
+ bool IsIndexInHasBitSet(const uint32_t* has_bit_set, uint32_t has_bit_index) {
1753
+ ABSL_DCHECK_NE(has_bit_index, ~0u);
1754
+ return ((has_bit_set[has_bit_index / 32] >> (has_bit_index % 32)) &
1755
+ static_cast<uint32_t>(1)) != 0;
1756
+ }
1757
+
1758
+ void CheckInOrder(const FieldDescriptor* field, uint32_t* last) {
1759
+ *last = *last <= static_cast<uint32_t>(field->number())
1760
+ ? static_cast<uint32_t>(field->number())
1761
+ : UINT32_MAX;
1762
+ }
1763
+
1764
+ } // namespace
1765
+
1766
+ namespace internal {
1767
+ bool CreateUnknownEnumValues(const FieldDescriptor* field) {
1768
+ bool open_enum = false;
1769
+ return !field->legacy_enum_field_treated_as_closed() || open_enum;
1770
+ }
1771
+ } // namespace internal
1772
+ using internal::CreateUnknownEnumValues;
1773
+
1774
+
1775
+ // Common functionality shared by IsEmpty and ListFields for iterating over
1776
+ // all set fields.
1777
+ //
1778
+ // If kForIsEmpty=true, returns 0 if the message is empty, and 1 otherwise.
1779
+ //
1780
+ // If kForIsEmpty=false, populates output with all filled fields. Return value
1781
+ // is the last field set, or 0 if the message is empty.
1782
+ template <bool kForIsEmpty, typename MaybeFieldDescriptorVec>
1783
+ inline int32_t Reflection::IsEmptyOrCollectSetFields(
1784
+ const Message& message,
1785
+ // Cached locally rather than a member variable for performance.
1786
+ const Descriptor& descriptor,
1787
+ [[maybe_unused]] MaybeFieldDescriptorVec output) const {
1788
+ // Output should be null only if we are not computing the full output list.
1789
+ static_assert(kForIsEmpty ==
1790
+ std::is_same_v<MaybeFieldDescriptorVec, std::nullptr_t>);
1791
+ // Optimization: Avoid calling GetHasBits() and HasOneofField() many times
1792
+ // within the field loop. We allow this violation of ReflectionSchema
1793
+ // encapsulation because this function takes a noticeable about of CPU
1794
+ // fleetwide and properly allowing this optimization through public interfaces
1795
+ // seems more trouble than it is worth.
1796
+ const uint32_t* const has_bits =
1797
+ schema_.HasHasbits() ? GetHasBits(message) : nullptr;
1798
+ const uint32_t* const has_bits_indices = schema_.has_bit_indices_;
1799
+ if constexpr (!kForIsEmpty) {
1800
+ output->reserve(descriptor.field_count());
1801
+ }
1802
+ // Fields in messages are usually added with the increasing tags.
1803
+ uint32_t last = 0; // UINT32_MAX if out-of-order
1804
+ // Stifle unused variable compilation error when kForIsEmpty is true.
1805
+ [[maybe_unused]] const auto append_to_output =
1806
+ [&last, output](const FieldDescriptor& field) {
1807
+ if constexpr (!kForIsEmpty) {
1808
+ CheckInOrder(&field, &last);
1809
+ output->push_back(&field);
1810
+ }
1811
+ };
1812
+ // Core functionality difference depending on the value of kForIsEmpty. If we
1813
+ // encounter a set field, either return 1, or push it back into the vector.
1814
+ #define PROTO_REFLECTION_APPEND_OR_RETURN() \
1815
+ do { \
1816
+ if constexpr (kForIsEmpty) { \
1817
+ return 1; \
1818
+ } else { \
1819
+ append_to_output(field); \
1820
+ } \
1821
+ } while (false)
1822
+
1823
+ int i = -1;
1824
+ for (const FieldDescriptor& field :
1825
+ absl::MakeSpan(descriptor.fields_, last_non_weak_field_index_ + 1)) {
1826
+ ++i;
1827
+ const OneofDescriptor* containing_oneof = field.containing_oneof();
1828
+ if (schema_.InRealOneof(&field)) {
1829
+ const uint32_t* const oneof_case_array =
1830
+ GetConstPointerAtOffset<uint32_t>(&message,
1831
+ schema_.oneof_case_offset_);
1832
+ // Equivalent to: HasOneofField(message, field)
1833
+ if (static_cast<int64_t>(oneof_case_array[containing_oneof->index()]) ==
1834
+ field.number()) {
1835
+ PROTO_REFLECTION_APPEND_OR_RETURN();
1836
+ }
1837
+ } else if (has_bits &&
1838
+ has_bits_indices[i] != static_cast<uint32_t>(kNoHasbit)) {
1839
+ // Equivalent to: HasFieldSingular(message, field)
1840
+ if (IsFieldPresentGivenHasbits(message, &field, has_bits,
1841
+ has_bits_indices[i])) {
1842
+ PROTO_REFLECTION_APPEND_OR_RETURN();
1843
+ }
1844
+ } else if (HasFieldWithHasbits(message, &field)) {
1845
+ PROTO_REFLECTION_APPEND_OR_RETURN();
1846
+ }
1847
+ }
1848
+ #undef PROTO_REFLECTION_APPEND_OR_RETURN
1849
+ // Last will be 0 if no fields were encountered. Otherwise it contains the
1850
+ // last encountered field.
1851
+ return last;
1852
+ }
1853
+
1854
+ void Reflection::ListFields(const Message& message,
1855
+ std::vector<const FieldDescriptor*>* output) const {
1856
+ STATIC_USAGE_CHECK_MESSAGE(ListFields, &message);
1857
+ output->clear();
1858
+ // Optimization: The default instance never has any fields set.
1859
+ if (schema_.IsDefaultInstance(message)) return;
1860
+ const Descriptor* const descriptor = descriptor_;
1861
+ uint32_t last = IsEmptyOrCollectSetFields</*kForIsEmpty=*/false>(
1862
+ message, *descriptor, output);
1863
+
1864
+ // Descriptors of ExtensionSet are appended in their increasing tag
1865
+ // order and they are usually bigger than the field tags so if all fields are
1866
+ // not sorted, let them be sorted.
1867
+ if (last == UINT32_MAX) {
1868
+ std::sort(output->begin(), output->end(), FieldNumberSorter());
1869
+ last = output->back()->number();
1870
+ }
1871
+ size_t last_size = output->size();
1872
+ if (schema_.HasExtensionSet()) {
1873
+ // Descriptors of ExtensionSet are appended in their increasing order.
1874
+ GetExtensionSet(message).AppendToList(descriptor, descriptor_pool_, output);
1875
+ ABSL_DCHECK(std::is_sorted(output->begin() + last_size, output->end(),
1876
+ FieldNumberSorter()));
1877
+ if (output->size() != last_size) {
1878
+ CheckInOrder((*output)[last_size], &last);
1879
+ }
1880
+ }
1881
+ if (last != UINT32_MAX) {
1882
+ ABSL_DCHECK(
1883
+ std::is_sorted(output->begin(), output->end(), FieldNumberSorter()));
1884
+ } else {
1885
+ // ListFields() must sort output by field number.
1886
+ std::sort(output->begin(), output->end(), FieldNumberSorter());
1887
+ }
1888
+ }
1889
+
1890
+ bool Reflection::IsEmptyIgnoringUnknownFieldsImpl(
1891
+ const Message& message) const {
1892
+ if (IsEmptyOrCollectSetFields</*kForIsEmpty=*/true>(message, *descriptor_,
1893
+ nullptr) != 0) {
1894
+ return false;
1895
+ }
1896
+ return
1897
+ !(schema_.HasExtensionSet() && !GetExtensionSet(message).IsEmpty());
1898
+ }
1899
+
1900
+ bool Reflection::IsEmptyIgnoringUnknownFields(const Message& message) const {
1901
+ // Optimization: The default instance never has any fields set.
1902
+ if (schema_.IsDefaultInstance(message)) return true;
1903
+ return IsEmptyIgnoringUnknownFieldsImpl(message);
1904
+ }
1905
+
1906
+ bool Reflection::IsEmpty(const Message& message) const {
1907
+ // Optimization: The default instance never has any fields set.
1908
+ if (schema_.IsDefaultInstance(message)) return true;
1909
+ return IsEmptyIgnoringUnknownFieldsImpl(message) &&
1910
+ GetUnknownFields(message).empty();
1911
+ }
1912
+
1913
+ // -------------------------------------------------------------------
1914
+
1915
+ #undef DEFINE_PRIMITIVE_ACCESSORS
1916
+ #define DEFINE_PRIMITIVE_ACCESSORS(TYPENAME, TYPE, CPPTYPE) \
1917
+ TYPE Reflection::Get##TYPENAME(const Message& message, \
1918
+ const FieldDescriptor* field) const { \
1919
+ USAGE_CHECK_ALL(Get##TYPENAME, SINGULAR, CPPTYPE); \
1920
+ if (field->is_extension()) { \
1921
+ return GetExtensionSet(message).Get<TYPE>( \
1922
+ field->number(), field->default_value_##TYPE()); \
1923
+ } else if (schema_.InRealOneof(field) && !HasOneofField(message, field)) { \
1924
+ return field->default_value_##TYPE(); \
1925
+ } else { \
1926
+ return GetField<TYPE>(message, field); \
1927
+ } \
1928
+ } \
1929
+ \
1930
+ void Reflection::Set##TYPENAME( \
1931
+ Message* message, const FieldDescriptor* field, TYPE value) const { \
1932
+ USAGE_MUTABLE_CHECK_ALL(Set##TYPENAME, SINGULAR, CPPTYPE); \
1933
+ if (field->is_extension()) { \
1934
+ return MutableExtensionSet(message)->Set<TYPE>( \
1935
+ message->GetArena(), field->number(), field->type(), value, field); \
1936
+ } else { \
1937
+ SetField<TYPE>(message, field, value); \
1938
+ } \
1939
+ } \
1940
+ \
1941
+ TYPE Reflection::GetRepeated##TYPENAME( \
1942
+ const Message& message, const FieldDescriptor* field, int index) const { \
1943
+ USAGE_CHECK_ALL(GetRepeated##TYPENAME, REPEATED, CPPTYPE); \
1944
+ if (field->is_extension()) { \
1945
+ return GetExtensionSet(message).GetRepeated<TYPE>(field->number(), \
1946
+ index); \
1947
+ } else { \
1948
+ return GetRepeatedField<TYPE>(message, field, index); \
1949
+ } \
1950
+ } \
1951
+ \
1952
+ void Reflection::SetRepeated##TYPENAME( \
1953
+ Message* message, const FieldDescriptor* field, int index, TYPE value) \
1954
+ const { \
1955
+ USAGE_MUTABLE_CHECK_ALL(SetRepeated##TYPENAME, REPEATED, CPPTYPE); \
1956
+ if (field->is_extension()) { \
1957
+ MutableExtensionSet(message)->SetRepeated<TYPE>(field->number(), index, \
1958
+ value); \
1959
+ } else { \
1960
+ SetRepeatedField<TYPE>(message, field, index, value); \
1961
+ } \
1962
+ } \
1963
+ \
1964
+ void Reflection::Add##TYPENAME( \
1965
+ Message* message, const FieldDescriptor* field, TYPE value) const { \
1966
+ USAGE_MUTABLE_CHECK_ALL(Add##TYPENAME, REPEATED, CPPTYPE); \
1967
+ if (field->is_extension()) { \
1968
+ MutableExtensionSet(message)->Add<TYPE>( \
1969
+ message->GetArena(), field->number(), field->type(), \
1970
+ field->is_packed(), value, field); \
1971
+ } else { \
1972
+ AddField<TYPE>(message, field, value); \
1973
+ } \
1974
+ }
1975
+
1976
+ DEFINE_PRIMITIVE_ACCESSORS(Int32, int32_t, INT32)
1977
+ DEFINE_PRIMITIVE_ACCESSORS(Int64, int64_t, INT64)
1978
+ DEFINE_PRIMITIVE_ACCESSORS(UInt32, uint32_t, UINT32)
1979
+ DEFINE_PRIMITIVE_ACCESSORS(UInt64, uint64_t, UINT64)
1980
+ DEFINE_PRIMITIVE_ACCESSORS(Float, float, FLOAT)
1981
+ DEFINE_PRIMITIVE_ACCESSORS(Double, double, DOUBLE)
1982
+ DEFINE_PRIMITIVE_ACCESSORS(Bool, bool, BOOL)
1983
+ #undef DEFINE_PRIMITIVE_ACCESSORS
1984
+
1985
+ // -------------------------------------------------------------------
1986
+
1987
+ std::string Reflection::GetString(const Message& message,
1988
+ const FieldDescriptor* field) const {
1989
+ USAGE_CHECK_ALL(GetString, SINGULAR, STRING);
1990
+ if (field->is_extension()) {
1991
+ return GetExtensionSet(message).Get<std::string>(
1992
+ field->number(), internal::DefaultValueStringAsString(field));
1993
+ } else {
1994
+ if (schema_.InRealOneof(field) && !HasOneofField(message, field)) {
1995
+ return std::string(field->default_value_string());
1996
+ }
1997
+ switch (field->cpp_string_type()) {
1998
+ case FieldDescriptor::CppStringType::kCord:
1999
+ if (schema_.InRealOneof(field)) {
2000
+ return std::string(*GetField<absl::Cord*>(message, field));
2001
+ } else {
2002
+ return std::string(GetField<absl::Cord>(message, field));
2003
+ }
2004
+ case FieldDescriptor::CppStringType::kView:
2005
+ case FieldDescriptor::CppStringType::kString:
2006
+ if (IsInlined(field)) {
2007
+ return GetField<InlinedStringField>(message, field).GetNoArena();
2008
+ } else if (IsMicroString(field)) {
2009
+ return std::string(GetField<MicroString>(message, field).Get());
2010
+ } else {
2011
+ const auto& str = GetField<ArenaStringPtr>(message, field);
2012
+ return str.IsDefault() ? std::string(field->default_value_string())
2013
+ : str.Get();
2014
+ }
2015
+ }
2016
+ internal::Unreachable();
2017
+ }
2018
+ }
2019
+
2020
+ const std::string& Reflection::GetStringReference(const Message& message,
2021
+ const FieldDescriptor* field,
2022
+ std::string* scratch) const {
2023
+ (void)scratch; // Parameter is used by Google-internal code.
2024
+ USAGE_CHECK_ALL(GetStringReference, SINGULAR, STRING);
2025
+ if (field->is_extension()) {
2026
+ return GetExtensionSet(message).Get<std::string>(
2027
+ field->number(), internal::DefaultValueStringAsString(field));
2028
+ } else {
2029
+ if (schema_.InRealOneof(field) && !HasOneofField(message, field)) {
2030
+ return internal::DefaultValueStringAsString(field);
2031
+ }
2032
+ switch (field->cpp_string_type()) {
2033
+ case FieldDescriptor::CppStringType::kCord:
2034
+ if (schema_.InRealOneof(field)) {
2035
+ absl::CopyCordToString(*GetField<absl::Cord*>(message, field),
2036
+ scratch);
2037
+ } else {
2038
+ absl::CopyCordToString(GetField<absl::Cord>(message, field), scratch);
2039
+ }
2040
+ return *scratch;
2041
+ case FieldDescriptor::CppStringType::kView:
2042
+ case FieldDescriptor::CppStringType::kString:
2043
+ if (IsInlined(field)) {
2044
+ return GetField<InlinedStringField>(message, field).GetNoArena();
2045
+ } else if (IsMicroString(field)) {
2046
+ *scratch = std::string(GetField<MicroString>(message, field).Get());
2047
+ return *scratch;
2048
+ } else {
2049
+ const auto& str = GetField<ArenaStringPtr>(message, field);
2050
+ return str.IsDefault() ? internal::DefaultValueStringAsString(field)
2051
+ : str.Get();
2052
+ }
2053
+ }
2054
+ internal::Unreachable();
2055
+ }
2056
+ }
2057
+
2058
+ absl::Cord Reflection::GetCord(const Message& message,
2059
+ const FieldDescriptor* field) const {
2060
+ USAGE_CHECK_ALL(GetCord, SINGULAR, STRING);
2061
+ if (field->is_extension()) {
2062
+ return absl::Cord(GetExtensionSet(message).Get<std::string>(
2063
+ field->number(), internal::DefaultValueStringAsString(field)));
2064
+ } else {
2065
+ if (schema_.InRealOneof(field) && !HasOneofField(message, field)) {
2066
+ return absl::Cord(field->default_value_string());
2067
+ }
2068
+ switch (field->cpp_string_type()) {
2069
+ case FieldDescriptor::CppStringType::kCord:
2070
+ if (schema_.InRealOneof(field)) {
2071
+ return *GetField<absl::Cord*>(message, field);
2072
+ } else {
2073
+ return GetField<absl::Cord>(message, field);
2074
+ }
2075
+ case FieldDescriptor::CppStringType::kView:
2076
+ case FieldDescriptor::CppStringType::kString:
2077
+ if (IsInlined(field)) {
2078
+ return absl::Cord(
2079
+ GetField<InlinedStringField>(message, field).GetNoArena());
2080
+ } else if (IsMicroString(field)) {
2081
+ return absl::Cord(GetField<MicroString>(message, field).Get());
2082
+ } else {
2083
+ const auto& str = GetField<ArenaStringPtr>(message, field);
2084
+ return absl::Cord(str.IsDefault() ? field->default_value_string()
2085
+ : str.Get());
2086
+ }
2087
+ }
2088
+ internal::Unreachable();
2089
+ }
2090
+ }
2091
+
2092
+ absl::string_view Reflection::GetStringViewImpl(const Message& message,
2093
+ const FieldDescriptor* field,
2094
+ ScratchSpace* scratch) const {
2095
+ if (field->is_extension()) {
2096
+ return GetExtensionSet(message).Get<std::string>(
2097
+ field->number(), internal::DefaultValueStringAsString(field));
2098
+ }
2099
+ if (schema_.InRealOneof(field) && !HasOneofField(message, field)) {
2100
+ return field->default_value_string();
2101
+ }
2102
+
2103
+ switch (field->cpp_string_type()) {
2104
+ case FieldDescriptor::CppStringType::kCord: {
2105
+ const auto& cord = schema_.InRealOneof(field)
2106
+ ? *GetField<absl::Cord*>(message, field)
2107
+ : GetField<absl::Cord>(message, field);
2108
+ ABSL_DCHECK(scratch);
2109
+ return scratch->CopyFromCord(cord);
2110
+ }
2111
+ default:
2112
+ auto str = GetField<ArenaStringPtr>(message, field);
2113
+ return str.IsDefault() ? field->default_value_string() : str.Get();
2114
+ }
2115
+ }
2116
+
2117
+ absl::string_view Reflection::GetStringView(const Message& message,
2118
+ const FieldDescriptor* field,
2119
+ ScratchSpace& scratch) const {
2120
+ USAGE_CHECK_ALL(GetStringView, SINGULAR, STRING);
2121
+ return GetStringViewImpl(message, field, &scratch);
2122
+ }
2123
+
2124
+
2125
+ void Reflection::SetString(Message* message, const FieldDescriptor* field,
2126
+ std::string value) const {
2127
+ USAGE_MUTABLE_CHECK_ALL(SetString, SINGULAR, STRING);
2128
+ Arena* arena = message->GetArena();
2129
+ if (field->is_extension()) {
2130
+ return MutableExtensionSet(message)->Set<std::string>(
2131
+ arena, field->number(), field->type(), std::move(value), field);
2132
+ } else {
2133
+ switch (field->cpp_string_type()) {
2134
+ case FieldDescriptor::CppStringType::kCord:
2135
+ if (schema_.InRealOneof(field)) {
2136
+ if (!HasOneofField(*message, field)) {
2137
+ ClearOneof(message, field->containing_oneof());
2138
+ *MutableField<absl::Cord*>(message, field) =
2139
+ Arena::Create<absl::Cord>(arena);
2140
+ }
2141
+ *(*MutableField<absl::Cord*>(message, field)) = value;
2142
+ break;
2143
+ }
2144
+ *MutableField<absl::Cord>(message, field) = value;
2145
+ break;
2146
+ case FieldDescriptor::CppStringType::kView:
2147
+ case FieldDescriptor::CppStringType::kString: {
2148
+ if (IsInlined(field)) {
2149
+ MutableField<InlinedStringField>(message, field)->Set(value, arena);
2150
+ break;
2151
+ } else if (IsMicroString(field)) {
2152
+ if (schema_.InRealOneof(field) && !HasOneofField(*message, field)) {
2153
+ ClearOneof(message, field->containing_oneof());
2154
+ MutableField<MicroString>(message, field)->InitDefault();
2155
+ }
2156
+ MutableField<MicroString>(message, field)
2157
+ ->Set(std::move(value), arena);
2158
+ break;
2159
+ }
2160
+
2161
+ // Oneof string fields are never set as a default instance.
2162
+ // We just need to pass some arbitrary default string to make it work.
2163
+ // This allows us to not have the real default accessible from
2164
+ // reflection.
2165
+ if (schema_.InRealOneof(field) && !HasOneofField(*message, field)) {
2166
+ ClearOneof(message, field->containing_oneof());
2167
+ MutableField<ArenaStringPtr>(message, field)->InitDefault();
2168
+ }
2169
+ MutableField<ArenaStringPtr>(message, field)
2170
+ ->Set(std::move(value), arena);
2171
+ break;
2172
+ }
2173
+ }
2174
+ }
2175
+ }
2176
+
2177
+ void Reflection::SetString(Message* message, const FieldDescriptor* field,
2178
+ const absl::Cord& value) const {
2179
+ USAGE_MUTABLE_CHECK_ALL(SetString, SINGULAR, STRING);
2180
+ Arena* arena = message->GetArena();
2181
+ if (field->is_extension()) {
2182
+ return absl::CopyCordToString(
2183
+ value, MutableExtensionSet(message)->MutableString(
2184
+ arena, field->number(), field->type(), field));
2185
+ } else {
2186
+ switch (field->cpp_string_type()) {
2187
+ case FieldDescriptor::CppStringType::kCord:
2188
+ if (schema_.InRealOneof(field)) {
2189
+ if (!HasOneofField(*message, field)) {
2190
+ ClearOneof(message, field->containing_oneof());
2191
+ *MutableField<absl::Cord*>(message, field) =
2192
+ Arena::Create<absl::Cord>(arena);
2193
+ }
2194
+ *(*MutableField<absl::Cord*>(message, field)) = value;
2195
+ } else {
2196
+ *MutableField<absl::Cord>(message, field) = value;
2197
+ }
2198
+ break;
2199
+ case FieldDescriptor::CppStringType::kView:
2200
+ case FieldDescriptor::CppStringType::kString: {
2201
+ if (IsInlined(field)) {
2202
+ auto* str = MutableField<InlinedStringField>(message, field);
2203
+ str->Set(std::string(value), arena);
2204
+ } else if (IsMicroString(field)) {
2205
+ if (schema_.InRealOneof(field) && !HasOneofField(*message, field)) {
2206
+ ClearOneof(message, field->containing_oneof());
2207
+ MutableField<MicroString>(message, field)->InitDefault();
2208
+ }
2209
+ auto* str = MutableField<MicroString>(message, field);
2210
+ str->Set(std::string(value), arena);
2211
+ } else {
2212
+ if (schema_.InRealOneof(field) && !HasOneofField(*message, field)) {
2213
+ ClearOneof(message, field->containing_oneof());
2214
+ MutableField<ArenaStringPtr>(message, field)->InitDefault();
2215
+ }
2216
+ auto* str = MutableField<ArenaStringPtr>(message, field);
2217
+ str->Set(std::string(value), arena);
2218
+ }
2219
+ break;
2220
+ }
2221
+ }
2222
+ }
2223
+ }
2224
+
2225
+ std::string Reflection::GetRepeatedString(const Message& message,
2226
+ const FieldDescriptor* field,
2227
+ int index) const {
2228
+ USAGE_CHECK_ALL(GetRepeatedString, REPEATED, STRING);
2229
+ if (field->is_extension()) {
2230
+ return GetExtensionSet(message).GetRepeated<std::string>(field->number(),
2231
+ index);
2232
+ } else {
2233
+ switch (field->cpp_string_type()) {
2234
+ case FieldDescriptor::CppStringType::kCord:
2235
+ return std::string(GetRepeatedField<absl::Cord>(message, field, index));
2236
+ case FieldDescriptor::CppStringType::kView:
2237
+ case FieldDescriptor::CppStringType::kString:
2238
+ return GetRepeatedPtrField<std::string>(message, field, index);
2239
+ }
2240
+ internal::Unreachable();
2241
+ }
2242
+ }
2243
+
2244
+ const std::string& Reflection::GetRepeatedStringReference(
2245
+ const Message& message, const FieldDescriptor* field, int index,
2246
+ std::string* scratch) const {
2247
+ (void)scratch; // Parameter is used by Google-internal code.
2248
+ USAGE_CHECK_ALL(GetRepeatedStringReference, REPEATED, STRING);
2249
+ if (field->is_extension()) {
2250
+ return GetExtensionSet(message).GetRepeated<std::string>(field->number(),
2251
+ index);
2252
+ } else {
2253
+ switch (field->cpp_string_type()) {
2254
+ case FieldDescriptor::CppStringType::kCord:
2255
+ absl::CopyCordToString(
2256
+ GetRepeatedField<absl::Cord>(message, field, index), scratch);
2257
+ return *scratch;
2258
+ case FieldDescriptor::CppStringType::kView:
2259
+ case FieldDescriptor::CppStringType::kString:
2260
+ return GetRepeatedPtrField<std::string>(message, field, index);
2261
+ }
2262
+ internal::Unreachable();
2263
+ }
2264
+ }
2265
+
2266
+ // See GetStringView(), above.
2267
+ absl::string_view Reflection::GetRepeatedStringViewImpl(
2268
+ const Message& message, const FieldDescriptor* field, int index,
2269
+ ScratchSpace* scratch) const {
2270
+ if (field->is_extension()) {
2271
+ return GetExtensionSet(message).GetRepeated<std::string>(field->number(),
2272
+ index);
2273
+ }
2274
+
2275
+ switch (field->cpp_string_type()) {
2276
+ case FieldDescriptor::CppStringType::kCord: {
2277
+ auto& cord = GetRepeatedField<absl::Cord>(message, field, index);
2278
+ ABSL_DCHECK(scratch);
2279
+ return scratch->CopyFromCord(cord);
2280
+ }
2281
+ case FieldDescriptor::CppStringType::kView:
2282
+ case FieldDescriptor::CppStringType::kString:
2283
+ return GetRepeatedPtrField<std::string>(message, field, index);
2284
+ }
2285
+ internal::Unreachable();
2286
+ }
2287
+
2288
+ absl::string_view Reflection::GetRepeatedStringView(
2289
+ const Message& message, const FieldDescriptor* field, int index,
2290
+ ScratchSpace& scratch) const {
2291
+ USAGE_CHECK_ALL(GetRepeatedStringView, REPEATED, STRING);
2292
+ return GetRepeatedStringViewImpl(message, field, index, &scratch);
2293
+ }
2294
+
2295
+
2296
+ void Reflection::SetRepeatedString(Message* message,
2297
+ const FieldDescriptor* field, int index,
2298
+ std::string value) const {
2299
+ USAGE_MUTABLE_CHECK_ALL(SetRepeatedString, REPEATED, STRING);
2300
+ if (field->is_extension()) {
2301
+ MutableExtensionSet(message)->SetRepeated<std::string>(
2302
+ field->number(), index, std::move(value));
2303
+ } else {
2304
+ switch (field->cpp_string_type()) {
2305
+ case FieldDescriptor::CppStringType::kCord:
2306
+ SetRepeatedField<absl::Cord>(message, field, index, absl::Cord(value));
2307
+ break;
2308
+ case FieldDescriptor::CppStringType::kView:
2309
+ case FieldDescriptor::CppStringType::kString:
2310
+ MutableRepeatedField<std::string>(message, field, index)
2311
+ ->assign(std::move(value));
2312
+ break;
2313
+ }
2314
+ }
2315
+ }
2316
+
2317
+
2318
+ void Reflection::AddString(Message* message, const FieldDescriptor* field,
2319
+ std::string value) const {
2320
+ USAGE_MUTABLE_CHECK_ALL(AddString, REPEATED, STRING);
2321
+ if (field->is_extension()) {
2322
+ MutableExtensionSet(message)->Add<std::string>(
2323
+ message->GetArena(), field->number(),
2324
+ field->requires_utf8_validation() ? FieldDescriptor::TYPE_STRING
2325
+ : FieldDescriptor::TYPE_BYTES,
2326
+ field) = std::move(value);
2327
+ } else {
2328
+ switch (field->cpp_string_type()) {
2329
+ case FieldDescriptor::CppStringType::kCord:
2330
+ AddField<absl::Cord>(message, field, absl::Cord(value));
2331
+ break;
2332
+ case FieldDescriptor::CppStringType::kView:
2333
+ case FieldDescriptor::CppStringType::kString:
2334
+ AddField<std::string>(message, field)->assign(std::move(value));
2335
+ break;
2336
+ }
2337
+ }
2338
+ }
2339
+
2340
+
2341
+ // -------------------------------------------------------------------
2342
+
2343
+ const EnumValueDescriptor* Reflection::GetEnum(
2344
+ const Message& message, const FieldDescriptor* field) const {
2345
+ // Usage checked by GetEnumValue.
2346
+ int value = GetEnumValue(message, field);
2347
+ return field->enum_type()->FindValueByNumberCreatingIfUnknown(value);
2348
+ }
2349
+
2350
+ int Reflection::GetEnumValue(const Message& message,
2351
+ const FieldDescriptor* field) const {
2352
+ USAGE_CHECK_ALL(GetEnumValue, SINGULAR, ENUM);
2353
+
2354
+ int32_t value;
2355
+ if (field->is_extension()) {
2356
+ value = GetExtensionSet(message).Get<int>(
2357
+ field->number(), field->default_value_enum()->number());
2358
+ } else if (schema_.InRealOneof(field) && !HasOneofField(message, field)) {
2359
+ value = field->default_value_enum()->number();
2360
+ } else {
2361
+ value = GetField<int>(message, field);
2362
+ }
2363
+ return value;
2364
+ }
2365
+
2366
+ void Reflection::SetEnum(Message* message, const FieldDescriptor* field,
2367
+ const EnumValueDescriptor* value) const {
2368
+ // Usage checked by SetEnumValue.
2369
+ USAGE_CHECK_ENUM_VALUE(SetEnum);
2370
+ SetEnumValueInternal(message, field, value->number());
2371
+ }
2372
+
2373
+ void Reflection::SetEnumValue(Message* message, const FieldDescriptor* field,
2374
+ int value) const {
2375
+ USAGE_MUTABLE_CHECK_ALL(SetEnumValue, SINGULAR, ENUM);
2376
+ if (!CreateUnknownEnumValues(field)) {
2377
+ // Check that the value is valid if we don't support direct storage of
2378
+ // unknown enum values.
2379
+ const EnumValueDescriptor* value_desc =
2380
+ field->enum_type()->FindValueByNumber(value);
2381
+ if (value_desc == nullptr) {
2382
+ MutableUnknownFields(message)->AddVarint(field->number(), value);
2383
+ return;
2384
+ }
2385
+ }
2386
+ SetEnumValueInternal(message, field, value);
2387
+ }
2388
+
2389
+ void Reflection::SetEnumValueInternal(Message* message,
2390
+ const FieldDescriptor* field,
2391
+ int value) const {
2392
+ if (field->is_extension()) {
2393
+ MutableExtensionSet(message)->Set<int>(message->GetArena(), field->number(),
2394
+ field->type(), value, field);
2395
+ } else {
2396
+ SetField<int>(message, field, value);
2397
+ }
2398
+ }
2399
+
2400
+ const EnumValueDescriptor* Reflection::GetRepeatedEnum(
2401
+ const Message& message, const FieldDescriptor* field, int index) const {
2402
+ // Usage checked by GetRepeatedEnumValue.
2403
+ int value = GetRepeatedEnumValue(message, field, index);
2404
+ return field->enum_type()->FindValueByNumberCreatingIfUnknown(value);
2405
+ }
2406
+
2407
+ int Reflection::GetRepeatedEnumValue(const Message& message,
2408
+ const FieldDescriptor* field,
2409
+ int index) const {
2410
+ USAGE_CHECK_ALL(GetRepeatedEnumValue, REPEATED, ENUM);
2411
+
2412
+ int value;
2413
+ if (field->is_extension()) {
2414
+ value = GetExtensionSet(message).GetRepeated<int>(field->number(), index);
2415
+ } else {
2416
+ value = GetRepeatedField<int>(message, field, index);
2417
+ }
2418
+ return value;
2419
+ }
2420
+
2421
+ void Reflection::SetRepeatedEnum(Message* message, const FieldDescriptor* field,
2422
+ int index,
2423
+ const EnumValueDescriptor* value) const {
2424
+ // Usage checked by SetRepeatedEnumValue.
2425
+ USAGE_CHECK_ENUM_VALUE(SetRepeatedEnum);
2426
+ SetRepeatedEnumValueInternal(message, field, index, value->number());
2427
+ }
2428
+
2429
+ void Reflection::SetRepeatedEnumValue(Message* message,
2430
+ const FieldDescriptor* field, int index,
2431
+ int value) const {
2432
+ USAGE_MUTABLE_CHECK_ALL(SetRepeatedEnum, REPEATED, ENUM);
2433
+ if (!CreateUnknownEnumValues(field)) {
2434
+ // Check that the value is valid if we don't support direct storage of
2435
+ // unknown enum values.
2436
+ const EnumValueDescriptor* value_desc =
2437
+ field->enum_type()->FindValueByNumber(value);
2438
+ if (value_desc == nullptr) {
2439
+ MutableUnknownFields(message)->AddVarint(field->number(), value);
2440
+ return;
2441
+ }
2442
+ }
2443
+ SetRepeatedEnumValueInternal(message, field, index, value);
2444
+ }
2445
+
2446
+ void Reflection::SetRepeatedEnumValueInternal(Message* message,
2447
+ const FieldDescriptor* field,
2448
+ int index, int value) const {
2449
+ if (field->is_extension()) {
2450
+ MutableExtensionSet(message)->SetRepeated<int>(field->number(), index,
2451
+ value);
2452
+ } else {
2453
+ SetRepeatedField<int>(message, field, index, value);
2454
+ }
2455
+ }
2456
+
2457
+ void Reflection::AddEnum(Message* message, const FieldDescriptor* field,
2458
+ const EnumValueDescriptor* value) const {
2459
+ // Usage checked by AddEnumValue.
2460
+ USAGE_CHECK_ENUM_VALUE(AddEnum);
2461
+ AddEnumValueInternal(message, field, value->number());
2462
+ }
2463
+
2464
+ void Reflection::AddEnumValue(Message* message, const FieldDescriptor* field,
2465
+ int value) const {
2466
+ USAGE_MUTABLE_CHECK_ALL(AddEnum, REPEATED, ENUM);
2467
+ if (!CreateUnknownEnumValues(field)) {
2468
+ // Check that the value is valid if we don't support direct storage of
2469
+ // unknown enum values.
2470
+ const EnumValueDescriptor* value_desc =
2471
+ field->enum_type()->FindValueByNumber(value);
2472
+ if (value_desc == nullptr) {
2473
+ MutableUnknownFields(message)->AddVarint(field->number(), value);
2474
+ return;
2475
+ }
2476
+ }
2477
+ AddEnumValueInternal(message, field, value);
2478
+ }
2479
+
2480
+ void Reflection::AddEnumValueInternal(Message* message,
2481
+ const FieldDescriptor* field,
2482
+ int value) const {
2483
+ if (field->is_extension()) {
2484
+ MutableExtensionSet(message)->Add<int>(message->GetArena(), field->number(),
2485
+ field->type(), field->is_packed(),
2486
+ value, field);
2487
+ } else {
2488
+ AddField<int>(message, field, value);
2489
+ }
2490
+ }
2491
+
2492
+ // -------------------------------------------------------------------
2493
+
2494
+ const Message* Reflection::GetDefaultMessageInstance(
2495
+ const FieldDescriptor* field) const {
2496
+ // If we are using the generated factory, we cache the prototype in the field
2497
+ // descriptor for faster access.
2498
+ // The default instances of generated messages are not cross-linked, which
2499
+ // means they contain null pointers on their message fields and can't be used
2500
+ // to get the default of submessages.
2501
+ if (message_factory_ == MessageFactory::generated_factory()) {
2502
+ auto& ptr = field->default_generated_instance_;
2503
+ auto* res = ptr.load(std::memory_order_acquire);
2504
+ if (res == nullptr) {
2505
+ // First time asking for this field's default. Load it and cache it.
2506
+ res = message_factory_->GetPrototype(field->message_type());
2507
+ ptr.store(res, std::memory_order_release);
2508
+ }
2509
+ return res;
2510
+ }
2511
+
2512
+ // For other factories, we try the default's object field.
2513
+ // In particular, the DynamicMessageFactory will cross link the default
2514
+ // instances to allow for this. But only do this for real fields.
2515
+ // This is an optimization to avoid going to GetPrototype() below, as that
2516
+ // requires a lock and a map lookup.
2517
+ if (!field->is_extension() && !field->is_repeated() &&
2518
+ !field->options().weak() && !IsLazyField(field) &&
2519
+ !schema_.InRealOneof(field)) {
2520
+ auto* res = DefaultRaw<const Message*>(field);
2521
+ ABSL_DCHECK_NE(res, nullptr);
2522
+ return res;
2523
+ }
2524
+ // Otherwise, just go to the factory.
2525
+ return message_factory_->GetPrototype(field->message_type());
2526
+ }
2527
+
2528
+ const Message& Reflection::GetMessage(const Message& message,
2529
+ const FieldDescriptor* field,
2530
+ MessageFactory* factory) const {
2531
+ USAGE_CHECK_ALL(GetMessage, SINGULAR, MESSAGE);
2532
+
2533
+ if (factory == nullptr) factory = message_factory_;
2534
+
2535
+ if (field->is_extension()) {
2536
+ return static_cast<const Message&>(GetExtensionSet(message).GetMessage(
2537
+ message.GetArena(), field->number(), field->message_type(), factory));
2538
+ } else {
2539
+ if (schema_.InRealOneof(field) && !HasOneofField(message, field)) {
2540
+ return *GetDefaultMessageInstance(field);
2541
+ }
2542
+ const Message* result = GetRaw<const Message*>(message, field);
2543
+ if (result == nullptr) {
2544
+ result = GetDefaultMessageInstance(field);
2545
+ }
2546
+ return *result;
2547
+ }
2548
+ }
2549
+
2550
+ Message* Reflection::MutableMessage(Message* message,
2551
+ const FieldDescriptor* field,
2552
+ MessageFactory* factory) const {
2553
+ USAGE_MUTABLE_CHECK_ALL(MutableMessage, SINGULAR, MESSAGE);
2554
+
2555
+ if (factory == nullptr) factory = message_factory_;
2556
+
2557
+ Arena* arena = message->GetArena();
2558
+ if (field->is_extension()) {
2559
+ return static_cast<Message*>(
2560
+ MutableExtensionSet(message)->MutableMessage(arena, field, factory));
2561
+ } else {
2562
+ Message* result;
2563
+
2564
+ Message** result_holder = MutableRaw<Message*>(message, field);
2565
+
2566
+ if (schema_.InRealOneof(field)) {
2567
+ if (!HasOneofField(*message, field)) {
2568
+ ClearOneof(message, field->containing_oneof());
2569
+ result_holder = MutableField<Message*>(message, field);
2570
+ const Message* default_message = GetDefaultMessageInstance(field);
2571
+ *result_holder = default_message->New(arena);
2572
+ }
2573
+ } else {
2574
+ SetHasBit(message, field);
2575
+ }
2576
+
2577
+ if (*result_holder == nullptr) {
2578
+ const Message* default_message = GetDefaultMessageInstance(field);
2579
+ *result_holder = default_message->New(arena);
2580
+ }
2581
+ result = *result_holder;
2582
+ return result;
2583
+ }
2584
+ }
2585
+
2586
+ void Reflection::UnsafeArenaSetAllocatedMessage(
2587
+ Message* message, Message* sub_message,
2588
+ const FieldDescriptor* field) const {
2589
+ USAGE_MUTABLE_CHECK_ALL(SetAllocatedMessage, SINGULAR, MESSAGE);
2590
+
2591
+
2592
+ Arena* arena = message->GetArena();
2593
+ if (field->is_extension()) {
2594
+ MutableExtensionSet(message)->UnsafeArenaSetAllocatedMessage(
2595
+ arena, field->number(), field->type(), field, sub_message);
2596
+ } else {
2597
+ if (schema_.InRealOneof(field)) {
2598
+ if (sub_message == nullptr) {
2599
+ ClearOneof(message, field->containing_oneof());
2600
+ return;
2601
+ }
2602
+ ClearOneof(message, field->containing_oneof());
2603
+ *MutableRaw<Message*>(message, field) = sub_message;
2604
+ SetOneofCase(message, field);
2605
+ return;
2606
+ }
2607
+
2608
+ if (sub_message == nullptr) {
2609
+ ClearHasBit(message, field);
2610
+ } else {
2611
+ SetHasBit(message, field);
2612
+ }
2613
+ Message** sub_message_holder = MutableRaw<Message*>(message, field);
2614
+ if (arena == nullptr) {
2615
+ delete *sub_message_holder;
2616
+ }
2617
+ *sub_message_holder = sub_message;
2618
+ }
2619
+ }
2620
+
2621
+ void Reflection::SetAllocatedMessage(Message* message, Message* sub_message,
2622
+ const FieldDescriptor* field) const {
2623
+ ABSL_DCHECK(sub_message == nullptr || sub_message->GetArena() == nullptr ||
2624
+ sub_message->GetArena() == message->GetArena());
2625
+
2626
+ if (sub_message == nullptr) {
2627
+ UnsafeArenaSetAllocatedMessage(message, nullptr, field);
2628
+ return;
2629
+ }
2630
+
2631
+ Arena* arena = message->GetArena();
2632
+ Arena* sub_arena = sub_message->GetArena();
2633
+ if (arena == sub_arena) {
2634
+ UnsafeArenaSetAllocatedMessage(message, sub_message, field);
2635
+ return;
2636
+ }
2637
+
2638
+ // If message and sub-message are in different memory ownership domains
2639
+ // (different arenas, or one is on heap and one is not), then we may need to
2640
+ // do a copy.
2641
+ if (sub_arena == nullptr) {
2642
+ ABSL_DCHECK_NE(arena, nullptr);
2643
+ // Case 1: parent is on an arena and child is heap-allocated. We can add
2644
+ // the child to the arena's Own() list to free on arena destruction, then
2645
+ // set our pointer.
2646
+ arena->Own(sub_message);
2647
+ UnsafeArenaSetAllocatedMessage(message, sub_message, field);
2648
+ } else {
2649
+ // Case 2: all other cases. We need to make a copy. MutableMessage() will
2650
+ // either get the existing message object, or instantiate a new one as
2651
+ // appropriate w.r.t. our arena.
2652
+ Message* sub_message_copy = MutableMessage(message, field);
2653
+ sub_message_copy->CopyFrom(*sub_message);
2654
+ }
2655
+ }
2656
+
2657
+ Message* Reflection::UnsafeArenaReleaseMessage(Message* message,
2658
+ const FieldDescriptor* field,
2659
+ MessageFactory* factory) const {
2660
+ USAGE_MUTABLE_CHECK_ALL(ReleaseMessage, SINGULAR, MESSAGE);
2661
+
2662
+ if (factory == nullptr) factory = message_factory_;
2663
+
2664
+ Arena* arena = message->GetArena();
2665
+ if (field->is_extension()) {
2666
+ return static_cast<Message*>(
2667
+ MutableExtensionSet(message)->UnsafeArenaReleaseMessage(arena, field,
2668
+ factory));
2669
+ } else {
2670
+ if (!schema_.InRealOneof(field)) {
2671
+ ClearHasBit(message, field);
2672
+ }
2673
+ if (schema_.InRealOneof(field)) {
2674
+ if (HasOneofField(*message, field)) {
2675
+ *MutableOneofCase(message, field->containing_oneof()) = 0;
2676
+ } else {
2677
+ return nullptr;
2678
+ }
2679
+ }
2680
+ Message** result = MutableRaw<Message*>(message, field);
2681
+ Message* ret = *result;
2682
+ *result = nullptr;
2683
+ return ret;
2684
+ }
2685
+ }
2686
+
2687
+ Message* Reflection::ReleaseMessage(Message* message,
2688
+ const FieldDescriptor* field,
2689
+ MessageFactory* factory) const {
2690
+ Message* released = UnsafeArenaReleaseMessage(message, field, factory);
2691
+ if (internal::DebugHardenForceCopyInRelease()) {
2692
+ released = MaybeForceCopy(message->GetArena(), released);
2693
+ }
2694
+ if (message->GetArena() != nullptr && released != nullptr) {
2695
+ Message* copy_from_arena = released->New();
2696
+ copy_from_arena->CopyFrom(*released);
2697
+ released = copy_from_arena;
2698
+ }
2699
+ return released;
2700
+ }
2701
+
2702
+ const Message& Reflection::GetRepeatedMessage(const Message& message,
2703
+ const FieldDescriptor* field,
2704
+ int index) const {
2705
+ USAGE_CHECK_ALL(GetRepeatedMessage, REPEATED, MESSAGE);
2706
+
2707
+ if (field->is_extension()) {
2708
+ return static_cast<const Message&>(
2709
+ GetExtensionSet(message).GetRepeatedMessage(field->number(), index));
2710
+ } else {
2711
+ if (IsMapFieldInApi(field)) {
2712
+ return GetRaw<MapFieldBase>(message, field)
2713
+ .GetRepeatedField()
2714
+ .Get<GenericTypeHandler<Message>>(index);
2715
+ } else {
2716
+ return GetRaw<RepeatedPtrFieldBase>(message, field)
2717
+ .Get<GenericTypeHandler<Message>>(index);
2718
+ }
2719
+ }
2720
+ }
2721
+
2722
+ Message* Reflection::MutableRepeatedMessage(Message* message,
2723
+ const FieldDescriptor* field,
2724
+ int index) const {
2725
+ USAGE_MUTABLE_CHECK_ALL(MutableRepeatedMessage, REPEATED, MESSAGE);
2726
+
2727
+ if (field->is_extension()) {
2728
+ return static_cast<Message*>(
2729
+ MutableExtensionSet(message)->MutableRepeatedMessage(field->number(),
2730
+ index));
2731
+ } else {
2732
+ if (IsMapFieldInApi(field)) {
2733
+ return MutableRaw<MapFieldBase>(message, field)
2734
+ ->MutableRepeatedField()
2735
+ ->Mutable<GenericTypeHandler<Message>>(index);
2736
+ } else {
2737
+ return MutableRaw<RepeatedPtrFieldBase>(message, field)
2738
+ ->Mutable<GenericTypeHandler<Message>>(index);
2739
+ }
2740
+ }
2741
+ }
2742
+
2743
+ Message* Reflection::AddMessage(Message* message, const FieldDescriptor* field,
2744
+ MessageFactory* factory) const {
2745
+ USAGE_MUTABLE_CHECK_ALL(AddMessage, REPEATED, MESSAGE);
2746
+
2747
+ if (factory == nullptr) factory = message_factory_;
2748
+
2749
+ Arena* arena = message->GetArena();
2750
+ if (field->is_extension()) {
2751
+ return static_cast<Message*>(
2752
+ MutableExtensionSet(message)->AddMessage(arena, field, factory));
2753
+ } else {
2754
+ Message* result = nullptr;
2755
+
2756
+ SetHasBit(message, field);
2757
+
2758
+ // We can't use AddField<Message>() because RepeatedPtrFieldBase doesn't
2759
+ // know how to allocate one.
2760
+ RepeatedPtrFieldBase* repeated = nullptr;
2761
+ if (IsMapFieldInApi(field)) {
2762
+ repeated =
2763
+ MutableRaw<MapFieldBase>(message, field)->MutableRepeatedField();
2764
+ } else {
2765
+ repeated = MutableRaw<RepeatedPtrFieldBase>(message, field);
2766
+ }
2767
+ result = repeated->AddFromCleared<GenericTypeHandler<Message>>();
2768
+ if (result == nullptr) {
2769
+ // We must allocate a new object.
2770
+ const Message* prototype;
2771
+ if (repeated->size() == 0) {
2772
+ prototype = factory->GetPrototype(field->message_type());
2773
+ } else {
2774
+ prototype = &repeated->Get<GenericTypeHandler<Message>>(0);
2775
+ }
2776
+ result = prototype->New(arena);
2777
+ // We can guarantee here that repeated and result are either both heap
2778
+ // allocated or arena owned. So it is safe to call the unsafe version
2779
+ // of AddAllocated.
2780
+ repeated->UnsafeArenaAddAllocated<GenericTypeHandler<Message>>(arena,
2781
+ result);
2782
+ }
2783
+
2784
+ return result;
2785
+ }
2786
+ }
2787
+
2788
+ void Reflection::AddAllocatedMessage(Message* message,
2789
+ const FieldDescriptor* field,
2790
+ Message* new_entry) const {
2791
+ USAGE_MUTABLE_CHECK_ALL(AddAllocatedMessage, REPEATED, MESSAGE);
2792
+
2793
+ Arena* arena = message->GetArena();
2794
+ if (field->is_extension()) {
2795
+ MutableExtensionSet(message)->AddAllocatedMessage(arena, field, new_entry);
2796
+ } else {
2797
+ RepeatedPtrFieldBase* repeated = nullptr;
2798
+ if (IsMapFieldInApi(field)) {
2799
+ repeated =
2800
+ MutableRaw<MapFieldBase>(message, field)->MutableRepeatedField();
2801
+ } else {
2802
+ repeated = MutableRaw<RepeatedPtrFieldBase>(message, field);
2803
+ }
2804
+ repeated->AddAllocated<GenericTypeHandler<Message>>(arena, new_entry);
2805
+ SetHasBit(message, field);
2806
+ }
2807
+ }
2808
+
2809
+ void Reflection::UnsafeArenaAddAllocatedMessage(Message* message,
2810
+ const FieldDescriptor* field,
2811
+ Message* new_entry) const {
2812
+ USAGE_MUTABLE_CHECK_ALL(UnsafeArenaAddAllocatedMessage, REPEATED, MESSAGE);
2813
+
2814
+ Arena* arena = message->GetArena();
2815
+ if (field->is_extension()) {
2816
+ MutableExtensionSet(message)->UnsafeArenaAddAllocatedMessage(arena, field,
2817
+ new_entry);
2818
+ } else {
2819
+ RepeatedPtrFieldBase* repeated = nullptr;
2820
+ if (IsMapFieldInApi(field)) {
2821
+ repeated =
2822
+ MutableRaw<MapFieldBase>(message, field)->MutableRepeatedField();
2823
+ } else {
2824
+ repeated = MutableRaw<RepeatedPtrFieldBase>(message, field);
2825
+ }
2826
+ repeated->UnsafeArenaAddAllocated<GenericTypeHandler<Message>>(arena,
2827
+ new_entry);
2828
+ SetHasBit(message, field);
2829
+ }
2830
+ }
2831
+
2832
+ bool Reflection::IsRepeatedOrMapFieldEmpty(const Message& message,
2833
+ const FieldDescriptor* field) const {
2834
+ USAGE_CHECK_MESSAGE(IsRepeatedOrMapFieldEmpty, &message);
2835
+ USAGE_CHECK_MESSAGE_TYPE(IsRepeatedOrMapFieldEmpty);
2836
+ USAGE_CHECK_REPEATED(IsRepeatedOrMapFieldEmpty);
2837
+
2838
+ if (field->is_extension()) {
2839
+ return GetExtensionSet(message).ExtensionSize(field->number()) == 0;
2840
+ } else {
2841
+ switch (field->cpp_type()) {
2842
+ #define HANDLE_TYPE(UPPERCASE, LOWERCASE) \
2843
+ case FieldDescriptor::CPPTYPE_##UPPERCASE: \
2844
+ return GetRaw<RepeatedField<LOWERCASE>>(message, field).empty()
2845
+
2846
+ HANDLE_TYPE(INT32, int32_t);
2847
+ HANDLE_TYPE(INT64, int64_t);
2848
+ HANDLE_TYPE(UINT32, uint32_t);
2849
+ HANDLE_TYPE(UINT64, uint64_t);
2850
+ HANDLE_TYPE(DOUBLE, double);
2851
+ HANDLE_TYPE(FLOAT, float);
2852
+ HANDLE_TYPE(BOOL, bool);
2853
+ HANDLE_TYPE(ENUM, int);
2854
+ #undef HANDLE_TYPE
2855
+
2856
+ case FieldDescriptor::CPPTYPE_STRING:
2857
+ if (field->cpp_string_type() == FieldDescriptor::CppStringType::kCord) {
2858
+ return GetRaw<RepeatedField<absl::Cord>>(message, field).empty();
2859
+ } else {
2860
+ return GetRaw<RepeatedPtrFieldBase>(message, field).empty();
2861
+ }
2862
+ case FieldDescriptor::CPPTYPE_MESSAGE:
2863
+ if (IsMapFieldInApi(field)) {
2864
+ const internal::MapFieldBase& map =
2865
+ GetRaw<MapFieldBase>(message, field);
2866
+ if (map.IsRepeatedFieldValid()) {
2867
+ return map.GetRepeatedField().empty();
2868
+ } else {
2869
+ // No need to materialize the repeated field if it is out of sync:
2870
+ // its size will be the same as the map's size.
2871
+ return map.size() == 0;
2872
+ }
2873
+ } else {
2874
+ return GetRaw<RepeatedPtrFieldBase>(message, field).empty();
2875
+ }
2876
+ default:
2877
+ internal::Unreachable();
2878
+ }
2879
+ }
2880
+ }
2881
+
2882
+ void* Reflection::MutableRawRepeatedField(Message* message,
2883
+ const FieldDescriptor* field,
2884
+ FieldDescriptor::CppType cpptype,
2885
+ int ctype, const Descriptor* desc,
2886
+ GetRepeatedFieldIntent intent) const {
2887
+ (void)ctype; // Parameter is used by Google-internal code.
2888
+ USAGE_CHECK_REPEATED("MutableRawRepeatedField");
2889
+ USAGE_CHECK_MESSAGE_TYPE(MutableRawRepeatedField);
2890
+ USAGE_CHECK_EXPOSE_LEGACY_REPEATED_FIELD(intent, "MutableRawRepeatedField");
2891
+
2892
+ if (field->cpp_type() != cpptype &&
2893
+ (field->cpp_type() != FieldDescriptor::CPPTYPE_ENUM ||
2894
+ cpptype != FieldDescriptor::CPPTYPE_INT32))
2895
+ ReportReflectionUsageTypeError(descriptor_, field,
2896
+ "MutableRawRepeatedField", cpptype);
2897
+ if (desc != nullptr)
2898
+ ABSL_CHECK_EQ(field->message_type(), desc) << "wrong submessage type";
2899
+ if (field->is_extension()) {
2900
+ return MutableExtensionSet(message)->MutableRawRepeatedField(
2901
+ message->GetArena(), field->number(), field->type(), field->is_packed(),
2902
+ field);
2903
+ } else {
2904
+ // Trigger transform for MapField
2905
+ if (IsMapFieldInApi(field)) {
2906
+ return MutableRaw<MapFieldBase>(message, field)->MutableRepeatedField();
2907
+ }
2908
+ return MutableRaw<void>(message, field);
2909
+ }
2910
+ }
2911
+
2912
+ const void* Reflection::GetRawRepeatedField(
2913
+ const Message& message, const FieldDescriptor* field,
2914
+ FieldDescriptor::CppType cpptype, int ctype, const Descriptor* desc,
2915
+ GetRepeatedFieldIntent intent) const {
2916
+ USAGE_CHECK_REPEATED("GetRawRepeatedField");
2917
+ USAGE_CHECK_MESSAGE_TYPE(GetRawRepeatedField);
2918
+ USAGE_CHECK_EXPOSE_LEGACY_REPEATED_FIELD(intent, "GetRawRepeatedField");
2919
+
2920
+ if (field->cpp_type() != cpptype &&
2921
+ (field->cpp_type() != FieldDescriptor::CPPTYPE_ENUM ||
2922
+ cpptype != FieldDescriptor::CPPTYPE_INT32))
2923
+ ReportReflectionUsageTypeError(descriptor_, field, "GetRawRepeatedField",
2924
+ cpptype);
2925
+ if (ctype >= 0)
2926
+ ABSL_CHECK(internal::IsMatchingCType(field, ctype)) << "subtype mismatch";
2927
+ if (desc != nullptr)
2928
+ ABSL_CHECK_EQ(field->message_type(), desc) << "wrong submessage type";
2929
+ if (field->is_extension()) {
2930
+ return GetExtensionSet(message).GetRawRepeatedField(
2931
+ field->number(), internal::DefaultRawPtr());
2932
+ } else {
2933
+ // Trigger transform for MapField
2934
+ if (IsMapFieldInApi(field)) {
2935
+ return &(GetRaw<MapFieldBase>(message, field).GetRepeatedField());
2936
+ }
2937
+ return &GetRaw<char>(message, field);
2938
+ }
2939
+ }
2940
+
2941
+ const FieldDescriptor* Reflection::GetOneofFieldDescriptor(
2942
+ const Message& message, const OneofDescriptor* oneof_descriptor) const {
2943
+ if (oneof_descriptor->is_synthetic()) {
2944
+ const FieldDescriptor* field = oneof_descriptor->field(0);
2945
+ return HasField(message, field) ? field : nullptr;
2946
+ }
2947
+ uint32_t field_number = GetOneofCase(message, oneof_descriptor);
2948
+ if (field_number == 0) {
2949
+ return nullptr;
2950
+ }
2951
+ return descriptor_->FindFieldByNumber(field_number);
2952
+ }
2953
+
2954
+ bool Reflection::ContainsMapKey(const Message& message,
2955
+ const FieldDescriptor* field,
2956
+ const MapKey& key) const {
2957
+ USAGE_CHECK(IsMapFieldInApi(field), LookupMapValue,
2958
+ "Field is not a map field.");
2959
+ return GetRaw<MapFieldBase>(message, field).ContainsMapKey(key);
2960
+ }
2961
+
2962
+ bool Reflection::InsertOrLookupMapValue(Message* message,
2963
+ const FieldDescriptor* field,
2964
+ const MapKey& key,
2965
+ MapValueRef* val) const {
2966
+ USAGE_CHECK(IsMapFieldInApi(field), InsertOrLookupMapValue,
2967
+ "Field is not a map field.");
2968
+ val->SetType(field->message_type()->map_value()->cpp_type());
2969
+ SetHasBit(message, field);
2970
+ return MutableRaw<MapFieldBase>(message, field)
2971
+ ->InsertOrLookupMapValue(key, val);
2972
+ }
2973
+
2974
+ bool Reflection::LookupMapValue(const Message& message,
2975
+ const FieldDescriptor* field, const MapKey& key,
2976
+ MapValueConstRef* val) const {
2977
+ USAGE_CHECK(IsMapFieldInApi(field), LookupMapValue,
2978
+ "Field is not a map field.");
2979
+ val->SetType(field->message_type()->map_value()->cpp_type());
2980
+ return GetRaw<MapFieldBase>(message, field).LookupMapValue(key, val);
2981
+ }
2982
+
2983
+ bool Reflection::DeleteMapValue(Message* message, const FieldDescriptor* field,
2984
+ const MapKey& key) const {
2985
+ USAGE_CHECK(IsMapFieldInApi(field), DeleteMapValue,
2986
+ "Field is not a map field.");
2987
+ return MutableRaw<MapFieldBase>(message, field)
2988
+ ->DeleteMapValue(message->GetArena(), key);
2989
+ }
2990
+
2991
+ MapIterator Reflection::MapBegin(Message* message,
2992
+ const FieldDescriptor* field) const {
2993
+ USAGE_CHECK(IsMapFieldInApi(field), MapBegin, "Field is not a map field.");
2994
+ MapIterator iter(message, field);
2995
+ GetRaw<MapFieldBase>(*message, field).MapBegin(&iter);
2996
+ return iter;
2997
+ }
2998
+
2999
+ MapIterator Reflection::MapEnd(Message* message,
3000
+ const FieldDescriptor* field) const {
3001
+ USAGE_CHECK(IsMapFieldInApi(field), MapEnd, "Field is not a map field.");
3002
+ MapIterator iter(message, field);
3003
+ GetRaw<MapFieldBase>(*message, field).MapEnd(&iter);
3004
+ return iter;
3005
+ }
3006
+
3007
+ ConstMapIterator Reflection::ConstMapBegin(const Message* message,
3008
+ const FieldDescriptor* field) const {
3009
+ USAGE_CHECK(IsMapFieldInApi(field), ConstMapBegin,
3010
+ "Field is not a map field.");
3011
+ ConstMapIterator iter(message, field);
3012
+ GetRaw<MapFieldBase>(*message, field).ConstMapBegin(&iter);
3013
+ return iter;
3014
+ }
3015
+
3016
+ ConstMapIterator Reflection::ConstMapEnd(const Message* message,
3017
+ const FieldDescriptor* field) const {
3018
+ USAGE_CHECK(IsMapFieldInApi(field), ConstMapEnd, "Field is not a map field.");
3019
+ ConstMapIterator iter(message, field);
3020
+ GetRaw<MapFieldBase>(*message, field).ConstMapEnd(&iter);
3021
+ return iter;
3022
+ }
3023
+
3024
+ int Reflection::MapSize(const Message& message,
3025
+ const FieldDescriptor* field) const {
3026
+ USAGE_CHECK(IsMapFieldInApi(field), MapSize, "Field is not a map field.");
3027
+ return GetRaw<MapFieldBase>(message, field).size();
3028
+ }
3029
+
3030
+ // -----------------------------------------------------------------------------
3031
+
3032
+ const FieldDescriptor* Reflection::FindKnownExtensionByName(
3033
+ absl::string_view name) const {
3034
+ if (!schema_.HasExtensionSet()) return nullptr;
3035
+ return descriptor_pool_->FindExtensionByPrintableName(descriptor_, name);
3036
+ }
3037
+
3038
+ const FieldDescriptor* Reflection::FindKnownExtensionByNumber(
3039
+ int number) const {
3040
+ if (!schema_.HasExtensionSet()) return nullptr;
3041
+ return descriptor_pool_->FindExtensionByNumber(descriptor_, number);
3042
+ }
3043
+
3044
+ // ===================================================================
3045
+ // Some private helpers.
3046
+
3047
+ // These simple template accessors obtain pointers (or references) to
3048
+ // the given field.
3049
+
3050
+ void Reflection::PrepareSplitMessageForWrite(Message* message) const {
3051
+ ABSL_DCHECK_NE(message, schema_.default_instance_);
3052
+ void** split = MutableSplitField(message);
3053
+ const void* default_split = GetSplitField(schema_.default_instance_);
3054
+ if (*split == default_split) {
3055
+ uint32_t size = schema_.SizeofSplit();
3056
+ Arena* arena = message->GetArena();
3057
+ *split = (arena == nullptr) ? internal::Allocate(size)
3058
+ : arena->AllocateAligned(size);
3059
+ memcpy(*split, default_split, size);
3060
+ }
3061
+ }
3062
+
3063
+ template <class Type>
3064
+ static Type* AllocIfDefault(const FieldDescriptor* field, Type*& ptr,
3065
+ Arena* arena) {
3066
+ if (ptr == internal::DefaultRawPtr()) {
3067
+ // Note: we can't rely on Type to distinguish between these cases (Type can
3068
+ // be e.g. char).
3069
+ if (field->cpp_type() < FieldDescriptor::CPPTYPE_STRING ||
3070
+ (field->cpp_type() == FieldDescriptor::CPPTYPE_STRING &&
3071
+ field->cpp_string_type() == FieldDescriptor::CppStringType::kCord)) {
3072
+ ptr =
3073
+ reinterpret_cast<Type*>(Arena::Create<RepeatedField<int32_t>>(arena));
3074
+ } else {
3075
+ ptr = reinterpret_cast<Type*>(Arena::Create<RepeatedPtrFieldBase>(arena));
3076
+ }
3077
+ }
3078
+ return ptr;
3079
+ }
3080
+
3081
+ void* Reflection::MutableRawSplitImpl(Message* message,
3082
+ const FieldDescriptor* field) const {
3083
+ ABSL_DCHECK(!schema_.InRealOneof(field)) << "Field = " << field->full_name();
3084
+
3085
+ const uint32_t field_offset = schema_.GetFieldOffset(field);
3086
+ PrepareSplitMessageForWrite(message);
3087
+ void** split = MutableSplitField(message);
3088
+ if (internal::SplitFieldHasExtraIndirection(field)) {
3089
+ return AllocIfDefault(field,
3090
+ *GetPointerAtOffset<void*>(*split, field_offset),
3091
+ message->GetArena());
3092
+ }
3093
+ return GetPointerAtOffset<void>(*split, field_offset);
3094
+ }
3095
+
3096
+ const uint32_t* Reflection::GetHasBits(const Message& message) const {
3097
+ ABSL_DCHECK(schema_.HasHasbits());
3098
+ return &GetConstRefAtOffset<uint32_t>(message, schema_.HasBitsOffset());
3099
+ }
3100
+
3101
+ uint32_t* Reflection::MutableHasBits(Message* message) const {
3102
+ ABSL_DCHECK(schema_.HasHasbits());
3103
+ return GetPointerAtOffset<uint32_t>(message, schema_.HasBitsOffset());
3104
+ }
3105
+
3106
+ uint32_t Reflection::GetOneofCase(
3107
+ const Message& message, const OneofDescriptor* oneof_descriptor) const {
3108
+ ABSL_DCHECK(!oneof_descriptor->is_synthetic());
3109
+ return internal::GetConstRefAtOffset<uint32_t>(
3110
+ message, schema_.GetOneofCaseOffset(oneof_descriptor));
3111
+ }
3112
+
3113
+ uint32_t* Reflection::MutableOneofCase(
3114
+ Message* message, const OneofDescriptor* oneof_descriptor) const {
3115
+ ABSL_DCHECK(!oneof_descriptor->is_synthetic());
3116
+ return GetPointerAtOffset<uint32_t>(
3117
+ message, schema_.GetOneofCaseOffset(oneof_descriptor));
3118
+ }
3119
+
3120
+ const ExtensionSet& Reflection::GetExtensionSet(const Message& message) const {
3121
+ return GetConstRefAtOffset<ExtensionSet>(message,
3122
+ schema_.GetExtensionSetOffset());
3123
+ }
3124
+
3125
+ ExtensionSet* Reflection::MutableExtensionSet(Message* message) const {
3126
+ return GetPointerAtOffset<ExtensionSet>(message,
3127
+ schema_.GetExtensionSetOffset());
3128
+ }
3129
+
3130
+ bool Reflection::IsImplicitPresenceFieldNonEmpty(
3131
+ const Message& message, const FieldDescriptor* field) const {
3132
+ ABSL_DCHECK(IsMapEntry(field) || !field->has_presence());
3133
+ ABSL_DCHECK(field->cpp_type() != FieldDescriptor::CPPTYPE_MESSAGE ||
3134
+ field->is_repeated());
3135
+
3136
+ if (field->is_repeated()) {
3137
+ return !IsRepeatedOrMapFieldEmpty(message, field);
3138
+ }
3139
+
3140
+ // Scalar primitive (numeric or string/bytes) fields are present if
3141
+ // their value is non-zero (numeric) or non-empty (string/bytes). N.B.:
3142
+ // we must use this definition here, rather than the "scalar fields
3143
+ // always present" in the proto3 docs, because MergeFrom() semantics
3144
+ // require presence as "present on wire", and reflection-based merge
3145
+ // (which uses HasField()) needs to be consistent with this.
3146
+ switch (field->cpp_type()) {
3147
+ case FieldDescriptor::CPPTYPE_BOOL:
3148
+ return GetRaw<bool>(message, field) != false;
3149
+ case FieldDescriptor::CPPTYPE_INT32:
3150
+ return GetRaw<int32_t>(message, field) != 0;
3151
+ case FieldDescriptor::CPPTYPE_INT64:
3152
+ return GetRaw<int64_t>(message, field) != 0;
3153
+ case FieldDescriptor::CPPTYPE_UINT32:
3154
+ return GetRaw<uint32_t>(message, field) != 0;
3155
+ case FieldDescriptor::CPPTYPE_UINT64:
3156
+ return GetRaw<uint64_t>(message, field) != 0;
3157
+ case FieldDescriptor::CPPTYPE_FLOAT:
3158
+ static_assert(sizeof(uint32_t) == sizeof(float),
3159
+ "Code assumes uint32_t and float are the same size.");
3160
+ return absl::bit_cast<uint32_t>(GetRaw<float>(message, field)) != 0;
3161
+ case FieldDescriptor::CPPTYPE_DOUBLE:
3162
+ static_assert(sizeof(uint64_t) == sizeof(double),
3163
+ "Code assumes uint64_t and double are the same size.");
3164
+ return absl::bit_cast<uint64_t>(GetRaw<double>(message, field)) != 0;
3165
+ case FieldDescriptor::CPPTYPE_ENUM:
3166
+ return GetRaw<int>(message, field) != 0;
3167
+ case FieldDescriptor::CPPTYPE_STRING:
3168
+ switch (field->cpp_string_type()) {
3169
+ case FieldDescriptor::CppStringType::kCord:
3170
+ return !GetField<const absl::Cord>(message, field).empty();
3171
+ case FieldDescriptor::CppStringType::kView:
3172
+ case FieldDescriptor::CppStringType::kString: {
3173
+ if (IsInlined(field)) {
3174
+ return !GetField<InlinedStringField>(message, field)
3175
+ .GetNoArena()
3176
+ .empty();
3177
+ } else if (IsMicroString(field)) {
3178
+ return !GetField<MicroString>(message, field).Get().empty();
3179
+ }
3180
+
3181
+ return !GetField<ArenaStringPtr>(message, field).Get().empty();
3182
+ }
3183
+ default:
3184
+ internal::Unreachable();
3185
+ }
3186
+ case FieldDescriptor::CPPTYPE_MESSAGE:
3187
+ default:
3188
+ internal::Unreachable();
3189
+ }
3190
+ }
3191
+
3192
+ bool Reflection::IsFieldPresentGivenHasbits(const Message& message,
3193
+ const FieldDescriptor* field,
3194
+ const uint32_t* hasbits,
3195
+ uint32_t hasbit_index) const {
3196
+ // If hasbit exists but is not set, field is guaranteed to be missing.
3197
+ if (!IsIndexInHasBitSet(hasbits, hasbit_index)) {
3198
+ return false;
3199
+ }
3200
+
3201
+ // For explicit-presence fields, a set hasbit indicates a present field.
3202
+ if (field->has_presence()) {
3203
+ return true;
3204
+ }
3205
+
3206
+ // proto3: hasbits are present, but an additional zero check must be
3207
+ // performed because hasbit can be set to true while field is zero.
3208
+
3209
+ // Handling map entries in proto3:
3210
+ // Implicit presence map fields are represented as a native C++ map, but their
3211
+ // corresponding MapEntry messages (e.g. if we want to access them as repeated
3212
+ // MapEntry fields) will unconditionally be generated with hasbits. MapEntrys
3213
+ // behave like explicit presence fields. That is, in MapEntry's C++
3214
+ // implementation...
3215
+ // - key can be null, empty, or nonempty;
3216
+ // - value can be null, empty, or nonempty.
3217
+ if (IsMapEntry(field)) {
3218
+ return true;
3219
+ }
3220
+
3221
+ // This is the vanilla case: for a non-repeated primitive or string field,
3222
+ // returns if the field is nonzero (i.e. present in proto3 semantics).
3223
+ return IsImplicitPresenceFieldNonEmpty(message, field);
3224
+ }
3225
+
3226
+ bool Reflection::HasFieldWithHasbits(const Message& message,
3227
+ const FieldDescriptor* field) const {
3228
+ ABSL_DCHECK(!field->options().weak());
3229
+ ABSL_DCHECK(!field->is_extension());
3230
+ if (schema_.HasBitIndex(field) != static_cast<uint32_t>(kNoHasbit)) {
3231
+ return IsFieldPresentGivenHasbits(message, field, GetHasBits(message),
3232
+ schema_.HasBitIndex(field));
3233
+ }
3234
+
3235
+ if (field->is_repeated()) {
3236
+ return !IsRepeatedOrMapFieldEmpty(message, field);
3237
+ }
3238
+
3239
+ // The python implementation traditionally assumes that proto3 messages don't
3240
+ // have hasbits. As a result, proto3 objects created through dynamic message
3241
+ // in Python won't have hasbits. We need the following code to preserve
3242
+ // compatibility.
3243
+ // NOTE: It would be nice to be able to remove it, but we need one
3244
+ // or more breaking changes in order to do so.
3245
+ //
3246
+ // proto3 with no has-bits. All fields present except messages, which are
3247
+ // present only if their message-field pointer is non-null.
3248
+ if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
3249
+ return !schema_.IsDefaultInstance(message) &&
3250
+ GetRaw<const Message*>(message, field) != nullptr;
3251
+ }
3252
+
3253
+ // Non-message field (and non-oneof, since that was handled in HasField()
3254
+ // before calling us).
3255
+
3256
+ return IsImplicitPresenceFieldNonEmpty(message, field);
3257
+ }
3258
+
3259
+ void Reflection::SetHasBit(Message* message,
3260
+ const FieldDescriptor* field) const {
3261
+ ABSL_DCHECK(!field->options().weak());
3262
+ const uint32_t index = schema_.HasBitIndex(field);
3263
+ if (index == static_cast<uint32_t>(kNoHasbit)) return;
3264
+ MutableHasBits(message)[index / 32] |=
3265
+ (static_cast<uint32_t>(1) << (index % 32));
3266
+ }
3267
+
3268
+ void Reflection::ClearHasBit(Message* message,
3269
+ const FieldDescriptor* field) const {
3270
+ ABSL_DCHECK(!field->options().weak());
3271
+ const uint32_t index = schema_.HasBitIndex(field);
3272
+ if (index == static_cast<uint32_t>(kNoHasbit)) return;
3273
+ MutableHasBits(message)[index / 32] &=
3274
+ ~(static_cast<uint32_t>(1) << (index % 32));
3275
+ }
3276
+
3277
+ void Reflection::NaiveSwapHasBit(Message* message1, Message* message2,
3278
+ const FieldDescriptor* field) const {
3279
+ ABSL_DCHECK(!field->options().weak());
3280
+ if (!schema_.HasHasbits() ||
3281
+ schema_.HasBitIndex(field) == static_cast<uint32_t>(kNoHasbit)) {
3282
+ return;
3283
+ }
3284
+ const Reflection* r1 = message1->GetReflection();
3285
+ const Reflection* r2 = message2->GetReflection();
3286
+
3287
+ bool is_m1_hasbit_set = IsIndexInHasBitSet(r1->GetHasBits(*message1),
3288
+ r1->schema_.HasBitIndex(field));
3289
+ bool is_m2_hasbit_set = IsIndexInHasBitSet(r2->GetHasBits(*message2),
3290
+ r2->schema_.HasBitIndex(field));
3291
+
3292
+ if (is_m1_hasbit_set) {
3293
+ SetHasBit(message2, field);
3294
+ } else {
3295
+ ClearHasBit(message2, field);
3296
+ }
3297
+
3298
+ if (is_m2_hasbit_set) {
3299
+ SetHasBit(message1, field);
3300
+ } else {
3301
+ ClearHasBit(message1, field);
3302
+ }
3303
+ }
3304
+
3305
+ bool Reflection::HasOneof(const Message& message,
3306
+ const OneofDescriptor* oneof_descriptor) const {
3307
+ if (oneof_descriptor->is_synthetic()) {
3308
+ return HasField(message, oneof_descriptor->field(0));
3309
+ }
3310
+ return (GetOneofCase(message, oneof_descriptor) > 0);
3311
+ }
3312
+
3313
+ void Reflection::SetOneofCase(Message* message,
3314
+ const FieldDescriptor* field) const {
3315
+ *MutableOneofCase(message, field->containing_oneof()) = field->number();
3316
+ }
3317
+
3318
+ void Reflection::ClearOneofField(Message* message,
3319
+ const FieldDescriptor* field) const {
3320
+ if (HasOneofField(*message, field)) {
3321
+ ClearOneof(message, field->containing_oneof());
3322
+ }
3323
+ }
3324
+
3325
+ void Reflection::ClearOneof(Message* message,
3326
+ const OneofDescriptor* oneof_descriptor) const {
3327
+ if (oneof_descriptor->is_synthetic()) {
3328
+ ClearField(message, oneof_descriptor->field(0));
3329
+ return;
3330
+ }
3331
+ // TODO: Consider to cache the unused object instead of deleting
3332
+ // it. It will be much faster if an application switches a lot from
3333
+ // a few oneof fields. Time/space tradeoff
3334
+ uint32_t oneof_case = GetOneofCase(*message, oneof_descriptor);
3335
+ if (oneof_case > 0) {
3336
+ const FieldDescriptor* field = descriptor_->FindFieldByNumber(oneof_case);
3337
+ if (message->GetArena() == nullptr) {
3338
+ switch (field->cpp_type()) {
3339
+ case FieldDescriptor::CPPTYPE_STRING: {
3340
+ switch (field->cpp_string_type()) {
3341
+ case FieldDescriptor::CppStringType::kCord:
3342
+ delete *MutableRaw<absl::Cord*>(message, field);
3343
+ break;
3344
+ case FieldDescriptor::CppStringType::kView:
3345
+ case FieldDescriptor::CppStringType::kString:
3346
+ if (IsMicroString(field)) {
3347
+ MutableField<MicroString>(message, field)->Destroy();
3348
+ } else {
3349
+ // Oneof string fields are never set as a default instance.
3350
+ // We just need to pass some arbitrary default string to make it
3351
+ // work. This allows us to not have the real default accessible
3352
+ // from reflection.
3353
+ MutableField<ArenaStringPtr>(message, field)->Destroy();
3354
+ }
3355
+ break;
3356
+ }
3357
+ break;
3358
+ }
3359
+
3360
+ case FieldDescriptor::CPPTYPE_MESSAGE:
3361
+ delete *MutableRaw<Message*>(message, field);
3362
+ break;
3363
+ default:
3364
+ break;
3365
+ }
3366
+ }
3367
+
3368
+ *MutableOneofCase(message, oneof_descriptor) = 0;
3369
+ }
3370
+ }
3371
+
3372
+ #define HANDLE_TYPE(TYPE, CPPTYPE, CTYPE) \
3373
+ template <> \
3374
+ const RepeatedField<TYPE>& Reflection::GetRepeatedFieldInternal<TYPE>( \
3375
+ const Message& message, const FieldDescriptor* field, \
3376
+ GetRepeatedFieldIntent intent) const { \
3377
+ return *static_cast<const RepeatedField<TYPE>*>( \
3378
+ GetRawRepeatedField(message, field, CPPTYPE, CTYPE, nullptr, intent)); \
3379
+ } \
3380
+ \
3381
+ template <> \
3382
+ RepeatedField<TYPE>* Reflection::MutableRepeatedFieldInternal<TYPE>( \
3383
+ Message * message, const FieldDescriptor* field, \
3384
+ GetRepeatedFieldIntent intent) const { \
3385
+ if (!field->is_extension()) { \
3386
+ SetHasBit(message, field); \
3387
+ } \
3388
+ return static_cast<RepeatedField<TYPE>*>(MutableRawRepeatedField( \
3389
+ message, field, CPPTYPE, CTYPE, nullptr, intent)); \
3390
+ }
3391
+
3392
+ HANDLE_TYPE(int32_t, FieldDescriptor::CPPTYPE_INT32, -1);
3393
+ HANDLE_TYPE(int64_t, FieldDescriptor::CPPTYPE_INT64, -1);
3394
+ HANDLE_TYPE(uint32_t, FieldDescriptor::CPPTYPE_UINT32, -1);
3395
+ HANDLE_TYPE(uint64_t, FieldDescriptor::CPPTYPE_UINT64, -1);
3396
+ HANDLE_TYPE(float, FieldDescriptor::CPPTYPE_FLOAT, -1);
3397
+ HANDLE_TYPE(double, FieldDescriptor::CPPTYPE_DOUBLE, -1);
3398
+ HANDLE_TYPE(bool, FieldDescriptor::CPPTYPE_BOOL, -1);
3399
+
3400
+
3401
+ #undef HANDLE_TYPE
3402
+
3403
+ const void* Reflection::GetRawRepeatedString(
3404
+ const Message& message, const FieldDescriptor* field, bool is_string,
3405
+ GetRepeatedFieldIntent intent) const {
3406
+ (void)is_string; // Parameter is used by Google-internal code.
3407
+ return GetRawRepeatedField(message, field, FieldDescriptor::CPPTYPE_STRING,
3408
+ FieldOptions::STRING, nullptr, intent);
3409
+ }
3410
+
3411
+ void* Reflection::MutableRawRepeatedString(
3412
+ Message* message, const FieldDescriptor* field, bool is_string,
3413
+ GetRepeatedFieldIntent intent) const {
3414
+ (void)is_string; // Parameter is used by Google-internal code.
3415
+ return MutableRawRepeatedField(message, field,
3416
+ FieldDescriptor::CPPTYPE_STRING,
3417
+ FieldOptions::STRING, nullptr, intent);
3418
+ }
3419
+
3420
+ // Template implementations of basic accessors. Inline because each
3421
+ // template instance is only called from one location. These are
3422
+ // used for all types except messages.
3423
+ template <typename Type>
3424
+ const Type& Reflection::GetField(const Message& message,
3425
+ const FieldDescriptor* field) const {
3426
+ return GetRaw<Type>(message, field);
3427
+ }
3428
+
3429
+ template <typename Type>
3430
+ void Reflection::SetField(Message* message, const FieldDescriptor* field,
3431
+ const Type& value) const {
3432
+ bool real_oneof = schema_.InRealOneof(field);
3433
+ if (real_oneof && !HasOneofField(*message, field)) {
3434
+ ClearOneof(message, field->containing_oneof());
3435
+ }
3436
+ *MutableRaw<Type>(message, field) = value;
3437
+ real_oneof ? SetOneofCase(message, field) : SetHasBit(message, field);
3438
+ }
3439
+
3440
+ template <typename Type>
3441
+ Type* Reflection::MutableField(Message* message,
3442
+ const FieldDescriptor* field) const {
3443
+ schema_.InRealOneof(field) ? SetOneofCase(message, field)
3444
+ : SetHasBit(message, field);
3445
+ return MutableRaw<Type>(message, field);
3446
+ }
3447
+
3448
+ template <typename Type>
3449
+ const Type& Reflection::GetRepeatedField(const Message& message,
3450
+ const FieldDescriptor* field,
3451
+ int index) const {
3452
+ return GetRaw<RepeatedField<Type>>(message, field).Get(index);
3453
+ }
3454
+
3455
+ template <typename Type>
3456
+ const Type& Reflection::GetRepeatedPtrField(const Message& message,
3457
+ const FieldDescriptor* field,
3458
+ int index) const {
3459
+ return GetRaw<RepeatedPtrField<Type>>(message, field).Get(index);
3460
+ }
3461
+
3462
+ template <typename Type>
3463
+ void Reflection::SetRepeatedField(Message* message,
3464
+ const FieldDescriptor* field, int index,
3465
+ Type value) const {
3466
+ MutableRaw<RepeatedField<Type>>(message, field)->Set(index, value);
3467
+ }
3468
+
3469
+ template <typename Type>
3470
+ Type* Reflection::MutableRepeatedField(Message* message,
3471
+ const FieldDescriptor* field,
3472
+ int index) const {
3473
+ RepeatedPtrField<Type>* repeated =
3474
+ MutableRaw<RepeatedPtrField<Type>>(message, field);
3475
+ return repeated->Mutable(index);
3476
+ }
3477
+
3478
+ template <typename Type>
3479
+ void Reflection::AddField(Message* message, const FieldDescriptor* field,
3480
+ const Type& value) const {
3481
+ MutableRaw<RepeatedField<Type>>(message, field)
3482
+ ->AddWithArena(message->GetArena(), value);
3483
+ SetHasBit(message, field);
3484
+ }
3485
+
3486
+ template <typename Type>
3487
+ Type* Reflection::AddField(Message* message,
3488
+ const FieldDescriptor* field) const {
3489
+ RepeatedPtrField<Type>* repeated =
3490
+ MutableRaw<RepeatedPtrField<Type>>(message, field);
3491
+ SetHasBit(message, field);
3492
+ return repeated->AddWithArena(message->GetArena());
3493
+ }
3494
+
3495
+ MessageFactory* Reflection::GetMessageFactory() const {
3496
+ return message_factory_;
3497
+ }
3498
+
3499
+ const void* Reflection::RepeatedFieldData(
3500
+ const Message& message, const FieldDescriptor* field,
3501
+ FieldDescriptor::CppType cpp_type, const Descriptor* message_type) const {
3502
+ ABSL_CHECK(field->is_repeated());
3503
+ ABSL_CHECK(field->cpp_type() == cpp_type ||
3504
+ (field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM &&
3505
+ cpp_type == FieldDescriptor::CPPTYPE_INT32))
3506
+ << "The type parameter T in RepeatedFieldRef<T> API doesn't match "
3507
+ << "the actual field type (for enums T should be the generated enum "
3508
+ << "type or int32_t).";
3509
+ if (message_type != nullptr) {
3510
+ ABSL_CHECK_EQ(message_type, field->message_type());
3511
+ }
3512
+ if (field->is_extension()) {
3513
+ return GetExtensionSet(message).GetRawRepeatedField(
3514
+ field->number(), internal::DefaultRawPtr());
3515
+ } else {
3516
+ return &GetRaw<char>(message, field);
3517
+ }
3518
+ }
3519
+
3520
+ void* Reflection::RepeatedFieldData(Message* message,
3521
+ const FieldDescriptor* field,
3522
+ FieldDescriptor::CppType cpp_type,
3523
+ const Descriptor* message_type) const {
3524
+ ABSL_CHECK(field->is_repeated());
3525
+ ABSL_CHECK(field->cpp_type() == cpp_type ||
3526
+ (field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM &&
3527
+ cpp_type == FieldDescriptor::CPPTYPE_INT32))
3528
+ << "The type parameter T in RepeatedFieldRef<T> API doesn't match "
3529
+ << "the actual field type (for enums T should be the generated enum "
3530
+ << "type or int32_t).";
3531
+ if (message_type != nullptr) {
3532
+ ABSL_CHECK_EQ(message_type, field->message_type());
3533
+ }
3534
+ if (field->is_extension()) {
3535
+ return MutableExtensionSet(message)->MutableRawRepeatedField(
3536
+ message->GetArena(), field->number(), field->type(), field->is_packed(),
3537
+ field);
3538
+ } else {
3539
+ return MutableRaw<char>(message, field);
3540
+ }
3541
+ }
3542
+
3543
+ MapFieldBase* Reflection::MutableMapData(Message* message,
3544
+ const FieldDescriptor* field) const {
3545
+ USAGE_CHECK(IsMapFieldInApi(field), GetMapData, "Field is not a map field.");
3546
+ SetHasBit(message, field);
3547
+ auto* map = MutableRaw<MapFieldBase>(message, field);
3548
+ map->MutableAccess();
3549
+ return map;
3550
+ }
3551
+
3552
+ const MapFieldBase* Reflection::GetMapData(const Message& message,
3553
+ const FieldDescriptor* field) const {
3554
+ USAGE_CHECK(IsMapFieldInApi(field), GetMapData, "Field is not a map field.");
3555
+ const auto* map = &(GetRaw<MapFieldBase>(message, field));
3556
+ map->ConstAccess();
3557
+ return map;
3558
+ }
3559
+
3560
+ template <typename T>
3561
+ static uint32_t AlignTo(uint32_t v) {
3562
+ return (v + alignof(T) - 1) & ~(alignof(T) - 1);
3563
+ }
3564
+
3565
+ static internal::TailCallParseFunc GetFastParseFunction(
3566
+ internal::TcParseFunction func) {
3567
+ #define PROTOBUF_TC_PARSE_FUNCTION_X(value) internal::TcParser::value,
3568
+ static constexpr internal::TailCallParseFunc kFuncs[] = {
3569
+ {}, PROTOBUF_TC_PARSE_FUNCTION_LIST};
3570
+ #undef PROTOBUF_TC_PARSE_FUNCTION_X
3571
+ const int index = static_cast<int>(func);
3572
+ if (index < 0 || index >= std::end(kFuncs) - std::begin(kFuncs) ||
3573
+ kFuncs[index] == nullptr) {
3574
+ ABSL_DLOG(FATAL) << "Failed to find function: " << static_cast<int>(func);
3575
+ // Let's not crash in opt, just in case.
3576
+ // MiniParse is always a valid parser.
3577
+ return &internal::TcParser::MiniParse;
3578
+ }
3579
+ return kFuncs[index];
3580
+ }
3581
+
3582
+ void Reflection::PopulateTcParseFastEntries(
3583
+ const internal::TailCallTableInfo& table_info,
3584
+ TcParseTableBase::FastFieldEntry* fast_entries) const {
3585
+ for (const auto& fast_field : table_info.fast_path_fields) {
3586
+ if (auto* nonfield = fast_field.AsNonField()) {
3587
+ // No field, but still a special entry.
3588
+ *fast_entries++ = {GetFastParseFunction(nonfield->func),
3589
+ {nonfield->coded_tag, nonfield->nonfield_info}};
3590
+ } else if (auto* as_field = fast_field.AsField()) {
3591
+ const uint32_t field_offset = schema_.GetFieldOffset(as_field->field);
3592
+ if (static_cast<uint16_t>(field_offset) == field_offset) {
3593
+ *fast_entries++ = {
3594
+ GetFastParseFunction(as_field->func),
3595
+ {as_field->coded_tag, as_field->hasbit_idx, as_field->aux_idx,
3596
+ static_cast<uint16_t>(field_offset)}};
3597
+ } else {
3598
+ // The offset is too large, so just ignore the fast field.
3599
+ *fast_entries++ = {internal::TcParser::MiniParse, {}};
3600
+ }
3601
+ } else {
3602
+ ABSL_DCHECK(fast_field.is_empty());
3603
+ // No fast entry here. Use mini parser.
3604
+ *fast_entries++ = {internal::TcParser::MiniParse, {}};
3605
+ }
3606
+ }
3607
+ }
3608
+
3609
+ static void PopulateTcParseLookupTable(
3610
+ const internal::TailCallTableInfo& table_info, uint16_t* lookup_table) {
3611
+ for (const auto& entry_block : table_info.num_to_entry_table.blocks) {
3612
+ *lookup_table++ = entry_block.first_fnum & 0xFFFF;
3613
+ *lookup_table++ = entry_block.first_fnum >> 16;
3614
+ *lookup_table++ = entry_block.entries.size();
3615
+ for (auto se16 : entry_block.entries) {
3616
+ *lookup_table++ = se16.skipmap;
3617
+ *lookup_table++ = se16.field_entry_offset;
3618
+ }
3619
+ }
3620
+ *lookup_table++ = 0xFFFF;
3621
+ *lookup_table++ = 0xFFFF;
3622
+ }
3623
+
3624
+ static std::vector<uint32_t> MakeEnumValidatorData(const EnumDescriptor* desc) {
3625
+ std::vector<int> numbers;
3626
+ numbers.reserve(desc->value_count());
3627
+ for (int i = 0; i < desc->value_count(); ++i) {
3628
+ numbers.push_back(desc->value(i)->number());
3629
+ }
3630
+
3631
+ absl::c_sort(numbers);
3632
+ numbers.erase(std::unique(numbers.begin(), numbers.end()), numbers.end());
3633
+ return internal::GenerateEnumData(numbers);
3634
+ }
3635
+
3636
+ void Reflection::PopulateTcParseEntries(
3637
+ internal::TailCallTableInfo& table_info,
3638
+ TcParseTableBase::FieldEntry* entries) const {
3639
+ for (const auto& entry : table_info.field_entries) {
3640
+ const FieldDescriptor* field = entry.field;
3641
+ const OneofDescriptor* oneof = field->real_containing_oneof();
3642
+ entries->offset = schema_.GetFieldOffset(field);
3643
+ if (oneof != nullptr) {
3644
+ entries->has_idx = schema_.oneof_case_offset_ + 4 * oneof->index();
3645
+ } else if (schema_.HasHasbits()) {
3646
+ entries->has_idx =
3647
+ entry.hasbit_idx >= 0
3648
+ ? static_cast<int>(8 * schema_.HasBitsOffset() + entry.hasbit_idx)
3649
+ : kNoHasbit;
3650
+ } else {
3651
+ entries->has_idx = 0;
3652
+ }
3653
+ entries->aux_idx = entry.aux_idx;
3654
+ entries->type_card = entry.type_card;
3655
+ ++entries;
3656
+ }
3657
+ }
3658
+
3659
+ void Reflection::PopulateTcParseFieldAux(
3660
+ const internal::TailCallTableInfo& table_info,
3661
+ TcParseTableBase::FieldAux* field_aux) const {
3662
+ for (const auto& aux_entry : table_info.aux_entries) {
3663
+ switch (aux_entry.type) {
3664
+ case internal::TailCallTableInfo::kNothing:
3665
+ *field_aux++ = {};
3666
+ break;
3667
+ case internal::TailCallTableInfo::kSplitOffset:
3668
+ field_aux++->offset = schema_.SplitOffset();
3669
+ break;
3670
+ case internal::TailCallTableInfo::kSplitSizeof:
3671
+ field_aux++->offset = schema_.SizeofSplit();
3672
+ break;
3673
+ case internal::TailCallTableInfo::kSubTable:
3674
+ case internal::TailCallTableInfo::kSubMessageGlobalsWeak:
3675
+ case internal::TailCallTableInfo::kMessageVerifyFunc:
3676
+ case internal::TailCallTableInfo::kSelfVerifyFunc:
3677
+ ABSL_LOG(FATAL) << "Not supported";
3678
+ break;
3679
+ case internal::TailCallTableInfo::kMapAuxInfo:
3680
+ // TODO: Fix this now that dynamic uses normal map ABIs.
3681
+ // Default constructed info, which causes MpMap to call the fallback.
3682
+ // DynamicMessage uses DynamicMapField, which uses variant keys and
3683
+ // values. TcParser does not support them yet, so mark the field as
3684
+ // unsupported to fallback to reflection.
3685
+ field_aux++->map_info = internal::MapAuxInfo{};
3686
+ break;
3687
+ case internal::TailCallTableInfo::kSubMessageGlobals:
3688
+ field_aux++->message_globals_p =
3689
+ MessageGlobalsBase::FromDefaultInstance(
3690
+ GetDefaultMessageInstance(aux_entry.field));
3691
+ break;
3692
+ case internal::TailCallTableInfo::kEnumRange:
3693
+ field_aux++->enum_range = {aux_entry.enum_range.first,
3694
+ aux_entry.enum_range.last};
3695
+ break;
3696
+ case internal::TailCallTableInfo::kEnumValidator:
3697
+ field_aux++->enum_data =
3698
+ DescriptorPool::MemoizeProjection(
3699
+ aux_entry.field->enum_type(),
3700
+ [](auto* e) { return MakeEnumValidatorData(e); })
3701
+ .data();
3702
+ break;
3703
+ case internal::TailCallTableInfo::kNumericOffset:
3704
+ field_aux++->offset = aux_entry.offset;
3705
+ break;
3706
+ }
3707
+ }
3708
+ }
3709
+
3710
+
3711
+ const internal::TcParseTableBase* Reflection::CreateTcParseTable() const {
3712
+ using TcParseTableBase = internal::TcParseTableBase;
3713
+
3714
+ std::vector<internal::TailCallTableInfo::FieldOptions> fields;
3715
+ fields.reserve(descriptor_->field_count());
3716
+ for (int i = 0; i < descriptor_->field_count(); ++i) {
3717
+ auto* field = descriptor_->field(i);
3718
+ const bool is_inlined = IsInlined(field);
3719
+ fields.push_back({
3720
+ field, //
3721
+ static_cast<int>(schema_.HasBitIndex(field)),
3722
+ 1.f, // All fields are assumed present.
3723
+ GetLazyStyle(field),
3724
+ is_inlined,
3725
+ // Only LITE can be implicitly weak.
3726
+ /* is_implicitly_weak */ false,
3727
+ // We could change this to use direct table.
3728
+ // Might be easier to do when all messages support TDP.
3729
+ /* use_direct_tcparser_table */ false,
3730
+ schema_.IsSplit(field),
3731
+ field->cpp_type() == FieldDescriptor::CPPTYPE_STRING &&
3732
+ IsMicroString(field),
3733
+ });
3734
+ }
3735
+ std::sort(fields.begin(), fields.end(), [](const auto& a, const auto& b) {
3736
+ return a.field->number() < b.field->number();
3737
+ });
3738
+
3739
+ internal::TailCallTableInfo table_info(descriptor_,
3740
+ {
3741
+ /* is_lite */ false,
3742
+ /* uses_codegen */ false,
3743
+ },
3744
+ fields);
3745
+
3746
+ const size_t fast_entries_count = table_info.fast_path_fields.size();
3747
+ ABSL_CHECK_EQ(static_cast<int>(fast_entries_count),
3748
+ 1 << table_info.table_size_log2);
3749
+ const uint16_t lookup_table_offset = AlignTo<uint16_t>(
3750
+ sizeof(TcParseTableBase) +
3751
+ fast_entries_count * sizeof(TcParseTableBase::FastFieldEntry));
3752
+ const uint32_t field_entry_offset = AlignTo<TcParseTableBase::FieldEntry>(
3753
+ lookup_table_offset +
3754
+ sizeof(uint16_t) * table_info.num_to_entry_table.size16());
3755
+ const uint32_t aux_offset = AlignTo<TcParseTableBase::FieldAux>(
3756
+ field_entry_offset +
3757
+ sizeof(TcParseTableBase::FieldEntry) * fields.size());
3758
+
3759
+ int byte_size =
3760
+ aux_offset +
3761
+ sizeof(TcParseTableBase::FieldAux) * table_info.aux_entries.size() +
3762
+ sizeof(char) * table_info.field_name_data.size();
3763
+
3764
+ void* p = internal::Allocate(byte_size);
3765
+ auto* res = ::new (p) TcParseTableBase{
3766
+ static_cast<uint16_t>(
3767
+ schema_.HasHasbits()
3768
+ ? schema_.HasBitsOffset()
3769
+ // Just put something safe here. _cached_size_ is fine.
3770
+ : schema_.default_instance_->GetClassData()->cached_size_offset),
3771
+ schema_.HasExtensionSet()
3772
+ ? static_cast<uint16_t>(schema_.GetExtensionSetOffset())
3773
+ : uint16_t{0},
3774
+ static_cast<uint32_t>(fields.empty() ? 0 : fields.back().field->number()),
3775
+ static_cast<uint8_t>((fast_entries_count - 1) << 3),
3776
+ lookup_table_offset,
3777
+ table_info.num_to_entry_table.skipmap32,
3778
+ field_entry_offset,
3779
+ static_cast<uint16_t>(fields.size()),
3780
+ static_cast<uint16_t>(table_info.aux_entries.size()),
3781
+ aux_offset,
3782
+ schema_.default_instance_->GetClassData(),
3783
+ nullptr,
3784
+ GetFastParseFunction(table_info.fallback_function)
3785
+ #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
3786
+ ,
3787
+ nullptr
3788
+ #endif // PROTOBUF_PREFETCH_PARSE_TABLE
3789
+ };
3790
+ #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
3791
+ // We'll prefetch `to_prefetch->to_prefetch` unconditionally to avoid
3792
+ // branches. Here we don't know which field is the hottest, so set the pointer
3793
+ // to itself to avoid nullptr.
3794
+ res->to_prefetch = res;
3795
+ #endif // PROTOBUF_PREFETCH_PARSE_TABLE
3796
+
3797
+ // Now copy the rest of the payloads
3798
+ PopulateTcParseFastEntries(table_info, res->fast_entry(0));
3799
+
3800
+ PopulateTcParseLookupTable(table_info, res->field_lookup_begin());
3801
+
3802
+ PopulateTcParseEntries(table_info, res->field_entries_begin());
3803
+
3804
+ PopulateTcParseFieldAux(table_info, res->field_aux(0u));
3805
+
3806
+ // Copy the name data.
3807
+ if (!table_info.field_name_data.empty()) {
3808
+ memcpy(res->name_data(), table_info.field_name_data.data(),
3809
+ table_info.field_name_data.size());
3810
+ }
3811
+ // Validation to make sure we used all the bytes correctly.
3812
+ ABSL_CHECK_EQ(res->name_data() + table_info.field_name_data.size() -
3813
+ reinterpret_cast<char*>(res),
3814
+ byte_size)
3815
+ << "message = " << descriptor_->full_name();
3816
+
3817
+ return res;
3818
+ }
3819
+
3820
+ namespace {
3821
+
3822
+ // Helper function to transform migration schema into reflection schema.
3823
+ ReflectionSchema MigrationToReflectionSchema(
3824
+ const MessageGlobalsBase* const* message_globals, const uint32_t* offsets,
3825
+ MigrationSchema migration_schema) {
3826
+ ReflectionSchema result;
3827
+ result.default_instance_ =
3828
+ MessageGlobalsBase::ToDefaultInstance<Message>(*message_globals);
3829
+ int index = migration_schema.offsets_index;
3830
+
3831
+ // First values are offsets to the special fields, but they are optional.
3832
+ // The first value is a bitmap marking which fields are present.
3833
+ // The order of the fields must match MessageGenerator::GenerateOffsets
3834
+ //
3835
+ // To add new fields, we add them at the end and since they are optional the
3836
+ // bootstrap files will automatically look as if those fields are not present.
3837
+ const uint32_t bits = offsets[index++];
3838
+
3839
+ int bit = 0;
3840
+ const auto next = [&] {
3841
+ return (bits & (1 << bit++)) ? offsets[index++] : ~uint32_t{};
3842
+ };
3843
+ const auto next_pointer = [&]() -> const uint32_t* {
3844
+ const uint32_t n = next();
3845
+ if (n == ~uint32_t{}) {
3846
+ return nullptr;
3847
+ }
3848
+ return offsets + migration_schema.offsets_index + n;
3849
+ };
3850
+ result.has_bits_offset_ = next();
3851
+ result.extensions_offset_ = next();
3852
+ result.oneof_case_offset_ = next();
3853
+ result.weak_field_map_offset_ = next();
3854
+ // Old result.inlined_string_donated_offset_
3855
+ ABSL_CHECK_EQ(next(), ~uint32_t{});
3856
+ result.split_offset_ = next();
3857
+ result.sizeof_split_ = next();
3858
+
3859
+ result.has_bit_indices_ = next_pointer();
3860
+ // Old result.inlined_string_indices_
3861
+ ABSL_CHECK_EQ(next_pointer(), nullptr);
3862
+
3863
+ result.offsets_ = offsets + index;
3864
+ result.object_size_ = migration_schema.object_size;
3865
+
3866
+ return result;
3867
+ }
3868
+
3869
+ } // namespace
3870
+
3871
+ class AssignDescriptorsHelper {
3872
+ public:
3873
+ AssignDescriptorsHelper(MessageFactory* factory,
3874
+ const EnumDescriptor** file_level_enum_descriptors,
3875
+ const MigrationSchema* schemas,
3876
+ const MessageGlobalsBase* const* message_globals_data,
3877
+ const uint32_t* offsets)
3878
+ : factory_(factory),
3879
+ file_level_enum_descriptors_(file_level_enum_descriptors),
3880
+ schemas_(schemas),
3881
+ message_globals_data_(message_globals_data),
3882
+ offsets_(offsets) {}
3883
+
3884
+ void AssignMessageDescriptor(const Descriptor* descriptor) {
3885
+ for (int i = 0; i < descriptor->nested_type_count(); i++) {
3886
+ AssignMessageDescriptor(descriptor->nested_type(i));
3887
+ }
3888
+
3889
+ // If there is no default instance we only want to initialize the descriptor
3890
+ // without updating the reflection.
3891
+ if (message_globals_data_[0] != nullptr) {
3892
+ auto* default_instance =
3893
+ MessageGlobalsBase::ToDefaultInstance(message_globals_data_[0]);
3894
+ auto& class_data = default_instance->GetClassData()->full();
3895
+ // If there is no descriptor_table in the class data, then it is not
3896
+ // interested in receiving reflection information either.
3897
+ if (class_data.descriptor_table() != nullptr) {
3898
+ class_data.set_descriptor(descriptor);
3899
+
3900
+ class_data.set_reflection(OnShutdownDelete(new Reflection(
3901
+ descriptor,
3902
+ MigrationToReflectionSchema(message_globals_data_, offsets_,
3903
+ *schemas_),
3904
+ DescriptorPool::internal_generated_pool(), factory_)));
3905
+ }
3906
+ }
3907
+ for (int i = 0; i < descriptor->enum_type_count(); i++) {
3908
+ AssignEnumDescriptor(descriptor->enum_type(i));
3909
+ }
3910
+ schemas_++;
3911
+ message_globals_data_++;
3912
+ }
3913
+
3914
+ void AssignEnumDescriptor(const EnumDescriptor* descriptor) {
3915
+ *file_level_enum_descriptors_ = descriptor;
3916
+ file_level_enum_descriptors_++;
3917
+ }
3918
+
3919
+ private:
3920
+ MessageFactory* factory_;
3921
+ const EnumDescriptor** file_level_enum_descriptors_;
3922
+ const MigrationSchema* schemas_;
3923
+ const MessageGlobalsBase* const* message_globals_data_;
3924
+ const uint32_t* offsets_;
3925
+ };
3926
+
3927
+ namespace {
3928
+
3929
+ void AssignDescriptorsImpl(const DescriptorTable* table, bool eager) {
3930
+ // Ensure the file descriptor is added to the pool.
3931
+ {
3932
+ // This only happens once per proto file. So a global mutex to serialize
3933
+ // calls to AddDescriptors.
3934
+ static absl::Mutex mu{absl::kConstInit};
3935
+ mu.Lock();
3936
+ internal::AddDescriptors(table);
3937
+ mu.Unlock();
3938
+ }
3939
+ if (eager) {
3940
+ // Normally we do not want to eagerly build descriptors of our deps.
3941
+ // However if this proto is optimized for code size (ie using reflection)
3942
+ // and it has a message extending a custom option of a descriptor with that
3943
+ // message being optimized for code size as well. Building the descriptors
3944
+ // in this file requires parsing the serialized file descriptor, which now
3945
+ // requires parsing the message extension, which potentially requires
3946
+ // building the descriptor of the message extending one of the options.
3947
+ // However we are already updating descriptor pool under a lock. To prevent
3948
+ // this the compiler statically looks for this case and we just make sure we
3949
+ // first build the descriptors of all our dependencies, preventing the
3950
+ // deadlock.
3951
+ int num_deps = table->num_deps;
3952
+ for (int i = 0; i < num_deps; i++) {
3953
+ // In case of weak fields deps[i] could be null.
3954
+ if (table->deps[i]) {
3955
+ absl::call_once(*table->deps[i]->once, AssignDescriptorsImpl,
3956
+ table->deps[i],
3957
+ /*eager=*/true);
3958
+ }
3959
+ }
3960
+ }
3961
+
3962
+ // Fill the arrays with pointers to descriptors and reflection classes.
3963
+ const FileDescriptor* file =
3964
+ DescriptorPool::internal_generated_pool()->FindFileByName(
3965
+ table->filename);
3966
+ ABSL_CHECK(file != nullptr);
3967
+
3968
+ MessageFactory* factory = MessageFactory::generated_factory();
3969
+
3970
+ AssignDescriptorsHelper helper(factory, table->file_level_enum_descriptors,
3971
+ table->schemas, table->message_globals,
3972
+ table->offsets);
3973
+
3974
+ for (int i = 0; i < file->message_type_count(); i++) {
3975
+ helper.AssignMessageDescriptor(file->message_type(i));
3976
+ }
3977
+
3978
+ for (int i = 0; i < file->enum_type_count(); i++) {
3979
+ helper.AssignEnumDescriptor(file->enum_type(i));
3980
+ }
3981
+ if (file->options().cc_generic_services()) {
3982
+ for (int i = 0; i < file->service_count(); i++) {
3983
+ table->file_level_service_descriptors[i] = file->service(i);
3984
+ }
3985
+ }
3986
+ }
3987
+
3988
+ void MaybeInitializeLazyDescriptors(const DescriptorTable* table) {
3989
+ if (!IsLazilyInitializedFile(table->filename)) {
3990
+ // Ensure the generated pool has been lazily initialized.
3991
+ (void)DescriptorPool::generated_pool();
3992
+ }
3993
+ }
3994
+
3995
+ void AddDescriptorsImpl(const DescriptorTable* table) {
3996
+ // Reflection refers to the default fields so make sure they are initialized.
3997
+ internal::InitProtobufDefaults();
3998
+ internal::InitializeFileDescriptorDefaultInstances();
3999
+ internal::InitializeLazyExtensionSet();
4000
+
4001
+ // Ensure all dependent descriptors are registered to the generated descriptor
4002
+ // pool and message factory.
4003
+ int num_deps = table->num_deps;
4004
+ for (int i = 0; i < num_deps; i++) {
4005
+ // In case of weak fields deps[i] could be null.
4006
+ if (table->deps[i]) internal::AddDescriptors(table->deps[i]);
4007
+ }
4008
+
4009
+ // Register the descriptor of this file.
4010
+ DescriptorPool::InternalAddGeneratedFile(table->descriptor, table->size);
4011
+ MessageFactory::InternalRegisterGeneratedFile(table);
4012
+
4013
+ // Ensure that any lazily loaded static initializers from the generated pool
4014
+ // (e.g. from bootstrapped protos) are run before building any descriptors. We
4015
+ // have do it in reflection code like this, because we need to ensure that the
4016
+ // linker --gc-sections step can strip out the full runtime if it is unused.
4017
+ // If we try to avoid pre-main initialization (e.g. during DescriptorBuilder),
4018
+ // we hit data races and would need to add locks.
4019
+ [[maybe_unused]] static std::true_type lazy_register =
4020
+ (internal::ExtensionSet::RegisterMessageExtension(
4021
+ &FeatureSet::default_instance(), pb::cpp.number(),
4022
+ FieldDescriptor::TYPE_MESSAGE, false, false,
4023
+ &pb::CppFeatures::default_instance(),
4024
+ nullptr,
4025
+ internal::LazyAnnotation::kUndefined),
4026
+ std::true_type{});
4027
+ }
4028
+
4029
+ } // namespace
4030
+
4031
+ namespace internal {
4032
+
4033
+ void AddDescriptors(const DescriptorTable* table) {
4034
+ // AddDescriptors is not thread safe. Callers need to ensure calls are
4035
+ // properly serialized. This function is only called pre-main by global
4036
+ // descriptors and we can assume single threaded access or it's called
4037
+ // by AssignDescriptorImpl which uses a mutex to sequence calls.
4038
+ if (table->is_initialized) return;
4039
+ table->is_initialized = true;
4040
+ AddDescriptorsImpl(table);
4041
+ }
4042
+
4043
+ void AssignDescriptorsOnceInnerCall(const DescriptorTable* table) {
4044
+ MaybeInitializeLazyDescriptors(table);
4045
+ AssignDescriptorsImpl(table, table->is_eager);
4046
+ }
4047
+
4048
+ void AssignDescriptors(const DescriptorTable* table) {
4049
+ absl::call_once(*table->once, [=] { AssignDescriptorsOnceInnerCall(table); });
4050
+ }
4051
+
4052
+ AddDescriptorsRunner::AddDescriptorsRunner(const DescriptorTable* table) {
4053
+ AddDescriptors(table);
4054
+ }
4055
+
4056
+ void RegisterFileLevelMetadata(const DescriptorTable* table) {
4057
+ AssignDescriptors(table);
4058
+ auto* file = DescriptorPool::internal_generated_pool()->FindFileByName(
4059
+ table->filename);
4060
+ auto* const* globals = table->message_globals;
4061
+ internal::cpp::VisitDescriptorsInFileOrder(file, [&](auto* desc) {
4062
+ // Weak message globals may be null. Pass null default instance.
4063
+ MessageFactory::InternalRegisterGeneratedMessage(
4064
+ desc, *globals == nullptr
4065
+ ? nullptr
4066
+ : MessageGlobalsBase::ToDefaultInstance<Message>(*globals));
4067
+ ++globals;
4068
+ return std::false_type{};
4069
+ });
4070
+ }
4071
+
4072
+ void UnknownFieldSetSerializer(const uint8_t* base, uint32_t offset,
4073
+ uint32_t /*tag*/, uint32_t /*has_offset*/,
4074
+ io::CodedOutputStream* output) {
4075
+ const void* ptr = base + offset;
4076
+ const InternalMetadata* metadata = static_cast<const InternalMetadata*>(ptr);
4077
+ if (metadata->have_unknown_fields()) {
4078
+ // TODO: Remove this suppression.
4079
+ (void)metadata
4080
+ ->unknown_fields<UnknownFieldSet>(UnknownFieldSet::default_instance)
4081
+ .SerializeToCodedStream(output);
4082
+ }
4083
+ }
4084
+
4085
+ bool IsDescendant(const Message& root, const Message& message) {
4086
+ const Reflection* reflection = root.GetReflection();
4087
+ std::vector<const FieldDescriptor*> fields;
4088
+ reflection->ListFields(root, &fields);
4089
+
4090
+ for (const auto* field : fields) {
4091
+ // Skip non-message fields.
4092
+ if (field->cpp_type() != FieldDescriptor::CPPTYPE_MESSAGE) continue;
4093
+
4094
+ // Optional messages.
4095
+ if (!field->is_repeated()) {
4096
+ const Message& sub_message = reflection->GetMessage(root, field);
4097
+ if (&sub_message == &message || IsDescendant(sub_message, message)) {
4098
+ return true;
4099
+ }
4100
+ continue;
4101
+ }
4102
+
4103
+ if (IsMapFieldInApi(field)) {
4104
+ // Map field: if accessed as repeated fields, messages are *copied* and
4105
+ // matching pointer won't work. Must directly access map.
4106
+ constexpr int kValIdx = 1;
4107
+ const FieldDescriptor* val_field = field->message_type()->field(kValIdx);
4108
+ // Skip map fields whose value type is not message.
4109
+ if (val_field->cpp_type() != FieldDescriptor::CPPTYPE_MESSAGE) continue;
4110
+
4111
+ const auto& map = reflection->GetRaw<MapFieldBase>(root, field);
4112
+ if (map.IsMapValid()) {
4113
+ const auto end = reflection->ConstMapEnd(&root, field);
4114
+ for (auto iter = reflection->ConstMapBegin(&root, field); iter != end;
4115
+ ++iter) {
4116
+ const Message& sub_message = iter.GetValueRef().GetMessageValue();
4117
+ if (&sub_message == &message || IsDescendant(sub_message, message)) {
4118
+ return true;
4119
+ }
4120
+ }
4121
+
4122
+ continue;
4123
+ }
4124
+
4125
+ // If the map is in state STATE_MODIFIED_REPEATED, then accessing it as a
4126
+ // repeated message field will not require syncing.
4127
+ }
4128
+
4129
+ // Repeated messages.
4130
+ int count = reflection->FieldSize(root, field);
4131
+ for (int i = 0; i < count; i++) {
4132
+ const Message& sub_message =
4133
+ reflection->GetRepeatedMessage(root, field, i);
4134
+ if (&sub_message == &message || IsDescendant(sub_message, message)) {
4135
+ return true;
4136
+ }
4137
+ }
4138
+ }
4139
+
4140
+ return false;
4141
+ }
4142
+
4143
+ bool SplitFieldHasExtraIndirection(const FieldDescriptor* field) {
4144
+ return field->is_repeated();
4145
+ }
4146
+
4147
+ #if defined(PROTOBUF_DESCRIPTOR_WEAK_MESSAGES_ALLOWED)
4148
+ const Message* GetPrototypeForWeakDescriptor(const DescriptorTable* table,
4149
+ int index, bool force_build) {
4150
+ // First, make sure we inject the surviving default instances.
4151
+ InitProtobufDefaults();
4152
+
4153
+ // Now check if the table has it. If so, return it.
4154
+ if (const auto* globals = table->message_globals[index]) {
4155
+ return MessageGlobalsBase::ToDefaultInstance<Message>(globals);
4156
+ }
4157
+
4158
+ if (!force_build) {
4159
+ return nullptr;
4160
+ }
4161
+
4162
+ // Fallback to dynamic messages.
4163
+ // Register the dep and generate the prototype via the generated pool.
4164
+ AssignDescriptors(table);
4165
+
4166
+ const FileDescriptor* file =
4167
+ DescriptorPool::internal_generated_pool()->FindFileByName(
4168
+ table->filename);
4169
+
4170
+ const Descriptor* descriptor = internal::cpp::VisitDescriptorsInFileOrder(
4171
+ file, [&](auto* desc) -> const Descriptor* {
4172
+ if (index == 0) return desc;
4173
+ --index;
4174
+ return nullptr;
4175
+ });
4176
+
4177
+ return MessageFactory::generated_factory()->GetPrototype(descriptor);
4178
+ }
4179
+ #endif // PROTOBUF_DESCRIPTOR_WEAK_MESSAGES_ALLOWED
4180
+
4181
+ } // namespace internal
4182
+ } // namespace protobuf
4183
+ } // namespace google
4184
+
4185
+ #include "google/protobuf/port_undef.inc"