From edefe4db21e64d751d503e55e502849ea2bbd6ed Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Mon, 9 Oct 2017 17:55:12 -0300 Subject: [PATCH] Futher improve seq assingment speed by 2x factor (#6437) --- lib/system/assign.nim | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/system/assign.nim b/lib/system/assign.nim index 115df61a75..f061c89cfe 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),