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
@@ -20,12 +20,15 @@
20
20
  #include <cstddef>
21
21
  #include <sstream>
22
22
  #include <utility>
23
+ #include <vector>
23
24
 
24
25
  #include "gmock/gmock.h"
25
26
  #include "gtest/gtest.h"
26
27
  #include "absl/strings/cord.h"
27
28
  #include "absl/strings/str_cat.h"
28
29
  #include "absl/strings/str_format.h"
30
+ #include "absl/strings/string_view.h"
31
+ #include "absl/types/source_location.h"
29
32
 
30
33
  namespace {
31
34
 
@@ -46,9 +49,7 @@ TEST(StatusCode, InsertionOperator) {
46
49
  // its creator, and its classifier.
47
50
  struct ErrorTest {
48
51
  absl::StatusCode code;
49
- using Creator = absl::Status (*)(
50
- absl::string_view
51
- );
52
+ using Creator = absl::Status (*)(absl::string_view, absl::SourceLocation);
52
53
  using Classifier = bool (*)(const absl::Status&);
53
54
  Creator creator;
54
55
  Classifier classifier;
@@ -90,9 +91,8 @@ TEST(Status, CreateAndClassify) {
90
91
  // expected error code and message.
91
92
  std::string message =
92
93
  absl::StrCat("error code ", test.code, " test message");
93
- absl::Status status = test.creator(
94
- message
95
- );
94
+ absl::Status status =
95
+ test.creator(message, absl::SourceLocation::current());
96
96
  EXPECT_EQ(test.code, status.code());
97
97
  EXPECT_EQ(message, status.message());
98
98
 
@@ -342,32 +342,45 @@ TEST(Status, OstreamOperator) {
342
342
  absl::Status status(absl::StatusCode::kInternal, "fail");
343
343
  { std::stringstream stream;
344
344
  stream << status;
345
- EXPECT_EQ("INTERNAL: fail", stream.str());
345
+ EXPECT_THAT(stream.str(),
346
+ AllOf(HasSubstr("INTERNAL: fail"),
347
+ HasSubstr("status_test.cc:")));
346
348
  }
347
349
  status.SetPayload("foo", absl::Cord("bar"));
348
350
  { std::stringstream stream;
349
351
  stream << status;
350
- EXPECT_EQ("INTERNAL: fail [foo='bar']", stream.str());
352
+ EXPECT_THAT(stream.str(),
353
+ AllOf(HasSubstr("INTERNAL: fail"), HasSubstr("[foo='bar']"),
354
+ HasSubstr("status_test.cc:")));
351
355
  }
352
356
  status.SetPayload("bar", absl::Cord("\377"));
353
357
  { std::stringstream stream;
354
358
  stream << status;
355
359
  EXPECT_THAT(stream.str(),
356
360
  AllOf(HasSubstr("INTERNAL: fail"), HasSubstr("[foo='bar']"),
357
- HasSubstr("[bar='\\xff']")));
361
+ HasSubstr("[bar='\\xff']"),
362
+ HasSubstr("status_test.cc:")));
358
363
  }
359
364
  }
360
365
 
361
366
  TEST(Status, AbslStringify) {
362
367
  absl::Status status(absl::StatusCode::kInternal, "fail");
363
- EXPECT_EQ("INTERNAL: fail", absl::StrCat(status));
364
- EXPECT_EQ("INTERNAL: fail", absl::StrFormat("%v", status));
368
+ EXPECT_THAT(absl::StrCat(status),
369
+ AllOf(HasSubstr("INTERNAL: fail"),
370
+ HasSubstr("status_test.cc:")));
371
+ EXPECT_THAT(absl::StrFormat("%v", status),
372
+ AllOf(HasSubstr("INTERNAL: fail"),
373
+ HasSubstr("status_test.cc:")));
374
+ EXPECT_EQ(absl::StrCat(status), absl::StrFormat("%v", status));
365
375
  status.SetPayload("foo", absl::Cord("bar"));
366
- EXPECT_EQ("INTERNAL: fail [foo='bar']", absl::StrCat(status));
376
+ EXPECT_THAT(absl::StrCat(status),
377
+ AllOf(HasSubstr("INTERNAL: fail"), HasSubstr("[foo='bar']"),
378
+ HasSubstr("status_test.cc:")));
367
379
  status.SetPayload("bar", absl::Cord("\377"));
368
380
  EXPECT_THAT(absl::StrCat(status),
369
381
  AllOf(HasSubstr("INTERNAL: fail"), HasSubstr("[foo='bar']"),
370
- HasSubstr("[bar='\\xff']")));
382
+ HasSubstr("[bar='\\xff']"),
383
+ HasSubstr("status_test.cc:")));
371
384
  }
372
385
 
373
386
  TEST(Status, OstreamEqStringify) {
@@ -577,4 +590,421 @@ TEST(StatusErrno, ErrnoToStatus) {
577
590
  EXPECT_EQ(status.message(), "Cannot open 'path': No such file or directory");
578
591
  }
579
592
 
593
+ #ifdef ABSL_INTERNAL_HAVE_BUILTIN_LINE_FILE
594
+ #define GET_SOURCE_LOCATION(offset) __builtin_LINE() - offset
595
+ #else
596
+ #define GET_SOURCE_LOCATION(offset) 1
597
+ #endif
598
+
599
+ void CheckSourceLocation(
600
+ const absl::Status& status, std::vector<int> lines = {},
601
+ absl::SourceLocation loc = absl::SourceLocation::current()) {
602
+ ASSERT_EQ(status.GetSourceLocations().size(), lines.size())
603
+ << "Size check failed at " << loc.line();
604
+ for (size_t i = 0; i < lines.size(); ++i) {
605
+ EXPECT_EQ(absl::string_view(status.GetSourceLocations()[i].file_name()),
606
+ absl::string_view(loc.file_name()))
607
+ << "File name check failed at " << loc.line();
608
+ EXPECT_EQ(status.GetSourceLocations()[i].line(), lines[i])
609
+ << "Line check failed at " << loc.line();
610
+ }
611
+ }
612
+
613
+ TEST(Status, ConstructorCheckSourceLocation) {
614
+ {
615
+ const absl::Status a;
616
+ const absl::Status b = a;
617
+ for (const absl::Status& status : {a, b}) {
618
+ EXPECT_TRUE(status.ok());
619
+ EXPECT_EQ(absl::StatusCode::kOk, status.code());
620
+ CheckSourceLocation(status);
621
+ }
622
+ }
623
+ {
624
+ const absl::Status a(absl::StatusCode::kInternal, "message",
625
+ absl::SourceLocation::current());
626
+ int line = GET_SOURCE_LOCATION(1);
627
+ const absl::Status b = a;
628
+ for (const absl::Status& status : {a, b}) {
629
+ EXPECT_FALSE(status.ok());
630
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
631
+ CheckSourceLocation(status, {line});
632
+ }
633
+ }
634
+ {
635
+ const absl::Status a(absl::StatusCode::kInternal, "message",
636
+ absl::SourceLocation());
637
+ const absl::Status b = a;
638
+ for (const absl::Status& status : {a, b}) {
639
+ EXPECT_FALSE(status.ok());
640
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
641
+ CheckSourceLocation(status);
642
+ }
643
+ }
644
+ {
645
+ const absl::Status a(absl::StatusCode::kInternal, "",
646
+ absl::SourceLocation::current());
647
+ const absl::Status b = a;
648
+ for (const absl::Status& status : {a, b}) {
649
+ EXPECT_FALSE(status.ok());
650
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
651
+ CheckSourceLocation(status);
652
+ }
653
+ }
654
+ {
655
+ const absl::Status a(absl::StatusCode::kInternal, "",
656
+ absl::SourceLocation());
657
+ const absl::Status b = a;
658
+ for (const absl::Status& status : {a, b}) {
659
+ EXPECT_FALSE(status.ok());
660
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
661
+ CheckSourceLocation(status);
662
+ }
663
+ }
664
+ }
665
+
666
+ TEST(Status, SourceLocationConstructor) {
667
+ {
668
+ // OK status doesn't save source locations.
669
+ const absl::Status original;
670
+ const absl::Status status(original, absl::SourceLocation());
671
+ EXPECT_TRUE(status.ok());
672
+ EXPECT_EQ(absl::StatusCode::kOk, status.code());
673
+ CheckSourceLocation(status);
674
+ }
675
+ {
676
+ // OK status doesn't save source locations.
677
+ const absl::Status original;
678
+ const absl::Status status(original, absl::SourceLocation::current());
679
+ EXPECT_TRUE(status.ok());
680
+ EXPECT_EQ(absl::StatusCode::kOk, status.code());
681
+ CheckSourceLocation(status);
682
+ }
683
+ {
684
+ // Non-ok Status with non-empty msg can save source locations with
685
+ // non-nullptr filename.
686
+ const absl::Status original(absl::StatusCode::kInternal, "message",
687
+ absl::SourceLocation::current());
688
+ int line = GET_SOURCE_LOCATION(1);
689
+ // Default absl::SourceLocation cannot be saved into the chain.
690
+ const absl::Status status(original, absl::SourceLocation());
691
+ EXPECT_FALSE(status.ok());
692
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
693
+ CheckSourceLocation(status, {line});
694
+ }
695
+ {
696
+ const absl::Status original(absl::StatusCode::kInternal, "message",
697
+ absl::SourceLocation::current());
698
+ int line = GET_SOURCE_LOCATION(1);
699
+
700
+ const absl::Status status(original, absl::SourceLocation::current());
701
+ int line2 = GET_SOURCE_LOCATION(1);
702
+
703
+ EXPECT_FALSE(status.ok());
704
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
705
+ CheckSourceLocation(status, {line, line2});
706
+ }
707
+ {
708
+ // Non-OK status with empty msg doesn't save source locations.
709
+ const absl::Status original(absl::StatusCode::kInternal, "",
710
+ absl::SourceLocation::current());
711
+ const absl::Status status(original, absl::SourceLocation());
712
+ EXPECT_FALSE(status.ok());
713
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
714
+ CheckSourceLocation(status);
715
+ }
716
+ {
717
+ // Non-OK status with empty msg doesn't save source locations.
718
+ const absl::Status original(absl::StatusCode::kInternal, "",
719
+ absl::SourceLocation::current());
720
+ const absl::Status status(original, absl::SourceLocation::current());
721
+ EXPECT_FALSE(status.ok());
722
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
723
+ CheckSourceLocation(status);
724
+ }
725
+ {
726
+ // Non-OK status with empty msg doesn't save source locations from default
727
+ // constructor.
728
+ const absl::Status original(absl::StatusCode::kInternal, "",
729
+ absl::SourceLocation());
730
+ const absl::Status status(original, absl::SourceLocation());
731
+ EXPECT_FALSE(status.ok());
732
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
733
+ CheckSourceLocation(status);
734
+ }
735
+ {
736
+ // Non-OK status with empty msg doesn't save source locations.
737
+ const absl::Status original(absl::StatusCode::kInternal, "",
738
+ absl::SourceLocation());
739
+ const absl::Status status(original, absl::SourceLocation::current());
740
+ EXPECT_FALSE(status.ok());
741
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
742
+ CheckSourceLocation(status);
743
+ }
744
+ {
745
+ const absl::Status original(absl::StatusCode::kInternal, "message",
746
+ absl::SourceLocation());
747
+ const absl::Status status(original, absl::SourceLocation());
748
+ EXPECT_FALSE(status.ok());
749
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
750
+ CheckSourceLocation(status);
751
+ }
752
+ {
753
+ const absl::Status original(absl::StatusCode::kInternal, "message",
754
+ absl::SourceLocation());
755
+ const absl::Status status(original, absl::SourceLocation::current());
756
+ int line = GET_SOURCE_LOCATION(1);
757
+ EXPECT_FALSE(status.ok());
758
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
759
+ CheckSourceLocation(status, {line});
760
+ }
761
+ }
762
+
763
+ TEST(Status, SourceLocationWithMoveConstructor) {
764
+ {
765
+ // OK status doesn't save source locations.
766
+ absl::Status original;
767
+ const absl::Status status(std::move(original), absl::SourceLocation());
768
+ EXPECT_TRUE(status.ok());
769
+ EXPECT_EQ(absl::StatusCode::kOk, status.code());
770
+ CheckSourceLocation(status);
771
+ }
772
+ {
773
+ // OK status doesn't save source locations.
774
+ absl::Status original;
775
+ const absl::Status status(std::move(original),
776
+ absl::SourceLocation::current());
777
+ EXPECT_TRUE(status.ok());
778
+ EXPECT_EQ(absl::StatusCode::kOk, status.code());
779
+ CheckSourceLocation(status);
780
+ }
781
+ {
782
+ // Non-ok Status with non-empty msg can save source locations with
783
+ // non-nullptr filename.
784
+ absl::Status original(absl::StatusCode::kInternal, "message",
785
+ absl::SourceLocation::current());
786
+ int line = GET_SOURCE_LOCATION(1);
787
+ // Default absl::SourceLocation cannot be saved into the chain.
788
+ const absl::Status status(std::move(original), absl::SourceLocation());
789
+ EXPECT_FALSE(status.ok());
790
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
791
+ CheckSourceLocation(status, {line});
792
+ }
793
+ {
794
+ absl::Status original(absl::StatusCode::kInternal, "message",
795
+ absl::SourceLocation::current());
796
+ int line = GET_SOURCE_LOCATION(1);
797
+
798
+ const absl::Status status(std::move(original),
799
+ absl::SourceLocation::current());
800
+ int line2 = GET_SOURCE_LOCATION(1);
801
+
802
+ EXPECT_FALSE(status.ok());
803
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
804
+ CheckSourceLocation(status, {line, line2});
805
+ }
806
+ {
807
+ // Non-OK status with empty msg doesn't save source locations.
808
+ absl::Status original(absl::StatusCode::kInternal, "",
809
+ absl::SourceLocation::current());
810
+ const absl::Status status(std::move(original), absl::SourceLocation());
811
+ EXPECT_FALSE(status.ok());
812
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
813
+ CheckSourceLocation(status);
814
+ }
815
+ {
816
+ // Non-OK status with empty msg doesn't save source locations.
817
+ absl::Status original(absl::StatusCode::kInternal, "",
818
+ absl::SourceLocation::current());
819
+ const absl::Status status(std::move(original),
820
+ absl::SourceLocation::current());
821
+ EXPECT_FALSE(status.ok());
822
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
823
+ CheckSourceLocation(status);
824
+ }
825
+ {
826
+ // Non-OK status with empty msg doesn't save source locations from default
827
+ // constructor.
828
+ absl::Status original(absl::StatusCode::kInternal, "",
829
+ absl::SourceLocation());
830
+ const absl::Status status(std::move(original), absl::SourceLocation());
831
+ EXPECT_FALSE(status.ok());
832
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
833
+ CheckSourceLocation(status);
834
+ }
835
+ {
836
+ // Non-OK status with empty msg doesn't save source locations.
837
+ absl::Status original(absl::StatusCode::kInternal, "",
838
+ absl::SourceLocation());
839
+ const absl::Status status(std::move(original),
840
+ absl::SourceLocation::current());
841
+ EXPECT_FALSE(status.ok());
842
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
843
+ CheckSourceLocation(status);
844
+ }
845
+ {
846
+ absl::Status original(absl::StatusCode::kInternal, "message",
847
+ absl::SourceLocation());
848
+ const absl::Status status(std::move(original), absl::SourceLocation());
849
+ EXPECT_FALSE(status.ok());
850
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
851
+ CheckSourceLocation(status);
852
+ }
853
+ {
854
+ absl::Status original(absl::StatusCode::kInternal, "message",
855
+ absl::SourceLocation());
856
+ const absl::Status status(std::move(original),
857
+ absl::SourceLocation::current());
858
+ int line = GET_SOURCE_LOCATION(1);
859
+ EXPECT_FALSE(status.ok());
860
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
861
+ CheckSourceLocation(status, {line});
862
+ }
863
+ }
864
+
865
+ TEST(Status, AddSourceLocation) {
866
+ int max_iter = 10;
867
+ {
868
+ // Status that ignores source location.
869
+ absl::Status status_ignores_source_location[] = {
870
+ absl::Status(),
871
+ absl::Status(absl::StatusCode::kInternal, "")};
872
+ for (absl::Status& s : status_ignores_source_location) {
873
+ for (int i = 0; i < max_iter; ++i) {
874
+ s.AddSourceLocation(absl::SourceLocation::current());
875
+ s.AddSourceLocation(absl::SourceLocation());
876
+ }
877
+ CheckSourceLocation(s);
878
+ }
879
+ }
880
+ {
881
+ // Default SourceLocation is not added.
882
+ absl::Status status(absl::StatusCode::kInternal, "foo",
883
+ absl::SourceLocation::current());
884
+ int line = GET_SOURCE_LOCATION(1);
885
+ for (int i = 0; i < max_iter; ++i) {
886
+ status.AddSourceLocation(absl::SourceLocation());
887
+ }
888
+ CheckSourceLocation(status, {line});
889
+ }
890
+ {
891
+ // Default SourceLocation is not added.
892
+ absl::Status status(absl::StatusCode::kInternal, "foo",
893
+ absl::SourceLocation::current());
894
+ int line = GET_SOURCE_LOCATION(1);
895
+ std::vector<int> lines = {line};
896
+ lines.reserve(1 + max_iter);
897
+ for (int i = 0; i < max_iter; ++i) {
898
+ status.AddSourceLocation(absl::SourceLocation::current());
899
+ lines.push_back(GET_SOURCE_LOCATION(1));
900
+ }
901
+ CheckSourceLocation(status, lines);
902
+ }
903
+ }
904
+
905
+ TEST(Status, WithSourceLocationCopy) {
906
+ absl::Status original(absl::StatusCode::kInternal, "message",
907
+ absl::SourceLocation::current());
908
+ int line = GET_SOURCE_LOCATION(1);
909
+
910
+ const absl::Status status =
911
+ original.WithSourceLocation(absl::SourceLocation::current());
912
+ int line2 = GET_SOURCE_LOCATION(1);
913
+
914
+ CheckSourceLocation(original, {line});
915
+ CheckSourceLocation(status, {line, line2});
916
+ EXPECT_EQ(original, status);
917
+ }
918
+
919
+ absl::Status&& IsRvalueStatus(absl::Status&& s) { return std::move(s); }
920
+
921
+ TEST(Status, WithSourceLocationMove) {
922
+ absl::Status original(absl::StatusCode::kInternal, "message",
923
+ absl::SourceLocation::current());
924
+ int line = GET_SOURCE_LOCATION(1);
925
+
926
+ const absl::Status status = IsRvalueStatus(
927
+ std::move(original).WithSourceLocation(absl::SourceLocation::current()));
928
+ int line2 = GET_SOURCE_LOCATION(1);
929
+
930
+ CheckSourceLocation(status, {line, line2});
931
+ EXPECT_FALSE(status.ok());
932
+ EXPECT_EQ(absl::StatusCode::kInternal, status.code());
933
+ }
934
+
935
+ TEST(Status, CopyOnWriteSourceLocations) {
936
+ absl::Status source(absl::StatusCode::kInvalidArgument, "fail",
937
+ absl::SourceLocation::current());
938
+ EXPECT_EQ(source.GetSourceLocations().size(), 1);
939
+ absl::Status copy = source;
940
+ EXPECT_EQ(copy.GetSourceLocations().size(), 1);
941
+ copy.AddSourceLocation(absl::SourceLocation::current()); // Copy rep.
942
+ EXPECT_EQ(copy.GetSourceLocations().size(), 2);
943
+ EXPECT_EQ(source.GetSourceLocations().size(), 1);
944
+ }
945
+
946
+ TEST(Status, SourceLocationToStringMode) {
947
+ absl::Status s(absl::StatusCode::kInternal, "fail",
948
+ absl::SourceLocation::current());
949
+ int line = GET_SOURCE_LOCATION(1);
950
+ std::string source_location_string = "\n=== Source Location Trace: ===";
951
+ std::string source_location_stack = absl::StrCat(
952
+ absl::SourceLocation::current().file_name(), ":", line, "\n");
953
+
954
+ s.SetPayload("foo", absl::Cord("bar"));
955
+
956
+ EXPECT_EQ("INTERNAL: fail",
957
+ s.ToString(absl::StatusToStringMode::kWithNoExtraData));
958
+
959
+ EXPECT_EQ("INTERNAL: fail",
960
+ s.ToString(~absl::StatusToStringMode::kWithSourceLocation &
961
+ ~absl::StatusToStringMode::kWithPayload));
962
+ EXPECT_THAT(s.ToString(absl::StatusToStringMode::kWithSourceLocation |
963
+ absl::StatusToStringMode::kWithPayload),
964
+ AllOf(HasSubstr("INTERNAL: fail [foo='bar']"),
965
+ HasSubstr(source_location_string),
966
+ HasSubstr(source_location_stack)));
967
+
968
+ s.SetPayload("bar", absl::Cord("\377"));
969
+
970
+ EXPECT_THAT(s.ToString(absl::StatusToStringMode::kWithEverything),
971
+ AllOf(HasSubstr("INTERNAL: fail"), HasSubstr("[foo='bar']"),
972
+ HasSubstr("[bar='\\xff']"),
973
+ HasSubstr(source_location_string),
974
+ HasSubstr(source_location_stack)));
975
+ EXPECT_THAT(s.ToString(absl::StatusToStringMode::kWithPayload |
976
+ absl::StatusToStringMode::kWithSourceLocation),
977
+ AllOf(HasSubstr("INTERNAL: fail"), HasSubstr("[foo='bar']"),
978
+ HasSubstr("[bar='\\xff']"),
979
+ HasSubstr(source_location_string),
980
+ HasSubstr(source_location_stack)));
981
+ EXPECT_THAT(s.ToString(absl::StatusToStringMode::kWithSourceLocation),
982
+ AllOf(HasSubstr("INTERNAL: fail"), Not(HasSubstr("[foo='bar']")),
983
+ Not(HasSubstr("[bar='\\xff']")),
984
+ HasSubstr(source_location_string),
985
+ HasSubstr(source_location_stack)));
986
+ EXPECT_THAT(s.ToString(absl::StatusToStringMode::kWithPayload),
987
+ AllOf(HasSubstr("INTERNAL: fail"), HasSubstr("[foo='bar']"),
988
+ HasSubstr("[bar='\\xff']"),
989
+ Not(HasSubstr(source_location_string)),
990
+ Not(HasSubstr(source_location_stack))));
991
+ }
992
+
993
+ TEST(Status, StackTracePayloadOverflow) {
994
+ // Stack must have the same layout as status_internal::StackTracePayload.
995
+ struct Stack {
996
+ size_t size;
997
+ void* frames[20];
998
+ } stack;
999
+ stack.size = 200; // Overflows frames.
1000
+
1001
+ absl::Status status = absl::CancelledError();
1002
+ status.SetPayload("AbslStatusStackTracePayload",
1003
+ absl::Cord(absl::string_view(
1004
+ reinterpret_cast<const char*>(&stack), sizeof(stack))));
1005
+
1006
+ // An unchecked overflow should be detected by ASAN/MSAN on the next line.
1007
+ static_cast<void>(status.ToString(absl::StatusToStringMode::kWithEverything));
1008
+ }
1009
+
580
1010
  } // namespace