diff --git a/deno.json b/deno.json index 8fd94b1..b284085 100644 --- a/deno.json +++ b/deno.json @@ -1,5 +1,5 @@ { "name": "@marcisbee/nanolex", - "version": "0.3.0", + "version": "0.3.1", "exports": "./src/nanolex.ts" } diff --git a/package.json b/package.json index a65611f..916cadc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nanolex", - "version": "0.3.0", + "version": "0.3.1", "description": "Parser grammar builder", "main": "./dist/nanolex.js", "module": "./dist/nanolex.mjs", diff --git a/src/nanolex.ts b/src/nanolex.ts index 781d8fe..a6254a0 100644 --- a/src/nanolex.ts +++ b/src/nanolex.ts @@ -12,20 +12,23 @@ export function createToken( const source = isString ? token.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") : token.source; - const _c: Record = {}; + const cache = new Map(); return { token, name, source, - test(value: string) { + test(value: string): boolean { if (isString) { return value === token; } // return value.match(token)?.[0] === value; - return (_c[value] ??= value.match(token)?.[0] === value); + let v: boolean; + return cache.has(value) + ? cache.get(value)! + : ((v = value.match(token)?.[0] === value), cache.set(value, v), v); // const regex = new RegExp(`^${this.source}\$`); // return regex.test(value);