From 84861eb48a1a7aa400b05a39b1d1dc1fc745aed2 Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Tue, 12 Nov 2019 23:56:09 +0100 Subject: [PATCH] fixes #12644 --- lib/core/seqs.nim | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/core/seqs.nim b/lib/core/seqs.nim index 01839a4dea550..914ca438c313d 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