re2 1.22.2 → 1.23.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/README.md +60 -4
- package/binding.gyp +5 -1
- package/lib/addon.cc +4 -0
- package/lib/new.cc +1 -246
- package/lib/pattern.cc +252 -0
- package/lib/pattern.h +10 -0
- package/lib/set.cc +777 -0
- package/lib/wrapped_re2_set.h +42 -0
- package/package.json +21 -9
- package/re2.d.ts +46 -9
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
- package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
- package/vendor/abseil-cpp/CMake/README.md +2 -2
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/MODULE.bazel +6 -9
- package/vendor/abseil-cpp/README.md +6 -8
- package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
- package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
- package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
- package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
- package/vendor/abseil-cpp/absl/base/config.h +22 -129
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
- package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
- package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
- package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
- package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
- package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
- package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
- package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
- package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
- package/vendor/abseil-cpp/absl/base/options.h +3 -80
- package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
- package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
- package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
- package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
- package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
- package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
- package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
- package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
- package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
- package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
- package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
- package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
- package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
- package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
- package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
- package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
- package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
- package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
- package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
- package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
- package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
- package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
- package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
- package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
- package/vendor/abseil-cpp/absl/log/check.h +2 -1
- package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
- package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
- package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
- package/vendor/abseil-cpp/absl/log/globals.h +4 -5
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
- package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
- package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
- package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
- package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
- package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
- package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
- package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
- package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
- package/vendor/abseil-cpp/absl/log/log.h +48 -35
- package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
- package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
- package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
- package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
- package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
- package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
- package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
- package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
- package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
- package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
- package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
- package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
- package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
- package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
- package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
- package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
- package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
- package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
- package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
- package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
- package/vendor/abseil-cpp/absl/random/random.h +88 -53
- package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
- package/vendor/abseil-cpp/absl/status/status.cc +4 -8
- package/vendor/abseil-cpp/absl/status/status.h +8 -8
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
- package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
- package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
- package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
- package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
- package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
- package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
- package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
- package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
- package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
- package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
- package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
- package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
- package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
- package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
- package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
- package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
- package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
- package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
- package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
- package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
- package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
- package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
- package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
- package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
- package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
- package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
- package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
- package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
- package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
- package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
- package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
- package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
- package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
- package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
- package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
- package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
- package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
- package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
- package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
- package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
- package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
- package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
- package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
- package/vendor/abseil-cpp/absl/time/time.h +24 -18
- package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
- package/vendor/abseil-cpp/absl/types/any.h +9 -484
- package/vendor/abseil-cpp/absl/types/optional.h +7 -747
- package/vendor/abseil-cpp/absl/types/span.h +46 -19
- package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
- package/vendor/abseil-cpp/absl/types/variant.h +5 -784
- package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
- package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
- package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
- package/vendor/re2/.bazelrc +4 -4
- package/vendor/re2/.bcr/metadata.template.json +16 -0
- package/vendor/re2/.bcr/presubmit.yml +57 -0
- package/vendor/re2/.bcr/source.template.json +5 -0
- package/vendor/re2/.github/bazel.sh +1 -7
- package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
- package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
- package/vendor/re2/.github/workflows/ci.yml +5 -6
- package/vendor/re2/.github/workflows/pages.yml +3 -3
- package/vendor/re2/.github/workflows/python.yml +29 -24
- package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
- package/vendor/re2/.github/workflows/release.yml +15 -4
- package/vendor/re2/BUILD.bazel +25 -0
- package/vendor/re2/CMakeLists.txt +100 -85
- package/vendor/re2/CONTRIBUTING.md +0 -1
- package/vendor/re2/MODULE.bazel +10 -10
- package/vendor/re2/Makefile +1 -1
- package/vendor/re2/README.md +259 -0
- package/vendor/re2/python/BUILD.bazel +8 -0
- package/vendor/re2/python/re2.py +1 -1
- package/vendor/re2/python/re2_test.py +6 -0
- package/vendor/re2/python/setup.py +3 -3
- package/vendor/re2/re2/bitmap256.cc +3 -4
- package/vendor/re2/re2/bitstate.cc +15 -10
- package/vendor/re2/re2/dfa.cc +1 -2
- package/vendor/re2/re2/parse.cc +3 -4
- package/vendor/re2/re2/prog.cc +1 -2
- package/vendor/re2/re2/prog.h +1 -0
- package/vendor/re2/re2/re2.cc +5 -0
- package/vendor/re2/re2/re2.h +9 -9
- package/vendor/re2/re2/set.cc +6 -0
- package/vendor/re2/re2/set.h +5 -0
- package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
- package/vendor/re2/re2/testing/re2_test.cc +8 -0
- package/vendor/re2/re2/testing/set_test.cc +5 -0
- package/vendor/re2/re2/walker-inl.h +1 -1
- package/vendor/abseil-cpp/WORKSPACE +0 -76
- package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
- package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
- package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
- package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
- package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
- package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
- package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
- package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
- package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
- package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
- package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
- package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
- package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
- package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
- package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
- package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
- package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
- package/vendor/re2/.github/workflows/pr.yml +0 -34
- package/vendor/re2/README +0 -47
|
@@ -34,7 +34,7 @@ namespace absl {
|
|
|
34
34
|
ABSL_NAMESPACE_BEGIN
|
|
35
35
|
namespace log_internal {
|
|
36
36
|
|
|
37
|
-
class
|
|
37
|
+
class [[nodiscard]] AsLiteralImpl final {
|
|
38
38
|
public:
|
|
39
39
|
explicit AsLiteralImpl(absl::string_view str ABSL_ATTRIBUTE_LIFETIME_BOUND)
|
|
40
40
|
: str_(str) {}
|
|
@@ -66,7 +66,7 @@ enum class StructuredStringType {
|
|
|
66
66
|
// Structured log data for a string and associated structured proto field,
|
|
67
67
|
// both of which must outlive this object.
|
|
68
68
|
template <StructuredStringType str_type>
|
|
69
|
-
class
|
|
69
|
+
class [[nodiscard]] AsStructuredStringTypeImpl final {
|
|
70
70
|
public:
|
|
71
71
|
constexpr AsStructuredStringTypeImpl(
|
|
72
72
|
absl::string_view str ABSL_ATTRIBUTE_LIFETIME_BOUND,
|
|
@@ -105,7 +105,7 @@ using AsStructuredNotLiteralImpl =
|
|
|
105
105
|
// Structured log data for a stringifyable type T and associated structured
|
|
106
106
|
// proto field, both of which must outlive this object.
|
|
107
107
|
template <typename T>
|
|
108
|
-
class
|
|
108
|
+
class [[nodiscard]] AsStructuredValueImpl final {
|
|
109
109
|
public:
|
|
110
110
|
using ValueFormatter = absl::AnyInvocable<std::string(T) const>;
|
|
111
111
|
|
|
@@ -139,8 +139,6 @@ class ABSL_MUST_USE_RESULT AsStructuredValueImpl final {
|
|
|
139
139
|
}
|
|
140
140
|
};
|
|
141
141
|
|
|
142
|
-
#ifdef ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION
|
|
143
|
-
|
|
144
142
|
// Template deduction guide so `AsStructuredValueImpl(42, data)` works
|
|
145
143
|
// without specifying the template type.
|
|
146
144
|
template <typename T>
|
|
@@ -155,8 +153,6 @@ AsStructuredValueImpl(
|
|
|
155
153
|
typename AsStructuredValueImpl<T>::ValueFormatter value_formatter)
|
|
156
154
|
-> AsStructuredValueImpl<T>;
|
|
157
155
|
|
|
158
|
-
#endif // ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION
|
|
159
|
-
|
|
160
156
|
} // namespace log_internal
|
|
161
157
|
ABSL_NAMESPACE_END
|
|
162
158
|
} // namespace absl
|
|
@@ -90,16 +90,16 @@ struct VModuleInfo final {
|
|
|
90
90
|
// To avoid problems with the heap checker which calls into `VLOG`, `mutex` must
|
|
91
91
|
// be a `SpinLock` that prevents fiber scheduling instead of a `Mutex`.
|
|
92
92
|
ABSL_CONST_INIT absl::base_internal::SpinLock mutex(
|
|
93
|
-
absl::
|
|
93
|
+
absl::base_internal::SCHEDULE_KERNEL_ONLY);
|
|
94
94
|
|
|
95
95
|
// `GetUpdateSitesMutex()` serializes updates to all of the sites (i.e. those in
|
|
96
96
|
// `site_list_head`) themselves.
|
|
97
|
-
absl::Mutex
|
|
97
|
+
absl::Mutex& GetUpdateSitesMutex() {
|
|
98
98
|
// Chromium requires no global destructors, so we can't use the
|
|
99
99
|
// absl::kConstInit idiom since absl::Mutex as a non-trivial destructor.
|
|
100
100
|
static absl::NoDestructor<absl::Mutex> update_sites_mutex ABSL_ACQUIRED_AFTER(
|
|
101
101
|
mutex);
|
|
102
|
-
return update_sites_mutex
|
|
102
|
+
return *update_sites_mutex;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
ABSL_CONST_INIT int global_v ABSL_GUARDED_BY(mutex) = 0;
|
|
@@ -222,7 +222,7 @@ int PrependVModuleLocked(absl::string_view module_pattern, int log_level)
|
|
|
222
222
|
} // namespace
|
|
223
223
|
|
|
224
224
|
int VLogLevel(absl::string_view file) ABSL_LOCKS_EXCLUDED(mutex) {
|
|
225
|
-
absl::base_internal::SpinLockHolder l(
|
|
225
|
+
absl::base_internal::SpinLockHolder l(mutex);
|
|
226
226
|
return VLogLevel(file, vmodule_info, global_v);
|
|
227
227
|
}
|
|
228
228
|
|
|
@@ -267,7 +267,7 @@ void UpdateVLogSites() ABSL_UNLOCK_FUNCTION(mutex)
|
|
|
267
267
|
// have to wait on all updates in order to acquire `mutex` and initialize
|
|
268
268
|
// themselves.
|
|
269
269
|
absl::MutexLock ul(GetUpdateSitesMutex());
|
|
270
|
-
mutex.
|
|
270
|
+
mutex.unlock();
|
|
271
271
|
VLogSite* n = site_list_head.load(std::memory_order_seq_cst);
|
|
272
272
|
// Because sites are added to the list in the order they are executed, there
|
|
273
273
|
// tend to be clusters of entries with the same file.
|
|
@@ -299,7 +299,7 @@ void UpdateVModule(absl::string_view vmodule)
|
|
|
299
299
|
if (!absl::SimpleAtoi(glob_level.substr(eq + 1), &level)) continue;
|
|
300
300
|
glob_levels.emplace_back(glob, level);
|
|
301
301
|
}
|
|
302
|
-
mutex.
|
|
302
|
+
mutex.lock(); // unlocked by UpdateVLogSites().
|
|
303
303
|
get_vmodule_info().clear();
|
|
304
304
|
for (const auto& it : glob_levels) {
|
|
305
305
|
const absl::string_view glob = it.first;
|
|
@@ -311,10 +311,10 @@ void UpdateVModule(absl::string_view vmodule)
|
|
|
311
311
|
|
|
312
312
|
int UpdateGlobalVLogLevel(int v)
|
|
313
313
|
ABSL_LOCKS_EXCLUDED(mutex, GetUpdateSitesMutex()) {
|
|
314
|
-
mutex.
|
|
314
|
+
mutex.lock(); // unlocked by UpdateVLogSites().
|
|
315
315
|
const int old_global_v = global_v;
|
|
316
316
|
if (v == global_v) {
|
|
317
|
-
mutex.
|
|
317
|
+
mutex.unlock();
|
|
318
318
|
return old_global_v;
|
|
319
319
|
}
|
|
320
320
|
global_v = v;
|
|
@@ -324,7 +324,7 @@ int UpdateGlobalVLogLevel(int v)
|
|
|
324
324
|
|
|
325
325
|
int PrependVModule(absl::string_view module_pattern, int log_level)
|
|
326
326
|
ABSL_LOCKS_EXCLUDED(mutex, GetUpdateSitesMutex()) {
|
|
327
|
-
mutex.
|
|
327
|
+
mutex.lock(); // unlocked by UpdateVLogSites().
|
|
328
328
|
int old_v = PrependVModuleLocked(module_pattern, log_level);
|
|
329
329
|
UpdateVLogSites();
|
|
330
330
|
return old_v;
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
|
|
35
35
|
#include "absl/base/attributes.h"
|
|
36
36
|
#include "absl/base/config.h"
|
|
37
|
+
#include "absl/base/nullability.h"
|
|
37
38
|
#include "absl/base/optimization.h"
|
|
38
39
|
#include "absl/base/thread_annotations.h"
|
|
39
40
|
#include "absl/strings/string_view.h"
|
|
@@ -45,7 +46,7 @@ namespace log_internal {
|
|
|
45
46
|
class SyntheticBinary;
|
|
46
47
|
class VLogSite;
|
|
47
48
|
|
|
48
|
-
int RegisterAndInitialize(VLogSite* v);
|
|
49
|
+
int RegisterAndInitialize(VLogSite* absl_nonnull v);
|
|
49
50
|
void UpdateVLogSites();
|
|
50
51
|
constexpr int kUseFlag = (std::numeric_limits<int16_t>::min)();
|
|
51
52
|
|
|
@@ -60,7 +61,7 @@ constexpr int kUseFlag = (std::numeric_limits<int16_t>::min)();
|
|
|
60
61
|
class VLogSite final {
|
|
61
62
|
public:
|
|
62
63
|
// `f` must not be destroyed until the program exits.
|
|
63
|
-
explicit constexpr VLogSite(const char* f)
|
|
64
|
+
explicit constexpr VLogSite(const char* absl_nonnull f)
|
|
64
65
|
: file_(f), v_(kUninitialized), next_(nullptr) {}
|
|
65
66
|
VLogSite(const VLogSite&) = delete;
|
|
66
67
|
VLogSite& operator=(const VLogSite&) = delete;
|
|
@@ -93,7 +94,7 @@ class VLogSite final {
|
|
|
93
94
|
}
|
|
94
95
|
|
|
95
96
|
private:
|
|
96
|
-
friend int log_internal::RegisterAndInitialize(VLogSite* v);
|
|
97
|
+
friend int log_internal::RegisterAndInitialize(VLogSite* absl_nonnull v);
|
|
97
98
|
friend void log_internal::UpdateVLogSites();
|
|
98
99
|
friend class log_internal::SyntheticBinary;
|
|
99
100
|
static constexpr int kUninitialized = (std::numeric_limits<int>::max)();
|
|
@@ -116,7 +117,7 @@ class VLogSite final {
|
|
|
116
117
|
ABSL_ATTRIBUTE_NOINLINE bool SlowIsEnabled5(int stale_v);
|
|
117
118
|
|
|
118
119
|
// This object is too size-sensitive to use absl::string_view.
|
|
119
|
-
const char* const file_;
|
|
120
|
+
const char* absl_nonnull const file_;
|
|
120
121
|
std::atomic<int> v_;
|
|
121
122
|
std::atomic<VLogSite*> next_;
|
|
122
123
|
};
|
|
@@ -130,7 +131,7 @@ int VLogLevel(absl::string_view file);
|
|
|
130
131
|
// Registers a site `v` to get updated as `vmodule` and `v` change. Also
|
|
131
132
|
// initializes the site based on their current values, and returns that result.
|
|
132
133
|
// Does not allocate memory.
|
|
133
|
-
int RegisterAndInitialize(VLogSite* v);
|
|
134
|
+
int RegisterAndInitialize(VLogSite* absl_nonnull v);
|
|
134
135
|
|
|
135
136
|
// Allocates memory.
|
|
136
137
|
void UpdateVLogSites();
|
|
@@ -154,7 +155,8 @@ int PrependVModule(absl::string_view module_pattern, int log_level);
|
|
|
154
155
|
void OnVLogVerbosityUpdate(std::function<void()> cb);
|
|
155
156
|
|
|
156
157
|
// Does not allocate memory.
|
|
157
|
-
VLogSite* SetVModuleListHeadForTestOnly(
|
|
158
|
+
VLogSite* absl_nullable SetVModuleListHeadForTestOnly(
|
|
159
|
+
VLogSite* absl_nullable v);
|
|
158
160
|
|
|
159
161
|
} // namespace log_internal
|
|
160
162
|
ABSL_NAMESPACE_END
|
|
@@ -16,13 +16,15 @@
|
|
|
16
16
|
// File: log/internal/voidify.h
|
|
17
17
|
// -----------------------------------------------------------------------------
|
|
18
18
|
//
|
|
19
|
-
// This class
|
|
20
|
-
//
|
|
21
|
-
//
|
|
19
|
+
// This class does the dispatching of the completed `absl::LogEntry` to
|
|
20
|
+
// applicable `absl::LogSink`s, and is used to explicitly ignore values in the
|
|
21
|
+
// conditional logging macros. This avoids compiler warnings like "value
|
|
22
|
+
// computed is not used" and "statement has no effect".
|
|
22
23
|
|
|
23
24
|
#ifndef ABSL_LOG_INTERNAL_VOIDIFY_H_
|
|
24
25
|
#define ABSL_LOG_INTERNAL_VOIDIFY_H_
|
|
25
26
|
|
|
27
|
+
#include "absl/base/attributes.h"
|
|
26
28
|
#include "absl/base/config.h"
|
|
27
29
|
|
|
28
30
|
namespace absl {
|
|
@@ -34,7 +36,11 @@ class Voidify final {
|
|
|
34
36
|
// This has to be an operator with a precedence lower than << but higher than
|
|
35
37
|
// ?:
|
|
36
38
|
template <typename T>
|
|
37
|
-
void operator&&(
|
|
39
|
+
ABSL_ATTRIBUTE_COLD void operator&&(T&& message) const&& {
|
|
40
|
+
// The dispatching of the completed `absl::LogEntry` to applicable
|
|
41
|
+
// `absl::LogSink`s happens here.
|
|
42
|
+
message.Flush();
|
|
43
|
+
}
|
|
38
44
|
};
|
|
39
45
|
|
|
40
46
|
} // namespace log_internal
|
|
@@ -34,6 +34,13 @@
|
|
|
34
34
|
// running registered error handlers.
|
|
35
35
|
// * The `DFATAL` pseudo-severity level is defined as `FATAL` in debug mode and
|
|
36
36
|
// as `ERROR` otherwise.
|
|
37
|
+
// * The `DO_NOT_SUBMIT` pseudo-severity level is an alias for `ERROR`, and is
|
|
38
|
+
// intended for debugging statements that won't be submitted. The name is
|
|
39
|
+
// chosen to be easy to spot in review and with tools in order to ensure that
|
|
40
|
+
// such statements aren't inadvertently checked in.
|
|
41
|
+
// The contract is that **it may not be checked in**, meaning that no
|
|
42
|
+
// in-contract uses will be affected if we decide in the future to remove it
|
|
43
|
+
// or change what it does.
|
|
37
44
|
// Some preprocessor shenanigans are used to ensure that e.g. `LOG(INFO)` has
|
|
38
45
|
// the same meaning even if a local symbol or preprocessor macro named `INFO` is
|
|
39
46
|
// defined. To specify a severity level using an expression instead of a
|
|
@@ -194,6 +201,8 @@
|
|
|
194
201
|
// LOG(INFO) << std::hex << 0xdeadbeef; // logs "0xdeadbeef"
|
|
195
202
|
// LOG(INFO) << 0xdeadbeef; // logs "3735928559"
|
|
196
203
|
|
|
204
|
+
// SKIP_ABSL_INLINE_NAMESPACE_CHECK
|
|
205
|
+
|
|
197
206
|
#ifndef ABSL_LOG_LOG_H_
|
|
198
207
|
#define ABSL_LOG_LOG_H_
|
|
199
208
|
|
|
@@ -260,44 +269,55 @@
|
|
|
260
269
|
ABSL_LOG_INTERNAL_DLOG_IF_IMPL(_##severity, condition)
|
|
261
270
|
|
|
262
271
|
// LOG_EVERY_N
|
|
272
|
+
// LOG_FIRST_N
|
|
273
|
+
// LOG_EVERY_POW_2
|
|
274
|
+
// LOG_EVERY_N_SEC
|
|
263
275
|
//
|
|
264
|
-
//
|
|
265
|
-
//
|
|
266
|
-
//
|
|
267
|
-
//
|
|
268
|
-
// the
|
|
269
|
-
//
|
|
276
|
+
// These "stateful" macros log conditionally based on a hidden counter or timer.
|
|
277
|
+
// When the condition is false and no logging is done, streamed operands aren't
|
|
278
|
+
// evaluated either. Each instance has its own state (i.e. counter, timer)
|
|
279
|
+
// that's independent of other instances of the macros. The macros in this
|
|
280
|
+
// family are thread-safe in the sense that they are meant to be called
|
|
281
|
+
// concurrently and will not invoke undefined behavior, however their
|
|
282
|
+
// implementation prioritizes efficiency over exactness and may occasionally log
|
|
283
|
+
// more or less often than specified.
|
|
284
|
+
//
|
|
285
|
+
// * `LOG_EVERY_N` logs the first time and once every `n` times thereafter.
|
|
286
|
+
// * `LOG_FIRST_N` logs the first `n` times and then stops.
|
|
287
|
+
// * `LOG_EVERY_POW_2` logs the first, second, fourth, eighth, etc. times.
|
|
288
|
+
// * `LOG_EVERY_N_SEC` logs the first time and no more than once every `n`
|
|
289
|
+
// seconds thereafter. `n` is passed as a floating point value.
|
|
290
|
+
//
|
|
291
|
+
// The `LOG_IF`... variations with an extra condition evaluate the specified
|
|
292
|
+
// condition first and short-circuit if it is false. For example, an evaluation
|
|
293
|
+
// of `LOG_IF_FIRST_N` does not count against the first `n` if the specified
|
|
294
|
+
// condition is false. Stateful `VLOG`... variations likewise short-circuit
|
|
295
|
+
// if `VLOG` is disabled.
|
|
296
|
+
//
|
|
297
|
+
// An approximate count of the number of times a particular instance's stateful
|
|
298
|
+
// condition has been evaluated (i.e. excluding those where a specified `LOG_IF`
|
|
299
|
+
// condition was false) can be included in the logged message by streaming the
|
|
300
|
+
// symbol `COUNTER`.
|
|
301
|
+
//
|
|
302
|
+
// The `n` parameter need not be a constant. Conditional logging following a
|
|
303
|
+
// change to `n` isn't fully specified, but it should converge on the new value
|
|
304
|
+
// within roughly `max(old_n, new_n)` evaluations or seconds.
|
|
305
|
+
//
|
|
306
|
+
// Examples:
|
|
270
307
|
//
|
|
271
308
|
// LOG_EVERY_N(WARNING, 1000) << "Got a packet with a bad CRC (" << COUNTER
|
|
272
309
|
// << " total)";
|
|
310
|
+
//
|
|
311
|
+
// LOG_EVERY_N_SEC(INFO, 2.5) << "Got " << COUNTER << " cookies so far";
|
|
312
|
+
//
|
|
313
|
+
// LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << COUNTER
|
|
314
|
+
// << "th big cookie";
|
|
273
315
|
#define LOG_EVERY_N(severity, n) \
|
|
274
316
|
ABSL_LOG_INTERNAL_LOG_EVERY_N_IMPL(_##severity, n)
|
|
275
|
-
|
|
276
|
-
// LOG_FIRST_N
|
|
277
|
-
//
|
|
278
|
-
// `LOG_FIRST_N` behaves like `LOG_EVERY_N` except that the specified message is
|
|
279
|
-
// logged when the counter's value is less than `n`. `LOG_FIRST_N` is
|
|
280
|
-
// thread-safe.
|
|
281
317
|
#define LOG_FIRST_N(severity, n) \
|
|
282
318
|
ABSL_LOG_INTERNAL_LOG_FIRST_N_IMPL(_##severity, n)
|
|
283
|
-
|
|
284
|
-
// LOG_EVERY_POW_2
|
|
285
|
-
//
|
|
286
|
-
// `LOG_EVERY_POW_2` behaves like `LOG_EVERY_N` except that the specified
|
|
287
|
-
// message is logged when the counter's value is a power of 2.
|
|
288
|
-
// `LOG_EVERY_POW_2` is thread-safe.
|
|
289
319
|
#define LOG_EVERY_POW_2(severity) \
|
|
290
320
|
ABSL_LOG_INTERNAL_LOG_EVERY_POW_2_IMPL(_##severity)
|
|
291
|
-
|
|
292
|
-
// LOG_EVERY_N_SEC
|
|
293
|
-
//
|
|
294
|
-
// An instance of `LOG_EVERY_N_SEC` uses a hidden state variable to log the
|
|
295
|
-
// specified message at most once every `n_seconds`. A hidden counter of
|
|
296
|
-
// executions (whether a message is logged or not) is also maintained and can be
|
|
297
|
-
// logged by streaming the symbol `COUNTER`. `LOG_EVERY_N_SEC` is thread-safe.
|
|
298
|
-
// Example:
|
|
299
|
-
//
|
|
300
|
-
// LOG_EVERY_N_SEC(INFO, 2.5) << "Got " << COUNTER << " cookies so far";
|
|
301
321
|
#define LOG_EVERY_N_SEC(severity, n_seconds) \
|
|
302
322
|
ABSL_LOG_INTERNAL_LOG_EVERY_N_SEC_IMPL(_##severity, n_seconds)
|
|
303
323
|
|
|
@@ -328,13 +348,6 @@
|
|
|
328
348
|
#define VLOG_EVERY_N_SEC(severity, n_seconds) \
|
|
329
349
|
ABSL_LOG_INTERNAL_VLOG_EVERY_N_SEC_IMPL(severity, n_seconds)
|
|
330
350
|
|
|
331
|
-
// `LOG_IF_EVERY_N` and friends behave as the corresponding `LOG_EVERY_N`
|
|
332
|
-
// but neither increment a counter nor log a message if condition is false (as
|
|
333
|
-
// `LOG_IF`).
|
|
334
|
-
// Example:
|
|
335
|
-
//
|
|
336
|
-
// LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << COUNTER
|
|
337
|
-
// << "th big cookie";
|
|
338
351
|
#define LOG_IF_EVERY_N(severity, condition, n) \
|
|
339
352
|
ABSL_LOG_INTERNAL_LOG_IF_EVERY_N_IMPL(_##severity, condition, n)
|
|
340
353
|
#define LOG_IF_FIRST_N(severity, condition, n) \
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
// See the License for the specific language governing permissions and
|
|
14
14
|
// limitations under the License.
|
|
15
15
|
|
|
16
|
+
// SKIP_ABSL_INLINE_NAMESPACE_CHECK
|
|
17
|
+
|
|
16
18
|
// The testcases in this file are expected to pass or be skipped with any value
|
|
17
19
|
// of ABSL_MIN_LOG_LEVEL
|
|
18
20
|
|
|
@@ -92,6 +94,7 @@ TEST_P(BasicLogTest, Info) {
|
|
|
92
94
|
absl::log_internal::ScopedMinLogLevel scoped_min_log_level(GetParam());
|
|
93
95
|
|
|
94
96
|
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
|
|
97
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
95
98
|
|
|
96
99
|
const int log_line = __LINE__ + 1;
|
|
97
100
|
auto do_log = [] { ABSL_TEST_LOG(INFO) << "hello world"; };
|
|
@@ -123,6 +126,7 @@ TEST_P(BasicLogTest, Warning) {
|
|
|
123
126
|
absl::log_internal::ScopedMinLogLevel scoped_min_log_level(GetParam());
|
|
124
127
|
|
|
125
128
|
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
|
|
129
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
126
130
|
|
|
127
131
|
const int log_line = __LINE__ + 1;
|
|
128
132
|
auto do_log = [] { ABSL_TEST_LOG(WARNING) << "hello world"; };
|
|
@@ -154,6 +158,7 @@ TEST_P(BasicLogTest, Error) {
|
|
|
154
158
|
absl::log_internal::ScopedMinLogLevel scoped_min_log_level(GetParam());
|
|
155
159
|
|
|
156
160
|
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
|
|
161
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
157
162
|
|
|
158
163
|
const int log_line = __LINE__ + 1;
|
|
159
164
|
auto do_log = [] { ABSL_TEST_LOG(ERROR) << "hello world"; };
|
|
@@ -181,6 +186,38 @@ TEST_P(BasicLogTest, Error) {
|
|
|
181
186
|
do_log();
|
|
182
187
|
}
|
|
183
188
|
|
|
189
|
+
TEST_P(BasicLogTest, DoNotSubmit) {
|
|
190
|
+
absl::log_internal::ScopedMinLogLevel scoped_min_log_level(GetParam());
|
|
191
|
+
|
|
192
|
+
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
|
|
193
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
194
|
+
|
|
195
|
+
const int log_line = __LINE__ + 1;
|
|
196
|
+
auto do_log = [] { ABSL_TEST_LOG(DO_NOT_SUBMIT) << "hello world"; };
|
|
197
|
+
|
|
198
|
+
if (LoggingEnabledAt(absl::LogSeverity::kError)) {
|
|
199
|
+
EXPECT_CALL(
|
|
200
|
+
test_sink,
|
|
201
|
+
Send(AllOf(
|
|
202
|
+
SourceFilename(Eq(__FILE__)),
|
|
203
|
+
SourceBasename(Eq("log_basic_test_impl.inc")),
|
|
204
|
+
SourceLine(Eq(log_line)), Prefix(IsTrue()),
|
|
205
|
+
LogSeverity(Eq(absl::LogSeverity::kError)),
|
|
206
|
+
Timestamp(InMatchWindow()),
|
|
207
|
+
ThreadID(Eq(absl::base_internal::GetTID())),
|
|
208
|
+
TextMessage(Eq("hello world")),
|
|
209
|
+
Verbosity(Eq(absl::LogEntry::kNoVerbosityLevel)),
|
|
210
|
+
ENCODED_MESSAGE(MatchesEvent(
|
|
211
|
+
Eq(__FILE__), Eq(log_line), InMatchWindow(),
|
|
212
|
+
Eq(logging::proto::ERROR), Eq(absl::base_internal::GetTID()),
|
|
213
|
+
ElementsAre(ValueWithLiteral(Eq("hello world"))))),
|
|
214
|
+
Stacktrace(IsEmpty()))));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
test_sink.StartCapturingLogs();
|
|
218
|
+
do_log();
|
|
219
|
+
}
|
|
220
|
+
|
|
184
221
|
#if GTEST_HAS_DEATH_TEST
|
|
185
222
|
using BasicLogDeathTest = BasicLogTest;
|
|
186
223
|
|
|
@@ -200,6 +237,7 @@ TEST_P(BasicLogDeathTest, Fatal) {
|
|
|
200
237
|
{
|
|
201
238
|
absl::ScopedMockLog test_sink(
|
|
202
239
|
absl::MockLogDefault::kDisallowUnexpected);
|
|
240
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
203
241
|
|
|
204
242
|
EXPECT_CALL(test_sink, Send)
|
|
205
243
|
.Times(AnyNumber())
|
|
@@ -266,6 +304,7 @@ TEST_P(BasicLogDeathTest, QFatal) {
|
|
|
266
304
|
{
|
|
267
305
|
absl::ScopedMockLog test_sink(
|
|
268
306
|
absl::MockLogDefault::kDisallowUnexpected);
|
|
307
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
269
308
|
|
|
270
309
|
EXPECT_CALL(test_sink, Send)
|
|
271
310
|
.Times(AnyNumber())
|
|
@@ -303,6 +342,7 @@ TEST_P(BasicLogTest, DFatal) {
|
|
|
303
342
|
absl::log_internal::ScopedMinLogLevel scoped_min_log_level(GetParam());
|
|
304
343
|
|
|
305
344
|
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
|
|
345
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
306
346
|
|
|
307
347
|
const int log_line = __LINE__ + 1;
|
|
308
348
|
auto do_log = [] { ABSL_TEST_LOG(DFATAL) << "hello world"; };
|
|
@@ -342,6 +382,7 @@ TEST_P(BasicLogDeathTest, DFatal) {
|
|
|
342
382
|
{
|
|
343
383
|
absl::ScopedMockLog test_sink(
|
|
344
384
|
absl::MockLogDefault::kDisallowUnexpected);
|
|
385
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
345
386
|
|
|
346
387
|
EXPECT_CALL(test_sink, Send)
|
|
347
388
|
.Times(AnyNumber())
|
|
@@ -423,6 +464,7 @@ TEST_P(BasicLogTest, Level) {
|
|
|
423
464
|
for (auto severity : {absl::LogSeverity::kInfo, absl::LogSeverity::kWarning,
|
|
424
465
|
absl::LogSeverity::kError}) {
|
|
425
466
|
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
|
|
467
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
426
468
|
|
|
427
469
|
const int log_line = __LINE__ + 2;
|
|
428
470
|
auto do_log = [severity] {
|
|
@@ -473,6 +515,7 @@ TEST_P(BasicLogDeathTest, Level) {
|
|
|
473
515
|
{
|
|
474
516
|
absl::ScopedMockLog test_sink(
|
|
475
517
|
absl::MockLogDefault::kDisallowUnexpected);
|
|
518
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
476
519
|
|
|
477
520
|
EXPECT_CALL(test_sink, Send)
|
|
478
521
|
.Times(AnyNumber())
|
|
@@ -534,6 +577,7 @@ TEST_P(BasicLogTest, LevelClampsNegativeValues) {
|
|
|
534
577
|
}
|
|
535
578
|
|
|
536
579
|
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
|
|
580
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
537
581
|
|
|
538
582
|
EXPECT_CALL(test_sink, Send(LogSeverity(Eq(absl::LogSeverity::kInfo))));
|
|
539
583
|
|
|
@@ -550,6 +594,7 @@ TEST_P(BasicLogTest, LevelClampsLargeValues) {
|
|
|
550
594
|
}
|
|
551
595
|
|
|
552
596
|
absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
|
|
597
|
+
EXPECT_CALL(test_sink, Send).Times(0);
|
|
553
598
|
|
|
554
599
|
EXPECT_CALL(test_sink, Send(LogSeverity(Eq(absl::LogSeverity::kError))));
|
|
555
600
|
|