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.
- package/LICENSE +15 -20
- package/README.md +63 -4
- package/binding.gyp +1 -2
- package/lib/addon.cc +9 -5
- package/lib/exec.cc +4 -4
- package/lib/match.cc +4 -4
- package/lib/new.cc +6 -6
- package/lib/pattern.cc +148 -1
- package/lib/replace.cc +5 -4
- package/lib/search.cc +1 -1
- package/lib/set.cc +85 -10
- package/lib/test.cc +1 -1
- package/lib/unicode_properties.h +15840 -0
- package/lib/wrapped_re2.h +40 -4
- package/lib/wrapped_re2_set.h +3 -1
- package/llms-full.txt +497 -0
- package/llms.txt +135 -0
- package/package.json +19 -11
- package/re2.d.ts +2 -0
- package/re2.js +1 -0
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/FAQ.md +130 -79
- package/vendor/abseil-cpp/MODULE.bazel +6 -7
- package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
- package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
- package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
- package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
- package/vendor/abseil-cpp/absl/base/casts.h +8 -1
- package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
- package/vendor/abseil-cpp/absl/base/config.h +53 -9
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
- package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
- package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
- package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
- package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
- package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
- package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
- package/vendor/abseil-cpp/absl/base/macros.h +36 -20
- package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
- package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
- package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
- package/vendor/abseil-cpp/absl/base/options.h +55 -1
- package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
- package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
- package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
- package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
- package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
- package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
- package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
- package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
- package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
- package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
- package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
- package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
- package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
- package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
- package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
- package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
- package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
- package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
- package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
- package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
- package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
- package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
- package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
- package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
- package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
- package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
- package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
- package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
- package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
- package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
- package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
- package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
- package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
- package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
- package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
- package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
- package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
- package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
- package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
- package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
- package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
- package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
- package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
- package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
- package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
- package/vendor/abseil-cpp/absl/status/status.cc +62 -70
- package/vendor/abseil-cpp/absl/status/status.h +249 -23
- package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
- package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
- package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
- package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
- package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
- package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
- package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
- package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
- package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
- package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
- package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
- package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
- package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
- package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
- package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
- package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
- package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
- package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
- package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
- package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
- package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
- package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
- package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
- package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
- package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
- package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
- package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
- package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
- package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
- package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
- package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
- package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/time/clock.h +3 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
- package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
- package/vendor/abseil-cpp/absl/time/format.cc +3 -10
- package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
- package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
- package/vendor/abseil-cpp/absl/types/any.h +26 -4
- package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
- package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
- package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
- package/vendor/abseil-cpp/absl/types/compare.h +4 -4
- package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
- package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
- package/vendor/abseil-cpp/absl/types/optional.h +30 -3
- package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
- package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
- package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
- package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
- package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
- package/vendor/abseil-cpp/absl/types/span.h +19 -23
- package/vendor/abseil-cpp/absl/types/variant.h +75 -18
- package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
|
@@ -12,6 +12,19 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
+
// All of the data that passes through this code is trusted because it flows
|
|
16
|
+
// through a closed loop within the absl::LogMessage object. It is not a robust
|
|
17
|
+
// protocol buffer encoder or decoder.
|
|
18
|
+
//
|
|
19
|
+
// Encoding: When `LOG(INFO) << "foo"` is called, the library uses the Encode*
|
|
20
|
+
// functions to build a protocol buffer in a private, fixed-size internal buffer
|
|
21
|
+
// (`LogMessageData::encoded_buf`).
|
|
22
|
+
//
|
|
23
|
+
// Decoding: During the same logging call, `LogMessage::Flush()` calls
|
|
24
|
+
// `FinalizeEncodingAndFormat()`, which uses `ProtoField::DecodeFrom` to parse
|
|
25
|
+
// that same internal buffer to generate the human-readable string for
|
|
26
|
+
// text-based log sinks.
|
|
27
|
+
|
|
15
28
|
#include "absl/log/internal/proto.h"
|
|
16
29
|
|
|
17
30
|
#include <algorithm>
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
#include "absl/log/internal/structured_proto.h"
|
|
17
17
|
|
|
18
18
|
#include <cstdint>
|
|
19
|
+
#include <variant>
|
|
19
20
|
|
|
20
21
|
#include "absl/base/config.h"
|
|
21
22
|
#include "absl/log/internal/proto.h"
|
|
22
23
|
#include "absl/types/span.h"
|
|
23
|
-
#include "absl/types/variant.h"
|
|
24
24
|
|
|
25
25
|
namespace absl {
|
|
26
26
|
ABSL_NAMESPACE_BEGIN
|
|
@@ -81,11 +81,11 @@ struct I32EncoderVisitor final {
|
|
|
81
81
|
// Handles protobuf-encoding a type contained inside `StructuredProtoField`.
|
|
82
82
|
struct EncoderVisitor final {
|
|
83
83
|
bool operator()(StructuredProtoField::Varint varint) {
|
|
84
|
-
return
|
|
84
|
+
return std::visit(VarintEncoderVisitor{field_number, buf}, varint);
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
bool operator()(StructuredProtoField::I64 i64) {
|
|
88
|
-
return
|
|
88
|
+
return std::visit(I64EncoderVisitor{field_number, buf}, i64);
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
bool operator()(StructuredProtoField::LengthDelimited length_delimited) {
|
|
@@ -95,7 +95,7 @@ struct EncoderVisitor final {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
bool operator()(StructuredProtoField::I32 i32) {
|
|
98
|
-
return
|
|
98
|
+
return std::visit(I32EncoderVisitor{field_number, buf}, i32);
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
uint64_t field_number;
|
|
@@ -106,7 +106,7 @@ struct EncoderVisitor final {
|
|
|
106
106
|
|
|
107
107
|
bool EncodeStructuredProtoField(StructuredProtoField field,
|
|
108
108
|
absl::Span<char>& buf) {
|
|
109
|
-
return
|
|
109
|
+
return std::visit(EncoderVisitor{field.field_number, buf}, field.value);
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
} // namespace log_internal
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
#include <cstddef>
|
|
23
23
|
#include <cstdint>
|
|
24
|
+
#include <variant>
|
|
24
25
|
|
|
25
26
|
#include "absl/base/config.h"
|
|
26
27
|
#include "absl/log/internal/proto.h"
|
|
@@ -35,11 +36,11 @@ namespace log_internal {
|
|
|
35
36
|
struct StructuredProtoField final {
|
|
36
37
|
// Numeric type encoded with varint encoding:
|
|
37
38
|
// https://protobuf.dev/programming-guides/encoding/#varints
|
|
38
|
-
using Varint =
|
|
39
|
+
using Varint = std::variant<uint64_t, int64_t, uint32_t, int32_t, bool>;
|
|
39
40
|
|
|
40
41
|
// Fixed-length 64-bit integer encoding:
|
|
41
42
|
// https://protobuf.dev/programming-guides/encoding/#non-varints
|
|
42
|
-
using I64 =
|
|
43
|
+
using I64 = std::variant<uint64_t, int64_t, double>;
|
|
43
44
|
|
|
44
45
|
// Length-delimited record type (string, sub-message):
|
|
45
46
|
// https://protobuf.dev/programming-guides/encoding/#length-types
|
|
@@ -47,11 +48,11 @@ struct StructuredProtoField final {
|
|
|
47
48
|
|
|
48
49
|
// Fixed-length 32-bit integer encoding:
|
|
49
50
|
// https://protobuf.dev/programming-guides/encoding/#non-varints
|
|
50
|
-
using I32 =
|
|
51
|
+
using I32 = std::variant<uint32_t, int32_t, float>;
|
|
51
52
|
|
|
52
53
|
// Valid record type:
|
|
53
54
|
// https://protobuf.dev/programming-guides/encoding/#structure
|
|
54
|
-
using Value =
|
|
55
|
+
using Value = std::variant<Varint, I64, LengthDelimited, I32>;
|
|
55
56
|
|
|
56
57
|
// Field number for the protobuf value.
|
|
57
58
|
uint64_t field_number;
|
|
@@ -88,7 +89,7 @@ inline size_t BufferSizeForStructuredProtoField(StructuredProtoField field) {
|
|
|
88
89
|
uint64_t field_number;
|
|
89
90
|
};
|
|
90
91
|
|
|
91
|
-
return
|
|
92
|
+
return std::visit(BufferSizeVisitor{field.field_number}, field.value);
|
|
92
93
|
}
|
|
93
94
|
|
|
94
95
|
// Encodes `field` into `buf` using protobuf encoding.
|
|
@@ -71,7 +71,7 @@ INSTANTIATE_TEST_SUITE_P(
|
|
|
71
71
|
{
|
|
72
72
|
42,
|
|
73
73
|
StructuredProtoField::Value{
|
|
74
|
-
|
|
74
|
+
std::in_place_type<StructuredProtoField::Varint>,
|
|
75
75
|
int32_t{23},
|
|
76
76
|
},
|
|
77
77
|
},
|
|
@@ -82,7 +82,7 @@ INSTANTIATE_TEST_SUITE_P(
|
|
|
82
82
|
{
|
|
83
83
|
42,
|
|
84
84
|
StructuredProtoField::Value{
|
|
85
|
-
|
|
85
|
+
std::in_place_type<StructuredProtoField::I64>,
|
|
86
86
|
int64_t{23},
|
|
87
87
|
},
|
|
88
88
|
},
|
|
@@ -103,7 +103,7 @@ INSTANTIATE_TEST_SUITE_P(
|
|
|
103
103
|
{
|
|
104
104
|
42,
|
|
105
105
|
StructuredProtoField::Value{
|
|
106
|
-
|
|
106
|
+
std::in_place_type<StructuredProtoField::I32>,
|
|
107
107
|
int32_t{23},
|
|
108
108
|
},
|
|
109
109
|
},
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
#include <atomic>
|
|
21
21
|
#include <functional>
|
|
22
22
|
#include <memory>
|
|
23
|
+
#include <optional>
|
|
23
24
|
#include <string>
|
|
24
25
|
#include <utility>
|
|
25
26
|
#include <vector>
|
|
@@ -38,7 +39,6 @@
|
|
|
38
39
|
#include "absl/strings/string_view.h"
|
|
39
40
|
#include "absl/strings/strip.h"
|
|
40
41
|
#include "absl/synchronization/mutex.h"
|
|
41
|
-
#include "absl/types/optional.h"
|
|
42
42
|
|
|
43
43
|
namespace absl {
|
|
44
44
|
ABSL_NAMESPACE_BEGIN
|
|
@@ -189,7 +189,7 @@ int AppendVModuleLocked(absl::string_view module_pattern, int log_level)
|
|
|
189
189
|
// Allocates memory.
|
|
190
190
|
int PrependVModuleLocked(absl::string_view module_pattern, int log_level)
|
|
191
191
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mutex) {
|
|
192
|
-
|
|
192
|
+
std::optional<int> old_log_level;
|
|
193
193
|
for (const auto& info : get_vmodule_info()) {
|
|
194
194
|
if (FNMatch(info.module_pattern, module_pattern)) {
|
|
195
195
|
old_log_level = info.vlog_level;
|
|
@@ -45,7 +45,7 @@ class SyntheticBinary {
|
|
|
45
45
|
const size_t max_sites_per_tu,
|
|
46
46
|
const int num_shuffles) {
|
|
47
47
|
per_tu_data_.reserve(num_tus);
|
|
48
|
-
auto sites =
|
|
48
|
+
auto sites = std::make_unique<VLogSite*[]>(num_tus * max_sites_per_tu);
|
|
49
49
|
for (size_t i = 0; i < num_tus; i++) {
|
|
50
50
|
const std::string filename =
|
|
51
51
|
absl::StrCat("directory-", i / 100, "/subdirectory-", i % 100 / 10,
|
|
@@ -55,7 +55,7 @@ class SyntheticBinary {
|
|
|
55
55
|
absl::LogUniform<size_t>(bitgen_, 1, max_sites_per_tu),
|
|
56
56
|
absl::LogUniform<size_t>(bitgen_, 0,
|
|
57
57
|
max_extra_static_data_bytes_per_tu));
|
|
58
|
-
auto buf =
|
|
58
|
+
auto buf = std::make_unique<char[]>(layout.AllocSize());
|
|
59
59
|
layout.PoisonPadding(buf.get());
|
|
60
60
|
memcpy(layout.Pointer<0>(buf.get()), filename.c_str(),
|
|
61
61
|
filename.size() + 1);
|
|
@@ -78,7 +78,7 @@ class SyntheticBinary {
|
|
|
78
78
|
std::memory_order_seq_cst);
|
|
79
79
|
}
|
|
80
80
|
// Now do some shufflin'.
|
|
81
|
-
auto new_sites =
|
|
81
|
+
auto new_sites = std::make_unique<VLogSite*[]>(num_sites_);
|
|
82
82
|
for (int shuffle_num = 0; shuffle_num < num_shuffles; shuffle_num++) {
|
|
83
83
|
// Each shuffle cuts the ring into three pieces and rearranges them.
|
|
84
84
|
const size_t cut_a = absl::Uniform(bitgen_, size_t{0}, num_sites_);
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
#include <iomanip>
|
|
20
20
|
#include <ios>
|
|
21
21
|
#include <limits>
|
|
22
|
+
#include <optional>
|
|
22
23
|
#include <ostream>
|
|
23
24
|
#include <sstream>
|
|
24
25
|
#include <string>
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
#ifdef __ANDROID__
|
|
29
30
|
#include <android/api-level.h>
|
|
30
31
|
#endif
|
|
32
|
+
|
|
31
33
|
#include "gmock/gmock.h"
|
|
32
34
|
#include "gtest/gtest.h"
|
|
33
35
|
#include "absl/base/config.h"
|
|
@@ -39,7 +41,7 @@
|
|
|
39
41
|
#include "absl/strings/str_cat.h"
|
|
40
42
|
#include "absl/strings/str_format.h"
|
|
41
43
|
#include "absl/strings/string_view.h"
|
|
42
|
-
#include "absl/types/
|
|
44
|
+
#include "absl/types/source_location.h"
|
|
43
45
|
|
|
44
46
|
namespace {
|
|
45
47
|
using ::absl::log_internal::AsString;
|
|
@@ -290,6 +292,21 @@ TYPED_TEST(SignedIntLogFormatTest, BitfieldNegative) {
|
|
|
290
292
|
LOG(INFO) << value.bits;
|
|
291
293
|
}
|
|
292
294
|
|
|
295
|
+
TEST(SourceLocationTest, Format) {
|
|
296
|
+
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
|
|
297
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
298
|
+
|
|
299
|
+
absl::SourceLocation loc = absl::SourceLocation::current();
|
|
300
|
+
std::string expected = absl::StrCat(__FILE__, ":", __LINE__ - 1);
|
|
301
|
+
|
|
302
|
+
EXPECT_CALL(test_sink, Send(AllOf(TextMessage(Eq(expected)),
|
|
303
|
+
ENCODED_MESSAGE(HasValues(ElementsAre(
|
|
304
|
+
ValueWithStr(Eq(expected))))))));
|
|
305
|
+
|
|
306
|
+
test_sink.StartCapturingLogs();
|
|
307
|
+
LOG(INFO) << loc;
|
|
308
|
+
}
|
|
309
|
+
|
|
293
310
|
// Ignore these test cases on GCC due to "is too small to hold all values ..."
|
|
294
311
|
// warning.
|
|
295
312
|
#if !defined(__GNUC__) || defined(__clang__)
|
|
@@ -2096,7 +2113,7 @@ size_t MaxLogFieldLengthNoPrefix() {
|
|
|
2096
2113
|
}
|
|
2097
2114
|
|
|
2098
2115
|
private:
|
|
2099
|
-
|
|
2116
|
+
std::optional<size_t> size_;
|
|
2100
2117
|
} extractor_sink;
|
|
2101
2118
|
LOG(INFO).NoPrefix().ToSinkOnly(&extractor_sink)
|
|
2102
2119
|
<< std::string(2 * absl::log_internal::kLogMessageBufferSize, 'x');
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
#include "absl/strings/match.h"
|
|
29
29
|
#include "absl/strings/string_view.h"
|
|
30
30
|
#include "absl/time/time.h"
|
|
31
|
+
#include "absl/types/source_location.h"
|
|
31
32
|
|
|
32
33
|
namespace {
|
|
33
34
|
#if GTEST_HAS_DEATH_TEST
|
|
@@ -88,6 +89,23 @@ TEST(TailCallsModifiesTest, AtLocationFileLineLifetime) {
|
|
|
88
89
|
<< "hello world";
|
|
89
90
|
}
|
|
90
91
|
|
|
92
|
+
TEST(TailCallsModifiesTest, AtLocationSourceLocation) {
|
|
93
|
+
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
|
|
94
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
95
|
+
|
|
96
|
+
const int log_line = __LINE__ + 1;
|
|
97
|
+
constexpr absl::SourceLocation loc = absl::SourceLocation::current();
|
|
98
|
+
auto do_log = [loc] { LOG(INFO).AtLocation(loc) << "hello world"; };
|
|
99
|
+
|
|
100
|
+
EXPECT_CALL(test_sink,
|
|
101
|
+
Send(AllOf(SourceFilename(Eq(__FILE__)),
|
|
102
|
+
SourceBasename(Eq("log_modifier_methods_test.cc")),
|
|
103
|
+
SourceLine(Eq(log_line)))));
|
|
104
|
+
|
|
105
|
+
test_sink.StartCapturingLogs();
|
|
106
|
+
do_log();
|
|
107
|
+
}
|
|
108
|
+
|
|
91
109
|
TEST(TailCallsModifiesTest, NoPrefix) {
|
|
92
110
|
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
|
|
93
111
|
EXPECT_CALL(test_sink, Send).Times(0);
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
#include <ios>
|
|
26
26
|
#include <memory>
|
|
27
|
+
#include <optional>
|
|
27
28
|
#include <ostream>
|
|
28
29
|
#include <string>
|
|
29
30
|
#include <utility>
|
|
@@ -34,6 +35,7 @@
|
|
|
34
35
|
#include "absl/strings/internal/ostringstream.h"
|
|
35
36
|
#include "absl/strings/string_view.h"
|
|
36
37
|
#include "absl/types/optional.h"
|
|
38
|
+
#include "absl/types/source_location.h"
|
|
37
39
|
#include "absl/utility/utility.h"
|
|
38
40
|
|
|
39
41
|
namespace absl {
|
|
@@ -82,10 +84,14 @@ class LogStreamer final {
|
|
|
82
84
|
: severity_(severity),
|
|
83
85
|
line_(line),
|
|
84
86
|
file_(file),
|
|
85
|
-
stream_(
|
|
87
|
+
stream_(std::in_place, &buf_) {
|
|
86
88
|
// To match `LOG`'s defaults:
|
|
87
89
|
stream_->setf(std::ios_base::showbase | std::ios_base::boolalpha);
|
|
88
90
|
}
|
|
91
|
+
explicit LogStreamer(
|
|
92
|
+
absl::LogSeverity severity,
|
|
93
|
+
absl::SourceLocation loc = absl::SourceLocation::current())
|
|
94
|
+
: LogStreamer(severity, loc.file_name(), static_cast<int>(loc.line())) {}
|
|
89
95
|
|
|
90
96
|
// A moved-from `absl::LogStreamer` does not `LOG` when destroyed,
|
|
91
97
|
// and a program that streams into one has undefined behavior.
|
|
@@ -131,7 +137,7 @@ class LogStreamer final {
|
|
|
131
137
|
std::string buf_;
|
|
132
138
|
// A disengaged `stream_` indicates a moved-from `LogStreamer` that should not
|
|
133
139
|
// `LOG` upon destruction.
|
|
134
|
-
|
|
140
|
+
std::optional<absl::strings_internal::OStringStream> stream_;
|
|
135
141
|
};
|
|
136
142
|
|
|
137
143
|
// LogInfoStreamer()
|
|
@@ -175,6 +181,27 @@ inline LogStreamer LogDebugFatalStreamer(absl::string_view file, int line) {
|
|
|
175
181
|
return absl::LogStreamer(absl::kLogDebugFatal, file, line);
|
|
176
182
|
}
|
|
177
183
|
|
|
184
|
+
inline LogStreamer LogInfoStreamer(
|
|
185
|
+
absl::SourceLocation loc = absl::SourceLocation::current()) {
|
|
186
|
+
return absl::LogStreamer(absl::LogSeverity::kInfo, loc);
|
|
187
|
+
}
|
|
188
|
+
inline LogStreamer LogWarningStreamer(
|
|
189
|
+
absl::SourceLocation loc = absl::SourceLocation::current()) {
|
|
190
|
+
return absl::LogStreamer(absl::LogSeverity::kWarning, loc);
|
|
191
|
+
}
|
|
192
|
+
inline LogStreamer LogErrorStreamer(
|
|
193
|
+
absl::SourceLocation loc = absl::SourceLocation::current()) {
|
|
194
|
+
return absl::LogStreamer(absl::LogSeverity::kError, loc);
|
|
195
|
+
}
|
|
196
|
+
inline LogStreamer LogFatalStreamer(
|
|
197
|
+
absl::SourceLocation loc = absl::SourceLocation::current()) {
|
|
198
|
+
return absl::LogStreamer(absl::LogSeverity::kFatal, loc);
|
|
199
|
+
}
|
|
200
|
+
inline LogStreamer LogDebugFatalStreamer(
|
|
201
|
+
absl::SourceLocation loc = absl::SourceLocation::current()) {
|
|
202
|
+
return absl::LogStreamer(absl::kLogDebugFatal, loc);
|
|
203
|
+
}
|
|
204
|
+
|
|
178
205
|
ABSL_NAMESPACE_END
|
|
179
206
|
} // namespace absl
|
|
180
207
|
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
#include "absl/log/log.h"
|
|
31
31
|
#include "absl/log/scoped_mock_log.h"
|
|
32
32
|
#include "absl/strings/string_view.h"
|
|
33
|
+
#include "absl/types/source_location.h"
|
|
33
34
|
|
|
34
35
|
namespace {
|
|
35
36
|
using ::absl::log_internal::DeathTestExpectedLogging;
|
|
@@ -448,4 +449,21 @@ TEST(LogStreamerTest, CorrectDefaultFlags) {
|
|
|
448
449
|
LOG(INFO) << false << std::hex << 0xdeadbeef;
|
|
449
450
|
}
|
|
450
451
|
|
|
452
|
+
TEST(LogStreamerTest, AtSourceLocation) {
|
|
453
|
+
const int log_line = __LINE__ + 2;
|
|
454
|
+
auto do_log = [] {
|
|
455
|
+
WriteToStream("foo", &absl::LogInfoStreamer().stream()); //
|
|
456
|
+
};
|
|
457
|
+
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
|
|
458
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
459
|
+
|
|
460
|
+
EXPECT_CALL(test_sink,
|
|
461
|
+
Send(AllOf(SourceFilename(
|
|
462
|
+
Eq(absl::SourceLocation::current().file_name())),
|
|
463
|
+
SourceLine(Eq(log_line)))));
|
|
464
|
+
|
|
465
|
+
test_sink.StartCapturingLogs();
|
|
466
|
+
do_log();
|
|
467
|
+
}
|
|
468
|
+
|
|
451
469
|
} // namespace
|
|
@@ -261,7 +261,7 @@ TEST(ScopedMockLogTest, NoSequenceWithMultipleThreads) {
|
|
|
261
261
|
|
|
262
262
|
TEST(ScopedMockLogTsanTest,
|
|
263
263
|
ScopedMockLogCanBeDeletedWhenAnotherThreadIsLogging) {
|
|
264
|
-
auto log =
|
|
264
|
+
auto log = std::make_unique<absl::ScopedMockLog>();
|
|
265
265
|
EXPECT_CALL(*log, Log(absl::LogSeverity::kInfo, __FILE__, "Thread log"))
|
|
266
266
|
.Times(AnyNumber());
|
|
267
267
|
|
|
@@ -60,8 +60,6 @@
|
|
|
60
60
|
|
|
61
61
|
#include "absl/log/absl_vlog_is_on.h" // IWYU pragma: export
|
|
62
62
|
|
|
63
|
-
// IWYU pragma: private, include "absl/log/log.h"
|
|
64
|
-
|
|
65
63
|
// Each VLOG_IS_ON call site gets its own VLogSite that registers with the
|
|
66
64
|
// global linked list of sites to asynchronously update its verbosity level on
|
|
67
65
|
// changes to --v or --vmodule. The verbosity can also be set by manually
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
#include "absl/log/vlog_is_on.h"
|
|
16
16
|
|
|
17
|
+
#include <optional>
|
|
18
|
+
|
|
17
19
|
#include "gmock/gmock.h"
|
|
18
20
|
#include "gtest/gtest.h"
|
|
19
21
|
#include "absl/base/log_severity.h"
|
|
@@ -22,25 +24,24 @@
|
|
|
22
24
|
#include "absl/log/globals.h"
|
|
23
25
|
#include "absl/log/log.h"
|
|
24
26
|
#include "absl/log/scoped_mock_log.h"
|
|
25
|
-
#include "absl/types/optional.h"
|
|
26
27
|
|
|
27
28
|
namespace {
|
|
28
29
|
|
|
29
30
|
using ::testing::_;
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
std::optional<int> MaxLogVerbosity() {
|
|
32
33
|
#ifdef ABSL_MAX_VLOG_VERBOSITY
|
|
33
34
|
return ABSL_MAX_VLOG_VERBOSITY;
|
|
34
35
|
#else
|
|
35
|
-
return
|
|
36
|
+
return std::nullopt;
|
|
36
37
|
#endif
|
|
37
38
|
}
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
std::optional<int> MinLogLevel() {
|
|
40
41
|
#ifdef ABSL_MIN_LOG_LEVEL
|
|
41
42
|
return static_cast<int>(ABSL_MIN_LOG_LEVEL);
|
|
42
43
|
#else
|
|
43
|
-
return
|
|
44
|
+
return std::nullopt;
|
|
44
45
|
#endif
|
|
45
46
|
}
|
|
46
47
|
|
|
@@ -58,7 +58,7 @@ ABSL_NAMESPACE_BEGIN
|
|
|
58
58
|
// std::unique_ptr<X> x(NewX(1, 2));
|
|
59
59
|
//
|
|
60
60
|
// While `absl::WrapUnique` is useful for capturing the output of a raw
|
|
61
|
-
// pointer factory, prefer '
|
|
61
|
+
// pointer factory, prefer 'std::make_unique<T>(args...)' over
|
|
62
62
|
// 'absl::WrapUnique(new T(args...))'.
|
|
63
63
|
//
|
|
64
64
|
// auto x = WrapUnique(new X(1, 2)); // works, but nonideal.
|
|
@@ -96,6 +96,53 @@ std::unique_ptr<T> WrapUnique(T* ptr) {
|
|
|
96
96
|
// should use `std::make_unique`.
|
|
97
97
|
using std::make_unique;
|
|
98
98
|
|
|
99
|
+
namespace memory_internal {
|
|
100
|
+
|
|
101
|
+
// Traits to select proper overload and return type for
|
|
102
|
+
// `absl::make_unique_for_overwrite<>`.
|
|
103
|
+
template <typename T>
|
|
104
|
+
struct MakeUniqueResult {
|
|
105
|
+
using scalar = std::unique_ptr<T>;
|
|
106
|
+
};
|
|
107
|
+
template <typename T>
|
|
108
|
+
struct MakeUniqueResult<T[]> {
|
|
109
|
+
using array = std::unique_ptr<T[]>;
|
|
110
|
+
};
|
|
111
|
+
template <typename T, size_t N>
|
|
112
|
+
struct MakeUniqueResult<T[N]> {
|
|
113
|
+
using invalid = void;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
} // namespace memory_internal
|
|
117
|
+
|
|
118
|
+
// These are make_unique_for_overwrite variants modeled after
|
|
119
|
+
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1973r1.pdf
|
|
120
|
+
// Unlike std::make_unique, values are default initialized rather than value
|
|
121
|
+
// initialized.
|
|
122
|
+
//
|
|
123
|
+
// `absl::make_unique_for_overwrite` overload for non-array types.
|
|
124
|
+
template <typename T>
|
|
125
|
+
typename memory_internal::MakeUniqueResult<T>::scalar
|
|
126
|
+
make_unique_for_overwrite() {
|
|
127
|
+
return std::unique_ptr<T>(new T);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// `absl::make_unique_for_overwrite` overload for an array T[] of unknown
|
|
131
|
+
// bounds. The array allocation needs to use the `new T[size]` form and cannot
|
|
132
|
+
// take element constructor arguments. The `std::unique_ptr` will manage
|
|
133
|
+
// destructing these array elements.
|
|
134
|
+
template <typename T>
|
|
135
|
+
typename memory_internal::MakeUniqueResult<T>::array make_unique_for_overwrite(
|
|
136
|
+
size_t n) {
|
|
137
|
+
return std::unique_ptr<T>(new typename std::remove_extent_t<T>[n]);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// `absl::make_unique_for_overwrite` overload for an array T[N] of known bounds.
|
|
141
|
+
// This construction will be rejected.
|
|
142
|
+
template <typename T, typename... Args>
|
|
143
|
+
typename memory_internal::MakeUniqueResult<T>::invalid
|
|
144
|
+
make_unique_for_overwrite(Args&&... /* args */) = delete;
|
|
145
|
+
|
|
99
146
|
// -----------------------------------------------------------------------------
|
|
100
147
|
// Function Template: RawPtr()
|
|
101
148
|
// -----------------------------------------------------------------------------
|
|
@@ -120,7 +167,7 @@ inline std::nullptr_t RawPtr(std::nullptr_t) { return nullptr; }
|
|
|
120
167
|
//
|
|
121
168
|
// Example:
|
|
122
169
|
//
|
|
123
|
-
// auto up =
|
|
170
|
+
// auto up = std::make_unique<int>(10);
|
|
124
171
|
// auto sp = absl::ShareUniquePtr(std::move(up)); // shared_ptr<int>
|
|
125
172
|
// CHECK_EQ(*sp, 10);
|
|
126
173
|
// CHECK(up == nullptr);
|
|
@@ -166,7 +213,8 @@ std::weak_ptr<T> WeakenPtr(const std::shared_ptr<T>& ptr) {
|
|
|
166
213
|
// `std::pointer_traits` for platforms that had not yet provided it. Those
|
|
167
214
|
// platforms are no longer supported. New code should simply use
|
|
168
215
|
// `std::pointer_traits`.
|
|
169
|
-
|
|
216
|
+
template <typename Ptr>
|
|
217
|
+
using pointer_traits ABSL_DEPRECATE_AND_INLINE() = std::pointer_traits<Ptr>;
|
|
170
218
|
|
|
171
219
|
// -----------------------------------------------------------------------------
|
|
172
220
|
// Class Template: allocator_traits
|
|
@@ -176,7 +224,9 @@ using std::pointer_traits;
|
|
|
176
224
|
// `std::allocator_traits` for platforms that had not yet provided it. Those
|
|
177
225
|
// platforms are no longer supported. New code should simply use
|
|
178
226
|
// `std::allocator_traits`.
|
|
179
|
-
|
|
227
|
+
template <typename Alloc>
|
|
228
|
+
using allocator_traits ABSL_DEPRECATE_AND_INLINE() =
|
|
229
|
+
std::allocator_traits<Alloc>;
|
|
180
230
|
|
|
181
231
|
namespace memory_internal {
|
|
182
232
|
|
|
@@ -188,7 +238,7 @@ struct ExtractOr {
|
|
|
188
238
|
};
|
|
189
239
|
|
|
190
240
|
template <template <typename> class Extract, typename Obj, typename Default>
|
|
191
|
-
struct ExtractOr<Extract, Obj, Default, void_t<Extract<Obj>>> {
|
|
241
|
+
struct ExtractOr<Extract, Obj, Default, std::void_t<Extract<Obj>>> {
|
|
192
242
|
using type = Extract<Obj>;
|
|
193
243
|
};
|
|
194
244
|
|
|
@@ -64,6 +64,23 @@ TEST(WrapUniqueTest, WrapUnique) {
|
|
|
64
64
|
EXPECT_EQ(0, DestructorVerifier::instance_count());
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
TEST(MakeUniqueForOverwriteTest, Basic) {
|
|
68
|
+
std::unique_ptr<int> p = absl::make_unique_for_overwrite<int>();
|
|
69
|
+
p = absl::make_unique_for_overwrite<int>();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// The initialization tests needs to suppress dead-store elimination, otherwise
|
|
73
|
+
// memset is optimized away, and lifetime is assumed begin after new, triggering
|
|
74
|
+
// uninitalized variable warnings. Various tricks to prevent memset from being
|
|
75
|
+
// optimized away still result in uninitialized variable warnings. Once we move
|
|
76
|
+
// to a C++20 floor we can delegate to std::make_unique_for_overwrite and avoid
|
|
77
|
+
// testing absl::make_unique_for_overwrite.
|
|
78
|
+
// https://github.com/gcc-mirror/gcc/blob/be1da01067c898a3e3979bfb1edd05f115ab2e3e/libstdc%2B%2B-v3/testsuite/20_util/unique_ptr/creation/for_overwrite.cc#L1
|
|
79
|
+
#if defined(__GNUC__) && !defined(__clang__)
|
|
80
|
+
#pragma GCC push_options
|
|
81
|
+
#pragma GCC optimize("O0")
|
|
82
|
+
#endif
|
|
83
|
+
|
|
67
84
|
// InitializationVerifier fills in a pattern when allocated so we can
|
|
68
85
|
// distinguish between its default and value initialized states (without
|
|
69
86
|
// accessing truly uninitialized memory).
|
|
@@ -87,6 +104,32 @@ struct InitializationVerifier {
|
|
|
87
104
|
int b;
|
|
88
105
|
};
|
|
89
106
|
|
|
107
|
+
TEST(Initialization, MakeUniqueForOverwrite) {
|
|
108
|
+
auto p = absl::make_unique_for_overwrite<InitializationVerifier>();
|
|
109
|
+
|
|
110
|
+
int pattern;
|
|
111
|
+
memset(&pattern, InitializationVerifier::kDefaultScalar, sizeof(pattern));
|
|
112
|
+
|
|
113
|
+
EXPECT_EQ(pattern, p->a);
|
|
114
|
+
EXPECT_EQ(pattern, p->b);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
TEST(Initialization, MakeUniqueForOverwriteArray) {
|
|
118
|
+
auto p = absl::make_unique_for_overwrite<InitializationVerifier[]>(2);
|
|
119
|
+
|
|
120
|
+
int pattern;
|
|
121
|
+
memset(&pattern, InitializationVerifier::kDefaultArray, sizeof(pattern));
|
|
122
|
+
|
|
123
|
+
EXPECT_EQ(pattern, p[0].a);
|
|
124
|
+
EXPECT_EQ(pattern, p[0].b);
|
|
125
|
+
EXPECT_EQ(pattern, p[1].a);
|
|
126
|
+
EXPECT_EQ(pattern, p[1].b);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
#if defined(__GNUC__) && !defined(__clang__)
|
|
130
|
+
#pragma GCC pop_options
|
|
131
|
+
#endif
|
|
132
|
+
|
|
90
133
|
struct ArrayWatch {
|
|
91
134
|
void* operator new[](size_t n) {
|
|
92
135
|
allocs().push_back(n);
|
|
@@ -99,6 +142,17 @@ struct ArrayWatch {
|
|
|
99
142
|
}
|
|
100
143
|
};
|
|
101
144
|
|
|
145
|
+
TEST(MakeUniqueForOverwriteTest, Array) {
|
|
146
|
+
// Ensure state is clean before we start so that these tests
|
|
147
|
+
// are order-agnostic.
|
|
148
|
+
ArrayWatch::allocs().clear();
|
|
149
|
+
|
|
150
|
+
auto p = absl::make_unique_for_overwrite<ArrayWatch[]>(5);
|
|
151
|
+
static_assert(std::is_same<decltype(p), std::unique_ptr<ArrayWatch[]>>::value,
|
|
152
|
+
"unexpected return type");
|
|
153
|
+
EXPECT_THAT(ArrayWatch::allocs(), ElementsAre(5 * sizeof(ArrayWatch)));
|
|
154
|
+
}
|
|
155
|
+
|
|
102
156
|
TEST(RawPtrTest, RawPointer) {
|
|
103
157
|
int i = 5;
|
|
104
158
|
EXPECT_EQ(&i, absl::RawPtr(&i));
|
|
@@ -157,7 +211,7 @@ TEST(RawPtrTest, Zero) {
|
|
|
157
211
|
}
|
|
158
212
|
|
|
159
213
|
TEST(ShareUniquePtrTest, Share) {
|
|
160
|
-
auto up =
|
|
214
|
+
auto up = std::make_unique<int>();
|
|
161
215
|
int* rp = up.get();
|
|
162
216
|
auto sp = absl::ShareUniquePtr(std::move(up));
|
|
163
217
|
EXPECT_EQ(sp.get(), rp);
|
|
@@ -42,6 +42,7 @@ cc_library(
|
|
|
42
42
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
43
43
|
visibility = [
|
|
44
44
|
"//absl:__subpackages__",
|
|
45
|
+
"//absl:friends",
|
|
45
46
|
],
|
|
46
47
|
deps = [
|
|
47
48
|
"//absl/base:config",
|
|
@@ -67,6 +68,7 @@ cc_library(
|
|
|
67
68
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
68
69
|
visibility = [
|
|
69
70
|
"//absl:__subpackages__",
|
|
71
|
+
"//absl:friends",
|
|
70
72
|
],
|
|
71
73
|
deps = [
|
|
72
74
|
"//absl/base:config",
|
|
@@ -52,7 +52,7 @@ namespace meta_internal {
|
|
|
52
52
|
// code like the following is _not_ valid in C++17:
|
|
53
53
|
//
|
|
54
54
|
// template <typename T,
|
|
55
|
-
// typename = std::enable_if_t<
|
|
55
|
+
// typename = std::enable_if_t<Requires<T>(
|
|
56
56
|
// [] (auto&& v) -> decltype(<expr>) {})>>
|
|
57
57
|
//
|
|
58
58
|
template <typename... T, typename F>
|