@@ -156,7 +156,6 @@ proc addChar(s: NimString, c: char): NimString =
156
156
result = rawNewStringNoInit (r)
157
157
result .len = s.len
158
158
copyMem (addr result .data[0 ], unsafeAddr (s.data[0 ]), s.len+ 1 )
159
- result .reserved = r
160
159
result .data[result .len] = c
161
160
result .data[result .len+ 1 ] = '\0 '
162
161
inc (result .len)
@@ -202,7 +201,6 @@ proc resizeString(dest: NimString, addlen: int): NimString {.compilerRtl.} =
202
201
result = rawNewStringNoInit (sp)
203
202
result .len = dest.len
204
203
copyMem (addr result .data[0 ], unsafeAddr (dest.data[0 ]), dest.len+ 1 )
205
- result .reserved = sp
206
204
# result = rawNewString(sp)
207
205
# copyMem(result, dest, dest.len + sizeof(TGenericSeq))
208
206
# DO NOT UPDATE LEN YET: dest.len = newLen
@@ -220,22 +218,42 @@ proc appendChar(dest: NimString, c: char) {.compilerproc, inline.} =
220
218
proc setLengthStr (s: NimString , newLen: int ): NimString {.compilerRtl .} =
221
219
let n = max (newLen, 0 )
222
220
if s == nil :
223
- if n == 0 :
224
- return s
225
- else :
226
- result = mnewString (n)
221
+ return if n == 0 : s else : mnewString (n)
227
222
elif n <= s.space:
228
223
result = s
229
224
else :
230
225
let sp = max (resize (s.space), n)
231
226
result = rawNewStringNoInit (sp)
232
- result .len = s.len
233
227
copyMem (addr result .data[0 ], unsafeAddr (s.data[0 ]), s.len)
234
228
zeroMem (addr result .data[s.len], n - s.len)
235
- result .reserved = sp
236
229
result .len = n
237
230
result .data[n] = '\0 '
238
231
232
+ proc setLengthStrUninit (s: var string , newlen: Natural ) {.nodestroy .} =
233
+ # # Sets the `s` length to `newlen` without zeroing memory on growth.
234
+ # # Terminating zero for cstring compatibility is set.
235
+ var str = cast [NimString ](s.unsafeAddr)
236
+ let n = max (newLen, 0 )
237
+ if str == nil :
238
+ if n == 0 : return
239
+ else :
240
+ str = rawNewStringNoInit (n)
241
+ str.data[n] = '\0 '
242
+ str.len = n
243
+ s = cast [string ](str)
244
+ else :
245
+ if n > str.space:
246
+ let sp = max (resize (str.space), n)
247
+ str = rawNewStringNoInit (sp)
248
+ copyMem (addr str.data[0 ], unsafeAddr s[0 ], s.len)
249
+ str.data[n] = '\0 '
250
+ str.len = n
251
+ s = cast [string ](str)
252
+ elif n < s.len:
253
+ str.data[n] = '\0 '
254
+ str.len = n
255
+ else : return
256
+
239
257
# ----------------- sequences ----------------------------------------------
240
258
241
259
proc incrSeq (seq: PGenericSeq , elemSize, elemAlign: int ): PGenericSeq {.compilerproc .} =
0 commit comments