From b03f90d6c12e30e0ec5eb0c6a2fd4031fe3967e5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 15:09:39 +0000 Subject: [PATCH 1/3] Use span Min/Max helpers in SearchValues and BDD Co-authored-by: MihaZupan <25307628+MihaZupan@users.noreply.github.com> --- .../System/Text/RegularExpressions/Symbolic/BDD.cs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/Symbolic/BDD.cs b/src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/Symbolic/BDD.cs index 629288b2b51544..42d6af696bd9d5 100644 --- a/src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/Symbolic/BDD.cs +++ b/src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/Symbolic/BDD.cs @@ -307,14 +307,11 @@ public byte[] SerializeToBytes() // in other cases make use of the general serializer to long[] long[] serialized = Serialize(); + // make sure this serialization is not applied to MTBDDs + Debug.Assert(serialized.AsSpan().Min() > 0); + // get the maximal element from the array - long m = 0; - for (int i = 0; i < serialized.Length; i++) - { - // make sure this serialization is not applied to MTBDDs - Debug.Assert(serialized[i] > 0); - m = Math.Max(serialized[i], m); - } + long m = serialized.AsSpan().Max(); // k is the number of bytes needed to represent the maximal element int k = m <= 0xFFFF ? 2 : (m <= 0xFF_FFFF ? 3 : (m <= 0xFFFF_FFFF ? 4 : (m <= 0xFF_FFFF_FFFF ? 5 : (m <= 0xFFFF_FFFF_FFFF ? 6 : (m <= 0xFF_FFFF_FFFF_FFFF ? 7 : 8))))); From 8e3dd9c80af1a1bf0ca6baa4b002fbac60a9747d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 15:24:55 +0000 Subject: [PATCH 2/3] Use span Min/Max in SearchValues.TryGetSingleRange Co-authored-by: MihaZupan <25307628+MihaZupan@users.noreply.github.com> --- .../src/System/SearchValues/SearchValues.cs | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValues.cs b/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValues.cs index f1282892d3be25..93bce908e4e6da 100644 --- a/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValues.cs +++ b/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValues.cs @@ -242,16 +242,10 @@ public static SearchValues Create(ReadOnlySpan values, StringCom } private static bool TryGetSingleRange(ReadOnlySpan values, out T minInclusive, out T maxInclusive) - where T : struct, INumber, IMinMaxValue + where T : struct, INumber { - T min = T.MaxValue; - T max = T.MinValue; - - foreach (T value in values) - { - min = T.Min(min, value); - max = T.Max(max, value); - } + T min = values.Min(); + T max = values.Max(); minInclusive = min; maxInclusive = max; From a36566b1230f2a5ac0bb3a311d80c1de7f5a7f8e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 16:52:22 +0000 Subject: [PATCH 3/3] Remove extra locals in SearchValues.TryGetSingleRange, assign directly to out params Co-authored-by: MihaZupan <25307628+MihaZupan@users.noreply.github.com> --- .../src/System/SearchValues/SearchValues.cs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValues.cs b/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValues.cs index 93bce908e4e6da..3d7bb970e36017 100644 --- a/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValues.cs +++ b/src/libraries/System.Private.CoreLib/src/System/SearchValues/SearchValues.cs @@ -244,13 +244,10 @@ public static SearchValues Create(ReadOnlySpan values, StringCom private static bool TryGetSingleRange(ReadOnlySpan values, out T minInclusive, out T maxInclusive) where T : struct, INumber { - T min = values.Min(); - T max = values.Max(); + minInclusive = values.Min(); + maxInclusive = values.Max(); - minInclusive = min; - maxInclusive = max; - - uint range = uint.CreateChecked(max - min) + 1; + uint range = uint.CreateChecked(maxInclusive - minInclusive) + 1; if (range > values.Length) { return false; @@ -262,7 +259,7 @@ private static bool TryGetSingleRange(ReadOnlySpan values, out T minInclus foreach (T value in values) { - int offset = int.CreateChecked(value - min); + int offset = int.CreateChecked(value - minInclusive); seenValues[offset] = true; }