fixes #12644
This commit is contained in:
parent
dfb020b174
commit
84861eb48a
1 changed files with 10 additions and 7 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue