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
@@ -70,6 +70,7 @@
70
70
  #include "absl/base/internal/low_level_alloc.h"
71
71
  #include "absl/base/internal/thread_identity.h"
72
72
  #include "absl/base/internal/tsan_mutex_interface.h"
73
+ #include "absl/base/nullability.h"
73
74
  #include "absl/base/port.h"
74
75
  #include "absl/base/thread_annotations.h"
75
76
  #include "absl/synchronization/internal/kernel_timeout.h"
@@ -91,10 +92,10 @@ struct SynchWaitParams;
91
92
  // invariants. Proper usage of mutexes prevents concurrent access by different
92
93
  // threads to the same resource.
93
94
  //
94
- // A `Mutex` has two basic operations: `Mutex::Lock()` and `Mutex::Unlock()`.
95
- // The `Lock()` operation *acquires* a `Mutex` (in a state known as an
96
- // *exclusive* -- or *write* -- lock), and the `Unlock()` operation *releases* a
97
- // Mutex. During the span of time between the Lock() and Unlock() operations,
95
+ // A `Mutex` has two basic operations: `Mutex::lock()` and `Mutex::unlock()`.
96
+ // The `lock()` operation *acquires* a `Mutex` (in a state known as an
97
+ // *exclusive* -- or *write* -- lock), and the `unlock()` operation *releases* a
98
+ // Mutex. During the span of time between the lock() and unlock() operations,
98
99
  // a mutex is said to be *held*. By design, all mutexes support exclusive/write
99
100
  // locks, as this is the most common way to use a mutex.
100
101
  //
@@ -105,23 +106,23 @@ struct SynchWaitParams;
105
106
  //
106
107
  // The `Mutex` state machine for basic lock/unlock operations is quite simple:
107
108
  //
108
- // | | Lock() | Unlock() |
109
+ // | | lock() | unlock() |
109
110
  // |----------------+------------------------+----------|
110
111
  // | Free | Exclusive | invalid |
111
112
  // | Exclusive | blocks, then exclusive | Free |
112
113
  //
113
114
  // The full conditions are as follows.
114
115
  //
115
- // * Calls to `Unlock()` require that the mutex be held, and must be made in the
116
- // same thread that performed the corresponding `Lock()` operation which
116
+ // * Calls to `unlock()` require that the mutex be held, and must be made in the
117
+ // same thread that performed the corresponding `lock()` operation which
117
118
  // acquired the mutex; otherwise the call is invalid.
118
119
  //
119
120
  // * The mutex being non-reentrant (or non-recursive) means that a call to
120
- // `Lock()` or `TryLock()` must not be made in a thread that already holds the
121
- // mutex; such a call is invalid.
121
+ // `lock()` or `try_lock()` must not be made in a thread that already holds
122
+ // the mutex; such a call is invalid.
122
123
  //
123
124
  // * In other words, the state of being "held" has both a temporal component
124
- // (from `Lock()` until `Unlock()`) as well as a thread identity component:
125
+ // (from `lock()` until `unlock()`) as well as a thread identity component:
125
126
  // the mutex is held *by a particular thread*.
126
127
  //
127
128
  // An "invalid" operation has undefined behavior. The `Mutex` implementation
@@ -173,24 +174,32 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
173
174
 
174
175
  ~Mutex();
175
176
 
176
- // Mutex::Lock()
177
+ // Mutex::lock()
177
178
  //
178
179
  // Blocks the calling thread, if necessary, until this `Mutex` is free, and
179
180
  // then acquires it exclusively. (This lock is also known as a "write lock.")
180
- void Lock() ABSL_EXCLUSIVE_LOCK_FUNCTION();
181
+ void lock() ABSL_EXCLUSIVE_LOCK_FUNCTION();
181
182
 
182
- // Mutex::Unlock()
183
+ inline void Lock() ABSL_EXCLUSIVE_LOCK_FUNCTION() { lock(); }
184
+
185
+ // Mutex::unlock()
183
186
  //
184
187
  // Releases this `Mutex` and returns it from the exclusive/write state to the
185
188
  // free state. Calling thread must hold the `Mutex` exclusively.
186
- void Unlock() ABSL_UNLOCK_FUNCTION();
189
+ void unlock() ABSL_UNLOCK_FUNCTION();
190
+
191
+ inline void Unlock() ABSL_UNLOCK_FUNCTION() { unlock(); }
187
192
 
188
- // Mutex::TryLock()
193
+ // Mutex::try_lock()
189
194
  //
190
195
  // If the mutex can be acquired without blocking, does so exclusively and
191
196
  // returns `true`. Otherwise, returns `false`. Returns `true` with high
192
197
  // probability if the `Mutex` was free.
193
- ABSL_MUST_USE_RESULT bool TryLock() ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true);
198
+ [[nodiscard]] bool try_lock() ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true);
199
+
200
+ [[nodiscard]] bool TryLock() ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true) {
201
+ return try_lock();
202
+ }
194
203
 
195
204
  // Mutex::AssertHeld()
196
205
  //
@@ -210,19 +219,19 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
210
219
  // Neither read-locks nor write-locks are reentrant/recursive to avoid
211
220
  // potential client programming errors.
212
221
  //
213
- // The Mutex API provides `Writer*()` aliases for the existing `Lock()`,
214
- // `Unlock()` and `TryLock()` methods for use within applications mixing
215
- // reader/writer locks. Using `Reader*()` and `Writer*()` operations in this
222
+ // The Mutex API provides `Writer*()` aliases for the existing `lock()`,
223
+ // `unlock()` and `try_lock()` methods for use within applications mixing
224
+ // reader/writer locks. Using `*_shared()` and `Writer*()` operations in this
216
225
  // manner can make locking behavior clearer when mixing read and write modes.
217
226
  //
218
227
  // Introducing reader locks necessarily complicates the `Mutex` state
219
228
  // machine somewhat. The table below illustrates the allowed state transitions
220
- // of a mutex in such cases. Note that ReaderLock() may block even if the lock
221
- // is held in shared mode; this occurs when another thread is blocked on a
222
- // call to WriterLock().
229
+ // of a mutex in such cases. Note that lock_shared() may block even if the
230
+ // lock is held in shared mode; this occurs when another thread is blocked on
231
+ // a call to lock().
223
232
  //
224
233
  // ---------------------------------------------------------------------------
225
- // Operation: WriterLock() Unlock() ReaderLock() ReaderUnlock()
234
+ // Operation: lock() unlock() lock_shared() unlock_shared()
226
235
  // ---------------------------------------------------------------------------
227
236
  // State
228
237
  // ---------------------------------------------------------------------------
@@ -234,28 +243,35 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
234
243
  //
235
244
  // In comments below, "shared" refers to a state of Shared(n) for any n > 0.
236
245
 
237
- // Mutex::ReaderLock()
246
+ // Mutex::lock_shared()
238
247
  //
239
248
  // Blocks the calling thread, if necessary, until this `Mutex` is either free,
240
249
  // or in shared mode, and then acquires a share of it. Note that
241
- // `ReaderLock()` will block if some other thread has an exclusive/writer lock
242
- // on the mutex.
250
+ // `lock_shared()` will block if some other thread has an exclusive/writer
251
+ // lock on the mutex.
252
+ void lock_shared() ABSL_SHARED_LOCK_FUNCTION();
243
253
 
244
- void ReaderLock() ABSL_SHARED_LOCK_FUNCTION();
254
+ void ReaderLock() ABSL_SHARED_LOCK_FUNCTION() { lock_shared(); }
245
255
 
246
- // Mutex::ReaderUnlock()
256
+ // Mutex::unlock_shared()
247
257
  //
248
- // Releases a read share of this `Mutex`. `ReaderUnlock` may return a mutex to
249
- // the free state if this thread holds the last reader lock on the mutex. Note
250
- // that you cannot call `ReaderUnlock()` on a mutex held in write mode.
251
- void ReaderUnlock() ABSL_UNLOCK_FUNCTION();
258
+ // Releases a read share of this `Mutex`. `unlock_shared` may return a mutex
259
+ // to the free state if this thread holds the last reader lock on the mutex.
260
+ // Note that you cannot call `unlock_shared()` on a mutex held in write mode.
261
+ void unlock_shared() ABSL_UNLOCK_FUNCTION();
262
+
263
+ void ReaderUnlock() ABSL_UNLOCK_FUNCTION() { unlock_shared(); }
252
264
 
253
- // Mutex::ReaderTryLock()
265
+ // Mutex::try_lock_shared()
254
266
  //
255
267
  // If the mutex can be acquired without blocking, acquires this mutex for
256
268
  // shared access and returns `true`. Otherwise, returns `false`. Returns
257
269
  // `true` with high probability if the `Mutex` was free or shared.
258
- ABSL_MUST_USE_RESULT bool ReaderTryLock() ABSL_SHARED_TRYLOCK_FUNCTION(true);
270
+ [[nodiscard]] bool try_lock_shared() ABSL_SHARED_TRYLOCK_FUNCTION(true);
271
+
272
+ [[nodiscard]] bool ReaderTryLock() ABSL_SHARED_TRYLOCK_FUNCTION(true) {
273
+ return try_lock_shared();
274
+ }
259
275
 
260
276
  // Mutex::AssertReaderHeld()
261
277
  //
@@ -277,13 +293,12 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
277
293
  // These methods may be used (along with the complementary `Reader*()`
278
294
  // methods) to distinguish simple exclusive `Mutex` usage (`Lock()`,
279
295
  // etc.) from reader/writer lock usage.
280
- void WriterLock() ABSL_EXCLUSIVE_LOCK_FUNCTION() { this->Lock(); }
296
+ void WriterLock() ABSL_EXCLUSIVE_LOCK_FUNCTION() { lock(); }
281
297
 
282
- void WriterUnlock() ABSL_UNLOCK_FUNCTION() { this->Unlock(); }
298
+ void WriterUnlock() ABSL_UNLOCK_FUNCTION() { unlock(); }
283
299
 
284
- ABSL_MUST_USE_RESULT bool WriterTryLock()
285
- ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true) {
286
- return this->TryLock();
300
+ [[nodiscard]] bool WriterTryLock() ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true) {
301
+ return try_lock();
287
302
  }
288
303
 
289
304
  // ---------------------------------------------------------------------------
@@ -450,7 +465,9 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
450
465
  // substantially reduce `Mutex` performance; it should be set only for
451
466
  // non-production runs. Optimization options may also disable invariant
452
467
  // checks.
453
- void EnableInvariantDebugging(void (*invariant)(void*), void* arg);
468
+ void EnableInvariantDebugging(
469
+ void (*absl_nullable invariant)(void* absl_nullability_unknown),
470
+ void* absl_nullability_unknown arg);
454
471
 
455
472
  // Mutex::EnableDebugLog()
456
473
  //
@@ -459,7 +476,7 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
459
476
  // call to `EnableInvariantDebugging()` or `EnableDebugLog()` has been made.
460
477
  //
461
478
  // Note: This method substantially reduces `Mutex` performance.
462
- void EnableDebugLog(const char* name);
479
+ void EnableDebugLog(const char* absl_nullable name);
463
480
 
464
481
  // Deadlock detection
465
482
 
@@ -509,20 +526,23 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
509
526
 
510
527
  // Post()/Wait() versus associated PerThreadSem; in class for required
511
528
  // friendship with PerThreadSem.
512
- static void IncrementSynchSem(Mutex* mu, base_internal::PerThreadSynch* w);
513
- static bool DecrementSynchSem(Mutex* mu, base_internal::PerThreadSynch* w,
529
+ static void IncrementSynchSem(Mutex* absl_nonnull mu,
530
+ base_internal::PerThreadSynch* absl_nonnull w);
531
+ static bool DecrementSynchSem(Mutex* absl_nonnull mu,
532
+ base_internal::PerThreadSynch* absl_nonnull w,
514
533
  synchronization_internal::KernelTimeout t);
515
534
 
516
535
  // slow path acquire
517
- void LockSlowLoop(SynchWaitParams* waitp, int flags);
536
+ void LockSlowLoop(SynchWaitParams* absl_nonnull waitp, int flags);
518
537
  // wrappers around LockSlowLoop()
519
- bool LockSlowWithDeadline(MuHow how, const Condition* cond,
538
+ bool LockSlowWithDeadline(MuHow absl_nonnull how,
539
+ const Condition* absl_nullable cond,
520
540
  synchronization_internal::KernelTimeout t,
521
541
  int flags);
522
- void LockSlow(MuHow how, const Condition* cond,
542
+ void LockSlow(MuHow absl_nonnull how, const Condition* absl_nullable cond,
523
543
  int flags) ABSL_ATTRIBUTE_COLD;
524
544
  // slow path release
525
- void UnlockSlow(SynchWaitParams* waitp) ABSL_ATTRIBUTE_COLD;
545
+ void UnlockSlow(SynchWaitParams* absl_nullable waitp) ABSL_ATTRIBUTE_COLD;
526
546
  // TryLock slow path.
527
547
  bool TryLockSlow();
528
548
  // ReaderTryLock slow path.
@@ -533,20 +553,21 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
533
553
  bool LockWhenCommon(const Condition& cond,
534
554
  synchronization_internal::KernelTimeout t, bool write);
535
555
  // Attempt to remove thread s from queue.
536
- void TryRemove(base_internal::PerThreadSynch* s);
556
+ void TryRemove(base_internal::PerThreadSynch* absl_nonnull s);
537
557
  // Block a thread on mutex.
538
- void Block(base_internal::PerThreadSynch* s);
558
+ void Block(base_internal::PerThreadSynch* absl_nonnull s);
539
559
  // Wake a thread; return successor.
540
- base_internal::PerThreadSynch* Wakeup(base_internal::PerThreadSynch* w);
560
+ base_internal::PerThreadSynch* absl_nullable Wakeup(
561
+ base_internal::PerThreadSynch* absl_nonnull w);
541
562
  void Dtor();
542
563
 
543
564
  friend class CondVar; // for access to Trans()/Fer().
544
- void Trans(MuHow how); // used for CondVar->Mutex transfer
545
- void Fer(
546
- base_internal::PerThreadSynch* w); // used for CondVar->Mutex transfer
565
+ void Trans(MuHow absl_nonnull how); // used for CondVar->Mutex transfer
566
+ void Fer(base_internal::PerThreadSynch* absl_nonnull
567
+ w); // used for CondVar->Mutex transfer
547
568
 
548
569
  // Catch the error of writing Mutex when intending MutexLock.
549
- explicit Mutex(const volatile Mutex* /*ignored*/) {}
570
+ explicit Mutex(const volatile Mutex* absl_nullable /*ignored*/) {}
550
571
 
551
572
  Mutex(const Mutex&) = delete;
552
573
  Mutex& operator=(const Mutex&) = delete;
@@ -566,7 +587,7 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
566
587
  // Class Foo {
567
588
  // public:
568
589
  // Foo::Bar* Baz() {
569
- // MutexLock lock(&mu_);
590
+ // MutexLock lock(mu_);
570
591
  // ...
571
592
  // return bar;
572
593
  // }
@@ -578,31 +599,42 @@ class ABSL_SCOPED_LOCKABLE MutexLock {
578
599
  public:
579
600
  // Constructors
580
601
 
581
- // Calls `mu->Lock()` and returns when that call returns. That is, `*mu` is
602
+ // Calls `mu.lock()` and returns when that call returns. That is, `mu` is
603
+ // guaranteed to be locked when this object is constructed.
604
+ explicit MutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
605
+ ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
606
+ : mu_(mu) {
607
+ this->mu_.lock();
608
+ }
609
+
610
+ // Calls `mu->lock()` and returns when that call returns. That is, `*mu` is
582
611
  // guaranteed to be locked when this object is constructed. Requires that
583
612
  // `mu` be dereferenceable.
584
- explicit MutexLock(Mutex* mu) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu) : mu_(mu) {
585
- this->mu_->Lock();
586
- }
613
+ explicit MutexLock(Mutex* absl_nonnull mu) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
614
+ : MutexLock(*mu) {}
587
615
 
588
- // Like above, but calls `mu->LockWhen(cond)` instead. That is, in addition to
616
+ // Like above, but calls `mu.LockWhen(cond)` instead. That is, in addition to
589
617
  // the above, the condition given by `cond` is also guaranteed to hold when
590
618
  // this object is constructed.
591
- explicit MutexLock(Mutex* mu, const Condition& cond)
592
- ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
619
+ explicit MutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
620
+ const Condition& cond) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
593
621
  : mu_(mu) {
594
- this->mu_->LockWhen(cond);
622
+ this->mu_.LockWhen(cond);
595
623
  }
596
624
 
625
+ explicit MutexLock(Mutex* absl_nonnull mu, const Condition& cond)
626
+ ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
627
+ : MutexLock(*mu, cond) {}
628
+
597
629
  MutexLock(const MutexLock&) = delete; // NOLINT(runtime/mutex)
598
630
  MutexLock(MutexLock&&) = delete; // NOLINT(runtime/mutex)
599
631
  MutexLock& operator=(const MutexLock&) = delete;
600
632
  MutexLock& operator=(MutexLock&&) = delete;
601
633
 
602
- ~MutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_->Unlock(); }
634
+ ~MutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_.unlock(); }
603
635
 
604
636
  private:
605
- Mutex* const mu_;
637
+ Mutex& mu_;
606
638
  };
607
639
 
608
640
  // ReaderMutexLock
@@ -611,25 +643,34 @@ class ABSL_SCOPED_LOCKABLE MutexLock {
611
643
  // releases a shared lock on a `Mutex` via RAII.
612
644
  class ABSL_SCOPED_LOCKABLE ReaderMutexLock {
613
645
  public:
614
- explicit ReaderMutexLock(Mutex* mu) ABSL_SHARED_LOCK_FUNCTION(mu) : mu_(mu) {
615
- mu->ReaderLock();
646
+ explicit ReaderMutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
647
+ ABSL_SHARED_LOCK_FUNCTION(mu)
648
+ : mu_(mu) {
649
+ mu.lock_shared();
616
650
  }
617
651
 
618
- explicit ReaderMutexLock(Mutex* mu, const Condition& cond)
619
- ABSL_SHARED_LOCK_FUNCTION(mu)
652
+ explicit ReaderMutexLock(Mutex* absl_nonnull mu) ABSL_SHARED_LOCK_FUNCTION(mu)
653
+ : ReaderMutexLock(*mu) {}
654
+
655
+ explicit ReaderMutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
656
+ const Condition& cond) ABSL_SHARED_LOCK_FUNCTION(mu)
620
657
  : mu_(mu) {
621
- mu->ReaderLockWhen(cond);
658
+ mu.ReaderLockWhen(cond);
622
659
  }
623
660
 
661
+ explicit ReaderMutexLock(Mutex* absl_nonnull mu, const Condition& cond)
662
+ ABSL_SHARED_LOCK_FUNCTION(mu)
663
+ : ReaderMutexLock(*mu, cond) {}
664
+
624
665
  ReaderMutexLock(const ReaderMutexLock&) = delete;
625
666
  ReaderMutexLock(ReaderMutexLock&&) = delete;
626
667
  ReaderMutexLock& operator=(const ReaderMutexLock&) = delete;
627
668
  ReaderMutexLock& operator=(ReaderMutexLock&&) = delete;
628
669
 
629
- ~ReaderMutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_->ReaderUnlock(); }
670
+ ~ReaderMutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_.unlock_shared(); }
630
671
 
631
672
  private:
632
- Mutex* const mu_;
673
+ Mutex& mu_;
633
674
  };
634
675
 
635
676
  // WriterMutexLock
@@ -638,26 +679,36 @@ class ABSL_SCOPED_LOCKABLE ReaderMutexLock {
638
679
  // releases a write (exclusive) lock on a `Mutex` via RAII.
639
680
  class ABSL_SCOPED_LOCKABLE WriterMutexLock {
640
681
  public:
641
- explicit WriterMutexLock(Mutex* mu) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
682
+ explicit WriterMutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
683
+ ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
642
684
  : mu_(mu) {
643
- mu->WriterLock();
685
+ mu.lock();
644
686
  }
645
687
 
646
- explicit WriterMutexLock(Mutex* mu, const Condition& cond)
688
+ explicit WriterMutexLock(Mutex* absl_nonnull mu)
689
+ ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
690
+ : WriterMutexLock(*mu) {}
691
+
692
+ explicit WriterMutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
693
+ const Condition& cond)
647
694
  ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
648
695
  : mu_(mu) {
649
- mu->WriterLockWhen(cond);
696
+ mu.WriterLockWhen(cond);
650
697
  }
651
698
 
699
+ explicit WriterMutexLock(Mutex* absl_nonnull mu, const Condition& cond)
700
+ ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
701
+ : WriterMutexLock(*mu, cond) {}
702
+
652
703
  WriterMutexLock(const WriterMutexLock&) = delete;
653
704
  WriterMutexLock(WriterMutexLock&&) = delete;
654
705
  WriterMutexLock& operator=(const WriterMutexLock&) = delete;
655
706
  WriterMutexLock& operator=(WriterMutexLock&&) = delete;
656
707
 
657
- ~WriterMutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_->WriterUnlock(); }
708
+ ~WriterMutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_.unlock(); }
658
709
 
659
710
  private:
660
- Mutex* const mu_;
711
+ Mutex& mu_;
661
712
  };
662
713
 
663
714
  // -----------------------------------------------------------------------------
@@ -704,7 +755,7 @@ class ABSL_SCOPED_LOCKABLE WriterMutexLock {
704
755
  // Example using a scope guard:
705
756
  //
706
757
  // {
707
- // MutexLock lock(&mu_, count_is_zero);
758
+ // MutexLock lock(mu_, count_is_zero);
708
759
  // // ...
709
760
  // }
710
761
  //
@@ -715,7 +766,8 @@ class ABSL_SCOPED_LOCKABLE WriterMutexLock {
715
766
  class Condition {
716
767
  public:
717
768
  // A Condition that returns the result of "(*func)(arg)"
718
- Condition(bool (*func)(void*), void* arg);
769
+ Condition(bool (*absl_nonnull func)(void* absl_nullability_unknown),
770
+ void* absl_nullability_unknown arg);
719
771
 
720
772
  // Templated version for people who are averse to casts.
721
773
  //
@@ -727,7 +779,8 @@ class Condition {
727
779
  //
728
780
  // See class comment for performance advice.
729
781
  template <typename T>
730
- Condition(bool (*func)(T*), T* arg);
782
+ Condition(bool (*absl_nonnull func)(T* absl_nullability_unknown),
783
+ T* absl_nullability_unknown arg);
731
784
 
732
785
  // Same as above, but allows for cases where `arg` comes from a pointer that
733
786
  // is convertible to the function parameter type `T*` but not an exact match.
@@ -741,8 +794,10 @@ class Condition {
741
794
  // a function template is passed as `func`. Also, the dummy `typename = void`
742
795
  // template parameter exists just to work around a MSVC mangling bug.
743
796
  template <typename T, typename = void>
744
- Condition(bool (*func)(T*),
745
- typename absl::internal::type_identity<T>::type* arg);
797
+ Condition(
798
+ bool (*absl_nonnull func)(T* absl_nullability_unknown),
799
+ typename absl::internal::type_identity<T>::type* absl_nullability_unknown
800
+ arg);
746
801
 
747
802
  // Templated version for invoking a method that returns a `bool`.
748
803
  //
@@ -753,16 +808,19 @@ class Condition {
753
808
  // methods to come from base classes. A simpler signature like
754
809
  // `Condition(T*, bool (T::*)())` does not suffice.
755
810
  template <typename T>
756
- Condition(T* object,
757
- bool (absl::internal::type_identity<T>::type::*method)());
811
+ Condition(
812
+ T* absl_nonnull object,
813
+ bool (absl::internal::type_identity<T>::type::* absl_nonnull method)());
758
814
 
759
815
  // Same as above, for const members
760
816
  template <typename T>
761
- Condition(const T* object,
762
- bool (absl::internal::type_identity<T>::type::*method)() const);
817
+ Condition(
818
+ const T* absl_nonnull object,
819
+ bool (absl::internal::type_identity<T>::type::* absl_nonnull method)()
820
+ const);
763
821
 
764
822
  // A Condition that returns the value of `*cond`
765
- explicit Condition(const bool* cond);
823
+ explicit Condition(const bool* absl_nonnull cond);
766
824
 
767
825
  // Templated version for invoking a functor that returns a `bool`.
768
826
  // This approach accepts pointers to non-mutable lambdas, `std::function`,
@@ -791,7 +849,7 @@ class Condition {
791
849
  // `bool operator() const`.
792
850
  template <typename T, typename E = decltype(static_cast<bool (T::*)() const>(
793
851
  &T::operator()))>
794
- explicit Condition(const T* obj)
852
+ explicit Condition(const T* absl_nonnull obj)
795
853
  : Condition(obj, static_cast<bool (T::*)() const>(&T::operator())) {}
796
854
 
797
855
  // A Condition that always returns `true`.
@@ -817,7 +875,8 @@ class Condition {
817
875
  // Two `Condition` values are guaranteed equal if both their `func` and `arg`
818
876
  // components are the same. A null pointer is equivalent to a `true`
819
877
  // condition.
820
- static bool GuaranteedEqual(const Condition* a, const Condition* b);
878
+ static bool GuaranteedEqual(const Condition* absl_nullable a,
879
+ const Condition* absl_nullable b);
821
880
 
822
881
  private:
823
882
  // Sizing an allocation for a method pointer can be subtle. In the Itanium
@@ -842,17 +901,17 @@ class Condition {
842
901
  #endif
843
902
 
844
903
  // Function with which to evaluate callbacks and/or arguments.
845
- bool (*eval_)(const Condition*) = nullptr;
904
+ bool (*absl_nullable eval_)(const Condition* absl_nonnull) = nullptr;
846
905
 
847
906
  // Either an argument for a function call or an object for a method call.
848
- void* arg_ = nullptr;
907
+ void* absl_nullable arg_ = nullptr;
849
908
 
850
909
  // Various functions eval_ can point to:
851
- static bool CallVoidPtrFunction(const Condition*);
910
+ static bool CallVoidPtrFunction(const Condition* absl_nonnull c);
852
911
  template <typename T>
853
- static bool CastAndCallFunction(const Condition* c);
912
+ static bool CastAndCallFunction(const Condition* absl_nonnull c);
854
913
  template <typename T, typename ConditionMethodPtr>
855
- static bool CastAndCallMethod(const Condition* c);
914
+ static bool CastAndCallMethod(const Condition* absl_nonnull c);
856
915
 
857
916
  // Helper methods for storing, validating, and reading callback arguments.
858
917
  template <typename T>
@@ -864,11 +923,11 @@ class Condition {
864
923
  }
865
924
 
866
925
  template <typename T>
867
- inline void ReadCallback(T* callback) const {
926
+ inline void ReadCallback(T* absl_nonnull callback) const {
868
927
  std::memcpy(callback, callback_, sizeof(*callback));
869
928
  }
870
929
 
871
- static bool AlwaysTrue(const Condition*) { return true; }
930
+ static bool AlwaysTrue(const Condition* absl_nullable) { return true; }
872
931
 
873
932
  // Used only to create kTrue.
874
933
  constexpr Condition() : eval_(AlwaysTrue), arg_(nullptr) {}
@@ -922,7 +981,7 @@ class CondVar {
922
981
  // spurious wakeup), then reacquires the `Mutex` and returns.
923
982
  //
924
983
  // Requires and ensures that the current thread holds the `Mutex`.
925
- void Wait(Mutex* mu) {
984
+ void Wait(Mutex* absl_nonnull mu) {
926
985
  WaitCommon(mu, synchronization_internal::KernelTimeout::Never());
927
986
  }
928
987
 
@@ -939,7 +998,7 @@ class CondVar {
939
998
  // to return `true` or `false`.
940
999
  //
941
1000
  // Requires and ensures that the current thread holds the `Mutex`.
942
- bool WaitWithTimeout(Mutex* mu, absl::Duration timeout) {
1001
+ bool WaitWithTimeout(Mutex* absl_nonnull mu, absl::Duration timeout) {
943
1002
  return WaitCommon(mu, synchronization_internal::KernelTimeout(timeout));
944
1003
  }
945
1004
 
@@ -958,7 +1017,7 @@ class CondVar {
958
1017
  // to return `true` or `false`.
959
1018
  //
960
1019
  // Requires and ensures that the current thread holds the `Mutex`.
961
- bool WaitWithDeadline(Mutex* mu, absl::Time deadline) {
1020
+ bool WaitWithDeadline(Mutex* absl_nonnull mu, absl::Time deadline) {
962
1021
  return WaitCommon(mu, synchronization_internal::KernelTimeout(deadline));
963
1022
  }
964
1023
 
@@ -977,11 +1036,12 @@ class CondVar {
977
1036
  // Causes all subsequent uses of this `CondVar` to be logged via
978
1037
  // `ABSL_RAW_LOG(INFO)`. Log entries are tagged with `name` if `name != 0`.
979
1038
  // Note: this method substantially reduces `CondVar` performance.
980
- void EnableDebugLog(const char* name);
1039
+ void EnableDebugLog(const char* absl_nullable name);
981
1040
 
982
1041
  private:
983
- bool WaitCommon(Mutex* mutex, synchronization_internal::KernelTimeout t);
984
- void Remove(base_internal::PerThreadSynch* s);
1042
+ bool WaitCommon(Mutex* absl_nonnull mutex,
1043
+ synchronization_internal::KernelTimeout t);
1044
+ void Remove(base_internal::PerThreadSynch* absl_nonnull s);
985
1045
  std::atomic<intptr_t> cv_; // Condition variable state.
986
1046
  CondVar(const CondVar&) = delete;
987
1047
  CondVar& operator=(const CondVar&) = delete;
@@ -997,14 +1057,15 @@ class CondVar {
997
1057
  // MutexLockMaybe is like MutexLock, but is a no-op when mu is null.
998
1058
  class ABSL_SCOPED_LOCKABLE MutexLockMaybe {
999
1059
  public:
1000
- explicit MutexLockMaybe(Mutex* mu) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
1060
+ explicit MutexLockMaybe(Mutex* absl_nullable mu)
1061
+ ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
1001
1062
  : mu_(mu) {
1002
1063
  if (this->mu_ != nullptr) {
1003
- this->mu_->Lock();
1064
+ this->mu_->lock();
1004
1065
  }
1005
1066
  }
1006
1067
 
1007
- explicit MutexLockMaybe(Mutex* mu, const Condition& cond)
1068
+ explicit MutexLockMaybe(Mutex* absl_nullable mu, const Condition& cond)
1008
1069
  ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
1009
1070
  : mu_(mu) {
1010
1071
  if (this->mu_ != nullptr) {
@@ -1014,12 +1075,12 @@ class ABSL_SCOPED_LOCKABLE MutexLockMaybe {
1014
1075
 
1015
1076
  ~MutexLockMaybe() ABSL_UNLOCK_FUNCTION() {
1016
1077
  if (this->mu_ != nullptr) {
1017
- this->mu_->Unlock();
1078
+ this->mu_->unlock();
1018
1079
  }
1019
1080
  }
1020
1081
 
1021
1082
  private:
1022
- Mutex* const mu_;
1083
+ Mutex* absl_nullable const mu_;
1023
1084
  MutexLockMaybe(const MutexLockMaybe&) = delete;
1024
1085
  MutexLockMaybe(MutexLockMaybe&&) = delete;
1025
1086
  MutexLockMaybe& operator=(const MutexLockMaybe&) = delete;
@@ -1032,27 +1093,37 @@ class ABSL_SCOPED_LOCKABLE MutexLockMaybe {
1032
1093
  // mutex before destruction. `Release()` may be called at most once.
1033
1094
  class ABSL_SCOPED_LOCKABLE ReleasableMutexLock {
1034
1095
  public:
1035
- explicit ReleasableMutexLock(Mutex* mu) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
1036
- : mu_(mu) {
1037
- this->mu_->Lock();
1096
+ explicit ReleasableMutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(
1097
+ this)) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
1098
+ : mu_(&mu) {
1099
+ this->mu_->lock();
1038
1100
  }
1039
1101
 
1040
- explicit ReleasableMutexLock(Mutex* mu, const Condition& cond)
1102
+ explicit ReleasableMutexLock(Mutex* absl_nonnull mu)
1041
1103
  ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
1042
- : mu_(mu) {
1104
+ : ReleasableMutexLock(*mu) {}
1105
+
1106
+ explicit ReleasableMutexLock(
1107
+ Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
1108
+ const Condition& cond) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
1109
+ : mu_(&mu) {
1043
1110
  this->mu_->LockWhen(cond);
1044
1111
  }
1045
1112
 
1113
+ explicit ReleasableMutexLock(Mutex* absl_nonnull mu, const Condition& cond)
1114
+ ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
1115
+ : ReleasableMutexLock(*mu, cond) {}
1116
+
1046
1117
  ~ReleasableMutexLock() ABSL_UNLOCK_FUNCTION() {
1047
1118
  if (this->mu_ != nullptr) {
1048
- this->mu_->Unlock();
1119
+ this->mu_->unlock();
1049
1120
  }
1050
1121
  }
1051
1122
 
1052
1123
  void Release() ABSL_UNLOCK_FUNCTION();
1053
1124
 
1054
1125
  private:
1055
- Mutex* mu_;
1126
+ Mutex* absl_nonnull mu_;
1056
1127
  ReleasableMutexLock(const ReleasableMutexLock&) = delete;
1057
1128
  ReleasableMutexLock(ReleasableMutexLock&&) = delete;
1058
1129
  ReleasableMutexLock& operator=(const ReleasableMutexLock&) = delete;
@@ -1084,7 +1155,7 @@ inline CondVar::CondVar() : cv_(0) {}
1084
1155
 
1085
1156
  // static
1086
1157
  template <typename T, typename ConditionMethodPtr>
1087
- bool Condition::CastAndCallMethod(const Condition* c) {
1158
+ bool Condition::CastAndCallMethod(const Condition* absl_nonnull c) {
1088
1159
  T* object = static_cast<T*>(c->arg_);
1089
1160
  ConditionMethodPtr condition_method_pointer;
1090
1161
  c->ReadCallback(&condition_method_pointer);
@@ -1093,7 +1164,7 @@ bool Condition::CastAndCallMethod(const Condition* c) {
1093
1164
 
1094
1165
  // static
1095
1166
  template <typename T>
1096
- bool Condition::CastAndCallFunction(const Condition* c) {
1167
+ bool Condition::CastAndCallFunction(const Condition* absl_nonnull c) {
1097
1168
  bool (*function)(T*);
1098
1169
  c->ReadCallback(&function);
1099
1170
  T* argument = static_cast<T*>(c->arg_);
@@ -1101,7 +1172,9 @@ bool Condition::CastAndCallFunction(const Condition* c) {
1101
1172
  }
1102
1173
 
1103
1174
  template <typename T>
1104
- inline Condition::Condition(bool (*func)(T*), T* arg)
1175
+ inline Condition::Condition(
1176
+ bool (*absl_nonnull func)(T* absl_nullability_unknown),
1177
+ T* absl_nullability_unknown arg)
1105
1178
  : eval_(&CastAndCallFunction<T>),
1106
1179
  arg_(const_cast<void*>(static_cast<const void*>(arg))) {
1107
1180
  static_assert(sizeof(&func) <= sizeof(callback_),
@@ -1111,13 +1184,16 @@ inline Condition::Condition(bool (*func)(T*), T* arg)
1111
1184
 
1112
1185
  template <typename T, typename>
1113
1186
  inline Condition::Condition(
1114
- bool (*func)(T*), typename absl::internal::type_identity<T>::type* arg)
1187
+ bool (*absl_nonnull func)(T* absl_nullability_unknown),
1188
+ typename absl::internal::type_identity<T>::type* absl_nullability_unknown
1189
+ arg)
1115
1190
  // Just delegate to the overload above.
1116
1191
  : Condition(func, arg) {}
1117
1192
 
1118
1193
  template <typename T>
1119
1194
  inline Condition::Condition(
1120
- T* object, bool (absl::internal::type_identity<T>::type::*method)())
1195
+ T* absl_nonnull object,
1196
+ bool (absl::internal::type_identity<T>::type::* absl_nonnull method)())
1121
1197
  : eval_(&CastAndCallMethod<T, decltype(method)>), arg_(object) {
1122
1198
  static_assert(sizeof(&method) <= sizeof(callback_),
1123
1199
  "An overlarge method pointer was passed to Condition.");
@@ -1126,8 +1202,9 @@ inline Condition::Condition(
1126
1202
 
1127
1203
  template <typename T>
1128
1204
  inline Condition::Condition(
1129
- const T* object,
1130
- bool (absl::internal::type_identity<T>::type::*method)() const)
1205
+ const T* absl_nonnull object,
1206
+ bool (absl::internal::type_identity<T>::type::* absl_nonnull method)()
1207
+ const)
1131
1208
  : eval_(&CastAndCallMethod<const T, decltype(method)>),
1132
1209
  arg_(reinterpret_cast<void*>(const_cast<T*>(object))) {
1133
1210
  StoreCallback(method);
@@ -1145,7 +1222,7 @@ inline Condition::Condition(
1145
1222
  // binary; if this function is called a second time with a different function
1146
1223
  // pointer, the value is ignored (and will cause an assertion failure in debug
1147
1224
  // mode.)
1148
- void RegisterMutexProfiler(void (*fn)(int64_t wait_cycles));
1225
+ void RegisterMutexProfiler(void (*absl_nonnull fn)(int64_t wait_cycles));
1149
1226
 
1150
1227
  // Register a hook for Mutex tracing.
1151
1228
  //
@@ -1159,8 +1236,9 @@ void RegisterMutexProfiler(void (*fn)(int64_t wait_cycles));
1159
1236
  //
1160
1237
  // This has the same ordering and single-use limitations as
1161
1238
  // RegisterMutexProfiler() above.
1162
- void RegisterMutexTracer(void (*fn)(const char* msg, const void* obj,
1163
- int64_t wait_cycles));
1239
+ void RegisterMutexTracer(void (*absl_nonnull fn)(const char* absl_nonnull msg,
1240
+ const void* absl_nonnull obj,
1241
+ int64_t wait_cycles));
1164
1242
 
1165
1243
  // Register a hook for CondVar tracing.
1166
1244
  //
@@ -1174,7 +1252,8 @@ void RegisterMutexTracer(void (*fn)(const char* msg, const void* obj,
1174
1252
  //
1175
1253
  // This has the same ordering and single-use limitations as
1176
1254
  // RegisterMutexProfiler() above.
1177
- void RegisterCondVarTracer(void (*fn)(const char* msg, const void* cv));
1255
+ void RegisterCondVarTracer(void (*absl_nonnull fn)(
1256
+ const char* absl_nonnull msg, const void* absl_nonnull cv));
1178
1257
 
1179
1258
  // EnableMutexInvariantDebugging()
1180
1259
  //