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,2667 @@
1
+ /*
2
+ * Copyright 2021 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #include "eval/compiler/flat_expr_builder.h"
18
+
19
+ #include <algorithm>
20
+ #include <cstddef>
21
+ #include <cstdint>
22
+ #include <deque>
23
+ #include <iterator>
24
+ #include <limits>
25
+ #include <memory>
26
+ #include <optional>
27
+ #include <stack>
28
+ #include <string>
29
+ #include <type_traits>
30
+ #include <utility>
31
+ #include <vector>
32
+
33
+ #include "absl/algorithm/container.h"
34
+ #include "absl/container/flat_hash_map.h"
35
+ #include "absl/container/flat_hash_set.h"
36
+ #include "absl/container/node_hash_map.h"
37
+ #include "absl/functional/any_invocable.h"
38
+ #include "absl/log/absl_check.h"
39
+ #include "absl/log/check.h"
40
+ #include "absl/status/status.h"
41
+ #include "absl/status/statusor.h"
42
+ #include "absl/strings/match.h"
43
+ #include "absl/strings/numbers.h"
44
+ #include "absl/strings/str_cat.h"
45
+ #include "absl/strings/string_view.h"
46
+ #include "absl/strings/strip.h"
47
+ #include "absl/types/span.h"
48
+ #include "absl/types/variant.h"
49
+ #include "base/ast.h"
50
+ #include "base/builtins.h"
51
+ #include "base/type_provider.h"
52
+ #include "common/allocator.h"
53
+ #include "common/ast.h"
54
+ #include "common/ast_traverse.h"
55
+ #include "common/ast_visitor.h"
56
+ #include "common/constant.h"
57
+ #include "common/expr.h"
58
+ #include "common/kind.h"
59
+ #include "common/type.h"
60
+ #include "common/type_spec_resolver.h"
61
+ #include "common/value.h"
62
+ #include "eval/compiler/check_ast_extensions.h"
63
+ #include "eval/compiler/flat_expr_builder_extensions.h"
64
+ #include "eval/compiler/resolver.h"
65
+ #include "eval/eval/comprehension_step.h"
66
+ #include "eval/eval/const_value_step.h"
67
+ #include "eval/eval/container_access_step.h"
68
+ #include "eval/eval/create_list_step.h"
69
+ #include "eval/eval/create_map_step.h"
70
+ #include "eval/eval/create_struct_step.h"
71
+ #include "eval/eval/direct_expression_step.h"
72
+ #include "eval/eval/equality_steps.h"
73
+ #include "eval/eval/evaluator_core.h"
74
+ #include "eval/eval/function_step.h"
75
+ #include "eval/eval/ident_step.h"
76
+ #include "eval/eval/jump_step.h"
77
+ #include "eval/eval/lazy_init_step.h"
78
+ #include "eval/eval/logic_step.h"
79
+ #include "eval/eval/optional_or_step.h"
80
+ #include "eval/eval/select_step.h"
81
+ #include "eval/eval/shadowable_value_step.h"
82
+ #include "eval/eval/ternary_step.h"
83
+ #include "eval/eval/trace_step.h"
84
+ #include "internal/status_macros.h"
85
+ #include "runtime/internal/convert_constant.h"
86
+ #include "runtime/internal/issue_collector.h"
87
+ #include "runtime/runtime_issue.h"
88
+ #include "runtime/runtime_options.h"
89
+ #include "runtime/type_registry.h"
90
+ #include "google/protobuf/arena.h"
91
+
92
+ namespace google::api::expr::runtime {
93
+
94
+ namespace {
95
+
96
+ using ::cel::Ast;
97
+ using ::cel::AstTraverse;
98
+ using ::cel::RuntimeIssue;
99
+ using ::cel::StringValue;
100
+ using ::cel::Value;
101
+ using ::cel::runtime_internal::ConvertConstant;
102
+ using ::cel::runtime_internal::GetLegacyRuntimeTypeProvider;
103
+ using ::cel::runtime_internal::GetRuntimeTypeProvider;
104
+ using ::cel::runtime_internal::IssueCollector;
105
+
106
+ constexpr absl::string_view kOptionalOrFn = "or";
107
+ constexpr absl::string_view kOptionalOrValueFn = "orValue";
108
+ constexpr absl::string_view kBlock = "cel.@block";
109
+
110
+ // Forward declare to resolve circular dependency for short_circuiting visitors.
111
+ class FlatExprVisitor;
112
+
113
+ // Error code for failed recursive program building. Generally indicates an
114
+ // optimization doesn't support recursive programs.
115
+ absl::Status FailedRecursivePlanning() {
116
+ return absl::InternalError(
117
+ "failed to build recursive program. check for unsupported optimizations");
118
+ }
119
+
120
+ // Helper for bookkeeping variables mapped to indexes.
121
+ class IndexManager {
122
+ public:
123
+ IndexManager() : next_free_slot_(0), max_slot_count_(0) {}
124
+
125
+ size_t ReserveSlots(size_t n) {
126
+ size_t result = next_free_slot_;
127
+ next_free_slot_ += n;
128
+ if (next_free_slot_ > max_slot_count_) {
129
+ max_slot_count_ = next_free_slot_;
130
+ }
131
+ return result;
132
+ }
133
+
134
+ size_t ReleaseSlots(size_t n) {
135
+ next_free_slot_ -= n;
136
+ return next_free_slot_;
137
+ }
138
+
139
+ size_t max_slot_count() const { return max_slot_count_; }
140
+
141
+ private:
142
+ size_t next_free_slot_;
143
+ size_t max_slot_count_;
144
+ };
145
+
146
+ // Helper for computing jump offsets.
147
+ //
148
+ // Jumps should be self-contained to a single expression node -- jumping
149
+ // outside that range is a bug.
150
+ struct ProgramStepIndex {
151
+ int index;
152
+ ProgramBuilder::Subexpression* subexpression;
153
+ };
154
+
155
+ // A convenience wrapper for offset-calculating logic.
156
+ class Jump {
157
+ public:
158
+ // Default constructor for empty jump.
159
+ //
160
+ // Users must check that jump is non-empty before calling member functions.
161
+ explicit Jump() : self_index_{-1, nullptr}, jump_step_(nullptr) {}
162
+ Jump(ProgramStepIndex self_index, JumpStepBase* jump_step)
163
+ : self_index_(self_index), jump_step_(jump_step) {}
164
+
165
+ static absl::StatusOr<int> CalculateOffset(ProgramStepIndex base,
166
+ ProgramStepIndex target) {
167
+ if (target.subexpression != base.subexpression) {
168
+ return absl::InternalError(
169
+ "Jump target must be contained in the parent"
170
+ "subexpression");
171
+ }
172
+
173
+ int offset = base.subexpression->CalculateOffset(base.index, target.index);
174
+ return offset;
175
+ }
176
+
177
+ absl::Status set_target(ProgramStepIndex target) {
178
+ CEL_ASSIGN_OR_RETURN(int offset, CalculateOffset(self_index_, target));
179
+
180
+ jump_step_->set_jump_offset(offset);
181
+ return absl::OkStatus();
182
+ }
183
+
184
+ bool exists() { return jump_step_ != nullptr; }
185
+
186
+ private:
187
+ ProgramStepIndex self_index_;
188
+ JumpStepBase* jump_step_;
189
+ };
190
+
191
+ class CondVisitor {
192
+ public:
193
+ virtual ~CondVisitor() = default;
194
+ virtual void PreVisit(const cel::Expr* expr) = 0;
195
+ virtual void PostVisitArg(int arg_num, const cel::Expr* expr) = 0;
196
+ virtual void PostVisit(const cel::Expr* expr) = 0;
197
+ virtual void PostVisitTarget(const cel::Expr* expr) {}
198
+ };
199
+
200
+ // Visitor managing the "&&" and "||" (boolean logic) operations.
201
+ // Implements short-circuiting if enabled.
202
+ //
203
+ // With short-circuiting enabled, generates a program like:
204
+ // +-------------+------------------------+-----------------------+
205
+ // | PC | Step | Stack |
206
+ // +-------------+------------------------+-----------------------+
207
+ // | i + 0 | <Arg1> | arg1 |
208
+ // | i + 1 | ConditionalJump i + 4 | arg1 |
209
+ // | i + 2 | <Arg2> | arg1, arg2 |
210
+ // | i + 3 | BooleanOperator | Op(arg1, arg2) |
211
+ // | i + 4 | <rest of program> | arg1 | Op(arg1, arg2) |
212
+ // +-------------+------------------------+------------------------+
213
+ class LogicalCondVisitor : public CondVisitor {
214
+ public:
215
+ explicit LogicalCondVisitor(FlatExprVisitor* visitor, bool is_or,
216
+ bool short_circuiting)
217
+ : visitor_(visitor), is_or_(is_or), short_circuiting_(short_circuiting) {}
218
+
219
+ void PreVisit(const cel::Expr* expr) override;
220
+ void PostVisitArg(int arg_num, const cel::Expr* expr) override;
221
+ void PostVisit(const cel::Expr* expr) override;
222
+
223
+ private:
224
+ FlatExprVisitor* visitor_;
225
+ const bool is_or_;
226
+ std::vector<Jump> jump_steps_;
227
+ bool short_circuiting_;
228
+ };
229
+
230
+ // Visitor managing optional "or" and "orValue" operations.
231
+ // Implements short-circuiting if enabled.
232
+ class OptionalOrCondVisitor : public CondVisitor {
233
+ public:
234
+ explicit OptionalOrCondVisitor(FlatExprVisitor* visitor, bool is_or_value,
235
+ bool short_circuiting)
236
+ : visitor_(visitor),
237
+ is_or_value_(is_or_value),
238
+ short_circuiting_(short_circuiting) {}
239
+
240
+ void PreVisit(const cel::Expr* expr) override;
241
+ void PostVisitArg(int arg_num, const cel::Expr* expr) override {}
242
+ void PostVisitTarget(const cel::Expr* expr) override;
243
+ void PostVisit(const cel::Expr* expr) override;
244
+
245
+ private:
246
+ FlatExprVisitor* visitor_;
247
+ const bool is_or_value_;
248
+ std::vector<Jump> jump_steps_;
249
+ bool short_circuiting_;
250
+ };
251
+
252
+ class TernaryCondVisitor : public CondVisitor {
253
+ public:
254
+ explicit TernaryCondVisitor(FlatExprVisitor* visitor) : visitor_(visitor) {}
255
+
256
+ void PreVisit(const cel::Expr* expr) override;
257
+ void PostVisitArg(int arg_num, const cel::Expr* expr) override;
258
+ void PostVisit(const cel::Expr* expr) override;
259
+
260
+ private:
261
+ FlatExprVisitor* visitor_;
262
+ Jump jump_to_second_;
263
+ Jump error_jump_;
264
+ Jump jump_after_first_;
265
+ };
266
+
267
+ class ExhaustiveTernaryCondVisitor : public CondVisitor {
268
+ public:
269
+ explicit ExhaustiveTernaryCondVisitor(FlatExprVisitor* visitor)
270
+ : visitor_(visitor) {}
271
+
272
+ void PreVisit(const cel::Expr* expr) override;
273
+ void PostVisitArg(int arg_num, const cel::Expr* expr) override {}
274
+ void PostVisit(const cel::Expr* expr) override;
275
+
276
+ private:
277
+ FlatExprVisitor* visitor_;
278
+ };
279
+
280
+ // Returns a hint for the number of program nodes (steps or subexpressions) that
281
+ // will be created for this expr.
282
+ size_t SizeHint(const cel::Expr& expr) {
283
+ switch (expr.kind_case()) {
284
+ case cel::ExprKindCase::kConstant:
285
+ return 1;
286
+ case cel::ExprKindCase::kIdentExpr:
287
+ return 1;
288
+ case cel::ExprKindCase::kSelectExpr:
289
+ return 2;
290
+ case cel::ExprKindCase::kCallExpr:
291
+ return expr.call_expr().args().size() +
292
+ (expr.call_expr().has_target() ? 2 : 1);
293
+ case cel::ExprKindCase::kListExpr:
294
+ return expr.list_expr().elements().size() + 1;
295
+ case cel::ExprKindCase::kStructExpr:
296
+ return expr.struct_expr().fields().size() + 1;
297
+ case cel::ExprKindCase::kMapExpr:
298
+ return 2 * expr.struct_expr().fields().size() + 1;
299
+ default:
300
+ return 1;
301
+ }
302
+ return 0;
303
+ }
304
+
305
+ // Returns whether this comprehension appears to be a standard map/filter
306
+ // macro implementation. It is not exhaustive, so it is unsafe to use with
307
+ // custom comprehensions outside of the standard macros or hand crafted ASTs.
308
+ bool IsOptimizableListAppend(const cel::ComprehensionExpr* comprehension,
309
+ bool enable_comprehension_list_append) {
310
+ if (!enable_comprehension_list_append) {
311
+ return false;
312
+ }
313
+ absl::string_view accu_var = comprehension->accu_var();
314
+ if (accu_var.empty() ||
315
+ comprehension->result().ident_expr().name() != accu_var) {
316
+ return false;
317
+ }
318
+ if (!comprehension->accu_init().has_list_expr() ||
319
+ !comprehension->accu_init().list_expr().elements().empty()) {
320
+ return false;
321
+ }
322
+
323
+ if (!comprehension->loop_step().has_call_expr()) {
324
+ return false;
325
+ }
326
+
327
+ // Macro loop_step for a filter() will contain a ternary:
328
+ // filter ? accu_var + [elem] : accu_var
329
+ // Macro loop_step for a map() will contain a list concat operation:
330
+ // accu_var + [elem]
331
+ const auto* call_expr = &comprehension->loop_step().call_expr();
332
+
333
+ if (call_expr->function() == cel::builtin::kTernary &&
334
+ call_expr->args().size() == 3) {
335
+ if (!call_expr->args()[1].has_call_expr()) {
336
+ return false;
337
+ }
338
+ call_expr = &(call_expr->args()[1].call_expr());
339
+ }
340
+
341
+ return call_expr->function() == cel::builtin::kAdd &&
342
+ call_expr->args().size() == 2 &&
343
+ call_expr->args()[0].has_ident_expr() &&
344
+ call_expr->args()[0].ident_expr().name() == accu_var &&
345
+ call_expr->args()[1].has_list_expr() &&
346
+ call_expr->args()[1].list_expr().elements().size() == 1;
347
+ }
348
+
349
+ // Assuming `IsOptimizableListAppend()` return true, return a pointer to the
350
+ // call `accu_var + [elem]`.
351
+ const cel::CallExpr* GetOptimizableListAppendCall(
352
+ const cel::ComprehensionExpr* comprehension) {
353
+ ABSL_DCHECK(IsOptimizableListAppend(
354
+ comprehension, /*enable_comprehension_list_append=*/true));
355
+
356
+ // Macro loop_step for a filter() will contain a ternary:
357
+ // filter ? accu_var + [elem] : accu_var
358
+ // Macro loop_step for a map() will contain a list concat operation:
359
+ // accu_var + [elem]
360
+ const auto* call_expr = &comprehension->loop_step().call_expr();
361
+
362
+ if (call_expr->function() == cel::builtin::kTernary &&
363
+ call_expr->args().size() == 3) {
364
+ call_expr = &(call_expr->args()[1].call_expr());
365
+ }
366
+ return call_expr;
367
+ }
368
+
369
+ // Assuming `IsOptimizableListAppend()` return true, return a pointer to the
370
+ // node `[elem]`.
371
+ const cel::Expr* GetOptimizableListAppendOperand(
372
+ const cel::ComprehensionExpr* comprehension) {
373
+ return &GetOptimizableListAppendCall(comprehension)->args()[1];
374
+ }
375
+
376
+ // Returns whether this comprehension appears to be a macro implementation for
377
+ // map transformations. It is not exhaustive, so it is unsafe to use with custom
378
+ // comprehensions outside of the standard macros or hand crafted ASTs.
379
+ bool IsOptimizableMapInsert(const cel::ComprehensionExpr* comprehension,
380
+ bool enable_comprehension_mutable_map) {
381
+ if (!enable_comprehension_mutable_map) {
382
+ return false;
383
+ }
384
+ if (comprehension->iter_var().empty() || comprehension->iter_var2().empty()) {
385
+ return false;
386
+ }
387
+ absl::string_view accu_var = comprehension->accu_var();
388
+ if (accu_var.empty() || !comprehension->has_result() ||
389
+ !comprehension->result().has_ident_expr() ||
390
+ comprehension->result().ident_expr().name() != accu_var) {
391
+ return false;
392
+ }
393
+ if (!comprehension->accu_init().has_map_expr()) {
394
+ return false;
395
+ }
396
+ if (!comprehension->loop_step().has_call_expr()) {
397
+ return false;
398
+ }
399
+ const auto* call_expr = &comprehension->loop_step().call_expr();
400
+
401
+ if (call_expr->function() == cel::builtin::kTernary &&
402
+ call_expr->args().size() == 3) {
403
+ if (!call_expr->args()[1].has_call_expr()) {
404
+ return false;
405
+ }
406
+ call_expr = &(call_expr->args()[1].call_expr());
407
+ }
408
+ return call_expr->function() == "cel.@mapInsert" &&
409
+ (call_expr->args().size() == 2 || call_expr->args().size() == 3) &&
410
+ call_expr->args()[0].has_ident_expr() &&
411
+ call_expr->args()[0].ident_expr().name() == accu_var;
412
+ }
413
+
414
+ bool IsBind(const cel::ComprehensionExpr* comprehension) {
415
+ static constexpr absl::string_view kUnusedIterVar = "#unused";
416
+
417
+ return comprehension->loop_condition().const_expr().has_bool_value() &&
418
+ comprehension->loop_condition().const_expr().bool_value() == false &&
419
+ comprehension->iter_var() == kUnusedIterVar &&
420
+ comprehension->iter_var2().empty() &&
421
+ comprehension->iter_range().has_list_expr() &&
422
+ comprehension->iter_range().list_expr().elements().empty();
423
+ }
424
+
425
+ bool IsBlock(const cel::CallExpr* call) { return call->function() == kBlock; }
426
+
427
+ // Visitor for Comprehension expressions.
428
+ class ComprehensionVisitor {
429
+ public:
430
+ explicit ComprehensionVisitor(FlatExprVisitor* visitor, bool short_circuiting,
431
+ bool is_trivial, size_t iter_slot,
432
+ size_t iter2_slot, size_t accu_slot)
433
+ : visitor_(visitor),
434
+ next_step_(nullptr),
435
+ cond_step_(nullptr),
436
+ short_circuiting_(short_circuiting),
437
+ is_trivial_(is_trivial),
438
+ accu_init_extracted_(false),
439
+ iter_slot_(iter_slot),
440
+ iter2_slot_(iter2_slot),
441
+ accu_slot_(accu_slot) {}
442
+
443
+ void PreVisit(const cel::Expr* expr);
444
+ absl::Status PostVisitArg(cel::ComprehensionArg arg_num,
445
+ const cel::Expr* comprehension_expr) {
446
+ if (is_trivial_) {
447
+ PostVisitArgTrivial(arg_num, comprehension_expr);
448
+ return absl::OkStatus();
449
+ } else {
450
+ return PostVisitArgDefault(arg_num, comprehension_expr);
451
+ }
452
+ }
453
+ void PostVisit(const cel::Expr* expr);
454
+
455
+ void MarkAccuInitExtracted() { accu_init_extracted_ = true; }
456
+
457
+ private:
458
+ void PostVisitArgTrivial(cel::ComprehensionArg arg_num,
459
+ const cel::Expr* comprehension_expr);
460
+
461
+ absl::Status PostVisitArgDefault(cel::ComprehensionArg arg_num,
462
+ const cel::Expr* comprehension_expr);
463
+
464
+ FlatExprVisitor* visitor_;
465
+ ComprehensionInitStep* init_step_;
466
+ ComprehensionNextStep* next_step_;
467
+ ComprehensionCondStep* cond_step_;
468
+ ProgramStepIndex init_step_pos_;
469
+ ProgramStepIndex next_step_pos_;
470
+ ProgramStepIndex cond_step_pos_;
471
+ bool short_circuiting_;
472
+ bool is_trivial_;
473
+ bool accu_init_extracted_;
474
+ size_t iter_slot_;
475
+ size_t iter2_slot_;
476
+ size_t accu_slot_;
477
+ };
478
+
479
+ absl::flat_hash_set<int32_t> MakeOptionalIndicesSet(
480
+ const cel::ListExpr& create_list_expr) {
481
+ absl::flat_hash_set<int32_t> optional_indices;
482
+ for (size_t i = 0; i < create_list_expr.elements().size(); ++i) {
483
+ if (create_list_expr.elements()[i].optional()) {
484
+ optional_indices.insert(static_cast<int32_t>(i));
485
+ }
486
+ }
487
+ return optional_indices;
488
+ }
489
+
490
+ absl::flat_hash_set<int32_t> MakeOptionalIndicesSet(
491
+ const cel::StructExpr& create_struct_expr) {
492
+ absl::flat_hash_set<int32_t> optional_indices;
493
+ for (size_t i = 0; i < create_struct_expr.fields().size(); ++i) {
494
+ if (create_struct_expr.fields()[i].optional()) {
495
+ optional_indices.insert(static_cast<int32_t>(i));
496
+ }
497
+ }
498
+ return optional_indices;
499
+ }
500
+
501
+ absl::flat_hash_set<int32_t> MakeOptionalIndicesSet(
502
+ const cel::MapExpr& map_expr) {
503
+ absl::flat_hash_set<int32_t> optional_indices;
504
+ for (size_t i = 0; i < map_expr.entries().size(); ++i) {
505
+ if (map_expr.entries()[i].optional()) {
506
+ optional_indices.insert(static_cast<int32_t>(i));
507
+ }
508
+ }
509
+ return optional_indices;
510
+ }
511
+
512
+ class FlatExprVisitor : public cel::AstVisitor {
513
+ public:
514
+ enum class CallHandlerResult {
515
+ // The call was intercepted, no additional processing is needed.
516
+ kIntercepted,
517
+ // The call was not intercepted, continue with the default processing.
518
+ kNotIntercepted,
519
+ };
520
+
521
+ // Handler for functions with builtin implementations.
522
+ // This is used to replace the usual dispatcher step that applies
523
+ // the arguments to a candidate function from the function registry.
524
+ using CallHandler = absl::AnyInvocable<CallHandlerResult(
525
+ const cel::Expr&, const cel::CallExpr&)>;
526
+
527
+ FlatExprVisitor(
528
+ const Resolver& resolver, const cel::RuntimeOptions& options,
529
+ std::vector<std::unique_ptr<ProgramOptimizer>> program_optimizers,
530
+ const absl::flat_hash_map<int64_t, cel::TypeSpec>& type_map,
531
+ const cel::TypeProvider& type_provider, IssueCollector& issue_collector,
532
+ ProgramBuilder& program_builder, PlannerContext& extension_context,
533
+ bool enable_optional_types)
534
+ : resolver_(resolver),
535
+ type_provider_(type_provider),
536
+ progress_status_(absl::OkStatus()),
537
+ resolved_select_expr_(nullptr),
538
+ options_(options),
539
+ program_optimizers_(std::move(program_optimizers)),
540
+ type_map_(type_map),
541
+ issue_collector_(issue_collector),
542
+ program_builder_(program_builder),
543
+ extension_context_(extension_context),
544
+ enable_optional_types_(enable_optional_types) {
545
+ constexpr size_t kCallHandlerSizeHint = 11;
546
+ call_handlers_.reserve(kCallHandlerSizeHint);
547
+ call_handlers_[cel::builtin::kIndex] = [this](const cel::Expr& expr,
548
+ const cel::CallExpr& call) {
549
+ return HandleIndex(expr, call);
550
+ };
551
+ call_handlers_[kBlock] = [this](const cel::Expr& expr,
552
+ const cel::CallExpr& call) {
553
+ return HandleBlock(expr, call);
554
+ };
555
+ call_handlers_[cel::builtin::kAdd] = [this](const cel::Expr& expr,
556
+ const cel::CallExpr& call) {
557
+ return HandleListAppend(expr, call);
558
+ };
559
+ if (options_.enable_fast_builtins) {
560
+ call_handlers_[cel::builtin::kNotStrictlyFalse] =
561
+ [this](const cel::Expr& expr, const cel::CallExpr& call) {
562
+ return HandleNotStrictlyFalse(expr, call);
563
+ };
564
+ call_handlers_[cel::builtin::kNotStrictlyFalseDeprecated] =
565
+ [this](const cel::Expr& expr, const cel::CallExpr& call) {
566
+ return HandleNotStrictlyFalse(expr, call);
567
+ };
568
+ call_handlers_[cel::builtin::kNot] = [this](const cel::Expr& expr,
569
+ const cel::CallExpr& call) {
570
+ return HandleNot(expr, call);
571
+ };
572
+ if (options_.enable_heterogeneous_equality) {
573
+ for (const auto& in_op :
574
+ {cel::builtin::kIn, cel::builtin::kInDeprecated,
575
+ cel::builtin::kInFunction}) {
576
+ call_handlers_[in_op] = [this](const cel::Expr& expr,
577
+ const cel::CallExpr& call) {
578
+ return HandleHeterogeneousEqualityIn(expr, call);
579
+ };
580
+ }
581
+ // Try to detect if the environment is setup with a custom equality
582
+ // implementation.
583
+ if (resolver_
584
+ .FindOverloads(cel::builtin::kEqual,
585
+ /*receiver_style=*/false,
586
+ {cel::Kind::kAny, cel::Kind::kAny})
587
+ .empty()) {
588
+ call_handlers_[cel::builtin::kEqual] =
589
+ [this](const cel::Expr& expr, const cel::CallExpr& call) {
590
+ return HandleHeterogeneousEquality(expr, call,
591
+ /*inequality=*/false);
592
+ };
593
+ call_handlers_[cel::builtin::kInequal] =
594
+ [this](const cel::Expr& expr, const cel::CallExpr& call) {
595
+ return HandleHeterogeneousEquality(expr, call,
596
+ /*inequality=*/true);
597
+ };
598
+ }
599
+ }
600
+ }
601
+ }
602
+
603
+ void SetMaxRecursionDepth(int max_recursion_depth) {
604
+ max_recursion_depth_ = max_recursion_depth;
605
+ }
606
+
607
+ bool PlanRecursiveProgram() const { return max_recursion_depth_ > 0; }
608
+
609
+ void SetResolvedType(const cel::Expr& expr, cel::Type type) {
610
+ resolved_types_[&expr] = std::move(type);
611
+ }
612
+
613
+ std::optional<cel::Type> GetResolvedType(const cel::Expr* expr) const {
614
+ if (expr == nullptr) {
615
+ return std::nullopt;
616
+ }
617
+ auto it = resolved_types_.find(expr);
618
+ if (it != resolved_types_.end()) {
619
+ return it->second;
620
+ }
621
+ return std::nullopt;
622
+ }
623
+
624
+ void PreVisitExpr(const cel::Expr& expr) override {
625
+ ValidateOrError(!absl::holds_alternative<cel::UnspecifiedExpr>(expr.kind()),
626
+ "Invalid empty expression");
627
+ if (!progress_status_.ok()) {
628
+ return;
629
+ }
630
+ if (resume_from_suppressed_branch_ == nullptr &&
631
+ suppressed_branches_.find(&expr) != suppressed_branches_.end()) {
632
+ resume_from_suppressed_branch_ = &expr;
633
+ }
634
+
635
+ if (options_.enable_typed_field_access) {
636
+ MaybeResolveType(expr);
637
+ }
638
+
639
+ if (block_.has_value()) {
640
+ BlockInfo& block = *block_;
641
+ if (block.in && block.bindings_set.contains(&expr)) {
642
+ block.current_binding = &expr;
643
+ }
644
+ }
645
+
646
+ auto* subexpression =
647
+ program_builder_.EnterSubexpression(&expr, SizeHint(expr));
648
+ if (subexpression == nullptr) {
649
+ progress_status_.Update(
650
+ absl::InternalError("same CEL expr visited twice"));
651
+ return;
652
+ }
653
+
654
+ for (const std::unique_ptr<ProgramOptimizer>& optimizer :
655
+ program_optimizers_) {
656
+ absl::Status status = optimizer->OnPreVisit(extension_context_, expr);
657
+ if (!status.ok()) {
658
+ SetProgressStatusIfError(status);
659
+ }
660
+ }
661
+ }
662
+
663
+ void PostVisitExpr(const cel::Expr& expr) override {
664
+ if (!progress_status_.ok()) {
665
+ return;
666
+ }
667
+ if (&expr == resume_from_suppressed_branch_) {
668
+ resume_from_suppressed_branch_ = nullptr;
669
+ }
670
+
671
+ for (const std::unique_ptr<ProgramOptimizer>& optimizer :
672
+ program_optimizers_) {
673
+ absl::Status status = optimizer->OnPostVisit(extension_context_, expr);
674
+ if (!status.ok()) {
675
+ SetProgressStatusIfError(status);
676
+ return;
677
+ }
678
+ }
679
+
680
+ auto* subexpression = program_builder_.current();
681
+ if (subexpression != nullptr && options_.enable_recursive_tracing &&
682
+ subexpression->IsRecursive()) {
683
+ auto program = subexpression->ExtractRecursiveProgram();
684
+ subexpression->set_recursive_program(
685
+ std::make_unique<TraceStep>(std::move(program.step)), program.depth);
686
+ }
687
+
688
+ program_builder_.ExitSubexpression(&expr);
689
+
690
+ if (!comprehension_stack_.empty() &&
691
+ comprehension_stack_.back().is_optimizable_bind &&
692
+ (&comprehension_stack_.back().comprehension->accu_init() == &expr)) {
693
+ SetProgressStatusIfError(
694
+ MaybeExtractSubexpression(&expr, comprehension_stack_.back()));
695
+ }
696
+
697
+ if (block_.has_value()) {
698
+ BlockInfo& block = *block_;
699
+ if (block.current_binding == &expr) {
700
+ int index = program_builder_.ExtractSubexpression(&expr);
701
+ if (index == -1) {
702
+ SetProgressStatusIfError(
703
+ absl::InvalidArgumentError("failed to extract subexpression"));
704
+ return;
705
+ }
706
+ block.subexpressions[block.current_index++] = index;
707
+ block.current_binding = nullptr;
708
+ }
709
+ }
710
+ }
711
+
712
+ void PostVisitConst(const cel::Expr& expr,
713
+ const cel::Constant& const_expr) override {
714
+ if (!progress_status_.ok()) {
715
+ return;
716
+ }
717
+
718
+ absl::StatusOr<cel::Value> converted_value =
719
+ ConvertConstant(const_expr, cel::NewDeleteAllocator());
720
+
721
+ if (!converted_value.ok()) {
722
+ SetProgressStatusIfError(converted_value.status());
723
+ return;
724
+ }
725
+
726
+ if (options_.max_recursion_depth > 0 || options_.max_recursion_depth < 0) {
727
+ SetRecursiveStep(CreateConstValueDirectStep(
728
+ std::move(converted_value).value(), expr.id()),
729
+ 1);
730
+ return;
731
+ }
732
+
733
+ AddStep(
734
+ CreateConstValueStep(std::move(converted_value).value(), expr.id()));
735
+ }
736
+
737
+ struct SlotLookupResult {
738
+ int slot;
739
+ int subexpression;
740
+ };
741
+
742
+ // Helper to lookup a variable mapped to a slot.
743
+ //
744
+ // If lazy evaluation enabled and ided as a lazy expression,
745
+ // subexpression and slot will be set.
746
+ SlotLookupResult LookupSlot(absl::string_view path) {
747
+ // If there's a leading dot, it cannot resolve to a local variable.
748
+ if (absl::StartsWith(path, ".")) {
749
+ return {-1, -1};
750
+ }
751
+ if (block_.has_value()) {
752
+ const BlockInfo& block = *block_;
753
+ if (block.in) {
754
+ absl::string_view index_suffix = path;
755
+ if (absl::ConsumePrefix(&index_suffix, "@index")) {
756
+ size_t index;
757
+ if (!absl::SimpleAtoi(index_suffix, &index)) {
758
+ SetProgressStatusIfError(
759
+ issue_collector_.AddIssue(RuntimeIssue::CreateError(
760
+ absl::InvalidArgumentError("bad @index"))));
761
+ return {-1, -1};
762
+ }
763
+ if (index >= block.size) {
764
+ SetProgressStatusIfError(
765
+ issue_collector_.AddIssue(RuntimeIssue::CreateError(
766
+ absl::InvalidArgumentError(absl::StrCat(
767
+ "invalid @index greater than number of bindings: ",
768
+ index, " >= ", block.size)))));
769
+ return {-1, -1};
770
+ }
771
+ if (index >= block.current_index) {
772
+ SetProgressStatusIfError(
773
+ issue_collector_.AddIssue(RuntimeIssue::CreateError(
774
+ absl::InvalidArgumentError(absl::StrCat(
775
+ "@index references current or future binding: ", index,
776
+ " >= ", block.current_index)))));
777
+ return {-1, -1};
778
+ }
779
+ return {static_cast<int>(block.index + index),
780
+ block.subexpressions[index]};
781
+ }
782
+ }
783
+ }
784
+ if (!comprehension_stack_.empty()) {
785
+ for (int i = comprehension_stack_.size() - 1; i >= 0; i--) {
786
+ const ComprehensionStackRecord& record = comprehension_stack_[i];
787
+ if (record.iter_var_in_scope &&
788
+ record.comprehension->iter_var() == path) {
789
+ if (record.is_optimizable_bind) {
790
+ SetProgressStatusIfError(issue_collector_.AddIssue(
791
+ RuntimeIssue::CreateWarning(absl::InvalidArgumentError(
792
+ "Unexpected iter_var access in trivial comprehension"))));
793
+ return {-1, -1};
794
+ }
795
+ return {static_cast<int>(record.iter_slot), -1};
796
+ }
797
+ if (record.iter_var2_in_scope &&
798
+ record.comprehension->iter_var2() == path) {
799
+ return {static_cast<int>(record.iter2_slot), -1};
800
+ }
801
+ if (record.accu_var_in_scope &&
802
+ record.comprehension->accu_var() == path) {
803
+ int slot = record.accu_slot;
804
+ int subexpression = -1;
805
+ if (record.is_optimizable_bind) {
806
+ subexpression = record.subexpression;
807
+ }
808
+ return {slot, subexpression};
809
+ }
810
+ }
811
+ }
812
+ if (absl::StartsWith(path, "@it:") || absl::StartsWith(path, "@it2:") ||
813
+ absl::StartsWith(path, "@ac:")) {
814
+ // If we see a CSE generated comprehension variable that was not
815
+ // resolvable through the normal comprehension scope resolution, reject it
816
+ // now rather than surfacing errors at activation time.
817
+ SetProgressStatusIfError(
818
+ issue_collector_.AddIssue(RuntimeIssue::CreateError(
819
+ absl::InvalidArgumentError("out of scope reference to CSE "
820
+ "generated comprehension variable"))));
821
+ }
822
+ return {-1, -1};
823
+ }
824
+
825
+ // Ident node handler.
826
+ // Invoked after child nodes are processed.
827
+ void PostVisitIdent(const cel::Expr& expr,
828
+ const cel::IdentExpr& ident_expr) override {
829
+ if (!progress_status_.ok()) {
830
+ return;
831
+ }
832
+ absl::string_view path = ident_expr.name();
833
+ if (!ValidateOrError(
834
+ !path.empty(),
835
+ "Invalid expression: identifier 'name' must not be empty")) {
836
+ return;
837
+ }
838
+
839
+ // Check if this is a local variable first (since it should shadow most
840
+ // other interpretations).
841
+ SlotLookupResult slot = LookupSlot(path);
842
+
843
+ if (slot.subexpression >= 0) {
844
+ auto* subexpression =
845
+ program_builder_.GetExtractedSubexpression(slot.subexpression);
846
+ if (subexpression == nullptr) {
847
+ SetProgressStatusIfError(
848
+ absl::InternalError("bad subexpression reference"));
849
+ return;
850
+ }
851
+ if (subexpression->IsRecursive()) {
852
+ const auto& program = subexpression->recursive_program();
853
+ SetRecursiveStep(
854
+ CreateDirectLazyInitStep(slot.slot, program.step.get(), expr.id()),
855
+ program.depth + 1);
856
+ } else {
857
+ // Off by one since mainline expression will be index 0.
858
+ AddStep(
859
+ CreateLazyInitStep(slot.slot, slot.subexpression + 1, expr.id()));
860
+ }
861
+ return;
862
+ } else if (slot.slot >= 0) {
863
+ if (options_.max_recursion_depth != 0) {
864
+ SetRecursiveStep(
865
+ CreateDirectSlotIdentStep(ident_expr.name(), slot.slot, expr.id()),
866
+ 1);
867
+ } else {
868
+ AddStep(
869
+ CreateIdentStepForSlot(ident_expr.name(), slot.slot, expr.id()));
870
+ }
871
+ return;
872
+ }
873
+
874
+ // Attempt to resolve a select expression as a namespaced identifier for an
875
+ // enum or type constant value.
876
+ std::optional<cel::Value> const_value;
877
+ int64_t select_root_id = -1;
878
+ std::string path_candidate;
879
+
880
+ while (!namespace_stack_.empty()) {
881
+ const auto& select_node = namespace_stack_.front();
882
+ // Generate path in format "<ident>.<field 0>.<field 1>...".
883
+ const cel::Expr* select_expr = select_node.first;
884
+ path_candidate = absl::StrCat(path, ".", select_node.second);
885
+
886
+ // Attempt to find a constant enum or type value which matches the
887
+ // qualified path present in the expression. Whether the identifier
888
+ // can be resolved to a type instance depends on whether the option to
889
+ // 'enable_qualified_type_identifiers' is set to true.
890
+ const_value = resolver_.FindConstant(path_candidate, select_expr->id());
891
+ if (const_value) {
892
+ resolved_select_expr_ = select_expr;
893
+ select_root_id = select_expr->id();
894
+ path = path_candidate;
895
+ namespace_stack_.clear();
896
+ break;
897
+ }
898
+ namespace_stack_.pop_front();
899
+ }
900
+
901
+ if (!const_value) {
902
+ // Attempt to resolve a simple identifier as an enum or type constant
903
+ // value.
904
+ const_value = resolver_.FindConstant(path, expr.id());
905
+ select_root_id = expr.id();
906
+ }
907
+
908
+ // TODO(issues/97): Need to add support for resolving packaged names at
909
+ // runtime if Parse-only. For checked, checker should have reported the
910
+ // expected interpretation.
911
+ if (const_value) {
912
+ // If the path starts with a dot, strip it.
913
+ absl::string_view name = absl::StripPrefix(path, ".");
914
+ if (options_.max_recursion_depth != 0) {
915
+ SetRecursiveStep(
916
+ CreateDirectShadowableValueStep(
917
+ name, std::move(const_value).value(), select_root_id),
918
+ 1);
919
+ return;
920
+ }
921
+ AddStep(CreateShadowableValueStep(name, std::move(const_value).value(),
922
+ select_root_id));
923
+ return;
924
+ }
925
+
926
+ absl::string_view ident_name = absl::StripPrefix(ident_expr.name(), ".");
927
+ if (options_.max_recursion_depth != 0) {
928
+ SetRecursiveStep(CreateDirectIdentStep(ident_name, expr.id()), 1);
929
+ } else {
930
+ AddStep(CreateIdentStep(ident_name, expr.id()));
931
+ }
932
+ }
933
+
934
+ void PreVisitSelect(const cel::Expr& expr,
935
+ const cel::SelectExpr& select_expr) override {
936
+ if (!progress_status_.ok()) {
937
+ return;
938
+ }
939
+ if (!ValidateOrError(
940
+ !select_expr.field().empty(),
941
+ "invalid expression: select 'field' must not be empty")) {
942
+ return;
943
+ }
944
+ if (!ValidateOrError(
945
+ select_expr.has_operand() &&
946
+ select_expr.operand().kind_case() !=
947
+ cel::ExprKindCase::kUnspecifiedExpr,
948
+ "invalid expression: select must specify an operand")) {
949
+ return;
950
+ }
951
+
952
+ // Not exactly the cleanest solution - we peek into child of
953
+ // select_expr.
954
+ // Chain of multiple SELECT ending with IDENT can represent namespaced
955
+ // entity.
956
+ if (!select_expr.test_only() && (select_expr.operand().has_ident_expr() ||
957
+ select_expr.operand().has_select_expr())) {
958
+ // select expressions are pushed in reverse order:
959
+ // google.type.Expr is pushed as:
960
+ // - field: 'Expr'
961
+ // - field: 'type'
962
+ // - id: 'google'
963
+ //
964
+ // The search order though is as follows:
965
+ // - id: 'google.type.Expr'
966
+ // - id: 'google.type', field: 'Expr'
967
+ // - id: 'google', field: 'type', field: 'Expr'
968
+ for (size_t i = 0; i < namespace_stack_.size(); i++) {
969
+ auto ns = namespace_stack_[i];
970
+ namespace_stack_[i] = {
971
+ ns.first, absl::StrCat(select_expr.field(), ".", ns.second)};
972
+ }
973
+ namespace_stack_.push_back({&expr, select_expr.field()});
974
+ } else {
975
+ namespace_stack_.clear();
976
+ }
977
+ }
978
+
979
+ // Select node handler.
980
+ // Invoked after child nodes are processed.
981
+ void PostVisitSelect(const cel::Expr& expr,
982
+ const cel::SelectExpr& select_expr) override {
983
+ if (!progress_status_.ok()) {
984
+ return;
985
+ }
986
+
987
+ // Check if we are "in the middle" of namespaced name.
988
+ // This is currently enum specific. Constant expression that corresponds
989
+ // to resolved enum value has been already created, thus preceding chain
990
+ // of selects is no longer relevant.
991
+ if (resolved_select_expr_) {
992
+ if (&expr == resolved_select_expr_) {
993
+ resolved_select_expr_ = nullptr;
994
+ }
995
+ return;
996
+ }
997
+
998
+ StringValue field = cel::StringValue(select_expr.field());
999
+ std::optional<cel::StructType> struct_type;
1000
+ std::optional<cel::StructTypeField> field_type;
1001
+ if (options_.enable_typed_field_access) {
1002
+ std::optional<cel::Type> operand_type =
1003
+ GetResolvedType(&select_expr.operand());
1004
+ if (operand_type.has_value() && operand_type->IsStruct()) {
1005
+ struct_type = operand_type->GetStruct();
1006
+ if (struct_type.has_value()) {
1007
+ auto field_lookup =
1008
+ extension_context_.type_reflector().FindStructTypeFieldByName(
1009
+ *struct_type, select_expr.field());
1010
+ // Swallow error to fallback to duck typing behavior.
1011
+ if (field_lookup.ok() && field_lookup->has_value()) {
1012
+ field_type = *std::move(field_lookup);
1013
+ }
1014
+ }
1015
+ }
1016
+ }
1017
+ if (auto depth = RecursionEligible(); depth.has_value()) {
1018
+ auto deps = ExtractRecursiveDependencies();
1019
+ if (deps.size() != 1) {
1020
+ SetProgressStatusIfError(absl::InternalError(
1021
+ "unexpected number of dependencies for select operation."));
1022
+ return;
1023
+ }
1024
+
1025
+ SetRecursiveStep(
1026
+ CreateDirectSelectStep(std::move(deps[0]), std::move(field),
1027
+ select_expr.test_only(), expr.id(),
1028
+ options_.enable_empty_wrapper_null_unboxing,
1029
+ enable_optional_types_),
1030
+ *depth + 1);
1031
+ return;
1032
+ }
1033
+
1034
+ if (field_type.has_value()) {
1035
+ AddStep(CreateTypedSelectStep(
1036
+ std::move(field), *struct_type, *std::move(field_type),
1037
+ select_expr.test_only(), expr.id(),
1038
+ options_.enable_empty_wrapper_null_unboxing, enable_optional_types_));
1039
+ return;
1040
+ }
1041
+ AddStep(CreateSelectStep(
1042
+ std::move(field), select_expr.test_only(), expr.id(),
1043
+ options_.enable_empty_wrapper_null_unboxing, enable_optional_types_));
1044
+ }
1045
+
1046
+ // Call node handler group.
1047
+ // We provide finer granularity for Call node callbacks to allow special
1048
+ // handling for short-circuiting
1049
+ // PreVisitCall is invoked before child nodes are processed.
1050
+ void PreVisitCall(const cel::Expr& expr,
1051
+ const cel::CallExpr& call_expr) override {
1052
+ if (!progress_status_.ok()) {
1053
+ return;
1054
+ }
1055
+
1056
+ std::unique_ptr<CondVisitor> cond_visitor;
1057
+ if (call_expr.function() == cel::builtin::kAnd) {
1058
+ cond_visitor = std::make_unique<LogicalCondVisitor>(
1059
+ this, /*is_or=*/false, options_.short_circuiting);
1060
+ } else if (call_expr.function() == cel::builtin::kOr) {
1061
+ cond_visitor = std::make_unique<LogicalCondVisitor>(
1062
+ this, /*is_or=*/true, options_.short_circuiting);
1063
+ } else if (call_expr.function() == cel::builtin::kTernary) {
1064
+ if (options_.short_circuiting) {
1065
+ cond_visitor = std::make_unique<TernaryCondVisitor>(this);
1066
+ } else {
1067
+ cond_visitor = std::make_unique<ExhaustiveTernaryCondVisitor>(this);
1068
+ }
1069
+ } else if (enable_optional_types_ &&
1070
+ call_expr.function() == kOptionalOrFn &&
1071
+ call_expr.has_target() && call_expr.args().size() == 1) {
1072
+ cond_visitor = std::make_unique<OptionalOrCondVisitor>(
1073
+ this, /*is_or_value=*/false, options_.short_circuiting);
1074
+ } else if (enable_optional_types_ &&
1075
+ call_expr.function() == kOptionalOrValueFn &&
1076
+ call_expr.has_target() && call_expr.args().size() == 1) {
1077
+ cond_visitor = std::make_unique<OptionalOrCondVisitor>(
1078
+ this, /*is_or_value=*/true, options_.short_circuiting);
1079
+ } else if (IsBlock(&call_expr)) {
1080
+ // cel.@block
1081
+ if (block_.has_value()) {
1082
+ // There can only be one for now.
1083
+ SetProgressStatusIfError(
1084
+ absl::InvalidArgumentError("multiple cel.@block are not allowed"));
1085
+ return;
1086
+ }
1087
+ block_ = BlockInfo();
1088
+ BlockInfo& block = *block_;
1089
+ block.in = true;
1090
+ if (call_expr.args().empty()) {
1091
+ SetProgressStatusIfError(absl::InvalidArgumentError(
1092
+ "malformed cel.@block: missing list of bound expressions"));
1093
+ return;
1094
+ }
1095
+ if (call_expr.args().size() != 2) {
1096
+ SetProgressStatusIfError(absl::InvalidArgumentError(
1097
+ "malformed cel.@block: missing bound expression"));
1098
+ return;
1099
+ }
1100
+ if (!call_expr.args()[0].has_list_expr()) {
1101
+ SetProgressStatusIfError(
1102
+ absl::InvalidArgumentError("malformed cel.@block: first argument "
1103
+ "is not a list of bound expressions"));
1104
+ return;
1105
+ }
1106
+ const auto& list_expr = call_expr.args().front().list_expr();
1107
+ block.size = list_expr.elements().size();
1108
+
1109
+ block.bindings_set.reserve(block.size);
1110
+ for (const auto& list_expr_element : list_expr.elements()) {
1111
+ if (list_expr_element.optional()) {
1112
+ SetProgressStatusIfError(
1113
+ absl::InvalidArgumentError("malformed cel.@block: list of bound "
1114
+ "expressions contains an optional"));
1115
+ return;
1116
+ }
1117
+ block.bindings_set.insert(&list_expr_element.expr());
1118
+ }
1119
+ block.index = index_manager().ReserveSlots(block.size);
1120
+ block.slot_count = block.size;
1121
+ block.expr = &expr;
1122
+ block.bindings = &call_expr.args()[0];
1123
+ block.bound = &call_expr.args()[1];
1124
+ block.subexpressions.resize(block.size, -1);
1125
+ } else {
1126
+ return;
1127
+ }
1128
+
1129
+ if (cond_visitor) {
1130
+ cond_visitor->PreVisit(&expr);
1131
+ cond_visitor_stack_.push({&expr, std::move(cond_visitor)});
1132
+ }
1133
+ }
1134
+
1135
+ // Returns the maximum recursion depth of the current program if it is
1136
+ // eligible for recursion, or nullopt if it is not.
1137
+ std::optional<int> RecursionEligible() {
1138
+ if (!PlanRecursiveProgram() || program_builder_.current() == nullptr) {
1139
+ return std::nullopt;
1140
+ }
1141
+ return program_builder_.current()->RecursiveDependencyDepth();
1142
+ }
1143
+
1144
+ std::vector<std::unique_ptr<DirectExpressionStep>>
1145
+ ExtractRecursiveDependencies() {
1146
+ // Must check recursion eligibility before calling.
1147
+ ABSL_DCHECK(program_builder_.current() != nullptr);
1148
+
1149
+ return program_builder_.current()->ExtractRecursiveDependencies();
1150
+ }
1151
+
1152
+ void MakeTernaryRecursive(const cel::Expr* expr) {
1153
+ if (expr->call_expr().args().size() != 3) {
1154
+ SetProgressStatusIfError(absl::InvalidArgumentError(
1155
+ "unexpected number of args for builtin ternary"));
1156
+ return;
1157
+ }
1158
+
1159
+ const cel::Expr* condition_expr = &expr->call_expr().args()[0];
1160
+ const cel::Expr* left_expr = &expr->call_expr().args()[1];
1161
+ const cel::Expr* right_expr = &expr->call_expr().args()[2];
1162
+
1163
+ auto* condition_plan = program_builder_.GetSubexpression(condition_expr);
1164
+ auto* left_plan = program_builder_.GetSubexpression(left_expr);
1165
+ auto* right_plan = program_builder_.GetSubexpression(right_expr);
1166
+
1167
+ if (condition_plan == nullptr || !condition_plan->IsRecursive() ||
1168
+ left_plan == nullptr || !left_plan->IsRecursive() ||
1169
+ right_plan == nullptr || !right_plan->IsRecursive()) {
1170
+ SetProgressStatusIfError(FailedRecursivePlanning());
1171
+ return;
1172
+ }
1173
+
1174
+ int max_depth = std::max({0, condition_plan->recursive_program().depth,
1175
+ left_plan->recursive_program().depth,
1176
+ right_plan->recursive_program().depth});
1177
+
1178
+ SetRecursiveStep(
1179
+ CreateDirectTernaryStep(condition_plan->ExtractRecursiveProgram().step,
1180
+ left_plan->ExtractRecursiveProgram().step,
1181
+ right_plan->ExtractRecursiveProgram().step,
1182
+ expr->id(), options_.short_circuiting),
1183
+ max_depth + 1);
1184
+ }
1185
+
1186
+ void MakeShortcircuitRecursive(const cel::Expr* expr, bool is_or) {
1187
+ int args_size = expr->call_expr().args().size();
1188
+ if (args_size < 2) {
1189
+ SetProgressStatusIfError(absl::InvalidArgumentError(
1190
+ "unexpected number of args for builtin boolean operator &&/||"));
1191
+ return;
1192
+ }
1193
+
1194
+ auto* current_plan =
1195
+ program_builder_.GetSubexpression(&expr->call_expr().args()[0]);
1196
+ if (current_plan == nullptr || !current_plan->IsRecursive()) {
1197
+ SetProgressStatusIfError(FailedRecursivePlanning());
1198
+ return;
1199
+ }
1200
+ int current_depth = current_plan->recursive_program().depth;
1201
+ std::unique_ptr<DirectExpressionStep> current_step =
1202
+ current_plan->ExtractRecursiveProgram().step;
1203
+
1204
+ for (int i = 1; i < args_size; ++i) {
1205
+ auto* next_plan =
1206
+ program_builder_.GetSubexpression(&expr->call_expr().args()[i]);
1207
+ if (next_plan == nullptr || !next_plan->IsRecursive()) {
1208
+ SetProgressStatusIfError(FailedRecursivePlanning());
1209
+ return;
1210
+ }
1211
+ current_depth =
1212
+ std::max(current_depth, next_plan->recursive_program().depth);
1213
+ std::unique_ptr<DirectExpressionStep> next_step =
1214
+ next_plan->ExtractRecursiveProgram().step;
1215
+ if (is_or) {
1216
+ current_step =
1217
+ CreateDirectOrStep(std::move(current_step), std::move(next_step),
1218
+ expr->id(), options_.short_circuiting);
1219
+ } else {
1220
+ current_step =
1221
+ CreateDirectAndStep(std::move(current_step), std::move(next_step),
1222
+ expr->id(), options_.short_circuiting);
1223
+ }
1224
+ current_depth++;
1225
+ }
1226
+ SetRecursiveStep(std::move(current_step), current_depth);
1227
+ }
1228
+
1229
+ void MakeOptionalShortcircuit(const cel::Expr* expr, bool is_or_value) {
1230
+ if (!expr->call_expr().has_target() ||
1231
+ expr->call_expr().args().size() != 1) {
1232
+ SetProgressStatusIfError(absl::InvalidArgumentError(
1233
+ "unexpected number of args for optional.or{Value}"));
1234
+ return;
1235
+ }
1236
+ const cel::Expr* left_expr = &expr->call_expr().target();
1237
+ const cel::Expr* right_expr = &expr->call_expr().args()[0];
1238
+
1239
+ auto* left_plan = program_builder_.GetSubexpression(left_expr);
1240
+ auto* right_plan = program_builder_.GetSubexpression(right_expr);
1241
+
1242
+ if (left_plan == nullptr || !left_plan->IsRecursive() ||
1243
+ right_plan == nullptr || !right_plan->IsRecursive()) {
1244
+ SetProgressStatusIfError(FailedRecursivePlanning());
1245
+ return;
1246
+ }
1247
+ int max_depth = std::max({0, left_plan->recursive_program().depth,
1248
+ right_plan->recursive_program().depth});
1249
+
1250
+ SetRecursiveStep(CreateDirectOptionalOrStep(
1251
+ expr->id(), left_plan->ExtractRecursiveProgram().step,
1252
+ right_plan->ExtractRecursiveProgram().step,
1253
+ is_or_value, options_.short_circuiting),
1254
+ max_depth + 1);
1255
+ }
1256
+
1257
+ void MaybeMakeBindRecursive(const cel::Expr* expr,
1258
+ const cel::ComprehensionExpr* comprehension,
1259
+ size_t accu_slot) {
1260
+ if (!PlanRecursiveProgram()) {
1261
+ return;
1262
+ }
1263
+
1264
+ auto* result_plan =
1265
+ program_builder_.GetSubexpression(&comprehension->result());
1266
+
1267
+ if (result_plan == nullptr || !result_plan->IsRecursive()) {
1268
+ SetProgressStatusIfError(FailedRecursivePlanning());
1269
+ return;
1270
+ }
1271
+
1272
+ int result_depth = result_plan->recursive_program().depth;
1273
+
1274
+ auto program = result_plan->ExtractRecursiveProgram();
1275
+ SetRecursiveStep(
1276
+ CreateDirectBindStep(accu_slot, std::move(program.step), expr->id()),
1277
+ result_depth + 1);
1278
+ }
1279
+
1280
+ void MaybeMakeComprehensionRecursive(
1281
+ const cel::Expr* expr, const cel::ComprehensionExpr* comprehension,
1282
+ size_t iter_slot, size_t iter2_slot, size_t accu_slot) {
1283
+ if (!PlanRecursiveProgram()) {
1284
+ return;
1285
+ }
1286
+
1287
+ auto* accu_plan =
1288
+ program_builder_.GetSubexpression(&comprehension->accu_init());
1289
+ auto* range_plan =
1290
+ program_builder_.GetSubexpression(&comprehension->iter_range());
1291
+ auto* loop_plan =
1292
+ program_builder_.GetSubexpression(&comprehension->loop_step());
1293
+ auto* condition_plan =
1294
+ program_builder_.GetSubexpression(&comprehension->loop_condition());
1295
+ auto* result_plan =
1296
+ program_builder_.GetSubexpression(&comprehension->result());
1297
+ if (accu_plan == nullptr || !accu_plan->IsRecursive() ||
1298
+ range_plan == nullptr || !range_plan->IsRecursive() ||
1299
+ loop_plan == nullptr || !loop_plan->IsRecursive() ||
1300
+ condition_plan == nullptr || !condition_plan->IsRecursive() ||
1301
+ result_plan == nullptr || !result_plan->IsRecursive()) {
1302
+ SetProgressStatusIfError(FailedRecursivePlanning());
1303
+ return;
1304
+ }
1305
+
1306
+ int max_depth = 0;
1307
+ max_depth = std::max(max_depth, accu_plan->recursive_program().depth);
1308
+ max_depth = std::max(max_depth, range_plan->recursive_program().depth);
1309
+ max_depth = std::max(max_depth, loop_plan->recursive_program().depth);
1310
+ max_depth = std::max(max_depth, condition_plan->recursive_program().depth);
1311
+ max_depth = std::max(max_depth, result_plan->recursive_program().depth);
1312
+
1313
+ auto step = CreateDirectComprehensionStep(
1314
+ iter_slot, iter2_slot, accu_slot,
1315
+ range_plan->ExtractRecursiveProgram().step,
1316
+ accu_plan->ExtractRecursiveProgram().step,
1317
+ loop_plan->ExtractRecursiveProgram().step,
1318
+ condition_plan->ExtractRecursiveProgram().step,
1319
+ result_plan->ExtractRecursiveProgram().step, options_.short_circuiting,
1320
+ expr->id());
1321
+
1322
+ SetRecursiveStep(std::move(step), max_depth + 1);
1323
+ }
1324
+
1325
+ // Invoked after all child nodes are processed.
1326
+ void PostVisitCall(const cel::Expr& expr,
1327
+ const cel::CallExpr& call_expr) override {
1328
+ if (!progress_status_.ok()) {
1329
+ return;
1330
+ }
1331
+
1332
+ auto cond_visitor = FindCondVisitor(&expr);
1333
+ if (cond_visitor) {
1334
+ cond_visitor->PostVisit(&expr);
1335
+ cond_visitor_stack_.pop();
1336
+ return;
1337
+ }
1338
+
1339
+ // Check if the call is intercepted by a custom handler.
1340
+ if (auto handler = call_handlers_.find(call_expr.function());
1341
+ handler != call_handlers_.end()) {
1342
+ CallHandlerResult result = handler->second(expr, call_expr);
1343
+ if (result == CallHandlerResult::kIntercepted) {
1344
+ return;
1345
+ } // otherwise, apply default function handling.
1346
+ }
1347
+
1348
+ AddResolvedFunctionStep(&call_expr, &expr, call_expr.function());
1349
+ }
1350
+
1351
+ void PreVisitComprehension(
1352
+ const cel::Expr& expr,
1353
+ const cel::ComprehensionExpr& comprehension) override {
1354
+ if (!progress_status_.ok()) {
1355
+ return;
1356
+ }
1357
+ if (!ValidateOrError(options_.enable_comprehension,
1358
+ "Comprehension support is disabled")) {
1359
+ return;
1360
+ }
1361
+ const auto& accu_var = comprehension.accu_var();
1362
+ const auto& iter_var = comprehension.iter_var();
1363
+ const auto& iter_var2 = comprehension.iter_var2();
1364
+ ValidateOrError(!accu_var.empty(),
1365
+ "Invalid comprehension: 'accu_var' must not be empty");
1366
+ ValidateOrError(!iter_var.empty(),
1367
+ "Invalid comprehension: 'iter_var' must not be empty");
1368
+ ValidateOrError(
1369
+ accu_var != iter_var,
1370
+ "Invalid comprehension: 'accu_var' must not be the same as 'iter_var'");
1371
+ ValidateOrError(accu_var != iter_var2,
1372
+ "Invalid comprehension: 'accu_var' must not be the same as "
1373
+ "'iter_var2'");
1374
+ ValidateOrError(iter_var2 != iter_var,
1375
+ "Invalid comprehension: 'iter_var2' must not be the same "
1376
+ "as 'iter_var'");
1377
+ ValidateOrError(comprehension.has_accu_init(),
1378
+ "Invalid comprehension: 'accu_init' must be set");
1379
+ ValidateOrError(comprehension.has_loop_condition(),
1380
+ "Invalid comprehension: 'loop_condition' must be set");
1381
+ ValidateOrError(comprehension.has_loop_step(),
1382
+ "Invalid comprehension: 'loop_step' must be set");
1383
+ ValidateOrError(comprehension.has_result(),
1384
+ "Invalid comprehension: 'result' must be set");
1385
+
1386
+ size_t iter_slot, iter2_slot, accu_slot, slot_count;
1387
+ bool is_bind = IsBind(&comprehension);
1388
+
1389
+ if (is_bind) {
1390
+ accu_slot = iter_slot = iter2_slot = index_manager_.ReserveSlots(1);
1391
+ slot_count = 1;
1392
+ } else if (comprehension.iter_var2().empty()) {
1393
+ iter_slot = iter2_slot = index_manager_.ReserveSlots(2);
1394
+ accu_slot = iter_slot + 1;
1395
+ slot_count = 2;
1396
+ } else {
1397
+ iter_slot = index_manager_.ReserveSlots(3);
1398
+ iter2_slot = iter_slot + 1;
1399
+ accu_slot = iter2_slot + 1;
1400
+ slot_count = 3;
1401
+ }
1402
+
1403
+ if (block_.has_value()) {
1404
+ BlockInfo& block = *block_;
1405
+ if (block.in) {
1406
+ block.slot_count += slot_count;
1407
+ slot_count = 0;
1408
+ }
1409
+ }
1410
+ // If this is in the scope of an optimized bind accu-init, account the slots
1411
+ // to the outermost bind-init scope.
1412
+ //
1413
+ // The init expression is effectively inlined at the first usage in the
1414
+ // critical path (which is unknown at plan time), so the used slots need to
1415
+ // be dedicated for the entire scope of that bind.
1416
+ for (ComprehensionStackRecord& record : comprehension_stack_) {
1417
+ if (record.in_accu_init && record.is_optimizable_bind) {
1418
+ record.slot_count += slot_count;
1419
+ slot_count = 0;
1420
+ break;
1421
+ }
1422
+ // If no bind init subexpression, account normally.
1423
+ }
1424
+
1425
+ comprehension_stack_.push_back(
1426
+ {&expr, &comprehension, iter_slot, iter2_slot, accu_slot, slot_count,
1427
+ /*subexpression=*/-1,
1428
+ /*.is_optimizable_list_append=*/
1429
+ IsOptimizableListAppend(&comprehension,
1430
+ options_.enable_comprehension_list_append),
1431
+ /*.is_optimizable_map_insert=*/
1432
+ IsOptimizableMapInsert(&comprehension,
1433
+ options_.enable_comprehension_mutable_map),
1434
+ /*.is_optimizable_bind=*/is_bind,
1435
+ /*.iter_var_in_scope=*/false,
1436
+ /*.iter_var2_in_scope=*/false,
1437
+ /*.accu_var_in_scope=*/false,
1438
+ /*.in_accu_init=*/false,
1439
+ std::make_unique<ComprehensionVisitor>(this, options_.short_circuiting,
1440
+ is_bind, iter_slot, iter2_slot,
1441
+ accu_slot)});
1442
+ comprehension_stack_.back().visitor->PreVisit(&expr);
1443
+ }
1444
+
1445
+ // Invoked after all child nodes are processed.
1446
+ void PostVisitComprehension(
1447
+ const cel::Expr& expr,
1448
+ const cel::ComprehensionExpr& comprehension_expr) override {
1449
+ if (!progress_status_.ok()) {
1450
+ return;
1451
+ }
1452
+
1453
+ ComprehensionStackRecord& record = comprehension_stack_.back();
1454
+ if (comprehension_stack_.empty() ||
1455
+ record.comprehension != &comprehension_expr) {
1456
+ return;
1457
+ }
1458
+
1459
+ record.visitor->PostVisit(&expr);
1460
+
1461
+ index_manager_.ReleaseSlots(record.slot_count);
1462
+ comprehension_stack_.pop_back();
1463
+ }
1464
+
1465
+ void PreVisitComprehensionSubexpression(
1466
+ const cel::Expr& expr, const cel::ComprehensionExpr& compr,
1467
+ cel::ComprehensionArg comprehension_arg) override {
1468
+ if (!progress_status_.ok()) {
1469
+ return;
1470
+ }
1471
+
1472
+ if (comprehension_stack_.empty() ||
1473
+ comprehension_stack_.back().comprehension != &compr) {
1474
+ return;
1475
+ }
1476
+
1477
+ ComprehensionStackRecord& record = comprehension_stack_.back();
1478
+
1479
+ switch (comprehension_arg) {
1480
+ case cel::ITER_RANGE: {
1481
+ record.in_accu_init = false;
1482
+ record.iter_var_in_scope = false;
1483
+ record.iter_var2_in_scope = false;
1484
+ record.accu_var_in_scope = false;
1485
+ break;
1486
+ }
1487
+ case cel::ACCU_INIT: {
1488
+ record.in_accu_init = true;
1489
+ record.iter_var_in_scope = false;
1490
+ record.iter_var2_in_scope = false;
1491
+ record.accu_var_in_scope = false;
1492
+ break;
1493
+ }
1494
+ case cel::LOOP_CONDITION: {
1495
+ record.in_accu_init = false;
1496
+ record.iter_var_in_scope = true;
1497
+ record.iter_var2_in_scope = true;
1498
+ record.accu_var_in_scope = true;
1499
+ break;
1500
+ }
1501
+ case cel::LOOP_STEP: {
1502
+ record.in_accu_init = false;
1503
+ record.iter_var_in_scope = true;
1504
+ record.iter_var2_in_scope = true;
1505
+ record.accu_var_in_scope = true;
1506
+ break;
1507
+ }
1508
+ case cel::RESULT: {
1509
+ record.in_accu_init = false;
1510
+ record.iter_var_in_scope = false;
1511
+ record.iter_var2_in_scope = false;
1512
+ record.accu_var_in_scope = true;
1513
+ break;
1514
+ }
1515
+ }
1516
+ }
1517
+
1518
+ void PostVisitComprehensionSubexpression(
1519
+ const cel::Expr& expr, const cel::ComprehensionExpr& compr,
1520
+ cel::ComprehensionArg comprehension_arg) override {
1521
+ if (!progress_status_.ok()) {
1522
+ return;
1523
+ }
1524
+
1525
+ if (comprehension_stack_.empty() ||
1526
+ comprehension_stack_.back().comprehension != &compr) {
1527
+ return;
1528
+ }
1529
+
1530
+ SetProgressStatusIfError(comprehension_stack_.back().visitor->PostVisitArg(
1531
+ comprehension_arg, comprehension_stack_.back().expr));
1532
+ }
1533
+
1534
+ // Invoked after each argument node processed.
1535
+ void PostVisitArg(const cel::Expr& expr, int arg_num) override {
1536
+ if (!progress_status_.ok()) {
1537
+ return;
1538
+ }
1539
+ auto cond_visitor = FindCondVisitor(&expr);
1540
+ if (cond_visitor) {
1541
+ cond_visitor->PostVisitArg(arg_num, &expr);
1542
+ }
1543
+ }
1544
+
1545
+ void PostVisitTarget(const cel::Expr& expr) override {
1546
+ if (!progress_status_.ok()) {
1547
+ return;
1548
+ }
1549
+ auto cond_visitor = FindCondVisitor(&expr);
1550
+ if (cond_visitor) {
1551
+ cond_visitor->PostVisitTarget(&expr);
1552
+ }
1553
+ }
1554
+
1555
+ // CreateList node handler.
1556
+ // Invoked after child nodes are processed.
1557
+ void PostVisitList(const cel::Expr& expr,
1558
+ const cel::ListExpr& list_expr) override {
1559
+ if (!progress_status_.ok()) {
1560
+ return;
1561
+ }
1562
+
1563
+ if (block_.has_value()) {
1564
+ BlockInfo& block = *block_;
1565
+ if (block.bindings == &expr) {
1566
+ // Do nothing, this is the cel.@block bindings list.
1567
+ return;
1568
+ }
1569
+ }
1570
+
1571
+ if (!comprehension_stack_.empty()) {
1572
+ const ComprehensionStackRecord& comprehension =
1573
+ comprehension_stack_.back();
1574
+ if (comprehension.is_optimizable_list_append) {
1575
+ if (&(comprehension.comprehension->accu_init()) == &expr) {
1576
+ if (PlanRecursiveProgram()) {
1577
+ SetRecursiveStep(CreateDirectMutableListStep(expr.id()), 1);
1578
+ return;
1579
+ }
1580
+ AddStep(CreateMutableListStep(expr.id()));
1581
+ return;
1582
+ }
1583
+ if (GetOptimizableListAppendOperand(comprehension.comprehension) ==
1584
+ &expr) {
1585
+ return;
1586
+ }
1587
+ }
1588
+ }
1589
+ if (std::optional<int> depth = RecursionEligible(); depth.has_value()) {
1590
+ auto deps = ExtractRecursiveDependencies();
1591
+ if (deps.size() != list_expr.elements().size()) {
1592
+ SetProgressStatusIfError(absl::InternalError(
1593
+ "Unexpected number of plan elements for CreateList expr"));
1594
+ return;
1595
+ }
1596
+ auto step = CreateDirectListStep(
1597
+ std::move(deps), MakeOptionalIndicesSet(list_expr), expr.id());
1598
+ SetRecursiveStep(std::move(step), *depth + 1);
1599
+ return;
1600
+ }
1601
+ AddStep(CreateCreateListStep(list_expr, expr.id()));
1602
+ }
1603
+
1604
+ // CreateStruct node handler.
1605
+ // Invoked after child nodes are processed.
1606
+ void PostVisitStruct(const cel::Expr& expr,
1607
+ const cel::StructExpr& struct_expr) override {
1608
+ if (!progress_status_.ok()) {
1609
+ return;
1610
+ }
1611
+
1612
+ auto status_or_resolved_fields =
1613
+ ResolveCreateStructFields(struct_expr, expr.id());
1614
+ if (!status_or_resolved_fields.ok()) {
1615
+ SetProgressStatusIfError(status_or_resolved_fields.status());
1616
+ return;
1617
+ }
1618
+ std::string resolved_name =
1619
+ std::move(status_or_resolved_fields.value().first);
1620
+ std::vector<std::string> fields =
1621
+ std::move(status_or_resolved_fields.value().second);
1622
+
1623
+ if (auto depth = RecursionEligible(); depth.has_value()) {
1624
+ auto deps = ExtractRecursiveDependencies();
1625
+ if (deps.size() != struct_expr.fields().size()) {
1626
+ SetProgressStatusIfError(absl::InternalError(
1627
+ "Unexpected number of plan elements for CreateStruct expr"));
1628
+ return;
1629
+ }
1630
+ auto step = CreateDirectCreateStructStep(
1631
+ std::move(resolved_name), std::move(fields), std::move(deps),
1632
+ MakeOptionalIndicesSet(struct_expr), expr.id());
1633
+ SetRecursiveStep(std::move(step), *depth + 1);
1634
+ return;
1635
+ }
1636
+
1637
+ AddStep(CreateCreateStructStep(std::move(resolved_name), std::move(fields),
1638
+ MakeOptionalIndicesSet(struct_expr),
1639
+ expr.id()));
1640
+ }
1641
+
1642
+ void PostVisitMap(const cel::Expr& expr,
1643
+ const cel::MapExpr& map_expr) override {
1644
+ for (const auto& entry : map_expr.entries()) {
1645
+ ValidateOrError(entry.has_key(), "Map entry missing key");
1646
+ ValidateOrError(entry.has_value(), "Map entry missing value");
1647
+ }
1648
+
1649
+ if (!comprehension_stack_.empty()) {
1650
+ const ComprehensionStackRecord& comprehension =
1651
+ comprehension_stack_.back();
1652
+ if (comprehension.is_optimizable_map_insert) {
1653
+ if (&(comprehension.comprehension->accu_init()) == &expr) {
1654
+ if (PlanRecursiveProgram()) {
1655
+ SetRecursiveStep(CreateDirectMutableMapStep(expr.id()), 1);
1656
+ return;
1657
+ }
1658
+ AddStep(CreateMutableMapStep(expr.id()));
1659
+ return;
1660
+ }
1661
+ }
1662
+ }
1663
+
1664
+ if (auto depth = RecursionEligible(); depth.has_value()) {
1665
+ auto deps = ExtractRecursiveDependencies();
1666
+ if (deps.size() != 2 * map_expr.entries().size()) {
1667
+ SetProgressStatusIfError(absl::InternalError(
1668
+ "Unexpected number of plan elements for CreateStruct expr"));
1669
+ return;
1670
+ }
1671
+ auto step = CreateDirectCreateMapStep(
1672
+ std::move(deps), MakeOptionalIndicesSet(map_expr), expr.id());
1673
+ SetRecursiveStep(std::move(step), *depth + 1);
1674
+ return;
1675
+ }
1676
+ AddStep(CreateCreateStructStepForMap(map_expr.entries().size(),
1677
+ MakeOptionalIndicesSet(map_expr),
1678
+ expr.id()));
1679
+ }
1680
+
1681
+ absl::Status progress_status() const { return progress_status_; }
1682
+
1683
+ // Mark a branch as suppressed. The visitor will continue as normal, but
1684
+ // any emitted program steps are ignored.
1685
+ //
1686
+ // Only applies to branches that have not yet been visited (pre-order).
1687
+ void SuppressBranch(const cel::Expr* expr) {
1688
+ suppressed_branches_.insert(expr);
1689
+ }
1690
+
1691
+ void AddResolvedFunctionStep(const cel::CallExpr* call_expr,
1692
+ const cel::Expr* expr,
1693
+ absl::string_view function) {
1694
+ // Establish the search criteria for a given function.
1695
+ bool receiver_style = call_expr->has_target();
1696
+ size_t num_args = call_expr->args().size() + (receiver_style ? 1 : 0);
1697
+
1698
+ // First, search for lazily defined function overloads.
1699
+ // Lazy functions shadow eager functions with the same signature.
1700
+ auto lazy_overloads = resolver_.FindLazyOverloads(
1701
+ function, call_expr->has_target(), num_args, expr->id());
1702
+ if (!lazy_overloads.empty()) {
1703
+ if (auto depth = RecursionEligible(); depth.has_value()) {
1704
+ auto args = program_builder_.current()->ExtractRecursiveDependencies();
1705
+ SetRecursiveStep(CreateDirectLazyFunctionStep(
1706
+ expr->id(), *call_expr, std::move(args),
1707
+ std::move(lazy_overloads)),
1708
+ *depth + 1);
1709
+ return;
1710
+ }
1711
+ AddStep(CreateFunctionStep(*call_expr, expr->id(),
1712
+ std::move(lazy_overloads)));
1713
+ return;
1714
+ }
1715
+
1716
+ // Second, search for eagerly defined function overloads.
1717
+ auto overloads =
1718
+ resolver_.FindOverloads(function, receiver_style, num_args, expr->id());
1719
+ if (overloads.empty()) {
1720
+ // Create a warning that the overload could not be found. Depending on the
1721
+ // builder_warnings configuration, this could result in termination of the
1722
+ // CelExpression creation or an inspectable warning for use within runtime
1723
+ // logging.
1724
+ auto status = issue_collector_.AddIssue(RuntimeIssue::CreateWarning(
1725
+ absl::InvalidArgumentError(
1726
+ "No overloads provided for FunctionStep creation"),
1727
+ RuntimeIssue::ErrorCode::kNoMatchingOverload));
1728
+ if (!status.ok()) {
1729
+ SetProgressStatusIfError(status);
1730
+ return;
1731
+ }
1732
+ }
1733
+
1734
+ if (auto recursion_depth = RecursionEligible();
1735
+ recursion_depth.has_value()) {
1736
+ // Nonnull while active -- nullptr indicates logic error elsewhere in the
1737
+ // builder.
1738
+ ABSL_DCHECK(program_builder_.current() != nullptr);
1739
+ auto args = program_builder_.current()->ExtractRecursiveDependencies();
1740
+ SetRecursiveStep(
1741
+ CreateDirectFunctionStep(expr->id(), *call_expr, std::move(args),
1742
+ std::move(overloads)),
1743
+ *recursion_depth + 1);
1744
+ return;
1745
+ }
1746
+ AddStep(CreateFunctionStep(*call_expr, expr->id(), std::move(overloads)));
1747
+ }
1748
+
1749
+ // Add a step to the program, taking ownership. If successful, returns the
1750
+ // pointer to the step. Otherwise, returns nullptr.
1751
+ //
1752
+ // Note: the pointer is only guaranteed to stay valid until the parent
1753
+ // subexpression is finalized. Optimizers may modify the program plan which
1754
+ // may free the step at that point.
1755
+ ExpressionStep* AddStep(
1756
+ absl::StatusOr<std::unique_ptr<ExpressionStep>> step) {
1757
+ if (step.ok()) {
1758
+ return AddStep(*std::move(step));
1759
+ } else {
1760
+ SetProgressStatusIfError(step.status());
1761
+ }
1762
+ return nullptr;
1763
+ }
1764
+
1765
+ template <typename T>
1766
+ std::enable_if_t<std::is_base_of_v<ExpressionStep, T>, T*> AddStep(
1767
+ std::unique_ptr<T> step) {
1768
+ if (progress_status_.ok() && !PlanningSuppressed()) {
1769
+ return static_cast<T*>(program_builder_.AddStep(std::move(step)));
1770
+ }
1771
+ return nullptr;
1772
+ }
1773
+
1774
+ void SetRecursiveStep(std::unique_ptr<DirectExpressionStep> step, int depth) {
1775
+ if (!progress_status_.ok() || PlanningSuppressed()) {
1776
+ return;
1777
+ }
1778
+ if (program_builder_.current() == nullptr) {
1779
+ SetProgressStatusIfError(absl::InternalError(
1780
+ "CEL AST traversal out of order in flat_expr_builder."));
1781
+ return;
1782
+ }
1783
+ program_builder_.current()->set_recursive_program(std::move(step), depth);
1784
+ if (depth > max_recursion_depth_) {
1785
+ SetProgressStatusIfError(absl::InvalidArgumentError(
1786
+ absl::StrCat("Maximum recursion depth of ",
1787
+ options_.max_recursion_depth, " exceeded")));
1788
+ }
1789
+ }
1790
+
1791
+ void SetProgressStatusIfError(const absl::Status& status) {
1792
+ if (progress_status_.ok() && !status.ok()) {
1793
+ progress_status_ = status;
1794
+ }
1795
+ }
1796
+
1797
+ // Index of the next step to be inserted, in terms of the current
1798
+ // subexpression
1799
+ ProgramStepIndex GetCurrentIndex() const {
1800
+ // Nonnull while active -- nullptr indicates logic error in the builder.
1801
+ ABSL_DCHECK(program_builder_.current() != nullptr);
1802
+ return {static_cast<int>(program_builder_.current()->elements().size()),
1803
+ program_builder_.current()};
1804
+ }
1805
+
1806
+ CondVisitor* FindCondVisitor(const cel::Expr* expr) const {
1807
+ if (cond_visitor_stack_.empty()) {
1808
+ return nullptr;
1809
+ }
1810
+
1811
+ const auto& latest = cond_visitor_stack_.top();
1812
+
1813
+ return (latest.first == expr) ? latest.second.get() : nullptr;
1814
+ }
1815
+
1816
+ IndexManager& index_manager() { return index_manager_; }
1817
+
1818
+ size_t slot_count() const { return index_manager_.max_slot_count(); }
1819
+
1820
+ void AddOptimizer(std::unique_ptr<ProgramOptimizer> optimizer) {
1821
+ program_optimizers_.push_back(std::move(optimizer));
1822
+ }
1823
+
1824
+ // Tests the boolean predicate, and if false produces an InvalidArgumentError
1825
+ // which concatenates the error_message and any optional message_parts as the
1826
+ // error status message.
1827
+ template <typename... MP>
1828
+ bool ValidateOrError(bool valid_expression, absl::string_view error_message,
1829
+ MP... message_parts) {
1830
+ if (valid_expression) {
1831
+ return true;
1832
+ }
1833
+ SetProgressStatusIfError(absl::InvalidArgumentError(
1834
+ absl::StrCat(error_message, message_parts...)));
1835
+ return false;
1836
+ }
1837
+
1838
+ private:
1839
+ struct ComprehensionStackRecord {
1840
+ const cel::Expr* expr;
1841
+ const cel::ComprehensionExpr* comprehension;
1842
+ size_t iter_slot;
1843
+ size_t iter2_slot;
1844
+ size_t accu_slot;
1845
+ size_t slot_count;
1846
+ // -1 indicates this shouldn't be used.
1847
+ int subexpression;
1848
+ bool is_optimizable_list_append;
1849
+ bool is_optimizable_map_insert;
1850
+ bool is_optimizable_bind;
1851
+ bool iter_var_in_scope;
1852
+ bool iter_var2_in_scope;
1853
+ bool accu_var_in_scope;
1854
+ bool in_accu_init;
1855
+ std::unique_ptr<ComprehensionVisitor> visitor;
1856
+ };
1857
+
1858
+ struct BlockInfo {
1859
+ // True if we are currently visiting the `cel.@block` node or any of its
1860
+ // children.
1861
+ bool in = false;
1862
+ // Pointer to the `cel.@block` node.
1863
+ const cel::Expr* expr = nullptr;
1864
+ // Pointer to the `cel.@block` bindings, that is the first argument to the
1865
+ // function.
1866
+ const cel::Expr* bindings = nullptr;
1867
+ // Set of pointers to the elements of `bindings` above.
1868
+ absl::flat_hash_set<const cel::Expr*> bindings_set;
1869
+ // Pointer to the `cel.@block` bound expression, that is the second argument
1870
+ // to the function.
1871
+ const cel::Expr* bound = nullptr;
1872
+ // The number of entries in the `cel.@block`.
1873
+ size_t size = 0;
1874
+ // Starting slot index for `cel.@block`. We occupy he slot indices `index`
1875
+ // through `index + size + (var_size * 2)`.
1876
+ size_t index = 0;
1877
+ // The total number of slots needed for evaluating the bound expressions.
1878
+ size_t slot_count = 0;
1879
+ // The current slot index we are processing, any index references must be
1880
+ // less than this to be valid.
1881
+ size_t current_index = 0;
1882
+ // Pointer to the current `cel.@block` being processed, that is one of the
1883
+ // elements within the first argument.
1884
+ const cel::Expr* current_binding = nullptr;
1885
+ // Mapping between block indices and their subexpressions, fixed size with
1886
+ // exactly `size` elements. Unprocessed indices are set to `-1`.
1887
+ std::vector<int> subexpressions;
1888
+ };
1889
+
1890
+ bool PlanningSuppressed() const {
1891
+ return resume_from_suppressed_branch_ != nullptr;
1892
+ }
1893
+
1894
+ absl::Status MaybeExtractSubexpression(const cel::Expr* expr,
1895
+ ComprehensionStackRecord& record) {
1896
+ if (!record.is_optimizable_bind) {
1897
+ return absl::OkStatus();
1898
+ }
1899
+
1900
+ int index = program_builder_.ExtractSubexpression(expr);
1901
+ if (index == -1) {
1902
+ return absl::InternalError("Failed to extract subexpression");
1903
+ }
1904
+
1905
+ record.subexpression = index;
1906
+
1907
+ record.visitor->MarkAccuInitExtracted();
1908
+
1909
+ return absl::OkStatus();
1910
+ }
1911
+
1912
+ // Resolve the name of the message type being created and the names of set
1913
+ // fields.
1914
+ absl::StatusOr<std::pair<std::string, std::vector<std::string>>>
1915
+ ResolveCreateStructFields(const cel::StructExpr& create_struct_expr,
1916
+ int64_t expr_id) {
1917
+ absl::string_view ast_name = create_struct_expr.name();
1918
+
1919
+ std::optional<std::pair<std::string, cel::Type>> type;
1920
+ CEL_ASSIGN_OR_RETURN(type, resolver_.FindType(ast_name, expr_id));
1921
+
1922
+ if (!type.has_value()) {
1923
+ return absl::InvalidArgumentError(absl::StrCat(
1924
+ "Invalid struct creation: missing type info for '", ast_name, "'"));
1925
+ }
1926
+
1927
+ std::string resolved_name = std::move(type).value().first;
1928
+
1929
+ std::vector<std::string> fields;
1930
+ fields.reserve(create_struct_expr.fields().size());
1931
+ for (const auto& entry : create_struct_expr.fields()) {
1932
+ if (entry.name().empty()) {
1933
+ return absl::InvalidArgumentError("Struct field missing name");
1934
+ }
1935
+ if (!entry.has_value()) {
1936
+ return absl::InvalidArgumentError("Struct field missing value");
1937
+ }
1938
+ CEL_ASSIGN_OR_RETURN(auto field, type_provider_.FindStructTypeFieldByName(
1939
+ resolved_name, entry.name()));
1940
+ if (!field.has_value()) {
1941
+ return absl::InvalidArgumentError(
1942
+ absl::StrCat("Invalid message creation: field '", entry.name(),
1943
+ "' not found in '", resolved_name, "'"));
1944
+ }
1945
+ fields.push_back(entry.name());
1946
+ }
1947
+
1948
+ return std::make_pair(std::move(resolved_name), std::move(fields));
1949
+ }
1950
+
1951
+ CallHandlerResult HandleIndex(const cel::Expr& expr,
1952
+ const cel::CallExpr& call);
1953
+ CallHandlerResult HandleBlock(const cel::Expr& expr,
1954
+ const cel::CallExpr& call);
1955
+ CallHandlerResult HandleListAppend(const cel::Expr& expr,
1956
+ const cel::CallExpr& call);
1957
+ CallHandlerResult HandleNot(const cel::Expr& expr, const cel::CallExpr& call);
1958
+ CallHandlerResult HandleNotStrictlyFalse(const cel::Expr& expr,
1959
+ const cel::CallExpr& call);
1960
+
1961
+ CallHandlerResult HandleHeterogeneousEquality(const cel::Expr& expr,
1962
+ const cel::CallExpr& call,
1963
+ bool inequality);
1964
+
1965
+ CallHandlerResult HandleHeterogeneousEqualityIn(const cel::Expr& expr,
1966
+ const cel::CallExpr& call);
1967
+
1968
+ void MaybeResolveType(const cel::Expr& expr);
1969
+
1970
+ const Resolver& resolver_;
1971
+ const cel::TypeProvider& type_provider_;
1972
+ absl::Status progress_status_;
1973
+ absl::flat_hash_map<std::string, CallHandler> call_handlers_;
1974
+
1975
+ std::stack<std::pair<const cel::Expr*, std::unique_ptr<CondVisitor>>>
1976
+ cond_visitor_stack_;
1977
+
1978
+ // Tracks SELECT-...SELECT-IDENT chains.
1979
+ std::deque<std::pair<const cel::Expr*, std::string>> namespace_stack_;
1980
+
1981
+ // When multiple SELECT-...SELECT-IDENT chain is resolved as namespace, this
1982
+ // field is used as marker suppressing CelExpression creation for SELECTs.
1983
+ const cel::Expr* resolved_select_expr_;
1984
+
1985
+ const cel::RuntimeOptions& options_;
1986
+
1987
+ std::vector<ComprehensionStackRecord> comprehension_stack_;
1988
+ absl::flat_hash_set<const cel::Expr*> suppressed_branches_;
1989
+ const cel::Expr* resume_from_suppressed_branch_ = nullptr;
1990
+ std::vector<std::unique_ptr<ProgramOptimizer>> program_optimizers_;
1991
+ const absl::flat_hash_map<int64_t, cel::TypeSpec>& type_map_;
1992
+ absl::flat_hash_map<const cel::Expr*, cel::Type> resolved_types_;
1993
+ IssueCollector& issue_collector_;
1994
+
1995
+ ProgramBuilder& program_builder_;
1996
+ PlannerContext& extension_context_;
1997
+ IndexManager index_manager_;
1998
+
1999
+ bool enable_optional_types_;
2000
+ std::optional<FlatExprVisitor::BlockInfo> block_;
2001
+ int max_recursion_depth_ = 0;
2002
+ };
2003
+
2004
+ FlatExprVisitor::CallHandlerResult FlatExprVisitor::HandleIndex(
2005
+ const cel::Expr& expr, const cel::CallExpr& call_expr) {
2006
+ ABSL_DCHECK(call_expr.function() == cel::builtin::kIndex);
2007
+ if (!ValidateOrError(
2008
+ (call_expr.args().size() == 2 && !call_expr.has_target()) ||
2009
+ // TODO(uncreated-issue/79): A few clients use the index operator with a
2010
+ // target in custom ASTs.
2011
+ (call_expr.args().size() == 1 && call_expr.has_target()),
2012
+ "unexpected number of args for builtin index operator")) {
2013
+ return CallHandlerResult::kIntercepted;
2014
+ }
2015
+
2016
+ if (auto depth = RecursionEligible(); depth.has_value()) {
2017
+ auto args = ExtractRecursiveDependencies();
2018
+ if (args.size() != 2) {
2019
+ SetProgressStatusIfError(absl::InvalidArgumentError(
2020
+ "unexpected number of args for builtin index operator"));
2021
+ return CallHandlerResult::kIntercepted;
2022
+ }
2023
+ SetRecursiveStep(
2024
+ CreateDirectContainerAccessStep(std::move(args[0]), std::move(args[1]),
2025
+ enable_optional_types_, expr.id()),
2026
+ *depth + 1);
2027
+ return CallHandlerResult::kIntercepted;
2028
+ }
2029
+ AddStep(
2030
+ CreateContainerAccessStep(call_expr, expr.id(), enable_optional_types_));
2031
+ return CallHandlerResult::kIntercepted;
2032
+ }
2033
+
2034
+ FlatExprVisitor::CallHandlerResult FlatExprVisitor::HandleNot(
2035
+ const cel::Expr& expr, const cel::CallExpr& call_expr) {
2036
+ ABSL_DCHECK(call_expr.function() == cel::builtin::kNot);
2037
+
2038
+ if (!ValidateOrError(call_expr.args().size() == 1 && !call_expr.has_target(),
2039
+ "unexpected number of args for builtin not operator")) {
2040
+ return CallHandlerResult::kIntercepted;
2041
+ }
2042
+
2043
+ if (auto depth = RecursionEligible(); depth.has_value()) {
2044
+ auto args = ExtractRecursiveDependencies();
2045
+ if (args.size() != 1) {
2046
+ SetProgressStatusIfError(absl::InvalidArgumentError(
2047
+ "unexpected number of args for builtin not operator"));
2048
+ return CallHandlerResult::kIntercepted;
2049
+ }
2050
+ SetRecursiveStep(CreateDirectNotStep(std::move(args[0]), expr.id()),
2051
+ *depth + 1);
2052
+ return CallHandlerResult::kIntercepted;
2053
+ }
2054
+ AddStep(CreateNotStep(expr.id()));
2055
+ return CallHandlerResult::kIntercepted;
2056
+ }
2057
+
2058
+ FlatExprVisitor::CallHandlerResult FlatExprVisitor::HandleNotStrictlyFalse(
2059
+ const cel::Expr& expr, const cel::CallExpr& call_expr) {
2060
+ if (!ValidateOrError(call_expr.args().size() == 1 && !call_expr.has_target(),
2061
+ "unexpected number of args for builtin "
2062
+ "not_strictly_false operator")) {
2063
+ return CallHandlerResult::kIntercepted;
2064
+ }
2065
+
2066
+ if (auto depth = RecursionEligible(); depth.has_value()) {
2067
+ auto args = ExtractRecursiveDependencies();
2068
+ if (args.size() != 1) {
2069
+ SetProgressStatusIfError(
2070
+ absl::InvalidArgumentError("unexpected number of args for builtin "
2071
+ "@not_strictly_false operator"));
2072
+ return CallHandlerResult::kIntercepted;
2073
+ }
2074
+ SetRecursiveStep(
2075
+ CreateDirectNotStrictlyFalseStep(std::move(args[0]), expr.id()),
2076
+ *depth + 1);
2077
+ return CallHandlerResult::kIntercepted;
2078
+ }
2079
+ AddStep(CreateNotStrictlyFalseStep(expr.id()));
2080
+ return CallHandlerResult::kIntercepted;
2081
+ }
2082
+
2083
+ FlatExprVisitor::CallHandlerResult FlatExprVisitor::HandleBlock(
2084
+ const cel::Expr& expr, const cel::CallExpr& call_expr) {
2085
+ ABSL_DCHECK(call_expr.function() == kBlock);
2086
+ if (!block_.has_value() || block_->expr != &expr ||
2087
+ call_expr.args().size() != 2 || call_expr.has_target()) {
2088
+ SetProgressStatusIfError(
2089
+ absl::InvalidArgumentError("unexpected call to internal cel.@block"));
2090
+ return CallHandlerResult::kIntercepted;
2091
+ }
2092
+
2093
+ BlockInfo& block = *block_;
2094
+ block.in = false;
2095
+ index_manager().ReleaseSlots(block.slot_count);
2096
+
2097
+ // Check if eligible for recursion and update the plan if so.
2098
+ //
2099
+ // The first argument to @block is the list of initializers. These don't
2100
+ // generate a plan in the main program (they are tracked separately to support
2101
+ // lazy evaluation) so we only need to extract the second argument -- the body
2102
+ // of the block that uses the initializers.
2103
+ ProgramBuilder::Subexpression* body_subexpression =
2104
+ program_builder_.GetSubexpression(&call_expr.args()[1]);
2105
+
2106
+ if (options_.max_recursion_depth != 0 && body_subexpression != nullptr &&
2107
+ body_subexpression->IsRecursive() &&
2108
+ (options_.max_recursion_depth < 0 ||
2109
+ body_subexpression->recursive_program().depth <
2110
+ options_.max_recursion_depth)) {
2111
+ auto recursive_program = body_subexpression->ExtractRecursiveProgram();
2112
+ SetRecursiveStep(
2113
+ CreateDirectBlockStep(block.index, block.slot_count,
2114
+ std::move(recursive_program.step), expr.id()),
2115
+ recursive_program.depth + 1);
2116
+ return CallHandlerResult::kIntercepted;
2117
+ }
2118
+
2119
+ // Otherwise, iterative plan.
2120
+ if (block.slot_count > 0) {
2121
+ AddStep(CreateClearSlotsStep(block.index, block.slot_count, expr.id()));
2122
+ }
2123
+
2124
+ return CallHandlerResult::kIntercepted;
2125
+ }
2126
+
2127
+ FlatExprVisitor::CallHandlerResult FlatExprVisitor::HandleListAppend(
2128
+ const cel::Expr& expr, const cel::CallExpr& call_expr) {
2129
+ ABSL_DCHECK(call_expr.function() == cel::builtin::kAdd);
2130
+
2131
+ // Check to see if this is a special case of add that should really be
2132
+ // treated as a list append
2133
+ if (!comprehension_stack_.empty() &&
2134
+ comprehension_stack_.back().is_optimizable_list_append) {
2135
+ // Already checked that this is an optimizeable comprehension,
2136
+ // check that this is the correct list append node.
2137
+ const cel::ComprehensionExpr* comprehension =
2138
+ comprehension_stack_.back().comprehension;
2139
+ const cel::Expr& loop_step = comprehension->loop_step();
2140
+ // Macro loop_step for a map() will contain a list concat operation:
2141
+ // accu_var + [elem]
2142
+ if (&loop_step == &expr) {
2143
+ AddResolvedFunctionStep(&call_expr, &expr,
2144
+ cel::builtin::kRuntimeListAppend);
2145
+ return CallHandlerResult::kIntercepted;
2146
+ }
2147
+ // Macro loop_step for a filter() will contain a ternary:
2148
+ // filter ? accu_var + [elem] : accu_var
2149
+ if (loop_step.has_call_expr() &&
2150
+ loop_step.call_expr().function() == cel::builtin::kTernary &&
2151
+ loop_step.call_expr().args().size() == 3 &&
2152
+ &(loop_step.call_expr().args()[1]) == &expr) {
2153
+ AddResolvedFunctionStep(&call_expr, &expr,
2154
+ cel::builtin::kRuntimeListAppend);
2155
+ return CallHandlerResult::kIntercepted;
2156
+ }
2157
+ }
2158
+
2159
+ return CallHandlerResult::kNotIntercepted;
2160
+ }
2161
+
2162
+ FlatExprVisitor::CallHandlerResult FlatExprVisitor::HandleHeterogeneousEquality(
2163
+ const cel::Expr& expr, const cel::CallExpr& call, bool inequality) {
2164
+ if (!ValidateOrError(
2165
+ call.args().size() == 2 && !call.has_target(),
2166
+ "unexpected number of args for builtin equality operator")) {
2167
+ return CallHandlerResult::kIntercepted;
2168
+ }
2169
+
2170
+ if (auto depth = RecursionEligible(); depth.has_value()) {
2171
+ auto args = ExtractRecursiveDependencies();
2172
+ if (args.size() != 2) {
2173
+ SetProgressStatusIfError(absl::InvalidArgumentError(
2174
+ "unexpected number of args for builtin equality operator"));
2175
+ return CallHandlerResult::kIntercepted;
2176
+ }
2177
+ SetRecursiveStep(
2178
+ CreateDirectEqualityStep(std::move(args[0]), std::move(args[1]),
2179
+ inequality, expr.id()),
2180
+ *depth + 1);
2181
+ return CallHandlerResult::kIntercepted;
2182
+ }
2183
+ AddStep(CreateEqualityStep(inequality, expr.id()));
2184
+ return CallHandlerResult::kIntercepted;
2185
+ }
2186
+
2187
+ FlatExprVisitor::CallHandlerResult
2188
+ FlatExprVisitor::HandleHeterogeneousEqualityIn(const cel::Expr& expr,
2189
+ const cel::CallExpr& call) {
2190
+ if (!ValidateOrError(call.args().size() == 2 && !call.has_target(),
2191
+ "unexpected number of args for builtin 'in' operator")) {
2192
+ return CallHandlerResult::kIntercepted;
2193
+ }
2194
+
2195
+ if (auto depth = RecursionEligible(); depth.has_value()) {
2196
+ auto args = ExtractRecursiveDependencies();
2197
+ if (args.size() != 2) {
2198
+ SetProgressStatusIfError(absl::InvalidArgumentError(
2199
+ "unexpected number of args for builtin 'in' operator"));
2200
+ return CallHandlerResult::kIntercepted;
2201
+ }
2202
+ SetRecursiveStep(
2203
+ CreateDirectInStep(std::move(args[0]), std::move(args[1]), expr.id()),
2204
+ *depth + 1);
2205
+ return CallHandlerResult::kIntercepted;
2206
+ }
2207
+
2208
+ AddStep(CreateInStep(expr.id()));
2209
+ return CallHandlerResult::kIntercepted;
2210
+ }
2211
+
2212
+ void FlatExprVisitor::MaybeResolveType(const cel::Expr& expr) {
2213
+ // Try to resolve the type from the type map, but don't fail if it's not
2214
+ // there. This permits cases where the runtime type is compatible but not
2215
+ // the same as the type checked type.
2216
+ auto it = type_map_.find(expr.id());
2217
+ if (it == type_map_.end()) {
2218
+ return;
2219
+ }
2220
+ absl::StatusOr<cel::Type> type = cel::ConvertTypeSpecToType(
2221
+ it->second, extension_context_.type_reflector(),
2222
+ extension_context_.MutableArena());
2223
+ if (!type.ok()) {
2224
+ return;
2225
+ }
2226
+ SetResolvedType(expr, *type);
2227
+ }
2228
+
2229
+ void LogicalCondVisitor::PreVisit(const cel::Expr* expr) {
2230
+ visitor_->ValidateOrError(
2231
+ !expr->call_expr().has_target() && expr->call_expr().args().size() >= 2,
2232
+ "Invalid argument count for a binary function call.");
2233
+ }
2234
+
2235
+ void LogicalCondVisitor::PostVisitArg(int arg_num, const cel::Expr* expr) {
2236
+ if (visitor_->PlanRecursiveProgram()) {
2237
+ return;
2238
+ }
2239
+ const int last_arg_index = expr->call_expr().args().size() - 1;
2240
+ const size_t num_args = expr->call_expr().args().size();
2241
+ if (arg_num == last_arg_index) {
2242
+ if (is_or_) {
2243
+ visitor_->AddStep(CreateOrStep(num_args, expr->id()));
2244
+ } else {
2245
+ visitor_->AddStep(CreateAndStep(num_args, expr->id()));
2246
+ }
2247
+ if (short_circuiting_ && !jump_steps_.empty()) {
2248
+ for (auto& jump : jump_steps_) {
2249
+ visitor_->SetProgressStatusIfError(
2250
+ jump.set_target(visitor_->GetCurrentIndex()));
2251
+ }
2252
+ }
2253
+ }
2254
+ if (short_circuiting_ && arg_num < last_arg_index) {
2255
+ std::unique_ptr<JumpStepBase> jump_step =
2256
+ is_or_
2257
+ ? CreateCondJumpStep(true, {}, /*expected_stack_size=*/arg_num + 1,
2258
+ expr->id())
2259
+ : CreateCondJumpStep(false, {}, /*expected_stack_size=*/arg_num + 1,
2260
+ expr->id());
2261
+ ProgramStepIndex index = visitor_->GetCurrentIndex();
2262
+ if (JumpStepBase* jump_step_ptr = visitor_->AddStep(std::move(jump_step));
2263
+ jump_step_ptr) {
2264
+ jump_steps_.push_back(Jump(index, jump_step_ptr));
2265
+ }
2266
+ }
2267
+ }
2268
+
2269
+ void LogicalCondVisitor::PostVisit(const cel::Expr* expr) {
2270
+ if (visitor_->PlanRecursiveProgram()) {
2271
+ visitor_->MakeShortcircuitRecursive(expr, is_or_);
2272
+ }
2273
+ }
2274
+
2275
+ void OptionalOrCondVisitor::PreVisit(const cel::Expr* expr) {
2276
+ visitor_->ValidateOrError(
2277
+ expr->call_expr().has_target() && expr->call_expr().args().size() == 1,
2278
+ "Invalid argument count for or/orValue call.");
2279
+ }
2280
+
2281
+ void OptionalOrCondVisitor::PostVisitTarget(const cel::Expr* expr) {
2282
+ if (visitor_->PlanRecursiveProgram()) {
2283
+ return;
2284
+ }
2285
+ if (short_circuiting_) {
2286
+ // If first branch evaluation result is enough to determine output,
2287
+ // jump over the second branch and provide result of the first argument as
2288
+ // final output.
2289
+ // Retain a pointer to the jump step so we can update the target after
2290
+ // planning the second argument.
2291
+ std::unique_ptr<JumpStepBase> jump_step =
2292
+ CreateOptionalHasValueJumpStep(is_or_value_, expr->id());
2293
+ ProgramStepIndex index = visitor_->GetCurrentIndex();
2294
+ if (JumpStepBase* jump_step_ptr = visitor_->AddStep(std::move(jump_step));
2295
+ jump_step_ptr) {
2296
+ jump_steps_.push_back(Jump(index, jump_step_ptr));
2297
+ }
2298
+ }
2299
+ }
2300
+
2301
+ void OptionalOrCondVisitor::PostVisit(const cel::Expr* expr) {
2302
+ if (visitor_->PlanRecursiveProgram()) {
2303
+ visitor_->MakeOptionalShortcircuit(expr, is_or_value_);
2304
+ return;
2305
+ }
2306
+
2307
+ visitor_->AddStep(CreateOptionalOrStep(is_or_value_, expr->id()));
2308
+ if (short_circuiting_) {
2309
+ for (auto& jump : jump_steps_) {
2310
+ visitor_->SetProgressStatusIfError(
2311
+ jump.set_target(visitor_->GetCurrentIndex()));
2312
+ }
2313
+ }
2314
+ }
2315
+
2316
+ void TernaryCondVisitor::PreVisit(const cel::Expr* expr) {
2317
+ visitor_->ValidateOrError(
2318
+ !expr->call_expr().has_target() && expr->call_expr().args().size() == 3,
2319
+ "Invalid argument count for a ternary function call.");
2320
+ }
2321
+
2322
+ void TernaryCondVisitor::PostVisitArg(int arg_num, const cel::Expr* expr) {
2323
+ if (visitor_->PlanRecursiveProgram()) {
2324
+ return;
2325
+ }
2326
+ // Ternary operator "_?_:_" requires a special handing.
2327
+ // In contrary to regular function call, its execution affects the control
2328
+ // flow of the overall CEL expression.
2329
+ // If condition value (argument 0) is True, then control flow is unaffected
2330
+ // as it is passed to the first conditional branch. Then, at the end of this
2331
+ // branch, the jump is performed over the second conditional branch.
2332
+ // If condition value is False, then jump is performed and control is passed
2333
+ // to the beginning of the second conditional branch.
2334
+ // If condition value is Error, then jump is peformed to bypass both
2335
+ // conditional branches and provide Error as result of ternary operation.
2336
+
2337
+ // condition argument for ternary operator
2338
+ if (arg_num == 0) {
2339
+ // Jump in case of error or non-bool
2340
+ ProgramStepIndex error_jump_pos = visitor_->GetCurrentIndex();
2341
+ auto* error_jump =
2342
+ visitor_->AddStep(CreateBoolCheckJumpStep({}, expr->id()));
2343
+ if (error_jump) {
2344
+ error_jump_ = Jump(error_jump_pos, error_jump);
2345
+ }
2346
+
2347
+ // Jump to the second branch of execution
2348
+ // Value is to be removed from the stack.
2349
+ ProgramStepIndex cond_jump_pos = visitor_->GetCurrentIndex();
2350
+ auto* jump_to_second =
2351
+ visitor_->AddStep(CreateTernaryCondJumpStep({}, expr->id()));
2352
+ if (jump_to_second) {
2353
+ jump_to_second_ =
2354
+ Jump(cond_jump_pos, static_cast<JumpStepBase*>(jump_to_second));
2355
+ }
2356
+ } else if (arg_num == 1) {
2357
+ // Jump after the first and over the second branch of execution.
2358
+ // Value is to be removed from the stack.
2359
+ ProgramStepIndex jump_pos = visitor_->GetCurrentIndex();
2360
+ auto* jump_after_first = visitor_->AddStep(CreateJumpStep({}, expr->id()));
2361
+ if (!jump_after_first) {
2362
+ return;
2363
+ }
2364
+ jump_after_first_ = Jump(jump_pos, jump_after_first);
2365
+
2366
+ if (visitor_->ValidateOrError(
2367
+ jump_to_second_.exists(),
2368
+ "Error configuring ternary operator: jump_to_second_ is null")) {
2369
+ visitor_->SetProgressStatusIfError(
2370
+ jump_to_second_.set_target(visitor_->GetCurrentIndex()));
2371
+ }
2372
+ }
2373
+ // Code executed after traversing the final branch of execution
2374
+ // (arg_num == 2) is placed in PostVisitCall, to make this method less
2375
+ // clattered.
2376
+ }
2377
+
2378
+ void TernaryCondVisitor::PostVisit(const cel::Expr* expr) {
2379
+ if (visitor_->PlanRecursiveProgram()) {
2380
+ visitor_->MakeTernaryRecursive(expr);
2381
+ return;
2382
+ }
2383
+ // Determine and set jump offset in jump instruction.
2384
+ if (visitor_->ValidateOrError(
2385
+ error_jump_.exists(),
2386
+ "Error configuring ternary operator: error_jump_ is null")) {
2387
+ visitor_->SetProgressStatusIfError(
2388
+ error_jump_.set_target(visitor_->GetCurrentIndex()));
2389
+ }
2390
+ if (visitor_->ValidateOrError(
2391
+ jump_after_first_.exists(),
2392
+ "Error configuring ternary operator: jump_after_first_ is null")) {
2393
+ visitor_->SetProgressStatusIfError(
2394
+ jump_after_first_.set_target(visitor_->GetCurrentIndex()));
2395
+ }
2396
+ }
2397
+
2398
+ void ExhaustiveTernaryCondVisitor::PreVisit(const cel::Expr* expr) {
2399
+ visitor_->ValidateOrError(
2400
+ !expr->call_expr().has_target() && expr->call_expr().args().size() == 3,
2401
+ "Invalid argument count for a ternary function call.");
2402
+ }
2403
+
2404
+ void ExhaustiveTernaryCondVisitor::PostVisit(const cel::Expr* expr) {
2405
+ if (visitor_->PlanRecursiveProgram()) {
2406
+ visitor_->MakeTernaryRecursive(expr);
2407
+ return;
2408
+ }
2409
+ visitor_->AddStep(CreateTernaryStep(expr->id()));
2410
+ }
2411
+
2412
+ void ComprehensionVisitor::PreVisit(const cel::Expr* expr) {
2413
+ if (is_trivial_) {
2414
+ visitor_->SuppressBranch(&expr->comprehension_expr().iter_range());
2415
+ visitor_->SuppressBranch(&expr->comprehension_expr().loop_condition());
2416
+ visitor_->SuppressBranch(&expr->comprehension_expr().loop_step());
2417
+ }
2418
+ }
2419
+
2420
+ absl::Status ComprehensionVisitor::PostVisitArgDefault(
2421
+ cel::ComprehensionArg arg_num, const cel::Expr* expr) {
2422
+ if (visitor_->PlanRecursiveProgram()) {
2423
+ return absl::OkStatus();
2424
+ }
2425
+ switch (arg_num) {
2426
+ case cel::ITER_RANGE: {
2427
+ init_step_pos_ = visitor_->GetCurrentIndex();
2428
+ init_step_ = visitor_->AddStep(
2429
+ std::make_unique<ComprehensionInitStep>(expr->id()));
2430
+ break;
2431
+ }
2432
+ case cel::ACCU_INIT: {
2433
+ next_step_pos_ = visitor_->GetCurrentIndex();
2434
+ next_step_ = visitor_->AddStep(std::make_unique<ComprehensionNextStep>(
2435
+ iter_slot_, iter2_slot_, accu_slot_, expr->id()));
2436
+ break;
2437
+ }
2438
+ case cel::LOOP_CONDITION: {
2439
+ cond_step_pos_ = visitor_->GetCurrentIndex();
2440
+ cond_step_ = visitor_->AddStep(std::make_unique<ComprehensionCondStep>(
2441
+ iter_slot_, iter2_slot_, accu_slot_, short_circuiting_, expr->id()));
2442
+ break;
2443
+ }
2444
+ case cel::LOOP_STEP: {
2445
+ ProgramStepIndex index = visitor_->GetCurrentIndex();
2446
+ auto* jump_to_next = visitor_->AddStep(CreateJumpStep({}, expr->id()));
2447
+ if (!jump_to_next) {
2448
+ break;
2449
+ }
2450
+ Jump jump_helper(index, jump_to_next);
2451
+ visitor_->SetProgressStatusIfError(
2452
+ jump_helper.set_target(next_step_pos_));
2453
+
2454
+ // Set offsets jumping to the result step.
2455
+ if (cond_step_) {
2456
+ CEL_ASSIGN_OR_RETURN(
2457
+ int jump_from_cond,
2458
+ Jump::CalculateOffset(cond_step_pos_, visitor_->GetCurrentIndex()));
2459
+ cond_step_->set_jump_offset(jump_from_cond);
2460
+ }
2461
+
2462
+ if (next_step_) {
2463
+ CEL_ASSIGN_OR_RETURN(
2464
+ int jump_from_next,
2465
+ Jump::CalculateOffset(next_step_pos_, visitor_->GetCurrentIndex()));
2466
+
2467
+ next_step_->set_jump_offset(jump_from_next);
2468
+ }
2469
+ break;
2470
+ }
2471
+ case cel::RESULT: {
2472
+ if (!init_step_ || !next_step_ || !cond_step_) {
2473
+ // Encountered an error earlier. Can't determine where to jump.
2474
+ break;
2475
+ }
2476
+ visitor_->AddStep(CreateComprehensionFinishStep(accu_slot_, expr->id()));
2477
+ // Set offsets jumping past the result step in case of errors.
2478
+ CEL_ASSIGN_OR_RETURN(
2479
+ int jump_from_init,
2480
+ Jump::CalculateOffset(init_step_pos_, visitor_->GetCurrentIndex()));
2481
+ init_step_->set_error_jump_offset(jump_from_init);
2482
+
2483
+ CEL_ASSIGN_OR_RETURN(
2484
+ int jump_from_next,
2485
+ Jump::CalculateOffset(next_step_pos_, visitor_->GetCurrentIndex()));
2486
+ next_step_->set_error_jump_offset(jump_from_next);
2487
+
2488
+ CEL_ASSIGN_OR_RETURN(
2489
+ int jump_from_cond,
2490
+ Jump::CalculateOffset(cond_step_pos_, visitor_->GetCurrentIndex()));
2491
+ cond_step_->set_error_jump_offset(jump_from_cond);
2492
+ break;
2493
+ }
2494
+ }
2495
+ return absl::OkStatus();
2496
+ }
2497
+
2498
+ void ComprehensionVisitor::PostVisitArgTrivial(cel::ComprehensionArg arg_num,
2499
+ const cel::Expr* expr) {
2500
+ if (visitor_->PlanRecursiveProgram()) {
2501
+ return;
2502
+ }
2503
+ switch (arg_num) {
2504
+ case cel::ITER_RANGE: {
2505
+ break;
2506
+ }
2507
+ case cel::ACCU_INIT: {
2508
+ if (!accu_init_extracted_) {
2509
+ visitor_->AddStep(CreateAssignSlotAndPopStep(accu_slot_));
2510
+ }
2511
+ break;
2512
+ }
2513
+ case cel::LOOP_CONDITION: {
2514
+ break;
2515
+ }
2516
+ case cel::LOOP_STEP: {
2517
+ break;
2518
+ }
2519
+ case cel::RESULT: {
2520
+ visitor_->AddStep(CreateClearSlotStep(accu_slot_, expr->id()));
2521
+ break;
2522
+ }
2523
+ }
2524
+ }
2525
+
2526
+ void ComprehensionVisitor::PostVisit(const cel::Expr* expr) {
2527
+ if (is_trivial_) {
2528
+ visitor_->MaybeMakeBindRecursive(expr, &expr->comprehension_expr(),
2529
+ accu_slot_);
2530
+ return;
2531
+ }
2532
+ visitor_->MaybeMakeComprehensionRecursive(
2533
+ expr, &expr->comprehension_expr(), iter_slot_, iter2_slot_, accu_slot_);
2534
+ }
2535
+
2536
+ // Flattens the expression table into the end of the mainline expression vector
2537
+ // and returns an index to the individual sub expressions.
2538
+ std::vector<ExecutionPathView> FlattenExpressionTable(
2539
+ ProgramBuilder& program_builder, ExecutionPath& main) {
2540
+ std::vector<std::pair<size_t, size_t>> ranges;
2541
+ main = program_builder.FlattenMain();
2542
+ ranges.push_back(std::make_pair(0, main.size()));
2543
+
2544
+ std::vector<ExecutionPath> subexpressions =
2545
+ program_builder.FlattenSubexpressions();
2546
+ for (auto& subexpression : subexpressions) {
2547
+ ranges.push_back(std::make_pair(main.size(), subexpression.size()));
2548
+ absl::c_move(subexpression, std::back_inserter(main));
2549
+ }
2550
+
2551
+ std::vector<ExecutionPathView> subexpression_indexes;
2552
+ subexpression_indexes.reserve(ranges.size());
2553
+ for (const auto& range : ranges) {
2554
+ subexpression_indexes.push_back(
2555
+ absl::MakeSpan(main).subspan(range.first, range.second));
2556
+ }
2557
+ return subexpression_indexes;
2558
+ }
2559
+
2560
+ absl::Status CheckAstExtensions(
2561
+ const std::vector<cel::ExtensionSpec>& extensions) {
2562
+ for (const cel::ExtensionSpec& extension : extensions) {
2563
+ if (extension.id() == "cel_block" && extension.version().major() == 1) {
2564
+ // cel_block v1 is always supported.
2565
+ continue;
2566
+ }
2567
+
2568
+ // TODO(uncreated-issue/89): Add support for json field names.
2569
+ return absl::InvalidArgumentError(absl::StrCat(
2570
+ "unsupported CEL extension: ", extension.id(), "@",
2571
+ extension.version().major(), ".", extension.version().minor()));
2572
+ }
2573
+ return absl::OkStatus();
2574
+ }
2575
+
2576
+ } // namespace
2577
+
2578
+ absl::StatusOr<FlatExpression> FlatExprBuilder::CreateExpressionImpl(
2579
+ std::unique_ptr<Ast> ast, std::vector<RuntimeIssue>* issues) const {
2580
+ if (absl::StartsWith(container_, ".") || absl::EndsWith(container_, ".")) {
2581
+ return absl::InvalidArgumentError(
2582
+ absl::StrCat("Invalid expression container: '", container_, "'"));
2583
+ }
2584
+
2585
+ RuntimeIssue::Severity max_severity = options_.fail_on_warnings
2586
+ ? RuntimeIssue::Severity::kWarning
2587
+ : RuntimeIssue::Severity::kError;
2588
+ IssueCollector issue_collector(max_severity);
2589
+
2590
+ absl::StatusOr<std::vector<cel::ExtensionSpec>> runtime_extensions =
2591
+ ExtractAndValidateRuntimeExtensions(*ast);
2592
+
2593
+ if (!runtime_extensions.ok()) {
2594
+ CEL_RETURN_IF_ERROR(issue_collector.AddIssue(
2595
+ RuntimeIssue::CreateError(runtime_extensions.status())));
2596
+ }
2597
+
2598
+ auto status = CheckAstExtensions(*runtime_extensions);
2599
+ if (!status.ok()) {
2600
+ CEL_RETURN_IF_ERROR(
2601
+ issue_collector.AddIssue(RuntimeIssue::CreateError(status)));
2602
+ }
2603
+
2604
+ Resolver resolver(container_, function_registry_, type_registry_,
2605
+ GetTypeProvider(),
2606
+ options_.enable_qualified_type_identifiers);
2607
+
2608
+ std::shared_ptr<google::protobuf::Arena> arena;
2609
+ ProgramBuilder program_builder;
2610
+ PlannerContext extension_context(env_, resolver, options_, GetTypeProvider(),
2611
+ issue_collector, program_builder, arena);
2612
+
2613
+ for (const std::unique_ptr<AstTransform>& transform : ast_transforms_) {
2614
+ CEL_RETURN_IF_ERROR(transform->UpdateAst(extension_context, *ast));
2615
+ }
2616
+
2617
+ std::vector<std::unique_ptr<ProgramOptimizer>> optimizers;
2618
+ for (const ProgramOptimizerFactory& optimizer_factory : program_optimizers_) {
2619
+ CEL_ASSIGN_OR_RETURN(auto optimizer,
2620
+ optimizer_factory(extension_context, *ast));
2621
+ if (optimizer != nullptr) {
2622
+ optimizers.push_back(std::move(optimizer));
2623
+ }
2624
+ }
2625
+
2626
+ // These objects are expected to remain scoped to one build call -- references
2627
+ // to them shouldn't be persisted in any part of the result expression.
2628
+ FlatExprVisitor visitor(resolver, options_, std::move(optimizers),
2629
+ ast->type_map(), GetTypeProvider(), issue_collector,
2630
+ program_builder, extension_context,
2631
+ enable_optional_types_);
2632
+
2633
+ if (options_.max_recursion_depth == -1 || options_.max_recursion_depth > 0) {
2634
+ int depth_limit = options_.max_recursion_depth == -1
2635
+ ? std::numeric_limits<int>::max()
2636
+ : options_.max_recursion_depth;
2637
+ visitor.SetMaxRecursionDepth(depth_limit);
2638
+ }
2639
+
2640
+ cel::TraversalOptions opts;
2641
+ opts.use_comprehension_callbacks = true;
2642
+ AstTraverse(ast->root_expr(), visitor, opts);
2643
+
2644
+ if (!visitor.progress_status().ok()) {
2645
+ return visitor.progress_status();
2646
+ }
2647
+
2648
+ if (issues != nullptr) {
2649
+ (*issues) = issue_collector.ExtractIssues();
2650
+ }
2651
+
2652
+ ExecutionPath execution_path;
2653
+ std::vector<ExecutionPathView> subexpressions =
2654
+ FlattenExpressionTable(program_builder, execution_path);
2655
+
2656
+ return FlatExpression(std::move(execution_path), std::move(subexpressions),
2657
+ visitor.slot_count(), GetTypeProvider(), options_,
2658
+ std::move(arena));
2659
+ }
2660
+ const cel::TypeProvider& FlatExprBuilder::GetTypeProvider() const {
2661
+ return use_legacy_type_provider_
2662
+ ? static_cast<const cel::TypeProvider&>(
2663
+ *GetLegacyRuntimeTypeProvider(type_registry_))
2664
+ : GetRuntimeTypeProvider(type_registry_);
2665
+ }
2666
+
2667
+ } // namespace google::api::expr::runtime