summary refs log tree commit diff stats
path: root/lib/system/assign.nim
diff options
context:
space:
mode:
Diffstat (limited to 'lib/system/assign.nim')
-rw-r--r--lib/system/assign.nim8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/system/assign.nim b/lib/system/assign.nim
index 115df61a7..f061c89cf 100644
--- a/lib/system/assign.nim
+++ b/lib/system/assign.nim
@@ -61,13 +61,17 @@ proc genericAssignAux(dest, src: pointer, mt: PNimType, shallow: bool) =
       unsureAsgnRef(x, s2)
       return
     sysAssert(dest != nil, "genericAssignAux 3")
-    unsureAsgnRef(x, newSeq(mt, seq.len))
-    var dst = cast[ByteAddress](cast[PPointer](dest)[])
     if ntfNoRefs in mt.base.flags:
+      var ss = nimNewSeqOfCap(mt, seq.len)
+      cast[PGenericSeq](ss).len = seq.len
+      unsureAsgnRef(x, ss)
+      var dst = cast[ByteAddress](cast[PPointer](dest)[])
       copyMem(cast[pointer](dst +% GenericSeqSize),
               cast[pointer](cast[ByteAddress](s2) +% GenericSeqSize),
               seq.len * mt.base.size)
     else:
+      unsureAsgnRef(x, newSeq(mt, seq.len))
+      var dst = cast[ByteAddress](cast[PPointer](dest)[])
       for i in 0..seq.len-1:
         genericAssignAux(
           cast[pointer](dst +% i*% mt.base.size +% GenericSeqSize),