summary refs log tree commit diff stats
path: root/lib/core
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2019-11-12 23:56:09 +0100
committerAndreas Rumpf <rumpf_a@web.de>2019-11-12 23:56:19 +0100
commit84861eb48a1a7aa400b05a39b1d1dc1fc745aed2 (patch)
tree3ba45a9a4f4c259dc2224dd8e1ef130ffc59fae0 /lib/core
parentdfb020b174b6f3489294d9ec096de3cf9d6b5944 (diff)
downloadNim-84861eb48a1a7aa400b05a39b1d1dc1fc745aed2.tar.gz
fixes #12644
Diffstat (limited to 'lib/core')
-rw-r--r--lib/core/seqs.nim17
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