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
@@ -67,6 +67,7 @@
67
67
  #include <cstdio>
68
68
  #include <cstdlib>
69
69
  #include <cstring>
70
+ #include <memory>
70
71
 
71
72
  #include "absl/base/casts.h"
72
73
  #include "absl/base/dynamic_annotations.h"
@@ -145,16 +146,7 @@ inline constexpr bool kPlatformUsesOPDSections = false;
145
146
  // pointers and the first one is the function's entry.
146
147
  const size_t kFunctionDescriptorSize = sizeof(void *) * 2;
147
148
 
148
- const int kMaxDecorators = 10; // Seems like a reasonable upper limit.
149
-
150
- struct InstalledSymbolDecorator {
151
- SymbolDecorator fn;
152
- void *arg;
153
- int ticket;
154
- };
155
-
156
- int g_num_decorators;
157
- InstalledSymbolDecorator g_decorators[kMaxDecorators];
149
+ std::atomic<SymbolDecorator::Factory*> g_decorator_factory = nullptr;
158
150
 
159
151
  struct FileMappingHint {
160
152
  const void *start;
@@ -163,16 +155,6 @@ struct FileMappingHint {
163
155
  const char *filename;
164
156
  };
165
157
 
166
- // Protects g_decorators.
167
- // We are using SpinLock and not a Mutex here, because we may be called
168
- // from inside Mutex::Lock itself, and it prohibits recursive calls.
169
- // This happens in e.g. base/stacktrace_syscall_unittest.
170
- // Moreover, we are using only try_lock(), if the decorator list
171
- // is being modified (is busy), we skip all decorators, and possibly
172
- // loose some info. Sorry, that's the best we could do.
173
- ABSL_CONST_INIT absl::base_internal::SpinLock g_decorators_mu(
174
- absl::base_internal::SCHEDULE_KERNEL_ONLY);
175
-
176
158
  const int kMaxFileMappingHints = 8;
177
159
  int g_num_file_mapping_hints;
178
160
  FileMappingHint g_file_mapping_hints[kMaxFileMappingHints];
@@ -190,32 +172,23 @@ static void SafeMemZero(void *p, size_t size) {
190
172
  }
191
173
 
192
174
  struct ObjFile {
193
- ObjFile()
194
- : filename(nullptr),
195
- start_addr(nullptr),
196
- end_addr(nullptr),
197
- offset(0),
198
- fd(-1),
199
- elf_type(-1) {
200
- SafeMemZero(&elf_header, sizeof(elf_header));
201
- SafeMemZero(&phdr[0], sizeof(phdr));
202
- }
203
-
204
- char *filename;
205
- const void *start_addr;
206
- const void *end_addr;
207
- uint64_t offset;
175
+ char *filename = nullptr;
176
+ const void *start_addr = nullptr;
177
+ const void *end_addr = nullptr;
178
+ uint64_t offset = 0;
208
179
 
209
180
  // The following fields are initialized on the first access to the
210
181
  // object file.
211
- int fd;
212
- int elf_type;
213
- ElfW(Ehdr) elf_header;
182
+ int fd = -1;
183
+ int elf_type = -1;
184
+ ElfW(Ehdr) elf_header = {};
214
185
 
215
186
  // PT_LOAD program header describing executable code.
216
187
  // Normally we expect just one, but SWIFT binaries have two.
217
188
  // CUDA binaries have 3 (see cr/473913254 description).
218
- std::array<ElfW(Phdr), 4> phdr;
189
+ std::array<ElfW(Phdr), 4> phdr = {};
190
+
191
+ SymbolDecoratorPtr decorator = {};
219
192
  };
220
193
 
221
194
  // Build 4-way associative cache for symbols. Within each cache line, symbols
@@ -266,7 +239,8 @@ ObjFile *AddrMap::Add() {
266
239
  static_cast<ObjFile *>(base_internal::LowLevelAlloc::AllocWithArena(
267
240
  new_allocated * sizeof(*new_obj_), base_internal::SigSafeArena()));
268
241
  if (obj_) {
269
- memcpy(new_obj_, obj_, allocated_ * sizeof(*new_obj_));
242
+ std::uninitialized_move_n(obj_, size_, new_obj_);
243
+ std::destroy_n(obj_, size_);
270
244
  base_internal::LowLevelAlloc::Free(obj_);
271
245
  }
272
246
  obj_ = new_obj_;
@@ -309,6 +283,8 @@ class Symbolizer {
309
283
  ~Symbolizer();
310
284
  const char *GetSymbol(const void *const pc);
311
285
 
286
+ void UpdateDecoratorsIfNeeded(SymbolDecorator::Factory* decorator_factory);
287
+
312
288
  private:
313
289
  char *CopyString(const char *s) {
314
290
  size_t len = strlen(s);
@@ -345,6 +321,7 @@ class Symbolizer {
345
321
  };
346
322
 
347
323
  AddrMap addr_map_;
324
+ SymbolDecorator::Factory* decorator_factory_ = nullptr;
348
325
 
349
326
  bool ok_;
350
327
  bool addr_map_read_;
@@ -422,11 +399,14 @@ static Symbolizer *AllocateSymbolizer() {
422
399
  base_internal::InitSigSafeArena();
423
400
  Symbolizer *symbolizer =
424
401
  g_cached_symbolizer.exchange(nullptr, std::memory_order_acquire);
425
- if (symbolizer != nullptr) {
426
- return symbolizer;
427
- }
428
- return new (base_internal::LowLevelAlloc::AllocWithArena(
429
- SymbolizerSize(), base_internal::SigSafeArena())) Symbolizer();
402
+ if (symbolizer == nullptr) {
403
+ void* ptr = base_internal::LowLevelAlloc::AllocWithArena(
404
+ SymbolizerSize(), base_internal::SigSafeArena());
405
+ symbolizer = new (ptr) Symbolizer();
406
+ }
407
+ symbolizer->UpdateDecoratorsIfNeeded(
408
+ g_decorator_factory.load(std::memory_order_acquire));
409
+ return symbolizer;
430
410
  }
431
411
 
432
412
  // Set g_cached_symbolize_state to s if it is null, otherwise
@@ -443,7 +423,7 @@ static void FreeSymbolizer(Symbolizer *s) {
443
423
 
444
424
  Symbolizer::Symbolizer() : ok_(true), addr_map_read_(false) {
445
425
  for (SymbolCacheLine &symbol_cache_line : symbol_cache_) {
446
- for (size_t j = 0; j < ABSL_ARRAYSIZE(symbol_cache_line.name); ++j) {
426
+ for (size_t j = 0; j < std::size(symbol_cache_line.name); ++j) {
447
427
  symbol_cache_line.pc[j] = nullptr;
448
428
  symbol_cache_line.name[j] = nullptr;
449
429
  symbol_cache_line.age[j] = 0;
@@ -460,6 +440,26 @@ Symbolizer::~Symbolizer() {
460
440
  ClearAddrMap();
461
441
  }
462
442
 
443
+ void Symbolizer::UpdateDecoratorsIfNeeded(
444
+ SymbolDecorator::Factory* decorator_factory) {
445
+ if (decorator_factory_ == decorator_factory) return;
446
+
447
+ for (SymbolCacheLine& symbol_cache_line : symbol_cache_) {
448
+ for (size_t j = 0; j < std::size(symbol_cache_line.name); ++j) {
449
+ symbol_cache_line.pc[j] = nullptr;
450
+ base_internal::LowLevelAlloc::Free(symbol_cache_line.name[j]);
451
+ symbol_cache_line.name[j] = nullptr;
452
+ symbol_cache_line.age[j] = 0;
453
+ }
454
+ }
455
+
456
+ decorator_factory_ = decorator_factory;
457
+ for (size_t i = 0, end = addr_map_.Size(); i < end; ++i) {
458
+ ObjFile* obj = addr_map_.At(i);
459
+ obj->decorator.reset();
460
+ }
461
+ }
462
+
463
463
  // We don't use assert() since it's not guaranteed to be
464
464
  // async-signal-safe. Instead we define a minimal assertion
465
465
  // macro. So far, we don't need pretty printing for __FILE__, etc.
@@ -1387,7 +1387,8 @@ static void MaybeOpenFdFromSelfExe(ObjFile *obj) {
1387
1387
  obj->fd = fd;
1388
1388
  }
1389
1389
 
1390
- static bool MaybeInitializeObjFile(ObjFile *obj) {
1390
+ static bool MaybeInitializeObjFile(
1391
+ ObjFile* obj, SymbolDecorator::Factory* decorator_factory) {
1391
1392
  if (obj->fd < 0) {
1392
1393
  obj->fd = OpenReadOnlyWithHighFD(obj->filename);
1393
1394
 
@@ -1469,6 +1470,9 @@ static bool MaybeInitializeObjFile(ObjFile *obj) {
1469
1470
  return false;
1470
1471
  }
1471
1472
  }
1473
+ if (decorator_factory != nullptr && obj->decorator == nullptr) {
1474
+ obj->decorator = decorator_factory(obj->fd);
1475
+ }
1472
1476
  return true;
1473
1477
  }
1474
1478
 
@@ -1482,9 +1486,8 @@ static bool MaybeInitializeObjFile(ObjFile *obj) {
1482
1486
  const char *Symbolizer::GetUncachedSymbol(const void *pc) {
1483
1487
  ObjFile *const obj = FindObjFile(pc, 1);
1484
1488
  ptrdiff_t relocation = 0;
1485
- int fd = -1;
1486
1489
  if (obj != nullptr) {
1487
- if (MaybeInitializeObjFile(obj)) {
1490
+ if (MaybeInitializeObjFile(obj, decorator_factory_)) {
1488
1491
  const size_t start_addr = reinterpret_cast<size_t>(obj->start_addr);
1489
1492
  if (obj->elf_type == ET_DYN && start_addr >= obj->offset) {
1490
1493
  // This object was relocated.
@@ -1524,7 +1527,6 @@ const char *Symbolizer::GetUncachedSymbol(const void *pc) {
1524
1527
  }
1525
1528
  }
1526
1529
 
1527
- fd = obj->fd;
1528
1530
  if (GetSymbolFromObjectFile(*obj, pc, relocation, symbol_buf_,
1529
1531
  sizeof(symbol_buf_), tmp_buf_,
1530
1532
  sizeof(tmp_buf_)) == SYMBOL_FOUND) {
@@ -1549,17 +1551,9 @@ const char *Symbolizer::GetUncachedSymbol(const void *pc) {
1549
1551
  #endif
1550
1552
  }
1551
1553
 
1552
- if (g_decorators_mu.try_lock()) {
1553
- if (g_num_decorators > 0) {
1554
- SymbolDecoratorArgs decorator_args = {
1555
- pc, relocation, fd, symbol_buf_, sizeof(symbol_buf_),
1556
- tmp_buf_, sizeof(tmp_buf_), nullptr};
1557
- for (int i = 0; i < g_num_decorators; ++i) {
1558
- decorator_args.arg = g_decorators[i].arg;
1559
- g_decorators[i].fn(&decorator_args);
1560
- }
1561
- }
1562
- g_decorators_mu.unlock();
1554
+ if (obj != nullptr && obj->decorator != nullptr) {
1555
+ obj->decorator->Decorate(pc, relocation, symbol_buf_, sizeof(symbol_buf_),
1556
+ tmp_buf_, sizeof(tmp_buf_));
1563
1557
  }
1564
1558
  if (symbol_buf_[0] == '\0') {
1565
1559
  return nullptr;
@@ -1604,51 +1598,9 @@ const char *Symbolizer::GetSymbol(const void *pc) {
1604
1598
  #endif
1605
1599
  }
1606
1600
 
1607
- bool RemoveAllSymbolDecorators(void) {
1608
- if (!g_decorators_mu.try_lock()) {
1609
- // Someone else is using decorators. Get out.
1610
- return false;
1611
- }
1612
- g_num_decorators = 0;
1613
- g_decorators_mu.unlock();
1614
- return true;
1615
- }
1616
-
1617
- bool RemoveSymbolDecorator(int ticket) {
1618
- if (!g_decorators_mu.try_lock()) {
1619
- // Someone else is using decorators. Get out.
1620
- return false;
1621
- }
1622
- for (int i = 0; i < g_num_decorators; ++i) {
1623
- if (g_decorators[i].ticket == ticket) {
1624
- while (i < g_num_decorators - 1) {
1625
- g_decorators[i] = g_decorators[i + 1];
1626
- ++i;
1627
- }
1628
- g_num_decorators = i;
1629
- break;
1630
- }
1631
- }
1632
- g_decorators_mu.unlock();
1633
- return true; // Decorator is known to be removed.
1634
- }
1635
-
1636
- int InstallSymbolDecorator(SymbolDecorator decorator, void *arg) {
1637
- static int ticket = 0;
1638
-
1639
- if (!g_decorators_mu.try_lock()) {
1640
- // Someone else is using decorators. Get out.
1641
- return -2;
1642
- }
1643
- int ret = ticket;
1644
- if (g_num_decorators >= kMaxDecorators) {
1645
- ret = -1;
1646
- } else {
1647
- g_decorators[g_num_decorators] = {decorator, arg, ticket++};
1648
- ++g_num_decorators;
1649
- }
1650
- g_decorators_mu.unlock();
1651
- return ret;
1601
+ SymbolDecorator::Factory* SetSymbolDecoratorFactory(
1602
+ SymbolDecorator::Factory* factory) {
1603
+ return g_decorator_factory.exchange(factory, std::memory_order_acq_rel);
1652
1604
  }
1653
1605
 
1654
1606
  bool RegisterFileMappingHint(const void *start, const void *end,
@@ -13,6 +13,10 @@
13
13
  // limitations under the License.
14
14
 
15
15
  #include "absl/debugging/symbolize.h"
16
+ #include <cstddef>
17
+
18
+ #include "absl/debugging/internal/symbolize.h"
19
+ #include "absl/strings/str_format.h"
16
20
 
17
21
  #ifdef __EMSCRIPTEN__
18
22
  #include <emscripten.h>
@@ -32,8 +36,10 @@
32
36
  #include "absl/base/attributes.h"
33
37
  #include "absl/base/casts.h"
34
38
  #include "absl/base/config.h"
39
+ #include "absl/base/internal/low_level_alloc.h"
35
40
  #include "absl/base/internal/per_thread_tls.h"
36
41
  #include "absl/base/optimization.h"
42
+ #include "absl/cleanup/cleanup.h"
37
43
  #include "absl/debugging/internal/stack_consumption.h"
38
44
  #include "absl/log/check.h"
39
45
  #include "absl/log/log.h"
@@ -130,7 +136,7 @@ static const char *TrySymbolizeWithLimit(void *pc, int limit) {
130
136
  << "try_symbolize_buffer is too small";
131
137
 
132
138
  // Use the heap to facilitate heap and buffer sanitizer tools.
133
- auto heap_buffer = absl::make_unique<char[]>(sizeof(try_symbolize_buffer));
139
+ auto heap_buffer = std::make_unique<char[]>(sizeof(try_symbolize_buffer));
134
140
  bool found = absl::Symbolize(pc, heap_buffer.get(), limit);
135
141
  if (found) {
136
142
  CHECK_LT(static_cast<int>(
@@ -369,46 +375,41 @@ TEST(Symbolize, SymbolizeWithMultipleMaps) {
369
375
  }
370
376
  }
371
377
 
372
- // Appends string(*args->arg) to args->symbol_buf.
373
- static void DummySymbolDecorator(
374
- const absl::debugging_internal::SymbolDecoratorArgs *args) {
375
- std::string *message = static_cast<std::string *>(args->arg);
376
- strncat(args->symbol_buf, message->c_str(),
377
- args->symbol_buf_size - strlen(args->symbol_buf) - 1);
378
- }
379
-
380
- TEST(Symbolize, InstallAndRemoveSymbolDecorators) {
381
- int ticket_a;
382
- std::string a_message("a");
383
- EXPECT_GE(ticket_a = absl::debugging_internal::InstallSymbolDecorator(
384
- DummySymbolDecorator, &a_message),
385
- 0);
386
-
387
- int ticket_b;
388
- std::string b_message("b");
389
- EXPECT_GE(ticket_b = absl::debugging_internal::InstallSymbolDecorator(
390
- DummySymbolDecorator, &b_message),
391
- 0);
378
+ template <char C>
379
+ class TestSymbolDecorator final
380
+ : public absl::debugging_internal::SymbolDecorator {
381
+ public:
382
+ static absl::debugging_internal::SymbolDecoratorPtr Factory(int /*fd*/) {
383
+ void* ptr = absl::base_internal::LowLevelAlloc::AllocWithArena(
384
+ sizeof(TestSymbolDecorator), absl::base_internal::SigSafeArena());
385
+ return absl::debugging_internal::SymbolDecoratorPtr(
386
+ new (ptr) TestSymbolDecorator());
387
+ }
392
388
 
393
- int ticket_c;
394
- std::string c_message("c");
395
- EXPECT_GE(ticket_c = absl::debugging_internal::InstallSymbolDecorator(
396
- DummySymbolDecorator, &c_message),
397
- 0);
389
+ void Decorate(const void* /*pc*/, ptrdiff_t /*relocation*/, char* symbol_buf,
390
+ size_t symbol_buf_size, char* /*tmp_buf*/,
391
+ size_t /*tmp_buf_size*/) const override {
392
+ const size_t len = strlen(symbol_buf);
393
+ absl::SNPrintF(symbol_buf + len, symbol_buf_size - len, " hello %c", C);
394
+ }
395
+ };
398
396
 
399
- // Use addresses 4 and 8 here to ensure that we always use valid addresses
400
- // even on systems that require instructions to be 32-bit aligned.
401
- char *address = reinterpret_cast<char *>(4);
402
- EXPECT_STREQ("abc", TrySymbolize(address));
397
+ TEST(Symbolize, SetSymbolDecorator) {
398
+ absl::Cleanup cleanup =
399
+ [old_decorator = absl::debugging_internal::SetSymbolDecoratorFactory(
400
+ &TestSymbolDecorator<'a'>::Factory)] {
401
+ absl::debugging_internal::SetSymbolDecoratorFactory(old_decorator);
402
+ };
403
403
 
404
- EXPECT_TRUE(absl::debugging_internal::RemoveSymbolDecorator(ticket_b));
404
+ EXPECT_STREQ("nonstatic_func hello a",
405
+ TrySymbolize(reinterpret_cast<void*>(&nonstatic_func)));
405
406
 
406
- EXPECT_STREQ("ac", TrySymbolize(address + 4));
407
+ EXPECT_EQ(absl::debugging_internal::SetSymbolDecoratorFactory(
408
+ &TestSymbolDecorator<'b'>::Factory),
409
+ &TestSymbolDecorator<'a'>::Factory);
407
410
 
408
- // Cleanup: remove all remaining decorators so other stack traces don't
409
- // get mystery "ac" decoration.
410
- EXPECT_TRUE(absl::debugging_internal::RemoveSymbolDecorator(ticket_a));
411
- EXPECT_TRUE(absl::debugging_internal::RemoveSymbolDecorator(ticket_c));
411
+ EXPECT_STREQ("nonstatic_func hello b",
412
+ TrySymbolize(reinterpret_cast<void*>(&nonstatic_func)));
412
413
  }
413
414
 
414
415
  // Some versions of Clang with optimizations enabled seem to be able
@@ -14,16 +14,16 @@
14
14
 
15
15
  #include <cstdint>
16
16
 
17
- #include "absl/base/internal/raw_logging.h"
17
+ #include "absl/debugging/internal/symbolize.h"
18
18
 
19
19
  namespace absl {
20
20
  ABSL_NAMESPACE_BEGIN
21
21
 
22
22
  namespace debugging_internal {
23
23
 
24
- int InstallSymbolDecorator(SymbolDecorator, void*) { return -1; }
25
- bool RemoveSymbolDecorator(int) { return false; }
26
- bool RemoveAllSymbolDecorators(void) { return false; }
24
+ SymbolDecorator::Factory* SetSymbolDecoratorFactory(SymbolDecorator::Factory*) {
25
+ return nullptr;
26
+ }
27
27
  bool RegisterFileMappingHint(const void *, const void *, uint64_t, const char *) {
28
28
  return false;
29
29
  }
@@ -43,6 +43,7 @@ cc_library(
43
43
  copts = ABSL_DEFAULT_COPTS,
44
44
  linkopts = ABSL_DEFAULT_LINKOPTS,
45
45
  visibility = [
46
+ "//absl:friends",
46
47
  "//absl/flags:__pkg__",
47
48
  ],
48
49
  deps = [
@@ -62,6 +63,7 @@ cc_library(
62
63
  copts = ABSL_DEFAULT_COPTS,
63
64
  linkopts = ABSL_DEFAULT_LINKOPTS,
64
65
  visibility = [
66
+ "//absl:friends",
65
67
  "//absl/flags:__pkg__",
66
68
  "//absl/log:__pkg__",
67
69
  ],
@@ -129,7 +131,7 @@ cc_library(
129
131
  copts = ABSL_DEFAULT_COPTS,
130
132
  linkopts = ABSL_DEFAULT_LINKOPTS,
131
133
  visibility = [
132
- "//visibility:private",
134
+ "//absl:friends",
133
135
  ],
134
136
  deps = [
135
137
  "//absl/base:config",
@@ -151,6 +153,7 @@ cc_library(
151
153
  ":commandlineflag_internal",
152
154
  "//absl/base:config",
153
155
  "//absl/base:fast_type_id",
156
+ "//absl/base:nullability",
154
157
  "//absl/strings",
155
158
  "//absl/types:optional",
156
159
  ],
@@ -167,6 +170,7 @@ cc_library(
167
170
  copts = ABSL_DEFAULT_COPTS,
168
171
  linkopts = ABSL_DEFAULT_LINKOPTS,
169
172
  visibility = [
173
+ "//absl:friends",
170
174
  "//absl/flags:__pkg__",
171
175
  "//absl/flags/rust:__pkg__",
172
176
  ],
@@ -267,6 +271,7 @@ cc_library(
267
271
  copts = ABSL_DEFAULT_COPTS,
268
272
  linkopts = ABSL_DEFAULT_LINKOPTS,
269
273
  visibility = [
274
+ "//absl:friends",
270
275
  "//absl/flags:__pkg__",
271
276
  ],
272
277
  deps = [
@@ -410,7 +415,6 @@ cc_test(
410
415
  "//absl/numeric:int128",
411
416
  "//absl/strings",
412
417
  "//absl/time",
413
- "//absl/types:optional",
414
418
  "@googletest//:gtest",
415
419
  "@googletest//:gtest_main",
416
420
  ],
@@ -436,7 +440,6 @@ cc_binary(
436
440
  ":reflection",
437
441
  "//absl/strings",
438
442
  "//absl/time",
439
- "//absl/types:optional",
440
443
  "@google_benchmark//:benchmark_main",
441
444
  ],
442
445
  )
@@ -128,6 +128,7 @@ absl_cc_library(
128
128
  absl::config
129
129
  absl::fast_type_id
130
130
  absl::flags_commandlineflag_internal
131
+ absl::nullability
131
132
  absl::optional
132
133
  absl::strings
133
134
  )
@@ -351,7 +352,6 @@ absl_cc_test(
351
352
  absl::flags_parse
352
353
  absl::flags_reflection
353
354
  absl::int128
354
- absl::optional
355
355
  absl::raw_logging_internal
356
356
  absl::strings
357
357
  absl::time
@@ -27,10 +27,12 @@
27
27
  #define ABSL_FLAGS_COMMANDLINEFLAG_H_
28
28
 
29
29
  #include <memory>
30
+ #include <optional>
30
31
  #include <string>
31
32
 
32
33
  #include "absl/base/config.h"
33
34
  #include "absl/base/fast_type_id.h"
35
+ #include "absl/base/nullability.h"
34
36
  #include "absl/flags/internal/commandlineflag.h"
35
37
  #include "absl/strings/string_view.h"
36
38
  #include "absl/types/optional.h"
@@ -86,11 +88,11 @@ class CommandLineFlag {
86
88
  // absl::CommandLineFlag::TryGet()
87
89
  //
88
90
  // Attempts to retrieve the flag value. Returns value on success,
89
- // absl::nullopt otherwise.
91
+ // std::nullopt otherwise.
90
92
  template <typename T>
91
- absl::optional<T> TryGet() const {
93
+ std::optional<T> TryGet() const {
92
94
  if (IsRetired() || !IsOfType<T>()) {
93
- return absl::nullopt;
95
+ return std::nullopt;
94
96
  }
95
97
 
96
98
  // Implementation notes:
@@ -118,7 +120,7 @@ class CommandLineFlag {
118
120
  Read(&u.value);
119
121
  // allow retired flags to be "read", so we can report invalid access.
120
122
  if (IsRetired()) {
121
- return absl::nullopt;
123
+ return std::nullopt;
122
124
  }
123
125
  return std::move(u.value);
124
126
  }
@@ -158,7 +160,7 @@ class CommandLineFlag {
158
160
  // Sets the value of the flag based on specified string `value`. If the flag
159
161
  // was successfully set to new value, it returns true. Otherwise, sets `error`
160
162
  // to indicate the error, leaves the flag unchanged, and returns false.
161
- bool ParseFrom(absl::string_view value, std::string* error);
163
+ bool ParseFrom(absl::string_view value, std::string* absl_nonnull error);
162
164
 
163
165
  protected:
164
166
  ~CommandLineFlag() = default;
@@ -188,7 +190,7 @@ class CommandLineFlag {
188
190
 
189
191
  // Copy-construct a new value of the flag's type in a memory referenced by
190
192
  // the dst based on the current flag's value.
191
- virtual void Read(void* dst) const = 0;
193
+ virtual void Read(void* absl_nonnull dst) const = 0;
192
194
 
193
195
  // To be deleted. Used to return true if flag's current value originated from
194
196
  // command line.
@@ -55,7 +55,7 @@ class CommandLineFlagTest : public testing::Test {
55
55
  #if ABSL_FLAGS_STRIP_NAMES
56
56
  GTEST_SKIP() << "This test requires flag names to be present";
57
57
  #endif
58
- flag_saver_ = absl::make_unique<absl::FlagSaver>();
58
+ flag_saver_ = std::make_unique<absl::FlagSaver>();
59
59
  }
60
60
  void TearDown() override { flag_saver_.reset(); }
61
61
 
@@ -15,6 +15,7 @@
15
15
 
16
16
  #include <stdint.h>
17
17
 
18
+ #include <optional>
18
19
  #include <string>
19
20
  #include <vector>
20
21
 
@@ -24,7 +25,6 @@
24
25
  #include "absl/flags/reflection.h"
25
26
  #include "absl/strings/string_view.h"
26
27
  #include "absl/time/time.h"
27
- #include "absl/types/optional.h"
28
28
  #include "benchmark/benchmark.h"
29
29
 
30
30
  namespace {
@@ -32,10 +32,10 @@ using String = std::string;
32
32
  using VectorOfStrings = std::vector<std::string>;
33
33
  using AbslDuration = absl::Duration;
34
34
 
35
- // We do not want to take over marshalling for the types absl::optional<int>,
36
- // absl::optional<std::string> which we do not own. Instead we introduce unique
35
+ // We do not want to take over marshalling for the types std::optional<int>,
36
+ // std::optional<std::string> which we do not own. Instead we introduce unique
37
37
  // "aliases" to these types, which we do.
38
- using AbslOptionalInt = absl::optional<int>;
38
+ using AbslOptionalInt = std::optional<int>;
39
39
  struct OptionalInt : AbslOptionalInt {
40
40
  using AbslOptionalInt::AbslOptionalInt;
41
41
  };
@@ -54,7 +54,7 @@ std::string AbslUnparseFlag(const OptionalInt& flag) {
54
54
  return !flag ? "" : absl::UnparseFlag(*flag);
55
55
  }
56
56
 
57
- using AbslOptionalString = absl::optional<std::string>;
57
+ using AbslOptionalString = std::optional<std::string>;
58
58
  struct OptionalString : AbslOptionalString {
59
59
  using AbslOptionalString::AbslOptionalString;
60
60
  };