@@ -17,9 +17,13 @@ export class Parser<T> {
1717 readonly #parser: ( src : string ) => ParserResult < T > ;
1818 static cache : null | Cache = null ;
1919 constructor ( parser : ( src : string ) => ParserResult < T > ) {
20- const cache = new Map < string , ParserResult < T > > ( ) ;
21- Parser . addToCache ( cache ) ;
22- this . #parser = memoize ( parser , { cache } ) ;
20+ if ( Parser . cache != null ) {
21+ const cache = new Map < string , ParserResult < T > > ( ) ;
22+ Parser . addToCache ( cache ) ;
23+ this . #parser = memoize ( parser , { cache } ) ;
24+ } else {
25+ this . #parser = parser ;
26+ }
2327 }
2428 parser ( src : string ) : ParserResult < T > {
2529 return ArrayResult . from ( ( ) => this . #parser( src ) ) ;
@@ -140,9 +144,13 @@ export function lookAhead<T>(parser: Parser<T>): Parser<T> {
140144 */
141145export function lazy < T > ( parser : ( ) => Parser < T > ) : Parser < T > {
142146 const { cache } = Parser ;
143- const cachedParser = new Lazy ( ( ) => Parser . inContext ( parser , cache ) ) ;
144- Parser . addToCache ( cachedParser ) ;
145- return new Parser ( ( src ) => cachedParser . getValue ( ) . parser ( src ) ) ;
147+ if ( Parser . cache != null ) {
148+ const cachedParser = new Lazy ( ( ) => Parser . inContext ( parser , cache ) ) ;
149+ Parser . addToCache ( cachedParser ) ;
150+ return new Parser ( ( src ) => cachedParser . getValue ( ) . parser ( src ) ) ;
151+ } else {
152+ return new Parser ( ( src ) => Parser . inContext ( parser , cache ) . parser ( src ) ) ;
153+ }
146154}
147155/**
148156 * Evaluates all parsers on the same source string and sums it all on a single
0 commit comments