@thomasfosterau/effect-parse 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -14
- package/dist/Ascii.d.ts +11 -4
- package/dist/Ascii.d.ts.map +1 -1
- package/dist/Ascii.js +7 -1
- package/dist/Ascii.js.map +1 -1
- package/dist/Binary.d.ts.map +1 -1
- package/dist/Binary.js +64 -35
- package/dist/Binary.js.map +1 -1
- package/dist/Bits.d.ts.map +1 -1
- package/dist/Bits.js +7 -4
- package/dist/Bits.js.map +1 -1
- package/dist/Compiler.d.ts +74 -2
- package/dist/Compiler.d.ts.map +1 -1
- package/dist/Compiler.js +78 -1
- package/dist/Compiler.js.map +1 -1
- package/dist/Expression.d.ts.map +1 -1
- package/dist/Expression.js +86 -74
- package/dist/Expression.js.map +1 -1
- package/dist/Input.d.ts +37 -4
- package/dist/Input.d.ts.map +1 -1
- package/dist/Input.js +42 -0
- package/dist/Input.js.map +1 -1
- package/dist/Nom.d.ts +5 -15
- package/dist/Nom.d.ts.map +1 -1
- package/dist/Nom.js.map +1 -1
- package/dist/ParseError.d.ts +2 -2
- package/dist/ParseError.d.ts.map +1 -1
- package/dist/ParseError.js +1 -1
- package/dist/ParseError.js.map +1 -1
- package/dist/Parser.d.ts +370 -28
- package/dist/Parser.d.ts.map +1 -1
- package/dist/Parser.js +390 -19
- package/dist/Parser.js.map +1 -1
- package/dist/ParserSchema.js +2 -2
- package/dist/ParserSchema.js.map +1 -1
- package/dist/ParserStream.d.ts +3 -2
- package/dist/ParserStream.d.ts.map +1 -1
- package/dist/ParserStream.js +15 -10
- package/dist/ParserStream.js.map +1 -1
- package/dist/Syntax.d.ts +23 -5
- package/dist/Syntax.d.ts.map +1 -1
- package/dist/Syntax.js.map +1 -1
- package/dist/Text.d.ts.map +1 -1
- package/dist/Text.js +9 -9
- package/dist/Text.js.map +1 -1
- package/dist/Token.d.ts +55 -10
- package/dist/Token.d.ts.map +1 -1
- package/dist/Token.js +59 -21
- package/dist/Token.js.map +1 -1
- package/dist/internal/compiler/closure.d.ts.map +1 -1
- package/dist/internal/compiler/closure.js +257 -97
- package/dist/internal/compiler/closure.js.map +1 -1
- package/dist/internal/compiler/entries.d.ts +3 -1
- package/dist/internal/compiler/entries.d.ts.map +1 -1
- package/dist/internal/compiler/entries.js +3 -2
- package/dist/internal/compiler/entries.js.map +1 -1
- package/dist/internal/compiler/first.d.ts.map +1 -1
- package/dist/internal/compiler/first.js +7 -1
- package/dist/internal/compiler/first.js.map +1 -1
- package/dist/internal/compiler/graph.d.ts +17 -0
- package/dist/internal/compiler/graph.d.ts.map +1 -0
- package/dist/internal/compiler/graph.js +56 -0
- package/dist/internal/compiler/graph.js.map +1 -0
- package/dist/internal/compiler/jit.d.ts +5 -0
- package/dist/internal/compiler/jit.d.ts.map +1 -1
- package/dist/internal/compiler/jit.js +185 -96
- package/dist/internal/compiler/jit.js.map +1 -1
- package/dist/internal/compiler/registry.d.ts +10 -2
- package/dist/internal/compiler/registry.d.ts.map +1 -1
- package/dist/internal/compiler/registry.js.map +1 -1
- package/dist/internal/compiler/search.d.ts +32 -0
- package/dist/internal/compiler/search.d.ts.map +1 -0
- package/dist/internal/compiler/search.js +68 -0
- package/dist/internal/compiler/search.js.map +1 -0
- package/dist/internal/compiler/sets.d.ts.map +1 -1
- package/dist/internal/compiler/sets.js +1 -1
- package/dist/internal/compiler/sets.js.map +1 -1
- package/dist/internal/compiler/wasm.d.ts +8 -0
- package/dist/internal/compiler/wasm.d.ts.map +1 -0
- package/dist/internal/compiler/wasm.js +2769 -0
- package/dist/internal/compiler/wasm.js.map +1 -0
- package/dist/internal/compiler/wasmAsm.d.ts +199 -0
- package/dist/internal/compiler/wasmAsm.d.ts.map +1 -0
- package/dist/internal/compiler/wasmAsm.js +427 -0
- package/dist/internal/compiler/wasmAsm.js.map +1 -0
- package/dist/internal/entries.d.ts +3 -1
- package/dist/internal/entries.d.ts.map +1 -1
- package/dist/internal/entries.js +1 -2
- package/dist/internal/entries.js.map +1 -1
- package/dist/internal/node.d.ts +58 -2
- package/dist/internal/node.d.ts.map +1 -1
- package/dist/internal/node.js +13 -3
- package/dist/internal/node.js.map +1 -1
- package/dist/internal/numbers.d.ts.map +1 -1
- package/dist/internal/numbers.js.map +1 -1
- package/dist/internal/run.d.ts +12 -0
- package/dist/internal/run.d.ts.map +1 -1
- package/dist/internal/run.js +51 -11
- package/dist/internal/run.js.map +1 -1
- package/dist/internal/stack.d.ts +6 -0
- package/dist/internal/stack.d.ts.map +1 -1
- package/dist/internal/stack.js +8 -2
- package/dist/internal/stack.js.map +1 -1
- package/dist/internal/syntax.d.ts +4 -4
- package/dist/internal/syntax.d.ts.map +1 -1
- package/dist/internal/syntax.js +18 -10
- package/dist/internal/syntax.js.map +1 -1
- package/dist/internal/text.d.ts +32 -0
- package/dist/internal/text.d.ts.map +1 -1
- package/dist/internal/text.js +68 -14
- package/dist/internal/text.js.map +1 -1
- package/dist/internal/tokens.d.ts +13 -0
- package/dist/internal/tokens.d.ts.map +1 -1
- package/dist/internal/tokens.js +59 -39
- package/dist/internal/tokens.js.map +1 -1
- package/package.json +5 -4
- package/src/Ascii.ts +42 -9
- package/src/Binary.ts +151 -71
- package/src/Bits.ts +12 -6
- package/src/Compiler.ts +101 -10
- package/src/Expression.ts +94 -81
- package/src/Input.ts +65 -6
- package/src/Nom.ts +15 -5
- package/src/ParseError.ts +9 -4
- package/src/Parser.ts +682 -129
- package/src/ParserSchema.ts +1 -1
- package/src/ParserStream.ts +40 -19
- package/src/Syntax.ts +60 -36
- package/src/Text.ts +16 -15
- package/src/Token.ts +138 -29
- package/src/internal/compiler/closure.ts +362 -135
- package/src/internal/compiler/entries.ts +4 -2
- package/src/internal/compiler/first.ts +10 -0
- package/src/internal/compiler/graph.ts +68 -0
- package/src/internal/compiler/jit.ts +284 -154
- package/src/internal/compiler/registry.ts +10 -2
- package/src/internal/compiler/search.ts +68 -0
- package/src/internal/compiler/sets.ts +7 -3
- package/src/internal/compiler/wasm.ts +3203 -0
- package/src/internal/compiler/wasmAsm.ts +484 -0
- package/src/internal/entries.ts +10 -4
- package/src/internal/node.ts +54 -4
- package/src/internal/numbers.ts +3 -1
- package/src/internal/run.ts +71 -12
- package/src/internal/stack.ts +8 -1
- package/src/internal/syntax.ts +39 -18
- package/src/internal/text.ts +97 -9
- package/src/internal/tokens.ts +96 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jit.js","names":["closureBackend"],"sources":["../../../src/internal/compiler/jit.ts"],"sourcesContent":["// fallow-ignore-file duplicate-export -- every compiler module exports its `backend` under the same name,\n// which the Compiler module imports by path; no barrel re-exports both.\n/**\n * The JIT: emits JavaScript source for a parser's description and builds\n * it with `new Function`.\n *\n * Every rule (the root, every `suspend` target and every non-leaf parser\n * with several parents) becomes a function `f(p)` taking the cursor and\n * returning the value, or `Fail`, leaving the new cursor in the register\n * `P`. Everything else is inlined as straight-line code, with labelled\n * blocks for failure. The cursor is a local; the input and its end are\n * hoisted into locals. Failures only set `state.mode`, as in the closure\n * compiler.\n *\n * Nodes without an inline form run their closure-compiled steps (which run\n * the interpreter for what they can't compile) on the shared state, with\n * `state.pos` kept in sync.\n */\nimport * as Arr from \"effect/Array\"\nimport * as Predicate from \"effect/Predicate\"\nimport * as Option from \"effect/Option\"\nimport * as Result from \"effect/Result\"\nimport type { Encoding } from \"../../Encoding.js\"\nimport type { State } from \"../../Input.js\"\nimport { Fail } from \"../../Input.js\"\nimport type { Node, NodeOf, ParserLike } from \"../node.js\"\nimport { addEntry, flushEntries, fromEntries, isPlainKey } from \"../entries.js\"\nimport { children, nodeOf, scansFloat } from \"../node.js\"\nimport { floatScan, floatTexts, scanFloatBytes, scanFloatString, toFloat } from \"../numbers.js\"\nimport { compileAny } from \"../tokens.js\"\nimport { Key } from \"../key.js\"\nimport * as Resume from \"../resume.js\"\nimport { charOf, fastLimit, latin1, string, utf16be, utf16le, utf8, validate } from \"../text.js\"\nimport type { ClosureCompiler, CompiledRoot, Fallback, Step } from \"./closure.js\"\nimport { backend as closureBackend, createClosureCompiler } from \"./closure.js\"\nimport { buildsEntries, pairOf } from \"./entries.js\"\nimport type { Backend } from \"./registry.js\"\nimport type { First } from \"./first.js\"\nimport { planAlt, Strict } from \"./first.js\"\nimport type { CharSet } from \"./sets.js\"\nimport { acceptTable, kindOfEncoding, reachesAbove, TableSize, textSet, tokenSet } from \"./sets.js\"\n\n/** Helpers available to generated code as `R`. */\nconst runtime = {\n take: Resume.take,\n save: Resume.save,\n Done: Resume.Done,\n /** Records the result of a resumed repetition (see `Resume.done`). */\n done: (state: State<any>, key: Key, entry: number, value: unknown, pos: number): void =>\n Resume.save(state, key, entry, new Resume.Done(value, pos)),\n some: Option.some,\n none: Option.none,\n charOf,\n scanFloatString,\n scanFloatBytes,\n isPlainKey,\n addEntry,\n flushEntries,\n /** `Text.taken`: the text of `[start, end)`, or `Fail` if it is malformed. */\n textOf: (enc: Encoding<any>, fast: number, s: State<any>, start: number, end: number): unknown => {\n const input = s.input\n let i = start\n if (s.inputKind === 0) while (i < end && (input as string).charCodeAt(i) < fast) i++\n else while (i < end && (input as Uint8Array)[i] < fast) i++\n if (i < end && validate(enc, s, i, end) < 0) {\n s.mode = \"Backtrack\"\n return Fail\n }\n return enc.text(input, start, end)\n }\n}\n\nlet checked: FunctionConstructor | undefined\nlet supported = false\n\n/**\n * Whether `new Function` works here (it doesn't under a Content Security\n * Policy). Checked once, and again if `globalThis.Function` is replaced.\n */\nconst jitSupported = (): boolean => {\n if (checked !== globalThis.Function) {\n checked = globalThis.Function\n const fn = checked\n supported = Result.getOrElse(\n Result.try(() => fn(\"return true\")() === true),\n () => false\n )\n }\n return supported\n}\n\nconst BT = `$S.mode=\"Backtrack\";`\n\nconst builtinEncodings: ReadonlySet<Encoding<any>> = /*#__PURE__*/ new Set([string, utf8, utf16le, utf16be, latin1])\n\n/** How many units past the cursor a single token can depend on (see the closure compiler). */\nconst Margin = 4\n\n/** How generated code reads the code units of an encoding (see `Emitter.reader`). */\ninterface Reader {\n readonly width: number\n readonly fast: number\n readonly guard: (i: string) => string\n readonly unit: (i: string) => string\n}\n\n/** Per generated function: its local variables. */\nclass Fn {\n readonly vars: Array<string> = []\n}\n\nconst isLeaf = (node: Node): boolean => {\n switch (node._tag) {\n case \"Succeed\":\n case \"Fail\":\n case \"Eof\":\n case \"Location\":\n case \"RestLen\":\n case \"Any\":\n case \"Literal\":\n case \"OneOf\":\n case \"TakeWhile\":\n return true\n default:\n return false\n }\n}\n\nconst lowerAscii = (c: number): number => (c >= 65 && c <= 90 ? c + 32 : c)\nconst isLetter = (c: number): boolean => (c >= 65 && c <= 90) || (c >= 97 && c <= 122)\n\n/** The inclusive ranges of 1s in a table. */\nconst runsOf = (table: Uint8Array): Array<[number, number]> => {\n const out: Array<[number, number]> = []\n for (let i = 0; i < table.length; i++) {\n if (table[i] !== 1) continue\n let j = i\n while (j + 1 < table.length && table[j + 1] === 1) j++\n out.push([i, j])\n i = j\n }\n return out\n}\n\n/** A JavaScript expression testing `v` against ranges, or `undefined` if too long. */\nconst rangeTest = (runs: ReadonlyArray<readonly [number, number]>, v: string): string | undefined => {\n if (Arr.isReadonlyArrayEmpty(runs)) return \"false\"\n if (runs.length > 4) return undefined\n return runs.map(([a, b]) => (a === b ? `${v}===${a}` : `(${v}>=${a}&&${v}<=${b})`)).join(\"||\")\n}\n\n/** The inclusive ranges of `[0, size)` where `table[c] === value`. */\nconst runsWhere = (table: Uint8Array, size: number, value: 0 | 1): Array<[number, number]> => {\n const out: Array<[number, number]> = []\n for (let i = 0; i < size; i++) {\n if (table[i] !== value) continue\n let j = i\n while (j + 1 < size && table[j + 1] === value) j++\n out.push([i, j])\n i = j\n }\n return out\n}\n\n/** How many comparisons it takes to test a run of `[0, size)`. */\nconst runCost = ([a, b]: readonly [number, number], size: number): number =>\n a === b || a === 0 || b === size - 1 ? 1 : 2\n\n/**\n * A JavaScript expression testing whether `v`, known to be in `[0, size)`,\n * is accepted by `table`, or `undefined` if that takes too many comparisons.\n * It tests the accepted runs or the rejected ones, whichever is cheaper:\n * `c!==34&&c!==92&&c>=32` rather than three two-sided ranges.\n */\nconst tableTest = (table: Uint8Array, v: string, size: number): string | undefined => {\n const accept = runsWhere(table, size, 1)\n const reject = runsWhere(table, size, 0)\n if (Arr.isReadonlyArrayEmpty(accept)) return \"false\"\n if (Arr.isReadonlyArrayEmpty(reject)) return \"true\"\n const cost = (runs: ReadonlyArray<readonly [number, number]>) => runs.reduce((n, r) => n + runCost(r, size), 0)\n const acceptCost = cost(accept)\n const rejectCost = cost(reject)\n if (Math.min(acceptCost, rejectCost) > 6) return undefined\n const terms =\n acceptCost <= rejectCost\n ? accept\n .map(([a, b]) =>\n a === b\n ? `${v}===${a}`\n : a === 0\n ? `${v}<=${b}`\n : b === size - 1\n ? `${v}>=${a}`\n : `(${v}>=${a}&&${v}<=${b})`\n )\n .join(\"||\")\n : reject\n .map(([a, b]) =>\n a === b ? `${v}!==${a}` : a === 0 ? `${v}>${b}` : b === size - 1 ? `${v}<${a}` : `(${v}<${a}||${v}>${b})`\n )\n .join(\"&&\")\n return `(${terms})`\n}\n\n/**\n * A repetition that builds its own result (see `Emitter.entries`): `init`\n * starts it, `element(fail, check)` parses one element, runs `check` (the\n * repetition's loop check) and adds the element, and `finish` ends it.\n */\ninterface Collect {\n readonly init: string\n readonly element: (fail: string, check: string) => string\n readonly finish: string\n}\n\nclass Emitter {\n readonly constants: Array<unknown> = []\n private readonly constantIndex = new Map<unknown, number>()\n readonly functions: Array<string> = []\n private readonly rules = [new Map<ParserLike, string>(), new Map<ParserLike, string>()]\n private readonly refs = new Map<ParserLike, number>()\n private readonly closure: ClosureCompiler\n private next = 0\n\n constructor(\n readonly root: ParserLike,\n readonly kind: 0 | 1 | 2,\n readonly resumable = false\n ) {\n this.closure = createClosureCompiler(kind, resumable)\n this.countRefs(root)\n }\n\n get fallbacks(): ReadonlyArray<Fallback> {\n return this.closure.fallbacks\n }\n\n /** Counts the distinct parents of each parser. */\n private countRefs(root: ParserLike): void {\n const seen = new Set<ParserLike>()\n const stack = [root]\n for (let p = stack.pop(); p !== undefined; p = stack.pop()) {\n if (seen.has(p)) continue\n seen.add(p)\n for (const c of new Set(children(nodeOf(p)))) {\n this.refs.set(c, (this.refs.get(c) ?? 0) + 1)\n stack.push(c)\n }\n }\n }\n\n const(value: unknown): string {\n let i = this.constantIndex.get(value)\n if (i === undefined) {\n i = this.constants.length\n this.constants.push(value)\n this.constantIndex.set(value, i)\n }\n return `C[${i}]`\n }\n\n /** A JavaScript literal for simple values, otherwise a constant. */\n lit(value: unknown): string {\n if (value === undefined) return \"void 0\"\n if (value === null || Predicate.isBoolean(value)) return String(value)\n if (Predicate.isNumber(value) && Number.isFinite(value) && !Object.is(value, -0)) return String(value)\n if (Predicate.isString(value) && value.length < 64) return JSON.stringify(value)\n return this.const(value)\n }\n\n v(fn: Fn): string {\n const name = `v${this.next++}`\n fn.vars.push(name)\n return name\n }\n\n label(): string {\n return `L${this.next++}`\n }\n\n unit(i: string): string {\n return this.kind === 0 ? `I.charCodeAt(${i})` : `I[${i}]`\n }\n\n /**\n * How generated code reads an encoding's code units: units below `fast`\n * are whole code points, `width` input units long. `guard(i)` says that a\n * whole unit is available at `i`.\n */\n reader(enc: Encoding<any>): Reader {\n if (enc === utf16le || enc === utf16be) {\n const [lo, hi] = enc === utf16le ? [\"\", \"+1\"] : [\"+1\", \"\"]\n return {\n width: 2,\n fast: 0xd800,\n guard: (i) => `${i}+1<E`,\n unit: (i) => `(I[${i}${lo}]|I[${i}${hi}]<<8)`\n }\n }\n return { width: 1, fast: enc.unit === 1 ? fastLimit(enc) : 0, guard: (i) => `${i}<E`, unit: (i) => this.unit(i) }\n }\n\n /** The function implementing a rule, generating it on first use. */\n rule(p: ParserLike, used: boolean): string {\n const rules = this.rules[used ? 1 : 0]\n let name = rules.get(p)\n if (name !== undefined) return name\n name = `f${this.next++}`\n rules.set(p, name)\n const fn = new Fn()\n const out = used ? this.v(fn) : null\n const done = this.label()\n const body = this.inline(p, used, out, `break ${done};`, fn, 0)\n this.functions.push(\n `function ${name}(p){const I=$I,E=$E;${Arr.isArrayNonEmpty(fn.vars) ? `let ${fn.vars.join(\",\")};` : \"\"}` +\n `${done}:{${body}P=p;return ${out ?? \"void 0\"}}return F}`\n )\n return name\n }\n\n /**\n * Code for `p`: on success it falls through with `p` advanced and, when\n * `out` is given, the value in `out`; on failure it runs `fail`.\n */\n gen(p: ParserLike, used: boolean, out: string | null, fail: string, fn: Fn, depth: number): string {\n const node = nodeOf(p)\n if (Predicate.isTagged(node, \"Suspend\")) return this.call(this.rule(node.resolve(), used), out, fail)\n if (!isLeaf(node) && (((this.refs.get(p) ?? 0) > 1 && !this.small(p)) || depth > 32)) {\n return this.call(this.rule(p, used), out, fail)\n }\n return this.inline(p, used, out, fail, fn, depth)\n }\n\n /** Whether a parser is small enough to inline wherever it is used. */\n private small(p: ParserLike): boolean {\n let budget = 6\n const visit = (q: ParserLike): boolean => {\n const node = nodeOf(q)\n if (\n --budget < 0 ||\n Predicate.isTagged(node, \"Suspend\") ||\n Predicate.isTagged(node, \"Escaped\") ||\n Predicate.isTagged(node, \"Dispatch\")\n )\n return false\n return children(node).every(visit)\n }\n return visit(p)\n }\n\n /**\n * In a resumable build: token code (which fails by breaking out of `bad`)\n * that read within `lookahead` units of the end of a partial input re-runs\n * interpreted, since it may have to report `Incomplete` there. Token code\n * leaves `p` where it stopped reading, even when it fails.\n */\n private partialSafe(\n p: ParserLike,\n code: string,\n bad: string,\n lookahead: number,\n out: string | null,\n fail: string,\n fn: Fn\n ): string {\n const ahead = Math.max(lookahead, Margin)\n const st = this.v(fn)\n const ok = this.v(fn)\n const t = this.v(fn)\n const leaf = this.label()\n return (\n `${st}=p;${ok}=false;${leaf}:{${bad}:{${code}${ok}=true;}` +\n `if(!$S.partial||p+${ahead}<=E){if(${ok})break ${leaf};${fail}}` +\n `p=${st};$S.pos=p;${t}=${this.const(p.step)}($S);if(${t}===F){${fail}}p=$S.pos;${out === null ? \"\" : `${out}=${t};`}}`\n )\n }\n\n /**\n * Token code for string and byte input, or the parser's step for input\n * the code can't read. In a resumable build, code that read within\n * `lookahead` units of the end of a partial input re-runs interpreted.\n */\n private leaf(\n p: ParserLike,\n node: NodeOf<\"Any\" | \"Literal\" | \"OneOf\" | \"TakeWhile\">,\n used: boolean,\n out: string | null,\n fail: string,\n fn: Fn,\n lookahead: number = Margin\n ): string {\n if (!this.native(node.encoding)) return this.delegate(p, used, out, fail, fn)\n if (!this.resumable) return this.token(node, out, fail, fn) ?? this.delegate(p, used, out, fail, fn)\n const bad = this.label()\n const code = this.token(node, out, `break ${bad};`, fn)\n if (code === undefined) return this.delegate(p, used, out, fail, fn)\n return this.partialSafe(p, code, bad, lookahead, out, fail, fn)\n }\n\n /** Whether a token parser reads array input as such (`Token`'s, on an array). */\n private array(enc: Encoding<any> | undefined): boolean {\n return this.kind === 2 && enc === undefined\n }\n\n /**\n * Token code for array input, built by `code` with its failure code. Its\n * set's predicate (or membership test) is called on the element, as the\n * interpreter calls it. In a resumable build, code that read the last\n * element of a partial input re-runs interpreted.\n */\n private arrayLeaf(p: ParserLike, code: (fail: string) => string, out: string | null, fail: string, fn: Fn): string {\n if (!this.resumable) return code(fail)\n const bad = this.label()\n return this.partialSafe(p, code(`break ${bad};`), bad, 1, out, fail, fn)\n }\n\n private arrayAny(out: string | null, fail: string): string {\n return `if(p>=E){${BT}${fail}}${out === null ? \"\" : `${out}=I[p];`}p++;`\n }\n\n private arrayOneOf(node: NodeOf<\"OneOf\">, out: string | null, fail: string): string {\n const m = this.const(compileAny(node.set).forCode.token)\n return `if(p>=E||${m}(I[p])===${node.negate}){${BT}${fail}}${out === null ? \"\" : `${out}=I[p];`}p++;`\n }\n\n private arrayTakeWhile(node: NodeOf<\"TakeWhile\">, out: string | null, fail: string, fn: Fn): string {\n const m = this.const(compileAny(node.set).forCode.token)\n const st = this.v(fn)\n const max = node.max === Infinity ? \"\" : `&&p-${st}<${node.max}`\n return (\n `${st}=p;while(p<E${max}&&${m}(I[p])!==${node.negate})p++;` +\n (node.min > 0 ? `if(p-${st}<${node.min}){${BT}${fail}}` : \"\") +\n (out === null ? \"\" : `${out}=I.slice(${st},p);`)\n )\n }\n\n call(name: string, out: string | null, fail: string): string {\n if (out === null) return `if(${name}(p)===F){${fail}}p=P;`\n return `${out}=${name}(p);if(${out}===F){${fail}}p=P;`\n }\n\n /** Runs the closure-compiled step of `p` on the shared state. */\n delegate(p: ParserLike, used: boolean, out: string | null, fail: string, fn: Fn): string {\n const step = this.const(this.closure.compile(p, used))\n const t = out ?? this.v(fn)\n return `$S.pos=p;${t}=${step}($S);if(${t}===F){${fail}}p=$S.pos;`\n }\n\n private native(enc: Encoding<any> | undefined): boolean {\n return enc === undefined ? this.kind !== 2 : kindOfEncoding(enc) === this.kind\n }\n\n inline(p: ParserLike, used: boolean, out: string | null, fail: string, fn: Fn, depth: number): string {\n const node = nodeOf(p)\n const set = (value: string) => (out === null ? \"\" : `${out}=${value};`)\n const d = depth + 1\n switch (node._tag) {\n case \"Succeed\":\n return set(this.lit(node.value))\n case \"Sync\":\n return used ? set(`${this.const(node.evaluate)}()`) : \"\"\n case \"Fail\":\n return `$S.mode=${JSON.stringify(node.mode)};${fail}`\n case \"Eof\":\n return (\n `if(p<E){${BT}${fail}}` +\n (this.resumable ? `if($S.partial){$S.mode=\"Incomplete\";${fail}}` : \"\") +\n set(\"void 0\")\n )\n case \"Location\":\n return set(\"p\")\n case \"RestLen\":\n return set(\"E-p\")\n case \"Suspend\":\n return this.call(this.rule(node.resolve(), used), out, fail)\n case \"Any\":\n if (this.array(node.encoding)) return this.arrayLeaf(p, (f) => this.arrayAny(out, f), out, fail, fn)\n return this.leaf(p, node, used, out, fail, fn)\n case \"OneOf\":\n if (this.array(node.encoding)) return this.arrayLeaf(p, (f) => this.arrayOneOf(node, out, f), out, fail, fn)\n return this.leaf(p, node, used, out, fail, fn)\n case \"TakeWhile\":\n if (this.array(node.encoding))\n return this.arrayLeaf(p, (f) => this.arrayTakeWhile(node, out, f, fn), out, fail, fn)\n return this.leaf(p, node, used, out, fail, fn)\n case \"Literal\":\n return this.leaf(p, node, used, out, fail, fn, node.literal.length * 4)\n case \"Escaped\": {\n if (!this.native(node.encoding)) return this.delegate(p, used, out, fail, fn)\n return this.escaped(p, node, out, fail, fn, d)\n }\n case \"Map\": {\n if (!used) return this.gen(node.self, false, null, fail, fn, d)\n if (node.f === toFloat && out !== null) {\n const code = this.float(node, out, fail, fn, d)\n if (code !== undefined) return code\n }\n // Streaming builds keep the array, which their checkpoints hold\n if (node.f === fromEntries && out !== null && !this.resumable && buildsEntries(node.self)) {\n return this.entries(node.self, out, fail, fn, d)\n }\n const t = this.v(fn)\n return this.gen(node.self, true, t, fail, fn, d) + set(`${this.const(node.f)}(${t})`)\n }\n case \"As\":\n return this.gen(node.self, false, null, fail, fn, d) + (used ? set(this.lit(node.value)) : \"\")\n case \"Tap\": {\n const t = out ?? this.v(fn)\n return this.gen(node.self, true, t, fail, fn, d) + `${this.const(node.f)}(${t});`\n }\n case \"TryMap\":\n case \"FilterMap\": {\n const t = this.v(fn)\n const r = this.v(fn)\n const [tag, field] = Predicate.isTagged(node, \"TryMap\") ? [\"Success\", \"success\"] : [\"Some\", \"value\"]\n return (\n this.gen(node.self, true, t, fail, fn, d) +\n `${r}=${this.const(node.f)}(${t});if(${r}._tag!==\"${tag}\"){${BT}${fail}}${set(`${r}.${field}`)}`\n )\n }\n case \"Filter\": {\n const t = out ?? this.v(fn)\n return this.gen(node.self, true, t, fail, fn, d) + `if(!${this.const(node.predicate)}(${t})){${BT}${fail}}`\n }\n case \"FlatMap\": {\n const t = this.v(fn)\n const r = out ?? this.v(fn)\n this.closure.note(p, node, \"the parser returned by the function runs interpreted\")\n return (\n this.gen(node.self, true, t, fail, fn, d) +\n `$S.pos=p;${r}=${this.const(node.f)}(${t}).step($S);if(${r}===F){${fail}}p=$S.pos;`\n )\n }\n case \"Taken\": {\n if (node.encoding !== undefined && !this.native(node.encoding)) return this.delegate(p, used, out, fail, fn)\n const st = this.v(fn)\n const body = `${st}=p;` + this.gen(node.self, false, null, fail, fn, d)\n if (out === null && node.encoding === undefined) return body\n if (node.encoding === undefined) {\n return (\n body +\n set(this.kind === 0 ? `I.slice(${st},p)` : this.kind === 1 ? `I.subarray(${st},p)` : `$S.slice(${st},p)`)\n )\n }\n const t = out ?? this.v(fn)\n const enc = this.const(node.encoding)\n return body + `${t}=R.textOf(${enc},${fastLimit(node.encoding)},$S,${st},p);if(${t}===F){${fail}}`\n }\n case \"WithTaken\":\n case \"WithSpan\": {\n const st = this.v(fn)\n const t = this.v(fn)\n const extra = Predicate.isTagged(node, \"WithSpan\") ? `{start:${st},end:p}` : `$S.slice(${st},p)`\n return `${st}=p;` + this.gen(node.self, true, t, fail, fn, d) + set(`[${t},${extra}]`)\n }\n case \"Span\": {\n const st = this.v(fn)\n return `${st}=p;` + this.gen(node.self, false, null, fail, fn, d) + set(`{start:${st},end:p}`)\n }\n case \"Mode\": {\n const ok = this.label()\n const bad = this.label()\n return (\n `${ok}:{${bad}:{${this.gen(node.self, used, out, `break ${bad};`, fn, d)}break ${ok};}` +\n `if($S.mode===${JSON.stringify(node.from)})$S.mode=${JSON.stringify(node.to)};${fail}}`\n )\n }\n case \"Context\":\n case \"Expected\":\n case \"MapError\":\n case \"OrFail\":\n case \"Trace\":\n case \"Syntax\":\n case \"RetryAfter\":\n return this.gen(node.self, used, out, fail, fn, d)\n case \"ResumeAfter\": {\n if (!used) return this.gen(node.self, false, null, fail, fn, d)\n const t = this.v(fn)\n return this.gen(node.self, true, t, fail, fn, d) + set(`R.some(${t})`)\n }\n case \"Opt\":\n case \"OrElseSucceed\": {\n const st = this.v(fn)\n const ok = this.label()\n const bad = this.label()\n const t = out === null ? null : this.v(fn)\n const some = Predicate.isTagged(node, \"Opt\") ? `R.some(${t})` : `${t}`\n const orElse = Predicate.isTagged(node, \"Opt\") ? \"R.none()\" : `${this.const(node.value)}()`\n return (\n `${st}=p;${ok}:{${bad}:{${this.gen(node.self, used, t, `break ${bad};`, fn, d)}${set(some)}break ${ok};}` +\n `if($S.mode!==\"Backtrack\"){${fail}}p=${st};${set(orElse)}}`\n )\n }\n case \"Peek\": {\n const st = this.v(fn)\n return `${st}=p;${this.gen(node.self, used, out, fail, fn, d)}p=${st};`\n }\n case \"Not\": {\n const st = this.v(fn)\n const ok = this.label()\n const bad = this.label()\n return (\n `${st}=p;${ok}:{${bad}:{${this.gen(node.self, false, null, `break ${bad};`, fn, d)}p=${st};${BT}${fail}}` +\n `if($S.mode!==\"Backtrack\"){${fail}}p=${st};}${set(\"void 0\")}`\n )\n }\n case \"Seq\":\n return this.seq(node, used, out, fail, fn, d)\n case \"Struct\": {\n if (out === null) return node.parsers.map((q) => this.gen(q, false, null, fail, fn, d)).join(\"\")\n const vars = node.parsers.map(() => this.v(fn))\n const code = node.parsers.map((q, i) => this.gen(q, true, vars[i], fail, fn, d)).join(\"\")\n if (node.keys.includes(\"__proto__\")) {\n return code + `${out}={};` + node.keys.map((k, i) => `${out}[${JSON.stringify(k)}]=${vars[i]};`).join(\"\")\n }\n return code + `${out}={${node.keys.map((k, i) => `${JSON.stringify(k)}:${vars[i]}`).join(\",\")}};`\n }\n case \"ZipWith\": {\n if (out === null)\n return this.gen(node.self, false, null, fail, fn, d) + this.gen(node.that, false, null, fail, fn, d)\n const x = this.v(fn)\n const y = this.v(fn)\n return (\n this.gen(node.self, true, x, fail, fn, d) +\n this.gen(node.that, true, y, fail, fn, d) +\n `${out}=${this.const(node.f)}(${x},${y});`\n )\n }\n case \"Alt\":\n return this.alt(node, used, out, fail, fn, d)\n case \"Dispatch\":\n return this.dispatch(p, node, used, out, fail, fn, d)\n case \"Repeat\":\n case \"Fold\":\n return this.repeat(node, used, out, fail, fn, d)\n case \"Separated\":\n return this.separated(node, used, out, fail, fn, d)\n default:\n return this.delegate(p, used, out, fail, fn)\n }\n }\n\n /**\n * `Ascii.float` and `Text.float` (`map(floatText, toFloat)`): numbers in\n * decimal notation are matched and converted in one pass by\n * `scanFloatString` or `scanFloatBytes`, without slicing the input; the\n * rest (`nan`, `inf`, failures before a digit) runs the parser. Returns\n * `undefined` when this does not apply.\n */\n private float(node: NodeOf<\"Map\">, out: string, fail: string, fn: Fn, d: number): string | undefined {\n if (!floatTexts.has(node.self) || this.kind === 2) return undefined\n if (!scansFloat(node.self, (enc) => this.native(enc))) return undefined\n const t = this.v(fn)\n const scan = this.const(floatScan)\n // Near the end of a partial input, the parser may have to report `Incomplete`\n const near = this.resumable ? `||$S.partial&&${scan}.read+${Margin}>E` : \"\"\n return (\n `${out}=${this.kind === 0 ? \"R.scanFloatString\" : \"R.scanFloatBytes\"}(I,p,E);` +\n `if(${out}===void 0${near}){${this.gen(node.self, true, t, fail, fn, d)}${out}=${this.const(toFloat)}(${t})}` +\n `else if(${out}===F){${BT}${fail}}else p=${scan}.end;`\n )\n }\n\n seq(node: NodeOf<\"Seq\">, used: boolean, out: string | null, fail: string, fn: Fn, d: number): string {\n const output = node.output\n if (out === null || !used) return node.parsers.map((q) => this.gen(q, false, null, fail, fn, d)).join(\"\")\n if (Predicate.isNumber(output)) {\n return node.parsers.map((q, i) => this.gen(q, i === output, i === output ? out : null, fail, fn, d)).join(\"\")\n }\n const keep = (i: number) => output === \"tuple\" || output.includes(i)\n const vars = node.parsers.map((_, i) => (keep(i) ? this.v(fn) : null))\n const code = node.parsers.map((q, i) => this.gen(q, keep(i), vars[i], fail, fn, d)).join(\"\")\n return code + `${out}=[${vars.filter((v) => v !== null).join(\",\")}];`\n }\n\n /** A test that the unit `u` may start `first` (false for -1, the end of the input). */\n private startTest(first: First, u: string): string {\n const runs = runsOf(first.units)\n const small = rangeTest(runs, u)\n const low = small ?? `${this.const(first.units)}[${u}]===1`\n if (!first.high) return small !== undefined ? `(${low})` : `(${u}<${TableSize}&&${low})`\n return `(${u}>=${TableSize}||${low})`\n }\n\n alt(node: NodeOf<\"Alt\">, used: boolean, out: string | null, fail: string, fn: Fn, d: number): string {\n const parsers = node.parsers\n if (Arr.isReadonlyArrayEmpty(parsers)) return `${BT}${fail}`\n if (parsers.length === 1) return this.gen(parsers[0], used, out, fail, fn, d)\n const firsts = this.kind === 2 ? undefined : parsers.map((q) => this.closure.firsts.of(q))\n const prune = firsts !== undefined && planAlt(firsts) !== undefined\n const st = this.v(fn)\n const u = prune ? this.v(fn) : \"\"\n const done = this.label()\n // Near the end of a partial input, no branch is skipped: it may be incomplete rather than fail\n const read = this.resumable ? `$S.partial&&p+${Margin}>E?-2:p<E?${this.unit(\"p\")}:-1` : `p<E?${this.unit(\"p\")}:-1`\n let code = `${st}=p;${prune ? `${u}=${read};` : \"\"}${done}:{`\n parsers.forEach((q, i) => {\n const bad = this.label()\n const branch =\n `${bad}:{${this.gen(q, used, out, `break ${bad};`, fn, d)}break ${done};}` +\n `if($S.mode!==\"Backtrack\"){${fail}}p=${st};`\n const f = firsts?.[i]\n code +=\n prune && f !== undefined && f.mode === Strict\n ? `if(${this.resumable ? `${u}===-2||` : \"\"}${this.startTest(f, u)}){${branch}}`\n : branch\n })\n return code + `${BT}${fail}}`\n }\n\n dispatch(\n p: ParserLike,\n node: NodeOf<\"Dispatch\">,\n used: boolean,\n out: string | null,\n fail: string,\n fn: Fn,\n d: number\n ): string {\n const choose = this.const(node.choose)\n if (node.cases === undefined) {\n // The general path: run the selector, choose, then run the case's step\n this.closure.note(p, node, \"the parser returned by the function of cases runs interpreted\")\n const st = this.v(fn)\n const k = this.v(fn)\n const q = this.v(fn)\n const r = out ?? this.v(fn)\n return (\n `${st}=p;${this.gen(node.selector, true, k, fail, fn, d)}${q}=${choose}(${k});` +\n `if(${q}===void 0){p=${st};${BT}${fail}}$S.pos=p;${r}=${q}.step($S);` +\n `if(${r}===F){${fail}}p=$S.pos;`\n )\n }\n // The cases are known: number them, and run the chosen one inline\n const cases = new Map<ParserLike, number>()\n for (const key of Reflect.ownKeys(node.cases)) {\n const q = node.cases[key as any]\n if (!cases.has(q)) cases.set(q, cases.size)\n }\n if (node.otherwise !== undefined && !cases.has(node.otherwise)) cases.set(node.otherwise, cases.size)\n const index = this.const(cases)\n // `inline`: the cases' code goes here; otherwise (a fallback next to the\n // switch on units below, which inlines them already) they are called as rules\n const general = (inline: boolean): string => {\n const st = this.v(fn)\n const k = this.v(fn)\n const q = this.v(fn)\n const sw = this.label()\n let code =\n `${st}=p;${this.gen(node.selector, true, k, fail, fn, d)}${q}=${choose}(${k});` +\n `if(${q}===void 0){p=${st};${BT}${fail}}${sw}:switch(${index}.get(${q})){`\n for (const [c, i] of cases) {\n const body = inline ? this.gen(c, used, out, fail, fn, d) : this.call(this.rule(c, used), out, fail)\n code += `case ${i}:{${body}break ${sw};}`\n }\n // Unreachable unless the record of cases changed after `dispatch` read it\n const r = out ?? this.v(fn)\n return code + `default:{$S.pos=p;${r}=${q}.step($S);if(${r}===F){${fail}}p=$S.pos;}}`\n }\n let sel = nodeOf(node.selector)\n const peek = Predicate.isTagged(sel, \"Peek\")\n if (peek) sel = nodeOf((sel as NodeOf<\"Peek\">).self)\n if (!Predicate.isTagged(sel, \"Any\") || !this.native(sel.encoding)) return general(true)\n const enc = sel.encoding\n const r = enc === undefined ? undefined : this.reader(enc)\n const limit = r === undefined ? (this.kind === 0 ? 0xd800 : TableSize) : Math.min(r.fast, 0xd800)\n const size = Math.min(limit, TableSize)\n if (size === 0) return general(true)\n // Group the units by the case they select\n const groups = new Map<ParserLike, Array<number>>()\n for (let unit = 0; unit < size; unit++) {\n const q = node.choose(enc === undefined && this.kind === 1 ? unit : charOf(unit))\n if (q === undefined) continue\n let g = groups.get(q)\n if (g === undefined) groups.set(q, (g = []))\n g.push(unit)\n }\n const u = this.v(fn)\n const sw = this.label()\n // A unit cut short by the end of the input takes the general path\n const read = r === undefined ? `p<E?${this.unit(\"p\")}:-1` : `${r.guard(\"p\")}?${r.unit(\"p\")}:p<E?${size}:-1`\n // Near the end of a partial input, the general path handles incomplete units\n const near = this.resumable ? `$S.partial&&p+${Margin}>E?${size}:` : \"\"\n let code = `${u}=${near}${read};${sw}:switch(${u}){`\n for (const [q, units] of groups) {\n code +=\n units.map((x) => `case ${x}:`).join(\"\") +\n `{${peek ? \"\" : `p+=${r?.width ?? 1};`}${this.gen(q, used, out, fail, fn, d)}break ${sw};}`\n }\n code += `case -1:{${BT}${fail}}default:{if(${u}<${size}){${BT}${fail}}${general(false)}}}`\n return code\n }\n\n repeat(\n node: NodeOf<\"Repeat\"> | NodeOf<\"Fold\">,\n used: boolean,\n out: string | null,\n fail: string,\n fn: Fn,\n d: number,\n collect?: Collect\n ): string {\n const { max, min } = node\n const loop = this.label()\n const bad = this.label()\n const n = this.v(fn)\n const st = this.v(fn)\n const isFold = Predicate.isTagged(node, \"Fold\")\n const cond = isFold ? (node as NodeOf<\"Fold\">).while : undefined\n const keep = out !== null && used && collect === undefined\n // `while` needs the accumulator even when the output is unused\n const tracked = keep || cond !== undefined\n const x = tracked ? this.v(fn) : null\n const acc = out !== null && keep ? out : this.v(fn)\n let init = collect?.init ?? \"\"\n let add = \"\"\n if (tracked) {\n if (isFold) {\n init = `${acc}=${this.const((node as NodeOf<\"Fold\">).init)}();`\n add = `${acc}=${this.const((node as NodeOf<\"Fold\">).f)}(${acc},${x});`\n } else {\n init = `${acc}=[];`\n add = `${acc}.push(${x});`\n }\n }\n const check = max === Infinity ? `if(p===${st}){$S.mode=\"Cut\";${fail}}` : \"\"\n const bound = max === Infinity ? \"\" : `${n}<${max}`\n const r = this.resumable ? this.resumePoint(fn) : undefined\n const save =\n r === undefined\n ? \"\"\n : `if($S.mode===\"Incomplete\"&&$S.resume!==void 0)R.save($S,${r.key},${r.entry},{acc:${acc},count:${n},pos:${st}});`\n // With `collect` (never in resumable builds), the element adds itself once the loop check passed\n const element =\n collect === undefined\n ? `${this.gen(node.self, tracked, x, `break ${bad};`, fn, d)}${check}${add}`\n : collect.element(`break ${bad};`, check)\n const stop =\n cond === undefined ? \"\" : `if(${min > 0 ? `${n}>=${min}&&` : \"\"}!${this.const(cond)}(${acc}))break ${loop};`\n const body =\n `${loop}:for(;${bound};${n}++){${stop}${st}=p;` +\n `${bad}:{${element}continue ${loop};}` +\n `${save}if($S.mode!==\"Backtrack\"${min > 0 ? `||${n}<${min}` : \"\"}){${fail}}p=${st};break ${loop};}`\n if (r === undefined) return `${init}${n}=0;${body}${collect?.finish ?? \"\"}`\n return r.wrap(acc, `${acc}=cp.acc;${n}=cp.count;p=cp.pos;`, `${init}${n}=0;`, body)\n }\n\n /**\n * In a resumable build, a repetition entered at `entry` may restart from a\n * checkpoint (`restore`, with the checkpoint in `cp`), or return the result\n * of a `Done` one; a resumed repetition records its result when it ends.\n */\n private resumePoint(fn: Fn) {\n const key = this.const(new Key())\n const entry = this.v(fn)\n const resumed = this.v(fn)\n const done = this.label()\n return {\n key,\n entry,\n resumed,\n wrap: (value: string, restore: string, fresh: string, body: string) =>\n `${entry}=p;${resumed}=false;${done}:{if($S.resume!==void 0){const cp=R.take($S,${key},p);` +\n `if(cp instanceof R.Done){p=cp.pos;${value}=cp.value;break ${done};}` +\n `if(cp!==void 0){${restore}${resumed}=true;}}if(!${resumed}){${fresh}}${body}` +\n `if(${resumed})R.done($S,${key},${entry},${value},p);}`\n }\n }\n\n separated(\n node: NodeOf<\"Separated\">,\n used: boolean,\n out: string | null,\n fail: string,\n fn: Fn,\n d: number,\n collect?: Collect\n ): string {\n const { max, min } = node\n const keep = out !== null && used && collect === undefined\n if (max === 0) return collect !== undefined ? collect.init + collect.finish : keep ? `${out}=[];` : \"\"\n const x = keep ? this.v(fn) : null\n const acc = out !== null && keep ? out : this.v(fn)\n const n = this.v(fn)\n const st = this.v(fn)\n const done = this.label()\n const loop = this.label()\n const push = keep ? `${acc}.push(${x});` : \"\"\n const r = this.resumable ? this.resumePoint(fn) : undefined\n const save =\n r === undefined\n ? \"\"\n : `if($S.mode===\"Incomplete\"&&$S.resume!==void 0)R.save($S,${r.key},${r.entry},{acc:${acc},count:${n},pos:${st}});`\n // Runs `body`; on its failure, stops the repetition (or fails if `fatal`)\n const attempt = (body: (fail: string) => string, success: string, fatal: string, checkpoint: string) => {\n const ok = this.label()\n const bad = this.label()\n return (\n `${ok}:{${bad}:{${body(`break ${bad};`)}${success}break ${ok};}` +\n `${checkpoint}if($S.mode!==\"Backtrack\"${fatal}){${fail}}p=${st};break ${done};}`\n )\n }\n const self = (f: string) =>\n collect === undefined ? this.gen(node.self, keep, x, f, fn, d) : collect.element(f, \"\")\n const sep = (f: string) => this.gen(node.separator, false, null, f, fn, d)\n const check = max === Infinity ? `if(p===${st}){$S.mode=\"Cut\";${fail}}` : \"\"\n const first =\n `${collect?.init ?? (keep ? `${acc}=[];` : \"\")}${n}=0;${st}=p;` +\n attempt(self, `${push}${n}++;`, min > 0 ? \"||true\" : \"\", \"\")\n const rest =\n `${loop}:while(${max === Infinity ? \"true\" : `${n}<${max}`}){${st}=p;` +\n attempt(sep, \"\", `||${n}<${min}`, save) +\n check +\n attempt(self, `${push}${n}++;continue ${loop};`, `||${n}<${min}`, save) +\n `}`\n if (r === undefined) return `${done}:{${first}${rest}}${collect?.finish ?? \"\"}`\n // `done` ends the repetition; the checkpoint wrapper records the result after it\n return r.wrap(acc, `${acc}=cp.acc;${n}=cp.count;p=cp.pos;`, \"\", `${done}:{if(!${r.resumed}){${first}}${rest}}`)\n }\n\n /**\n * `map(self, Object.fromEntries)`, where `buildsEntries(self)`: builds the\n * object directly, assigning each entry as it is parsed (see\n * `internal/entries.ts`), without the pairs and their array. `cut`,\n * `preceded`, `terminated` and diagnostics around the repetition are\n * compiled as usual around it.\n */\n private entries(p: ParserLike, out: string, fail: string, fn: Fn, d: number): string {\n const node = nodeOf(p)\n switch (node._tag) {\n case \"Mode\": {\n const ok = this.label()\n const bad = this.label()\n return (\n `${ok}:{${bad}:{${this.entries(node.self, out, `break ${bad};`, fn, d)}break ${ok};}` +\n `if($S.mode===${JSON.stringify(node.from)})$S.mode=${JSON.stringify(node.to)};${fail}}`\n )\n }\n case \"Seq\": {\n const i = node.output as number\n return node.parsers\n .map((q, j) => (j === i ? this.entries(q, out, fail, fn, d) : this.gen(q, false, null, fail, fn, d)))\n .join(\"\")\n }\n case \"Repeat\":\n case \"Separated\": {\n const pair = pairOf(node.self)\n if (pair === undefined) {\n // Not reached (`buildsEntries` found the pair): build the pairs, then the object\n const t = this.v(fn)\n return this.gen(p, true, t, fail, fn, d) + `${out}=${this.const(fromEntries)}(${t});`\n }\n const deferred = this.v(fn)\n const key = this.v(fn)\n const value = this.v(fn)\n const collect: Collect = {\n init: `${out}={};${deferred}=void 0;`,\n element: (f, check) =>\n pair.parsers\n .map((q, j) =>\n this.gen(\n q,\n j === pair.key || j === pair.value,\n j === pair.key ? key : j === pair.value ? value : null,\n f,\n fn,\n d\n )\n )\n .join(\"\") +\n check +\n `if(${deferred}===void 0&&R.isPlainKey(${key}))${out}[${key}]=${value};` +\n `else ${deferred}=R.addEntry(${out},${deferred},${key},${value});`,\n finish: `if(${deferred}!==void 0)R.flushEntries(${out},${deferred});`\n }\n return Predicate.isTagged(node, \"Repeat\")\n ? this.repeat(node, true, out, fail, fn, d, collect)\n : this.separated(node, true, out, fail, fn, d, collect)\n }\n default:\n return this.entries((node as { readonly self: ParserLike }).self, out, fail, fn, d)\n }\n }\n\n // ---------------------------------------------------------------------------\n // Tokens\n // ---------------------------------------------------------------------------\n\n /** An expression: is the unit `c`, known to be below `size` (at most `TableSize`), accepted? */\n private member(accept: Uint8Array, c: string, size: number = TableSize): string {\n return tableTest(accept, c, size) ?? `${this.const(accept)}[${c}]===1`\n }\n\n /** An expression: is the code point `c` (at least `TableSize`) accepted? */\n private memberHigh(set: CharSet, negate: boolean, c: string): string {\n if (set.ranges !== undefined && !set.ranges.some(([, b]) => b >= TableSize)) return negate ? \"true\" : \"false\"\n return `${this.const(set.test)}(${c})!==${negate}`\n }\n\n /**\n * An expression: does a `Text` set accept the unit `c`, known to be below\n * `r.fast`? Code points from `TableSize` up are tested by the set's\n * function, unless its ranges show they are all rejected.\n */\n private textAccepts(r: Reader, cs: CharSet, accept: Uint8Array, negate: boolean, c: string): string {\n if (r.fast <= TableSize) return `(${this.member(accept, c, r.fast)})`\n const member = this.member(accept, c)\n if (reachesAbove(cs, TableSize)) return `(${c}<${TableSize}?${member}:${this.const(cs.test)}(${c})!==${negate})`\n return negate ? `(${c}>=${TableSize}||${member})` : `(${c}<${TableSize}&&${member})`\n }\n\n /**\n * An expression: does a `Text` set reject `c`, a code point that `decode`\n * returned? The built-in encodings only decode code points from `r.fast`\n * up there.\n */\n private textRejectsDecoded(enc: Encoding<any>, r: Reader, cs: CharSet, negate: boolean, c: string): string {\n if (r.fast > 0 && builtinEncodings.has(enc) && !reachesAbove(cs, r.fast)) return String(!negate)\n return `${this.const(cs.test)}(${c})===${negate}`\n }\n\n token(\n node: NodeOf<\"Any\" | \"Literal\" | \"OneOf\" | \"TakeWhile\">,\n out: string | null,\n fail: string,\n fn: Fn\n ): string | undefined {\n const set = (value: string) => (out === null ? \"\" : `${out}=${value};`)\n const enc = node.encoding\n const kind = this.kind as 0 | 1\n const failBT = `{${BT}${fail}}`\n switch (node._tag) {\n case \"Any\": {\n if (enc === undefined) {\n if (kind === 1) return `if(p>=E)${failBT}${set(\"I[p]\")}p++;`\n const c = this.v(fn)\n return (\n `if(p>=E)${failBT}${c}=I.charCodeAt(p);` +\n `if(${c}>=55296&&${c}<=56319&&p+1<I.length&&(I.charCodeAt(p+1)&64512)===56320){${set(\"I.slice(p,p+2)\")}p+=2}` +\n `else{${set(\"I[p]\")}p++}`\n )\n }\n const r = this.reader(enc)\n const c = this.v(fn)\n const dec = `${this.const(enc.decode)}(I,p,E)`\n return (\n `if(p>=E)${failBT}` +\n (r.fast > 0\n ? `if(${r.guard(\"p\")}&&(${c}=${r.unit(\"p\")})<${r.fast}){${set(`R.charOf(${c})`)}p+=${r.width}}else`\n : \"\") +\n `{${c}=${dec};if(${c}<0)${failBT}${set(`R.charOf(${c})`)}p+=${this.const(enc.width)}(${c})}`\n )\n }\n case \"Literal\": {\n const lit = node.literal\n if (enc !== undefined) {\n if (node.caseless) return undefined\n const encoded = enc.encode(lit as string)\n return (\n this.literalUnits(Predicate.isString(encoded) ? unitsOf(encoded) : Array.from(encoded), false, fail) +\n set(this.lit(lit))\n )\n }\n const literalKind = Predicate.isString(lit) ? 0 : lit instanceof Uint8Array ? 1 : 2\n if (kind === 0 && literalKind !== 0) return undefined\n if (literalKind === 2) return undefined\n const codes =\n kind === 0\n ? unitsOf(lit as string)\n : Array.from(literalKind === 0 ? new TextEncoder().encode(lit as string) : (lit as Uint8Array))\n const len = codes.length\n const value =\n !node.caseless && literalKind === kind\n ? this.lit(lit)\n : kind === 0\n ? `I.slice(p-${len},p)`\n : `I.subarray(p-${len},p)`\n return this.literalUnits(codes, node.caseless, fail) + set(value)\n }\n case \"OneOf\": {\n const negate = node.negate\n const cs = enc === undefined ? tokenSet(node.set, kind) : textSet(node.set)\n const accept = acceptTable(cs, negate)\n const c = this.v(fn)\n const value = (len: string) => (this.kind === 0 ? `I.slice(p,p+${len})` : `I[p]`)\n if (enc === undefined) {\n if (kind === 1)\n return `if(p>=E)${failBT}${c}=I[p];if(!(${this.member(accept, c)}))${failBT}${set(\"I[p]\")}p++;`\n const cp = this.v(fn)\n if (!negate && this.memberHigh(cs, negate, cp) === \"false\") {\n return `if(p>=E)${failBT}${c}=I.charCodeAt(p);if(${c}>=${TableSize}||!(${this.member(accept, c)}))${failBT}${set(\"I[p]\")}p++;`\n }\n return (\n `if(p>=E)${failBT}${c}=I.charCodeAt(p);` +\n `if(${c}<${TableSize}){if(!(${this.member(accept, c)}))${failBT}${set(\"I[p]\")}p++}` +\n `else{${cp}=${c};if(${c}>=55296&&${c}<=56319&&p+1<I.length){const d=I.charCodeAt(p+1);` +\n `if((d&64512)===56320)${cp}=((${c}-55296)<<10)+(d-56320)+65536}` +\n `if(!(${this.memberHigh(cs, negate, cp)}))${failBT}` +\n `if(${cp}>65535){${set(value(\"2\"))}p+=2}else{${set(\"I[p]\")}p++}}`\n )\n }\n const r = this.reader(enc)\n return (\n `if(p>=E)${failBT}` +\n (r.fast > 0\n ? `if(${r.guard(\"p\")}&&(${c}=${r.unit(\"p\")})<${r.fast}){if(!${this.textAccepts(r, cs, accept, negate, c)})${failBT}${set(`R.charOf(${c})`)}p+=${r.width}}else`\n : \"\") +\n `{${c}=${this.const(enc.decode)}(I,p,E);if(${c}<0||${this.textRejectsDecoded(enc, r, cs, negate, c)})${failBT}` +\n `${set(`R.charOf(${c})`)}p+=${this.const(enc.width)}(${c})}`\n )\n }\n case \"TakeWhile\":\n return this.takeWhile(node, out, fail, fn)\n }\n }\n\n /** Matches literal units at `p`, advancing past them. */\n private literalUnits(codes: ReadonlyArray<number>, caseless: boolean, fail: string): string {\n const len = codes.length\n if (len === 0) return \"\"\n const test = (c: number, i: number) => {\n const at = this.unit(i === 0 ? \"p\" : `p+${i}`)\n if (caseless && isLetter(c)) return `(${at}|32)===${lowerAscii(c)}`\n return `${at}===${c}`\n }\n if (len <= 8) {\n // Reading past the end gives NaN or undefined, which matches nothing\n return `if(!(${codes.map(test).join(\"&&\")})){${BT}${fail}}p+=${len};`\n }\n if (this.kind === 0 && !caseless) {\n const str = String.fromCharCode(...codes)\n return `if(!I.startsWith(${JSON.stringify(str)},p)){${BT}${fail}}p+=${len};`\n }\n const expect = this.const(Uint8Array.from(caseless ? codes.map(lowerAscii) : codes))\n const lower = caseless ? `${this.const(lowerAscii)}` : \"\"\n return `if(E-p<${len}){${BT}${fail}}for(let i=0;i<${len};i++)if(${lower}(${this.unit(\"p+i\")})!==${expect}[i]){${BT}${fail}}p+=${len};`\n }\n\n private takeWhile(node: NodeOf<\"TakeWhile\">, out: string | null, fail: string, fn: Fn): string {\n const enc = node.encoding\n const { max, min, negate } = node\n const kind = this.kind as 0 | 1\n const cs = enc === undefined ? tokenSet(node.set, kind) : textSet(node.set)\n const accept = acceptTable(cs, negate)\n const st = this.v(fn)\n const c = this.v(fn)\n const n = this.v(fn)\n const loop = this.label()\n const counted = max !== Infinity || min > 1\n const count = counted ? `${n}++;` : \"\"\n const bound = max !== Infinity ? `&&${n}<${max}` : \"\"\n const slice =\n enc !== undefined ? `${this.const(enc.text)}(I,${st},p)` : kind === 0 ? `I.slice(${st},p)` : `I.subarray(${st},p)`\n const finish =\n (min > 0 ? `if(${counted ? n : `p-${st}`}<${min}){${BT}${fail}}` : \"\") + (out === null ? \"\" : `${out}=${slice};`)\n const head = `${st}=p;${counted ? `${n}=0;` : \"\"}${loop}:while(p<E${bound}){${c}=${this.unit(\"p\")};`\n const member = this.member(accept, c)\n if (kind === 1 && (enc === undefined || fastLimit(enc) >= TableSize)) {\n // Bytes, one token each\n return `${head}if(!(${member}))break;p++;${count}}${finish}`\n }\n if (enc !== undefined) {\n // Text: inline the encoding's single-unit code points, decode the rest\n const r = this.reader(enc)\n // The loop condition already checks a unit of width 1\n const guard = r.width === 1 ? \"\" : `${r.guard(\"p\")}&&`\n return (\n `${st}=p;${counted ? `${n}=0;` : \"\"}${loop}:while(p<E${bound}){` +\n (r.fast > 0\n ? `if(${guard}(${c}=${r.unit(\"p\")})<${r.fast}){if(!${this.textAccepts(r, cs, accept, negate, c)})break ${loop};p+=${r.width}}else`\n : \"\") +\n `{${c}=${this.const(enc.decode)}(I,p,E);if(${c}<0||${this.textRejectsDecoded(enc, r, cs, negate, c)})break ${loop};` +\n `p+=${this.const(enc.width)}(${c})}${count}}${finish}`\n )\n }\n const fast = 0xd800\n const small = TableSize\n const highTest = (v: string) => this.memberHigh(cs, negate, v)\n // Token on strings: code points, with lenient surrogates\n const cp = this.v(fn)\n const never = highTest(c) === \"false\"\n // Every code point from `TableSize` up is accepted: without a count,\n // surrogate pairs can be skipped a unit at a time\n const always = highTest(c) === \"true\"\n const rest =\n never && !negate\n ? `break;`\n : always && !counted\n ? `p++;`\n : `if(${c}<${fast}||${c}>56319){if(!(${highTest(c)}))break ${loop};p++}` +\n `else{${cp}=${c};if(p+1<I.length){const d=I.charCodeAt(p+1);if((d&64512)===56320)${cp}=((${c}-55296)<<10)+(d-56320)+65536}` +\n `if(!(${highTest(cp)}))break ${loop};p+=${cp}>65535?2:1}`\n return `${head}if(${c}<${small}){if(!(${member}))break;p++}else ${rest}${count}}${finish}`\n }\n\n /**\n * `escaped`. In a resumable build it keeps the closure compiler's\n * checkpoints: where the next segment starts and, unless raw, the text\n * so far, saved when a segment or an escape runs out of input.\n */\n escaped(p: ParserLike, node: NodeOf<\"Escaped\">, out: string | null, fail: string, fn: Fn, d: number): string {\n const enc = node.encoding\n const ctrl = node.control\n const rd = enc === undefined ? undefined : this.reader(enc)\n if (rd !== undefined && !(ctrl < rd.fast)) return this.delegate(p, !node.raw, out, fail, fn)\n const raw = node.raw\n const r = this.resumable ? this.resumePoint(fn) : undefined\n const acc = raw ? null : (out ?? this.v(fn))\n const x = raw ? null : this.v(fn)\n const b = this.v(fn)\n const st = r?.entry ?? this.v(fn)\n const okv = this.v(fn)\n const loop = this.label()\n const bad = this.label()\n /** Saves the checkpoint of a segment starting at `pos`, when the parse ran out of input. */\n const save = (pos: string) =>\n r === undefined\n ? \"\"\n : `if($S.mode===\"Incomplete\"&&$S.resume!==void 0)R.save($S,${r.key},${r.entry},${raw ? pos : `{out:${acc},pos:${pos}}`});`\n const normal = this.gen(node.normal, !raw, x, `break ${bad};`, fn, d)\n const escape = this.gen(node.escape, !raw, x, `${save(b)}${fail}`, fn, d)\n const onNormal = raw\n ? `if(p===${b}){$S.mode=\"Cut\";${fail}}continue ${loop};`\n : `if(p!==${b}){${acc}+=${x};continue ${loop}}`\n const slice =\n enc !== undefined\n ? `${this.const(enc.text)}(I,${st},p)`\n : this.kind === 0\n ? `I.slice(${st},p)`\n : `I.subarray(${st},p)`\n const ctrlTest =\n rd === undefined ? `p<E&&${this.unit(\"p\")}===${ctrl}` : `${rd.guard(\"p\")}&&${rd.unit(\"p\")}===${ctrl}`\n // In a resumable build, running out of a partial input (not stopping\n // before a non-control character) leaves the text incomplete\n const stop = r === undefined ? loop : this.label()\n const loopCode =\n `${loop}:while(p<E){${b}=p;${okv}=false;` +\n `${bad}:{${normal}${okv}=true;}` +\n `if(${okv}){${onNormal}}else{if($S.mode!==\"Backtrack\"){${save(b)}${fail}}p=${b}}` +\n `if(${ctrlTest}){p+=${rd?.width ?? 1};${escape}${raw ? \"\" : `${acc}+=${x};`}}else break ${stop};}`\n const body =\n r === undefined ? loopCode : `${stop}:{${loopCode}if($S.partial){$S.mode=\"Incomplete\";${save(\"p\")}${fail}}}`\n if (r === undefined) {\n return `${raw ? `${st}=p;` : `${acc}=\"\";`}${body}${raw && out !== null ? `${out}=${slice};` : \"\"}`\n }\n // `acc` is set unless raw\n if (acc !== null) return r.wrap(acc, `${acc}=cp.out;p=cp.pos;`, `${acc}=\"\";`, body)\n const value = out ?? this.v(fn)\n return r.wrap(value, \"p=cp;\", \"\", `${body}${value}=${out === null ? \"void 0\" : slice};`)\n }\n}\n\n/** The UTF-16 code units of a string. */\nconst unitsOf = (s: string): Array<number> => Array.from({ length: s.length }, (_, i) => s.charCodeAt(i))\n\n/** The source of a compiled parser, with the values it reads as `C`. */\ninterface Generated {\n readonly source: string\n readonly constants: ReadonlyArray<unknown>\n readonly fallbacks: ReadonlyArray<Fallback>\n}\n\n/** Generates the source of a compiled parser, without building it. */\nconst generate = (root: ParserLike, kind: 0 | 1 | 2, resumable = false): Generated => {\n const e = new Emitter(root, kind, resumable)\n const main = e.rule(root, true)\n const source =\n `\"use strict\";let $I,$E,$S,P;${e.functions.join(\"\\n\")}\\n` +\n `return function run(state){const sI=$I,sE=$E,sS=$S,sP=P;$I=state.input;$E=state.end;$S=state;` +\n `try{const v=${main}(state.pos);if(v!==F)state.pos=P;return v}finally{$I=sI;$E=sE;$S=sS;P=sP}}`\n return { source, constants: e.constants, fallbacks: e.fallbacks }\n}\n\n/** A root parser compiled with `new Function`, with its generated source. */\ninterface JitCompiled extends CompiledRoot {\n readonly source: string\n}\n\n/** Compiles a root parser for one input kind with `new Function`. */\nconst compileJit = (root: ParserLike, kind: 0 | 1 | 2, resumable = false): JitCompiled => {\n const { constants, fallbacks, source } = generate(root, kind, resumable)\n const run = globalThis.Function(\"C\", \"F\", \"R\", source)(constants, Fail, runtime) as Step\n // Generated code reads past `end` expecting nothing to match there, which\n // holds when `end` is the input's length, as it is in the runners.\n let closure: Step | undefined\n const step: Step = (state) =>\n state.end === state.input.length\n ? run(state)\n : (closure ??= createClosureCompiler(kind, resumable).compile(root, true))(state)\n return { step, fallbacks, source }\n}\n\n/**\n * The JIT as a backend: generated code where `new Function` is allowed,\n * otherwise (or if generating fails) the closure compiler.\n */\nexport const backend: Backend = {\n build: (p, kind, resumable) => {\n if (!jitSupported()) return closureBackend.build(p, kind, resumable)\n return Result.match(\n Result.try(() => compileJit(p, kind, resumable)),\n {\n onSuccess: ({ fallbacks, source, step }) => ({\n backend: \"jit\" as const,\n step,\n fallbacks,\n error: undefined,\n source\n }),\n // Fall back to the closure compiler, remembering why\n onFailure: (error) => ({ ...closureBackend.build(p, kind, resumable), jitError: error })\n }\n )\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"jit.js","names":["closureBackend"],"sources":["../../../src/internal/compiler/jit.ts"],"sourcesContent":["/**\n * The JIT: emits JavaScript source for a parser's description and builds\n * it with `new Function`.\n *\n * Every rule (the root, every `suspend` target and every non-leaf parser\n * with several parents) becomes a function `f(p)` taking the cursor and\n * returning the value, or `Fail`, leaving the new cursor in the register\n * `P`. Everything else is inlined as straight-line code, with labelled\n * blocks for failure. The cursor is a local; the input and its end are\n * hoisted into locals. Failures only set `state.mode`, as in the closure\n * compiler.\n *\n * Nodes without an inline form run their closure-compiled steps (which run\n * the interpreter for what they can't compile) on the shared state, with\n * `state.pos` kept in sync.\n */\nimport * as Arr from \"effect/Array\"\nimport * as Predicate from \"effect/Predicate\"\nimport * as Option from \"effect/Option\"\nimport * as Result from \"effect/Result\"\nimport type { Encoding } from \"../../Encoding.js\"\nimport type { State } from \"../../Input.js\"\nimport { Fail } from \"../../Input.js\"\nimport type { Node, NodeOf, ParserLike } from \"../node.js\"\nimport { addEntry, flushEntries, fromEntries, isPlainKey } from \"../entries.js\"\nimport { Defer, NodeId, nodeOf, scansFloat } from \"../node.js\"\nimport { floatScan, floatTexts, scanFloatBytes, scanFloatString, toFloat } from \"../numbers.js\"\nimport { compileAny } from \"../tokens.js\"\nimport { Key } from \"../key.js\"\nimport * as Resume from \"../resume.js\"\nimport * as Stack from \"../stack.js\"\nimport {\n ShortText,\n charOf,\n fastLimit,\n latin1,\n string,\n textIn,\n utf16be,\n utf16le,\n utf8,\n utf8Text,\n validate\n} from \"../text.js\"\nimport type { ClosureCompiler, CompiledRoot, Fallback, Step } from \"./closure.js\"\nimport { backend as closureBackend, createClosureCompiler } from \"./closure.js\"\nimport { buildsEntries, pairOf } from \"./entries.js\"\nimport { countRefs, isLeaf, isLetter, isSmall, lowerAscii, selectorOf } from \"./graph.js\"\nimport type { Backend } from \"./registry.js\"\nimport type { First } from \"./first.js\"\nimport { planAlt, Strict } from \"./first.js\"\nimport type { CharSet } from \"./sets.js\"\nimport { acceptTable, kindOfEncoding, reachesAbove, TableSize, textSet, tokenSet } from \"./sets.js\"\nimport { nextStop, SearchHead, StopCache, stopChars } from \"./search.js\"\n\n/** Helpers available to generated code as `R`. */\nconst runtime = {\n StopCache,\n nextStop,\n take: Resume.take,\n save: Resume.save,\n Done: Resume.Done,\n /** Records the result of a resumed repetition (see `Resume.done`). */\n done: (state: State<any>, key: Key, entry: number, value: unknown, pos: number): void =>\n Resume.save(state, key, entry, new Resume.Done(value, pos)),\n isStackOverflow: Stack.isStackOverflow,\n tooDeep: Stack.tooDeep,\n some: Option.some,\n none: Option.none,\n charOf,\n scanFloatString,\n scanFloatBytes,\n isPlainKey,\n addEntry,\n flushEntries,\n /** `Text.taken`: the text of `[start, end)`, or `Fail` if it is malformed. */\n textOf: (enc: Encoding<any>, fast: number, s: State<any>, start: number, end: number): string | typeof Fail => {\n const input = s.input\n let i = start\n // SAFETY: input kind 0 is a string input\n if (s.inputKind === 0) while (i < end && (input as string).charCodeAt(i) < fast) i++\n // SAFETY: `Text` parsers are compiled natively, and so call this, on string (0) and byte (1) inputs only\n else while (i < end && (input as Uint8Array)[i] < fast) i++\n if (i < end && validate(enc, s, i, end) < 0) {\n s.mode = \"Backtrack\"\n return Fail\n }\n return textIn(enc, s, start, end)\n },\n utf8Text\n}\n\nlet checked: FunctionConstructor | undefined\nlet supported = false\n\n/**\n * Whether `new Function` works here (it doesn't under a Content Security\n * Policy). Checked once, and again if `globalThis.Function` is replaced.\n */\nexport const jitSupported = (): boolean => {\n if (checked !== globalThis.Function) {\n checked = globalThis.Function\n const fn = checked\n supported = Result.getOrElse(\n Result.try(() => fn(\"return true\")() === true),\n () => false\n )\n }\n return supported\n}\n\nconst BT = `$S.mode=\"Backtrack\";`\n\nconst builtinEncodings: ReadonlySet<Encoding<any>> = /*#__PURE__*/ new Set([string, utf8, utf16le, utf16be, latin1])\n\n/** How many units past the cursor a single token can depend on (see the closure compiler). */\nconst Margin = 4\n\n/** How generated code reads the code units of an encoding (see `Emitter.reader`). */\ninterface Reader {\n readonly width: number\n readonly fast: number\n readonly guard: (i: string) => string\n readonly unit: (i: string) => string\n}\n\n/** Per generated function: its local variables. */\nclass Fn {\n readonly vars: Array<string> = []\n}\n\n/** The inclusive ranges of 1s in a table. */\nconst runsOf = (table: Uint8Array): Array<[number, number]> => {\n const out: Array<[number, number]> = []\n for (let i = 0; i < table.length; i++) {\n if (table[i] !== 1) continue\n let j = i\n while (j + 1 < table.length && table[j + 1] === 1) j++\n out.push([i, j])\n i = j\n }\n return out\n}\n\n/** A JavaScript expression testing `v` against ranges, or `undefined` if too long. */\nconst rangeTest = (runs: ReadonlyArray<readonly [number, number]>, v: string): string | undefined => {\n if (Arr.isReadonlyArrayEmpty(runs)) return \"false\"\n if (runs.length > 4) return undefined\n return runs.map(([a, b]) => (a === b ? `${v}===${a}` : `(${v}>=${a}&&${v}<=${b})`)).join(\"||\")\n}\n\n/** The inclusive ranges of `[0, size)` where `table[c] === value`. */\nconst runsWhere = (table: Uint8Array, size: number, value: 0 | 1): Array<[number, number]> => {\n const out: Array<[number, number]> = []\n for (let i = 0; i < size; i++) {\n if (table[i] !== value) continue\n let j = i\n while (j + 1 < size && table[j + 1] === value) j++\n out.push([i, j])\n i = j\n }\n return out\n}\n\n/** How many comparisons it takes to test a run of `[0, size)`. */\nconst runCost = ([a, b]: readonly [number, number], size: number): number =>\n a === b || a === 0 || b === size - 1 ? 1 : 2\n\n/**\n * A JavaScript expression testing whether `v`, known to be in `[0, size)`,\n * is accepted by `table`, or `undefined` if that takes too many comparisons.\n * It tests the accepted runs or the rejected ones, whichever is cheaper:\n * `c!==34&&c!==92&&c>=32` rather than three two-sided ranges.\n */\nconst tableTest = (table: Uint8Array, v: string, size: number): string | undefined => {\n const accept = runsWhere(table, size, 1)\n const reject = runsWhere(table, size, 0)\n if (Arr.isReadonlyArrayEmpty(accept)) return \"false\"\n if (Arr.isReadonlyArrayEmpty(reject)) return \"true\"\n const cost = (runs: ReadonlyArray<readonly [number, number]>) => runs.reduce((n, r) => n + runCost(r, size), 0)\n const acceptCost = cost(accept)\n const rejectCost = cost(reject)\n if (Math.min(acceptCost, rejectCost) > 6) return undefined\n const terms =\n acceptCost <= rejectCost\n ? accept\n .map(([a, b]) =>\n a === b\n ? `${v}===${a}`\n : a === 0\n ? `${v}<=${b}`\n : b === size - 1\n ? `${v}>=${a}`\n : `(${v}>=${a}&&${v}<=${b})`\n )\n .join(\"||\")\n : reject\n .map(([a, b]) =>\n a === b ? `${v}!==${a}` : a === 0 ? `${v}>${b}` : b === size - 1 ? `${v}<${a}` : `(${v}<${a}||${v}>${b})`\n )\n .join(\"&&\")\n return `(${terms})`\n}\n\n/**\n * A repetition that builds its own result (see `Emitter.entries`): `init`\n * starts it, `element(fail, check)` parses one element, runs `check` (the\n * repetition's loop check) and adds the element, and `finish` ends it.\n */\ninterface Collect {\n readonly init: string\n readonly element: (fail: string, check: string) => string\n readonly finish: string\n /** The variable holding the result. */\n readonly value: string\n /** In a resumable build: more fields of a checkpoint (`name:variable,`), and the code restoring them from `cp`. */\n readonly saved: string\n readonly restore: string\n}\n\nclass Emitter {\n readonly constants: Array<unknown> = []\n private readonly constantIndex = new Map<unknown, number>()\n readonly functions: Array<string> = []\n private readonly rules = [new Map<ParserLike, string>(), new Map<ParserLike, string>()]\n private readonly refs: WeakMap<ParserLike, number>\n private readonly closure: ClosureCompiler\n private next = 0\n\n constructor(\n readonly root: ParserLike,\n readonly kind: 0 | 1 | 2,\n readonly resumable = false\n ) {\n this.closure = createClosureCompiler(kind, resumable)\n this.refs = countRefs(root)\n }\n\n get fallbacks(): ReadonlyArray<Fallback> {\n return this.closure.fallbacks\n }\n\n const(value: unknown): string {\n let i = this.constantIndex.get(value)\n if (i === undefined) {\n i = this.constants.length\n this.constants.push(value)\n this.constantIndex.set(value, i)\n }\n return `C[${i}]`\n }\n\n /** The text of `[start, p)` in `enc`: UTF-8 decodes through the state's ASCII run (see `utf8Text`). */\n text(enc: Encoding<any>, start: string): string {\n const text = `${this.const(enc.text)}(I,${start},p)`\n // Short strings are built by hand, which no run helps\n return enc === utf8 ? `(p-${start}>${ShortText}?R.utf8Text($S,${start},p):${text})` : text\n }\n\n /** A JavaScript literal for simple values, otherwise a constant. */\n lit(value: unknown): string {\n if (value === undefined) return \"void 0\"\n if (value === null || Predicate.isBoolean(value)) return String(value)\n if (Predicate.isNumber(value) && Number.isFinite(value) && !Object.is(value, -0)) return String(value)\n if (Predicate.isString(value) && value.length < 64) return JSON.stringify(value)\n return this.const(value)\n }\n\n v(fn: Fn): string {\n const name = `v${this.next++}`\n fn.vars.push(name)\n return name\n }\n\n label(): string {\n return `L${this.next++}`\n }\n\n unit(i: string): string {\n return this.kind === 0 ? `I.charCodeAt(${i})` : `I[${i}]`\n }\n\n /**\n * How generated code reads an encoding's code units: units below `fast`\n * are whole code points, `width` input units long. `guard(i)` says that a\n * whole unit is available at `i`.\n */\n reader(enc: Encoding<any>): Reader {\n if (enc === utf16le || enc === utf16be) {\n const [lo, hi] = enc === utf16le ? [\"\", \"+1\"] : [\"+1\", \"\"]\n return {\n width: 2,\n fast: 0xd800,\n guard: (i) => `${i}+1<E`,\n unit: (i) => `(I[${i}${lo}]|I[${i}${hi}]<<8)`\n }\n }\n return { width: 1, fast: enc.unit === 1 ? fastLimit(enc) : 0, guard: (i) => `${i}<E`, unit: (i) => this.unit(i) }\n }\n\n /** The function implementing a rule, generating it on first use. */\n rule(p: ParserLike, used: boolean): string {\n const rules = this.rules[used ? 1 : 0]\n let name = rules.get(p)\n if (name !== undefined) return name\n name = `f${this.next++}`\n rules.set(p, name)\n const fn = new Fn()\n const out = used ? this.v(fn) : null\n const done = this.label()\n const body = this.inline(p, used, out, `break ${done};`, fn, 0)\n this.functions.push(\n `function ${name}(p){const I=$I,E=$E;${Arr.isArrayNonEmpty(fn.vars) ? `let ${fn.vars.join(\",\")};` : \"\"}` +\n `${done}:{${body}P=p;return ${out ?? \"void 0\"}}return F}`\n )\n return name\n }\n\n /**\n * Code for `p`: on success it falls through with `p` advanced and, when\n * `out` is given, the value in `out`; on failure it runs `fail`.\n */\n gen(p: ParserLike, used: boolean, out: string | null, fail: string, fn: Fn, depth: number): string {\n const node = nodeOf(p)\n if (Predicate.isTagged(node, \"Suspend\")) return this.call(this.rule(node.resolve(), used), out, fail)\n if (!isLeaf(node) && (((this.refs.get(p) ?? 0) > 1 && !isSmall(p)) || depth > 32)) {\n return this.call(this.rule(p, used), out, fail)\n }\n return this.inline(p, used, out, fail, fn, depth)\n }\n\n /**\n * In a resumable build: token code (which fails by breaking out of `bad`)\n * that read within `lookahead` units of the end of a partial input re-runs\n * interpreted, since it may have to report `Incomplete` there. Token code\n * leaves `p` where it stopped reading, even when it fails.\n */\n private partialSafe(\n p: ParserLike,\n code: string,\n bad: string,\n lookahead: number,\n out: string | null,\n fail: string,\n fn: Fn\n ): string {\n const ahead = Math.max(lookahead, Margin)\n const st = this.v(fn)\n const ok = this.v(fn)\n const t = this.v(fn)\n const leaf = this.label()\n return (\n `${st}=p;${ok}=false;${leaf}:{${bad}:{${code}${ok}=true;}` +\n `if(!$S.partial||p+${ahead}<=E){if(${ok})break ${leaf};${fail}}` +\n `p=${st};$S.pos=p;${t}=${this.const(p.step)}($S);if(${t}===F){${fail}}p=$S.pos;${out === null ? \"\" : `${out}=${t};`}}`\n )\n }\n\n /**\n * Token code for string and byte input, or the parser's step for input\n * the code can't read. In a resumable build, code that read within\n * `lookahead` units of the end of a partial input re-runs interpreted.\n */\n private leaf(\n p: ParserLike,\n node: NodeOf<\"Any\" | \"Literal\" | \"OneOf\" | \"TakeWhile\">,\n used: boolean,\n out: string | null,\n fail: string,\n fn: Fn,\n lookahead: number = Margin\n ): string {\n if (!this.native(node.encoding)) return this.delegate(p, used, out, fail, fn)\n if (!this.resumable) return this.token(node, out, fail, fn) ?? this.delegate(p, used, out, fail, fn)\n const bad = this.label()\n const code = this.token(node, out, `break ${bad};`, fn)\n if (code === undefined) return this.delegate(p, used, out, fail, fn)\n return this.partialSafe(p, code, bad, lookahead, out, fail, fn)\n }\n\n /** Whether a token parser reads array input as such (`Token`'s, on an array). */\n private array(enc: Encoding<any> | undefined): boolean {\n return this.kind === 2 && enc === undefined\n }\n\n /**\n * Token code for array input, built by `code` with its failure code. Its\n * set's predicate (or membership test) is called on the element, as the\n * interpreter calls it. In a resumable build, code that read the last\n * element of a partial input re-runs interpreted.\n */\n private arrayLeaf(p: ParserLike, code: (fail: string) => string, out: string | null, fail: string, fn: Fn): string {\n if (!this.resumable) return code(fail)\n const bad = this.label()\n return this.partialSafe(p, code(`break ${bad};`), bad, 1, out, fail, fn)\n }\n\n private arrayAny(out: string | null, fail: string): string {\n return `if(p>=E){${BT}${fail}}${out === null ? \"\" : `${out}=I[p];`}p++;`\n }\n\n private arrayOneOf(node: NodeOf<\"OneOf\">, out: string | null, fail: string): string {\n const m = this.const(compileAny(node.set).forCode.token)\n return `if(p>=E||${m}(I[p])===${node.negate}){${BT}${fail}}${out === null ? \"\" : `${out}=I[p];`}p++;`\n }\n\n private arrayTakeWhile(node: NodeOf<\"TakeWhile\">, out: string | null, fail: string, fn: Fn): string {\n const m = this.const(compileAny(node.set).forCode.token)\n const st = this.v(fn)\n const max = node.max === Infinity ? \"\" : `&&p-${st}<${node.max}`\n return (\n `${st}=p;while(p<E${max}&&${m}(I[p])!==${node.negate})p++;` +\n (node.min > 0 ? `if(p-${st}<${node.min}){${BT}${fail}}` : \"\") +\n (out === null ? \"\" : `${out}=I.slice(${st},p);`)\n )\n }\n\n call(name: string, out: string | null, fail: string): string {\n if (out === null) return `if(${name}(p)===F){${fail}}p=P;`\n return `${out}=${name}(p);if(${out}===F){${fail}}p=P;`\n }\n\n /** Runs the closure-compiled step of `p` on the shared state. */\n delegate(p: ParserLike, used: boolean, out: string | null, fail: string, fn: Fn): string {\n const step = this.const(this.closure.compile(p, used))\n const t = out ?? this.v(fn)\n return `$S.pos=p;${t}=${step}($S);if(${t}===F){${fail}}p=$S.pos;`\n }\n\n private native(enc: Encoding<any> | undefined): boolean {\n return enc === undefined ? this.kind !== 2 : kindOfEncoding(enc) === this.kind\n }\n\n inline(p: ParserLike, used: boolean, out: string | null, fail: string, fn: Fn, depth: number): string {\n const node = nodeOf(p)\n const set = (value: string) => (out === null ? \"\" : `${out}=${value};`)\n const d = depth + 1\n switch (node._tag) {\n case \"Succeed\":\n return set(this.lit(node.value))\n case \"Sync\":\n return used ? set(`${this.const(node.evaluate)}()`) : \"\"\n case \"Fail\":\n return `$S.mode=${JSON.stringify(node.mode)};${fail}`\n case \"Eof\":\n return (\n `if(p<E){${BT}${fail}}` +\n // `eof`'s own failure: `Incomplete`, needing one more unit\n (this.resumable ? `if($S.partial){$S.incomplete(1);${fail}}` : \"\") +\n set(\"void 0\")\n )\n case \"Location\":\n return set(\"p\")\n case \"RestLen\":\n return set(\"E-p\")\n case \"Suspend\":\n return this.call(this.rule(node.resolve(), used), out, fail)\n case \"Any\":\n if (this.array(node.encoding)) return this.arrayLeaf(p, (f) => this.arrayAny(out, f), out, fail, fn)\n return this.leaf(p, node, used, out, fail, fn)\n case \"OneOf\":\n if (this.array(node.encoding)) return this.arrayLeaf(p, (f) => this.arrayOneOf(node, out, f), out, fail, fn)\n return this.leaf(p, node, used, out, fail, fn)\n case \"TakeWhile\":\n if (this.array(node.encoding))\n return this.arrayLeaf(p, (f) => this.arrayTakeWhile(node, out, f, fn), out, fail, fn)\n return this.leaf(p, node, used, out, fail, fn)\n case \"Literal\":\n return this.leaf(p, node, used, out, fail, fn, node.literal.length * 4)\n case \"Escaped\": {\n if (!this.native(node.encoding)) return this.delegate(p, used, out, fail, fn)\n return this.escaped(p, node, out, fail, fn, d)\n }\n case \"Map\": {\n if (!used) return this.gen(node.self, false, null, fail, fn, d)\n if (node.f === toFloat && out !== null) {\n const code = this.float(node, out, fail, fn, d)\n if (code !== undefined) return code\n }\n // Streaming builds too: their checkpoints hold the object built so far\n if (node.f === fromEntries && out !== null && buildsEntries(node.self)) {\n return this.entries(node.self, out, fail, fn, d)\n }\n const t = this.v(fn)\n return this.gen(node.self, true, t, fail, fn, d) + set(`${this.const(node.f)}(${t})`)\n }\n case \"As\":\n return this.gen(node.self, false, null, fail, fn, d) + (used ? set(this.lit(node.value)) : \"\")\n case \"Tap\": {\n const t = out ?? this.v(fn)\n return this.gen(node.self, true, t, fail, fn, d) + `${this.const(node.f)}(${t});`\n }\n case \"TryMap\":\n case \"FilterMap\": {\n const t = this.v(fn)\n const r = this.v(fn)\n const [tag, field] = Predicate.isTagged(node, \"TryMap\") ? [\"Success\", \"success\"] : [\"Some\", \"value\"]\n return (\n this.gen(node.self, true, t, fail, fn, d) +\n `${r}=${this.const(node.f)}(${t});if(${r}._tag!==\"${tag}\"){${BT}${fail}}${set(`${r}.${field}`)}`\n )\n }\n case \"FastPath\": {\n // The fast path runs on the state; when it defers, the grammar runs from where it started\n const st = this.v(fn)\n const t = out ?? this.v(fn)\n const done = this.label()\n return (\n `${st}=p;$S.pos=p;${t}=${this.const(node.fast)}($S);` +\n `${done}:{if(${t}!==${this.const(Defer)}){p=$S.pos;break ${done}}p=${st};` +\n `${this.gen(node.self, used, out, fail, fn, d)}}`\n )\n }\n case \"MapOrFail\": {\n const t = this.v(fn)\n const r = out ?? this.v(fn)\n return this.gen(node.self, true, t, fail, fn, d) + `${r}=${this.const(node.f)}(${t});if(${r}===F){${BT}${fail}}`\n }\n case \"Filter\": {\n const t = out ?? this.v(fn)\n return this.gen(node.self, true, t, fail, fn, d) + `if(!${this.const(node.predicate)}(${t})){${BT}${fail}}`\n }\n case \"FlatMap\": {\n const t = this.v(fn)\n const r = out ?? this.v(fn)\n this.closure.note(p, node, \"the parser returned by the function runs interpreted\")\n return (\n this.gen(node.self, true, t, fail, fn, d) +\n `$S.pos=p;${r}=${this.const(node.f)}(${t}).step($S);if(${r}===F){${fail}}p=$S.pos;`\n )\n }\n case \"Taken\": {\n if (node.encoding !== undefined && !this.native(node.encoding)) return this.delegate(p, used, out, fail, fn)\n const st = this.v(fn)\n const body = `${st}=p;` + this.gen(node.self, false, null, fail, fn, d)\n if (out === null && node.encoding === undefined) return body\n if (node.encoding === undefined) {\n return (\n body +\n set(this.kind === 0 ? `I.slice(${st},p)` : this.kind === 1 ? `I.subarray(${st},p)` : `$S.slice(${st},p)`)\n )\n }\n const t = out ?? this.v(fn)\n const enc = this.const(node.encoding)\n return body + `${t}=R.textOf(${enc},${fastLimit(node.encoding)},$S,${st},p);if(${t}===F){${fail}}`\n }\n case \"WithTaken\":\n case \"WithSpan\": {\n const st = this.v(fn)\n const t = this.v(fn)\n const extra = Predicate.isTagged(node, \"WithSpan\") ? `{start:${st},end:p}` : `$S.slice(${st},p)`\n return `${st}=p;` + this.gen(node.self, true, t, fail, fn, d) + set(`[${t},${extra}]`)\n }\n case \"MapSpan\": {\n if (!used) return this.gen(node.self, false, null, fail, fn, d)\n const st = this.v(fn)\n const t = this.v(fn)\n return `${st}=p;` + this.gen(node.self, true, t, fail, fn, d) + set(`${this.const(node.f)}(${t},${st},p)`)\n }\n case \"Span\": {\n const st = this.v(fn)\n return `${st}=p;` + this.gen(node.self, false, null, fail, fn, d) + set(`{start:${st},end:p}`)\n }\n case \"Mode\": {\n const ok = this.label()\n const bad = this.label()\n return (\n `${ok}:{${bad}:{${this.gen(node.self, used, out, `break ${bad};`, fn, d)}break ${ok};}` +\n `if($S.mode===${JSON.stringify(node.from)})$S.mode=${JSON.stringify(node.to)};${fail}}`\n )\n }\n case \"Context\":\n case \"Expected\":\n case \"Quiet\":\n case \"MapError\":\n case \"OrFail\":\n case \"Trace\":\n case \"Syntax\":\n case \"RetryAfter\":\n return this.gen(node.self, used, out, fail, fn, d)\n case \"ResumeAfter\": {\n if (!used) return this.gen(node.self, false, null, fail, fn, d)\n const t = this.v(fn)\n return this.gen(node.self, true, t, fail, fn, d) + set(`R.some(${t})`)\n }\n case \"Opt\":\n case \"OrElseSucceed\": {\n const st = this.v(fn)\n const ok = this.label()\n const bad = this.label()\n const t = out === null ? null : this.v(fn)\n const some = Predicate.isTagged(node, \"Opt\") ? `R.some(${t})` : `${t}`\n const orElse = Predicate.isTagged(node, \"Opt\") ? \"R.none()\" : `${this.const(node.value)}()`\n return (\n `${st}=p;${ok}:{${bad}:{${this.gen(node.self, used, t, `break ${bad};`, fn, d)}${set(some)}break ${ok};}` +\n `if($S.mode!==\"Backtrack\"){${fail}}p=${st};${set(orElse)}}`\n )\n }\n case \"Peek\": {\n const st = this.v(fn)\n return `${st}=p;${this.gen(node.self, used, out, fail, fn, d)}p=${st};`\n }\n case \"Not\": {\n const st = this.v(fn)\n const ok = this.label()\n const bad = this.label()\n return (\n `${st}=p;${ok}:{${bad}:{${this.gen(node.self, false, null, `break ${bad};`, fn, d)}p=${st};${BT}${fail}}` +\n `if($S.mode!==\"Backtrack\"){${fail}}p=${st};}${set(\"void 0\")}`\n )\n }\n case \"Seq\":\n return this.seq(node, used, out, fail, fn, d)\n case \"Struct\": {\n if (out === null) return node.parsers.map((q) => this.gen(q, false, null, fail, fn, d)).join(\"\")\n const vars = node.parsers.map(() => this.v(fn))\n const code = node.parsers.map((q, i) => this.gen(q, true, vars[i], fail, fn, d)).join(\"\")\n if (node.keys.includes(\"__proto__\")) {\n return code + `${out}={};` + node.keys.map((k, i) => `${out}[${JSON.stringify(k)}]=${vars[i]};`).join(\"\")\n }\n return code + `${out}={${node.keys.map((k, i) => `${JSON.stringify(k)}:${vars[i]}`).join(\",\")}};`\n }\n case \"SeqWith\": {\n if (out === null) return node.parsers.map((q) => this.gen(q, false, null, fail, fn, d)).join(\"\")\n const vars = node.parsers.map(() => this.v(fn))\n const code = node.parsers.map((q, i) => this.gen(q, true, vars[i], fail, fn, d)).join(\"\")\n return code + `${out}=${this.const(node.f)}(${vars.join(\",\")});`\n }\n case \"ZipWith\": {\n if (out === null)\n return this.gen(node.self, false, null, fail, fn, d) + this.gen(node.that, false, null, fail, fn, d)\n const x = this.v(fn)\n const y = this.v(fn)\n return (\n this.gen(node.self, true, x, fail, fn, d) +\n this.gen(node.that, true, y, fail, fn, d) +\n `${out}=${this.const(node.f)}(${x},${y});`\n )\n }\n case \"Alt\":\n return this.alt(node, used, out, fail, fn, d)\n case \"Dispatch\":\n return this.dispatch(p, node, used, out, fail, fn, d)\n case \"Repeat\":\n case \"Fold\": {\n // A run of a character set whose characters are not kept is a `takeWhile` (#79)\n const run =\n out === null && Predicate.isTagged(node, \"Repeat\") ? this.repeatRun(p, node, fail, fn, d) : undefined\n return run ?? this.repeat(node, used, out, fail, fn, d)\n }\n case \"Separated\":\n return this.separated(node, used, out, fail, fn, d)\n case \"Fixed\": {\n // On bytes, read inline; at the end of the input, the step reports it\n if (this.kind !== 1) return this.delegate(p, used, out, fail, fn)\n const read = used ? `${out ?? this.v(fn)}=${this.const(node.read)}(I,p,$S);` : \"\"\n return `if(E-p>=${node.size}){${read}p+=${node.size}}else{${this.delegate(p, used, out, fail, fn)}}`\n }\n default:\n return this.delegate(p, used, out, fail, fn)\n }\n }\n\n /**\n * `Ascii.float` and `Text.float` (`map(floatText, toFloat)`): numbers in\n * decimal notation are matched and converted in one pass by\n * `scanFloatString` or `scanFloatBytes`, without slicing the input; the\n * rest (`nan`, `inf`, failures before a digit) runs the parser. Returns\n * `undefined` when this does not apply.\n */\n private float(node: NodeOf<\"Map\">, out: string, fail: string, fn: Fn, d: number): string | undefined {\n if (!floatTexts.has(node.self) || this.kind === 2) return undefined\n if (!scansFloat(node.self, (enc) => this.native(enc))) return undefined\n const t = this.v(fn)\n const scan = this.const(floatScan)\n // Near the end of a partial input, the parser may have to report `Incomplete`\n const near = this.resumable ? `||$S.partial&&${scan}.read+${Margin}>E` : \"\"\n return (\n `${out}=${this.kind === 0 ? \"R.scanFloatString\" : \"R.scanFloatBytes\"}(I,p,E);` +\n `if(${out}===void 0${near}){${this.gen(node.self, true, t, fail, fn, d)}${out}=${this.const(toFloat)}(${t})}` +\n `else if(${out}===F){${BT}${fail}}else p=${scan}.end;`\n )\n }\n\n seq(node: NodeOf<\"Seq\">, used: boolean, out: string | null, fail: string, fn: Fn, d: number): string {\n const output = node.output\n if (out === null || !used) return node.parsers.map((q) => this.gen(q, false, null, fail, fn, d)).join(\"\")\n if (Predicate.isNumber(output)) {\n return node.parsers.map((q, i) => this.gen(q, i === output, i === output ? out : null, fail, fn, d)).join(\"\")\n }\n const keep = (i: number) => output === \"tuple\" || output.includes(i)\n const vars = node.parsers.map((_, i) => (keep(i) ? this.v(fn) : null))\n const code = node.parsers.map((q, i) => this.gen(q, keep(i), vars[i], fail, fn, d)).join(\"\")\n return code + `${out}=[${vars.filter((v) => v !== null).join(\",\")}];`\n }\n\n /** A test that the unit `u` may start `first` (false for -1, the end of the input). */\n private startTest(first: First, u: string): string {\n const runs = runsOf(first.units)\n const small = rangeTest(runs, u)\n const low = small ?? `${this.const(first.units)}[${u}]===1`\n if (!first.high) return small !== undefined ? `(${low})` : `(${u}<${TableSize}&&${low})`\n return `(${u}>=${TableSize}||${low})`\n }\n\n alt(node: NodeOf<\"Alt\">, used: boolean, out: string | null, fail: string, fn: Fn, d: number): string {\n const parsers = node.parsers\n if (Arr.isReadonlyArrayEmpty(parsers)) return `${BT}${fail}`\n if (parsers.length === 1) return this.gen(parsers[0], used, out, fail, fn, d)\n const firsts = this.kind === 2 ? undefined : parsers.map((q) => this.closure.firsts.of(q))\n const prune = firsts !== undefined && planAlt(firsts) !== undefined\n const st = this.v(fn)\n const u = prune ? this.v(fn) : \"\"\n const done = this.label()\n // Near the end of a partial input, no branch is skipped: it may be incomplete rather than fail\n const read = this.resumable ? `$S.partial&&p+${Margin}>E?-2:p<E?${this.unit(\"p\")}:-1` : `p<E?${this.unit(\"p\")}:-1`\n let code = `${st}=p;${prune ? `${u}=${read};` : \"\"}${done}:{`\n parsers.forEach((q, i) => {\n const bad = this.label()\n const branch =\n `${bad}:{${this.gen(q, used, out, `break ${bad};`, fn, d)}break ${done};}` +\n `if($S.mode!==\"Backtrack\"){${fail}}p=${st};`\n const f = firsts?.[i]\n code +=\n prune && f !== undefined && f.mode === Strict\n ? `if(${this.resumable ? `${u}===-2||` : \"\"}${this.startTest(f, u)}){${branch}}`\n : branch\n })\n return code + `${BT}${fail}}`\n }\n\n dispatch(\n p: ParserLike,\n node: NodeOf<\"Dispatch\">,\n used: boolean,\n out: string | null,\n fail: string,\n fn: Fn,\n d: number\n ): string {\n const choose = this.const(node.choose)\n if (node.cases === undefined) {\n // The general path: run the selector, choose, then run the case's step\n this.closure.note(p, node, \"the parser returned by the function of cases runs interpreted\")\n const st = this.v(fn)\n const k = this.v(fn)\n const q = this.v(fn)\n const r = out ?? this.v(fn)\n return (\n `${st}=p;${this.gen(node.selector, true, k, fail, fn, d)}${q}=${choose}(${k});` +\n `if(${q}===void 0){p=${st};${BT}${fail}}$S.pos=p;${r}=${q}.step($S);` +\n `if(${r}===F){${fail}}p=$S.pos;`\n )\n }\n // The cases are known: number them, and run the chosen one inline\n const cases = new Map<ParserLike, number>()\n for (const key of Reflect.ownKeys(node.cases)) {\n const q = node.cases[key]\n if (!cases.has(q)) cases.set(q, cases.size)\n }\n if (node.otherwise !== undefined && !cases.has(node.otherwise)) cases.set(node.otherwise, cases.size)\n const index = this.const(cases)\n // `inline`: the cases' code goes here; otherwise (a fallback next to the\n // switch on units below, which inlines them already) they are called as rules\n const general = (inline: boolean): string => {\n const st = this.v(fn)\n const k = this.v(fn)\n const q = this.v(fn)\n const sw = this.label()\n let code =\n `${st}=p;${this.gen(node.selector, true, k, fail, fn, d)}${q}=${choose}(${k});` +\n `if(${q}===void 0){p=${st};${BT}${fail}}${sw}:switch(${index}.get(${q})){`\n for (const [c, i] of cases) {\n const body = inline ? this.gen(c, used, out, fail, fn, d) : this.call(this.rule(c, used), out, fail)\n code += `case ${i}:{${body}break ${sw};}`\n }\n // Unreachable unless the record of cases changed after `dispatch` read it\n const r = out ?? this.v(fn)\n return code + `default:{$S.pos=p;${r}=${q}.step($S);if(${r}===F){${fail}}p=$S.pos;}}`\n }\n const { node: sel, peek } = selectorOf(node.selector)\n if (!Predicate.isTagged(sel, \"Any\") || !this.native(sel.encoding)) return general(true)\n const enc = sel.encoding\n const r = enc === undefined ? undefined : this.reader(enc)\n const limit = r === undefined ? (this.kind === 0 ? 0xd800 : TableSize) : Math.min(r.fast, 0xd800)\n const size = Math.min(limit, TableSize)\n if (size === 0) return general(true)\n // Group the units by the case they select\n const groups = new Map<ParserLike, Array<number>>()\n for (let unit = 0; unit < size; unit++) {\n const q = node.choose(enc === undefined && this.kind === 1 ? unit : charOf(unit))\n if (q === undefined) continue\n let g = groups.get(q)\n if (g === undefined) groups.set(q, (g = []))\n g.push(unit)\n }\n const u = this.v(fn)\n const sw = this.label()\n // A unit cut short by the end of the input takes the general path\n const read = r === undefined ? `p<E?${this.unit(\"p\")}:-1` : `${r.guard(\"p\")}?${r.unit(\"p\")}:p<E?${size}:-1`\n // Near the end of a partial input, the general path handles incomplete units\n const near = this.resumable ? `$S.partial&&p+${Margin}>E?${size}:` : \"\"\n let code = `${u}=${near}${read};${sw}:switch(${u}){`\n for (const [q, units] of groups) {\n code +=\n units.map((x) => `case ${x}:`).join(\"\") +\n `{${peek ? \"\" : `p+=${r?.width ?? 1};`}${this.gen(q, used, out, fail, fn, d)}break ${sw};}`\n }\n code += `case -1:{${BT}${fail}}default:{if(${u}<${size}){${BT}${fail}}${general(false)}}}`\n return code\n }\n\n /**\n * A repetition whose elements are not kept, rewritten to scan a run of a\n * character set in one loop instead of one element at a time (#79):\n *\n * - `repeat(oneOf(S), range)` matches what `takeWhile(S, range)` matches,\n * stopping, failing and reporting `Incomplete` where it does, so it\n * compiles as that `takeWhile`, with the repetition's own step as the\n * fallback near the end of a partial input.\n * - `repeat(alt(oneOf(S), ...rest))` with `min` at most 1 and no `max`\n * matches what `repeat(alt(takeWhile(S, { min: 1 }), ...rest))` matches:\n * a run of `S` is a run of one-character elements, and the counts that\n * differ only matter for other ranges. The first branch is a synthetic\n * `takeWhile` node; outside resumable builds, which never run its step.\n *\n * Returns `undefined` when neither applies.\n */\n private repeatRun(p: ParserLike, node: NodeOf<\"Repeat\">, fail: string, fn: Fn, d: number): string | undefined {\n if (this.kind === 2) return undefined\n const element = nodeOf(node.self)\n if (Predicate.isTagged(element, \"OneOf\") && this.native(element.encoding)) {\n const { encoding, negate, set } = element\n return this.leaf(\n p,\n { _tag: \"TakeWhile\", set, negate, encoding, min: node.min, max: node.max },\n false,\n null,\n fail,\n fn\n )\n }\n if (this.resumable || node.min > 1 || node.max !== Infinity || !Predicate.isTagged(element, \"Alt\")) return undefined\n const [first, ...rest] = element.parsers\n const head = first === undefined ? undefined : nodeOf(first)\n if (\n head === undefined ||\n !Predicate.isTagged(head, \"OneOf\") ||\n !this.native(head.encoding) ||\n Arr.isReadonlyArrayEmpty(rest)\n ) {\n return undefined\n }\n const run = synthetic(\n { _tag: \"TakeWhile\", set: head.set, negate: head.negate, encoding: head.encoding, min: 1, max: Infinity },\n node.self.step\n )\n const alt = synthetic({ _tag: \"Alt\", parsers: [run, ...rest] }, node.self.step)\n return this.repeat({ ...node, self: alt }, false, null, fail, fn, d)\n }\n\n repeat(\n node: NodeOf<\"Repeat\"> | NodeOf<\"Fold\">,\n used: boolean,\n out: string | null,\n fail: string,\n fn: Fn,\n d: number,\n collect?: Collect\n ): string {\n const { max, min } = node\n const loop = this.label()\n const bad = this.label()\n const n = this.v(fn)\n const st = this.v(fn)\n const isFold = Predicate.isTagged(node, \"Fold\")\n const cond = isFold ? node.while : undefined\n const keep = out !== null && used && collect === undefined\n // `while` needs the accumulator even when the output is unused\n const tracked = keep || cond !== undefined\n const x = tracked ? this.v(fn) : null\n const acc = out !== null && keep ? out : this.v(fn)\n let init = collect?.init ?? \"\"\n let add = \"\"\n if (tracked) {\n if (isFold) {\n init = `${acc}=${this.const(node.init)}();`\n add = `${acc}=${this.const(node.f)}(${acc},${x});`\n } else {\n init = `${acc}=[];`\n add = `${acc}.push(${x});`\n }\n }\n const check = max === Infinity ? `if(p===${st}){$S.mode=\"Cut\";${fail}}` : \"\"\n const bound = max === Infinity ? \"\" : `${n}<${max}`\n const r = this.resumable ? this.resumePoint(fn) : undefined\n // A checkpoint holds the result so far: the accumulator, or what `collect` builds\n const held = collect?.value ?? acc\n const save =\n r === undefined\n ? \"\"\n : `if($S.mode===\"Incomplete\"&&$S.resume!==void 0)R.save($S,${r.key},${r.entry},{acc:${held},${collect?.saved ?? \"\"}count:${n},pos:${st}});`\n // With `collect`, the element adds itself once the loop check passed\n const element =\n collect === undefined\n ? `${this.gen(node.self, tracked, x, `break ${bad};`, fn, d)}${check}${add}`\n : collect.element(`break ${bad};`, check)\n const stop =\n cond === undefined ? \"\" : `if(${min > 0 ? `${n}>=${min}&&` : \"\"}!${this.const(cond)}(${acc}))break ${loop};`\n const body =\n `${loop}:for(;${bound};${n}++){${stop}${st}=p;` +\n `${bad}:{${element}continue ${loop};}` +\n `${save}if($S.mode!==\"Backtrack\"${min > 0 ? `||${n}<${min}` : \"\"}){${fail}}p=${st};break ${loop};}`\n if (r === undefined) return `${init}${n}=0;${body}${collect?.finish ?? \"\"}`\n return r.wrap(\n held,\n `${held}=cp.acc;${collect?.restore ?? \"\"}${n}=cp.count;p=cp.pos;`,\n `${init}${n}=0;`,\n `${body}${collect?.finish ?? \"\"}`\n )\n }\n\n /**\n * In a resumable build, a repetition entered at `entry` may restart from a\n * checkpoint (`restore`, with the checkpoint in `cp`), or return the result\n * of a `Done` one; a resumed repetition records its result when it ends.\n */\n private resumePoint(fn: Fn) {\n const key = this.const(new Key())\n const entry = this.v(fn)\n const resumed = this.v(fn)\n const done = this.label()\n return {\n key,\n entry,\n resumed,\n wrap: (value: string, restore: string, fresh: string, body: string) =>\n `${entry}=p;${resumed}=false;${done}:{if($S.resume!==void 0){const cp=R.take($S,${key},p);` +\n `if(cp instanceof R.Done){p=cp.pos;${value}=cp.value;break ${done};}` +\n `if(cp!==void 0){${restore}${resumed}=true;}}if(!${resumed}){${fresh}}${body}` +\n `if(${resumed})R.done($S,${key},${entry},${value},p);}`\n }\n }\n\n separated(\n node: NodeOf<\"Separated\">,\n used: boolean,\n out: string | null,\n fail: string,\n fn: Fn,\n d: number,\n collect?: Collect\n ): string {\n const { max, min } = node\n const keep = out !== null && used && collect === undefined\n if (max === 0) return collect !== undefined ? collect.init + collect.finish : keep ? `${out}=[];` : \"\"\n const x = keep ? this.v(fn) : null\n const acc = out !== null && keep ? out : this.v(fn)\n const n = this.v(fn)\n const st = this.v(fn)\n const done = this.label()\n const loop = this.label()\n const push = keep ? `${acc}.push(${x});` : \"\"\n const r = this.resumable ? this.resumePoint(fn) : undefined\n // A checkpoint holds the result so far: the accumulator, or what `collect` builds\n const held = collect?.value ?? acc\n const save =\n r === undefined\n ? \"\"\n : `if($S.mode===\"Incomplete\"&&$S.resume!==void 0)R.save($S,${r.key},${r.entry},{acc:${held},${collect?.saved ?? \"\"}count:${n},pos:${st}});`\n // Runs `body`; on its failure, stops the repetition (or fails if `fatal`)\n const attempt = (body: (fail: string) => string, success: string, fatal: string, checkpoint: string) => {\n const ok = this.label()\n const bad = this.label()\n return (\n `${ok}:{${bad}:{${body(`break ${bad};`)}${success}break ${ok};}` +\n `${checkpoint}if($S.mode!==\"Backtrack\"${fatal}){${fail}}p=${st};break ${done};}`\n )\n }\n const self = (f: string) =>\n collect === undefined ? this.gen(node.self, keep, x, f, fn, d) : collect.element(f, \"\")\n const sep = (f: string) => this.gen(node.separator, false, null, f, fn, d)\n const check = max === Infinity ? `if(p===${st}){$S.mode=\"Cut\";${fail}}` : \"\"\n const first =\n `${collect?.init ?? (keep ? `${acc}=[];` : \"\")}${n}=0;${st}=p;` +\n attempt(self, `${push}${n}++;`, min > 0 ? \"||true\" : \"\", \"\")\n const rest =\n `${loop}:while(${max === Infinity ? \"true\" : `${n}<${max}`}){${st}=p;` +\n attempt(sep, \"\", `||${n}<${min}`, save) +\n check +\n attempt(self, `${push}${n}++;continue ${loop};`, `||${n}<${min}`, save) +\n `}`\n if (r === undefined) return `${done}:{${first}${rest}}${collect?.finish ?? \"\"}`\n // `done` ends the repetition; the checkpoint wrapper records the result after it\n return r.wrap(\n held,\n `${held}=cp.acc;${collect?.restore ?? \"\"}${n}=cp.count;p=cp.pos;`,\n \"\",\n `${done}:{if(!${r.resumed}){${first}}${rest}}${collect?.finish ?? \"\"}`\n )\n }\n\n /**\n * `map(self, Object.fromEntries)`, where `buildsEntries(self)`: builds the\n * object directly, assigning each entry as it is parsed (see\n * `internal/entries.ts`), without the pairs and their array. `cut`,\n * `preceded`, `terminated` and diagnostics around the repetition are\n * compiled as usual around it.\n */\n private entries(p: ParserLike, out: string, fail: string, fn: Fn, d: number): string {\n const node = nodeOf(p)\n if (Predicate.isTagged(node, \"Mode\")) {\n const ok = this.label()\n const bad = this.label()\n return (\n `${ok}:{${bad}:{${this.entries(node.self, out, `break ${bad};`, fn, d)}break ${ok};}` +\n `if($S.mode===${JSON.stringify(node.from)})$S.mode=${JSON.stringify(node.to)};${fail}}`\n )\n }\n if (Predicate.isTagged(node, \"Seq\")) {\n // SAFETY: `buildsEntries` passes through a sequence only when it keeps one output, by index\n const i = node.output as number\n return node.parsers\n .map((q, j) => (j === i ? this.entries(q, out, fail, fn, d) : this.gen(q, false, null, fail, fn, d)))\n .join(\"\")\n }\n if (Predicate.isTagged(node, \"Repeat\") || Predicate.isTagged(node, \"Separated\")) {\n const pair = pairOf(node.self)\n if (pair === undefined) {\n // Not reached (`buildsEntries` found the pair): build the pairs, then the object\n const t = this.v(fn)\n return this.gen(p, true, t, fail, fn, d) + `${out}=${this.const(fromEntries)}(${t});`\n }\n const deferred = this.v(fn)\n const key = this.v(fn)\n const value = this.v(fn)\n const collect: Collect = {\n init: `${out}={};${deferred}=void 0;`,\n element: (f, check) =>\n pair.parsers\n .map((q, j) =>\n this.gen(\n q,\n j === pair.key || j === pair.value,\n j === pair.key ? key : j === pair.value ? value : null,\n f,\n fn,\n d\n )\n )\n .join(\"\") +\n check +\n `if(${deferred}===void 0&&R.isPlainKey(${key}))${out}[${key}]=${value};` +\n `else ${deferred}=R.addEntry(${out},${deferred},${key},${value});`,\n finish: `if(${deferred}!==void 0)R.flushEntries(${out},${deferred});`,\n value: out,\n // A streaming build's checkpoint holds the object so far, with its deferred entries\n saved: `def:${deferred},`,\n restore: `${deferred}=cp.def;`\n }\n return Predicate.isTagged(node, \"Repeat\")\n ? this.repeat(node, true, out, fail, fn, d, collect)\n : this.separated(node, true, out, fail, fn, d, collect)\n }\n // SAFETY: the other nodes `buildsEntries` passes through are diagnostics, which all wrap a `self`\n return this.entries((node as { readonly self: ParserLike }).self, out, fail, fn, d)\n }\n\n // ---------------------------------------------------------------------------\n // Tokens\n // ---------------------------------------------------------------------------\n\n /** An expression: is the unit `c`, known to be below `size` (at most `TableSize`), accepted? */\n private member(accept: Uint8Array, c: string, size: number = TableSize): string {\n return tableTest(accept, c, size) ?? `${this.const(accept)}[${c}]===1`\n }\n\n /** An expression: is the code point `c` (at least `TableSize`) accepted? */\n private memberHigh(set: CharSet, negate: boolean, c: string): string {\n if (set.ranges !== undefined && !set.ranges.some(([, b]) => b >= TableSize)) return negate ? \"true\" : \"false\"\n return `${this.const(set.test)}(${c})!==${negate}`\n }\n\n /**\n * An expression: does a `Text` set accept the unit `c`, known to be below\n * `r.fast`? Code points from `TableSize` up are tested by the set's\n * function, unless its ranges show they are all rejected.\n */\n private textAccepts(r: Reader, cs: CharSet, accept: Uint8Array, negate: boolean, c: string): string {\n if (r.fast <= TableSize) return `(${this.member(accept, c, r.fast)})`\n const member = this.member(accept, c)\n if (reachesAbove(cs, TableSize)) return `(${c}<${TableSize}?${member}:${this.const(cs.test)}(${c})!==${negate})`\n return negate ? `(${c}>=${TableSize}||${member})` : `(${c}<${TableSize}&&${member})`\n }\n\n /**\n * An expression: does a `Text` set reject `c`, a code point that `decode`\n * returned? The built-in encodings only decode code points from `r.fast`\n * up there.\n */\n private textRejectsDecoded(enc: Encoding<any>, r: Reader, cs: CharSet, negate: boolean, c: string): string {\n if (r.fast > 0 && builtinEncodings.has(enc) && !reachesAbove(cs, r.fast)) return String(!negate)\n return `${this.const(cs.test)}(${c})===${negate}`\n }\n\n token(\n node: NodeOf<\"Any\" | \"Literal\" | \"OneOf\" | \"TakeWhile\">,\n out: string | null,\n fail: string,\n fn: Fn\n ): string | undefined {\n const set = (value: string) => (out === null ? \"\" : `${out}=${value};`)\n const enc = node.encoding\n // SAFETY: `leaf`, the only caller, checks `native` first, which never holds on array input (kind 2)\n const kind = this.kind as 0 | 1\n const failBT = `{${BT}${fail}}`\n switch (node._tag) {\n case \"Any\": {\n if (enc === undefined) {\n if (kind === 1) return `if(p>=E)${failBT}${set(\"I[p]\")}p++;`\n const c = this.v(fn)\n return (\n `if(p>=E)${failBT}${c}=I.charCodeAt(p);` +\n `if(${c}>=55296&&${c}<=56319&&p+1<I.length&&(I.charCodeAt(p+1)&64512)===56320){${set(\"I.slice(p,p+2)\")}p+=2}` +\n `else{${set(\"I[p]\")}p++}`\n )\n }\n const r = this.reader(enc)\n const c = this.v(fn)\n const dec = `${this.const(enc.decode)}(I,p,E)`\n return (\n `if(p>=E)${failBT}` +\n (r.fast > 0\n ? `if(${r.guard(\"p\")}&&(${c}=${r.unit(\"p\")})<${r.fast}){${set(`R.charOf(${c})`)}p+=${r.width}}else`\n : \"\") +\n `{${c}=${dec};if(${c}<0)${failBT}${set(`R.charOf(${c})`)}p+=${this.const(enc.width)}(${c})}`\n )\n }\n case \"Literal\": {\n const lit = node.literal\n if (enc !== undefined) {\n if (node.caseless) return undefined\n // SAFETY: a `Literal` with an encoding is a `Text` literal, which records the string it encodes\n const encoded = enc.encode(lit as string)\n return (\n this.literalUnits(Predicate.isString(encoded) ? unitsOf(encoded) : Array.from(encoded), false, fail) +\n set(this.lit(lit))\n )\n }\n const literalKind = Predicate.isString(lit) ? 0 : lit instanceof Uint8Array ? 1 : 2\n let codes: Array<number>\n if (Predicate.isString(lit)) codes = kind === 0 ? unitsOf(lit) : Array.from(new TextEncoder().encode(lit))\n else if (kind === 1 && lit instanceof Uint8Array) codes = Array.from(lit)\n else return undefined\n const len = codes.length\n const value =\n !node.caseless && literalKind === kind\n ? this.lit(lit)\n : kind === 0\n ? `I.slice(p-${len},p)`\n : `I.subarray(p-${len},p)`\n return this.literalUnits(codes, node.caseless, fail) + set(value)\n }\n case \"OneOf\": {\n const negate = node.negate\n const cs = enc === undefined ? tokenSet(node.set, kind) : textSet(node.set)\n const accept = acceptTable(cs, negate)\n const c = this.v(fn)\n const value = (len: string) => (this.kind === 0 ? `I.slice(p,p+${len})` : `I[p]`)\n if (enc === undefined) {\n if (kind === 1)\n return `if(p>=E)${failBT}${c}=I[p];if(!(${this.member(accept, c)}))${failBT}${set(\"I[p]\")}p++;`\n const cp = this.v(fn)\n if (!negate && this.memberHigh(cs, negate, cp) === \"false\") {\n return `if(p>=E)${failBT}${c}=I.charCodeAt(p);if(${c}>=${TableSize}||!(${this.member(accept, c)}))${failBT}${set(\"I[p]\")}p++;`\n }\n return (\n `if(p>=E)${failBT}${c}=I.charCodeAt(p);` +\n `if(${c}<${TableSize}){if(!(${this.member(accept, c)}))${failBT}${set(\"I[p]\")}p++}` +\n `else{${cp}=${c};if(${c}>=55296&&${c}<=56319&&p+1<I.length){const d=I.charCodeAt(p+1);` +\n `if((d&64512)===56320)${cp}=((${c}-55296)<<10)+(d-56320)+65536}` +\n `if(!(${this.memberHigh(cs, negate, cp)}))${failBT}` +\n `if(${cp}>65535){${set(value(\"2\"))}p+=2}else{${set(\"I[p]\")}p++}}`\n )\n }\n const r = this.reader(enc)\n return (\n `if(p>=E)${failBT}` +\n (r.fast > 0\n ? `if(${r.guard(\"p\")}&&(${c}=${r.unit(\"p\")})<${r.fast}){if(!${this.textAccepts(r, cs, accept, negate, c)})${failBT}${set(`R.charOf(${c})`)}p+=${r.width}}else`\n : \"\") +\n `{${c}=${this.const(enc.decode)}(I,p,E);if(${c}<0||${this.textRejectsDecoded(enc, r, cs, negate, c)})${failBT}` +\n `${set(`R.charOf(${c})`)}p+=${this.const(enc.width)}(${c})}`\n )\n }\n case \"TakeWhile\":\n return this.takeWhile(node, out, fail, fn)\n }\n }\n\n /** Matches literal units at `p`, advancing past them. */\n private literalUnits(codes: ReadonlyArray<number>, caseless: boolean, fail: string): string {\n const len = codes.length\n if (len === 0) return \"\"\n const test = (c: number, i: number) => {\n const at = this.unit(i === 0 ? \"p\" : `p+${i}`)\n if (caseless && isLetter(c)) return `(${at}|32)===${lowerAscii(c)}`\n return `${at}===${c}`\n }\n if (len <= 8) {\n // Reading past the end gives NaN or undefined, which matches nothing\n return `if(!(${codes.map(test).join(\"&&\")})){${BT}${fail}}p+=${len};`\n }\n if (this.kind === 0 && !caseless) {\n const str = String.fromCharCode(...codes)\n return `if(!I.startsWith(${JSON.stringify(str)},p)){${BT}${fail}}p+=${len};`\n }\n const expect = this.const(Uint8Array.from(caseless ? codes.map(lowerAscii) : codes))\n const lower = caseless ? `${this.const(lowerAscii)}` : \"\"\n return `if(E-p<${len}){${BT}${fail}}for(let i=0;i<${len};i++)if(${lower}(${this.unit(\"p+i\")})!==${expect}[i]){${BT}${fail}}p+=${len};`\n }\n\n private takeWhile(node: NodeOf<\"TakeWhile\">, out: string | null, fail: string, fn: Fn): string {\n const enc = node.encoding\n const { max, min, negate } = node\n // SAFETY: called from `token` only, whose `kind` is not 2\n const kind = this.kind as 0 | 1\n const cs = enc === undefined ? tokenSet(node.set, kind) : textSet(node.set)\n const accept = acceptTable(cs, negate)\n const st = this.v(fn)\n const c = this.v(fn)\n const n = this.v(fn)\n const loop = this.label()\n const counted = max !== Infinity || min > 1\n const count = counted ? `${n}++;` : \"\"\n const bound = max !== Infinity ? `&&${n}<${max}` : \"\"\n const slice = enc !== undefined ? this.text(enc, st) : kind === 0 ? `I.slice(${st},p)` : `I.subarray(${st},p)`\n const finish =\n (min > 0 ? `if(${counted ? n : `p-${st}`}<${min}){${BT}${fail}}` : \"\") + (out === null ? \"\" : `${out}=${slice};`)\n const head = `${st}=p;${counted ? `${n}=0;` : \"\"}${loop}:while(p<E${bound}){${c}=${this.unit(\"p\")};`\n const member = this.member(accept, c)\n if (kind === 1 && (enc === undefined || fastLimit(enc) >= TableSize)) {\n // Bytes, one token each\n return `${head}if(!(${member}))break;p++;${count}}${finish}`\n }\n if (enc !== undefined) {\n // Text: inline the encoding's single-unit code points, decode the rest\n const r = this.reader(enc)\n // The loop condition already checks a unit of width 1\n const guard = r.width === 1 ? \"\" : `${r.guard(\"p\")}&&`\n return (\n `${st}=p;${counted ? `${n}=0;` : \"\"}${loop}:while(p<E${bound}){` +\n (r.fast > 0\n ? `if(${guard}(${c}=${r.unit(\"p\")})<${r.fast}){if(!${this.textAccepts(r, cs, accept, negate, c)})break ${loop};p+=${r.width}}else`\n : \"\") +\n `{${c}=${this.const(enc.decode)}(I,p,E);if(${c}<0||${this.textRejectsDecoded(enc, r, cs, negate, c)})break ${loop};` +\n `p+=${this.const(enc.width)}(${c})}${count}}${finish}`\n )\n }\n const stops = negate && !counted ? stopChars(cs) : undefined\n if (stops !== undefined) return this.stopSearch(stops, st, c, finish, fn)\n const fast = 0xd800\n const small = TableSize\n const highTest = (v: string) => this.memberHigh(cs, negate, v)\n // Token on strings: code points, with lenient surrogates\n const cp = this.v(fn)\n const never = highTest(c) === \"false\"\n // Every code point from `TableSize` up is accepted: without a count,\n // surrogate pairs can be skipped a unit at a time\n const always = highTest(c) === \"true\"\n const rest =\n never && !negate\n ? `break;`\n : always && !counted\n ? `p++;`\n : `if(${c}<${fast}||${c}>56319){if(!(${highTest(c)}))break ${loop};p++}` +\n `else{${cp}=${c};if(p+1<I.length){const d=I.charCodeAt(p+1);if((d&64512)===56320)${cp}=((${c}-55296)<<10)+(d-56320)+65536}` +\n `if(!(${highTest(cp)}))break ${loop};p+=${cp}>65535?2:1}`\n return `${head}if(${c}<${small}){if(!(${member}))break;p++}else ${rest}${count}}${finish}`\n }\n\n /**\n * `Token.takeTill` on a string, of one to `MaxStops` characters that are\n * whole code points: the set accepts every other unit, surrogates\n * included, so the run ends at the first stop character. The first\n * `SearchHead` units are tested one at a time, which beats a native\n * search on short runs; a longer run ends at the next occurrence that\n * `nextStop` finds with `indexOf` (#75).\n */\n private stopSearch(stops: ReadonlyArray<number>, st: string, c: string, finish: string, fn: Fn): string {\n const h = this.v(fn)\n const test = stops.map((u) => `${c}!==${u}`).join(\"&&\")\n // One stop character is searched for inline: a run that doesn't find it ends at `E`, so it is\n // searched for once. Several are searched for through `nextStop`'s cache, so that one which\n // doesn't occur isn't searched for again, to the end of the input, on every run.\n const search =\n stops.length === 1\n ? `{p=I.indexOf(${JSON.stringify(String.fromCharCode(stops[0]))},p);if(p<0)p=E}`\n : `p=R.nextStop(${this.const(new StopCache(stops.map((u) => String.fromCharCode(u))))},$S,p);`\n // A cached search costs more than a plain one, so it waits for a longer run\n const head = stops.length === 1 ? SearchHead : 2 * SearchHead\n return (\n `${st}=p;${h}=p+${head}<E?p+${head}:E;` +\n `while(p<${h}&&(${c}=I.charCodeAt(p),${test}))p++;` +\n // A run that ends right after the head needs no search\n `if(p===${h}&&p<E&&(${c}=I.charCodeAt(p),${test}))${search}${finish}`\n )\n }\n\n /**\n * `escaped`. In a resumable build it keeps the closure compiler's\n * checkpoints: where the next segment starts and, unless raw, the text\n * so far, saved when a segment or an escape runs out of input.\n */\n escaped(p: ParserLike, node: NodeOf<\"Escaped\">, out: string | null, fail: string, fn: Fn, d: number): string {\n const enc = node.encoding\n const ctrl = node.control\n const rd = enc === undefined ? undefined : this.reader(enc)\n if (rd !== undefined && !(ctrl < rd.fast)) return this.delegate(p, !node.raw, out, fail, fn)\n const raw = node.raw\n const r = this.resumable ? this.resumePoint(fn) : undefined\n const acc = raw ? null : (out ?? this.v(fn))\n const x = raw ? null : this.v(fn)\n const b = this.v(fn)\n const st = r?.entry ?? this.v(fn)\n const okv = this.v(fn)\n const loop = this.label()\n const bad = this.label()\n /** Saves the checkpoint of a segment starting at `pos`, when the parse ran out of input. */\n const save = (pos: string) =>\n r === undefined\n ? \"\"\n : `if($S.mode===\"Incomplete\"&&$S.resume!==void 0)R.save($S,${r.key},${r.entry},${raw ? pos : `{out:${acc},pos:${pos}}`});`\n const normal = this.gen(node.normal, !raw, x, `break ${bad};`, fn, d)\n const escape = this.gen(node.escape, !raw, x, `${save(b)}${fail}`, fn, d)\n const onNormal = raw\n ? `if(p===${b}){$S.mode=\"Cut\";${fail}}continue ${loop};`\n : `if(p!==${b}){${acc}+=${x};continue ${loop}}`\n const slice = enc !== undefined ? this.text(enc, st) : this.kind === 0 ? `I.slice(${st},p)` : `I.subarray(${st},p)`\n const ctrlTest =\n rd === undefined ? `p<E&&${this.unit(\"p\")}===${ctrl}` : `${rd.guard(\"p\")}&&${rd.unit(\"p\")}===${ctrl}`\n // In a resumable build, running out of a partial input (not stopping\n // before a non-control character) leaves the text incomplete\n const stop = r === undefined ? loop : this.label()\n const loopCode =\n `${loop}:while(p<E){${b}=p;${okv}=false;` +\n `${bad}:{${normal}${okv}=true;}` +\n `if(${okv}){${onNormal}}else{if($S.mode!==\"Backtrack\"){${save(b)}${fail}}p=${b}}` +\n `if(${ctrlTest}){p+=${rd?.width ?? 1};${escape}${raw ? \"\" : `${acc}+=${x};`}}else break ${stop};}`\n const body =\n r === undefined ? loopCode : `${stop}:{${loopCode}if($S.partial){$S.incomplete(0);${save(\"p\")}${fail}}}`\n if (r === undefined) {\n return `${raw ? `${st}=p;` : `${acc}=\"\";`}${body}${raw && out !== null ? `${out}=${slice};` : \"\"}`\n }\n // `acc` is set unless raw\n if (acc !== null) return r.wrap(acc, `${acc}=cp.out;p=cp.pos;`, `${acc}=\"\";`, body)\n const value = out ?? this.v(fn)\n return r.wrap(value, \"p=cp;\", \"\", `${body}${value}=${out === null ? \"void 0\" : slice};`)\n }\n}\n\n/**\n * A parser that exists only as a description, for the rewrites of\n * `Emitter.repeatRun`. `step` is never run on the paths they compile (the\n * token code of a native `takeWhile`, and alternatives inline), so it is\n * the step of the repetition's element, which describes the same language\n * when its value is unused.\n */\nconst synthetic = (node: Node, step: Step): ParserLike => {\n const described: ParserLike & { readonly [NodeId]: Node } = { step, name: undefined, [NodeId]: node }\n return described\n}\n\n/** The UTF-16 code units of a string. */\nconst unitsOf = (s: string): Array<number> => Array.from({ length: s.length }, (_, i) => s.charCodeAt(i))\n\n/** The source of a compiled parser, with the values it reads as `C`. */\ninterface Generated {\n readonly source: string\n readonly constants: ReadonlyArray<unknown>\n readonly fallbacks: ReadonlyArray<Fallback>\n}\n\n/** Generates the source of a compiled parser, without building it. */\nconst generate = (root: ParserLike, kind: 0 | 1 | 2, resumable = false): Generated => {\n const e = new Emitter(root, kind, resumable)\n const main = e.rule(root, true)\n // Generated code reads past `end` expecting nothing to match there, which\n // holds when `end` is the input's length, as it is in the runners; other\n // states run the closure compiler's step, built on first use.\n let closure: Step | undefined\n const short = e.const((state: State<any>) =>\n (closure ??= createClosureCompiler(kind, resumable).compile(root, true))(state)\n )\n const source =\n `\"use strict\";let $I,$E,$S,P;${e.functions.join(\"\\n\")}\\n` +\n `return function run(state){if(state.end!==state.input.length)return ${short}(state);` +\n `const sI=$I,sE=$E,sS=$S,sP=P;$I=state.input;$E=state.end;$S=state;` +\n `try{const v=${main}(state.pos);if(v!==F)state.pos=P;return v}` +\n // A call-stack overflow is a `TooDeep` failure, as `Stack.run` reports it\n `catch(e){if(!R.isStackOverflow(e))throw e;return R.tooDeep(state)}finally{$I=sI;$E=sE;$S=sS;P=sP}}`\n return { source, constants: e.constants, fallbacks: e.fallbacks }\n}\n\n/** A root parser compiled with `new Function`, with its generated source. */\ninterface JitCompiled extends CompiledRoot {\n readonly source: string\n}\n\n/**\n * Compiles a root parser for one input kind with `new Function`. The step\n * is the generated entry, which handles every state and reports call-stack\n * overflows itself.\n */\nconst compileJit = (root: ParserLike, kind: 0 | 1 | 2, resumable = false): JitCompiled => {\n const { constants, fallbacks, source } = generate(root, kind, resumable)\n // SAFETY: the generated source returns its `run` function, which takes a state and returns a value or `Fail`\n const step = globalThis.Function(\"C\", \"F\", \"R\", source)(constants, Fail, runtime) as Step\n return { step, fallbacks, source }\n}\n\n/**\n * The JIT as a backend: generated code where `new Function` is allowed,\n * otherwise (or if generating fails) the closure compiler.\n */\nexport const backend: Backend = {\n build: (p, kind, resumable) => {\n if (!jitSupported()) return closureBackend.build(p, kind, resumable)\n return Result.match(\n Result.try(() => compileJit(p, kind, resumable)),\n {\n onSuccess: ({ fallbacks, source, step }) => ({\n backend: \"jit\" as const,\n step,\n guarded: true,\n fallbacks,\n error: undefined,\n source\n }),\n // Fall back to the closure compiler, remembering why\n onFailure: (error) => ({ ...closureBackend.build(p, kind, resumable), jitError: error })\n }\n )\n }\n}\n"],"mappings":"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"}
|
|
@@ -3,15 +3,23 @@ import { Fallback, Step } from "./closure.js";
|
|
|
3
3
|
import { ParserLike } from "../node.js";
|
|
4
4
|
/** What was compiled for a parser and an input kind. */
|
|
5
5
|
export interface Compiled {
|
|
6
|
-
/** The compiler actually used. */
|
|
7
|
-
readonly backend: "jit" | "closure" |
|
|
6
|
+
/** The compiler actually used: `interpreted` when compilation failed. */
|
|
7
|
+
readonly backend: "wasm" | "jit" | "closure" | "interpreted";
|
|
8
8
|
readonly step: Step | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Whether `step` reports a call-stack overflow as a `TooDeep` failure
|
|
11
|
+
* itself, as `Stack.run` would (the JIT's generated entry does), so that
|
|
12
|
+
* it runs without that guard.
|
|
13
|
+
*/
|
|
14
|
+
readonly guarded: boolean;
|
|
9
15
|
/** Parts of the grammar that run interpreted, and why. */
|
|
10
16
|
readonly fallbacks: ReadonlyArray<Fallback>;
|
|
11
17
|
/** Why compilation failed, if it did (the parser then runs interpreted). */
|
|
12
18
|
readonly error: unknown;
|
|
13
19
|
/** Why the JIT failed, if it did (the closure compiler is then used). */
|
|
14
20
|
readonly jitError?: unknown;
|
|
21
|
+
/** Why the WebAssembly compiler failed, if it did (the JIT is then used). */
|
|
22
|
+
readonly wasmError?: unknown;
|
|
15
23
|
/** The generated source, for the JIT. */
|
|
16
24
|
readonly source?: string;
|
|
17
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","names":[],"sources":["../../../src/internal/compiler/registry.ts"],"mappings":";;;;iBAYiB;;WAEN;WACA,MAAM;;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","names":[],"sources":["../../../src/internal/compiler/registry.ts"],"mappings":";;;;iBAYiB;;WAEN;WACA,MAAM;;;;;;WAMN;;WAEA,WAAW,cAAc;;WAEzB;;WAEA;;WAEA;;WAEA;;;iBAIM;WACN,QAAQ,GAAG,YAAY,iBAAiB,uBAAuB;;qBAU7D,WAAY,GAAG,YAAY,SAAS;;;;;;qBAUpC,WAAY,GAAG,YAAY,iBAAiB,wBAAoB;;qBAQhE,UAAW,GAAG,YAAY,OAAO,YAAY,wBAAoB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","names":[],"sources":["../../../src/internal/compiler/registry.ts"],"sourcesContent":["/**\n * The registry of compiled parsers, keyed by parser (see the `Compiler`\n * module). Compiled steps are built lazily, once per input kind.\n *\n * Nothing here imports a compiler: a parser is registered with the backend\n * that compiles it, so a program bundles only the backends it uses.\n */\nimport type { State } from \"../../Input.js\"\nimport type { ParserLike } from \"../node.js\"\nimport type { Fallback, Step } from \"./closure.js\"\n\n/** What was compiled for a parser and an input kind. */\nexport interface Compiled {\n /** The compiler actually used. */\n readonly backend: \"jit\" | \"closure\" |
|
|
1
|
+
{"version":3,"file":"registry.js","names":[],"sources":["../../../src/internal/compiler/registry.ts"],"sourcesContent":["/**\n * The registry of compiled parsers, keyed by parser (see the `Compiler`\n * module). Compiled steps are built lazily, once per input kind.\n *\n * Nothing here imports a compiler: a parser is registered with the backend\n * that compiles it, so a program bundles only the backends it uses.\n */\nimport type { State } from \"../../Input.js\"\nimport type { ParserLike } from \"../node.js\"\nimport type { Fallback, Step } from \"./closure.js\"\n\n/** What was compiled for a parser and an input kind. */\nexport interface Compiled {\n /** The compiler actually used: `interpreted` when compilation failed. */\n readonly backend: \"wasm\" | \"jit\" | \"closure\" | \"interpreted\"\n readonly step: Step | undefined\n /**\n * Whether `step` reports a call-stack overflow as a `TooDeep` failure\n * itself, as `Stack.run` would (the JIT's generated entry does), so that\n * it runs without that guard.\n */\n readonly guarded: boolean\n /** Parts of the grammar that run interpreted, and why. */\n readonly fallbacks: ReadonlyArray<Fallback>\n /** Why compilation failed, if it did (the parser then runs interpreted). */\n readonly error: unknown\n /** Why the JIT failed, if it did (the closure compiler is then used). */\n readonly jitError?: unknown\n /** Why the WebAssembly compiler failed, if it did (the JIT is then used). */\n readonly wasmError?: unknown\n /** The generated source, for the JIT. */\n readonly source?: string\n}\n\n/** A compiler: builds the compiled form of a parser for an input kind. */\nexport interface Backend {\n readonly build: (p: ParserLike, kind: 0 | 1 | 2, resumable: boolean) => Compiled\n}\n\ninterface Entry {\n readonly backend: Backend\n readonly byKind: Array<Compiled | undefined>\n}\n\nconst registry = /*#__PURE__*/ new WeakMap<ParserLike, Entry>()\n\nexport const register = (p: ParserLike, backend: Backend): void => {\n const entry = registry.get(p)\n if (entry === undefined || entry.backend !== backend) registry.set(p, { backend, byKind: [] })\n}\n\n/**\n * The compiled form of a registered parser for an input kind, compiling it\n * if needed. `resumable` selects the build used by streaming parses, which\n * supports partial input and checkpoints.\n */\nexport const compiled = (p: ParserLike, kind: 0 | 1 | 2, resumable = false): Compiled | undefined => {\n const entry = registry.get(p)\n if (entry === undefined) return undefined\n const index = resumable ? kind + 3 : kind\n return (entry.byKind[index] ??= entry.backend.build(p, kind, resumable))\n}\n\n/** The compiled step for running `p` on `state`, if it is registered. */\nexport const stepFor = (p: ParserLike, state: State<any>, resumable = false): Step | undefined =>\n compiled(p, state.inputKind, resumable)?.step\n"],"mappings":";AA4CA,MAAM,yBAAyB,IAAI,QAA2B;AAE9D,MAAa,YAAY,GAAe,YAA2B;CACjE,MAAM,QAAQ,SAAS,IAAI,CAAC;CAC5B,IAAI,UAAU,KAAA,KAAa,MAAM,YAAY,SAAS,SAAS,IAAI,GAAG;EAAE;EAAS,QAAQ,CAAC;CAAE,CAAC;AAC/F;;;;;;AAOA,MAAa,YAAY,GAAe,MAAiB,YAAY,UAAgC;CACnG,MAAM,QAAQ,SAAS,IAAI,CAAC;CAC5B,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;CAChC,MAAM,QAAQ,YAAY,OAAO,IAAI;CACrC,OAAQ,MAAM,OAAO,WAAW,MAAM,QAAQ,MAAM,GAAG,MAAM,SAAS;AACxE;;AAGA,MAAa,WAAW,GAAe,OAAmB,YAAY,UACpE,SAAS,GAAG,MAAM,WAAW,SAAS,CAAC,EAAE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { State } from "../../Input.js";
|
|
2
|
+
import { CharSet } from "./sets.js";
|
|
3
|
+
/**
|
|
4
|
+
* How many units a compiled `takeTill` tests one at a time before it
|
|
5
|
+
* searches with `indexOf` (twice as many for several stop characters, whose
|
|
6
|
+
* cached search costs more): short runs, most tokens, are faster scanned.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SearchHead = 8;
|
|
9
|
+
/**
|
|
10
|
+
* The stop characters of a `takeTill` set, as UTF-16 units, when there are
|
|
11
|
+
* one to `MaxStops` of them, each a whole code point (not a surrogate).
|
|
12
|
+
*/
|
|
13
|
+
export declare const stopChars: (cs: CharSet) => ReadonlyArray<number> | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* The stop characters of one compiled `takeTill`, identifying its search site.
|
|
16
|
+
* The state holds, under this site, where each one next occurs (see
|
|
17
|
+
* `nextStop`).
|
|
18
|
+
*/
|
|
19
|
+
export declare class StopCache {
|
|
20
|
+
readonly chars: ReadonlyArray<string>;
|
|
21
|
+
constructor(chars: ReadonlyArray<string>);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The first index from `p` of any of `site.chars` in the input of `s`, or
|
|
25
|
+
* `s.end`. The state remembers, for each stop character `i`, the first
|
|
26
|
+
* index at or after `from` where it occurs (`-1` if none), as
|
|
27
|
+
* `[from, at]` at `2 * i` in `s.searches.get(site)`: successive runs over
|
|
28
|
+
* one input then pay a comparison per stop character instead of a search,
|
|
29
|
+
* and one that never occurs is searched for once.
|
|
30
|
+
*/
|
|
31
|
+
export declare const nextStop: (site: StopCache, s: State<string>, p: number) => number;
|
|
32
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","names":[],"sources":["../../../src/internal/compiler/search.ts"],"mappings":";;;;;;;qBAea;;;;;qBASA,YAAa,IAAI,YAAU;;;;;;qBAY3B;WACU,OAAO;EAAP,YAAA,OAAO;;;;;;;;;;qBAWjB,WAAY,MAAM,WAAW,GAAG,eAAe"}
|