collections: fix LinkedList.to_format

For-loop in LinkedList.to_format goes brrrrrr and prints the value of
the first node an infinte number of times because it does not properly
iterate the linked list.

Fix the list iterations and add the missing string format specifier.

Bug can be reproduced with:
```
import std;
fn void main() => @pool()
{
	io::printfn("%s", linkedlist::@tnew{usz}({1,2,3}));
}
```
This commit is contained in:
Koni Marti
2026-01-13 21:56:21 +01:00
committed by Christoffer Lerno
parent 9d54e9e3c4
commit 15fc435d92
2 changed files with 3 additions and 2 deletions

View File

@@ -24,9 +24,9 @@ struct LinkedList
fn usz? LinkedList.to_format(&self, Formatter* f) @dynamic fn usz? LinkedList.to_format(&self, Formatter* f) @dynamic
{ {
usz len = f.print("{ ")!; usz len = f.print("{ ")!;
for (Node* node = self._first; node != null; node.next) for (Node* node = self._first; node != null; node = node.next)
{ {
len += f.printf(node.next ? "%s, " : "s", node.value)!; len += f.printf(node.next ? "%s, " : "%s", node.value)!;
} }
return len + f.print(" }"); return len + f.print(" }");
} }

View File

@@ -56,6 +56,7 @@
- Assert on optional-returning-function in a comma expression. #2722 - Assert on optional-returning-function in a comma expression. #2722
- Creating recursive debug info for functions could cause assertions. - Creating recursive debug info for functions could cause assertions.
- bitorder::read and bitorder::write may fail because of unaligned access #2734. - bitorder::read and bitorder::write may fail because of unaligned access #2734.
- Fix `LinkedList.to_format` to properly iterate linked list for printing.
### Stdlib changes ### Stdlib changes
- Add `ThreadPool` join function to wait for all threads to finish in the pool without destroying the threads. - Add `ThreadPool` join function to wait for all threads to finish in the pool without destroying the threads.