From b2b07ef0612cc549508b757826d8d143d9587119 Mon Sep 17 00:00:00 2001 From: Chuck Daniels Date: Thu, 23 Mar 2023 12:59:31 -0400 Subject: Make iterator.any/all TCO eligible in JavaScript Fixes #427 --- src/gleam/iterator.gleam | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/gleam/iterator.gleam b/src/gleam/iterator.gleam index 89d50a8..1486ae3 100644 --- a/src/gleam/iterator.gleam +++ b/src/gleam/iterator.gleam @@ -995,7 +995,11 @@ fn do_any( ) -> Bool { case continuation() { Stop -> False - Continue(e, next) -> predicate(e) || do_any(next, predicate) + Continue(e, next) -> + case predicate(e) { + True -> True + False -> do_any(next, predicate) + } } } @@ -1037,7 +1041,11 @@ fn do_all( ) -> Bool { case continuation() { Stop -> True - Continue(e, next) -> predicate(e) && do_all(next, predicate) + Continue(e, next) -> + case predicate(e) { + True -> do_all(next, predicate) + False -> False + } } } @@ -1391,10 +1399,10 @@ fn do_length(over continuation: fn() -> Action(e), with length: Int) -> Int { /// Counts the number of elements in the given iterator. /// /// This function has to traverse the entire iterator to count its elements, -/// so it runs in linear time. +/// so it runs in linear time. /// /// ## Examples -/// +/// /// ```gleam /// > empty() |> length /// 0 -- cgit v1.2.3