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
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
// - for use by Abseil internal code that Mutex itself depends on
|
|
20
20
|
// - for async signal safety (see below)
|
|
21
21
|
|
|
22
|
-
// SpinLock with a
|
|
22
|
+
// SpinLock with a SchedulingMode::SCHEDULE_KERNEL_ONLY is async
|
|
23
23
|
// signal safe. If a spinlock is used within a signal handler, all code that
|
|
24
24
|
// acquires the lock must ensure that the signal cannot arrive while they are
|
|
25
25
|
// holding the lock. Typically, this is done by blocking the signal.
|
|
@@ -31,14 +31,16 @@
|
|
|
31
31
|
|
|
32
32
|
#include <atomic>
|
|
33
33
|
#include <cstdint>
|
|
34
|
+
#include <type_traits>
|
|
34
35
|
|
|
35
36
|
#include "absl/base/attributes.h"
|
|
37
|
+
#include "absl/base/config.h"
|
|
36
38
|
#include "absl/base/const_init.h"
|
|
37
|
-
#include "absl/base/dynamic_annotations.h"
|
|
38
39
|
#include "absl/base/internal/low_level_scheduling.h"
|
|
39
40
|
#include "absl/base/internal/raw_logging.h"
|
|
40
41
|
#include "absl/base/internal/scheduling_mode.h"
|
|
41
42
|
#include "absl/base/internal/tsan_mutex_interface.h"
|
|
43
|
+
#include "absl/base/macros.h"
|
|
42
44
|
#include "absl/base/thread_annotations.h"
|
|
43
45
|
|
|
44
46
|
namespace tcmalloc {
|
|
@@ -55,17 +57,31 @@ namespace base_internal {
|
|
|
55
57
|
|
|
56
58
|
class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
|
|
57
59
|
public:
|
|
58
|
-
SpinLock() : lockword_(kSpinLockCooperative) {
|
|
59
|
-
ABSL_TSAN_MUTEX_CREATE(this, __tsan_mutex_not_static);
|
|
60
|
-
}
|
|
60
|
+
constexpr SpinLock() : lockword_(kSpinLockCooperative) { RegisterWithTsan(); }
|
|
61
61
|
|
|
62
62
|
// Constructors that allow non-cooperative spinlocks to be created for use
|
|
63
63
|
// inside thread schedulers. Normal clients should not use these.
|
|
64
|
-
explicit SpinLock(
|
|
64
|
+
constexpr explicit SpinLock(SchedulingMode mode)
|
|
65
|
+
: lockword_(IsCooperative(mode) ? kSpinLockCooperative : 0) {
|
|
66
|
+
RegisterWithTsan();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
#if ABSL_HAVE_ATTRIBUTE(enable_if) && !defined(_WIN32)
|
|
70
|
+
// Constructor to inline users of the default scheduling mode.
|
|
71
|
+
//
|
|
72
|
+
// This only needs to exists for inliner runs, but doesn't work correctly in
|
|
73
|
+
// clang+windows builds, likely due to mangling differences.
|
|
74
|
+
ABSL_DEPRECATE_AND_INLINE()
|
|
75
|
+
constexpr explicit SpinLock(SchedulingMode mode)
|
|
76
|
+
__attribute__((enable_if(mode == SCHEDULE_COOPERATIVE_AND_KERNEL,
|
|
77
|
+
"Cooperative use default constructor")))
|
|
78
|
+
: SpinLock() {}
|
|
79
|
+
#endif
|
|
65
80
|
|
|
66
81
|
// Constructor for global SpinLock instances. See absl/base/const_init.h.
|
|
67
|
-
|
|
68
|
-
|
|
82
|
+
ABSL_DEPRECATE_AND_INLINE()
|
|
83
|
+
constexpr SpinLock(absl::ConstInitType, SchedulingMode mode)
|
|
84
|
+
: SpinLock(mode) {}
|
|
69
85
|
|
|
70
86
|
// For global SpinLock instances prefer trivial destructor when possible.
|
|
71
87
|
// Default but non-trivial destructor in some build configurations causes an
|
|
@@ -77,7 +93,7 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
|
|
|
77
93
|
#endif
|
|
78
94
|
|
|
79
95
|
// Acquire this SpinLock.
|
|
80
|
-
inline void
|
|
96
|
+
inline void lock() ABSL_EXCLUSIVE_LOCK_FUNCTION() {
|
|
81
97
|
ABSL_TSAN_MUTEX_PRE_LOCK(this, 0);
|
|
82
98
|
if (!TryLockImpl()) {
|
|
83
99
|
SlowLock();
|
|
@@ -85,12 +101,14 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
|
|
|
85
101
|
ABSL_TSAN_MUTEX_POST_LOCK(this, 0, 0);
|
|
86
102
|
}
|
|
87
103
|
|
|
104
|
+
ABSL_DEPRECATE_AND_INLINE()
|
|
105
|
+
inline void Lock() ABSL_EXCLUSIVE_LOCK_FUNCTION() { return lock(); }
|
|
106
|
+
|
|
88
107
|
// Try to acquire this SpinLock without blocking and return true if the
|
|
89
108
|
// acquisition was successful. If the lock was not acquired, false is
|
|
90
|
-
// returned. If this SpinLock is free at the time of the call,
|
|
91
|
-
//
|
|
92
|
-
|
|
93
|
-
ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true) {
|
|
109
|
+
// returned. If this SpinLock is free at the time of the call, try_lock will
|
|
110
|
+
// return true with high probability.
|
|
111
|
+
[[nodiscard]] inline bool try_lock() ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true) {
|
|
94
112
|
ABSL_TSAN_MUTEX_PRE_LOCK(this, __tsan_mutex_try_lock);
|
|
95
113
|
bool res = TryLockImpl();
|
|
96
114
|
ABSL_TSAN_MUTEX_POST_LOCK(
|
|
@@ -99,15 +117,20 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
|
|
|
99
117
|
return res;
|
|
100
118
|
}
|
|
101
119
|
|
|
120
|
+
ABSL_DEPRECATE_AND_INLINE()
|
|
121
|
+
[[nodiscard]] inline bool TryLock() ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true) {
|
|
122
|
+
return try_lock();
|
|
123
|
+
}
|
|
124
|
+
|
|
102
125
|
// Release this SpinLock, which must be held by the calling thread.
|
|
103
|
-
inline void
|
|
126
|
+
inline void unlock() ABSL_UNLOCK_FUNCTION() {
|
|
104
127
|
ABSL_TSAN_MUTEX_PRE_UNLOCK(this, 0);
|
|
105
128
|
uint32_t lock_value = lockword_.load(std::memory_order_relaxed);
|
|
106
129
|
lock_value = lockword_.exchange(lock_value & kSpinLockCooperative,
|
|
107
130
|
std::memory_order_release);
|
|
108
131
|
|
|
109
132
|
if ((lock_value & kSpinLockDisabledScheduling) != 0) {
|
|
110
|
-
|
|
133
|
+
SchedulingGuard::EnableRescheduling(true);
|
|
111
134
|
}
|
|
112
135
|
if ((lock_value & kWaitTimeMask) != 0) {
|
|
113
136
|
// Collect contentionz profile info, and speed the wakeup of any waiter.
|
|
@@ -118,10 +141,13 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
|
|
|
118
141
|
ABSL_TSAN_MUTEX_POST_UNLOCK(this, 0);
|
|
119
142
|
}
|
|
120
143
|
|
|
144
|
+
ABSL_DEPRECATE_AND_INLINE()
|
|
145
|
+
inline void Unlock() ABSL_UNLOCK_FUNCTION() { unlock(); }
|
|
146
|
+
|
|
121
147
|
// Determine if the lock is held. When the lock is held by the invoking
|
|
122
148
|
// thread, true will always be returned. Intended to be used as
|
|
123
149
|
// CHECK(lock.IsHeld()).
|
|
124
|
-
|
|
150
|
+
[[nodiscard]] inline bool IsHeld() const {
|
|
125
151
|
return (lockword_.load(std::memory_order_relaxed) & kSpinLockHeld) != 0;
|
|
126
152
|
}
|
|
127
153
|
|
|
@@ -176,9 +202,16 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
|
|
|
176
202
|
~(kSpinLockHeld | kSpinLockCooperative | kSpinLockDisabledScheduling);
|
|
177
203
|
|
|
178
204
|
// Returns true if the provided scheduling mode is cooperative.
|
|
179
|
-
static constexpr bool IsCooperative(
|
|
180
|
-
|
|
181
|
-
|
|
205
|
+
static constexpr bool IsCooperative(SchedulingMode scheduling_mode) {
|
|
206
|
+
return scheduling_mode == SCHEDULE_COOPERATIVE_AND_KERNEL;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
constexpr void RegisterWithTsan() {
|
|
210
|
+
#if ABSL_HAVE_BUILTIN(__builtin_is_constant_evaluated)
|
|
211
|
+
if (!__builtin_is_constant_evaluated()) {
|
|
212
|
+
ABSL_TSAN_MUTEX_CREATE(this, __tsan_mutex_not_static);
|
|
213
|
+
}
|
|
214
|
+
#endif
|
|
182
215
|
}
|
|
183
216
|
|
|
184
217
|
bool IsCooperative() const {
|
|
@@ -203,28 +236,25 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED SpinLock {
|
|
|
203
236
|
|
|
204
237
|
// Corresponding locker object that arranges to acquire a spinlock for
|
|
205
238
|
// the duration of a C++ scope.
|
|
206
|
-
|
|
207
|
-
// TODO(b/176172494): Use only [[nodiscard]] when baseline is raised.
|
|
208
|
-
// TODO(b/6695610): Remove forward declaration when #ifdef is no longer needed.
|
|
209
|
-
#if ABSL_HAVE_CPP_ATTRIBUTE(nodiscard)
|
|
210
|
-
class [[nodiscard]] SpinLockHolder;
|
|
211
|
-
#else
|
|
212
|
-
class ABSL_MUST_USE_RESULT ABSL_ATTRIBUTE_TRIVIAL_ABI SpinLockHolder;
|
|
213
|
-
#endif
|
|
214
|
-
|
|
215
|
-
class ABSL_SCOPED_LOCKABLE SpinLockHolder {
|
|
239
|
+
class ABSL_SCOPED_LOCKABLE [[nodiscard]] SpinLockHolder {
|
|
216
240
|
public:
|
|
217
|
-
inline explicit SpinLockHolder(
|
|
241
|
+
inline explicit SpinLockHolder(
|
|
242
|
+
SpinLock& l ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
|
|
243
|
+
ABSL_EXCLUSIVE_LOCK_FUNCTION(l)
|
|
218
244
|
: lock_(l) {
|
|
219
|
-
l
|
|
245
|
+
l.lock();
|
|
220
246
|
}
|
|
221
|
-
|
|
247
|
+
ABSL_DEPRECATE_AND_INLINE()
|
|
248
|
+
inline explicit SpinLockHolder(SpinLock* l) ABSL_EXCLUSIVE_LOCK_FUNCTION(l)
|
|
249
|
+
: SpinLockHolder(*l) {}
|
|
250
|
+
|
|
251
|
+
inline ~SpinLockHolder() ABSL_UNLOCK_FUNCTION() { lock_.unlock(); }
|
|
222
252
|
|
|
223
253
|
SpinLockHolder(const SpinLockHolder&) = delete;
|
|
224
254
|
SpinLockHolder& operator=(const SpinLockHolder&) = delete;
|
|
225
255
|
|
|
226
256
|
private:
|
|
227
|
-
SpinLock
|
|
257
|
+
SpinLock& lock_;
|
|
228
258
|
};
|
|
229
259
|
|
|
230
260
|
// Register a hook for profiling support.
|
|
@@ -253,7 +283,7 @@ inline uint32_t SpinLock::TryLockInternal(uint32_t lock_value,
|
|
|
253
283
|
if ((lock_value & kSpinLockCooperative) == 0) {
|
|
254
284
|
// For non-cooperative locks we must make sure we mark ourselves as
|
|
255
285
|
// non-reschedulable before we attempt to CompareAndSwap.
|
|
256
|
-
if (
|
|
286
|
+
if (SchedulingGuard::DisableRescheduling()) {
|
|
257
287
|
sched_disabled_bit = kSpinLockDisabledScheduling;
|
|
258
288
|
}
|
|
259
289
|
}
|
|
@@ -262,7 +292,7 @@ inline uint32_t SpinLock::TryLockInternal(uint32_t lock_value,
|
|
|
262
292
|
lock_value,
|
|
263
293
|
kSpinLockHeld | lock_value | wait_cycles | sched_disabled_bit,
|
|
264
294
|
std::memory_order_acquire, std::memory_order_relaxed)) {
|
|
265
|
-
|
|
295
|
+
SchedulingGuard::EnableRescheduling(sched_disabled_bit != 0);
|
|
266
296
|
}
|
|
267
297
|
|
|
268
298
|
return lock_value;
|
|
@@ -35,7 +35,7 @@ static void BM_TryLock(benchmark::State& state) {
|
|
|
35
35
|
static absl::NoDestructor<absl::base_internal::SpinLock> spinlock(
|
|
36
36
|
scheduling_mode);
|
|
37
37
|
for (auto _ : state) {
|
|
38
|
-
if (spinlock->
|
|
38
|
+
if (spinlock->try_lock()) spinlock->unlock();
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
|
|
@@ -50,7 +50,7 @@ static void BM_SpinLock(benchmark::State& state) {
|
|
|
50
50
|
static absl::NoDestructor<absl::base_internal::SpinLock> spinlock(
|
|
51
51
|
scheduling_mode);
|
|
52
52
|
for (auto _ : state) {
|
|
53
|
-
absl::base_internal::SpinLockHolder holder(spinlock.get());
|
|
53
|
+
absl::base_internal::SpinLockHolder holder(*spinlock.get());
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -41,7 +41,7 @@ TEST(SysinfoTest, GetTID) {
|
|
|
41
41
|
EXPECT_EQ(GetTID(), GetTID()); // Basic compile and equality test.
|
|
42
42
|
#ifdef __native_client__
|
|
43
43
|
// Native Client has a race condition bug that leads to memory
|
|
44
|
-
//
|
|
44
|
+
// exhaustion when repeatedly creating and joining threads.
|
|
45
45
|
// https://bugs.chromium.org/p/nativeclient/issues/detail?id=1027
|
|
46
46
|
return;
|
|
47
47
|
#endif
|
|
@@ -59,7 +59,7 @@ TEST(SysinfoTest, GetTID) {
|
|
|
59
59
|
threads.push_back(std::thread([&]() {
|
|
60
60
|
pid_t id = GetTID();
|
|
61
61
|
{
|
|
62
|
-
MutexLock lock(
|
|
62
|
+
MutexLock lock(mutex);
|
|
63
63
|
ASSERT_TRUE(tids.find(id) == tids.end());
|
|
64
64
|
tids.insert(id);
|
|
65
65
|
}
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
-
#include "benchmark/benchmark.h"
|
|
16
15
|
#include "absl/base/internal/thread_identity.h"
|
|
17
16
|
#include "absl/synchronization/internal/create_thread_identity.h"
|
|
18
17
|
#include "absl/synchronization/internal/per_thread_sem.h"
|
|
18
|
+
#include "benchmark/benchmark.h"
|
|
19
19
|
|
|
20
20
|
namespace {
|
|
21
21
|
|
|
@@ -31,7 +31,7 @@ namespace base_internal {
|
|
|
31
31
|
namespace {
|
|
32
32
|
|
|
33
33
|
ABSL_CONST_INIT static absl::base_internal::SpinLock map_lock(
|
|
34
|
-
|
|
34
|
+
base_internal::SCHEDULE_KERNEL_ONLY);
|
|
35
35
|
ABSL_CONST_INIT static int num_identities_reused ABSL_GUARDED_BY(map_lock);
|
|
36
36
|
|
|
37
37
|
static const void* const kCheckNoIdentity = reinterpret_cast<void*>(1);
|
|
@@ -58,7 +58,7 @@ static void TestThreadIdentityCurrent(const void* assert_no_identity) {
|
|
|
58
58
|
PerThreadSynch::kAlignment);
|
|
59
59
|
EXPECT_EQ(identity, identity->per_thread_synch.thread_identity());
|
|
60
60
|
|
|
61
|
-
absl::base_internal::SpinLockHolder l(
|
|
61
|
+
absl::base_internal::SpinLockHolder l(map_lock);
|
|
62
62
|
num_identities_reused++;
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -90,7 +90,7 @@ TEST(ThreadIdentityTest, BasicIdentityWorksThreaded) {
|
|
|
90
90
|
// We should have recycled ThreadIdentity objects above; while (external)
|
|
91
91
|
// library threads allocating their own identities may preclude some
|
|
92
92
|
// reuse, we should have sufficient repetitions to exclude this.
|
|
93
|
-
absl::base_internal::SpinLockHolder l(
|
|
93
|
+
absl::base_internal::SpinLockHolder l(map_lock);
|
|
94
94
|
EXPECT_LT(kNumThreads, num_identities_reused);
|
|
95
95
|
}
|
|
96
96
|
|
|
@@ -112,7 +112,7 @@ TEST(ThreadIdentityTest, ReusedThreadIdentityMutexTest) {
|
|
|
112
112
|
threads.push_back(std::thread([&]() {
|
|
113
113
|
for (int l = 0; l < kNumLockLoops; ++l) {
|
|
114
114
|
for (int m = 0; m < kNumMutexes; ++m) {
|
|
115
|
-
MutexLock lock(
|
|
115
|
+
MutexLock lock(mutexes[m]);
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
}));
|
|
@@ -36,33 +36,33 @@ namespace absl {
|
|
|
36
36
|
ABSL_NAMESPACE_BEGIN
|
|
37
37
|
namespace base_internal {
|
|
38
38
|
|
|
39
|
-
inline uint16_t UnalignedLoad16(
|
|
39
|
+
inline uint16_t UnalignedLoad16(const void* absl_nonnull p) {
|
|
40
40
|
uint16_t t;
|
|
41
41
|
memcpy(&t, p, sizeof t);
|
|
42
42
|
return t;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
inline uint32_t UnalignedLoad32(
|
|
45
|
+
inline uint32_t UnalignedLoad32(const void* absl_nonnull p) {
|
|
46
46
|
uint32_t t;
|
|
47
47
|
memcpy(&t, p, sizeof t);
|
|
48
48
|
return t;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
inline uint64_t UnalignedLoad64(
|
|
51
|
+
inline uint64_t UnalignedLoad64(const void* absl_nonnull p) {
|
|
52
52
|
uint64_t t;
|
|
53
53
|
memcpy(&t, p, sizeof t);
|
|
54
54
|
return t;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
inline void UnalignedStore16(
|
|
57
|
+
inline void UnalignedStore16(void* absl_nonnull p, uint16_t v) {
|
|
58
58
|
memcpy(p, &v, sizeof v);
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
inline void UnalignedStore32(
|
|
61
|
+
inline void UnalignedStore32(void* absl_nonnull p, uint32_t v) {
|
|
62
62
|
memcpy(p, &v, sizeof v);
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
inline void UnalignedStore64(
|
|
65
|
+
inline void UnalignedStore64(void* absl_nonnull p, uint64_t v) {
|
|
66
66
|
memcpy(p, &v, sizeof v);
|
|
67
67
|
}
|
|
68
68
|
|
|
@@ -85,6 +85,10 @@ int64_t UnscaledCycleClock::Now() {
|
|
|
85
85
|
double UnscaledCycleClock::Frequency() {
|
|
86
86
|
#ifdef __GLIBC__
|
|
87
87
|
return __ppc_get_timebase_freq();
|
|
88
|
+
#elif defined(__linux__)
|
|
89
|
+
// Fallback for musl + ppc64le: use constant timebase frequency (512 MHz)
|
|
90
|
+
// Must come after __GLIBC__.
|
|
91
|
+
return static_cast<double>(512000000);
|
|
88
92
|
#elif defined(_AIX)
|
|
89
93
|
// This is the same constant value as returned by
|
|
90
94
|
// __ppc_get_timebase_freq().
|
|
@@ -88,9 +88,14 @@ inline int64_t UnscaledCycleClock::Now() {
|
|
|
88
88
|
#elif defined(__aarch64__)
|
|
89
89
|
|
|
90
90
|
// System timer of ARMv8 runs at a different frequency than the CPU's.
|
|
91
|
-
//
|
|
92
|
-
//
|
|
93
|
-
// the
|
|
91
|
+
//
|
|
92
|
+
// Frequency is fixed. From Armv8.6-A and Armv9.1-A on, the frequency is 1GHz.
|
|
93
|
+
// Pre-Armv8.6-A, the frequency was a system design choice, typically in the
|
|
94
|
+
// range of 1MHz to 50MHz. See also:
|
|
95
|
+
// https://developer.arm.com/documentation/102379/0101/What-is-the-Generic-Timer-
|
|
96
|
+
//
|
|
97
|
+
// It can be read at CNTFRQ special register. We assume the OS has set up the
|
|
98
|
+
// virtual timer properly.
|
|
94
99
|
inline int64_t UnscaledCycleClock::Now() {
|
|
95
100
|
int64_t virtual_timer_value;
|
|
96
101
|
asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value));
|
|
@@ -135,11 +135,11 @@ class NoDestructor {
|
|
|
135
135
|
// Pretend to be a smart pointer to T with deep constness.
|
|
136
136
|
// Never returns a null pointer.
|
|
137
137
|
T& operator*() { return *get(); }
|
|
138
|
-
|
|
139
|
-
|
|
138
|
+
T* absl_nonnull operator->() { return get(); }
|
|
139
|
+
T* absl_nonnull get() { return impl_.get(); }
|
|
140
140
|
const T& operator*() const { return *get(); }
|
|
141
|
-
|
|
142
|
-
|
|
141
|
+
const T* absl_nonnull operator->() const { return get(); }
|
|
142
|
+
const T* absl_nonnull get() const { return impl_.get(); }
|
|
143
143
|
|
|
144
144
|
private:
|
|
145
145
|
class DirectImpl {
|
|
@@ -147,8 +147,8 @@ class NoDestructor {
|
|
|
147
147
|
template <typename... Args>
|
|
148
148
|
explicit constexpr DirectImpl(Args&&... args)
|
|
149
149
|
: value_(std::forward<Args>(args)...) {}
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
const T* absl_nonnull get() const { return &value_; }
|
|
151
|
+
T* absl_nonnull get() { return &value_; }
|
|
152
152
|
|
|
153
153
|
private:
|
|
154
154
|
T value_;
|
|
@@ -160,33 +160,14 @@ class NoDestructor {
|
|
|
160
160
|
explicit PlacementImpl(Args&&... args) {
|
|
161
161
|
new (&space_) T(std::forward<Args>(args)...);
|
|
162
162
|
}
|
|
163
|
-
|
|
164
|
-
return
|
|
163
|
+
const T* absl_nonnull get() const {
|
|
164
|
+
return std::launder(reinterpret_cast<const T*>(&space_));
|
|
165
165
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
private:
|
|
169
|
-
template <typename P>
|
|
170
|
-
static absl::Nonnull<P*> Launder(absl::Nonnull<P*> p) {
|
|
171
|
-
#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606L
|
|
172
|
-
return std::launder(p);
|
|
173
|
-
#elif ABSL_HAVE_BUILTIN(__builtin_launder)
|
|
174
|
-
return __builtin_launder(p);
|
|
175
|
-
#else
|
|
176
|
-
// When `std::launder` or equivalent are not available, we rely on
|
|
177
|
-
// undefined behavior, which works as intended on Abseil's officially
|
|
178
|
-
// supported platforms as of Q3 2023.
|
|
179
|
-
#if defined(__GNUC__) && !defined(__clang__)
|
|
180
|
-
#pragma GCC diagnostic push
|
|
181
|
-
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
|
|
182
|
-
#endif
|
|
183
|
-
return p;
|
|
184
|
-
#if defined(__GNUC__) && !defined(__clang__)
|
|
185
|
-
#pragma GCC diagnostic pop
|
|
186
|
-
#endif
|
|
187
|
-
#endif
|
|
166
|
+
T* absl_nonnull get() {
|
|
167
|
+
return std::launder(reinterpret_cast<T*>(&space_));
|
|
188
168
|
}
|
|
189
169
|
|
|
170
|
+
private:
|
|
190
171
|
alignas(T) unsigned char space_[sizeof(T)];
|
|
191
172
|
};
|
|
192
173
|
|
|
@@ -199,12 +180,10 @@ class NoDestructor {
|
|
|
199
180
|
impl_;
|
|
200
181
|
};
|
|
201
182
|
|
|
202
|
-
#ifdef ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION
|
|
203
183
|
// Provide 'Class Template Argument Deduction': the type of NoDestructor's T
|
|
204
184
|
// will be the same type as the argument passed to NoDestructor's constructor.
|
|
205
185
|
template <typename T>
|
|
206
186
|
NoDestructor(T) -> NoDestructor<T>;
|
|
207
|
-
#endif // ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION
|
|
208
187
|
|
|
209
188
|
ABSL_NAMESPACE_END
|
|
210
189
|
} // namespace absl
|
|
@@ -196,14 +196,10 @@ TEST(NoDestructorTest, StaticPattern) {
|
|
|
196
196
|
EXPECT_EQ(0, Int()); // should get zero-initialized
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
-
#ifdef ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION
|
|
200
|
-
// This would fail to compile if Class Template Argument Deduction was not
|
|
201
|
-
// provided for absl::NoDestructor.
|
|
202
199
|
TEST(NoDestructorTest, ClassTemplateArgumentDeduction) {
|
|
203
200
|
absl::NoDestructor i(1);
|
|
204
201
|
static_assert(std::is_same<decltype(i), absl::NoDestructor<int>>::value,
|
|
205
202
|
"Expected deduced type to be int.");
|
|
206
203
|
}
|
|
207
|
-
#endif
|
|
208
204
|
|
|
209
205
|
} // namespace
|