re2 1.24.0 → 1.25.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 (370) hide show
  1. package/LICENSE +15 -20
  2. package/README.md +63 -4
  3. package/binding.gyp +1 -2
  4. package/lib/addon.cc +9 -5
  5. package/lib/exec.cc +4 -4
  6. package/lib/match.cc +4 -4
  7. package/lib/new.cc +6 -6
  8. package/lib/pattern.cc +148 -1
  9. package/lib/replace.cc +5 -4
  10. package/lib/search.cc +1 -1
  11. package/lib/set.cc +85 -10
  12. package/lib/test.cc +1 -1
  13. package/lib/unicode_properties.h +15840 -0
  14. package/lib/wrapped_re2.h +40 -4
  15. package/lib/wrapped_re2_set.h +3 -1
  16. package/llms-full.txt +497 -0
  17. package/llms.txt +135 -0
  18. package/package.json +19 -11
  19. package/re2.d.ts +2 -0
  20. package/re2.js +1 -0
  21. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
  22. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  23. package/vendor/abseil-cpp/FAQ.md +130 -79
  24. package/vendor/abseil-cpp/MODULE.bazel +6 -7
  25. package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
  26. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
  27. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
  28. package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  29. package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
  30. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
  31. package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
  32. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
  33. package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
  34. package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
  35. package/vendor/abseil-cpp/absl/base/casts.h +8 -1
  36. package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
  37. package/vendor/abseil-cpp/absl/base/config.h +53 -9
  38. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
  39. package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
  40. package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
  41. package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
  42. package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
  43. package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
  44. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
  45. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
  46. package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  47. package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
  48. package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  49. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  50. package/vendor/abseil-cpp/absl/base/macros.h +36 -20
  51. package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
  52. package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
  53. package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
  54. package/vendor/abseil-cpp/absl/base/options.h +55 -1
  55. package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
  56. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  57. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  58. package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
  59. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
  60. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
  61. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
  62. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  63. package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
  64. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
  65. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
  68. package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
  69. package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
  70. package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
  71. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
  72. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
  73. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
  74. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
  75. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
  76. package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
  77. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
  78. package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
  79. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
  80. package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
  81. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  82. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
  83. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
  84. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
  87. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
  88. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
  89. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
  90. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
  91. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
  92. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
  93. package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
  94. package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
  95. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
  96. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
  97. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
  101. package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
  102. package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
  103. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
  104. package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
  105. package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
  106. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
  107. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
  108. package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
  109. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
  110. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
  111. package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  112. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  113. package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  114. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
  115. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
  116. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
  117. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  118. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
  119. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
  120. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
  121. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
  122. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
  123. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  124. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
  125. package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
  126. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
  127. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
  128. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
  129. package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  130. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
  131. package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
  132. package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  133. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
  134. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
  135. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  136. package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
  137. package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
  138. package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
  139. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
  140. package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
  141. package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
  142. package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
  143. package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
  144. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
  145. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
  146. package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
  147. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
  148. package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
  149. package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
  150. package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
  151. package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
  152. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
  153. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
  154. package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
  155. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  156. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  157. package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
  158. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
  159. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
  160. package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
  161. package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
  162. package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
  163. package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
  164. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
  165. package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
  166. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
  167. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
  168. package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
  169. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
  170. package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  171. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
  172. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
  173. package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
  174. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  175. package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
  176. package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  177. package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  178. package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
  179. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
  180. package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
  181. package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
  182. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
  183. package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
  184. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
  185. package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
  186. package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  187. package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
  188. package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
  189. package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
  190. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  191. package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
  192. package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
  193. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
  194. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
  195. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
  196. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
  197. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
  198. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
  199. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
  200. package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
  201. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
  202. package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
  203. package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
  204. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  205. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
  206. package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  207. package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
  208. package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
  209. package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  210. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
  211. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  212. package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  213. package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  214. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  215. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
  216. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
  217. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  218. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
  219. package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  220. package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
  221. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  222. package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  223. package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
  224. package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
  225. package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  226. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
  227. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  228. package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
  229. package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
  230. package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  231. package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
  232. package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
  233. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
  234. package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  235. package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
  236. package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
  237. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  238. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
  239. package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
  240. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
  241. package/vendor/abseil-cpp/absl/status/status.cc +62 -70
  242. package/vendor/abseil-cpp/absl/status/status.h +249 -23
  243. package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
  244. package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
  245. package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
  246. package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
  247. package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
  248. package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
  249. package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
  250. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
  251. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  252. package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
  253. package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
  254. package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
  255. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
  256. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
  257. package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
  258. package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
  259. package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
  260. package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
  261. package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  262. package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
  263. package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
  264. package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
  265. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
  266. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
  267. package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
  268. package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
  269. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
  270. package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
  271. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  272. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  273. package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  274. package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
  275. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
  276. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
  277. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
  278. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
  279. package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  280. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  281. package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  282. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
  283. package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
  284. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
  285. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
  286. package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
  287. package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  288. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
  289. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
  290. package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
  291. package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
  292. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
  293. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
  294. package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
  295. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
  296. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
  297. package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
  298. package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
  299. package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
  300. package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
  301. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
  302. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
  303. package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  304. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
  305. package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
  306. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
  307. package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
  308. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
  309. package/vendor/abseil-cpp/absl/time/clock.h +3 -0
  310. package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
  311. package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
  312. package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
  313. package/vendor/abseil-cpp/absl/time/format.cc +3 -10
  314. package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
  315. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
  316. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
  317. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
  318. package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  319. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  320. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
  321. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
  322. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
  323. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
  324. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
  325. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
  326. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
  327. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
  328. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
  329. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
  330. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
  331. package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
  332. package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
  333. package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
  334. package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
  335. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
  336. package/vendor/abseil-cpp/absl/types/any.h +26 -4
  337. package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
  338. package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
  339. package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
  340. package/vendor/abseil-cpp/absl/types/compare.h +4 -4
  341. package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
  342. package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
  343. package/vendor/abseil-cpp/absl/types/optional.h +30 -3
  344. package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
  345. package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
  346. package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
  347. package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
  348. package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
  349. package/vendor/abseil-cpp/absl/types/span.h +19 -23
  350. package/vendor/abseil-cpp/absl/types/variant.h +75 -18
  351. package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
  352. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
  353. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
  354. package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
  355. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
  356. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
  357. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
  358. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
  359. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
  360. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
  361. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  362. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
  363. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
  364. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
  365. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
  366. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
  367. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
  368. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
  369. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
  370. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
@@ -159,7 +159,7 @@ uniform_real_distribution<RealType>::operator()(
159
159
  using random_internal::GeneratePositiveTag;
160
160
  using random_internal::GenerateRealFromBits;
161
161
  using real_type =
162
- absl::conditional_t<std::is_same<RealType, float>::value, float, double>;
162
+ std::conditional_t<std::is_same<RealType, float>::value, float, double>;
163
163
 
164
164
  while (true) {
165
165
  const result_type sample =
@@ -65,11 +65,14 @@ cc_library(
65
65
  "//absl/debugging:stacktrace",
66
66
  "//absl/debugging:symbolize",
67
67
  "//absl/functional:function_ref",
68
+ "//absl/hash",
68
69
  "//absl/memory",
69
70
  "//absl/strings",
70
71
  "//absl/strings:cord",
71
72
  "//absl/strings:str_format",
72
73
  "//absl/types:optional",
74
+ "//absl/types:optional_ref",
75
+ "//absl/types:source_location",
73
76
  "//absl/types:span",
74
77
  ],
75
78
  )
@@ -84,6 +87,7 @@ cc_test(
84
87
  "//absl/strings",
85
88
  "//absl/strings:cord",
86
89
  "//absl/strings:str_format",
90
+ "//absl/types:source_location",
87
91
  "@googletest//:gtest",
88
92
  "@googletest//:gtest_main",
89
93
  ],
@@ -96,6 +100,7 @@ cc_binary(
96
100
  tags = ["benchmark"],
97
101
  deps = [
98
102
  ":status",
103
+ "//absl/types:source_location",
99
104
  "@google_benchmark//:benchmark_main",
100
105
  ],
101
106
  )
@@ -122,6 +127,8 @@ cc_library(
122
127
  "//absl/strings",
123
128
  "//absl/strings:has_ostream_operator",
124
129
  "//absl/strings:str_format",
130
+ "//absl/types:source_location",
131
+ "//absl/types:span",
125
132
  "//absl/types:variant",
126
133
  "//absl/utility",
127
134
  ],
@@ -139,6 +146,7 @@ cc_test(
139
146
  "//absl/memory",
140
147
  "//absl/strings",
141
148
  "//absl/types:any",
149
+ "//absl/types:source_location",
142
150
  "//absl/types:variant",
143
151
  "//absl/utility",
144
152
  "@googletest//:gtest",
@@ -158,6 +166,78 @@ cc_binary(
158
166
  ],
159
167
  )
160
168
 
169
+ cc_library(
170
+ name = "status_builder",
171
+ srcs = ["status_builder.cc"],
172
+ hdrs = ["status_builder.h"],
173
+ copts = ABSL_DEFAULT_COPTS,
174
+ linkopts = ABSL_DEFAULT_LINKOPTS,
175
+ deps = [
176
+ ":status",
177
+ "//absl/base:config",
178
+ "//absl/base:core_headers",
179
+ "//absl/base:log_severity",
180
+ "//absl/strings",
181
+ "//absl/strings:cord",
182
+ "//absl/strings:internal",
183
+ "//absl/strings:stringify_stream",
184
+ "//absl/time",
185
+ "//absl/types:source_location",
186
+ ],
187
+ )
188
+
189
+ cc_test(
190
+ name = "status_builder_test",
191
+ srcs = ["status_builder_test.cc"],
192
+ copts = ABSL_TEST_COPTS,
193
+ linkopts = ABSL_DEFAULT_LINKOPTS,
194
+ deps = [
195
+ ":status",
196
+ ":status_builder",
197
+ ":status_matchers",
198
+ ":statusor",
199
+ "//absl/base:config",
200
+ "//absl/log",
201
+ "//absl/log:flags",
202
+ "//absl/log:log_entry",
203
+ "//absl/log:log_sink",
204
+ "//absl/strings",
205
+ "//absl/types:source_location",
206
+ "@googletest//:gtest",
207
+ "@googletest//:gtest_main",
208
+ ],
209
+ )
210
+
211
+ cc_library(
212
+ name = "status_macros",
213
+ hdrs = ["status_macros.h"],
214
+ deps = [
215
+ ":status",
216
+ ":status_builder",
217
+ ":statusor",
218
+ "//absl/base:config",
219
+ "//absl/base:core_headers",
220
+ "//absl/types:source_location",
221
+ ],
222
+ )
223
+
224
+ cc_test(
225
+ name = "status_macros_test",
226
+ size = "small",
227
+ srcs = ["status_macros_test.cc"],
228
+ deps = [
229
+ ":status",
230
+ ":status_builder",
231
+ ":status_macros",
232
+ ":statusor",
233
+ "//absl/base:core_headers",
234
+ "//absl/strings:string_view",
235
+ "//absl/types:source_location",
236
+ "@googletest//:gtest",
237
+ "@googletest//:gtest_main",
238
+ ],
239
+ )
240
+
161
241
  cc_library(
162
242
  name = "status_matchers",
163
243
  testonly = 1,
@@ -172,6 +252,7 @@ cc_library(
172
252
  ":status",
173
253
  ":statusor",
174
254
  "//absl/base:config",
255
+ "//absl/base:core_headers",
175
256
  "//absl/strings:string_view",
176
257
  "@googletest//:gtest",
177
258
  ],
@@ -35,12 +35,14 @@ absl_cc_library(
35
35
  absl::core_headers
36
36
  absl::function_ref
37
37
  absl::inlined_vector
38
+ absl::internal_optional_ref
38
39
  absl::leak_check
39
40
  absl::memory
40
41
  absl::no_destructor
41
42
  absl::nullability
42
43
  absl::optional
43
44
  absl::raw_logging_internal
45
+ absl::source_location
44
46
  absl::span
45
47
  absl::stacktrace
46
48
  absl::str_format
@@ -59,6 +61,7 @@ absl_cc_test(
59
61
  ${ABSL_TEST_COPTS}
60
62
  DEPS
61
63
  absl::status
64
+ absl::source_location
62
65
  absl::str_format
63
66
  absl::strings
64
67
  GTest::gmock_main
@@ -82,6 +85,7 @@ absl_cc_library(
82
85
  absl::nullability
83
86
  absl::raw_logging_internal
84
87
  absl::status
88
+ absl::source_location
85
89
  absl::str_format
86
90
  absl::strings
87
91
  absl::type_traits
@@ -101,10 +105,96 @@ absl_cc_test(
101
105
  absl::status
102
106
  absl::status_matchers
103
107
  absl::statusor
108
+ absl::source_location
104
109
  absl::strings
105
110
  GTest::gmock_main
106
111
  )
107
112
 
113
+ absl_cc_library(
114
+ NAME
115
+ status_builder
116
+ HDRS
117
+ "status_builder.h"
118
+ SRCS
119
+ "status_builder.cc"
120
+ COPTS
121
+ ${ABSL_DEFAULT_COPTS}
122
+ DEPS
123
+ absl::config
124
+ absl::cord
125
+ absl::core_headers
126
+ absl::nullability
127
+ absl::optional
128
+ absl::source_location
129
+ absl::span
130
+ absl::status
131
+ absl::strings
132
+ absl::time
133
+ PUBLIC
134
+ )
135
+
136
+ absl_cc_test(
137
+ NAME
138
+ status_builder_test
139
+ SRCS
140
+ "status_builder_test.cc"
141
+ COPTS
142
+ ${ABSL_TEST_COPTS}
143
+ DEPS
144
+ absl::core_headers
145
+ absl::flags
146
+ GTest::gmock_main
147
+ absl::log
148
+ absl::log_entry
149
+ absl::log_flags
150
+ absl::log_internal_flags
151
+ absl::log_severity
152
+ absl::log_sink
153
+ absl::scoped_mock_log
154
+ absl::source_location
155
+ absl::span
156
+ absl::status
157
+ absl::statusor
158
+ absl::status_builder
159
+ absl::status_matchers
160
+ absl::strings
161
+ absl::time
162
+ )
163
+
164
+ absl_cc_library(
165
+ NAME
166
+ status_macros
167
+ HDRS
168
+ "status_macros.h"
169
+ COPTS
170
+ ${ABSL_DEFAULT_COPTS}
171
+ DEPS
172
+ absl::core_headers
173
+ absl::source_location
174
+ absl::status
175
+ absl::status_builder
176
+ absl::statusor
177
+ PUBLIC
178
+ )
179
+
180
+ absl_cc_test(
181
+ NAME
182
+ status_macros_test
183
+ SRCS
184
+ "status_macros_test.cc"
185
+ COPTS
186
+ ${ABSL_TEST_COPTS}
187
+ DEPS
188
+ absl::core_headers
189
+ absl::source_location
190
+ absl::status
191
+ absl::status_builder
192
+ absl::status_macros
193
+ absl::statusor
194
+ absl::string_view
195
+ GTest::gmock_main
196
+ )
197
+
108
198
  absl_cc_library(
109
199
  NAME
110
200
  status_matchers
@@ -119,6 +209,7 @@ absl_cc_library(
119
209
  ${ABSL_DEFAULT_LINKOPTS}
120
210
  DEPS
121
211
  absl::base
212
+ absl::core_headers
122
213
  absl::status
123
214
  absl::statusor
124
215
  absl::strings
@@ -21,6 +21,7 @@
21
21
  #include <cstdio>
22
22
  #include <cstring>
23
23
  #include <memory>
24
+ #include <optional>
24
25
  #include <string>
25
26
  #include <utility>
26
27
 
@@ -31,6 +32,7 @@
31
32
  #include "absl/debugging/leak_check.h"
32
33
  #include "absl/debugging/stacktrace.h"
33
34
  #include "absl/debugging/symbolize.h"
35
+ #include "absl/hash/hash.h"
34
36
  #include "absl/memory/memory.h"
35
37
  #include "absl/status/status.h"
36
38
  #include "absl/status/status_payload_printer.h"
@@ -40,7 +42,9 @@
40
42
  #include "absl/strings/str_format.h"
41
43
  #include "absl/strings/str_split.h"
42
44
  #include "absl/strings/string_view.h"
43
- #include "absl/types/optional.h"
45
+ #include "absl/types/optional_ref.h"
46
+ #include "absl/types/source_location.h"
47
+ #include "absl/types/span.h"
44
48
 
45
49
  namespace absl {
46
50
  ABSL_NAMESPACE_BEGIN
@@ -56,32 +60,32 @@ void StatusRep::Unref() const {
56
60
  }
57
61
  }
58
62
 
59
- static absl::optional<size_t> FindPayloadIndexByUrl(
60
- const Payloads* payloads, absl::string_view type_url) {
61
- if (payloads == nullptr) return absl::nullopt;
63
+ static std::optional<size_t> FindPayloadIndexByUrl(const Payloads* payloads,
64
+ absl::string_view type_url) {
65
+ if (payloads == nullptr) return std::nullopt;
62
66
 
63
67
  for (size_t i = 0; i < payloads->size(); ++i) {
64
68
  if ((*payloads)[i].type_url == type_url) return i;
65
69
  }
66
70
 
67
- return absl::nullopt;
71
+ return std::nullopt;
68
72
  }
69
73
 
70
- absl::optional<absl::Cord> StatusRep::GetPayload(
74
+ std::optional<absl::Cord> StatusRep::GetPayload(
71
75
  absl::string_view type_url) const {
72
- absl::optional<size_t> index =
76
+ std::optional<size_t> index =
73
77
  status_internal::FindPayloadIndexByUrl(payloads_.get(), type_url);
74
78
  if (index.has_value()) return (*payloads_)[index.value()].payload;
75
79
 
76
- return absl::nullopt;
80
+ return std::nullopt;
77
81
  }
78
82
 
79
83
  void StatusRep::SetPayload(absl::string_view type_url, absl::Cord payload) {
80
84
  if (payloads_ == nullptr) {
81
- payloads_ = absl::make_unique<status_internal::Payloads>();
85
+ payloads_ = std::make_unique<status_internal::Payloads>();
82
86
  }
83
87
 
84
- absl::optional<size_t> index =
88
+ std::optional<size_t> index =
85
89
  status_internal::FindPayloadIndexByUrl(payloads_.get(), type_url);
86
90
  if (index.has_value()) {
87
91
  (*payloads_)[index.value()].payload = std::move(payload);
@@ -92,7 +96,7 @@ void StatusRep::SetPayload(absl::string_view type_url, absl::Cord payload) {
92
96
  }
93
97
 
94
98
  StatusRep::EraseResult StatusRep::ErasePayload(absl::string_view type_url) {
95
- absl::optional<size_t> index =
99
+ std::optional<size_t> index =
96
100
  status_internal::FindPayloadIndexByUrl(payloads_.get(), type_url);
97
101
  if (!index.has_value()) return {false, Status::PointerToRep(this)};
98
102
  payloads_->erase(payloads_->begin() + index.value());
@@ -130,6 +134,14 @@ void StatusRep::ForEachPayload(
130
134
  }
131
135
  }
132
136
 
137
+ absl::Span<const SourceLocation> StatusRep::GetSourceLocations() const {
138
+ return absl::MakeSpan(source_locations_);
139
+ }
140
+
141
+ void StatusRep::AddSourceLocation(absl::SourceLocation loc) {
142
+ source_locations_.push_back(loc);
143
+ }
144
+
133
145
  std::string StatusRep::ToString(StatusToStringMode mode) const {
134
146
  std::string text;
135
147
  absl::StrAppend(&text, absl::StatusCodeToString(code()), ": ", message());
@@ -142,7 +154,7 @@ std::string StatusRep::ToString(StatusToStringMode mode) const {
142
154
  status_internal::GetStatusPayloadPrinter();
143
155
  this->ForEachPayload([&](absl::string_view type_url,
144
156
  const absl::Cord& payload) {
145
- absl::optional<std::string> result;
157
+ std::optional<std::string> result;
146
158
  if (printer) result = printer(type_url, payload);
147
159
  absl::StrAppend(
148
160
  &text, " [", type_url, "='",
@@ -150,6 +162,17 @@ std::string StatusRep::ToString(StatusToStringMode mode) const {
150
162
  "']");
151
163
  });
152
164
  }
165
+ const bool with_source_location =
166
+ (mode & StatusToStringMode::kWithSourceLocation) ==
167
+ StatusToStringMode::kWithSourceLocation;
168
+ if (with_source_location && !source_locations_.empty()) {
169
+ absl::string_view whitespace = (absl::Hash<int>{}(42) % 2 == 0) ? "" : " ";
170
+ absl::StrAppend(&text, "\n=== Source Location Trace: ===", whitespace,
171
+ "\n");
172
+ for (const absl::SourceLocation loc : GetSourceLocations()) {
173
+ absl::StrAppend(&text, loc.file_name(), ":", loc.line(), "\n");
174
+ }
175
+ }
153
176
 
154
177
  return text;
155
178
  }
@@ -189,9 +212,12 @@ bool StatusRep::operator==(const StatusRep& other) const {
189
212
  return true;
190
213
  }
191
214
 
192
- StatusRep* absl_nonnull StatusRep::CloneAndUnref() const {
215
+ StatusRep* absl_nonnull StatusRep::Clone(
216
+ absl::optional_ref<absl::string_view> new_message, bool include_payloads,
217
+ bool include_source_locations) const {
193
218
  // Optimization: no need to create a clone if we already have a refcount of 1.
194
- if (ref_.load(std::memory_order_acquire) == 1) {
219
+ if (ref_.load(std::memory_order_acquire) == 1 && !new_message.has_value() &&
220
+ include_payloads && include_source_locations) {
195
221
  // All StatusRep instances are heap allocated and mutable, therefore this
196
222
  // const_cast will never cast away const from a stack instance.
197
223
  //
@@ -200,11 +226,30 @@ StatusRep* absl_nonnull StatusRep::CloneAndUnref() const {
200
226
  return const_cast<StatusRep*>(this);
201
227
  }
202
228
  std::unique_ptr<status_internal::Payloads> payloads;
203
- if (payloads_) {
204
- payloads = absl::make_unique<status_internal::Payloads>(*payloads_);
229
+ if (include_payloads && payloads_) {
230
+ payloads = std::make_unique<status_internal::Payloads>(*payloads_);
231
+ }
232
+ auto* new_rep =
233
+ new StatusRep(code_, new_message.value_or(message_), std::move(payloads));
234
+ if (include_source_locations) {
235
+ new_rep->source_locations_ = source_locations_;
236
+ }
237
+ return new_rep;
238
+ }
239
+
240
+ StatusRep* absl_nonnull StatusRep::CloneAndUnref() const {
241
+ return CloneAndUnref(std::nullopt, true, true);
242
+ }
243
+
244
+ StatusRep* absl_nonnull StatusRep::CloneAndUnref(
245
+ absl::optional_ref<absl::string_view> new_message, bool include_payloads,
246
+ bool include_source_locations) const {
247
+ StatusRep* new_rep =
248
+ Clone(new_message, /*include_payloads=*/include_payloads,
249
+ /*include_source_locations=*/include_source_locations);
250
+ if (new_rep != this) {
251
+ Unref();
205
252
  }
206
- auto* new_rep = new StatusRep(code_, message_, std::move(payloads));
207
- Unref();
208
253
  return new_rep;
209
254
  }
210
255
 
@@ -17,8 +17,10 @@
17
17
  #include <atomic>
18
18
  #include <cstdint>
19
19
  #include <memory>
20
+ #include <optional>
20
21
  #include <string>
21
22
  #include <utility>
23
+ #include <vector>
22
24
 
23
25
  #include "absl/base/attributes.h"
24
26
  #include "absl/base/config.h"
@@ -27,6 +29,9 @@
27
29
  #include "absl/strings/cord.h"
28
30
  #include "absl/strings/string_view.h"
29
31
  #include "absl/types/optional.h"
32
+ #include "absl/types/optional_ref.h"
33
+ #include "absl/types/source_location.h"
34
+ #include "absl/types/span.h"
30
35
 
31
36
  #ifndef SWIG
32
37
  // Disabled for SWIG as it doesn't parse attributes correctly.
@@ -44,6 +49,7 @@ class [[nodiscard]] ABSL_ATTRIBUTE_TRIVIAL_ABI
44
49
  class ABSL_MUST_USE_RESULT ABSL_ATTRIBUTE_TRIVIAL_ABI
45
50
  Status;
46
51
  #endif
52
+
47
53
  ABSL_NAMESPACE_END
48
54
  } // namespace absl
49
55
  #endif // !SWIG
@@ -55,6 +61,10 @@ enum class StatusCode : int;
55
61
  enum class StatusToStringMode : int;
56
62
 
57
63
  namespace status_internal {
64
+ #ifndef SWIG
65
+ class StatusPrivateAccessor;
66
+ class StatusPrivateAccessorForStatusBuilder;
67
+ #endif // !SWIG
58
68
 
59
69
  // Container for status payloads.
60
70
  struct Payload {
@@ -83,7 +93,7 @@ class StatusRep {
83
93
  void Unref() const;
84
94
 
85
95
  // Payload methods correspond to the same methods in absl::Status.
86
- absl::optional<absl::Cord> GetPayload(absl::string_view type_url) const;
96
+ std::optional<absl::Cord> GetPayload(absl::string_view type_url) const;
87
97
  void SetPayload(absl::string_view type_url, absl::Cord payload);
88
98
  struct EraseResult {
89
99
  bool erased;
@@ -94,6 +104,9 @@ class StatusRep {
94
104
  absl::FunctionRef<void(absl::string_view, const absl::Cord&)> visitor)
95
105
  const;
96
106
 
107
+ absl::Span<const SourceLocation> GetSourceLocations() const;
108
+ void AddSourceLocation(absl::SourceLocation loc);
109
+
97
110
  std::string ToString(StatusToStringMode mode) const;
98
111
 
99
112
  bool operator==(const StatusRep& other) const;
@@ -101,7 +114,17 @@ class StatusRep {
101
114
 
102
115
  // Returns an equivalent heap allocated StatusRep with refcount 1.
103
116
  //
104
- // `this` is not safe to be used after calling as it may have been deleted.
117
+ // If `new_message` is provided, the message will be replaced with the new
118
+ // message.
119
+ StatusRep* absl_nonnull Clone(
120
+ absl::optional_ref<absl::string_view> new_message, bool include_payloads,
121
+ bool include_source_locations) const;
122
+
123
+ // Same as Clone(), but also removes a reference to `this`. `this` is not safe
124
+ // to be used after calling as it may have been deleted.
125
+ StatusRep* absl_nonnull CloneAndUnref(
126
+ absl::optional_ref<absl::string_view> new_message, bool include_payloads,
127
+ bool include_source_locations) const;
105
128
  StatusRep* absl_nonnull CloneAndUnref() const;
106
129
 
107
130
  private:
@@ -112,6 +135,7 @@ class StatusRep {
112
135
  // is non-empty, then the resulting string_view is null terminated.
113
136
  // This is required to implement 'StatusMessageAsCStr(...)'
114
137
  std::string message_;
138
+ absl::InlinedVector<absl::SourceLocation, 1> source_locations_;
115
139
  std::unique_ptr<status_internal::Payloads> payloads_;
116
140
  };
117
141
 
@@ -16,12 +16,12 @@
16
16
  #define ABSL_STATUS_INTERNAL_STATUS_MATCHERS_H_
17
17
 
18
18
  #include <ostream> // NOLINT
19
- #include <string>
20
19
  #include <type_traits>
21
20
  #include <utility>
22
21
 
23
22
  #include "gmock/gmock.h" // gmock_for_status_matchers.h
24
23
  #include "absl/base/config.h"
24
+ #include "absl/base/macros.h"
25
25
  #include "absl/status/status.h"
26
26
  #include "absl/status/statusor.h"
27
27
  #include "absl/strings/string_view.h"
@@ -30,12 +30,20 @@ namespace absl_testing {
30
30
  ABSL_NAMESPACE_BEGIN
31
31
  namespace status_internal {
32
32
 
33
- inline const absl::Status& GetStatus(const absl::Status& status) {
33
+ // TODO(b/323927127): Remove ABSL_REFACTOR_INLINE once callers are cleaned up
34
+ // and move it into a namespace like adl_barrier without types to avoid
35
+ // accidental ADL.
36
+ ABSL_REFACTOR_INLINE inline const absl::Status& GetStatus(
37
+ const absl::Status& status) {
34
38
  return status;
35
39
  }
36
40
 
41
+ // TODO(b/323927127): Remove ABSL_REFACTOR_INLINE once callers are cleaned up
42
+ // and move it into a namespace like adl_barrier without types to avoid
43
+ // accidental ADL.
37
44
  template <typename T>
38
- inline const absl::Status& GetStatus(const absl::StatusOr<T>& status) {
45
+ ABSL_REFACTOR_INLINE const absl::Status& GetStatus(
46
+ const absl::StatusOr<T>& status) {
39
47
  return status.status();
40
48
  }
41
49
 
@@ -118,18 +126,24 @@ class IsOkAndHoldsMatcher {
118
126
  class StatusCode {
119
127
  public:
120
128
  /*implicit*/ StatusCode(int code) // NOLINT
121
- : code_(static_cast<::absl::StatusCode>(code)) {}
122
- /*implicit*/ StatusCode(::absl::StatusCode code) : code_(code) {} // NOLINT
129
+ : code_(code) {}
130
+ /*implicit*/ StatusCode(::absl::StatusCode code) // NOLINT
131
+ : code_(static_cast<int>(code)) {}
123
132
 
124
133
  explicit operator int() const { return static_cast<int>(code_); }
125
134
 
126
135
  friend inline void PrintTo(const StatusCode& code, std::ostream* os) {
127
- // TODO(b/321095377): Change this to print the status code as a string.
128
- *os << static_cast<int>(code);
136
+ absl::string_view text =
137
+ absl::StatusCodeToStringView(static_cast<absl::StatusCode>(code.code_));
138
+ if (!text.empty()) {
139
+ *os << text;
140
+ } else {
141
+ *os << code.code_;
142
+ }
129
143
  }
130
144
 
131
145
  private:
132
- ::absl::StatusCode code_;
146
+ int code_;
133
147
  };
134
148
 
135
149
  // Relational operators to handle matchers like Eq, Lt, etc..