fixes yet another regression

This commit is contained in:
Araq 2018-08-04 18:50:44 +02:00
commit 25b4d26e22

View file

@ -233,7 +233,7 @@ proc resizeString(dest: NimString, addlen: int): NimString {.compilerRtl.} =
elif dest.len + addlen <= dest.space: elif dest.len + addlen <= dest.space:
result = dest result = dest
else: # slow path: else: # slow path:
var sp = max(resize(dest.space), dest.len + addlen) let sp = max(resize(dest.space), dest.len + addlen)
when defined(nimIncrSeqV3): when defined(nimIncrSeqV3):
result = rawNewStringNoInit(sp) result = rawNewStringNoInit(sp)
result.len = dest.len result.len = dest.len
@ -256,13 +256,22 @@ proc appendChar(dest: NimString, c: char) {.compilerproc, inline.} =
inc(dest.len) inc(dest.len)
proc setLengthStr(s: NimString, newLen: int): NimString {.compilerRtl.} = proc setLengthStr(s: NimString, newLen: int): NimString {.compilerRtl.} =
var n = max(newLen, 0) let n = max(newLen, 0)
if s == nil: if s == nil:
result = mnewString(newLen) result = mnewString(newLen)
elif n <= s.space: elif n <= s.space:
result = s result = s
else: else:
result = resizeString(s, n) let sp = max(resize(s.space), newLen)
when defined(nimIncrSeqV3):
result = rawNewStringNoInit(sp)
result.len = s.len
copyMem(addr result.data[0], unsafeAddr(s.data[0]), s.len+1)
zeroMem(addr result.data[s.len], newLen - s.len)
else:
result = cast[NimString](growObj(dest, sizeof(TGenericSeq) + sp + 1))
result.reserved = sp
#result = resizeString(s, n)
result.len = n result.len = n
result.data[n] = '\0' result.data[n] = '\0'