Fix #19297 - fixing broken list after adding empty list (#19299)

* Update lists.nim

* Update tlists.nim

* removed check `if b.tail != nil`

The tail of the list being null it is still possible to retrieve its end by going through all nodes from the head. So checking for null from `b.tail` is unnecessary. However, setting `a.tail = b.tail` only if `a.head != nil`, so you don't break a good list with an already broken one.
This commit is contained in:
rockcavera 2021-12-30 17:52:48 -03:00 • committed by GitHub
commit dc5c88ca79
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 5 deletions

View file

@ -530,11 +530,12 @@ proc addMoved*[T](a, b: var SinglyLinkedList[T]) {.since: (1, 5, 1).} =
ci ci
assert s == [0, 1, 0, 1, 0, 1] assert s == [0, 1, 0, 1, 0, 1]
if a.tail != nil: if b.head != nil:
a.tail.next = b.head if a.head == nil:
a.tail = b.tail a.head = b.head
if a.head == nil: else:
a.head = b.head a.tail.next = b.head
a.tail = b.tail
if a.addr != b.addr: if a.addr != b.addr:
b.head = nil b.head = nil
b.tail = nil b.tail = nil

View file

@ -234,5 +234,17 @@ template main =
doAssert l.remove(l.head) == true doAssert l.remove(l.head) == true
doAssert l.toSeq == [] doAssert l.toSeq == []
block issue19297: # add (appends a shallow copy)
var a: SinglyLinkedList[int]
var b: SinglyLinkedList[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() static: main()
main() main()