Skip to content

Commit 1d27e21

Browse files
committed
Docs: systr add docs to basic internal procs
1 parent 2e45f61 commit 1d27e21

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

lib/system/sysstr.nim

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,30 @@ else:
4848
cast[NimString](newObjNoInit(addr(strDesc), size))
4949

5050
proc rawNewStringNoInit(space: int): NimString =
51+
## Returns a newly-allocated NimString with `reserved` set.
52+
## .. warning:: `len` and the terminating null-byte are not set!
5153
let s = max(space, 7)
5254
result = allocStrNoInit(sizeof(TGenericSeq) + s + 1)
5355
result.reserved = s
5456
when defined(gogc):
5557
result.elemSize = 1
5658

5759
proc rawNewString(space: int): NimString {.compilerproc.} =
60+
## Returns a newly-allocated and *not* zeroed NimString
61+
## with everything required set:
62+
## - `reserved`
63+
## - `len`
64+
## - terminating null-byte
5865
result = rawNewStringNoInit(space)
5966
result.len = 0
6067
result.data[0] = '\0'
6168

6269
proc mnewString(len: int): NimString {.compilerproc.} =
70+
## Returns a newly-allocated and zeroed NimString
71+
## with everything required set:
72+
## - `reserved`
73+
## - `len`
74+
## - terminating null-byte
6375
result = rawNewStringNoInit(len)
6476
result.len = len
6577
zeroMem(addr result.data[0], len + 1)
@@ -217,13 +229,16 @@ proc appendChar(dest: NimString, c: char) {.compilerproc, inline.} =
217229

218230
proc setLengthStr(s: NimString, newLen: int): NimString {.compilerRtl.} =
219231
let n = max(newLen, 0)
220-
if s == nil:
221-
return if n == 0: s else: mnewString(n)
222-
elif n <= s.space:
223-
result = s
232+
if s == nil: # early return check
233+
if n == 0:
234+
return s
235+
else:
236+
return mnewString(n) # sets everything required
237+
if n <= s.space:
238+
result = s # len and null-byte need updating
224239
else:
225240
let sp = max(resize(s.space), n)
226-
result = rawNewStringNoInit(sp)
241+
result = rawNewStringNoInit(sp) # len and null-byte not set
227242
copyMem(addr result.data[0], unsafeAddr(s.data[0]), s.len)
228243
zeroMem(addr result.data[s.len], n - s.len)
229244
result.len = n

0 commit comments

Comments
 (0)