11import { assertGreater } from "@std/assert/greater" ;
22import { MemoizationCacheResult , memoize } from "@std/cache/memoize" ;
3+ import { lazy as lazyEval } from "../../misc/misc.ts" ;
34import { ArrayResult , ArrayResultError } from "../array_result.ts" ;
45
56type ParserResult < T > = ArrayResult < Readonly < { value : T ; length : number } > > ;
@@ -188,7 +189,7 @@ export function sequence<T extends ReadonlyArray<unknown>>(
188189}
189190export const many = memoize ( < T > ( parser : Parser < T > ) : Parser < ReadonlyArray < T > > =>
190191 choice (
191- sequence ( parser , lazy ( ( ) => many ( parser ) ) )
192+ sequence ( parser , lazy ( lazyEval ( ( ) => many ( parser ) ) ) )
192193 . map ( ( [ first , rest ] ) => [ first , ...rest ] ) ,
193194 emptyArray ,
194195 )
@@ -201,7 +202,7 @@ export function manyAtLeastOnce<T>(
201202}
202203export const all = memoize ( < T > ( parser : Parser < T > ) : Parser < ReadonlyArray < T > > =>
203204 choiceOnlyOne (
204- sequence ( parser , lazy ( ( ) => all ( parser ) ) )
205+ sequence ( parser , lazy ( lazyEval ( ( ) => all ( parser ) ) ) )
205206 . map ( ( [ first , rest ] ) => [ first , ...rest ] ) ,
206207 emptyArray ,
207208 )
@@ -382,7 +383,7 @@ export const allWithCheck = memoize(<T>(
382383 choiceWithCheck (
383384 new CheckedParser (
384385 parser . check ,
385- sequence ( parser . parser , lazy ( ( ) => allWithCheck ( parser ) ) )
386+ sequence ( parser . parser , lazy ( lazyEval ( ( ) => allWithCheck ( parser ) ) ) )
386387 . map ( ( [ first , rest ] ) => [ first , ...rest ] ) ,
387388 ) ,
388389 checkedAsWhole ( emptyArray ) ,
0 commit comments