This commit is contained in:
Andreas Rumpf 2019-11-12 23:56:09 +01:00
commit 84861eb48a

View file

@ -135,13 +135,16 @@ proc prepareSeqAdd(len: int; p: pointer; addlen, elemSize: int): pointer {.
result = q result = q
proc shrink*[T](x: var seq[T]; newLen: Natural) = proc shrink*[T](x: var seq[T]; newLen: Natural) =
mixin `=destroy` when nimvm:
sysAssert newLen <= x.len, "invalid newLen parameter for 'shrink'" setLen(x, newLen)
when not supportsCopyMem(T): else:
for i in countdown(x.len - 1, newLen): mixin `=destroy`
`=destroy`(x[i]) sysAssert newLen <= x.len, "invalid newLen parameter for 'shrink'"
# XXX This is wrong for const seqs that were moved into 'x'! when not supportsCopyMem(T):
cast[ptr NimSeqV2[T]](addr x).len = newLen for i in countdown(x.len - 1, newLen):
`=destroy`(x[i])
# XXX This is wrong for const seqs that were moved into 'x'!
cast[ptr NimSeqV2[T]](addr x).len = newLen
proc grow*[T](x: var seq[T]; newLen: Natural; value: T) = proc grow*[T](x: var seq[T]; newLen: Natural; value: T) =
let oldLen = x.len let oldLen = x.len