re2 1.22.2 → 1.23.0

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 (495) hide show
  1. package/README.md +60 -4
  2. package/binding.gyp +5 -1
  3. package/lib/addon.cc +4 -0
  4. package/lib/new.cc +1 -246
  5. package/lib/pattern.cc +252 -0
  6. package/lib/pattern.h +10 -0
  7. package/lib/set.cc +777 -0
  8. package/lib/wrapped_re2_set.h +42 -0
  9. package/package.json +21 -9
  10. package/re2.d.ts +46 -9
  11. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
  12. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
  13. package/vendor/abseil-cpp/CMake/README.md +2 -2
  14. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  15. package/vendor/abseil-cpp/MODULE.bazel +6 -9
  16. package/vendor/abseil-cpp/README.md +6 -8
  17. package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
  18. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
  19. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
  20. package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
  21. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
  22. package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
  23. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
  24. package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
  25. package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
  26. package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
  27. package/vendor/abseil-cpp/absl/base/config.h +22 -129
  28. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
  29. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  30. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
  31. package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  32. package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  33. package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
  34. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  35. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
  36. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
  37. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
  38. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  39. package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
  40. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
  41. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
  42. package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
  43. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
  44. package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
  45. package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
  46. package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  47. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
  48. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  49. package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
  50. package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
  51. package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
  52. package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
  53. package/vendor/abseil-cpp/absl/base/options.h +3 -80
  54. package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
  55. package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
  56. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
  57. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
  58. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
  59. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  60. package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
  61. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  62. package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
  63. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
  64. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
  65. package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
  68. package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
  69. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
  70. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
  71. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
  72. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
  73. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
  74. package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
  75. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
  76. package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
  77. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  78. package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
  79. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  80. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
  81. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
  82. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
  83. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
  84. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
  87. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
  88. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
  89. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
  90. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
  91. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
  92. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
  93. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
  94. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
  95. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
  96. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  97. package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
  101. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
  102. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
  103. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
  104. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
  105. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
  106. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
  107. package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
  108. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
  109. package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
  110. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
  111. package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
  112. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
  113. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
  114. package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
  115. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
  116. package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
  117. package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
  118. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
  119. package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
  120. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
  121. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  122. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  123. package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  124. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
  125. package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
  126. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
  127. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
  128. package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  129. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  130. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  131. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  132. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  133. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
  134. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  135. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  136. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  137. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  138. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  139. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  140. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  141. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  142. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  143. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
  144. package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  145. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
  146. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  147. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
  148. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
  149. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  150. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  151. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
  152. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
  153. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  154. package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
  155. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  156. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
  157. package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
  158. package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  159. package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
  160. package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
  161. package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
  162. package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
  163. package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
  164. package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
  165. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
  166. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
  167. package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
  168. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
  169. package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
  170. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
  171. package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
  172. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
  173. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  174. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  175. package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
  176. package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
  177. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
  178. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
  179. package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
  180. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
  181. package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
  182. package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
  183. package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
  184. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
  185. package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
  186. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
  187. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
  188. package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
  189. package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
  190. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
  191. package/vendor/abseil-cpp/absl/log/check.h +2 -1
  192. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
  193. package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
  194. package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
  195. package/vendor/abseil-cpp/absl/log/globals.h +4 -5
  196. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
  197. package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  198. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
  199. package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
  200. package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  201. package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
  202. package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
  203. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  204. package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
  205. package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  206. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  207. package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
  208. package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
  209. package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
  210. package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
  211. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
  212. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  213. package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
  214. package/vendor/abseil-cpp/absl/log/log.h +48 -35
  215. package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
  216. package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
  217. package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
  218. package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
  219. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
  220. package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  221. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
  222. package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
  223. package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
  224. package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
  225. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  226. package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
  227. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
  228. package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
  229. package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
  230. package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
  231. package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
  232. package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
  233. package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
  234. package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
  235. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
  236. package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
  237. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
  238. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
  239. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
  240. package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
  241. package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  242. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
  243. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
  244. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  245. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
  246. package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
  247. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
  248. package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
  249. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  250. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
  251. package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
  252. package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  253. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
  254. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  255. package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
  256. package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
  257. package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
  258. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
  259. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  260. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
  261. package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
  262. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  263. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  264. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  265. package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
  266. package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
  267. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
  268. package/vendor/abseil-cpp/absl/random/random.h +88 -53
  269. package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  270. package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
  271. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  272. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  273. package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
  274. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
  275. package/vendor/abseil-cpp/absl/status/status.cc +4 -8
  276. package/vendor/abseil-cpp/absl/status/status.h +8 -8
  277. package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
  278. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
  279. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  280. package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
  281. package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
  282. package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
  283. package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
  284. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
  285. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
  286. package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
  287. package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
  288. package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
  289. package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
  290. package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
  291. package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
  292. package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
  293. package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
  294. package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
  295. package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  296. package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  297. package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
  298. package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
  299. package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
  300. package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
  301. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
  302. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
  303. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  304. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
  305. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
  306. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  307. package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  308. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
  309. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
  310. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
  311. package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
  312. package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
  313. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  314. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  315. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
  316. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  317. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
  318. package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  319. package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  320. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  321. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
  322. package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  323. package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  324. package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  325. package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
  326. package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
  327. package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
  328. package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
  329. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
  330. package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
  331. package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
  332. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
  333. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
  334. package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
  335. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
  336. package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
  337. package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
  338. package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
  339. package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
  340. package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
  341. package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
  342. package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
  343. package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
  344. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
  345. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
  346. package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
  347. package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
  348. package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
  349. package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
  350. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
  351. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
  352. package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  353. package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
  354. package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  355. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  356. package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  357. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  358. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
  359. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
  360. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  361. package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  362. package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  363. package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  364. package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
  365. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  366. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
  367. package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  368. package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
  369. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
  370. package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
  371. package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
  372. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
  373. package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
  374. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  375. package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
  376. package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
  377. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
  378. package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
  379. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
  380. package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
  381. package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
  382. package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
  383. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
  384. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  385. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  386. package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
  387. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
  388. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
  389. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
  390. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
  391. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  392. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
  393. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  394. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
  395. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
  396. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
  397. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
  398. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
  399. package/vendor/abseil-cpp/absl/time/time.h +24 -18
  400. package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
  401. package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
  402. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
  403. package/vendor/abseil-cpp/absl/types/any.h +9 -484
  404. package/vendor/abseil-cpp/absl/types/optional.h +7 -747
  405. package/vendor/abseil-cpp/absl/types/span.h +46 -19
  406. package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
  407. package/vendor/abseil-cpp/absl/types/variant.h +5 -784
  408. package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
  409. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
  410. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
  411. package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
  412. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
  413. package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
  414. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
  415. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
  416. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
  417. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
  418. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
  419. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  420. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
  421. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
  422. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
  423. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
  424. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
  425. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
  426. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
  427. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
  428. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
  429. package/vendor/re2/.bazelrc +4 -4
  430. package/vendor/re2/.bcr/metadata.template.json +16 -0
  431. package/vendor/re2/.bcr/presubmit.yml +57 -0
  432. package/vendor/re2/.bcr/source.template.json +5 -0
  433. package/vendor/re2/.github/bazel.sh +1 -7
  434. package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
  435. package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
  436. package/vendor/re2/.github/workflows/ci.yml +5 -6
  437. package/vendor/re2/.github/workflows/pages.yml +3 -3
  438. package/vendor/re2/.github/workflows/python.yml +29 -24
  439. package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
  440. package/vendor/re2/.github/workflows/release.yml +15 -4
  441. package/vendor/re2/BUILD.bazel +25 -0
  442. package/vendor/re2/CMakeLists.txt +100 -85
  443. package/vendor/re2/CONTRIBUTING.md +0 -1
  444. package/vendor/re2/MODULE.bazel +10 -10
  445. package/vendor/re2/Makefile +1 -1
  446. package/vendor/re2/README.md +259 -0
  447. package/vendor/re2/python/BUILD.bazel +8 -0
  448. package/vendor/re2/python/re2.py +1 -1
  449. package/vendor/re2/python/re2_test.py +6 -0
  450. package/vendor/re2/python/setup.py +3 -3
  451. package/vendor/re2/re2/bitmap256.cc +3 -4
  452. package/vendor/re2/re2/bitstate.cc +15 -10
  453. package/vendor/re2/re2/dfa.cc +1 -2
  454. package/vendor/re2/re2/parse.cc +3 -4
  455. package/vendor/re2/re2/prog.cc +1 -2
  456. package/vendor/re2/re2/prog.h +1 -0
  457. package/vendor/re2/re2/re2.cc +5 -0
  458. package/vendor/re2/re2/re2.h +9 -9
  459. package/vendor/re2/re2/set.cc +6 -0
  460. package/vendor/re2/re2/set.h +5 -0
  461. package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
  462. package/vendor/re2/re2/testing/re2_test.cc +8 -0
  463. package/vendor/re2/re2/testing/set_test.cc +5 -0
  464. package/vendor/re2/re2/walker-inl.h +1 -1
  465. package/vendor/abseil-cpp/WORKSPACE +0 -76
  466. package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
  467. package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
  468. package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  469. package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
  470. package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
  471. package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
  472. package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
  473. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
  474. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
  475. package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  476. package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
  477. package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
  478. package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
  479. package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
  480. package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
  481. package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  482. package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  483. package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  484. package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  485. package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
  486. package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
  487. package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
  488. package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
  489. package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
  490. package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
  491. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
  492. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
  493. package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
  494. package/vendor/re2/.github/workflows/pr.yml +0 -34
  495. package/vendor/re2/README +0 -47
@@ -0,0 +1,259 @@
1
+ # RE2, a regular expression library
2
+
3
+ RE2 is an efficient, principled regular expression library
4
+ that has been used in production at Google and many other places
5
+ since 2006.
6
+
7
+ _**Safety is RE2's primary goal.**_
8
+
9
+ RE2 was designed and implemented with an explicit goal of being able
10
+ to handle regular expressions from untrusted users without risk.
11
+ One of its primary guarantees is that the match time is linear in the
12
+ length of the input string. It was also written with production concerns in mind:
13
+ the parser, the compiler and the execution engines limit their memory usage
14
+ by working within a configurable budget—failing gracefully when exhausted—and
15
+ they avoid stack overflow by eschewing recursion.
16
+
17
+ It is not a goal to be faster than all other engines under all circumstances.
18
+ Although RE2 guarantees a running time that is asymptotically linear in
19
+ the length of the input, more complex expressions may incur larger constant factors;
20
+ longer expressions increase the overhead required to handle those expressions safely.
21
+ In a sense, RE2 is pessimistic where a backtracking engine is optimistic:
22
+ A backtracking engine tests each alternative sequentially, making it fast when the first alternative is common.
23
+ By contrast RE2 evaluates all alternatives in parallel, avoiding the performance penalty for the last alternative,
24
+ at the cost of some overhead. This pessimism is what makes RE2 secure.
25
+
26
+ It is also not a goal to implement all of the features offered by Perl, PCRE and other engines.
27
+ As a matter of principle, RE2 does not support constructs for which only backtracking solutions are known to exist.
28
+ Thus, backreferences and look-around assertions are not supported.
29
+
30
+ For more information, please refer to Russ Cox's articles on regular expression theory and practice:
31
+
32
+ * [Regular Expression Matching Can Be Simple And Fast](https://swtch.com/~rsc/regexp/regexp1.html)
33
+ * [Regular Expression Matching: the Virtual Machine Approach](https://swtch.com/~rsc/regexp/regexp2.html)
34
+ * [Regular Expression Matching in the Wild](https://swtch.com/~rsc/regexp/regexp3.html)
35
+
36
+ ### Syntax
37
+
38
+ In POSIX mode, RE2 accepts standard POSIX (egrep) syntax regular expressions.
39
+ In Perl mode, RE2 accepts most Perl operators. The only excluded ones are
40
+ those that require backtracking (and its potential for exponential runtime)
41
+ to implement. These include backreferences (submatching is still okay)
42
+ and generalized assertions.
43
+ The [Syntax wiki page](https://github.com/google/re2/wiki/Syntax)
44
+ documents the supported Perl-mode syntax in detail.
45
+ The default is Perl mode.
46
+
47
+ ### C++ API
48
+
49
+ RE2's native language is C++, although there are [ports and wrappers](#ports-and-wrappers) listed below.
50
+
51
+ #### Matching Interface
52
+
53
+ There are two basic operators:
54
+ `RE2::FullMatch` requires the regexp to match the entire input text, and
55
+ `RE2::PartialMatch` looks for a match for a substring of the input text,
56
+ returning the leftmost-longest match in POSIX mode and the
57
+ same match that Perl would have chosen in Perl mode.
58
+
59
+ Examples:
60
+
61
+ ```cpp
62
+ assert(RE2::FullMatch("hello", "h.*o"))
63
+ assert(!RE2::FullMatch("hello", "e"))
64
+
65
+ assert(RE2::PartialMatch("hello", "h.*o"))
66
+ assert(RE2::PartialMatch("hello", "e"))
67
+ ```
68
+
69
+ #### Submatch Extraction
70
+
71
+ Both matching functions take additional arguments in which submatches will be stored.
72
+ The argument can be a `string*`, or an integer type, or the type `absl::string_view*`.
73
+ (The `absl::string_view` type is very similar to the `std::string_view` type,
74
+ but for historical reasons, RE2 uses the former.)
75
+ A `string_view` is a pointer to the original input text, along with a count.
76
+ It behaves like a string but doesn't carry its own storage.
77
+ Like when using a pointer, when using a `string_view`
78
+ you must be careful not to use it once the original text has been deleted or gone out of scope.
79
+
80
+ Examples:
81
+
82
+ ```cpp
83
+ // Successful parsing.
84
+ int i;
85
+ string s;
86
+ assert(RE2::FullMatch("ruby:1234", "(\\w+):(\\d+)", &s, &i));
87
+ assert(s == "ruby");
88
+ assert(i == 1234);
89
+
90
+ // Fails: "ruby" cannot be parsed as an integer.
91
+ assert(!RE2::FullMatch("ruby", "(.+)", &i));
92
+
93
+ // Success; does not extract the number.
94
+ assert(RE2::FullMatch("ruby:1234", "(\\w+):(\\d+)", &s));
95
+
96
+ // Success; skips NULL argument.
97
+ assert(RE2::FullMatch("ruby:1234", "(\\w+):(\\d+)", (void*)NULL, &i));
98
+
99
+ // Fails: integer overflow keeps value from being stored in i.
100
+ assert(!RE2::FullMatch("ruby:123456789123", "(\\w+):(\\d+)", &s, &i));
101
+ ```
102
+
103
+ #### Pre-Compiled Regular Expressions
104
+
105
+ The examples above all recompile the regular expression on each call.
106
+ Instead, you can compile it once to an RE2 object and reuse that object for each call.
107
+
108
+ Example:
109
+ ```cpp
110
+ RE2 re("(\\w+):(\\d+)");
111
+ assert(re.ok()); // compiled; if not, see re.error();
112
+
113
+ assert(RE2::FullMatch("ruby:1234", re, &s, &i));
114
+ assert(RE2::FullMatch("ruby:1234", re, &s));
115
+ assert(RE2::FullMatch("ruby:1234", re, (void*)NULL, &i));
116
+ assert(!RE2::FullMatch("ruby:123456789123", re, &s, &i));
117
+ ```
118
+
119
+ #### Options
120
+
121
+ The constructor takes an optional second argument that can
122
+ be used to change RE2's default options.
123
+ For example, `RE2::Quiet` silences the error messages that are
124
+ usually printed when a regular expression fails to parse:
125
+
126
+ ```cpp
127
+ RE2 re("(ab", RE2::Quiet); // don't write to stderr for parser failure
128
+ assert(!re.ok()); // can check re.error() for details
129
+ ```
130
+
131
+ Other useful predefined options are `Latin1` (disable UTF-8) and `POSIX`
132
+ (use POSIX syntax and leftmost longest matching).
133
+
134
+ You can also declare your own `RE2::Options` object and then configure it as you like.
135
+ See the [header](https://github.com/google/re2/blob/main/re2/re2.h) for the full set of options.
136
+
137
+ #### Unicode Normalization
138
+
139
+ RE2 operates on Unicode code points: it makes no attempt at normalization.
140
+ For example, the regular expression /ü/ (U+00FC, u with diaeresis)
141
+ does not match the input "ü" (U+0075 U+0308, u followed by combining diaeresis).
142
+ Normalization is a long, involved topic.
143
+ The simplest solution, if you need such matches, is to normalize both the regular expressions
144
+ and the input in a preprocessing step before using RE2.
145
+ For more details on the general topic, see <https://www.unicode.org/reports/tr15/>.
146
+
147
+ #### Additional Tips and Tricks
148
+
149
+ For advanced usage, like constructing your own argument lists,
150
+ or using RE2 as a lexer, or parsing hex, octal, and C-radix numbers,
151
+ see [re2.h](https://github.com/google/re2/blob/main/re2/re2.h).
152
+
153
+ ### Installation
154
+
155
+ RE2 can be built and installed using GNU make, CMake, or Bazel.
156
+ The simplest installation instructions are:
157
+
158
+ make
159
+ make test
160
+ make benchmark
161
+ make install
162
+ make testinstall
163
+
164
+ Building RE2 requires a C++17 compiler and the [Abseil](https://github.com/abseil/abseil-cpp) library.
165
+ Building the tests and benchmarks requires
166
+ [GoogleTest](https://github.com/google/googletest)
167
+ and [Benchmark](https://github.com/google/benchmark).
168
+ To obtain those:
169
+
170
+ - Linux: `apt install libabsl-dev libgtest-dev libbenchmark-dev`
171
+ - macOS: `brew install abseil googletest google-benchmark pkg-config-wrapper`
172
+ - Windows: `vcpkg install abseil gtest benchmark` \
173
+ or `vcpkg add port abseil gtest benchmark`
174
+
175
+ Once those are installed, the build has to be able to find them.
176
+ If the standard Makefile has trouble, then switching to CMake can help:
177
+
178
+ rm -rf build
179
+ cmake -DRE2_TEST=ON -DRE2_BENCHMARK=ON -S . -B build
180
+ cd build
181
+ make
182
+ make test
183
+ make install
184
+
185
+ When using CMake, with benchmarks enabled, `make test` builds and runs test binaries
186
+ and builds a `regexp_benchmark` binary but does not run it.
187
+ If you don't need the tests or benchmarks at all, you can omit the corresponding `-D` arguments,
188
+ and then you don't need the GoogleTest or Benchmark dependencies either.
189
+
190
+ Another useful option is `-DRE2_USE_ICU=ON`, which adds a dependency on the
191
+ ICU Unicode library but also extends the list of property names available in the `\p` and `\P` patterns.
192
+
193
+ CMake can also be used to generate Visual Studio and Xcode projects, as well as
194
+ Cygwin, MinGW, and MSYS makefiles.
195
+
196
+ - Visual Studio users: You need Visual Studio 2019 or later.
197
+ - Cygwin users: You must run CMake from the Cygwin command line, not the Windows command line.
198
+
199
+ If you are adding RE2 to your own CMake project,
200
+ CMake has two ways to use a dependency: `add_subdirectory()`,
201
+ which is when the dependency's **_sources_** are in a subdirectory of your project;
202
+ and `find_package()`, which is when the dependency's
203
+ **_binaries_** have been built and installed somewhere on your system.
204
+ The Abseil documentation walks through the former [here](https://abseil.io/docs/cpp/quickstart-cmake)
205
+ versus the latter [here](https://abseil.io/docs/cpp/tools/cmake-installs).
206
+ Once you get Abseil working, getting RE2 working will be a very similar process and,
207
+ either way, `target_link_libraries(… re2::re2)` should Just Work™.
208
+
209
+ If you are using [Bazel](https://bazel.io), it will handle the dependencies for you,
210
+ although you still need to download Bazel,
211
+ which you can do with [Bazelisk](https://github.com/bazelbuild/bazelisk).
212
+
213
+ go install github.com/bazelbuild/bazelisk@latest
214
+ # or on mac: brew install bazelisk
215
+
216
+ bazelisk build :all
217
+ bazelisk test :all
218
+
219
+ If you are using RE2 from another project, you need to make sure you are
220
+ using at least C++17.
221
+ See the RE2 [.bazelrc](https://github.com/google/re2/blob/main/.bazelrc) file for an example.
222
+
223
+ ### Ports and Wrappers
224
+
225
+ RE2 is implemented in C++.
226
+
227
+ The official Python wrapper is [in the `python` directory](https://github.com/google/re2/tree/main/python)
228
+ and [published on PyPI as `google-re2`](https://pypi.org/project/google-re2/).
229
+ Note that there is also a PyPI `re2` but it is not by the RE2 authors and is unmaintained. Use `google-re2`.
230
+
231
+ There are also other unofficial wrappers:
232
+
233
+ - A C wrapper is at <https://github.com/marcomaggi/cre2/>.
234
+ - A D wrapper is at <https://github.com/ShigekiKarita/re2d/> and [on DUB](https://code.dlang.org/packages/re2d).
235
+ - An Erlang wrapper is at <https://github.com/dukesoferl/re2/> and [on Hex](https://hex.pm/packages/re2).
236
+ - An Inferno wrapper is at <https://github.com/powerman/inferno-re2/>.
237
+ - A Node.js wrapper is at <https://github.com/uhop/node-re2/> and [on NPM](https://www.npmjs.com/package/re2).
238
+ - An OCaml wrapper is at <https://github.com/janestreet/re2/> and [on OPAM](https://opam.ocaml.org/packages/re2/).
239
+ - A Perl wrapper is at <https://github.com/dgl/re-engine-RE2/> and [on CPAN](https://metacpan.org/pod/re::engine::RE2).
240
+ - An R wrapper is at <https://github.com/girishji/re2/> and [on CRAN](https://cran.r-project.org/web/packages/re2/index.html).
241
+ - A Ruby wrapper is at <https://github.com/mudge/re2/> and on RubyGems (rubygems.org).
242
+ - A WebAssembly wrapper is at <https://github.com/google/re2-wasm/> and on NPM (npmjs.com).
243
+
244
+ [RE2J](https://github.com/google/re2j) is a port of the RE2 C++ code to pure Java,
245
+ and [RE2JS](https://github.com/le0pard/re2js) is a port of RE2J to JavaScript.
246
+
247
+ The [Go `regexp` package](https://go.dev/pkg/regexp)
248
+ and [Rust `regex` crate](https://docs.rs/regex)
249
+ do not share code with RE2, but they follow the same principles,
250
+ accept the same syntax, and provide the same efficiency guarantees.
251
+
252
+ ### Contact
253
+
254
+ The [issue tracker](https://github.com/google/re2/issues) is the best place for discussions.
255
+
256
+ There is a [mailing list](https://groups.google.com/group/re2-dev) for keeping up with code changes.
257
+
258
+ Please read the [contribution guide](https://github.com/google/re2/wiki/Contribute) before sending changes.
259
+ In particular, note that RE2 does not use GitHub pull requests.
@@ -70,3 +70,11 @@ platform(
70
70
  "@platforms//os:windows",
71
71
  ],
72
72
  )
73
+
74
+ platform(
75
+ name = "arm64_windows",
76
+ constraint_values = [
77
+ "@platforms//cpu:arm64",
78
+ "@platforms//os:windows",
79
+ ],
80
+ )
@@ -64,7 +64,7 @@ def compile(pattern, options=None):
64
64
  if options:
65
65
  raise error('pattern is already compiled, so '
66
66
  'options may not be specified')
67
- pattern = pattern._pattern
67
+ return pattern
68
68
  options = options or Options()
69
69
  values = tuple(getattr(options, name) for name in Options.NAMES)
70
70
  return _Regexp._make(pattern, values)
@@ -315,6 +315,12 @@ class Re2RegexpTest(ReRegexpTest):
315
315
  re2.purge()
316
316
  self.assertEqual(re2._Regexp._make.cache_info().currsize, 0)
317
317
 
318
+ def test_options(self):
319
+ opt = re2.Options()
320
+ opt.case_sensitive = False
321
+ r = re2.compile('test', opt)
322
+ self.assertIsNotNone(r.search('TEST'))
323
+ self.assertIsNotNone(re2.search(r, 'TEST'))
318
324
 
319
325
  class Re2EscapeTest(parameterized.TestCase):
320
326
  """Contains tests that apply to the re2 module only.
@@ -129,7 +129,7 @@ try:
129
129
 
130
130
  setuptools.setup(
131
131
  name='google-re2',
132
- version='1.1.20240702',
132
+ version='1.1.20251105',
133
133
  description='RE2 Python bindings',
134
134
  long_description=long_description,
135
135
  long_description_content_type='text/plain',
@@ -144,11 +144,11 @@ try:
144
144
  'Intended Audience :: Developers',
145
145
  'License :: OSI Approved :: BSD License',
146
146
  'Programming Language :: C++',
147
- 'Programming Language :: Python :: 3.8',
147
+ 'Programming Language :: Python :: 3.9',
148
148
  ],
149
149
  options=options(),
150
150
  cmdclass={'build_ext': BuildExt},
151
- python_requires='~=3.8',
151
+ python_requires='~=3.9',
152
152
  )
153
153
  except:
154
154
  raise
@@ -6,7 +6,6 @@
6
6
 
7
7
  #include <stdint.h>
8
8
 
9
- #include "absl/base/attributes.h"
10
9
  #include "absl/log/absl_check.h"
11
10
 
12
11
  namespace re2 {
@@ -27,15 +26,15 @@ int Bitmap256::FindNextSetBit(int c) const {
27
26
  case 1:
28
27
  if (words_[1] != 0)
29
28
  return (1 * 64) + FindLSBSet(words_[1]);
30
- ABSL_FALLTHROUGH_INTENDED;
29
+ [[fallthrough]];
31
30
  case 2:
32
31
  if (words_[2] != 0)
33
32
  return (2 * 64) + FindLSBSet(words_[2]);
34
- ABSL_FALLTHROUGH_INTENDED;
33
+ [[fallthrough]];
35
34
  case 3:
36
35
  if (words_[3] != 0)
37
36
  return (3 * 64) + FindLSBSet(words_[3]);
38
- ABSL_FALLTHROUGH_INTENDED;
37
+ [[fallthrough]];
39
38
  default:
40
39
  return -1;
41
40
  }
@@ -49,7 +49,7 @@ class BitState {
49
49
  bool longest, absl::string_view* submatch, int nsubmatch);
50
50
 
51
51
  private:
52
- inline bool ShouldVisit(int id, const char* p);
52
+ static inline bool ShouldVisit(absl::string_view text, uint64_t* visited, uint16_t id, const char* p);
53
53
  void Push(int id, const char* p);
54
54
  void GrowStack();
55
55
  bool TrySearch(int id, const char* p);
@@ -85,16 +85,19 @@ BitState::BitState(Prog* prog)
85
85
  njob_(0) {
86
86
  }
87
87
 
88
- // Given id, which *must* be a list head, we can look up its list ID.
89
- // Then the question is: Should the search visit the (list ID, p) pair?
88
+ // Given the text being searched and current visited state,
89
+ // as well as a list ID, should the search visit the (list ID, p) pair?
90
90
  // If so, remember that it was visited so that the next time,
91
91
  // we don't repeat the visit.
92
- bool BitState::ShouldVisit(int id, const char* p) {
93
- int n = prog_->list_heads()[id] * static_cast<int>(text_.size()+1) +
94
- static_cast<int>(p-text_.data());
95
- if (visited_[n/kVisitedBits] & (uint64_t{1} << (n & (kVisitedBits-1))))
92
+ // We pass text and visited to this as a static method so that the
93
+ // caller can do those loads once instead of this code dereferencing
94
+ // them multiple times.
95
+ bool BitState::ShouldVisit(absl::string_view text, uint64_t* visited, uint16_t list_id, const char* p) {
96
+ int n = list_id * static_cast<int>(text.size()+1) +
97
+ static_cast<int>(p-text.data());
98
+ if (visited[n/kVisitedBits] & (uint64_t{1} << (n & (kVisitedBits-1))))
96
99
  return false;
97
- visited_[n/kVisitedBits] |= uint64_t{1} << (n & (kVisitedBits-1));
100
+ visited[n/kVisitedBits] |= uint64_t{1} << (n & (kVisitedBits-1));
98
101
  return true;
99
102
  }
100
103
 
@@ -140,10 +143,12 @@ void BitState::Push(int id, const char* p) {
140
143
  bool BitState::TrySearch(int id0, const char* p0) {
141
144
  bool matched = false;
142
145
  const char* end = text_.data() + text_.size();
146
+ uint16_t* list_heads = prog_->list_heads();
147
+ uint64_t* visited = visited_.data();
143
148
  njob_ = 0;
144
149
  // Push() no longer checks ShouldVisit(),
145
150
  // so we must perform the check ourselves.
146
- if (ShouldVisit(id0, p0))
151
+ if (ShouldVisit(text_, visited, list_heads[id0], p0))
147
152
  Push(id0, p0);
148
153
  while (njob_ > 0) {
149
154
  // Pop job off stack.
@@ -237,7 +242,7 @@ bool BitState::TrySearch(int id0, const char* p0) {
237
242
  // Sanity check: id is the head of its list, which must
238
243
  // be the case if id-1 is the last of *its* list. :)
239
244
  ABSL_DCHECK(id == 0 || prog_->inst(id-1)->last());
240
- if (ShouldVisit(id, p))
245
+ if (ShouldVisit(text_, visited, list_heads[id], p))
241
246
  goto Loop;
242
247
  break;
243
248
 
@@ -34,7 +34,6 @@
34
34
  #include <utility>
35
35
  #include <vector>
36
36
 
37
- #include "absl/base/attributes.h"
38
37
  #include "absl/base/call_once.h"
39
38
  #include "absl/base/thread_annotations.h"
40
39
  #include "absl/container/flat_hash_map.h"
@@ -650,7 +649,7 @@ DFA::State* DFA::WorkqToCachedState(Workq* q, Workq* mq, uint32_t flag) {
650
649
  absl::FPrintF(stderr, " -> FullMatchState\n");
651
650
  return FullMatchState;
652
651
  }
653
- ABSL_FALLTHROUGH_INTENDED;
652
+ [[fallthrough]];
654
653
  default:
655
654
  // Record iff id is the head of its list, which must
656
655
  // be the case if id-1 is the last of *its* list. :)
@@ -24,7 +24,6 @@
24
24
  #include <string>
25
25
  #include <vector>
26
26
 
27
- #include "absl/base/attributes.h"
28
27
  #include "absl/base/macros.h"
29
28
  #include "absl/log/absl_log.h"
30
29
  #include "absl/strings/ascii.h"
@@ -304,7 +303,7 @@ Rune ApplyFold(const CaseFold* f, Rune r) {
304
303
  case EvenOddSkip: // even <-> odd but only applies to every other
305
304
  if ((r - f->lo) % 2)
306
305
  return r;
307
- ABSL_FALLTHROUGH_INTENDED;
306
+ [[fallthrough]];
308
307
  case EvenOdd: // even <-> odd
309
308
  if (r%2 == 0)
310
309
  return r + 1;
@@ -313,7 +312,7 @@ Rune ApplyFold(const CaseFold* f, Rune r) {
313
312
  case OddEvenSkip: // odd <-> even but only applies to every other
314
313
  if ((r - f->lo) % 2)
315
314
  return r;
316
- ABSL_FALLTHROUGH_INTENDED;
315
+ [[fallthrough]];
317
316
  case OddEven: // odd <-> even
318
317
  if (r%2 == 1)
319
318
  return r + 1;
@@ -1525,7 +1524,7 @@ static bool ParseEscape(absl::string_view* s, Rune* rp,
1525
1524
  // Single non-zero octal digit is a backreference; not supported.
1526
1525
  if (s->empty() || (*s)[0] < '0' || (*s)[0] > '7')
1527
1526
  goto BadEscape;
1528
- ABSL_FALLTHROUGH_INTENDED;
1527
+ [[fallthrough]];
1529
1528
  case '0':
1530
1529
  // consume up to three octal digits; already have one.
1531
1530
  code = c - '0';
@@ -15,7 +15,6 @@
15
15
  #include <utility>
16
16
  #include <vector>
17
17
 
18
- #include "absl/base/attributes.h"
19
18
  #include "absl/log/absl_check.h"
20
19
  #include "absl/log/absl_log.h"
21
20
  #include "absl/strings/str_format.h"
@@ -820,7 +819,7 @@ void Prog::EmitList(int root, SparseArray<int>* rootmap,
820
819
  flat->back().set_opcode(kInstAltMatch);
821
820
  flat->back().set_out(static_cast<int>(flat->size()));
822
821
  flat->back().out1_ = static_cast<uint32_t>(flat->size())+1;
823
- ABSL_FALLTHROUGH_INTENDED;
822
+ [[fallthrough]];
824
823
 
825
824
  case kInstAlt:
826
825
  stk->push_back(ip->out1());
@@ -11,6 +11,7 @@
11
11
 
12
12
  #include <stdint.h>
13
13
 
14
+ #include <cstring>
14
15
  #include <functional>
15
16
  #include <string>
16
17
  #include <type_traits>
@@ -143,6 +143,11 @@ static std::string trunc(absl::string_view pattern) {
143
143
 
144
144
 
145
145
  RE2::RE2(const char* pattern) {
146
+ // If absl::string_view becomes an alias for std::string_view,
147
+ // it will stop allowing NULL to be converted.
148
+ // Handle NULL explicitly to keep callers working no matter what.
149
+ if (pattern == NULL)
150
+ pattern = "";
146
151
  Init(pattern, DefaultOptions);
147
152
  }
148
153
 
@@ -87,7 +87,7 @@
87
87
  // ABSL_CHECK(RE2::FullMatch("ruby:1234", "(\\w+):(\\d+)", &s, &i));
88
88
  //
89
89
  // Example: extracts "ruby" into "s" and no value into "i"
90
- // absl::optional<int> i;
90
+ // std::optional<int> i;
91
91
  // std::string s;
92
92
  // ABSL_CHECK(RE2::FullMatch("ruby", "(\\w+)(?::(\\d+))?", &s, &i));
93
93
  //
@@ -213,13 +213,13 @@
213
213
 
214
214
  #include <algorithm>
215
215
  #include <map>
216
+ #include <optional>
216
217
  #include <string>
217
218
  #include <type_traits>
218
219
  #include <vector>
219
220
 
220
221
  #include "absl/base/call_once.h"
221
222
  #include "absl/strings/string_view.h"
222
- #include "absl/types/optional.h"
223
223
  #include "re2/stringpiece.h"
224
224
 
225
225
  #if defined(__APPLE__)
@@ -385,7 +385,7 @@ class RE2 {
385
385
  // type, or one of:
386
386
  // std::string (matched piece is copied to string)
387
387
  // absl::string_view (string_view is mutated to point to matched piece)
388
- // absl::optional<T> (T is a supported numeric or string type as above)
388
+ // std::optional<T> (T is a supported numeric or string type as above)
389
389
  // T ("bool T::ParseFrom(const char*, size_t)" must exist)
390
390
  // (void*)NULL (the corresponding matched sub-pattern is not copied)
391
391
  //
@@ -406,7 +406,7 @@ class RE2 {
406
406
  // int number;
407
407
  // RE2::FullMatch("abc", "[a-z]+(\\d+)?", &number);
408
408
  //
409
- // Use absl::optional<int> instead to handle this case correctly.
409
+ // Use std::optional<int> instead to handle this case correctly.
410
410
  template <typename... A>
411
411
  static bool FullMatch(absl::string_view text, const RE2& re, A&&... a) {
412
412
  return Apply(FullMatchN, text, re, Arg(std::forward<A>(a))...);
@@ -842,12 +842,12 @@ template <> struct Parse4ary<unsigned long long> : public std::true_type {};
842
842
  template <typename T>
843
843
  bool Parse(const char* str, size_t n, T* dest, int radix);
844
844
 
845
- // Support absl::optional<T> for all T with a stock parser.
846
- template <typename T> struct Parse3ary<absl::optional<T>> : public Parse3ary<T> {};
847
- template <typename T> struct Parse4ary<absl::optional<T>> : public Parse4ary<T> {};
845
+ // Support std::optional<T> for all T with a stock parser.
846
+ template <typename T> struct Parse3ary<std::optional<T>> : public Parse3ary<T> {};
847
+ template <typename T> struct Parse4ary<std::optional<T>> : public Parse4ary<T> {};
848
848
 
849
849
  template <typename T>
850
- bool Parse(const char* str, size_t n, absl::optional<T>* dest) {
850
+ bool Parse(const char* str, size_t n, std::optional<T>* dest) {
851
851
  if (str == NULL) {
852
852
  if (dest != NULL)
853
853
  dest->reset();
@@ -863,7 +863,7 @@ bool Parse(const char* str, size_t n, absl::optional<T>* dest) {
863
863
  }
864
864
 
865
865
  template <typename T>
866
- bool Parse(const char* str, size_t n, absl::optional<T>* dest, int radix) {
866
+ bool Parse(const char* str, size_t n, std::optional<T>* dest, int radix) {
867
867
  if (str == NULL) {
868
868
  if (dest != NULL)
869
869
  dest->reset();
@@ -55,6 +55,12 @@ RE2::Set& RE2::Set::operator=(Set&& other) {
55
55
  return *this;
56
56
  }
57
57
 
58
+ int RE2::Set::Size() const {
59
+ if (!compiled_)
60
+ return static_cast<int>(elem_.size());
61
+ return size_;
62
+ }
63
+
58
64
  int RE2::Set::Add(absl::string_view pattern, std::string* error) {
59
65
  if (compiled_) {
60
66
  ABSL_LOG(DFATAL) << "RE2::Set::Add() called after compiling";
@@ -53,6 +53,10 @@ class RE2::Set {
53
53
  // the error message from the parser.
54
54
  int Add(absl::string_view pattern, std::string* error);
55
55
 
56
+ // Returns the number of patterns in the set.
57
+ // Can be called before or after Compile().
58
+ int Size() const;
59
+
56
60
  // Compiles the set in preparation for matching.
57
61
  // Returns false if the compiler runs out of memory.
58
62
  // Add() must not be called again after Compile().
@@ -62,6 +66,7 @@ class RE2::Set {
62
66
  // Returns true if text matches at least one of the regexps in the set.
63
67
  // Fills v (if not NULL) with the indices of the matching regexps.
64
68
  // Callers must not expect v to be sorted.
69
+ // The indices are in the half-open interval [0, Size()).
65
70
  bool Match(absl::string_view text, std::vector<int>* v) const;
66
71
 
67
72
  // As above, but populates error_info (if not NULL) when none of the regexps
@@ -9,10 +9,10 @@
9
9
 
10
10
  #include <stdint.h>
11
11
  #include <string.h>
12
+ #include <optional>
12
13
 
13
14
  #include "absl/base/macros.h"
14
15
  #include "absl/log/absl_log.h"
15
- #include "absl/types/optional.h"
16
16
  #include "gtest/gtest.h"
17
17
  #include "re2/re2.h"
18
18
 
@@ -158,7 +158,7 @@ TEST(RE2ArgTest, ParseFromTest) {
158
158
  }
159
159
 
160
160
  TEST(RE2ArgTest, OptionalDoubleTest) {
161
- absl::optional<double> opt;
161
+ std::optional<double> opt;
162
162
  RE2::Arg arg(&opt);
163
163
  EXPECT_TRUE(arg.Parse(NULL, 0));
164
164
  EXPECT_FALSE(opt.has_value());
@@ -169,7 +169,7 @@ TEST(RE2ArgTest, OptionalDoubleTest) {
169
169
  }
170
170
 
171
171
  TEST(RE2ArgTest, OptionalIntWithCRadixTest) {
172
- absl::optional<int> opt;
172
+ std::optional<int> opt;
173
173
  RE2::Arg arg = RE2::CRadix(&opt);
174
174
  EXPECT_TRUE(arg.Parse(NULL, 0));
175
175
  EXPECT_FALSE(opt.has_value());
@@ -1688,4 +1688,12 @@ TEST(RE2, Issue477) {
1688
1688
  ASSERT_EQ(s, "\x61\x63");
1689
1689
  }
1690
1690
 
1691
+ TEST(RE2, InitNULL) {
1692
+ // RE2::RE2 accepts NULL. Make sure it keeps doing that.
1693
+ RE2 re(NULL);
1694
+ ASSERT_TRUE(re.ok());
1695
+ ASSERT_TRUE(RE2::FullMatch("", re));
1696
+ ASSERT_TRUE(RE2::FullMatch("", NULL));
1697
+ }
1698
+
1691
1699
  } // namespace re2
@@ -17,10 +17,15 @@ namespace re2 {
17
17
  TEST(Set, Unanchored) {
18
18
  RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED);
19
19
 
20
+ ASSERT_EQ(s.Size(), 0);
20
21
  ASSERT_EQ(s.Add("foo", NULL), 0);
22
+ ASSERT_EQ(s.Size(), 1);
21
23
  ASSERT_EQ(s.Add("(", NULL), -1);
24
+ ASSERT_EQ(s.Size(), 1);
22
25
  ASSERT_EQ(s.Add("bar", NULL), 1);
26
+ ASSERT_EQ(s.Size(), 2);
23
27
  ASSERT_EQ(s.Compile(), true);
28
+ ASSERT_EQ(s.Size(), 2);
24
29
 
25
30
  ASSERT_EQ(s.Match("foobar", NULL), true);
26
31
  ASSERT_EQ(s.Match("fooba", NULL), true);
@@ -192,7 +192,7 @@ template<typename T> T Regexp::Walker<T>::WalkInternal(Regexp* re, T top_arg,
192
192
  s->child_args = &s->child_arg;
193
193
  else if (re->nsub_ > 1)
194
194
  s->child_args = new T[re->nsub_];
195
- ABSL_FALLTHROUGH_INTENDED;
195
+ [[fallthrough]];
196
196
  }
197
197
  default: {
198
198
  if (re->nsub_ > 0) {