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
|
@@ -39,12 +39,23 @@ template <typename T, typename U, typename = void>
|
|
|
39
39
|
struct HasConversionOperatorToStatusOr : std::false_type {};
|
|
40
40
|
|
|
41
41
|
template <typename T, typename U>
|
|
42
|
-
void test(char (*)[sizeof(
|
|
42
|
+
void test(char (*absl_nullable)[sizeof(
|
|
43
|
+
std::declval<U>().operator absl::StatusOr<T>())]);
|
|
43
44
|
|
|
44
45
|
template <typename T, typename U>
|
|
45
46
|
struct HasConversionOperatorToStatusOr<T, U, decltype(test<T, U>(0))>
|
|
46
47
|
: std::true_type {};
|
|
47
48
|
|
|
49
|
+
// Detects whether `T` is equality-comparable.
|
|
50
|
+
template <typename T, typename = void>
|
|
51
|
+
struct IsEqualityComparable : std::false_type {};
|
|
52
|
+
|
|
53
|
+
template <typename T>
|
|
54
|
+
struct IsEqualityComparable<
|
|
55
|
+
T, std::enable_if_t<std::is_convertible<
|
|
56
|
+
decltype(std::declval<T>() == std::declval<T>()),
|
|
57
|
+
bool>::value>> : std::true_type {};
|
|
58
|
+
|
|
48
59
|
// Detects whether `T` is constructible or convertible from `StatusOr<U>`.
|
|
49
60
|
template <typename T, typename U>
|
|
50
61
|
using IsConstructibleOrConvertibleFromStatusOr =
|
|
@@ -79,17 +90,34 @@ template <typename T, typename V>
|
|
|
79
90
|
struct IsDirectInitializationAmbiguous<T, absl::StatusOr<V>>
|
|
80
91
|
: public IsConstructibleOrConvertibleFromStatusOr<T, V> {};
|
|
81
92
|
|
|
93
|
+
// Checks whether the conversion from U to T can be done without dangling
|
|
94
|
+
// temporaries.
|
|
95
|
+
// REQUIRES: T and U are references.
|
|
96
|
+
template <typename T, typename U>
|
|
97
|
+
using IsReferenceConversionValid = absl::conjunction< //
|
|
98
|
+
std::is_reference<T>, std::is_reference<U>,
|
|
99
|
+
// The references are convertible. This checks for
|
|
100
|
+
// lvalue/rvalue compatibility.
|
|
101
|
+
std::is_convertible<U, T>,
|
|
102
|
+
// The pointers are convertible. This checks we don't have
|
|
103
|
+
// a temporary.
|
|
104
|
+
std::is_convertible<std::remove_reference_t<U>*,
|
|
105
|
+
std::remove_reference_t<T>*>>;
|
|
106
|
+
|
|
82
107
|
// Checks against the constraints of the direction initialization, i.e. when
|
|
83
108
|
// `StatusOr<T>::StatusOr(U&&)` should participate in overload resolution.
|
|
84
109
|
template <typename T, typename U>
|
|
85
110
|
using IsDirectInitializationValid = absl::disjunction<
|
|
86
111
|
// Short circuits if T is basically U.
|
|
87
|
-
std::is_same<T, absl::remove_cvref_t<U>>,
|
|
88
|
-
|
|
89
|
-
std::
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
112
|
+
std::is_same<T, absl::remove_cvref_t<U>>, //
|
|
113
|
+
std::conditional_t<
|
|
114
|
+
std::is_reference_v<T>, //
|
|
115
|
+
IsReferenceConversionValid<T, U>,
|
|
116
|
+
absl::negation<absl::disjunction<
|
|
117
|
+
std::is_same<absl::StatusOr<T>, absl::remove_cvref_t<U>>,
|
|
118
|
+
std::is_same<absl::Status, absl::remove_cvref_t<U>>,
|
|
119
|
+
std::is_same<absl::in_place_t, absl::remove_cvref_t<U>>,
|
|
120
|
+
IsDirectInitializationAmbiguous<T, U>>>>>;
|
|
93
121
|
|
|
94
122
|
// This trait detects whether `StatusOr<T>::operator=(U&&)` is ambiguous, which
|
|
95
123
|
// is equivalent to whether all the following conditions are met:
|
|
@@ -129,7 +157,9 @@ using Equality = std::conditional_t<Value, T, absl::negation<T>>;
|
|
|
129
157
|
template <bool Explicit, typename T, typename U, bool Lifetimebound>
|
|
130
158
|
using IsConstructionValid = absl::conjunction<
|
|
131
159
|
Equality<Lifetimebound,
|
|
132
|
-
|
|
160
|
+
absl::disjunction<
|
|
161
|
+
std::is_reference<T>,
|
|
162
|
+
type_traits_internal::IsLifetimeBoundAssignment<T, U>>>,
|
|
133
163
|
IsDirectInitializationValid<T, U&&>, std::is_constructible<T, U&&>,
|
|
134
164
|
Equality<!Explicit, std::is_convertible<U&&, T>>,
|
|
135
165
|
absl::disjunction<
|
|
@@ -145,8 +175,13 @@ using IsConstructionValid = absl::conjunction<
|
|
|
145
175
|
template <typename T, typename U, bool Lifetimebound>
|
|
146
176
|
using IsAssignmentValid = absl::conjunction<
|
|
147
177
|
Equality<Lifetimebound,
|
|
148
|
-
|
|
149
|
-
|
|
178
|
+
absl::disjunction<
|
|
179
|
+
std::is_reference<T>,
|
|
180
|
+
type_traits_internal::IsLifetimeBoundAssignment<T, U>>>,
|
|
181
|
+
std::conditional_t<std::is_reference_v<T>,
|
|
182
|
+
IsReferenceConversionValid<T, U&&>,
|
|
183
|
+
absl::conjunction<std::is_constructible<T, U&&>,
|
|
184
|
+
std::is_assignable<T&, U&&>>>,
|
|
150
185
|
absl::disjunction<
|
|
151
186
|
std::is_same<T, absl::remove_cvref_t<U>>,
|
|
152
187
|
absl::conjunction<
|
|
@@ -167,6 +202,9 @@ template <bool Explicit, typename T, typename U, bool Lifetimebound,
|
|
|
167
202
|
typename UQ>
|
|
168
203
|
using IsConstructionFromStatusOrValid = absl::conjunction<
|
|
169
204
|
absl::negation<std::is_same<T, U>>,
|
|
205
|
+
// If `T` is a reference, then U must be a compatible one.
|
|
206
|
+
absl::disjunction<absl::negation<std::is_reference<T>>,
|
|
207
|
+
IsReferenceConversionValid<T, U>>,
|
|
170
208
|
Equality<Lifetimebound,
|
|
171
209
|
type_traits_internal::IsLifetimeBoundAssignment<T, U>>,
|
|
172
210
|
std::is_constructible<T, UQ>,
|
|
@@ -182,10 +220,20 @@ using IsStatusOrAssignmentValid = absl::conjunction<
|
|
|
182
220
|
absl::negation<IsConstructibleOrConvertibleOrAssignableFromStatusOr<
|
|
183
221
|
T, absl::remove_cvref_t<U>>>>;
|
|
184
222
|
|
|
223
|
+
template <typename T, typename U, bool Lifetimebound>
|
|
224
|
+
using IsValueOrValid = absl::conjunction<
|
|
225
|
+
// If `T` is a reference, then U must be a compatible one.
|
|
226
|
+
absl::disjunction<absl::negation<std::is_reference<T>>,
|
|
227
|
+
IsReferenceConversionValid<T, U>>,
|
|
228
|
+
Equality<Lifetimebound,
|
|
229
|
+
absl::disjunction<
|
|
230
|
+
std::is_reference<T>,
|
|
231
|
+
type_traits_internal::IsLifetimeBoundAssignment<T, U>>>>;
|
|
232
|
+
|
|
185
233
|
class Helper {
|
|
186
234
|
public:
|
|
187
235
|
// Move type-agnostic error handling to the .cc.
|
|
188
|
-
static void HandleInvalidStatusCtorArg(
|
|
236
|
+
static void HandleInvalidStatusCtorArg(Status* absl_nonnull);
|
|
189
237
|
[[noreturn]] static void Crash(const absl::Status& status);
|
|
190
238
|
};
|
|
191
239
|
|
|
@@ -194,10 +242,30 @@ class Helper {
|
|
|
194
242
|
// This abstraction is here mostly for the gcc performance fix.
|
|
195
243
|
template <typename T, typename... Args>
|
|
196
244
|
ABSL_ATTRIBUTE_NONNULL(1)
|
|
197
|
-
void PlacementNew(
|
|
245
|
+
void PlacementNew(void* absl_nonnull p, Args&&... args) {
|
|
198
246
|
new (p) T(std::forward<Args>(args)...);
|
|
199
247
|
}
|
|
200
248
|
|
|
249
|
+
template <typename T>
|
|
250
|
+
class Reference {
|
|
251
|
+
public:
|
|
252
|
+
constexpr explicit Reference(T ref ABSL_ATTRIBUTE_LIFETIME_BOUND)
|
|
253
|
+
: payload_(std::addressof(ref)) {}
|
|
254
|
+
|
|
255
|
+
Reference(const Reference&) = default;
|
|
256
|
+
Reference& operator=(const Reference&) = default;
|
|
257
|
+
Reference& operator=(T value) {
|
|
258
|
+
payload_ = std::addressof(value);
|
|
259
|
+
return *this;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
operator T() const { return static_cast<T>(*payload_); } // NOLINT
|
|
263
|
+
T get() const { return *this; }
|
|
264
|
+
|
|
265
|
+
private:
|
|
266
|
+
std::remove_reference_t<T>* absl_nonnull payload_;
|
|
267
|
+
};
|
|
268
|
+
|
|
201
269
|
// Helper base class to hold the data and all operations.
|
|
202
270
|
// We move all this to a base class to allow mixing with the appropriate
|
|
203
271
|
// TraitsBase specialization.
|
|
@@ -206,6 +274,14 @@ class StatusOrData {
|
|
|
206
274
|
template <typename U>
|
|
207
275
|
friend class StatusOrData;
|
|
208
276
|
|
|
277
|
+
decltype(auto) MaybeMoveData() {
|
|
278
|
+
if constexpr (std::is_reference_v<T>) {
|
|
279
|
+
return data_.get();
|
|
280
|
+
} else {
|
|
281
|
+
return std::move(data_);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
209
285
|
public:
|
|
210
286
|
StatusOrData() = delete;
|
|
211
287
|
|
|
@@ -220,7 +296,7 @@ class StatusOrData {
|
|
|
220
296
|
|
|
221
297
|
StatusOrData(StatusOrData&& other) noexcept {
|
|
222
298
|
if (other.ok()) {
|
|
223
|
-
MakeValue(
|
|
299
|
+
MakeValue(other.MaybeMoveData());
|
|
224
300
|
MakeStatus();
|
|
225
301
|
} else {
|
|
226
302
|
MakeStatus(std::move(other.status_));
|
|
@@ -240,7 +316,7 @@ class StatusOrData {
|
|
|
240
316
|
template <typename U>
|
|
241
317
|
explicit StatusOrData(StatusOrData<U>&& other) {
|
|
242
318
|
if (other.ok()) {
|
|
243
|
-
MakeValue(
|
|
319
|
+
MakeValue(other.MaybeMoveData());
|
|
244
320
|
MakeStatus();
|
|
245
321
|
} else {
|
|
246
322
|
MakeStatus(std::move(other.status_));
|
|
@@ -253,13 +329,6 @@ class StatusOrData {
|
|
|
253
329
|
MakeStatus();
|
|
254
330
|
}
|
|
255
331
|
|
|
256
|
-
explicit StatusOrData(const T& value) : data_(value) {
|
|
257
|
-
MakeStatus();
|
|
258
|
-
}
|
|
259
|
-
explicit StatusOrData(T&& value) : data_(std::move(value)) {
|
|
260
|
-
MakeStatus();
|
|
261
|
-
}
|
|
262
|
-
|
|
263
332
|
template <typename U,
|
|
264
333
|
absl::enable_if_t<std::is_constructible<absl::Status, U&&>::value,
|
|
265
334
|
int> = 0>
|
|
@@ -279,7 +348,7 @@ class StatusOrData {
|
|
|
279
348
|
StatusOrData& operator=(StatusOrData&& other) {
|
|
280
349
|
if (this == &other) return *this;
|
|
281
350
|
if (other.ok())
|
|
282
|
-
Assign(
|
|
351
|
+
Assign(other.MaybeMoveData());
|
|
283
352
|
else
|
|
284
353
|
AssignStatus(std::move(other.status_));
|
|
285
354
|
return *this;
|
|
@@ -288,7 +357,9 @@ class StatusOrData {
|
|
|
288
357
|
~StatusOrData() {
|
|
289
358
|
if (ok()) {
|
|
290
359
|
status_.~Status();
|
|
291
|
-
|
|
360
|
+
if constexpr (!std::is_trivially_destructible_v<T>) {
|
|
361
|
+
data_.~T();
|
|
362
|
+
}
|
|
292
363
|
} else {
|
|
293
364
|
status_.~Status();
|
|
294
365
|
}
|
|
@@ -329,11 +400,13 @@ class StatusOrData {
|
|
|
329
400
|
// When T is const, we need some non-const object we can cast to void* for
|
|
330
401
|
// the placement new. dummy_ is that object.
|
|
331
402
|
Dummy dummy_;
|
|
332
|
-
T data_;
|
|
403
|
+
std::conditional_t<std::is_reference_v<T>, Reference<T>, T> data_;
|
|
333
404
|
};
|
|
334
405
|
|
|
335
406
|
void Clear() {
|
|
336
|
-
if (
|
|
407
|
+
if constexpr (!std::is_trivially_destructible_v<T>) {
|
|
408
|
+
if (ok()) data_.~T();
|
|
409
|
+
}
|
|
337
410
|
}
|
|
338
411
|
|
|
339
412
|
void EnsureOk() const {
|
|
@@ -348,7 +421,8 @@ class StatusOrData {
|
|
|
348
421
|
// argument.
|
|
349
422
|
template <typename... Arg>
|
|
350
423
|
void MakeValue(Arg&&... arg) {
|
|
351
|
-
internal_statusor::PlacementNew<
|
|
424
|
+
internal_statusor::PlacementNew<decltype(data_)>(&dummy_,
|
|
425
|
+
std::forward<Arg>(arg)...);
|
|
352
426
|
}
|
|
353
427
|
|
|
354
428
|
// Construct the status (ie. status_) through placement new with the passed
|
|
@@ -358,6 +432,94 @@ class StatusOrData {
|
|
|
358
432
|
internal_statusor::PlacementNew<Status>(&status_,
|
|
359
433
|
std::forward<Args>(args)...);
|
|
360
434
|
}
|
|
435
|
+
|
|
436
|
+
template <typename U>
|
|
437
|
+
T ValueOrImpl(U&& default_value) const& {
|
|
438
|
+
if (ok()) {
|
|
439
|
+
return data_;
|
|
440
|
+
}
|
|
441
|
+
return std::forward<U>(default_value);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
template <typename U>
|
|
445
|
+
T ValueOrImpl(U&& default_value) && {
|
|
446
|
+
if (ok()) {
|
|
447
|
+
return std::move(data_);
|
|
448
|
+
}
|
|
449
|
+
return std::forward<U>(default_value);
|
|
450
|
+
}
|
|
451
|
+
};
|
|
452
|
+
|
|
453
|
+
[[noreturn]] void ThrowBadStatusOrAccess(absl::Status status);
|
|
454
|
+
|
|
455
|
+
template <typename T>
|
|
456
|
+
struct OperatorBase {
|
|
457
|
+
auto& self() const { return static_cast<const StatusOr<T>&>(*this); }
|
|
458
|
+
auto& self() { return static_cast<StatusOr<T>&>(*this); }
|
|
459
|
+
|
|
460
|
+
const T& operator*() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
461
|
+
self().EnsureOk();
|
|
462
|
+
return self().data_;
|
|
463
|
+
}
|
|
464
|
+
T& operator*() & ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
465
|
+
self().EnsureOk();
|
|
466
|
+
return self().data_;
|
|
467
|
+
}
|
|
468
|
+
const T&& operator*() const&& ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
469
|
+
self().EnsureOk();
|
|
470
|
+
return std::move(self().data_);
|
|
471
|
+
}
|
|
472
|
+
T&& operator*() && ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
473
|
+
self().EnsureOk();
|
|
474
|
+
return std::move(self().data_);
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
const T& value() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
478
|
+
if (!self().ok()) internal_statusor::ThrowBadStatusOrAccess(self().status_);
|
|
479
|
+
return self().data_;
|
|
480
|
+
}
|
|
481
|
+
T& value() & ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
482
|
+
if (!self().ok()) internal_statusor::ThrowBadStatusOrAccess(self().status_);
|
|
483
|
+
return self().data_;
|
|
484
|
+
}
|
|
485
|
+
const T&& value() const&& ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
486
|
+
if (!self().ok()) {
|
|
487
|
+
internal_statusor::ThrowBadStatusOrAccess(std::move(self().status_));
|
|
488
|
+
}
|
|
489
|
+
return std::move(self().data_);
|
|
490
|
+
}
|
|
491
|
+
T&& value() && ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
492
|
+
if (!self().ok()) {
|
|
493
|
+
internal_statusor::ThrowBadStatusOrAccess(std::move(self().status_));
|
|
494
|
+
}
|
|
495
|
+
return std::move(self().data_);
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
const T* absl_nonnull operator->() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
499
|
+
return std::addressof(**this);
|
|
500
|
+
}
|
|
501
|
+
T* absl_nonnull operator->() ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
502
|
+
return std::addressof(**this);
|
|
503
|
+
}
|
|
504
|
+
};
|
|
505
|
+
|
|
506
|
+
template <typename T>
|
|
507
|
+
struct OperatorBase<T&> {
|
|
508
|
+
auto& self() const { return static_cast<const StatusOr<T&>&>(*this); }
|
|
509
|
+
|
|
510
|
+
T& operator*() const {
|
|
511
|
+
self().EnsureOk();
|
|
512
|
+
return self().data_;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
T& value() const {
|
|
516
|
+
if (!self().ok()) internal_statusor::ThrowBadStatusOrAccess(self().status_);
|
|
517
|
+
return self().data_;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
T* absl_nonnull operator->() const {
|
|
521
|
+
return std::addressof(**this);
|
|
522
|
+
}
|
|
361
523
|
};
|
|
362
524
|
|
|
363
525
|
// Helper base classes to allow implicitly deleted constructors and assignment
|
|
@@ -400,8 +562,9 @@ struct MoveCtorBase<T, false> {
|
|
|
400
562
|
MoveCtorBase& operator=(MoveCtorBase&&) = default;
|
|
401
563
|
};
|
|
402
564
|
|
|
403
|
-
template <typename T, bool = std::is_copy_constructible<T>::value&&
|
|
404
|
-
|
|
565
|
+
template <typename T, bool = (std::is_copy_constructible<T>::value &&
|
|
566
|
+
std::is_copy_assignable<T>::value) ||
|
|
567
|
+
std::is_reference_v<T>>
|
|
405
568
|
struct CopyAssignBase {
|
|
406
569
|
CopyAssignBase() = default;
|
|
407
570
|
CopyAssignBase(const CopyAssignBase&) = default;
|
|
@@ -419,8 +582,9 @@ struct CopyAssignBase<T, false> {
|
|
|
419
582
|
CopyAssignBase& operator=(CopyAssignBase&&) = default;
|
|
420
583
|
};
|
|
421
584
|
|
|
422
|
-
template <typename T, bool = std::is_move_constructible<T>::value&&
|
|
423
|
-
|
|
585
|
+
template <typename T, bool = (std::is_move_constructible<T>::value &&
|
|
586
|
+
std::is_move_assignable<T>::value) ||
|
|
587
|
+
std::is_reference_v<T>>
|
|
424
588
|
struct MoveAssignBase {
|
|
425
589
|
MoveAssignBase() = default;
|
|
426
590
|
MoveAssignBase(const MoveAssignBase&) = default;
|
|
@@ -438,8 +602,6 @@ struct MoveAssignBase<T, false> {
|
|
|
438
602
|
MoveAssignBase& operator=(MoveAssignBase&&) = delete;
|
|
439
603
|
};
|
|
440
604
|
|
|
441
|
-
[[noreturn]] void ThrowBadStatusOrAccess(absl::Status status);
|
|
442
|
-
|
|
443
605
|
// Used to introduce jitter into the output of printing functions for
|
|
444
606
|
// `StatusOr` (i.e. `AbslStringify` and `operator<<`).
|
|
445
607
|
class StringifyRandom {
|
|
@@ -91,16 +91,12 @@ std::ostream& operator<<(std::ostream& os, StatusCode code) {
|
|
|
91
91
|
return os << StatusCodeToString(code);
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
|
|
94
|
+
const std::string* absl_nonnull Status::EmptyString() {
|
|
95
95
|
static const absl::NoDestructor<std::string> kEmpty;
|
|
96
96
|
return kEmpty.get();
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
|
|
100
|
-
constexpr const char Status::kMovedFromString[];
|
|
101
|
-
#endif
|
|
102
|
-
|
|
103
|
-
absl::Nonnull<const std::string*> Status::MovedFromString() {
|
|
99
|
+
const std::string* absl_nonnull Status::MovedFromString() {
|
|
104
100
|
static const absl::NoDestructor<std::string> kMovedFrom(kMovedFromString);
|
|
105
101
|
return kMovedFrom.get();
|
|
106
102
|
}
|
|
@@ -112,7 +108,7 @@ Status::Status(absl::StatusCode code, absl::string_view msg)
|
|
|
112
108
|
}
|
|
113
109
|
}
|
|
114
110
|
|
|
115
|
-
|
|
111
|
+
status_internal::StatusRep* absl_nonnull Status::PrepareToModify(
|
|
116
112
|
uintptr_t rep) {
|
|
117
113
|
if (IsInlined(rep)) {
|
|
118
114
|
return new status_internal::StatusRep(InlinedRepToCode(rep),
|
|
@@ -410,7 +406,7 @@ Status ErrnoToStatus(int error_number, absl::string_view message) {
|
|
|
410
406
|
MessageForErrnoToStatus(error_number, message));
|
|
411
407
|
}
|
|
412
408
|
|
|
413
|
-
|
|
409
|
+
const char* absl_nonnull StatusMessageAsCStr(const Status& status) {
|
|
414
410
|
// As an internal implementation detail, we guarantee that if status.message()
|
|
415
411
|
// is non-empty, then the resulting string_view is null terminated.
|
|
416
412
|
auto sv_message = status.message();
|
|
@@ -623,15 +623,15 @@ class ABSL_ATTRIBUTE_TRIVIAL_ABI Status final {
|
|
|
623
623
|
|
|
624
624
|
// REQUIRES: !ok()
|
|
625
625
|
// Ensures rep is not inlined or shared with any other Status.
|
|
626
|
-
static
|
|
626
|
+
static status_internal::StatusRep* absl_nonnull PrepareToModify(
|
|
627
627
|
uintptr_t rep);
|
|
628
628
|
|
|
629
629
|
// MSVC 14.0 limitation requires the const.
|
|
630
630
|
static constexpr const char kMovedFromString[] =
|
|
631
631
|
"Status accessed after move.";
|
|
632
632
|
|
|
633
|
-
static
|
|
634
|
-
static
|
|
633
|
+
static const std::string* absl_nonnull EmptyString();
|
|
634
|
+
static const std::string* absl_nonnull MovedFromString();
|
|
635
635
|
|
|
636
636
|
// Returns whether rep contains an inlined representation.
|
|
637
637
|
// See rep_ for details.
|
|
@@ -649,8 +649,8 @@ class ABSL_ATTRIBUTE_TRIVIAL_ABI Status final {
|
|
|
649
649
|
|
|
650
650
|
// Converts between StatusRep* and the external uintptr_t representation used
|
|
651
651
|
// by rep_. See rep_ for details.
|
|
652
|
-
static uintptr_t PointerToRep(
|
|
653
|
-
static
|
|
652
|
+
static uintptr_t PointerToRep(status_internal::StatusRep* absl_nonnull r);
|
|
653
|
+
static const status_internal::StatusRep* absl_nonnull RepToPointer(
|
|
654
654
|
uintptr_t r);
|
|
655
655
|
|
|
656
656
|
static std::string ToStringSlow(uintptr_t rep, StatusToStringMode mode);
|
|
@@ -902,14 +902,14 @@ constexpr uintptr_t Status::MovedFromRep() {
|
|
|
902
902
|
return CodeToInlinedRep(absl::StatusCode::kInternal) | 2;
|
|
903
903
|
}
|
|
904
904
|
|
|
905
|
-
inline
|
|
905
|
+
inline const status_internal::StatusRep* absl_nonnull Status::RepToPointer(
|
|
906
906
|
uintptr_t rep) {
|
|
907
907
|
assert(!IsInlined(rep));
|
|
908
908
|
return reinterpret_cast<const status_internal::StatusRep*>(rep);
|
|
909
909
|
}
|
|
910
910
|
|
|
911
911
|
inline uintptr_t Status::PointerToRep(
|
|
912
|
-
|
|
912
|
+
status_internal::StatusRep* absl_nonnull rep) {
|
|
913
913
|
return reinterpret_cast<uintptr_t>(rep);
|
|
914
914
|
}
|
|
915
915
|
|
|
@@ -934,7 +934,7 @@ inline Status CancelledError() { return Status(absl::StatusCode::kCancelled); }
|
|
|
934
934
|
// If the status's message is empty, the empty string is returned.
|
|
935
935
|
//
|
|
936
936
|
// StatusMessageAsCStr exists for C support. Use `status.message()` in C++.
|
|
937
|
-
|
|
937
|
+
const char* absl_nonnull StatusMessageAsCStr(
|
|
938
938
|
const Status& status ABSL_ATTRIBUTE_LIFETIME_BOUND);
|
|
939
939
|
|
|
940
940
|
ABSL_NAMESPACE_END
|
package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
1
|
+
// Copyright 2025 The Abseil Authors.
|
|
2
2
|
//
|
|
3
3
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
// you may not use this file except in compliance with the License.
|
|
@@ -12,16 +12,26 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
-
#include
|
|
15
|
+
#include <utility>
|
|
16
|
+
#include "absl/status/status.h"
|
|
17
|
+
#include "benchmark/benchmark.h"
|
|
16
18
|
|
|
17
|
-
namespace
|
|
18
|
-
ABSL_NAMESPACE_BEGIN
|
|
19
|
-
namespace inline_variable_testing_internal {
|
|
19
|
+
namespace {
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
void BM_CreateOk(benchmark::State& state) {
|
|
22
|
+
for (auto _ : state) {
|
|
23
|
+
absl::Status s; // ok.
|
|
24
|
+
benchmark::DoNotOptimize(s);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
BENCHMARK(BM_CreateOk);
|
|
22
28
|
|
|
23
|
-
|
|
29
|
+
void BM_CreateBad(benchmark::State& state) {
|
|
30
|
+
for (auto _ : state) {
|
|
31
|
+
absl::Status s(absl::StatusCode::kInvalidArgument, "message");
|
|
32
|
+
benchmark::DoNotOptimize(s);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
BENCHMARK(BM_CreateBad);
|
|
24
36
|
|
|
25
|
-
} // namespace
|
|
26
|
-
ABSL_NAMESPACE_END
|
|
27
|
-
} // namespace absl
|
|
37
|
+
} // namespace
|
|
@@ -17,6 +17,9 @@
|
|
|
17
17
|
// -----------------------------------------------------------------------------
|
|
18
18
|
#include "absl/status/status_matchers.h"
|
|
19
19
|
|
|
20
|
+
#include <string>
|
|
21
|
+
#include <vector>
|
|
22
|
+
|
|
20
23
|
#include "gmock/gmock.h"
|
|
21
24
|
#include "gtest/gtest-spi.h"
|
|
22
25
|
#include "gtest/gtest.h"
|
|
@@ -29,7 +32,12 @@ namespace {
|
|
|
29
32
|
using ::absl_testing::IsOk;
|
|
30
33
|
using ::absl_testing::IsOkAndHolds;
|
|
31
34
|
using ::absl_testing::StatusIs;
|
|
35
|
+
using ::testing::ElementsAre;
|
|
36
|
+
using ::testing::Eq;
|
|
32
37
|
using ::testing::Gt;
|
|
38
|
+
using ::testing::MatchesRegex;
|
|
39
|
+
using ::testing::Not;
|
|
40
|
+
using ::testing::Ref;
|
|
33
41
|
|
|
34
42
|
TEST(StatusMatcherTest, StatusIsOk) { EXPECT_THAT(absl::OkStatus(), IsOk()); }
|
|
35
43
|
|
|
@@ -66,6 +74,13 @@ TEST(StatusMatcherTest, IsOkAndHoldsFailure) {
|
|
|
66
74
|
"actual");
|
|
67
75
|
}
|
|
68
76
|
|
|
77
|
+
template <typename MatcherType, typename Value>
|
|
78
|
+
std::string Explain(const MatcherType& m, const Value& x) {
|
|
79
|
+
::testing::StringMatchResultListener listener;
|
|
80
|
+
ExplainMatchResult(m, x, &listener);
|
|
81
|
+
return listener.str();
|
|
82
|
+
}
|
|
83
|
+
|
|
69
84
|
TEST(StatusMatcherTest, StatusIs) {
|
|
70
85
|
absl::Status unknown = absl::UnknownError("unbekannt");
|
|
71
86
|
absl::Status invalid = absl::InvalidArgumentError("ungueltig");
|
|
@@ -78,6 +93,20 @@ TEST(StatusMatcherTest, StatusIs) {
|
|
|
78
93
|
EXPECT_THAT(invalid, StatusIs(3));
|
|
79
94
|
EXPECT_THAT(invalid,
|
|
80
95
|
StatusIs(absl::StatusCode::kInvalidArgument, "ungueltig"));
|
|
96
|
+
|
|
97
|
+
auto m = StatusIs(absl::StatusCode::kInternal, "internal error");
|
|
98
|
+
EXPECT_THAT(
|
|
99
|
+
::testing::DescribeMatcher<absl::Status>(m),
|
|
100
|
+
MatchesRegex(
|
|
101
|
+
"has a status code that .*, and has an error message that .*"));
|
|
102
|
+
EXPECT_THAT(
|
|
103
|
+
::testing::DescribeMatcher<absl::Status>(m, /*negation=*/true),
|
|
104
|
+
MatchesRegex(
|
|
105
|
+
"either has a status code that .*, or has an error message that .*"));
|
|
106
|
+
EXPECT_THAT(Explain(m, absl::InvalidArgumentError("internal error")),
|
|
107
|
+
Eq("whose status code is wrong"));
|
|
108
|
+
EXPECT_THAT(Explain(m, absl::InternalError("unexpected error")),
|
|
109
|
+
Eq("whose error message is wrong"));
|
|
81
110
|
}
|
|
82
111
|
|
|
83
112
|
TEST(StatusMatcherTest, StatusOrIs) {
|
|
@@ -94,6 +123,23 @@ TEST(StatusMatcherTest, StatusOrIs) {
|
|
|
94
123
|
EXPECT_THAT(invalid, StatusIs(3));
|
|
95
124
|
EXPECT_THAT(invalid,
|
|
96
125
|
StatusIs(absl::StatusCode::kInvalidArgument, "ungueltig"));
|
|
126
|
+
|
|
127
|
+
auto m = StatusIs(absl::StatusCode::kInternal, "internal error");
|
|
128
|
+
EXPECT_THAT(
|
|
129
|
+
::testing::DescribeMatcher<absl::StatusOr<int>>(m),
|
|
130
|
+
MatchesRegex(
|
|
131
|
+
"has a status code that .*, and has an error message that .*"));
|
|
132
|
+
EXPECT_THAT(
|
|
133
|
+
::testing::DescribeMatcher<absl::StatusOr<int>>(m, /*negation=*/true),
|
|
134
|
+
MatchesRegex(
|
|
135
|
+
"either has a status code that .*, or has an error message that .*"));
|
|
136
|
+
EXPECT_THAT(Explain(m, absl::StatusOr<int>(57)), Eq("which is OK"));
|
|
137
|
+
EXPECT_THAT(Explain(m, absl::StatusOr<int>(
|
|
138
|
+
absl::InvalidArgumentError("internal error"))),
|
|
139
|
+
Eq("whose status code is wrong"));
|
|
140
|
+
EXPECT_THAT(
|
|
141
|
+
Explain(m, absl::StatusOr<int>(absl::InternalError("unexpected error"))),
|
|
142
|
+
Eq("whose error message is wrong"));
|
|
97
143
|
}
|
|
98
144
|
|
|
99
145
|
TEST(StatusMatcherTest, StatusIsFailure) {
|
|
@@ -116,4 +162,23 @@ TEST(StatusMatcherTest, StatusIsFailure) {
|
|
|
116
162
|
"ungueltig");
|
|
117
163
|
}
|
|
118
164
|
|
|
165
|
+
TEST(StatusMatcherTest, ReferencesWork) {
|
|
166
|
+
int i = 17;
|
|
167
|
+
int j = 19;
|
|
168
|
+
EXPECT_THAT(absl::StatusOr<int&>(i), IsOkAndHolds(17));
|
|
169
|
+
EXPECT_THAT(absl::StatusOr<int&>(i), Not(IsOkAndHolds(19)));
|
|
170
|
+
EXPECT_THAT(absl::StatusOr<const int&>(i), IsOkAndHolds(17));
|
|
171
|
+
|
|
172
|
+
// Reference testing works as expected.
|
|
173
|
+
EXPECT_THAT(absl::StatusOr<int&>(i), IsOkAndHolds(Ref(i)));
|
|
174
|
+
EXPECT_THAT(absl::StatusOr<int&>(i), Not(IsOkAndHolds(Ref(j))));
|
|
175
|
+
|
|
176
|
+
// Try a more complex one.
|
|
177
|
+
std::vector<std::string> vec = {"A", "B", "C"};
|
|
178
|
+
EXPECT_THAT(absl::StatusOr<std::vector<std::string>&>(vec),
|
|
179
|
+
IsOkAndHolds(ElementsAre("A", "B", "C")));
|
|
180
|
+
EXPECT_THAT(absl::StatusOr<std::vector<std::string>&>(vec),
|
|
181
|
+
Not(IsOkAndHolds(ElementsAre("A", "X", "C"))));
|
|
182
|
+
}
|
|
183
|
+
|
|
119
184
|
} // namespace
|
|
@@ -35,8 +35,8 @@ namespace status_internal {
|
|
|
35
35
|
// NOTE: This is an internal API and the design is subject to change in the
|
|
36
36
|
// future in a non-backward-compatible way. Since it's only meant for debugging
|
|
37
37
|
// purpose, you should not rely on it in any critical logic.
|
|
38
|
-
using StatusPayloadPrinter = absl::
|
|
39
|
-
absl::string_view, const absl::Cord&)
|
|
38
|
+
using StatusPayloadPrinter = absl::optional<std::string> (*absl_nullable)(
|
|
39
|
+
absl::string_view, const absl::Cord&);
|
|
40
40
|
|
|
41
41
|
// Sets the global payload printer. Only one printer should be set per process.
|
|
42
42
|
// If multiple printers are set, it's undefined which one will be used.
|
|
@@ -55,7 +55,7 @@ BadStatusOrAccess& BadStatusOrAccess::operator=(BadStatusOrAccess&& other) {
|
|
|
55
55
|
BadStatusOrAccess::BadStatusOrAccess(BadStatusOrAccess&& other)
|
|
56
56
|
: status_(std::move(other.status_)) {}
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
const char* absl_nonnull BadStatusOrAccess::what() const noexcept {
|
|
59
59
|
InitWhat();
|
|
60
60
|
return what_.c_str();
|
|
61
61
|
}
|
|
@@ -70,7 +70,7 @@ void BadStatusOrAccess::InitWhat() const {
|
|
|
70
70
|
|
|
71
71
|
namespace internal_statusor {
|
|
72
72
|
|
|
73
|
-
void Helper::HandleInvalidStatusCtorArg(absl::
|
|
73
|
+
void Helper::HandleInvalidStatusCtorArg(absl::Status* absl_nonnull status) {
|
|
74
74
|
const char* kMessage =
|
|
75
75
|
"An OK status is not a valid constructor argument to StatusOr<T>";
|
|
76
76
|
#ifdef NDEBUG
|