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
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# RE2, a regular expression library
|
|
2
|
+
|
|
3
|
+
RE2 is an efficient, principled regular expression library
|
|
4
|
+
that has been used in production at Google and many other places
|
|
5
|
+
since 2006.
|
|
6
|
+
|
|
7
|
+
_**Safety is RE2's primary goal.**_
|
|
8
|
+
|
|
9
|
+
RE2 was designed and implemented with an explicit goal of being able
|
|
10
|
+
to handle regular expressions from untrusted users without risk.
|
|
11
|
+
One of its primary guarantees is that the match time is linear in the
|
|
12
|
+
length of the input string. It was also written with production concerns in mind:
|
|
13
|
+
the parser, the compiler and the execution engines limit their memory usage
|
|
14
|
+
by working within a configurable budget—failing gracefully when exhausted—and
|
|
15
|
+
they avoid stack overflow by eschewing recursion.
|
|
16
|
+
|
|
17
|
+
It is not a goal to be faster than all other engines under all circumstances.
|
|
18
|
+
Although RE2 guarantees a running time that is asymptotically linear in
|
|
19
|
+
the length of the input, more complex expressions may incur larger constant factors;
|
|
20
|
+
longer expressions increase the overhead required to handle those expressions safely.
|
|
21
|
+
In a sense, RE2 is pessimistic where a backtracking engine is optimistic:
|
|
22
|
+
A backtracking engine tests each alternative sequentially, making it fast when the first alternative is common.
|
|
23
|
+
By contrast RE2 evaluates all alternatives in parallel, avoiding the performance penalty for the last alternative,
|
|
24
|
+
at the cost of some overhead. This pessimism is what makes RE2 secure.
|
|
25
|
+
|
|
26
|
+
It is also not a goal to implement all of the features offered by Perl, PCRE and other engines.
|
|
27
|
+
As a matter of principle, RE2 does not support constructs for which only backtracking solutions are known to exist.
|
|
28
|
+
Thus, backreferences and look-around assertions are not supported.
|
|
29
|
+
|
|
30
|
+
For more information, please refer to Russ Cox's articles on regular expression theory and practice:
|
|
31
|
+
|
|
32
|
+
* [Regular Expression Matching Can Be Simple And Fast](https://swtch.com/~rsc/regexp/regexp1.html)
|
|
33
|
+
* [Regular Expression Matching: the Virtual Machine Approach](https://swtch.com/~rsc/regexp/regexp2.html)
|
|
34
|
+
* [Regular Expression Matching in the Wild](https://swtch.com/~rsc/regexp/regexp3.html)
|
|
35
|
+
|
|
36
|
+
### Syntax
|
|
37
|
+
|
|
38
|
+
In POSIX mode, RE2 accepts standard POSIX (egrep) syntax regular expressions.
|
|
39
|
+
In Perl mode, RE2 accepts most Perl operators. The only excluded ones are
|
|
40
|
+
those that require backtracking (and its potential for exponential runtime)
|
|
41
|
+
to implement. These include backreferences (submatching is still okay)
|
|
42
|
+
and generalized assertions.
|
|
43
|
+
The [Syntax wiki page](https://github.com/google/re2/wiki/Syntax)
|
|
44
|
+
documents the supported Perl-mode syntax in detail.
|
|
45
|
+
The default is Perl mode.
|
|
46
|
+
|
|
47
|
+
### C++ API
|
|
48
|
+
|
|
49
|
+
RE2's native language is C++, although there are [ports and wrappers](#ports-and-wrappers) listed below.
|
|
50
|
+
|
|
51
|
+
#### Matching Interface
|
|
52
|
+
|
|
53
|
+
There are two basic operators:
|
|
54
|
+
`RE2::FullMatch` requires the regexp to match the entire input text, and
|
|
55
|
+
`RE2::PartialMatch` looks for a match for a substring of the input text,
|
|
56
|
+
returning the leftmost-longest match in POSIX mode and the
|
|
57
|
+
same match that Perl would have chosen in Perl mode.
|
|
58
|
+
|
|
59
|
+
Examples:
|
|
60
|
+
|
|
61
|
+
```cpp
|
|
62
|
+
assert(RE2::FullMatch("hello", "h.*o"))
|
|
63
|
+
assert(!RE2::FullMatch("hello", "e"))
|
|
64
|
+
|
|
65
|
+
assert(RE2::PartialMatch("hello", "h.*o"))
|
|
66
|
+
assert(RE2::PartialMatch("hello", "e"))
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
#### Submatch Extraction
|
|
70
|
+
|
|
71
|
+
Both matching functions take additional arguments in which submatches will be stored.
|
|
72
|
+
The argument can be a `string*`, or an integer type, or the type `absl::string_view*`.
|
|
73
|
+
(The `absl::string_view` type is very similar to the `std::string_view` type,
|
|
74
|
+
but for historical reasons, RE2 uses the former.)
|
|
75
|
+
A `string_view` is a pointer to the original input text, along with a count.
|
|
76
|
+
It behaves like a string but doesn't carry its own storage.
|
|
77
|
+
Like when using a pointer, when using a `string_view`
|
|
78
|
+
you must be careful not to use it once the original text has been deleted or gone out of scope.
|
|
79
|
+
|
|
80
|
+
Examples:
|
|
81
|
+
|
|
82
|
+
```cpp
|
|
83
|
+
// Successful parsing.
|
|
84
|
+
int i;
|
|
85
|
+
string s;
|
|
86
|
+
assert(RE2::FullMatch("ruby:1234", "(\\w+):(\\d+)", &s, &i));
|
|
87
|
+
assert(s == "ruby");
|
|
88
|
+
assert(i == 1234);
|
|
89
|
+
|
|
90
|
+
// Fails: "ruby" cannot be parsed as an integer.
|
|
91
|
+
assert(!RE2::FullMatch("ruby", "(.+)", &i));
|
|
92
|
+
|
|
93
|
+
// Success; does not extract the number.
|
|
94
|
+
assert(RE2::FullMatch("ruby:1234", "(\\w+):(\\d+)", &s));
|
|
95
|
+
|
|
96
|
+
// Success; skips NULL argument.
|
|
97
|
+
assert(RE2::FullMatch("ruby:1234", "(\\w+):(\\d+)", (void*)NULL, &i));
|
|
98
|
+
|
|
99
|
+
// Fails: integer overflow keeps value from being stored in i.
|
|
100
|
+
assert(!RE2::FullMatch("ruby:123456789123", "(\\w+):(\\d+)", &s, &i));
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### Pre-Compiled Regular Expressions
|
|
104
|
+
|
|
105
|
+
The examples above all recompile the regular expression on each call.
|
|
106
|
+
Instead, you can compile it once to an RE2 object and reuse that object for each call.
|
|
107
|
+
|
|
108
|
+
Example:
|
|
109
|
+
```cpp
|
|
110
|
+
RE2 re("(\\w+):(\\d+)");
|
|
111
|
+
assert(re.ok()); // compiled; if not, see re.error();
|
|
112
|
+
|
|
113
|
+
assert(RE2::FullMatch("ruby:1234", re, &s, &i));
|
|
114
|
+
assert(RE2::FullMatch("ruby:1234", re, &s));
|
|
115
|
+
assert(RE2::FullMatch("ruby:1234", re, (void*)NULL, &i));
|
|
116
|
+
assert(!RE2::FullMatch("ruby:123456789123", re, &s, &i));
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
#### Options
|
|
120
|
+
|
|
121
|
+
The constructor takes an optional second argument that can
|
|
122
|
+
be used to change RE2's default options.
|
|
123
|
+
For example, `RE2::Quiet` silences the error messages that are
|
|
124
|
+
usually printed when a regular expression fails to parse:
|
|
125
|
+
|
|
126
|
+
```cpp
|
|
127
|
+
RE2 re("(ab", RE2::Quiet); // don't write to stderr for parser failure
|
|
128
|
+
assert(!re.ok()); // can check re.error() for details
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Other useful predefined options are `Latin1` (disable UTF-8) and `POSIX`
|
|
132
|
+
(use POSIX syntax and leftmost longest matching).
|
|
133
|
+
|
|
134
|
+
You can also declare your own `RE2::Options` object and then configure it as you like.
|
|
135
|
+
See the [header](https://github.com/google/re2/blob/main/re2/re2.h) for the full set of options.
|
|
136
|
+
|
|
137
|
+
#### Unicode Normalization
|
|
138
|
+
|
|
139
|
+
RE2 operates on Unicode code points: it makes no attempt at normalization.
|
|
140
|
+
For example, the regular expression /ü/ (U+00FC, u with diaeresis)
|
|
141
|
+
does not match the input "ü" (U+0075 U+0308, u followed by combining diaeresis).
|
|
142
|
+
Normalization is a long, involved topic.
|
|
143
|
+
The simplest solution, if you need such matches, is to normalize both the regular expressions
|
|
144
|
+
and the input in a preprocessing step before using RE2.
|
|
145
|
+
For more details on the general topic, see <https://www.unicode.org/reports/tr15/>.
|
|
146
|
+
|
|
147
|
+
#### Additional Tips and Tricks
|
|
148
|
+
|
|
149
|
+
For advanced usage, like constructing your own argument lists,
|
|
150
|
+
or using RE2 as a lexer, or parsing hex, octal, and C-radix numbers,
|
|
151
|
+
see [re2.h](https://github.com/google/re2/blob/main/re2/re2.h).
|
|
152
|
+
|
|
153
|
+
### Installation
|
|
154
|
+
|
|
155
|
+
RE2 can be built and installed using GNU make, CMake, or Bazel.
|
|
156
|
+
The simplest installation instructions are:
|
|
157
|
+
|
|
158
|
+
make
|
|
159
|
+
make test
|
|
160
|
+
make benchmark
|
|
161
|
+
make install
|
|
162
|
+
make testinstall
|
|
163
|
+
|
|
164
|
+
Building RE2 requires a C++17 compiler and the [Abseil](https://github.com/abseil/abseil-cpp) library.
|
|
165
|
+
Building the tests and benchmarks requires
|
|
166
|
+
[GoogleTest](https://github.com/google/googletest)
|
|
167
|
+
and [Benchmark](https://github.com/google/benchmark).
|
|
168
|
+
To obtain those:
|
|
169
|
+
|
|
170
|
+
- Linux: `apt install libabsl-dev libgtest-dev libbenchmark-dev`
|
|
171
|
+
- macOS: `brew install abseil googletest google-benchmark pkg-config-wrapper`
|
|
172
|
+
- Windows: `vcpkg install abseil gtest benchmark` \
|
|
173
|
+
or `vcpkg add port abseil gtest benchmark`
|
|
174
|
+
|
|
175
|
+
Once those are installed, the build has to be able to find them.
|
|
176
|
+
If the standard Makefile has trouble, then switching to CMake can help:
|
|
177
|
+
|
|
178
|
+
rm -rf build
|
|
179
|
+
cmake -DRE2_TEST=ON -DRE2_BENCHMARK=ON -S . -B build
|
|
180
|
+
cd build
|
|
181
|
+
make
|
|
182
|
+
make test
|
|
183
|
+
make install
|
|
184
|
+
|
|
185
|
+
When using CMake, with benchmarks enabled, `make test` builds and runs test binaries
|
|
186
|
+
and builds a `regexp_benchmark` binary but does not run it.
|
|
187
|
+
If you don't need the tests or benchmarks at all, you can omit the corresponding `-D` arguments,
|
|
188
|
+
and then you don't need the GoogleTest or Benchmark dependencies either.
|
|
189
|
+
|
|
190
|
+
Another useful option is `-DRE2_USE_ICU=ON`, which adds a dependency on the
|
|
191
|
+
ICU Unicode library but also extends the list of property names available in the `\p` and `\P` patterns.
|
|
192
|
+
|
|
193
|
+
CMake can also be used to generate Visual Studio and Xcode projects, as well as
|
|
194
|
+
Cygwin, MinGW, and MSYS makefiles.
|
|
195
|
+
|
|
196
|
+
- Visual Studio users: You need Visual Studio 2019 or later.
|
|
197
|
+
- Cygwin users: You must run CMake from the Cygwin command line, not the Windows command line.
|
|
198
|
+
|
|
199
|
+
If you are adding RE2 to your own CMake project,
|
|
200
|
+
CMake has two ways to use a dependency: `add_subdirectory()`,
|
|
201
|
+
which is when the dependency's **_sources_** are in a subdirectory of your project;
|
|
202
|
+
and `find_package()`, which is when the dependency's
|
|
203
|
+
**_binaries_** have been built and installed somewhere on your system.
|
|
204
|
+
The Abseil documentation walks through the former [here](https://abseil.io/docs/cpp/quickstart-cmake)
|
|
205
|
+
versus the latter [here](https://abseil.io/docs/cpp/tools/cmake-installs).
|
|
206
|
+
Once you get Abseil working, getting RE2 working will be a very similar process and,
|
|
207
|
+
either way, `target_link_libraries(… re2::re2)` should Just Work™.
|
|
208
|
+
|
|
209
|
+
If you are using [Bazel](https://bazel.io), it will handle the dependencies for you,
|
|
210
|
+
although you still need to download Bazel,
|
|
211
|
+
which you can do with [Bazelisk](https://github.com/bazelbuild/bazelisk).
|
|
212
|
+
|
|
213
|
+
go install github.com/bazelbuild/bazelisk@latest
|
|
214
|
+
# or on mac: brew install bazelisk
|
|
215
|
+
|
|
216
|
+
bazelisk build :all
|
|
217
|
+
bazelisk test :all
|
|
218
|
+
|
|
219
|
+
If you are using RE2 from another project, you need to make sure you are
|
|
220
|
+
using at least C++17.
|
|
221
|
+
See the RE2 [.bazelrc](https://github.com/google/re2/blob/main/.bazelrc) file for an example.
|
|
222
|
+
|
|
223
|
+
### Ports and Wrappers
|
|
224
|
+
|
|
225
|
+
RE2 is implemented in C++.
|
|
226
|
+
|
|
227
|
+
The official Python wrapper is [in the `python` directory](https://github.com/google/re2/tree/main/python)
|
|
228
|
+
and [published on PyPI as `google-re2`](https://pypi.org/project/google-re2/).
|
|
229
|
+
Note that there is also a PyPI `re2` but it is not by the RE2 authors and is unmaintained. Use `google-re2`.
|
|
230
|
+
|
|
231
|
+
There are also other unofficial wrappers:
|
|
232
|
+
|
|
233
|
+
- A C wrapper is at <https://github.com/marcomaggi/cre2/>.
|
|
234
|
+
- A D wrapper is at <https://github.com/ShigekiKarita/re2d/> and [on DUB](https://code.dlang.org/packages/re2d).
|
|
235
|
+
- An Erlang wrapper is at <https://github.com/dukesoferl/re2/> and [on Hex](https://hex.pm/packages/re2).
|
|
236
|
+
- An Inferno wrapper is at <https://github.com/powerman/inferno-re2/>.
|
|
237
|
+
- A Node.js wrapper is at <https://github.com/uhop/node-re2/> and [on NPM](https://www.npmjs.com/package/re2).
|
|
238
|
+
- An OCaml wrapper is at <https://github.com/janestreet/re2/> and [on OPAM](https://opam.ocaml.org/packages/re2/).
|
|
239
|
+
- A Perl wrapper is at <https://github.com/dgl/re-engine-RE2/> and [on CPAN](https://metacpan.org/pod/re::engine::RE2).
|
|
240
|
+
- An R wrapper is at <https://github.com/girishji/re2/> and [on CRAN](https://cran.r-project.org/web/packages/re2/index.html).
|
|
241
|
+
- A Ruby wrapper is at <https://github.com/mudge/re2/> and on RubyGems (rubygems.org).
|
|
242
|
+
- A WebAssembly wrapper is at <https://github.com/google/re2-wasm/> and on NPM (npmjs.com).
|
|
243
|
+
|
|
244
|
+
[RE2J](https://github.com/google/re2j) is a port of the RE2 C++ code to pure Java,
|
|
245
|
+
and [RE2JS](https://github.com/le0pard/re2js) is a port of RE2J to JavaScript.
|
|
246
|
+
|
|
247
|
+
The [Go `regexp` package](https://go.dev/pkg/regexp)
|
|
248
|
+
and [Rust `regex` crate](https://docs.rs/regex)
|
|
249
|
+
do not share code with RE2, but they follow the same principles,
|
|
250
|
+
accept the same syntax, and provide the same efficiency guarantees.
|
|
251
|
+
|
|
252
|
+
### Contact
|
|
253
|
+
|
|
254
|
+
The [issue tracker](https://github.com/google/re2/issues) is the best place for discussions.
|
|
255
|
+
|
|
256
|
+
There is a [mailing list](https://groups.google.com/group/re2-dev) for keeping up with code changes.
|
|
257
|
+
|
|
258
|
+
Please read the [contribution guide](https://github.com/google/re2/wiki/Contribute) before sending changes.
|
|
259
|
+
In particular, note that RE2 does not use GitHub pull requests.
|
package/vendor/re2/python/re2.py
CHANGED
|
@@ -64,7 +64,7 @@ def compile(pattern, options=None):
|
|
|
64
64
|
if options:
|
|
65
65
|
raise error('pattern is already compiled, so '
|
|
66
66
|
'options may not be specified')
|
|
67
|
-
|
|
67
|
+
return pattern
|
|
68
68
|
options = options or Options()
|
|
69
69
|
values = tuple(getattr(options, name) for name in Options.NAMES)
|
|
70
70
|
return _Regexp._make(pattern, values)
|
|
@@ -315,6 +315,12 @@ class Re2RegexpTest(ReRegexpTest):
|
|
|
315
315
|
re2.purge()
|
|
316
316
|
self.assertEqual(re2._Regexp._make.cache_info().currsize, 0)
|
|
317
317
|
|
|
318
|
+
def test_options(self):
|
|
319
|
+
opt = re2.Options()
|
|
320
|
+
opt.case_sensitive = False
|
|
321
|
+
r = re2.compile('test', opt)
|
|
322
|
+
self.assertIsNotNone(r.search('TEST'))
|
|
323
|
+
self.assertIsNotNone(re2.search(r, 'TEST'))
|
|
318
324
|
|
|
319
325
|
class Re2EscapeTest(parameterized.TestCase):
|
|
320
326
|
"""Contains tests that apply to the re2 module only.
|
|
@@ -129,7 +129,7 @@ try:
|
|
|
129
129
|
|
|
130
130
|
setuptools.setup(
|
|
131
131
|
name='google-re2',
|
|
132
|
-
version='1.1.
|
|
132
|
+
version='1.1.20251105',
|
|
133
133
|
description='RE2 Python bindings',
|
|
134
134
|
long_description=long_description,
|
|
135
135
|
long_description_content_type='text/plain',
|
|
@@ -144,11 +144,11 @@ try:
|
|
|
144
144
|
'Intended Audience :: Developers',
|
|
145
145
|
'License :: OSI Approved :: BSD License',
|
|
146
146
|
'Programming Language :: C++',
|
|
147
|
-
'Programming Language :: Python :: 3.
|
|
147
|
+
'Programming Language :: Python :: 3.9',
|
|
148
148
|
],
|
|
149
149
|
options=options(),
|
|
150
150
|
cmdclass={'build_ext': BuildExt},
|
|
151
|
-
python_requires='~=3.
|
|
151
|
+
python_requires='~=3.9',
|
|
152
152
|
)
|
|
153
153
|
except:
|
|
154
154
|
raise
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
|
|
7
7
|
#include <stdint.h>
|
|
8
8
|
|
|
9
|
-
#include "absl/base/attributes.h"
|
|
10
9
|
#include "absl/log/absl_check.h"
|
|
11
10
|
|
|
12
11
|
namespace re2 {
|
|
@@ -27,15 +26,15 @@ int Bitmap256::FindNextSetBit(int c) const {
|
|
|
27
26
|
case 1:
|
|
28
27
|
if (words_[1] != 0)
|
|
29
28
|
return (1 * 64) + FindLSBSet(words_[1]);
|
|
30
|
-
|
|
29
|
+
[[fallthrough]];
|
|
31
30
|
case 2:
|
|
32
31
|
if (words_[2] != 0)
|
|
33
32
|
return (2 * 64) + FindLSBSet(words_[2]);
|
|
34
|
-
|
|
33
|
+
[[fallthrough]];
|
|
35
34
|
case 3:
|
|
36
35
|
if (words_[3] != 0)
|
|
37
36
|
return (3 * 64) + FindLSBSet(words_[3]);
|
|
38
|
-
|
|
37
|
+
[[fallthrough]];
|
|
39
38
|
default:
|
|
40
39
|
return -1;
|
|
41
40
|
}
|
|
@@ -49,7 +49,7 @@ class BitState {
|
|
|
49
49
|
bool longest, absl::string_view* submatch, int nsubmatch);
|
|
50
50
|
|
|
51
51
|
private:
|
|
52
|
-
inline bool ShouldVisit(
|
|
52
|
+
static inline bool ShouldVisit(absl::string_view text, uint64_t* visited, uint16_t id, const char* p);
|
|
53
53
|
void Push(int id, const char* p);
|
|
54
54
|
void GrowStack();
|
|
55
55
|
bool TrySearch(int id, const char* p);
|
|
@@ -85,16 +85,19 @@ BitState::BitState(Prog* prog)
|
|
|
85
85
|
njob_(0) {
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
// Given
|
|
89
|
-
//
|
|
88
|
+
// Given the text being searched and current visited state,
|
|
89
|
+
// as well as a list ID, should the search visit the (list ID, p) pair?
|
|
90
90
|
// If so, remember that it was visited so that the next time,
|
|
91
91
|
// we don't repeat the visit.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
// We pass text and visited to this as a static method so that the
|
|
93
|
+
// caller can do those loads once instead of this code dereferencing
|
|
94
|
+
// them multiple times.
|
|
95
|
+
bool BitState::ShouldVisit(absl::string_view text, uint64_t* visited, uint16_t list_id, const char* p) {
|
|
96
|
+
int n = list_id * static_cast<int>(text.size()+1) +
|
|
97
|
+
static_cast<int>(p-text.data());
|
|
98
|
+
if (visited[n/kVisitedBits] & (uint64_t{1} << (n & (kVisitedBits-1))))
|
|
96
99
|
return false;
|
|
97
|
-
|
|
100
|
+
visited[n/kVisitedBits] |= uint64_t{1} << (n & (kVisitedBits-1));
|
|
98
101
|
return true;
|
|
99
102
|
}
|
|
100
103
|
|
|
@@ -140,10 +143,12 @@ void BitState::Push(int id, const char* p) {
|
|
|
140
143
|
bool BitState::TrySearch(int id0, const char* p0) {
|
|
141
144
|
bool matched = false;
|
|
142
145
|
const char* end = text_.data() + text_.size();
|
|
146
|
+
uint16_t* list_heads = prog_->list_heads();
|
|
147
|
+
uint64_t* visited = visited_.data();
|
|
143
148
|
njob_ = 0;
|
|
144
149
|
// Push() no longer checks ShouldVisit(),
|
|
145
150
|
// so we must perform the check ourselves.
|
|
146
|
-
if (ShouldVisit(id0, p0))
|
|
151
|
+
if (ShouldVisit(text_, visited, list_heads[id0], p0))
|
|
147
152
|
Push(id0, p0);
|
|
148
153
|
while (njob_ > 0) {
|
|
149
154
|
// Pop job off stack.
|
|
@@ -237,7 +242,7 @@ bool BitState::TrySearch(int id0, const char* p0) {
|
|
|
237
242
|
// Sanity check: id is the head of its list, which must
|
|
238
243
|
// be the case if id-1 is the last of *its* list. :)
|
|
239
244
|
ABSL_DCHECK(id == 0 || prog_->inst(id-1)->last());
|
|
240
|
-
if (ShouldVisit(id, p))
|
|
245
|
+
if (ShouldVisit(text_, visited, list_heads[id], p))
|
|
241
246
|
goto Loop;
|
|
242
247
|
break;
|
|
243
248
|
|
package/vendor/re2/re2/dfa.cc
CHANGED
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
#include <utility>
|
|
35
35
|
#include <vector>
|
|
36
36
|
|
|
37
|
-
#include "absl/base/attributes.h"
|
|
38
37
|
#include "absl/base/call_once.h"
|
|
39
38
|
#include "absl/base/thread_annotations.h"
|
|
40
39
|
#include "absl/container/flat_hash_map.h"
|
|
@@ -650,7 +649,7 @@ DFA::State* DFA::WorkqToCachedState(Workq* q, Workq* mq, uint32_t flag) {
|
|
|
650
649
|
absl::FPrintF(stderr, " -> FullMatchState\n");
|
|
651
650
|
return FullMatchState;
|
|
652
651
|
}
|
|
653
|
-
|
|
652
|
+
[[fallthrough]];
|
|
654
653
|
default:
|
|
655
654
|
// Record iff id is the head of its list, which must
|
|
656
655
|
// be the case if id-1 is the last of *its* list. :)
|
package/vendor/re2/re2/parse.cc
CHANGED
|
@@ -24,7 +24,6 @@
|
|
|
24
24
|
#include <string>
|
|
25
25
|
#include <vector>
|
|
26
26
|
|
|
27
|
-
#include "absl/base/attributes.h"
|
|
28
27
|
#include "absl/base/macros.h"
|
|
29
28
|
#include "absl/log/absl_log.h"
|
|
30
29
|
#include "absl/strings/ascii.h"
|
|
@@ -304,7 +303,7 @@ Rune ApplyFold(const CaseFold* f, Rune r) {
|
|
|
304
303
|
case EvenOddSkip: // even <-> odd but only applies to every other
|
|
305
304
|
if ((r - f->lo) % 2)
|
|
306
305
|
return r;
|
|
307
|
-
|
|
306
|
+
[[fallthrough]];
|
|
308
307
|
case EvenOdd: // even <-> odd
|
|
309
308
|
if (r%2 == 0)
|
|
310
309
|
return r + 1;
|
|
@@ -313,7 +312,7 @@ Rune ApplyFold(const CaseFold* f, Rune r) {
|
|
|
313
312
|
case OddEvenSkip: // odd <-> even but only applies to every other
|
|
314
313
|
if ((r - f->lo) % 2)
|
|
315
314
|
return r;
|
|
316
|
-
|
|
315
|
+
[[fallthrough]];
|
|
317
316
|
case OddEven: // odd <-> even
|
|
318
317
|
if (r%2 == 1)
|
|
319
318
|
return r + 1;
|
|
@@ -1525,7 +1524,7 @@ static bool ParseEscape(absl::string_view* s, Rune* rp,
|
|
|
1525
1524
|
// Single non-zero octal digit is a backreference; not supported.
|
|
1526
1525
|
if (s->empty() || (*s)[0] < '0' || (*s)[0] > '7')
|
|
1527
1526
|
goto BadEscape;
|
|
1528
|
-
|
|
1527
|
+
[[fallthrough]];
|
|
1529
1528
|
case '0':
|
|
1530
1529
|
// consume up to three octal digits; already have one.
|
|
1531
1530
|
code = c - '0';
|
package/vendor/re2/re2/prog.cc
CHANGED
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
#include <utility>
|
|
16
16
|
#include <vector>
|
|
17
17
|
|
|
18
|
-
#include "absl/base/attributes.h"
|
|
19
18
|
#include "absl/log/absl_check.h"
|
|
20
19
|
#include "absl/log/absl_log.h"
|
|
21
20
|
#include "absl/strings/str_format.h"
|
|
@@ -820,7 +819,7 @@ void Prog::EmitList(int root, SparseArray<int>* rootmap,
|
|
|
820
819
|
flat->back().set_opcode(kInstAltMatch);
|
|
821
820
|
flat->back().set_out(static_cast<int>(flat->size()));
|
|
822
821
|
flat->back().out1_ = static_cast<uint32_t>(flat->size())+1;
|
|
823
|
-
|
|
822
|
+
[[fallthrough]];
|
|
824
823
|
|
|
825
824
|
case kInstAlt:
|
|
826
825
|
stk->push_back(ip->out1());
|
package/vendor/re2/re2/prog.h
CHANGED
package/vendor/re2/re2/re2.cc
CHANGED
|
@@ -143,6 +143,11 @@ static std::string trunc(absl::string_view pattern) {
|
|
|
143
143
|
|
|
144
144
|
|
|
145
145
|
RE2::RE2(const char* pattern) {
|
|
146
|
+
// If absl::string_view becomes an alias for std::string_view,
|
|
147
|
+
// it will stop allowing NULL to be converted.
|
|
148
|
+
// Handle NULL explicitly to keep callers working no matter what.
|
|
149
|
+
if (pattern == NULL)
|
|
150
|
+
pattern = "";
|
|
146
151
|
Init(pattern, DefaultOptions);
|
|
147
152
|
}
|
|
148
153
|
|
package/vendor/re2/re2/re2.h
CHANGED
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
// ABSL_CHECK(RE2::FullMatch("ruby:1234", "(\\w+):(\\d+)", &s, &i));
|
|
88
88
|
//
|
|
89
89
|
// Example: extracts "ruby" into "s" and no value into "i"
|
|
90
|
-
//
|
|
90
|
+
// std::optional<int> i;
|
|
91
91
|
// std::string s;
|
|
92
92
|
// ABSL_CHECK(RE2::FullMatch("ruby", "(\\w+)(?::(\\d+))?", &s, &i));
|
|
93
93
|
//
|
|
@@ -213,13 +213,13 @@
|
|
|
213
213
|
|
|
214
214
|
#include <algorithm>
|
|
215
215
|
#include <map>
|
|
216
|
+
#include <optional>
|
|
216
217
|
#include <string>
|
|
217
218
|
#include <type_traits>
|
|
218
219
|
#include <vector>
|
|
219
220
|
|
|
220
221
|
#include "absl/base/call_once.h"
|
|
221
222
|
#include "absl/strings/string_view.h"
|
|
222
|
-
#include "absl/types/optional.h"
|
|
223
223
|
#include "re2/stringpiece.h"
|
|
224
224
|
|
|
225
225
|
#if defined(__APPLE__)
|
|
@@ -385,7 +385,7 @@ class RE2 {
|
|
|
385
385
|
// type, or one of:
|
|
386
386
|
// std::string (matched piece is copied to string)
|
|
387
387
|
// absl::string_view (string_view is mutated to point to matched piece)
|
|
388
|
-
//
|
|
388
|
+
// std::optional<T> (T is a supported numeric or string type as above)
|
|
389
389
|
// T ("bool T::ParseFrom(const char*, size_t)" must exist)
|
|
390
390
|
// (void*)NULL (the corresponding matched sub-pattern is not copied)
|
|
391
391
|
//
|
|
@@ -406,7 +406,7 @@ class RE2 {
|
|
|
406
406
|
// int number;
|
|
407
407
|
// RE2::FullMatch("abc", "[a-z]+(\\d+)?", &number);
|
|
408
408
|
//
|
|
409
|
-
// Use
|
|
409
|
+
// Use std::optional<int> instead to handle this case correctly.
|
|
410
410
|
template <typename... A>
|
|
411
411
|
static bool FullMatch(absl::string_view text, const RE2& re, A&&... a) {
|
|
412
412
|
return Apply(FullMatchN, text, re, Arg(std::forward<A>(a))...);
|
|
@@ -842,12 +842,12 @@ template <> struct Parse4ary<unsigned long long> : public std::true_type {};
|
|
|
842
842
|
template <typename T>
|
|
843
843
|
bool Parse(const char* str, size_t n, T* dest, int radix);
|
|
844
844
|
|
|
845
|
-
// Support
|
|
846
|
-
template <typename T> struct Parse3ary<
|
|
847
|
-
template <typename T> struct Parse4ary<
|
|
845
|
+
// Support std::optional<T> for all T with a stock parser.
|
|
846
|
+
template <typename T> struct Parse3ary<std::optional<T>> : public Parse3ary<T> {};
|
|
847
|
+
template <typename T> struct Parse4ary<std::optional<T>> : public Parse4ary<T> {};
|
|
848
848
|
|
|
849
849
|
template <typename T>
|
|
850
|
-
bool Parse(const char* str, size_t n,
|
|
850
|
+
bool Parse(const char* str, size_t n, std::optional<T>* dest) {
|
|
851
851
|
if (str == NULL) {
|
|
852
852
|
if (dest != NULL)
|
|
853
853
|
dest->reset();
|
|
@@ -863,7 +863,7 @@ bool Parse(const char* str, size_t n, absl::optional<T>* dest) {
|
|
|
863
863
|
}
|
|
864
864
|
|
|
865
865
|
template <typename T>
|
|
866
|
-
bool Parse(const char* str, size_t n,
|
|
866
|
+
bool Parse(const char* str, size_t n, std::optional<T>* dest, int radix) {
|
|
867
867
|
if (str == NULL) {
|
|
868
868
|
if (dest != NULL)
|
|
869
869
|
dest->reset();
|
package/vendor/re2/re2/set.cc
CHANGED
|
@@ -55,6 +55,12 @@ RE2::Set& RE2::Set::operator=(Set&& other) {
|
|
|
55
55
|
return *this;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
int RE2::Set::Size() const {
|
|
59
|
+
if (!compiled_)
|
|
60
|
+
return static_cast<int>(elem_.size());
|
|
61
|
+
return size_;
|
|
62
|
+
}
|
|
63
|
+
|
|
58
64
|
int RE2::Set::Add(absl::string_view pattern, std::string* error) {
|
|
59
65
|
if (compiled_) {
|
|
60
66
|
ABSL_LOG(DFATAL) << "RE2::Set::Add() called after compiling";
|
package/vendor/re2/re2/set.h
CHANGED
|
@@ -53,6 +53,10 @@ class RE2::Set {
|
|
|
53
53
|
// the error message from the parser.
|
|
54
54
|
int Add(absl::string_view pattern, std::string* error);
|
|
55
55
|
|
|
56
|
+
// Returns the number of patterns in the set.
|
|
57
|
+
// Can be called before or after Compile().
|
|
58
|
+
int Size() const;
|
|
59
|
+
|
|
56
60
|
// Compiles the set in preparation for matching.
|
|
57
61
|
// Returns false if the compiler runs out of memory.
|
|
58
62
|
// Add() must not be called again after Compile().
|
|
@@ -62,6 +66,7 @@ class RE2::Set {
|
|
|
62
66
|
// Returns true if text matches at least one of the regexps in the set.
|
|
63
67
|
// Fills v (if not NULL) with the indices of the matching regexps.
|
|
64
68
|
// Callers must not expect v to be sorted.
|
|
69
|
+
// The indices are in the half-open interval [0, Size()).
|
|
65
70
|
bool Match(absl::string_view text, std::vector<int>* v) const;
|
|
66
71
|
|
|
67
72
|
// As above, but populates error_info (if not NULL) when none of the regexps
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
|
|
10
10
|
#include <stdint.h>
|
|
11
11
|
#include <string.h>
|
|
12
|
+
#include <optional>
|
|
12
13
|
|
|
13
14
|
#include "absl/base/macros.h"
|
|
14
15
|
#include "absl/log/absl_log.h"
|
|
15
|
-
#include "absl/types/optional.h"
|
|
16
16
|
#include "gtest/gtest.h"
|
|
17
17
|
#include "re2/re2.h"
|
|
18
18
|
|
|
@@ -158,7 +158,7 @@ TEST(RE2ArgTest, ParseFromTest) {
|
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
TEST(RE2ArgTest, OptionalDoubleTest) {
|
|
161
|
-
|
|
161
|
+
std::optional<double> opt;
|
|
162
162
|
RE2::Arg arg(&opt);
|
|
163
163
|
EXPECT_TRUE(arg.Parse(NULL, 0));
|
|
164
164
|
EXPECT_FALSE(opt.has_value());
|
|
@@ -169,7 +169,7 @@ TEST(RE2ArgTest, OptionalDoubleTest) {
|
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
TEST(RE2ArgTest, OptionalIntWithCRadixTest) {
|
|
172
|
-
|
|
172
|
+
std::optional<int> opt;
|
|
173
173
|
RE2::Arg arg = RE2::CRadix(&opt);
|
|
174
174
|
EXPECT_TRUE(arg.Parse(NULL, 0));
|
|
175
175
|
EXPECT_FALSE(opt.has_value());
|
|
@@ -1688,4 +1688,12 @@ TEST(RE2, Issue477) {
|
|
|
1688
1688
|
ASSERT_EQ(s, "\x61\x63");
|
|
1689
1689
|
}
|
|
1690
1690
|
|
|
1691
|
+
TEST(RE2, InitNULL) {
|
|
1692
|
+
// RE2::RE2 accepts NULL. Make sure it keeps doing that.
|
|
1693
|
+
RE2 re(NULL);
|
|
1694
|
+
ASSERT_TRUE(re.ok());
|
|
1695
|
+
ASSERT_TRUE(RE2::FullMatch("", re));
|
|
1696
|
+
ASSERT_TRUE(RE2::FullMatch("", NULL));
|
|
1697
|
+
}
|
|
1698
|
+
|
|
1691
1699
|
} // namespace re2
|
|
@@ -17,10 +17,15 @@ namespace re2 {
|
|
|
17
17
|
TEST(Set, Unanchored) {
|
|
18
18
|
RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED);
|
|
19
19
|
|
|
20
|
+
ASSERT_EQ(s.Size(), 0);
|
|
20
21
|
ASSERT_EQ(s.Add("foo", NULL), 0);
|
|
22
|
+
ASSERT_EQ(s.Size(), 1);
|
|
21
23
|
ASSERT_EQ(s.Add("(", NULL), -1);
|
|
24
|
+
ASSERT_EQ(s.Size(), 1);
|
|
22
25
|
ASSERT_EQ(s.Add("bar", NULL), 1);
|
|
26
|
+
ASSERT_EQ(s.Size(), 2);
|
|
23
27
|
ASSERT_EQ(s.Compile(), true);
|
|
28
|
+
ASSERT_EQ(s.Size(), 2);
|
|
24
29
|
|
|
25
30
|
ASSERT_EQ(s.Match("foobar", NULL), true);
|
|
26
31
|
ASSERT_EQ(s.Match("fooba", NULL), true);
|
|
@@ -192,7 +192,7 @@ template<typename T> T Regexp::Walker<T>::WalkInternal(Regexp* re, T top_arg,
|
|
|
192
192
|
s->child_args = &s->child_arg;
|
|
193
193
|
else if (re->nsub_ > 1)
|
|
194
194
|
s->child_args = new T[re->nsub_];
|
|
195
|
-
|
|
195
|
+
[[fallthrough]];
|
|
196
196
|
}
|
|
197
197
|
default: {
|
|
198
198
|
if (re->nsub_ > 0) {
|