summary refs log tree commit diff stats
diff options
context:
space:
mode:
-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