summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorrockcavera <rockcavera@gmail.com>2022-01-03 16:14:08 -0300
committerGitHub <noreply@github.com>2022-01-03 20:14:08 +0100
commit526a32e1697489b73e54c1b984ba5413842f1252 (patch)
tree1ee422db0677e78ea8338045a14af4410df5cf30
parent19bcb43a0e21dd222ffd3fad8c5fb2d8e85d59ea (diff)
downloadNim-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.nim12
-rw-r--r--tests/stdlib/tlists.nim12
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()