From c81e9f89d9e4388f36a4427bbaa95eced659d2ce Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 17 Aug 2026 06:03:41 +0900 Subject: refactor(preg): split the PREG_UNMATCHED_AS_NULL preg_* by flag preg_match2() and preg_match_all_offset_capture() each become a pair over a shared private impl, and their flags arguments are gone: no caller passed anything but 0 or PREG_UNMATCHED_AS_NULL. Preg::match5()/is_match5() lose their own flags argument for the same reason -- both call sites passed 0, and the value had nowhere left to go -- so they are renumbered to match4()/is_match4(). PREG_UNMATCHED_AS_NULL itself is now unreferenced. Co-Authored-By: Claude Opus 5 (1M context) --- crates/shirabe-pcre/src/preg.rs | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) (limited to 'crates/shirabe-pcre/src') diff --git a/crates/shirabe-pcre/src/preg.rs b/crates/shirabe-pcre/src/preg.rs index fb71c63b..0448f81a 100644 --- a/crates/shirabe-pcre/src/preg.rs +++ b/crates/shirabe-pcre/src/preg.rs @@ -14,8 +14,8 @@ use indexmap::IndexMap; pub use shirabe_php_shim::CaptureKey; use shirabe_php_shim::{ - PREG_UNMATCHED_AS_NULL, PregPattern, preg_grep, preg_match_all_offset_capture, preg_match_all2, - preg_match2, preg_replace_callback, preg_replace2, + PregPattern, preg_grep, preg_match_all_offset_capture_unmatched_as_null, preg_match_all2, + preg_match2, preg_match2_unmatched_as_null, preg_replace_callback, preg_replace2, }; #[derive(Debug)] @@ -27,24 +27,17 @@ impl Preg { subject: &str, matches: Option<&mut IndexMap>, ) -> bool { - Self::match5(pattern, subject, matches, 0, 0) + Self::match4(pattern, subject, matches, 0) } - pub fn match5( + pub fn match4( pattern: impl PregPattern, subject: &str, matches: Option<&mut IndexMap>, - flags: i64, offset: usize, ) -> bool { let mut internal: IndexMap> = IndexMap::new(); - let result = preg_match2( - pattern, - subject, - &mut internal, - flags | PREG_UNMATCHED_AS_NULL, - offset, - ); + let result = preg_match2_unmatched_as_null(pattern, subject, &mut internal, offset); if let Some(out) = matches { *out = drop_null_matches(internal); @@ -73,7 +66,7 @@ impl Preg { ) -> usize { let mut internal: IndexMap, i64)>> = IndexMap::new(); let result = - preg_match_all_offset_capture(pattern, subject, &mut internal, PREG_UNMATCHED_AS_NULL); + preg_match_all_offset_capture_unmatched_as_null(pattern, subject, &mut internal); if let Some(out) = matches { *out = internal; @@ -125,7 +118,7 @@ impl Preg { } pub fn is_match(pattern: impl PregPattern, subject: &str) -> bool { - Self::match5(pattern, subject, None, 0, 0) + Self::match4(pattern, subject, None, 0) } pub fn is_match3( @@ -133,17 +126,16 @@ impl Preg { subject: &str, matches: Option<&mut IndexMap>, ) -> bool { - Self::match5(pattern, subject, matches, 0, 0) + Self::match4(pattern, subject, matches, 0) } - pub fn is_match5( + pub fn is_match4( pattern: impl PregPattern, subject: &str, matches: Option<&mut IndexMap>, - flags: i64, offset: usize, ) -> bool { - Self::match5(pattern, subject, matches, flags, offset) + Self::match4(pattern, subject, matches, offset) } pub fn is_match_named( @@ -152,7 +144,7 @@ impl Preg { matches: &mut IndexMap, ) -> bool { let mut internal: IndexMap> = IndexMap::new(); - let result = preg_match2(pattern, subject, &mut internal, PREG_UNMATCHED_AS_NULL, 0); + let result = preg_match2_unmatched_as_null(pattern, subject, &mut internal, 0); matches.clear(); for (key, value) in internal { @@ -171,7 +163,7 @@ impl Preg { // Classic preg_match semantics (no PREG_UNMATCHED_AS_NULL): trailing // unmatched groups are truncated, interior unmatched groups become "". let mut internal: IndexMap> = IndexMap::new(); - let result = preg_match2(pattern, subject, &mut internal, 0, 0); + let result = preg_match2(pattern, subject, &mut internal, 0); if !result { return None; -- cgit v1.3.1-4-g156e