From db09905c252beed0e4880be2ecda757cb5de3e3d Mon Sep 17 00:00:00 2001 From: can1357 Date: Sat, 4 Jul 2026 09:06:25 +0200 Subject: [PATCH] refactor(pi-natives): reduced allocations in pattern deduplication - normalize_pattern_list now skips all allocation for duplicate patterns and reuses the input String when trimming is a no-op. --- crates/pi-natives/src/ast.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/crates/pi-natives/src/ast.rs b/crates/pi-natives/src/ast.rs index 184d40829..d7ed96af6 100644 --- a/crates/pi-natives/src/ast.rs +++ b/crates/pi-natives/src/ast.rs @@ -540,13 +540,16 @@ fn normalize_pattern_list(patterns: Option>) -> Result> let mut seen = BTreeSet::new(); for raw in patterns.unwrap_or_default() { let pattern = raw.trim(); - if pattern.is_empty() { + if pattern.is_empty() || seen.contains(pattern) { continue; } - let owned = pattern.to_string(); - if seen.insert(owned.clone()) { - normalized.push(owned); - } + let owned = if pattern.len() == raw.len() { + raw + } else { + pattern.to_string() + }; + seen.insert(owned.clone()); + normalized.push(owned); } if normalized.is_empty() { return Err(Error::from_reason(