aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/event_dispatcher
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-18 01:56:31 +0900
committernsfisis <nsfisis@gmail.com>2026-08-18 01:56:32 +0900
commit5114a8199a87c9e5584d92848e95deba22b73e98 (patch)
tree596b422e5a37ad72e522978b6d456c0ff686d1cc /crates/shirabe/src/event_dispatcher
parent79b504e55cd4c4d1da102c3a076dc2a2e1edcd65 (diff)
downloadphp-shirabe-5114a8199a87c9e5584d92848e95deba22b73e98.tar.gz
php-shirabe-5114a8199a87c9e5584d92848e95deba22b73e98.tar.zst
php-shirabe-5114a8199a87c9e5584d92848e95deba22b73e98.zip
refactor(preg): back PregMatches with regex::Captures
PregMatches was an IndexMap of owned Strings copied out of the match, so every preg_match2/preg_replace_callback call allocated a String per capture group (twice over for a named group) whether or not the caller read it. It now wraps the regex::Captures itself, held alongside the pattern it came from so groups stay reachable by both their named and their numbered form, and hands out &str borrowed from the subject. The subject's lifetime becomes a parameter of the type. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/event_dispatcher')
-rw-r--r--crates/shirabe/src/event_dispatcher/event_dispatcher.rs22
1 files changed, 19 insertions, 3 deletions
diff --git a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs
index f03f82db..6cc1670d 100644
--- a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs
+++ b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs
@@ -956,7 +956,13 @@ try {{
if Platform::is_windows() {
path_and_args = Preg::replace_callback(
php_regex!("{^\\S+}"),
- |m| str_replace("/", "\\", &m[0]),
+ |m| {
+ str_replace(
+ "/",
+ "\\",
+ m.get(&CaptureKey::ByIndex(0)).unwrap(),
+ )
+ },
&path_and_args,
);
}
@@ -985,7 +991,11 @@ try {{
path_and_args = format!(
"{}{}",
path_to_exec,
- substr(&path_and_args, strlen(&m[0]), None)
+ substr(
+ &path_and_args,
+ strlen(m.get(&CaptureKey::ByIndex(0)).unwrap()),
+ None
+ )
);
}
}
@@ -1001,7 +1011,13 @@ try {{
if Platform::is_windows() {
exec = Preg::replace_callback(
php_regex!("{^\\S+}"),
- |m| str_replace("/", "\\", &m[0]),
+ |m| {
+ str_replace(
+ "/",
+ "\\",
+ m.get(&CaptureKey::ByIndex(0)).unwrap(),
+ )
+ },
&exec,
);
}