diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2019-11-12 23:56:09 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-11-12 23:56:19 +0100 |
commit | 84861eb48a1a7aa400b05a39b1d1dc1fc745aed2 (patch) | |
tree | 3ba45a9a4f4c259dc2224dd8e1ef130ffc59fae0 /lib/core | |
parent | dfb020b174b6f3489294d9ec096de3cf9d6b5944 (diff) | |
download | Nim-84861eb48a1a7aa400b05a39b1d1dc1fc745aed2.tar.gz |
fixes #12644
Diffstat (limited to 'lib/core')
-rw-r--r-- | lib/core/seqs.nim | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/lib/core/seqs.nim b/lib/core/seqs.nim index 01839a4de..914ca438c 100644 --- a/lib/core/seqs.nim +++ b/lib/core/seqs.nim @@ -135,13 +135,16 @@ proc prepareSeqAdd(len: int; p: pointer; addlen, elemSize: int): pointer {. result = q proc shrink*[T](x: var seq[T]; newLen: Natural) = - mixin `=destroy` - sysAssert newLen <= x.len, "invalid newLen parameter for 'shrink'" - when not supportsCopyMem(T): - 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 + when nimvm: + setLen(x, newLen) + else: + mixin `=destroy` + sysAssert newLen <= x.len, "invalid newLen parameter for 'shrink'" + when not supportsCopyMem(T): + 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) = let oldLen = x.len |