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
@@ -53,6 +53,7 @@
53
53
 
54
54
  #include <cassert>
55
55
  #include <cstdint>
56
+ #include <optional>
56
57
  #include <ostream>
57
58
  #include <string>
58
59
  #include <utility>
@@ -67,6 +68,8 @@
67
68
  #include "absl/strings/cord.h"
68
69
  #include "absl/strings/string_view.h"
69
70
  #include "absl/types/optional.h"
71
+ #include "absl/types/source_location.h"
72
+ #include "absl/types/span.h"
70
73
 
71
74
  namespace absl {
72
75
  ABSL_NAMESPACE_BEGIN
@@ -305,6 +308,8 @@ enum class StatusToStringMode : int {
305
308
  kWithNoExtraData = 0,
306
309
  // ToString will contain the payloads.
307
310
  kWithPayload = 1 << 0,
311
+ // ToString will contain the source locations.
312
+ kWithSourceLocation = 1 << 1,
308
313
  // ToString will include all the extra data this Status has.
309
314
  kWithEverything = ~kWithNoExtraData,
310
315
  // Default mode used by ToString. Its exact value might change in the future.
@@ -443,12 +448,28 @@ class ABSL_ATTRIBUTE_TRIVIAL_ABI Status final {
443
448
  Status();
444
449
 
445
450
  // Creates a status in the canonical error space with the specified
446
- // `absl::StatusCode` and error message. If `code == absl::StatusCode::kOk`, // NOLINT
451
+ // `absl::StatusCode` and error message. If `code == absl::StatusCode::kOk`,
447
452
  // `msg` is ignored and an object identical to an OK status is constructed.
448
453
  //
449
- // The `msg` string must be in UTF-8. The implementation may complain (e.g., // NOLINT
454
+ // The `msg` string must be in UTF-8. The implementation may complain (e.g.,
450
455
  // by printing a warning) if it is not.
451
- Status(absl::StatusCode code, absl::string_view msg);
456
+ //
457
+ // The `loc` is the SourceLocation of the callsite. It will be stored in the
458
+ // Status iff `code != absl::StatusCode::kOk` and `!msg.empty()`.
459
+ Status(absl::StatusCode code, absl::string_view msg,
460
+ absl::SourceLocation loc = SourceLocation::current());
461
+
462
+ // Create a status from a `base_status` and a `loc`. The `loc` will be
463
+ // appended to the location chain of the new status, iff the `base_status` is
464
+ // not ok and has non-empty msg.
465
+ Status(const Status& base_status, absl::SourceLocation loc)
466
+ : Status(base_status) {
467
+ AddSourceLocation(loc);
468
+ }
469
+ Status(Status&& base_status, absl::SourceLocation loc)
470
+ : Status(std::move(base_status)) {
471
+ AddSourceLocation(loc);
472
+ }
452
473
 
453
474
  Status(const Status&);
454
475
  Status& operator=(const Status& x);
@@ -583,7 +604,7 @@ class ABSL_ATTRIBUTE_TRIVIAL_ABI Status final {
583
604
  // Status::GetPayload()
584
605
  //
585
606
  // Gets the payload of a status given its unique `type_url` key, if present.
586
- absl::optional<absl::Cord> GetPayload(absl::string_view type_url) const;
607
+ std::optional<absl::Cord> GetPayload(absl::string_view type_url) const;
587
608
 
588
609
  // Status::SetPayload()
589
610
  //
@@ -613,16 +634,89 @@ class ABSL_ATTRIBUTE_TRIVIAL_ABI Status final {
613
634
  absl::FunctionRef<void(absl::string_view, const absl::Cord&)> visitor)
614
635
  const;
615
636
 
637
+ absl::Span<const absl::SourceLocation> GetSourceLocations() const {
638
+ if (IsInlined(rep_)) return {};
639
+ return RepToPointer(rep_)->GetSourceLocations();
640
+ }
641
+ // Appends the `loc` to the current location chain inside the status, iff the
642
+ // status is non-ok and contains a non-empty message.
643
+ void AddSourceLocation(
644
+ absl::SourceLocation loc = absl::SourceLocation::current()) {
645
+ if (ok()) return;
646
+ rep_ = AddSourceLocationImpl(rep_, loc);
647
+ ABSL_ATTRIBUTE_UNUSED bool okay = ok();
648
+ // This hint tells the optimizer that the status is still not ok after the
649
+ // AddSourceLocation() call. This is useful when passing a known !ok status
650
+ // to StatusOr. StatusOr checks for ok() on its constructor and this assume
651
+ // helps the optimizer remove that check.
652
+ ABSL_ASSUME(!okay);
653
+ }
654
+
655
+ // Status::WithSourceLocation()
656
+ //
657
+ // Returns a copy of the current status, with `loc` appended to its location
658
+ // chain iff the status is non-ok and contains a non-empty message.
659
+ //
660
+ // Example:
661
+ //
662
+ // if (Status status = Foo(); !status.ok()) {
663
+ // return status.WithSourceLocation();
664
+ // }
665
+ Status WithSourceLocation(
666
+ absl::SourceLocation loc = absl::SourceLocation::current()) const& {
667
+ return Status(*this, loc);
668
+ }
669
+
670
+ // Status::WithSourceLocation()
671
+ //
672
+ // Appends the `loc` to the current location chain inside the status iff the
673
+ // status is non-ok and contains a non-empty message, and returns an rvalue
674
+ // reference to `*this`.
675
+ //
676
+ // Example:
677
+ //
678
+ // Status Finalize(...);
679
+ //
680
+ // Status DoSomething(...) {
681
+ // ...
682
+ // return Finalize().WithSourceLocation();
683
+ // }
684
+ ABSL_MUST_USE_RESULT Status&& WithSourceLocation(
685
+ absl::SourceLocation loc = absl::SourceLocation::current()) && {
686
+ AddSourceLocation(loc);
687
+ return std::move(*this);
688
+ }
689
+
616
690
  private:
617
691
  friend Status CancelledError();
618
692
 
693
+ #ifndef SWIG
694
+ // Returns a `Status` object which is not `ok()` but
695
+ // `code() == absl::StatusCode::kOk`. This is necessary to be compatible with
696
+ // `Status` objects created with an error code in a custom `ErrorSpace` that
697
+ // is mapped to the canonical code `absl::StatusCode::kOk`.
698
+ static Status MakeNonOkStatusWithOkCode(absl::string_view message);
699
+
700
+ friend class absl::status_internal::StatusPrivateAccessor;
701
+ friend class absl::status_internal::StatusPrivateAccessorForStatusBuilder;
702
+ #endif // !SWIG
703
+
619
704
  // Creates a status in the canonical error space with the specified
620
705
  // code, and an empty error message.
621
706
  explicit Status(absl::StatusCode code);
622
707
 
708
+ // Delegate factory in header that ensures CodeToInlinedRep is inlined
709
+ // where possible.
710
+ static uintptr_t MakeRep(uintptr_t inlined_rep, absl::string_view msg,
711
+ absl::SourceLocation loc);
712
+
623
713
  // Underlying constructor for status from a rep_.
624
714
  explicit Status(uintptr_t rep) : rep_(rep) {}
625
715
 
716
+ // An out-of-line AddSourceLocation that mutates rep directly.
717
+ static uintptr_t AddSourceLocationImpl(uintptr_t rep,
718
+ absl::SourceLocation loc);
719
+
626
720
  static void Ref(uintptr_t rep);
627
721
  static void Unref(uintptr_t rep);
628
722
 
@@ -740,22 +834,44 @@ ABSL_MUST_USE_RESULT bool IsUnknown(const Status& status);
740
834
  // These convenience functions create an `absl::Status` object with an error
741
835
  // code as indicated by the associated function name, using the error message
742
836
  // passed in `message`.
743
- Status AbortedError(absl::string_view message);
744
- Status AlreadyExistsError(absl::string_view message);
745
- Status CancelledError(absl::string_view message);
746
- Status DataLossError(absl::string_view message);
747
- Status DeadlineExceededError(absl::string_view message);
748
- Status FailedPreconditionError(absl::string_view message);
749
- Status InternalError(absl::string_view message);
750
- Status InvalidArgumentError(absl::string_view message);
751
- Status NotFoundError(absl::string_view message);
752
- Status OutOfRangeError(absl::string_view message);
753
- Status PermissionDeniedError(absl::string_view message);
754
- Status ResourceExhaustedError(absl::string_view message);
755
- Status UnauthenticatedError(absl::string_view message);
756
- Status UnavailableError(absl::string_view message);
757
- Status UnimplementedError(absl::string_view message);
758
- Status UnknownError(absl::string_view message);
837
+ Status AbortedError(absl::string_view message,
838
+ absl::SourceLocation loc = SourceLocation::current());
839
+ Status AlreadyExistsError(absl::string_view message,
840
+ absl::SourceLocation loc = SourceLocation::current());
841
+ Status CancelledError(absl::string_view message,
842
+ absl::SourceLocation loc = SourceLocation::current());
843
+ Status DataLossError(absl::string_view message,
844
+ absl::SourceLocation loc = SourceLocation::current());
845
+ Status DeadlineExceededError(
846
+ absl::string_view message,
847
+ absl::SourceLocation loc = SourceLocation::current());
848
+ Status FailedPreconditionError(
849
+ absl::string_view message,
850
+ absl::SourceLocation loc = SourceLocation::current());
851
+ Status InternalError(absl::string_view message,
852
+ absl::SourceLocation loc = SourceLocation::current());
853
+ Status InvalidArgumentError(
854
+ absl::string_view message,
855
+ absl::SourceLocation loc = SourceLocation::current());
856
+ Status NotFoundError(absl::string_view message,
857
+ absl::SourceLocation loc = SourceLocation::current());
858
+ Status OutOfRangeError(absl::string_view message,
859
+ absl::SourceLocation loc = SourceLocation::current());
860
+ Status PermissionDeniedError(
861
+ absl::string_view message,
862
+ absl::SourceLocation loc = SourceLocation::current());
863
+ Status ResourceExhaustedError(
864
+ absl::string_view message,
865
+ absl::SourceLocation loc = SourceLocation::current());
866
+ Status UnauthenticatedError(
867
+ absl::string_view message,
868
+ absl::SourceLocation loc = SourceLocation::current());
869
+ Status UnavailableError(absl::string_view message,
870
+ absl::SourceLocation loc = SourceLocation::current());
871
+ Status UnimplementedError(absl::string_view message,
872
+ absl::SourceLocation loc = SourceLocation::current());
873
+ Status UnknownError(absl::string_view message,
874
+ absl::SourceLocation loc = SourceLocation::current());
759
875
 
760
876
  // ErrnoToStatusCode()
761
877
  //
@@ -768,7 +884,8 @@ absl::StatusCode ErrnoToStatusCode(int error_number);
768
884
  //
769
885
  // Convenience function that creates a `absl::Status` using an `error_number`,
770
886
  // which should be an `errno` value.
771
- Status ErrnoToStatus(int error_number, absl::string_view message);
887
+ Status ErrnoToStatus(int error_number, absl::string_view message,
888
+ absl::SourceLocation loc = SourceLocation::current());
772
889
 
773
890
  //------------------------------------------------------------------------------
774
891
  // Implementation details follow
@@ -778,6 +895,10 @@ inline Status::Status() : Status(absl::StatusCode::kOk) {}
778
895
 
779
896
  inline Status::Status(absl::StatusCode code) : Status(CodeToInlinedRep(code)) {}
780
897
 
898
+ inline Status::Status(absl::StatusCode code, absl::string_view msg,
899
+ absl::SourceLocation loc)
900
+ : Status(MakeRep(CodeToInlinedRep(code), msg, loc)) {}
901
+
781
902
  inline Status::Status(const Status& x) : Status(x.rep_) { Ref(rep_); }
782
903
 
783
904
  inline Status& Status::operator=(const Status& x) {
@@ -862,9 +983,9 @@ inline void swap(absl::Status& a, absl::Status& b) noexcept {
862
983
  swap(a.rep_, b.rep_);
863
984
  }
864
985
 
865
- inline absl::optional<absl::Cord> Status::GetPayload(
986
+ inline std::optional<absl::Cord> Status::GetPayload(
866
987
  absl::string_view type_url) const {
867
- if (IsInlined(rep_)) return absl::nullopt;
988
+ if (IsInlined(rep_)) return std::nullopt;
868
989
  return RepToPointer(rep_)->GetPayload(type_url);
869
990
  }
870
991
 
@@ -942,6 +1063,111 @@ inline Status CancelledError() { return Status(absl::StatusCode::kCancelled); }
942
1063
  const char* absl_nonnull StatusMessageAsCStr(
943
1064
  const Status& status ABSL_ATTRIBUTE_LIFETIME_BOUND);
944
1065
 
1066
+ namespace status_internal {
1067
+ // We use an int in the template parameter to shorten mangled names.
1068
+ template <int error_code>
1069
+ Status MakeErrorImpl(string_view message, SourceLocation loc);
1070
+ // Make the instantiations extern to reduce bloat on callers.
1071
+ extern template Status MakeErrorImpl<0>(string_view, SourceLocation);
1072
+ extern template Status MakeErrorImpl<1>(string_view, SourceLocation);
1073
+ extern template Status MakeErrorImpl<2>(string_view, SourceLocation);
1074
+ extern template Status MakeErrorImpl<3>(string_view, SourceLocation);
1075
+ extern template Status MakeErrorImpl<4>(string_view, SourceLocation);
1076
+ extern template Status MakeErrorImpl<5>(string_view, SourceLocation);
1077
+ extern template Status MakeErrorImpl<6>(string_view, SourceLocation);
1078
+ extern template Status MakeErrorImpl<7>(string_view, SourceLocation);
1079
+ extern template Status MakeErrorImpl<8>(string_view, SourceLocation);
1080
+ extern template Status MakeErrorImpl<9>(string_view, SourceLocation);
1081
+ extern template Status MakeErrorImpl<10>(string_view, SourceLocation);
1082
+ extern template Status MakeErrorImpl<11>(string_view, SourceLocation);
1083
+ extern template Status MakeErrorImpl<12>(string_view, SourceLocation);
1084
+ extern template Status MakeErrorImpl<13>(string_view, SourceLocation);
1085
+ extern template Status MakeErrorImpl<14>(string_view, SourceLocation);
1086
+ extern template Status MakeErrorImpl<15>(string_view, SourceLocation);
1087
+ extern template Status MakeErrorImpl<16>(string_view, SourceLocation);
1088
+
1089
+ template <StatusCode error_code>
1090
+ Status MakeError(string_view message, SourceLocation loc) {
1091
+ Status out = MakeErrorImpl<static_cast<int>(error_code)>(message, loc);
1092
+ // -Wassume warning complains about potential side effects of `ok()`, so use a
1093
+ // local to avoid that.
1094
+ ABSL_ATTRIBUTE_UNUSED bool ok = out.ok();
1095
+ ABSL_ASSUME(!ok);
1096
+ return out;
1097
+ }
1098
+ } // namespace status_internal
1099
+
1100
+ // Inline implementations to give the compiler static knowledge about the
1101
+ // objects.
1102
+ inline Status AbortedError(absl::string_view message,
1103
+ absl::SourceLocation loc) {
1104
+ return status_internal::MakeError<StatusCode::kAborted>(message, loc);
1105
+ }
1106
+ inline Status AlreadyExistsError(absl::string_view message,
1107
+ absl::SourceLocation loc) {
1108
+ return status_internal::MakeError<StatusCode::kAlreadyExists>(message, loc);
1109
+ }
1110
+ inline Status CancelledError(absl::string_view message,
1111
+ absl::SourceLocation loc) {
1112
+ return status_internal::MakeError<StatusCode::kCancelled>(message, loc);
1113
+ }
1114
+ inline Status DataLossError(absl::string_view message,
1115
+ absl::SourceLocation loc) {
1116
+ return status_internal::MakeError<StatusCode::kDataLoss>(message, loc);
1117
+ }
1118
+ inline Status DeadlineExceededError(absl::string_view message,
1119
+ absl::SourceLocation loc) {
1120
+ return status_internal::MakeError<StatusCode::kDeadlineExceeded>(message,
1121
+ loc);
1122
+ }
1123
+ inline Status FailedPreconditionError(absl::string_view message,
1124
+ absl::SourceLocation loc) {
1125
+ return status_internal::MakeError<StatusCode::kFailedPrecondition>(message,
1126
+ loc);
1127
+ }
1128
+ inline Status InternalError(absl::string_view message,
1129
+ absl::SourceLocation loc) {
1130
+ return status_internal::MakeError<StatusCode::kInternal>(message, loc);
1131
+ }
1132
+ inline Status InvalidArgumentError(absl::string_view message,
1133
+ absl::SourceLocation loc) {
1134
+ return status_internal::MakeError<StatusCode::kInvalidArgument>(message, loc);
1135
+ }
1136
+ inline Status NotFoundError(absl::string_view message,
1137
+ absl::SourceLocation loc) {
1138
+ return status_internal::MakeError<StatusCode::kNotFound>(message, loc);
1139
+ }
1140
+ inline Status OutOfRangeError(absl::string_view message,
1141
+ absl::SourceLocation loc) {
1142
+ return status_internal::MakeError<StatusCode::kOutOfRange>(message, loc);
1143
+ }
1144
+ inline Status PermissionDeniedError(absl::string_view message,
1145
+ absl::SourceLocation loc) {
1146
+ return status_internal::MakeError<StatusCode::kPermissionDenied>(message,
1147
+ loc);
1148
+ }
1149
+ inline Status ResourceExhaustedError(absl::string_view message,
1150
+ absl::SourceLocation loc) {
1151
+ return status_internal::MakeError<StatusCode::kResourceExhausted>(message,
1152
+ loc);
1153
+ }
1154
+ inline Status UnauthenticatedError(absl::string_view message,
1155
+ absl::SourceLocation loc) {
1156
+ return status_internal::MakeError<StatusCode::kUnauthenticated>(message, loc);
1157
+ }
1158
+ inline Status UnavailableError(absl::string_view message,
1159
+ absl::SourceLocation loc) {
1160
+ return status_internal::MakeError<StatusCode::kUnavailable>(message, loc);
1161
+ }
1162
+ inline Status UnimplementedError(absl::string_view message,
1163
+ absl::SourceLocation loc) {
1164
+ return status_internal::MakeError<StatusCode::kUnimplemented>(message, loc);
1165
+ }
1166
+ inline Status UnknownError(absl::string_view message,
1167
+ absl::SourceLocation loc) {
1168
+ return status_internal::MakeError<StatusCode::kUnknown>(message, loc);
1169
+ }
1170
+
945
1171
  ABSL_NAMESPACE_END
946
1172
  } // namespace absl
947
1173
 
@@ -13,7 +13,9 @@
13
13
  // limitations under the License.
14
14
 
15
15
  #include <utility>
16
+
16
17
  #include "absl/status/status.h"
18
+ #include "absl/types/source_location.h"
17
19
  #include "benchmark/benchmark.h"
18
20
 
19
21
  namespace {
@@ -34,4 +36,14 @@ void BM_CreateBad(benchmark::State& state) {
34
36
  }
35
37
  BENCHMARK(BM_CreateBad);
36
38
 
39
+ void BM_AppendSourceLocation(benchmark::State& state) {
40
+ for (auto _ : state) {
41
+ absl::Status s(absl::StatusCode::kInvalidArgument, "message");
42
+ benchmark::DoNotOptimize(s);
43
+ absl::Status s2(std::move(s), absl::SourceLocation::current());
44
+ benchmark::DoNotOptimize(s2);
45
+ }
46
+ }
47
+ BENCHMARK(BM_AppendSourceLocation);
48
+
37
49
  } // namespace
@@ -0,0 +1,196 @@
1
+ // Copyright 2026 The Abseil Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include "absl/status/status_builder.h"
16
+
17
+ #include <cstdint>
18
+ #include <memory>
19
+ #include <ostream>
20
+ #include <string>
21
+ #include <type_traits>
22
+ #include <utility>
23
+
24
+ #include "absl/base/attributes.h"
25
+ #include "absl/base/config.h"
26
+ #include "absl/base/macros.h"
27
+ #include "absl/status/status.h"
28
+ #include "absl/strings/cord.h"
29
+ #include "absl/strings/str_cat.h"
30
+ #include "absl/strings/string_view.h"
31
+ #include "absl/time/time.h"
32
+ #include "absl/types/source_location.h"
33
+
34
+ namespace absl {
35
+ ABSL_NAMESPACE_BEGIN
36
+
37
+ void StatusBuilder::Destroy(std::unique_ptr<Rep>) {
38
+ // nothing to do. The unique_ptr will do the cleanup.
39
+ }
40
+
41
+ // These constructors are not-inlined and defined in the .cc file to reduce
42
+ // binary size. See cl/354351433 for a quantification.
43
+ StatusBuilder::StatusBuilder() {}
44
+
45
+ StatusBuilder::StatusBuilder(const absl::Status& original_status,
46
+ absl::SourceLocation location)
47
+ : loc_(location), rep_(InitRep(original_status)) {}
48
+
49
+ StatusBuilder::operator absl::Status() const& {
50
+ if (rep_ == nullptr) return absl::Status();
51
+ return CreateStatusAndConditionallyLog(loc_, std::make_unique<Rep>(*rep_));
52
+ }
53
+
54
+ StatusBuilder::Rep::Rep(const absl::Status& s) : status(s) {}
55
+ StatusBuilder::Rep::Rep(absl::Status&& s) : status(std::move(s)) {}
56
+ StatusBuilder::Rep::~Rep() {}
57
+
58
+ StatusBuilder::Rep* StatusBuilder::InitRepImpl(absl::Status s) {
59
+ if (s.ok()) {
60
+ return nullptr;
61
+ } else {
62
+ return new Rep(std::move(s));
63
+ }
64
+ }
65
+
66
+ StatusBuilder::Rep::Rep(const Rep& r)
67
+ : status(r.status),
68
+ logging_mode(r.logging_mode),
69
+ log_severity(r.log_severity),
70
+ verbose_level(r.verbose_level),
71
+ n(r.n),
72
+ period(r.period),
73
+ stream_message(r.stream_message),
74
+ sink(r.sink),
75
+ message_join_style(r.message_join_style),
76
+ should_log_stack_trace(r.should_log_stack_trace),
77
+ also_send_to_log(r.also_send_to_log) {
78
+ if (r.stream.has_value()) {
79
+ InitStream();
80
+ }
81
+ }
82
+
83
+ void StatusBuilder::Rep::InitStream() { stream.emplace(stream_message); }
84
+
85
+ bool StatusBuilder::HasPayload() const {
86
+ static constexpr absl::string_view kMessageSetUrl =
87
+ "type.googleapis.com/util.MessageSetPayload";
88
+ return rep_ != nullptr && rep_->status.GetPayload(kMessageSetUrl).has_value();
89
+ }
90
+
91
+ ABSL_ATTRIBUTE_WEAK StatusBuilder& StatusBuilder::SetCode(
92
+ absl::StatusCode code) & {
93
+ if (rep_ == nullptr) {
94
+ rep_ = std::make_unique<StatusBuilder::Rep>(
95
+ absl::Status(code, absl::string_view(), absl::SourceLocation()));
96
+ } else {
97
+ absl::Status status(code, absl::string_view(), absl::SourceLocation());
98
+ rep_->status.ForEachPayload(
99
+ [&status](absl::string_view type_url, const absl::Cord& payload) {
100
+ status.SetPayload(type_url, payload);
101
+ });
102
+ rep_->status = std::move(status);
103
+ }
104
+ return *this;
105
+ }
106
+
107
+ ABSL_ATTRIBUTE_WEAK void AbslInternalSetErrorCode(StatusBuilder& builder,
108
+ absl::StatusCode code) {
109
+ builder.SetCode(code);
110
+ }
111
+
112
+ class status_internal::StatusPrivateAccessorForStatusBuilder {
113
+ public:
114
+ static absl::Status SetMessage(const absl::Status& status,
115
+ absl::string_view message) {
116
+ ABSL_ASSERT(!status.ok());
117
+
118
+ if (message.empty()) {
119
+ return absl::Status(status.code(), message, absl::SourceLocation());
120
+ }
121
+
122
+ using StatusRep =
123
+ std::remove_cv_t<std::remove_pointer_t<decltype(Status::RepToPointer(
124
+ std::declval<uintptr_t>()))>>;
125
+ StatusRep* rep;
126
+ if (Status::IsInlined(status.rep_)) {
127
+ rep = new StatusRep(Status::InlinedRepToCode(status.rep_), message,
128
+ nullptr);
129
+ } else {
130
+ rep = Status::RepToPointer(status.rep_)->Clone(message, true, true);
131
+ }
132
+ return absl::Status(Status::PointerToRep(rep));
133
+ }
134
+
135
+ static absl::Status JoinMessageToStatus(absl::Status s, absl::string_view msg,
136
+ MessageJoinStyle style) {
137
+ if (s.ok() || msg.empty()) return s;
138
+ const absl::string_view original_message = s.message();
139
+ switch (style) {
140
+ case MessageJoinStyle::kAnnotate: {
141
+ std::string annotated;
142
+ if (!original_message.empty()) {
143
+ absl::StrAppend(&annotated, original_message, "; ", msg);
144
+ msg = annotated;
145
+ }
146
+ return SetMessage(s, msg);
147
+ }
148
+ case MessageJoinStyle::kPrepend:
149
+ return SetMessage(s, absl::StrCat(msg, original_message));
150
+ case MessageJoinStyle::kAppend:
151
+ return SetMessage(s, absl::StrCat(original_message, msg));
152
+ default:
153
+ return absl::InternalError("Unknown MessageJoinStyle");
154
+ }
155
+ }
156
+ };
157
+
158
+ ABSL_ATTRIBUTE_WEAK std::string StatusBuilder::CurrentStackTrace() {
159
+ return std::string();
160
+ }
161
+
162
+ ABSL_ATTRIBUTE_WEAK absl::Status StatusBuilder::CreateStatusAndConditionallyLog(
163
+ absl::SourceLocation loc, std::unique_ptr<Rep> rep) {
164
+ if (rep == nullptr) return absl::OkStatus();
165
+ absl::Status result = status_internal::StatusPrivateAccessorForStatusBuilder::
166
+ JoinMessageToStatus(std::move(rep->status), rep->stream_message,
167
+ rep->message_join_style);
168
+ // Passing in the `loc` last to ensure the sequence of the source locations.
169
+ result.AddSourceLocation(loc);
170
+ return result;
171
+ }
172
+
173
+ ABSL_ATTRIBUTE_WEAK std::string StatusBuilder::ToString() const {
174
+ if (rep_ == nullptr) {
175
+ return absl::OkStatus().ToString();
176
+ }
177
+
178
+ return status_internal::StatusPrivateAccessorForStatusBuilder::
179
+ JoinMessageToStatus(rep_->status, rep_->stream_message,
180
+ rep_->message_join_style)
181
+ .WithSourceLocation(loc_)
182
+ .ToString();
183
+ }
184
+
185
+ ABSL_ATTRIBUTE_WEAK std::ostream& operator<<(std::ostream& os,
186
+ const StatusBuilder& builder) {
187
+ return os << static_cast<absl::Status>(builder);
188
+ }
189
+
190
+ ABSL_ATTRIBUTE_WEAK std::ostream& operator<<(std::ostream& os,
191
+ StatusBuilder&& builder) {
192
+ return os << static_cast<absl::Status>(std::move(builder));
193
+ }
194
+
195
+ ABSL_NAMESPACE_END
196
+ } // namespace absl