diff options
author | rockcavera <rockcavera@gmail.com> | 2022-01-03 16:14:08 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-03 20:14:08 +0100 |
commit | 526a32e1697489b73e54c1b984ba5413842f1252 (patch) | |
tree | 1ee422db0677e78ea8338045a14af4410df5cf30 | |
parent | 19bcb43a0e21dd222ffd3fad8c5fb2d8e85d59ea (diff) | |
download | Nim-526a32e1697489b73e54c1b984ba5413842f1252.tar.gz |
Fix #19314 - fixing broken `DoublyLinkedList` after adding empty `DoublyLinkedList` (#19315) [backport]
* Update lists.nim * Update tlists.nim
-rw-r--r-- | lib/pure/collections/lists.nim | 12 | ||||
-rw-r--r-- | tests/stdlib/tlists.nim | 12 |
2 files changed, 18 insertions, 6 deletions
diff --git a/lib/pure/collections/lists.nim b/lib/pure/collections/lists.nim index de5550d6e..f7627ae67 100644 --- a/lib/pure/collections/lists.nim +++ b/lib/pure/collections/lists.nim @@ -675,12 +675,12 @@ proc addMoved*[T](a, b: var DoublyLinkedList[T]) {.since: (1, 5, 1).} = assert s == [0, 1, 0, 1, 0, 1] if b.head != nil: - b.head.prev = a.tail - if a.tail != nil: - a.tail.next = b.head - a.tail = b.tail - if a.head == nil: - a.head = b.head + if a.head == nil: + a.head = b.head + else: + b.head.prev = a.tail + a.tail.next = b.head + a.tail = b.tail if a.addr != b.addr: b.head = nil b.tail = nil diff --git a/tests/stdlib/tlists.nim b/tests/stdlib/tlists.nim index 2f6d5ee6a..14cbf2f9d 100644 --- a/tests/stdlib/tlists.nim +++ b/tests/stdlib/tlists.nim @@ -245,6 +245,18 @@ template main = doAssert a.toSeq == @[1] a.add(2) doAssert a.toSeq == @[1, 2] + + block issue19314: # add (appends a shallow copy) + var a: DoublyLinkedList[int] + var b: DoublyLinkedList[int] + + doAssert a.toSeq == @[] + a.add(1) + doAssert a.toSeq == @[1] + a.add(b) + doAssert a.toSeq == @[1] + a.add(2) + doAssert a.toSeq == @[1, 2] static: main() main() |