From 1b779a7f782b1d3b1d17464ad958d5efc5d7fb9c Mon Sep 17 00:00:00 2001 From: Gert Hulselmans Date: Tue, 23 Dec 2025 13:49:28 +0100 Subject: [PATCH] Fix "done" method of generators. Fix "done" method of generators as before it would segfault in debug mode when getting the next element when the iterator was finished. $ cat test_iter.codon b = [1, 2, 3] d = iter(b) print(min(d)) print(d.done()) print(min(d)) $ /software/exaloop/codon/codon-0.19.4/bin/codon run test_iter.codon 1 Segmentation fault (core dumped) $ /software/exaloop/codon/codon-0.19.4_done_fix/bin/codon run test_iter.codon 1 True ValueError: min() arg is an empty sequence Raised from: std.internal.builtin.min.0:0 /software/exaloop/codon/codon-0.19.4_pipe/lib/codon/stdlib/internal/builtin.codon:83:13 Backtrace: [0x7f9950a9986f] std.internal.builtin.min.0:0[Tuple[Generator[int]],Optional[NoneType],Optional[NoneType]].851 at /software/exaloop/codon/codon-0.19.4_pipe/lib/codon/stdlib/internal/builtin.codon:83:13 [0x7f9950a9e8d2] main.0 at /software/exaloop/codon/test_iter.codon:6:7 Aborted (core dumped) Fixes: https://github.com/exaloop/codon/issues/246 --- stdlib/internal/types/generator.codon | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/stdlib/internal/types/generator.codon b/stdlib/internal/types/generator.codon index 0bd049b3d..3dd7d3dd8 100644 --- a/stdlib/internal/types/generator.codon +++ b/stdlib/internal/types/generator.codon @@ -7,8 +7,10 @@ class Generator: pass def done(self) -> bool: - self.__resume__() - return self.__done__() + is_done = self.__done__() + if not is_done: + self.__resume__() + return is_done def next(self: Generator[T]) -> T: if isinstance(T, None):