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
@@ -19,7 +19,7 @@
19
19
  // - for use by Abseil internal code that Mutex itself depends on
20
20
  // - for async signal safety (see below)
21
21
 
22
- // SpinLock with a base_internal::SchedulingMode::SCHEDULE_KERNEL_ONLY is async
22
+ // SpinLock with a SchedulingMode::SCHEDULE_KERNEL_ONLY is async
23
23
  // signal safe. If a spinlock is used within a signal handler, all code that
24
24
  // acquires the lock must ensure that the signal cannot arrive while they are
25
25
  // holding the lock. Typically, this is done by blocking the signal.
@@ -31,14 +31,16 @@
31
31
 
32
32
  #include <atomic>
33
33
  #include <cstdint>
34
+ #include <type_traits>
34
35
 
35
36
  #include "absl/base/attributes.h"
37
+ #include "absl/base/config.h"
36
38
  #include "absl/base/const_init.h"
37
- #include "absl/base/dynamic_annotations.h"
38
39
  #include "absl/base/internal/low_level_scheduling.h"
39
40
  #include "absl/base/internal/raw_logging.h"
40
41
  #include "absl/base/internal/scheduling_mode.h"
41
42
  #include "absl/base/internal/tsan_mutex_interface.h"
43
+ #include "absl/base/macros.h"
42
44
  #include "absl/base/thread_annotations.h"
43
45
 
44
46
  namespace tcmalloc {
@@ -55,17 +57,31 @@ namespace base_internal {
55
57
 
56
58
  class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
57
59
  public:
58
- SpinLock() : lockword_(kSpinLockCooperative) {
59
- ABSL_TSAN_MUTEX_CREATE(this, __tsan_mutex_not_static);
60
- }
60
+ constexpr SpinLock() : lockword_(kSpinLockCooperative) { RegisterWithTsan(); }
61
61
 
62
62
  // Constructors that allow non-cooperative spinlocks to be created for use
63
63
  // inside thread schedulers. Normal clients should not use these.
64
- explicit SpinLock(base_internal::SchedulingMode mode);
64
+ constexpr explicit SpinLock(SchedulingMode mode)
65
+ : lockword_(IsCooperative(mode) ? kSpinLockCooperative : 0) {
66
+ RegisterWithTsan();
67
+ }
68
+
69
+ #if ABSL_HAVE_ATTRIBUTE(enable_if) && !defined(_WIN32)
70
+ // Constructor to inline users of the default scheduling mode.
71
+ //
72
+ // This only needs to exists for inliner runs, but doesn't work correctly in
73
+ // clang+windows builds, likely due to mangling differences.
74
+ ABSL_DEPRECATE_AND_INLINE()
75
+ constexpr explicit SpinLock(SchedulingMode mode)
76
+ __attribute__((enable_if(mode == SCHEDULE_COOPERATIVE_AND_KERNEL,
77
+ "Cooperative use default constructor")))
78
+ : SpinLock() {}
79
+ #endif
65
80
 
66
81
  // Constructor for global SpinLock instances. See absl/base/const_init.h.
67
- constexpr SpinLock(absl::ConstInitType, base_internal::SchedulingMode mode)
68
- : lockword_(IsCooperative(mode) ? kSpinLockCooperative : 0) {}
82
+ ABSL_DEPRECATE_AND_INLINE()
83
+ constexpr SpinLock(absl::ConstInitType, SchedulingMode mode)
84
+ : SpinLock(mode) {}
69
85
 
70
86
  // For global SpinLock instances prefer trivial destructor when possible.
71
87
  // Default but non-trivial destructor in some build configurations causes an
@@ -77,7 +93,7 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
77
93
  #endif
78
94
 
79
95
  // Acquire this SpinLock.
80
- inline void Lock() ABSL_EXCLUSIVE_LOCK_FUNCTION() {
96
+ inline void lock() ABSL_EXCLUSIVE_LOCK_FUNCTION() {
81
97
  ABSL_TSAN_MUTEX_PRE_LOCK(this, 0);
82
98
  if (!TryLockImpl()) {
83
99
  SlowLock();
@@ -85,12 +101,14 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
85
101
  ABSL_TSAN_MUTEX_POST_LOCK(this, 0, 0);
86
102
  }
87
103
 
104
+ ABSL_DEPRECATE_AND_INLINE()
105
+ inline void Lock() ABSL_EXCLUSIVE_LOCK_FUNCTION() { return lock(); }
106
+
88
107
  // Try to acquire this SpinLock without blocking and return true if the
89
108
  // acquisition was successful. If the lock was not acquired, false is
90
- // returned. If this SpinLock is free at the time of the call, TryLock
91
- // will return true with high probability.
92
- ABSL_MUST_USE_RESULT inline bool TryLock()
93
- ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true) {
109
+ // returned. If this SpinLock is free at the time of the call, try_lock will
110
+ // return true with high probability.
111
+ [[nodiscard]] inline bool try_lock() ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true) {
94
112
  ABSL_TSAN_MUTEX_PRE_LOCK(this, __tsan_mutex_try_lock);
95
113
  bool res = TryLockImpl();
96
114
  ABSL_TSAN_MUTEX_POST_LOCK(
@@ -99,15 +117,20 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
99
117
  return res;
100
118
  }
101
119
 
120
+ ABSL_DEPRECATE_AND_INLINE()
121
+ [[nodiscard]] inline bool TryLock() ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true) {
122
+ return try_lock();
123
+ }
124
+
102
125
  // Release this SpinLock, which must be held by the calling thread.
103
- inline void Unlock() ABSL_UNLOCK_FUNCTION() {
126
+ inline void unlock() ABSL_UNLOCK_FUNCTION() {
104
127
  ABSL_TSAN_MUTEX_PRE_UNLOCK(this, 0);
105
128
  uint32_t lock_value = lockword_.load(std::memory_order_relaxed);
106
129
  lock_value = lockword_.exchange(lock_value & kSpinLockCooperative,
107
130
  std::memory_order_release);
108
131
 
109
132
  if ((lock_value & kSpinLockDisabledScheduling) != 0) {
110
- base_internal::SchedulingGuard::EnableRescheduling(true);
133
+ SchedulingGuard::EnableRescheduling(true);
111
134
  }
112
135
  if ((lock_value & kWaitTimeMask) != 0) {
113
136
  // Collect contentionz profile info, and speed the wakeup of any waiter.
@@ -118,10 +141,13 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
118
141
  ABSL_TSAN_MUTEX_POST_UNLOCK(this, 0);
119
142
  }
120
143
 
144
+ ABSL_DEPRECATE_AND_INLINE()
145
+ inline void Unlock() ABSL_UNLOCK_FUNCTION() { unlock(); }
146
+
121
147
  // Determine if the lock is held. When the lock is held by the invoking
122
148
  // thread, true will always be returned. Intended to be used as
123
149
  // CHECK(lock.IsHeld()).
124
- ABSL_MUST_USE_RESULT inline bool IsHeld() const {
150
+ [[nodiscard]] inline bool IsHeld() const {
125
151
  return (lockword_.load(std::memory_order_relaxed) & kSpinLockHeld) != 0;
126
152
  }
127
153
 
@@ -176,9 +202,16 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
176
202
  ~(kSpinLockHeld | kSpinLockCooperative | kSpinLockDisabledScheduling);
177
203
 
178
204
  // Returns true if the provided scheduling mode is cooperative.
179
- static constexpr bool IsCooperative(
180
- base_internal::SchedulingMode scheduling_mode) {
181
- return scheduling_mode == base_internal::SCHEDULE_COOPERATIVE_AND_KERNEL;
205
+ static constexpr bool IsCooperative(SchedulingMode scheduling_mode) {
206
+ return scheduling_mode == SCHEDULE_COOPERATIVE_AND_KERNEL;
207
+ }
208
+
209
+ constexpr void RegisterWithTsan() {
210
+ #if ABSL_HAVE_BUILTIN(__builtin_is_constant_evaluated)
211
+ if (!__builtin_is_constant_evaluated()) {
212
+ ABSL_TSAN_MUTEX_CREATE(this, __tsan_mutex_not_static);
213
+ }
214
+ #endif
182
215
  }
183
216
 
184
217
  bool IsCooperative() const {
@@ -203,28 +236,25 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
203
236
 
204
237
  // Corresponding locker object that arranges to acquire a spinlock for
205
238
  // the duration of a C++ scope.
206
- //
207
- // TODO(b/176172494): Use only [[nodiscard]] when baseline is raised.
208
- // TODO(b/6695610): Remove forward declaration when #ifdef is no longer needed.
209
- #if ABSL_HAVE_CPP_ATTRIBUTE(nodiscard)
210
- class [[nodiscard]] SpinLockHolder;
211
- #else
212
- class ABSL_MUST_USE_RESULT ABSL_ATTRIBUTE_TRIVIAL_ABI SpinLockHolder;
213
- #endif
214
-
215
- class ABSL_SCOPED_LOCKABLE SpinLockHolder {
239
+ class ABSL_SCOPED_LOCKABLE [[nodiscard]] SpinLockHolder {
216
240
  public:
217
- inline explicit SpinLockHolder(SpinLock* l) ABSL_EXCLUSIVE_LOCK_FUNCTION(l)
241
+ inline explicit SpinLockHolder(
242
+ SpinLock& l ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
243
+ ABSL_EXCLUSIVE_LOCK_FUNCTION(l)
218
244
  : lock_(l) {
219
- l->Lock();
245
+ l.lock();
220
246
  }
221
- inline ~SpinLockHolder() ABSL_UNLOCK_FUNCTION() { lock_->Unlock(); }
247
+ ABSL_DEPRECATE_AND_INLINE()
248
+ inline explicit SpinLockHolder(SpinLock* l) ABSL_EXCLUSIVE_LOCK_FUNCTION(l)
249
+ : SpinLockHolder(*l) {}
250
+
251
+ inline ~SpinLockHolder() ABSL_UNLOCK_FUNCTION() { lock_.unlock(); }
222
252
 
223
253
  SpinLockHolder(const SpinLockHolder&) = delete;
224
254
  SpinLockHolder& operator=(const SpinLockHolder&) = delete;
225
255
 
226
256
  private:
227
- SpinLock* lock_;
257
+ SpinLock& lock_;
228
258
  };
229
259
 
230
260
  // Register a hook for profiling support.
@@ -253,7 +283,7 @@ inline uint32_t SpinLock::TryLockInternal(uint32_t lock_value,
253
283
  if ((lock_value & kSpinLockCooperative) == 0) {
254
284
  // For non-cooperative locks we must make sure we mark ourselves as
255
285
  // non-reschedulable before we attempt to CompareAndSwap.
256
- if (base_internal::SchedulingGuard::DisableRescheduling()) {
286
+ if (SchedulingGuard::DisableRescheduling()) {
257
287
  sched_disabled_bit = kSpinLockDisabledScheduling;
258
288
  }
259
289
  }
@@ -262,7 +292,7 @@ inline uint32_t SpinLock::TryLockInternal(uint32_t lock_value,
262
292
  lock_value,
263
293
  kSpinLockHeld | lock_value | wait_cycles | sched_disabled_bit,
264
294
  std::memory_order_acquire, std::memory_order_relaxed)) {
265
- base_internal::SchedulingGuard::EnableRescheduling(sched_disabled_bit != 0);
295
+ SchedulingGuard::EnableRescheduling(sched_disabled_bit != 0);
266
296
  }
267
297
 
268
298
  return lock_value;
@@ -35,7 +35,7 @@ static void BM_TryLock(benchmark::State& state) {
35
35
  static absl::NoDestructor<absl::base_internal::SpinLock> spinlock(
36
36
  scheduling_mode);
37
37
  for (auto _ : state) {
38
- if (spinlock->TryLock()) spinlock->Unlock();
38
+ if (spinlock->try_lock()) spinlock->unlock();
39
39
  }
40
40
  }
41
41
 
@@ -50,7 +50,7 @@ static void BM_SpinLock(benchmark::State& state) {
50
50
  static absl::NoDestructor<absl::base_internal::SpinLock> spinlock(
51
51
  scheduling_mode);
52
52
  for (auto _ : state) {
53
- absl::base_internal::SpinLockHolder holder(spinlock.get());
53
+ absl::base_internal::SpinLockHolder holder(*spinlock.get());
54
54
  }
55
55
  }
56
56
 
@@ -41,7 +41,7 @@ TEST(SysinfoTest, GetTID) {
41
41
  EXPECT_EQ(GetTID(), GetTID()); // Basic compile and equality test.
42
42
  #ifdef __native_client__
43
43
  // Native Client has a race condition bug that leads to memory
44
- // exaustion when repeatedly creating and joining threads.
44
+ // exhaustion when repeatedly creating and joining threads.
45
45
  // https://bugs.chromium.org/p/nativeclient/issues/detail?id=1027
46
46
  return;
47
47
  #endif
@@ -59,7 +59,7 @@ TEST(SysinfoTest, GetTID) {
59
59
  threads.push_back(std::thread([&]() {
60
60
  pid_t id = GetTID();
61
61
  {
62
- MutexLock lock(&mutex);
62
+ MutexLock lock(mutex);
63
63
  ASSERT_TRUE(tids.find(id) == tids.end());
64
64
  tids.insert(id);
65
65
  }
@@ -12,10 +12,10 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
- #include "benchmark/benchmark.h"
16
15
  #include "absl/base/internal/thread_identity.h"
17
16
  #include "absl/synchronization/internal/create_thread_identity.h"
18
17
  #include "absl/synchronization/internal/per_thread_sem.h"
18
+ #include "benchmark/benchmark.h"
19
19
 
20
20
  namespace {
21
21
 
@@ -31,7 +31,7 @@ namespace base_internal {
31
31
  namespace {
32
32
 
33
33
  ABSL_CONST_INIT static absl::base_internal::SpinLock map_lock(
34
- absl::kConstInit, base_internal::SCHEDULE_KERNEL_ONLY);
34
+ base_internal::SCHEDULE_KERNEL_ONLY);
35
35
  ABSL_CONST_INIT static int num_identities_reused ABSL_GUARDED_BY(map_lock);
36
36
 
37
37
  static const void* const kCheckNoIdentity = reinterpret_cast<void*>(1);
@@ -58,7 +58,7 @@ static void TestThreadIdentityCurrent(const void* assert_no_identity) {
58
58
  PerThreadSynch::kAlignment);
59
59
  EXPECT_EQ(identity, identity->per_thread_synch.thread_identity());
60
60
 
61
- absl::base_internal::SpinLockHolder l(&map_lock);
61
+ absl::base_internal::SpinLockHolder l(map_lock);
62
62
  num_identities_reused++;
63
63
  }
64
64
 
@@ -90,7 +90,7 @@ TEST(ThreadIdentityTest, BasicIdentityWorksThreaded) {
90
90
  // We should have recycled ThreadIdentity objects above; while (external)
91
91
  // library threads allocating their own identities may preclude some
92
92
  // reuse, we should have sufficient repetitions to exclude this.
93
- absl::base_internal::SpinLockHolder l(&map_lock);
93
+ absl::base_internal::SpinLockHolder l(map_lock);
94
94
  EXPECT_LT(kNumThreads, num_identities_reused);
95
95
  }
96
96
 
@@ -112,7 +112,7 @@ TEST(ThreadIdentityTest, ReusedThreadIdentityMutexTest) {
112
112
  threads.push_back(std::thread([&]() {
113
113
  for (int l = 0; l < kNumLockLoops; ++l) {
114
114
  for (int m = 0; m < kNumMutexes; ++m) {
115
- MutexLock lock(&mutexes[m]);
115
+ MutexLock lock(mutexes[m]);
116
116
  }
117
117
  }
118
118
  }));
@@ -36,33 +36,33 @@ namespace absl {
36
36
  ABSL_NAMESPACE_BEGIN
37
37
  namespace base_internal {
38
38
 
39
- inline uint16_t UnalignedLoad16(absl::Nonnull<const void *> p) {
39
+ inline uint16_t UnalignedLoad16(const void* absl_nonnull p) {
40
40
  uint16_t t;
41
41
  memcpy(&t, p, sizeof t);
42
42
  return t;
43
43
  }
44
44
 
45
- inline uint32_t UnalignedLoad32(absl::Nonnull<const void *> p) {
45
+ inline uint32_t UnalignedLoad32(const void* absl_nonnull p) {
46
46
  uint32_t t;
47
47
  memcpy(&t, p, sizeof t);
48
48
  return t;
49
49
  }
50
50
 
51
- inline uint64_t UnalignedLoad64(absl::Nonnull<const void *> p) {
51
+ inline uint64_t UnalignedLoad64(const void* absl_nonnull p) {
52
52
  uint64_t t;
53
53
  memcpy(&t, p, sizeof t);
54
54
  return t;
55
55
  }
56
56
 
57
- inline void UnalignedStore16(absl::Nonnull<void *> p, uint16_t v) {
57
+ inline void UnalignedStore16(void* absl_nonnull p, uint16_t v) {
58
58
  memcpy(p, &v, sizeof v);
59
59
  }
60
60
 
61
- inline void UnalignedStore32(absl::Nonnull<void *> p, uint32_t v) {
61
+ inline void UnalignedStore32(void* absl_nonnull p, uint32_t v) {
62
62
  memcpy(p, &v, sizeof v);
63
63
  }
64
64
 
65
- inline void UnalignedStore64(absl::Nonnull<void *> p, uint64_t v) {
65
+ inline void UnalignedStore64(void* absl_nonnull p, uint64_t v) {
66
66
  memcpy(p, &v, sizeof v);
67
67
  }
68
68
 
@@ -85,6 +85,10 @@ int64_t UnscaledCycleClock::Now() {
85
85
  double UnscaledCycleClock::Frequency() {
86
86
  #ifdef __GLIBC__
87
87
  return __ppc_get_timebase_freq();
88
+ #elif defined(__linux__)
89
+ // Fallback for musl + ppc64le: use constant timebase frequency (512 MHz)
90
+ // Must come after __GLIBC__.
91
+ return static_cast<double>(512000000);
88
92
  #elif defined(_AIX)
89
93
  // This is the same constant value as returned by
90
94
  // __ppc_get_timebase_freq().
@@ -88,9 +88,14 @@ inline int64_t UnscaledCycleClock::Now() {
88
88
  #elif defined(__aarch64__)
89
89
 
90
90
  // System timer of ARMv8 runs at a different frequency than the CPU's.
91
- // The frequency is fixed, typically in the range 1-50MHz. It can be
92
- // read at CNTFRQ special register. We assume the OS has set up
93
- // the virtual timer properly.
91
+ //
92
+ // Frequency is fixed. From Armv8.6-A and Armv9.1-A on, the frequency is 1GHz.
93
+ // Pre-Armv8.6-A, the frequency was a system design choice, typically in the
94
+ // range of 1MHz to 50MHz. See also:
95
+ // https://developer.arm.com/documentation/102379/0101/What-is-the-Generic-Timer-
96
+ //
97
+ // It can be read at CNTFRQ special register. We assume the OS has set up the
98
+ // virtual timer properly.
94
99
  inline int64_t UnscaledCycleClock::Now() {
95
100
  int64_t virtual_timer_value;
96
101
  asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value));
@@ -135,11 +135,11 @@ class NoDestructor {
135
135
  // Pretend to be a smart pointer to T with deep constness.
136
136
  // Never returns a null pointer.
137
137
  T& operator*() { return *get(); }
138
- absl::Nonnull<T*> operator->() { return get(); }
139
- absl::Nonnull<T*> get() { return impl_.get(); }
138
+ T* absl_nonnull operator->() { return get(); }
139
+ T* absl_nonnull get() { return impl_.get(); }
140
140
  const T& operator*() const { return *get(); }
141
- absl::Nonnull<const T*> operator->() const { return get(); }
142
- absl::Nonnull<const T*> get() const { return impl_.get(); }
141
+ const T* absl_nonnull operator->() const { return get(); }
142
+ const T* absl_nonnull get() const { return impl_.get(); }
143
143
 
144
144
  private:
145
145
  class DirectImpl {
@@ -147,8 +147,8 @@ class NoDestructor {
147
147
  template <typename... Args>
148
148
  explicit constexpr DirectImpl(Args&&... args)
149
149
  : value_(std::forward<Args>(args)...) {}
150
- absl::Nonnull<const T*> get() const { return &value_; }
151
- absl::Nonnull<T*> get() { return &value_; }
150
+ const T* absl_nonnull get() const { return &value_; }
151
+ T* absl_nonnull get() { return &value_; }
152
152
 
153
153
  private:
154
154
  T value_;
@@ -160,33 +160,14 @@ class NoDestructor {
160
160
  explicit PlacementImpl(Args&&... args) {
161
161
  new (&space_) T(std::forward<Args>(args)...);
162
162
  }
163
- absl::Nonnull<const T*> get() const {
164
- return Launder(reinterpret_cast<const T*>(&space_));
163
+ const T* absl_nonnull get() const {
164
+ return std::launder(reinterpret_cast<const T*>(&space_));
165
165
  }
166
- absl::Nonnull<T*> get() { return Launder(reinterpret_cast<T*>(&space_)); }
167
-
168
- private:
169
- template <typename P>
170
- static absl::Nonnull<P*> Launder(absl::Nonnull<P*> p) {
171
- #if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606L
172
- return std::launder(p);
173
- #elif ABSL_HAVE_BUILTIN(__builtin_launder)
174
- return __builtin_launder(p);
175
- #else
176
- // When `std::launder` or equivalent are not available, we rely on
177
- // undefined behavior, which works as intended on Abseil's officially
178
- // supported platforms as of Q3 2023.
179
- #if defined(__GNUC__) && !defined(__clang__)
180
- #pragma GCC diagnostic push
181
- #pragma GCC diagnostic ignored "-Wstrict-aliasing"
182
- #endif
183
- return p;
184
- #if defined(__GNUC__) && !defined(__clang__)
185
- #pragma GCC diagnostic pop
186
- #endif
187
- #endif
166
+ T* absl_nonnull get() {
167
+ return std::launder(reinterpret_cast<T*>(&space_));
188
168
  }
189
169
 
170
+ private:
190
171
  alignas(T) unsigned char space_[sizeof(T)];
191
172
  };
192
173
 
@@ -199,12 +180,10 @@ class NoDestructor {
199
180
  impl_;
200
181
  };
201
182
 
202
- #ifdef ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION
203
183
  // Provide 'Class Template Argument Deduction': the type of NoDestructor's T
204
184
  // will be the same type as the argument passed to NoDestructor's constructor.
205
185
  template <typename T>
206
186
  NoDestructor(T) -> NoDestructor<T>;
207
- #endif // ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION
208
187
 
209
188
  ABSL_NAMESPACE_END
210
189
  } // namespace absl
@@ -196,14 +196,10 @@ TEST(NoDestructorTest, StaticPattern) {
196
196
  EXPECT_EQ(0, Int()); // should get zero-initialized
197
197
  }
198
198
 
199
- #ifdef ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION
200
- // This would fail to compile if Class Template Argument Deduction was not
201
- // provided for absl::NoDestructor.
202
199
  TEST(NoDestructorTest, ClassTemplateArgumentDeduction) {
203
200
  absl::NoDestructor i(1);
204
201
  static_assert(std::is_same<decltype(i), absl::NoDestructor<int>>::value,
205
202
  "Expected deduced type to be int.");
206
203
  }
207
- #endif
208
204
 
209
205
  } // namespace