gc:destructors: more progress

This commit is contained in:
Andreas Rumpf 2018-11-29 20:10:52 +01:00
commit 350396e1ca
4 changed files with 18 additions and 22 deletions

View file

@ -126,18 +126,19 @@ proc grow*[T](x: var seq[T]; newLen: Natural; value: T) =
let oldLen = x.len
if newLen <= oldLen: return
var xu = cast[ptr NimSeqV2[T]](addr x)
xu.p = cast[typeof(xu.p)](prepareSeqAdd(oldLen, xu.p, newLen - oldLen, sizeof(T)))
if xu.p == nil or xu.p.cap < newLen:
xu.p = cast[typeof(xu.p)](prepareSeqAdd(oldLen, xu.p, newLen - oldLen, sizeof(T)))
xu.len = newLen
for i in oldLen .. newLen-1:
xu.p.data[i] = value
proc setLen[T](s: var seq[T], newlen: Natural) =
if newlen < s.len:
shrink(s, newLen)
else:
var v: T # get the default value of 'v'
grow(s, newLen, v)
{.noSideEffect.}:
if newlen < s.len:
shrink(s, newLen)
else:
var v: T # get the default value of 'v'
grow(s, newLen, v)
when false:
proc resize[T](s: var NimSeqV2[T]) =