@@ -125,10 +125,8 @@ public static (Rune Rune, int Size) DecodeRune (this string str, int start = 0,
125
125
public static string ToString ( IEnumerable < Rune > runes )
126
126
{
127
127
const int maxCharsPerRune = 2 ;
128
- // Max stackalloc ~2 kB
129
- const int maxStackallocTextBufferSize = 1048 ;
128
+ const int maxStackallocTextBufferSize = 1048 ; // ~2 kB
130
129
131
- Span < char > runeBuffer = stackalloc char [ maxCharsPerRune ] ;
132
130
// Use stackalloc buffer if rune count is easily available and the count is reasonable.
133
131
if ( runes . TryGetNonEnumeratedCount ( out int count ) )
134
132
{
@@ -144,10 +142,8 @@ public static string ToString (IEnumerable<Rune> runes)
144
142
Span < char > remainingBuffer = textBuffer ;
145
143
foreach ( Rune rune in runes )
146
144
{
147
- int charsWritten = rune . EncodeToUtf16 ( runeBuffer ) ;
148
- ReadOnlySpan < char > runeChars = runeBuffer [ ..charsWritten ] ;
149
- runeChars . CopyTo ( remainingBuffer ) ;
150
- remainingBuffer = remainingBuffer [ runeChars . Length ..] ;
145
+ int charsWritten = rune . EncodeToUtf16 ( remainingBuffer ) ;
146
+ remainingBuffer = remainingBuffer [ charsWritten ..] ;
151
147
}
152
148
153
149
ReadOnlySpan < char > text = textBuffer [ ..^ remainingBuffer . Length ] ;
@@ -157,6 +153,7 @@ public static string ToString (IEnumerable<Rune> runes)
157
153
158
154
// Fallback to StringBuilder append.
159
155
StringBuilder stringBuilder = new ( ) ;
156
+ Span < char > runeBuffer = stackalloc char [ maxCharsPerRune ] ;
160
157
foreach ( Rune rune in runes )
161
158
{
162
159
int charsWritten = rune . EncodeToUtf16 ( runeBuffer ) ;
0 commit comments