diff options
author | ishowta <kinironote@gmail.com> | 2018-11-21 19:56:38 +0900 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-11-21 11:56:38 +0100 |
commit | 6ff596d4f8fec289c827a5be2edd6646e6a20bb4 (patch) | |
tree | 43dfa3b3654a315e3580cf1763fad92e50b6eaaf | |
parent | b78699917e9c993bca04c262b909ea8b13aa2724 (diff) | |
download | Nim-6ff596d4f8fec289c827a5be2edd6646e6a20bb4.tar.gz |
Empty check in shallow [backport] (#9676)
-rw-r--r-- | lib/system.nim | 1 | ||||
-rw-r--r-- | tests/seq/tseq.nim | 24 |
2 files changed, 25 insertions, 0 deletions
diff --git a/lib/system.nim b/lib/system.nim index ace3f5e38..a7b22a283 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 6528d518e..1cb94b308 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: |