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,71 @@
1
+ // Copyright 2025 The Abseil Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ // -----------------------------------------------------------------------------
16
+ // File: internal/iterator_traits.h
17
+ // -----------------------------------------------------------------------------
18
+ //
19
+ // Helpers for querying traits of iterators, for implementing containers, etc.
20
+
21
+ #ifndef ABSL_BASE_INTERNAL_ITERATOR_TRAITS_H_
22
+ #define ABSL_BASE_INTERNAL_ITERATOR_TRAITS_H_
23
+
24
+ #include <iterator>
25
+ #include <type_traits>
26
+
27
+ #include "absl/base/config.h"
28
+ #include "absl/meta/type_traits.h"
29
+
30
+ namespace absl {
31
+ ABSL_NAMESPACE_BEGIN
32
+ namespace base_internal {
33
+
34
+ template <typename Iterator, typename = void>
35
+ struct IteratorCategory {};
36
+
37
+ template <typename Iterator>
38
+ struct IteratorCategory<
39
+ Iterator,
40
+ absl::void_t<typename std::iterator_traits<Iterator>::iterator_category>> {
41
+ using type = typename std::iterator_traits<Iterator>::iterator_category;
42
+ };
43
+
44
+ template <typename Iterator, typename = void>
45
+ struct IteratorConceptImpl : IteratorCategory<Iterator> {};
46
+
47
+ template <typename Iterator>
48
+ struct IteratorConceptImpl<
49
+ Iterator,
50
+ absl::void_t<typename std::iterator_traits<Iterator>::iterator_concept>> {
51
+ using type = typename std::iterator_traits<Iterator>::iterator_concept;
52
+ };
53
+
54
+ // The newer `std::iterator_traits<Iterator>::iterator_concept` if available,
55
+ // else `std::iterator_traits<Iterator>::iterator_category`.
56
+ template <typename Iterator>
57
+ using IteratorConcept = typename IteratorConceptImpl<Iterator>::type;
58
+
59
+ template <typename IteratorTag, typename Iterator>
60
+ using IsAtLeastIterator =
61
+ std::is_convertible<IteratorConcept<Iterator>, IteratorTag>;
62
+
63
+ template <typename Iterator>
64
+ using IsAtLeastForwardIterator =
65
+ IsAtLeastIterator<std::forward_iterator_tag, Iterator>;
66
+
67
+ } // namespace base_internal
68
+ ABSL_NAMESPACE_END
69
+ } // namespace absl
70
+
71
+ #endif // ABSL_BASE_INTERNAL_ITERATOR_TRAITS_H_
@@ -0,0 +1,85 @@
1
+ // Copyright 2025 The Abseil Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include "absl/base/internal/iterator_traits.h"
16
+
17
+ #include <forward_list>
18
+ #include <iterator>
19
+ #include <list>
20
+ #include <vector>
21
+
22
+ #include "gtest/gtest.h"
23
+ #include "absl/base/config.h"
24
+ #include "absl/base/internal/iterator_traits_test_helper.h"
25
+
26
+ namespace absl {
27
+ ABSL_NAMESPACE_BEGIN
28
+ namespace base_internal {
29
+ namespace {
30
+
31
+ TEST(IsAtLeastIteratorTest, IsAtLeastIterator) {
32
+ EXPECT_TRUE((IsAtLeastIterator<std::input_iterator_tag, int*>()));
33
+ EXPECT_TRUE((IsAtLeastIterator<std::forward_iterator_tag, int*>()));
34
+ EXPECT_TRUE((IsAtLeastIterator<std::bidirectional_iterator_tag, int*>()));
35
+ EXPECT_TRUE((IsAtLeastIterator<std::random_access_iterator_tag, int*>()));
36
+ EXPECT_TRUE((IsAtLeastIterator<std::input_iterator_tag,
37
+ std::vector<int>::iterator>()));
38
+ EXPECT_TRUE((IsAtLeastIterator<std::forward_iterator_tag,
39
+ std::vector<int>::iterator>()));
40
+ EXPECT_TRUE((IsAtLeastIterator<std::bidirectional_iterator_tag,
41
+ std::vector<int>::iterator>()));
42
+ EXPECT_TRUE((IsAtLeastIterator<std::random_access_iterator_tag,
43
+ std::vector<int>::iterator>()));
44
+
45
+ EXPECT_TRUE(
46
+ (IsAtLeastIterator<std::input_iterator_tag, std::list<int>::iterator>()));
47
+ EXPECT_TRUE((IsAtLeastIterator<std::forward_iterator_tag,
48
+ std::list<int>::iterator>()));
49
+ EXPECT_TRUE((IsAtLeastIterator<std::bidirectional_iterator_tag,
50
+ std::list<int>::iterator>()));
51
+ EXPECT_FALSE((IsAtLeastIterator<std::random_access_iterator_tag,
52
+ std::list<int>::iterator>()));
53
+
54
+ EXPECT_TRUE((IsAtLeastIterator<std::input_iterator_tag,
55
+ std::forward_list<int>::iterator>()));
56
+ EXPECT_TRUE((IsAtLeastIterator<std::forward_iterator_tag,
57
+ std::forward_list<int>::iterator>()));
58
+ EXPECT_FALSE((IsAtLeastIterator<std::bidirectional_iterator_tag,
59
+ std::forward_list<int>::iterator>()));
60
+ EXPECT_FALSE((IsAtLeastIterator<std::random_access_iterator_tag,
61
+ std::forward_list<int>::iterator>()));
62
+
63
+ EXPECT_TRUE((IsAtLeastIterator<std::input_iterator_tag,
64
+ std::istream_iterator<int>>()));
65
+ EXPECT_FALSE((IsAtLeastIterator<std::forward_iterator_tag,
66
+ std::istream_iterator<int>>()));
67
+ EXPECT_FALSE((IsAtLeastIterator<std::bidirectional_iterator_tag,
68
+ std::istream_iterator<int>>()));
69
+ EXPECT_FALSE((IsAtLeastIterator<std::random_access_iterator_tag,
70
+ std::istream_iterator<int>>()));
71
+
72
+ EXPECT_TRUE((IsAtLeastIterator<std::input_iterator_tag,
73
+ Cpp20ForwardZipIterator<int*>>()));
74
+ EXPECT_TRUE((IsAtLeastIterator<std::forward_iterator_tag,
75
+ Cpp20ForwardZipIterator<int*>>()));
76
+ EXPECT_FALSE((IsAtLeastIterator<std::bidirectional_iterator_tag,
77
+ Cpp20ForwardZipIterator<int*>>()));
78
+ EXPECT_FALSE((IsAtLeastIterator<std::random_access_iterator_tag,
79
+ Cpp20ForwardZipIterator<int*>>()));
80
+ }
81
+
82
+ } // namespace
83
+ } // namespace base_internal
84
+ ABSL_NAMESPACE_END
85
+ } // namespace absl
@@ -0,0 +1,97 @@
1
+ // Copyright 2025 The Abseil Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef ABSL_BASE_INTERNAL_ITERATOR_TRAITS_TEST_HELPER_H_
16
+ #define ABSL_BASE_INTERNAL_ITERATOR_TRAITS_TEST_HELPER_H_
17
+
18
+ #include <iterator>
19
+ #include <utility>
20
+
21
+ #include "absl/base/config.h"
22
+
23
+ namespace absl {
24
+ ABSL_NAMESPACE_BEGIN
25
+ namespace base_internal {
26
+
27
+ // This would be a forward_iterator in C++20, but it's only an input iterator
28
+ // before that, since it has a non-reference `reference`.
29
+ template <typename Iterator>
30
+ class Cpp20ForwardZipIterator {
31
+ using IteratorReference = typename std::iterator_traits<Iterator>::reference;
32
+
33
+ public:
34
+ Cpp20ForwardZipIterator() = default;
35
+ explicit Cpp20ForwardZipIterator(Iterator left, Iterator right)
36
+ : left_(left), right_(right) {}
37
+
38
+ Cpp20ForwardZipIterator& operator++() {
39
+ ++left_;
40
+ ++right_;
41
+ return *this;
42
+ }
43
+
44
+ Cpp20ForwardZipIterator operator++(int) {
45
+ Cpp20ForwardZipIterator tmp(*this);
46
+ ++*this;
47
+ return *this;
48
+ }
49
+
50
+ std::pair<IteratorReference, IteratorReference> operator*() const {
51
+ return {*left_, *right_};
52
+ }
53
+
54
+ // C++17 input iterators require `operator->`, but this isn't possible to
55
+ // implement. C++20 dropped the requirement.
56
+
57
+ friend bool operator==(const Cpp20ForwardZipIterator& lhs,
58
+ const Cpp20ForwardZipIterator& rhs) {
59
+ return lhs.left_ == rhs.left_ && lhs.right_ == rhs.right_;
60
+ }
61
+
62
+ friend bool operator!=(const Cpp20ForwardZipIterator& lhs,
63
+ const Cpp20ForwardZipIterator& rhs) {
64
+ return !(lhs == rhs);
65
+ }
66
+
67
+ private:
68
+ Iterator left_{};
69
+ Iterator right_{};
70
+ };
71
+
72
+ } // namespace base_internal
73
+ ABSL_NAMESPACE_END
74
+ } // namespace absl
75
+
76
+ template <typename Iterator>
77
+ struct std::iterator_traits<
78
+ absl::base_internal::Cpp20ForwardZipIterator<Iterator>> {
79
+ private:
80
+ using IteratorReference = typename std::iterator_traits<Iterator>::reference;
81
+
82
+ public:
83
+ using iterator_category = std::input_iterator_tag;
84
+ using iterator_concept = std::forward_iterator_tag;
85
+ using value_type = std::pair<IteratorReference, IteratorReference>;
86
+ using difference_type =
87
+ typename std::iterator_traits<Iterator>::difference_type;
88
+ using reference = value_type;
89
+ using pointer = void;
90
+ };
91
+
92
+ #if defined(__cpp_lib_concepts)
93
+ static_assert(
94
+ std::forward_iterator<absl::base_internal::Cpp20ForwardZipIterator<int*>>);
95
+ #endif // defined(__cpp_lib_concepts)
96
+
97
+ #endif // ABSL_BASE_INTERNAL_ITERATOR_TRAITS_TEST_HELPER_H_
@@ -19,6 +19,9 @@
19
19
 
20
20
  #include "absl/base/internal/low_level_alloc.h"
21
21
 
22
+ #include <stdint.h>
23
+
24
+ #include <optional>
22
25
  #include <type_traits>
23
26
 
24
27
  #include "absl/base/call_once.h"
@@ -219,6 +222,32 @@ struct LowLevelAlloc::Arena {
219
222
  uint32_t random ABSL_GUARDED_BY(mu);
220
223
  };
221
224
 
225
+ // ---------------------------------------------------------------
226
+ // An async-signal-safe arena for LowLevelAlloc
227
+ static std::atomic<base_internal::LowLevelAlloc::Arena *> g_sig_safe_arena;
228
+
229
+ base_internal::LowLevelAlloc::Arena *SigSafeArena() {
230
+ return g_sig_safe_arena.load(std::memory_order_acquire);
231
+ }
232
+
233
+ void InitSigSafeArena() {
234
+ if (SigSafeArena() == nullptr) {
235
+ uint32_t flags = 0;
236
+ #ifndef ABSL_LOW_LEVEL_ALLOC_ASYNC_SIGNAL_SAFE_MISSING
237
+ flags |= base_internal::LowLevelAlloc::kAsyncSignalSafe;
238
+ #endif
239
+ base_internal::LowLevelAlloc::Arena *new_arena =
240
+ base_internal::LowLevelAlloc::NewArena(flags);
241
+ base_internal::LowLevelAlloc::Arena *old_value = nullptr;
242
+ if (!g_sig_safe_arena.compare_exchange_strong(old_value, new_arena,
243
+ std::memory_order_release,
244
+ std::memory_order_relaxed)) {
245
+ // We lost a race to allocate an arena; deallocate.
246
+ base_internal::LowLevelAlloc::DeleteArena(new_arena);
247
+ }
248
+ }
249
+ }
250
+
222
251
  namespace {
223
252
  // Static storage space for the lazily-constructed, default global arena
224
253
  // instances. We require this space because the whole point of LowLevelAlloc
@@ -289,11 +318,11 @@ class ABSL_SCOPED_LOCKABLE ArenaLock {
289
318
  mask_valid_ = pthread_sigmask(SIG_BLOCK, &all, &mask_) == 0;
290
319
  }
291
320
  #endif
292
- arena_->mu.Lock();
321
+ arena_->mu.lock();
293
322
  }
294
323
  ~ArenaLock() { ABSL_RAW_CHECK(left_, "haven't left Arena region"); }
295
324
  void Leave() ABSL_UNLOCK_FUNCTION() {
296
- arena_->mu.Unlock();
325
+ arena_->mu.unlock();
297
326
  #ifndef ABSL_LOW_LEVEL_ALLOC_ASYNC_SIGNAL_SAFE_MISSING
298
327
  if (mask_valid_) {
299
328
  const int err = pthread_sigmask(SIG_SETMASK, &mask_, nullptr);
@@ -330,7 +359,7 @@ size_t GetPageSize() {
330
359
  GetSystemInfo(&system_info);
331
360
  return std::max(system_info.dwPageSize, system_info.dwAllocationGranularity);
332
361
  #elif defined(__wasm__) || defined(__asmjs__) || defined(__hexagon__)
333
- return getpagesize();
362
+ return static_cast<size_t>(getpagesize());
334
363
  #else
335
364
  return static_cast<size_t>(sysconf(_SC_PAGESIZE));
336
365
  #endif
@@ -448,8 +477,8 @@ static inline uintptr_t RoundUp(uintptr_t addr, uintptr_t align) {
448
477
  // that the freelist is in the correct order, that it
449
478
  // consists of regions marked "unallocated", and that no two regions
450
479
  // are adjacent in memory (they should have been coalesced).
451
- // L >= arena->mu
452
- static AllocList *Next(int i, AllocList *prev, LowLevelAlloc::Arena *arena) {
480
+ static AllocList *Next(int i, AllocList *prev, LowLevelAlloc::Arena *arena)
481
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(arena->mu) {
453
482
  ABSL_RAW_CHECK(i < prev->levels, "too few levels in Next()");
454
483
  AllocList *next = prev->next[i];
455
484
  if (next != nullptr) {
@@ -473,6 +502,7 @@ static void Coalesce(AllocList *a) {
473
502
  if (n != nullptr && reinterpret_cast<char *>(a) + a->header.size ==
474
503
  reinterpret_cast<char *>(n)) {
475
504
  LowLevelAlloc::Arena *arena = a->header.arena;
505
+ arena->mu.AssertHeld();
476
506
  a->header.size += n->header.size;
477
507
  n->header.magic = 0;
478
508
  n->header.arena = nullptr;
@@ -486,8 +516,8 @@ static void Coalesce(AllocList *a) {
486
516
  }
487
517
 
488
518
  // Adds block at location "v" to the free list
489
- // L >= arena->mu
490
- static void AddToFreelist(void *v, LowLevelAlloc::Arena *arena) {
519
+ static void AddToFreelist(void *v, LowLevelAlloc::Arena *arena)
520
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(arena->mu) {
491
521
  AllocList *f = reinterpret_cast<AllocList *>(reinterpret_cast<char *>(v) -
492
522
  sizeof(f->header));
493
523
  ABSL_RAW_CHECK(f->header.magic == Magic(kMagicAllocated, &f->header),
@@ -543,7 +573,7 @@ static void *DoAllocWithArena(size_t request, LowLevelAlloc::Arena *arena) {
543
573
  }
544
574
  // we unlock before mmap() both because mmap() may call a callback hook,
545
575
  // and because it may be slow.
546
- arena->mu.Unlock();
576
+ arena->mu.unlock();
547
577
  // mmap generous 64K chunks to decrease
548
578
  // the chances/impact of fragmentation:
549
579
  size_t new_pages_size = RoundUp(req_rnd, arena->pagesize * 16);
@@ -582,7 +612,7 @@ static void *DoAllocWithArena(size_t request, LowLevelAlloc::Arena *arena) {
582
612
  #endif
583
613
  #endif // __linux__
584
614
  #endif // _WIN32
585
- arena->mu.Lock();
615
+ arena->mu.lock();
586
616
  s = reinterpret_cast<AllocList *>(new_pages);
587
617
  s->header.size = new_pages_size;
588
618
  // Pretend the block is allocated; call AddToFreelist() to free it.
@@ -120,6 +120,12 @@ class LowLevelAlloc {
120
120
  LowLevelAlloc(); // no instances
121
121
  };
122
122
 
123
+ // Returns a global async-signal-safe arena for LowLevelAlloc.
124
+ LowLevelAlloc::Arena *SigSafeArena();
125
+
126
+ // Ensures the global async-signal-safe arena for LowLevelAlloc is initialized.
127
+ void InitSigSafeArena();
128
+
123
129
  } // namespace base_internal
124
130
  ABSL_NAMESPACE_END
125
131
  } // namespace absl
@@ -57,19 +57,20 @@ size_t GetPageSize() {
57
57
 
58
58
  void* InitializePoisonedPointerInternal() {
59
59
  const size_t block_size = GetPageSize();
60
+ void* data = nullptr;
60
61
  #if defined(ABSL_HAVE_ADDRESS_SANITIZER)
61
- void* data = malloc(block_size);
62
+ data = malloc(block_size);
62
63
  ASAN_POISON_MEMORY_REGION(data, block_size);
63
64
  #elif defined(ABSL_HAVE_MEMORY_SANITIZER)
64
- void* data = malloc(block_size);
65
+ data = malloc(block_size);
65
66
  __msan_poison(data, block_size);
66
67
  #elif defined(ABSL_HAVE_MMAP)
67
- void* data = DirectMmap(nullptr, block_size, PROT_NONE,
68
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
68
+ data = DirectMmap(nullptr, block_size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS,
69
+ -1, 0);
69
70
  if (data == MAP_FAILED) return GetBadPointerInternal();
70
71
  #elif defined(_WIN32)
71
- void* data = VirtualAlloc(nullptr, block_size, MEM_RESERVE | MEM_COMMIT,
72
- PAGE_NOACCESS);
72
+ data = VirtualAlloc(nullptr, block_size, MEM_RESERVE | MEM_COMMIT,
73
+ PAGE_NOACCESS);
73
74
  if (data == nullptr) return GetBadPointerInternal();
74
75
  #else
75
76
  return GetBadPointerInternal();
@@ -16,15 +16,18 @@
16
16
 
17
17
  #include <algorithm>
18
18
  #include <atomic>
19
+ #include <cstdint>
19
20
  #include <limits>
20
21
 
21
22
  #include "absl/base/attributes.h"
23
+ #include "absl/base/call_once.h"
22
24
  #include "absl/base/config.h"
23
25
  #include "absl/base/internal/atomic_hook.h"
24
26
  #include "absl/base/internal/cycleclock.h"
27
+ #include "absl/base/internal/scheduling_mode.h"
25
28
  #include "absl/base/internal/spinlock_wait.h"
26
29
  #include "absl/base/internal/sysinfo.h" /* For NumCPUs() */
27
- #include "absl/base/call_once.h"
30
+ #include "absl/base/internal/tsan_mutex_interface.h"
28
31
 
29
32
  // Description of lock-word:
30
33
  // 31..00: [............................3][2][1][0]
@@ -58,7 +61,7 @@ namespace absl {
58
61
  ABSL_NAMESPACE_BEGIN
59
62
  namespace base_internal {
60
63
 
61
- ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES static base_internal::AtomicHook<void (*)(
64
+ ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES static AtomicHook<void (*)(
62
65
  const void *lock, int64_t wait_cycles)>
63
66
  submit_profile_data;
64
67
 
@@ -67,21 +70,6 @@ void RegisterSpinLockProfiler(void (*fn)(const void *contendedlock,
67
70
  submit_profile_data.Store(fn);
68
71
  }
69
72
 
70
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
71
- // Static member variable definitions.
72
- constexpr uint32_t SpinLock::kSpinLockHeld;
73
- constexpr uint32_t SpinLock::kSpinLockCooperative;
74
- constexpr uint32_t SpinLock::kSpinLockDisabledScheduling;
75
- constexpr uint32_t SpinLock::kSpinLockSleeper;
76
- constexpr uint32_t SpinLock::kWaitTimeMask;
77
- #endif
78
-
79
- // Uncommon constructors.
80
- SpinLock::SpinLock(base_internal::SchedulingMode mode)
81
- : lockword_(IsCooperative(mode) ? kSpinLockCooperative : 0) {
82
- ABSL_TSAN_MUTEX_CREATE(this, __tsan_mutex_not_static);
83
- }
84
-
85
73
  // Monitor the lock to see if its value changes within some time period
86
74
  // (adaptive_spin_count loop iterations). The last value read from the lock
87
75
  // is returned from the method.
@@ -90,9 +78,8 @@ uint32_t SpinLock::SpinLoop() {
90
78
  // adaptive_spin_count here.
91
79
  ABSL_CONST_INIT static absl::once_flag init_adaptive_spin_count;
92
80
  ABSL_CONST_INIT static int adaptive_spin_count = 0;
93
- base_internal::LowLevelCallOnce(&init_adaptive_spin_count, []() {
94
- adaptive_spin_count = base_internal::NumCPUs() > 1 ? 1000 : 1;
95
- });
81
+ LowLevelCallOnce(&init_adaptive_spin_count,
82
+ []() { adaptive_spin_count = NumCPUs() > 1 ? 1000 : 1; });
96
83
 
97
84
  int c = adaptive_spin_count;
98
85
  uint32_t lock_value;
@@ -109,11 +96,11 @@ void SpinLock::SlowLock() {
109
96
  return;
110
97
  }
111
98
 
112
- base_internal::SchedulingMode scheduling_mode;
99
+ SchedulingMode scheduling_mode;
113
100
  if ((lock_value & kSpinLockCooperative) != 0) {
114
- scheduling_mode = base_internal::SCHEDULE_COOPERATIVE_AND_KERNEL;
101
+ scheduling_mode = SCHEDULE_COOPERATIVE_AND_KERNEL;
115
102
  } else {
116
- scheduling_mode = base_internal::SCHEDULE_KERNEL_ONLY;
103
+ scheduling_mode = SCHEDULE_KERNEL_ONLY;
117
104
  }
118
105
 
119
106
  // The lock was not obtained initially, so this thread needs to wait for
@@ -143,7 +130,7 @@ void SpinLock::SlowLock() {
143
130
  // new lock state will be the number of cycles this thread waited if
144
131
  // this thread obtains the lock.
145
132
  lock_value = TryLockInternal(lock_value, wait_cycles);
146
- continue; // Skip the delay at the end of the loop.
133
+ continue; // Skip the delay at the end of the loop.
147
134
  } else if ((lock_value & kWaitTimeMask) == 0) {
148
135
  // The lock is still held, without a waiter being marked, but something
149
136
  // else about the lock word changed, causing our CAS to fail. For
@@ -159,8 +146,8 @@ void SpinLock::SlowLock() {
159
146
  // synchronization there to avoid false positives.
160
147
  ABSL_TSAN_MUTEX_PRE_DIVERT(this, 0);
161
148
  // Wait for an OS specific delay.
162
- base_internal::SpinLockDelay(&lockword_, lock_value, ++lock_wait_call_count,
163
- scheduling_mode);
149
+ SpinLockDelay(&lockword_, lock_value, ++lock_wait_call_count,
150
+ scheduling_mode);
164
151
  ABSL_TSAN_MUTEX_POST_DIVERT(this, 0);
165
152
  // Spin again after returning from the wait routine to give this thread
166
153
  // some chance of obtaining the lock.
@@ -171,8 +158,8 @@ void SpinLock::SlowLock() {
171
158
  }
172
159
 
173
160
  void SpinLock::SlowUnlock(uint32_t lock_value) {
174
- base_internal::SpinLockWake(&lockword_,
175
- false); // wake waiter if necessary
161
+ SpinLockWake(&lockword_,
162
+ false); // wake waiter if necessary
176
163
 
177
164
  // If our acquisition was contended, collect contentionz profile info. We
178
165
  // reserve a unitary wait time to represent that a waiter exists without our