1
1
import { assertGreater } from "@std/assert/greater" ;
2
2
import { MemoizationCacheResult , memoize } from "@std/cache/memoize" ;
3
+ import { lazy as lazyEval } from "../../misc/misc.ts" ;
3
4
import { ArrayResult , ArrayResultError } from "../array_result.ts" ;
4
5
5
6
type ParserResult < T > = ArrayResult < Readonly < { value : T ; length : number } > > ;
@@ -188,7 +189,7 @@ export function sequence<T extends ReadonlyArray<unknown>>(
188
189
}
189
190
export const many = memoize ( < T > ( parser : Parser < T > ) : Parser < ReadonlyArray < T > > =>
190
191
choice (
191
- sequence ( parser , lazy ( ( ) => many ( parser ) ) )
192
+ sequence ( parser , lazy ( lazyEval ( ( ) => many ( parser ) ) ) )
192
193
. map ( ( [ first , rest ] ) => [ first , ...rest ] ) ,
193
194
emptyArray ,
194
195
)
@@ -201,7 +202,7 @@ export function manyAtLeastOnce<T>(
201
202
}
202
203
export const all = memoize ( < T > ( parser : Parser < T > ) : Parser < ReadonlyArray < T > > =>
203
204
choiceOnlyOne (
204
- sequence ( parser , lazy ( ( ) => all ( parser ) ) )
205
+ sequence ( parser , lazy ( lazyEval ( ( ) => all ( parser ) ) ) )
205
206
. map ( ( [ first , rest ] ) => [ first , ...rest ] ) ,
206
207
emptyArray ,
207
208
)
@@ -382,7 +383,7 @@ export const allWithCheck = memoize(<T>(
382
383
choiceWithCheck (
383
384
new CheckedParser (
384
385
parser . check ,
385
- sequence ( parser . parser , lazy ( ( ) => allWithCheck ( parser ) ) )
386
+ sequence ( parser . parser , lazy ( lazyEval ( ( ) => allWithCheck ( parser ) ) ) )
386
387
. map ( ( [ first , rest ] ) => [ first , ...rest ] ) ,
387
388
) ,
388
389
checkedAsWhole ( emptyArray ) ,
0 commit comments