From 6ff596d4f8fec289c827a5be2edd6646e6a20bb4 Mon Sep 17 00:00:00 2001 From: ishowta Date: Wed, 21 Nov 2018 19:56:38 +0900 Subject: [PATCH] Empty check in shallow [backport] (#9676) --- lib/system.nim | 1 + tests/seq/tseq.nim | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/lib/system.nim b/lib/system.nim index ace3f5e385..a7b22a2839 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -4017,6 +4017,7 @@ proc shallow*[T](s: var seq[T]) {.noSideEffect, inline.} = ## marks a sequence `s` as `shallow`:idx:. Subsequent assignments will not ## perform deep copies of `s`. This is only useful for optimization ## purposes. + if s.len == 0: return when not defined(JS) and not defined(nimscript): var s = cast[PGenericSeq](s) s.reserved = s.reserved or seqShallowFlag diff --git a/tests/seq/tseq.nim b/tests/seq/tseq.nim index 6528d518e8..1cb94b308d 100644 --- a/tests/seq/tseq.nim +++ b/tests/seq/tseq.nim @@ -170,6 +170,30 @@ block tshallowseq: xxx() +block tshallowemptyseq: + proc test() = + var nilSeq: seq[int] = @[] + var emptySeq: seq[int] = newSeq[int]() + block: + var t = @[1,2,3] + shallow(nilSeq) + t = nilSeq + doAssert t == @[] + block: + var t = @[1,2,3] + shallow(emptySeq) + t = emptySeq + doAssert t == @[] + block: + var t = @[1,2,3] + shallowCopy(t, nilSeq) + doAssert t == @[] + block: + var t = @[1,2,3] + shallowCopy(t, emptySeq) + doAssert t == @[] + test() + import strutils block ttoseq: