@thomasfosterau/effect-parse 0.3.0 → 0.4.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.
Files changed (137) hide show
  1. package/dist/Ascii.d.ts +0 -2
  2. package/dist/Ascii.d.ts.map +1 -1
  3. package/dist/Ascii.js +6 -6
  4. package/dist/Ascii.js.map +1 -1
  5. package/dist/Binary.d.ts +0 -2
  6. package/dist/Binary.d.ts.map +1 -1
  7. package/dist/Binary.js +1 -2
  8. package/dist/Bits.d.ts +0 -2
  9. package/dist/Bits.d.ts.map +1 -1
  10. package/dist/Bits.js +2 -3
  11. package/dist/Bits.js.map +1 -1
  12. package/dist/Compiler.d.ts +0 -2
  13. package/dist/Compiler.d.ts.map +1 -1
  14. package/dist/Compiler.js +1 -2
  15. package/dist/Encoding.d.ts +0 -2
  16. package/dist/Encoding.d.ts.map +1 -1
  17. package/dist/Encoding.js +1 -2
  18. package/dist/Expression.d.ts +0 -2
  19. package/dist/Expression.d.ts.map +1 -1
  20. package/dist/Expression.js +44 -8
  21. package/dist/Expression.js.map +1 -1
  22. package/dist/Input.d.ts +32 -4
  23. package/dist/Input.d.ts.map +1 -1
  24. package/dist/Input.js +47 -8
  25. package/dist/Input.js.map +1 -1
  26. package/dist/Nom.d.ts +0 -2
  27. package/dist/Nom.d.ts.map +1 -1
  28. package/dist/Nom.js +1 -2
  29. package/dist/ParseError.d.ts +0 -2
  30. package/dist/ParseError.d.ts.map +1 -1
  31. package/dist/ParseError.js +6 -9
  32. package/dist/ParseError.js.map +1 -1
  33. package/dist/Parser.d.ts +2 -2
  34. package/dist/Parser.d.ts.map +1 -1
  35. package/dist/Parser.js +26 -24
  36. package/dist/Parser.js.map +1 -1
  37. package/dist/ParserSchema.d.ts +0 -2
  38. package/dist/ParserSchema.d.ts.map +1 -1
  39. package/dist/ParserSchema.js +2 -3
  40. package/dist/ParserStream.d.ts +0 -2
  41. package/dist/ParserStream.d.ts.map +1 -1
  42. package/dist/ParserStream.js +15 -9
  43. package/dist/ParserStream.js.map +1 -1
  44. package/dist/Syntax.d.ts +0 -2
  45. package/dist/Syntax.d.ts.map +1 -1
  46. package/dist/Syntax.js +13 -11
  47. package/dist/Syntax.js.map +1 -1
  48. package/dist/Text.d.ts +0 -2
  49. package/dist/Text.d.ts.map +1 -1
  50. package/dist/Text.js +1 -2
  51. package/dist/Token.d.ts +0 -2
  52. package/dist/Token.d.ts.map +1 -1
  53. package/dist/Token.js +1 -2
  54. package/dist/internal/compiler/closure.d.ts +5 -2
  55. package/dist/internal/compiler/closure.d.ts.map +1 -1
  56. package/dist/internal/compiler/closure.js +160 -92
  57. package/dist/internal/compiler/closure.js.map +1 -1
  58. package/dist/internal/compiler/entries.d.ts +0 -2
  59. package/dist/internal/compiler/entries.d.ts.map +1 -1
  60. package/dist/internal/compiler/entries.js +6 -7
  61. package/dist/internal/compiler/entries.js.map +1 -1
  62. package/dist/internal/compiler/first.d.ts +0 -2
  63. package/dist/internal/compiler/first.d.ts.map +1 -1
  64. package/dist/internal/compiler/first.js +10 -10
  65. package/dist/internal/compiler/first.js.map +1 -1
  66. package/dist/internal/compiler/jit.d.ts +0 -2
  67. package/dist/internal/compiler/jit.d.ts.map +1 -1
  68. package/dist/internal/compiler/jit.js +52 -51
  69. package/dist/internal/compiler/jit.js.map +1 -1
  70. package/dist/internal/compiler/registry.d.ts +0 -2
  71. package/dist/internal/compiler/registry.d.ts.map +1 -1
  72. package/dist/internal/compiler/registry.js +1 -2
  73. package/dist/internal/compiler/sets.d.ts +2 -2
  74. package/dist/internal/compiler/sets.d.ts.map +1 -1
  75. package/dist/internal/compiler/sets.js +8 -3
  76. package/dist/internal/compiler/sets.js.map +1 -1
  77. package/dist/internal/entries.d.ts +0 -2
  78. package/dist/internal/entries.d.ts.map +1 -1
  79. package/dist/internal/entries.js +1 -2
  80. package/dist/internal/key.d.ts +10 -0
  81. package/dist/internal/key.d.ts.map +1 -0
  82. package/dist/internal/key.js +11 -0
  83. package/dist/internal/key.js.map +1 -0
  84. package/dist/internal/node.d.ts +11 -4
  85. package/dist/internal/node.d.ts.map +1 -1
  86. package/dist/internal/node.js +15 -3
  87. package/dist/internal/node.js.map +1 -1
  88. package/dist/internal/numbers.d.ts +0 -2
  89. package/dist/internal/numbers.d.ts.map +1 -1
  90. package/dist/internal/numbers.js +1 -2
  91. package/dist/internal/resume.d.ts +5 -6
  92. package/dist/internal/resume.d.ts.map +1 -1
  93. package/dist/internal/resume.js +1 -2
  94. package/dist/internal/resume.js.map +1 -1
  95. package/dist/internal/run.d.ts +0 -2
  96. package/dist/internal/run.d.ts.map +1 -1
  97. package/dist/internal/run.js +2 -3
  98. package/dist/internal/run.js.map +1 -1
  99. package/dist/internal/stack.d.ts +0 -2
  100. package/dist/internal/stack.d.ts.map +1 -1
  101. package/dist/internal/stack.js +1 -2
  102. package/dist/internal/syntax.d.ts +30 -20
  103. package/dist/internal/syntax.d.ts.map +1 -1
  104. package/dist/internal/syntax.js +73 -66
  105. package/dist/internal/syntax.js.map +1 -1
  106. package/dist/internal/text.d.ts +5 -2
  107. package/dist/internal/text.d.ts.map +1 -1
  108. package/dist/internal/text.js +14 -5
  109. package/dist/internal/text.js.map +1 -1
  110. package/dist/internal/ties.d.ts +0 -2
  111. package/dist/internal/ties.d.ts.map +1 -1
  112. package/dist/internal/ties.js +1 -2
  113. package/dist/internal/tokens.d.ts +10 -9
  114. package/dist/internal/tokens.d.ts.map +1 -1
  115. package/dist/internal/tokens.js +4 -8
  116. package/dist/internal/tokens.js.map +1 -1
  117. package/package.json +6 -6
  118. package/src/Ascii.ts +6 -5
  119. package/src/Bits.ts +1 -1
  120. package/src/Expression.ts +7 -6
  121. package/src/Input.ts +50 -11
  122. package/src/ParseError.ts +9 -7
  123. package/src/Parser.ts +26 -23
  124. package/src/ParserStream.ts +20 -8
  125. package/src/Syntax.ts +12 -9
  126. package/src/internal/compiler/closure.ts +202 -90
  127. package/src/internal/compiler/entries.ts +14 -11
  128. package/src/internal/compiler/first.ts +9 -8
  129. package/src/internal/compiler/jit.ts +95 -74
  130. package/src/internal/compiler/sets.ts +7 -0
  131. package/src/internal/key.ts +11 -0
  132. package/src/internal/node.ts +19 -2
  133. package/src/internal/resume.ts +5 -4
  134. package/src/internal/run.ts +1 -1
  135. package/src/internal/syntax.ts +78 -87
  136. package/src/internal/text.ts +24 -4
  137. package/src/internal/tokens.ts +20 -13
@@ -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 Predicate from \"effect/Predicate\"\nimport * as Option from \"effect/Option\"\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 } from \"../node.js\"\nimport { floatScan, floatTexts, scanFloatBytes, scanFloatString, toFloat } from \"../numbers.js\"\nimport { compileAny } from \"../tokens.js\"\nimport * as Resume from \"../resume.js\"\nimport { charOf, fastLimit, latin1, string, utf16be, utf16le, utf8, validate } from \"../text.js\"\nimport type { ClosureCompiler, 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 { 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: object, 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 try {\n supported = checked(\"return true\")() === true\n } catch {\n supported = 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 (runs.length === 0) 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 (accept.length === 0) return \"false\"\n if (reject.length === 0) 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;${fn.vars.length > 0 ? `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 (node._tag === \"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 (--budget < 0 || node._tag === \"Suspend\" || node._tag === \"Escaped\" || node._tag === \"Dispatch\") 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 // Streaming builds use the closure compiler's escapes, which keep checkpoints\n if (!this.native(node.encoding) || this.resumable) 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] = node._tag === \"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 = node._tag === \"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 = node._tag === \"Opt\" ? `R.some(${t})` : `${t}`\n const orElse = node._tag === \"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 let taken = nodeOf(node.self)\n while (taken._tag === \"Expected\") taken = nodeOf(taken.self)\n if (taken._tag !== \"Taken\") return undefined\n const enc = taken.encoding\n // Decimal notation is ASCII, which these encodings read unit by unit\n if (enc !== undefined && !(this.native(enc) && enc.unit === 1 && enc.asciiCompatible)) 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 (parsers.length === 0) 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 = sel._tag === \"Peek\"\n if (peek) sel = nodeOf((sel as NodeOf<\"Peek\">).self)\n if (sel._tag !== \"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 = node._tag === \"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({})\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 node._tag === \"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 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 r = enc === undefined ? undefined : this.reader(enc)\n if (r !== undefined && !(ctrl < r.fast)) return this.delegate(p, !node.raw, out, fail, fn)\n const raw = node.raw\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 = this.v(fn)\n const okv = this.v(fn)\n const loop = this.label()\n const bad = this.label()\n const normal = this.gen(node.normal, !raw, x, `break ${bad};`, fn, d)\n const escape = this.gen(node.escape, !raw, x, 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 = r === undefined ? `p<E&&${this.unit(\"p\")}===${ctrl}` : `${r.guard(\"p\")}&&${r.unit(\"p\")}===${ctrl}`\n return (\n `${raw ? `${st}=p;` : `${acc}=\"\";`}${loop}:while(p<E){${b}=p;${okv}=false;` +\n `${bad}:{${normal}${okv}=true;}` +\n `if(${okv}){${onNormal}}else{if($S.mode!==\"Backtrack\"){${fail}}p=${b}}` +\n `if(${ctrlTest}){p+=${r?.width ?? 1};${escape}${raw ? \"\" : `${acc}+=${x};`}}else break ${loop};}` +\n (raw && out !== null ? `${out}=${slice};` : \"\")\n )\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/** 1 where a small code is accepted (taking `negate` into account). */\nconst acceptTable = (set: CharSet, negate: boolean): Uint8Array => {\n const t = new Uint8Array(TableSize)\n for (let c = 0; c < TableSize; c++) t[c] = (set.table[c] === 1) !== negate ? 1 : 0\n return t\n}\n\n/** Generates the source of a compiled parser, without building it. */\nconst generate = (\n root: ParserLike,\n kind: 0 | 1 | 2,\n resumable = false\n): {\n readonly source: string\n readonly constants: ReadonlyArray<unknown>\n readonly fallbacks: ReadonlyArray<Fallback>\n} => {\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/** Compiles a root parser for one input kind with `new Function`. */\nconst compileJit = (\n root: ParserLike,\n kind: 0 | 1 | 2,\n resumable = false\n): {\n readonly step: Step\n readonly fallbacks: ReadonlyArray<Fallback>\n readonly source: string\n} => {\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 try {\n const { fallbacks, source, step } = compileJit(p, kind, resumable)\n return { backend: \"jit\", step, fallbacks, error: undefined, source }\n } catch (error) {\n // Fall back to the closure compiler, remembering why\n return { ...closureBackend.build(p, kind, resumable), jitError: error }\n }\n }\n}\n"],"mappings":"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"}
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,7 +1,6 @@
1
1
  import { State } from "../../Input.js";
2
2
  import { Fallback, Step } from "./closure.js";
3
3
  import { ParserLike } from "../node.js";
4
- //#region src/internal/compiler/registry.d.ts
5
4
  /** What was compiled for a parser and an input kind. */
6
5
  export interface Compiled {
7
6
  /** The compiler actually used. */
@@ -29,5 +28,4 @@ export declare const register: (p: ParserLike, backend: Backend) => void;
29
28
  export declare const compiled: (p: ParserLike, kind: 0 | 1 | 2, resumable?: boolean) => Compiled | undefined;
30
29
  /** The compiled step for running `p` on `state`, if it is registered. */
31
30
  export declare const stepFor: (p: ParserLike, state: State<any>, resumable?: boolean) => Step | undefined;
32
- //#endregion
33
31
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","names":[],"sources":["../../../src/internal/compiler/registry.ts"],"mappings":";;;;;iBAYiB;;WAEN;WACA,MAAM;;WAEN,WAAW,cAAc;;WAEzB;;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
+ {"version":3,"file":"registry.d.ts","names":[],"sources":["../../../src/internal/compiler/registry.ts"],"mappings":";;;;iBAYiB;;WAEN;WACA,MAAM;;WAEN,WAAW,cAAc;;WAEzB;;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,4 +1,4 @@
1
- //#region src/internal/compiler/registry.ts
1
+ // src/internal/compiler/registry.ts
2
2
  const registry = /*#__PURE__*/ new WeakMap();
3
3
  const register = (p, backend) => {
4
4
  const entry = registry.get(p);
@@ -20,7 +20,6 @@ const compiled = (p, kind, resumable = false) => {
20
20
  };
21
21
  /** The compiled step for running `p` on `state`, if it is registered. */
22
22
  const stepFor = (p, state, resumable = false) => compiled(p, state.inputKind, resumable)?.step;
23
- //#endregion
24
23
  export { compiled, register, stepFor };
25
24
 
26
25
  //# sourceMappingURL=registry.js.map
@@ -1,5 +1,4 @@
1
1
  import { Encoding } from "../../Encoding.js";
2
- //#region src/internal/compiler/sets.d.ts
3
2
  /** Size of the membership table: every byte, and the Latin-1 code points. */
4
3
  export declare const TableSize = 256;
5
4
  export interface CharSet {
@@ -10,6 +9,8 @@ export interface CharSet {
10
9
  /** Sorted inclusive ranges of accepted code points, when known. */
11
10
  readonly ranges: ReadonlyArray<readonly [number, number]> | undefined;
12
11
  }
12
+ /** 1 where a small code is accepted (taking `negate` into account). */
13
+ export declare const acceptTable: (set: CharSet, negate: boolean) => Uint8Array;
13
14
  /**
14
15
  * The set as a `Token` parser sees it: string predicates receive strings on
15
16
  * string input, everything receives numbers on byte input.
@@ -21,5 +22,4 @@ export declare const textSet: (set: unknown) => CharSet;
21
22
  export declare const reachesAbove: (s: CharSet, limit: number) => boolean;
22
23
  /** The input kind a `Text` encoding reads: 0 for strings, 1 for bytes. */
23
24
  export declare const kindOfEncoding: (enc: Encoding<any>) => 0 | 1;
24
- //#endregion
25
25
  //# sourceMappingURL=sets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sets.d.ts","names":[],"sources":["../../../src/internal/compiler/sets.ts"],"mappings":";;;qBAYa;iBAEI;;WAEN,OAAO;;WAEP,OAAO;;WAEP,QAAQ;;;;;;qBAkEN,WAAY,cAAc,gBAAc;;qBAMxC,UAAW,iBAAe;;qBAG1B,eAAgB,GAAG,SAAS;;qBAI5B,iBAAkB,KAAK"}
1
+ {"version":3,"file":"sets.d.ts","names":[],"sources":["../../../src/internal/compiler/sets.ts"],"mappings":";;qBAYa;iBAEI;;WAEN,OAAO;;WAEP,OAAO;;WAEP,QAAQ;;;qBAIN,cAAe,KAAK,SAAS,oBAAkB;;;;;qBAqE/C,WAAY,cAAc,gBAAc;;qBAMxC,UAAW,iBAAe;;qBAG1B,eAAgB,GAAG,SAAS;;qBAI5B,iBAAkB,KAAK"}
@@ -3,13 +3,19 @@ import { PredicateRanges, compile, compileAny } from "../tokens.js";
3
3
  import { firstCodePoint } from "../text.js";
4
4
  import * as Arr from "effect/Array";
5
5
  import * as Order from "effect/Order";
6
- //#region src/internal/compiler/sets.ts
6
+ // src/internal/compiler/sets.ts
7
7
  /**
8
8
  * Token sets for compiled parsers: membership tables for small units, the
9
9
  * exact test for the rest, and the code point ranges when they are known.
10
10
  */
11
11
  /** Size of the membership table: every byte, and the Latin-1 code points. */
12
12
  const TableSize = 256;
13
+ /** 1 where a small code is accepted (taking `negate` into account). */
14
+ const acceptTable = (set, negate) => {
15
+ const t = /* @__PURE__ */ new Uint8Array(256);
16
+ for (let c = 0; c < 256; c++) t[c] = set.table[c] === 1 !== negate ? 1 : 0;
17
+ return t;
18
+ };
13
19
  const isRange = (u) => Predicate.isObjectOrArray(u) && u._tag === "TokenRange";
14
20
  const toCode = (u) => Predicate.isNumber(u) ? u : firstCodePoint(u);
15
21
  /** The code point ranges of a token set, or `undefined` if it has an unknown predicate. */
@@ -82,7 +88,6 @@ const kindOfEncoding = (enc) => {
82
88
  return k;
83
89
  };
84
90
  const kinds = /*#__PURE__*/ new WeakMap();
85
- //#endregion
86
- export { TableSize, kindOfEncoding, reachesAbove, textSet, tokenSet };
91
+ export { TableSize, acceptTable, kindOfEncoding, reachesAbove, textSet, tokenSet };
87
92
 
88
93
  //# sourceMappingURL=sets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sets.js","names":[],"sources":["../../../src/internal/compiler/sets.ts"],"sourcesContent":["/**\n * Token sets for compiled parsers: membership tables for small units, the\n * exact test for the rest, and the code point ranges when they are known.\n */\nimport * as Arr from \"effect/Array\"\nimport * as Order from \"effect/Order\"\nimport * as Predicate from \"effect/Predicate\"\nimport type { Encoding } from \"../../Encoding.js\"\nimport { firstCodePoint } from \"../text.js\"\nimport { compile, compileAny, PredicateRanges } from \"../tokens.js\"\n\n/** Size of the membership table: every byte, and the Latin-1 code points. */\nexport const TableSize = 256\n\nexport interface CharSet {\n /** Tests a code point (or byte, for `Token` on bytes). */\n readonly test: (code: number) => boolean\n /** `table[c] === 1` iff `test(c)`, for `c < TableSize`. */\n readonly table: Uint8Array\n /** Sorted inclusive ranges of accepted code points, when known. */\n readonly ranges: ReadonlyArray<readonly [number, number]> | undefined\n}\n\nconst isRange = (u: unknown): u is { readonly from: string | number; readonly to: string | number } =>\n Predicate.isObjectOrArray(u) && (u as any)._tag === \"TokenRange\"\n\nconst toCode = (u: string | number): number => (Predicate.isNumber(u) ? u : firstCodePoint(u))\n\n/** The code point ranges of a token set, or `undefined` if it has an unknown predicate. */\nconst rangesOf = (set: unknown): Array<[number, number]> | undefined => {\n const out: Array<[number, number]> = []\n const add = (u: unknown): boolean => {\n if (Predicate.isString(u)) {\n for (const c of u) {\n const cp = firstCodePoint(c)\n out.push([cp, cp])\n }\n return true\n }\n if (Predicate.isNumber(u)) {\n out.push([u, u])\n return true\n }\n if (u instanceof Uint8Array) {\n for (const b of u) out.push([b, b])\n return true\n }\n if (isRange(u)) {\n out.push([toCode(u.from), toCode(u.to)])\n return true\n }\n if (Predicate.isFunction(u)) {\n const r = (u as any)[PredicateRanges] as ReadonlyArray<readonly [number, number]> | undefined\n if (r === undefined) return false\n for (const [a, b] of r) out.push([a, b])\n return true\n }\n if (Array.isArray(u)) return u.every(add)\n return false\n }\n if (!add(set)) return undefined\n const merged: Array<[number, number]> = []\n for (const [a, b] of Arr.sort(\n out,\n Order.mapInput(Order.Number, (range: readonly [number, number]) => range[0])\n )) {\n if (b < a) continue\n const last = merged[merged.length - 1]\n if (last !== undefined && a <= last[1] + 1) last[1] = Math.max(last[1], b)\n else merged.push([a, b])\n }\n return merged\n}\n\nconst makeSet = (test: (code: number) => boolean, set: unknown): CharSet => {\n // The table calls the test once per small code: token-set predicates are\n // assumed to be pure (see the design notes).\n const table = new Uint8Array(TableSize)\n for (let c = 0; c < TableSize; c++) table[c] = test(c) ? 1 : 0\n return { test, table, ranges: rangesOf(set) }\n}\n\n/**\n * The set as a `Token` parser sees it: string predicates receive strings on\n * string input, everything receives numbers on byte input.\n */\nexport const tokenSet = (set: unknown, kind: 0 | 1): CharSet => {\n const m = compileAny(set)\n return makeSet(kind === 0 ? m.forString.code : m.forCode.code, set)\n}\n\n/** The set as a `Text` parser sees it: code points, for any encoding. */\nexport const textSet = (set: unknown): CharSet => makeSet(compile(set, \"string\").code, set)\n\n/** Whether some accepted code point is at least `limit` (true when unknown). */\nexport const reachesAbove = (s: CharSet, limit: number): boolean =>\n s.ranges === undefined || s.ranges.some(([, b]) => b >= limit)\n\n/** The input kind a `Text` encoding reads: 0 for strings, 1 for bytes. */\nexport const kindOfEncoding = (enc: Encoding<any>): 0 | 1 => {\n let k = kinds.get(enc)\n if (k === undefined) kinds.set(enc, (k = Predicate.isString(enc.encode(\"\")) ? 0 : 1))\n return k\n}\n\nconst kinds = /*#__PURE__*/ new WeakMap<Encoding<any>, 0 | 1>()\n"],"mappings":";;;;;;;;;;;AAYA,MAAa,YAAY;AAWzB,MAAM,WAAW,MACf,UAAU,gBAAgB,CAAC,KAAM,EAAU,SAAS;AAEtD,MAAM,UAAU,MAAgC,UAAU,SAAS,CAAC,IAAI,IAAI,eAAe,CAAC;;AAG5F,MAAM,YAAY,QAAsD;CACtE,MAAM,MAA+B,CAAC;CACtC,MAAM,OAAO,MAAwB;EACnC,IAAI,UAAU,SAAS,CAAC,GAAG;GACzB,KAAK,MAAM,KAAK,GAAG;IACjB,MAAM,KAAK,eAAe,CAAC;IAC3B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;GACnB;GACA,OAAO;EACT;EACA,IAAI,UAAU,SAAS,CAAC,GAAG;GACzB,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;GACf,OAAO;EACT;EACA,IAAI,aAAa,YAAY;GAC3B,KAAK,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;GAClC,OAAO;EACT;EACA,IAAI,QAAQ,CAAC,GAAG;GACd,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC;GACvC,OAAO;EACT;EACA,IAAI,UAAU,WAAW,CAAC,GAAG;GAC3B,MAAM,IAAK,EAAU;GACrB,IAAI,MAAM,KAAA,GAAW,OAAO;GAC5B,KAAK,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;GACvC,OAAO;EACT;EACA,IAAI,MAAM,QAAQ,CAAC,GAAG,OAAO,EAAE,MAAM,GAAG;EACxC,OAAO;CACT;CACA,IAAI,CAAC,IAAI,GAAG,GAAG,OAAO,KAAA;CACtB,MAAM,SAAkC,CAAC;CACzC,KAAK,MAAM,CAAC,GAAG,MAAM,IAAI,KACvB,KACA,MAAM,SAAS,MAAM,SAAS,UAAqC,MAAM,EAAE,CAC7E,GAAG;EACD,IAAI,IAAI,GAAG;EACX,MAAM,OAAO,OAAO,OAAO,SAAS;EACpC,IAAI,SAAS,KAAA,KAAa,KAAK,KAAK,KAAK,GAAG,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,CAAC;OACpE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;CACzB;CACA,OAAO;AACT;AAEA,MAAM,WAAW,MAAiC,QAA0B;CAG1E,MAAM,wBAAQ,IAAI,WAAA,GAAoB;CACtC,KAAK,IAAI,IAAI,GAAG,IAAA,KAAe,KAAK,MAAM,KAAK,KAAK,CAAC,IAAI,IAAI;CAC7D,OAAO;EAAE;EAAM;EAAO,QAAQ,SAAS,GAAG;CAAE;AAC9C;;;;;AAMA,MAAa,YAAY,KAAc,SAAyB;CAC9D,MAAM,IAAI,WAAW,GAAG;CACxB,OAAO,QAAQ,SAAS,IAAI,EAAE,UAAU,OAAO,EAAE,QAAQ,MAAM,GAAG;AACpE;;AAGA,MAAa,WAAW,QAA0B,QAAQ,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM,GAAG;;AAG1F,MAAa,gBAAgB,GAAY,UACvC,EAAE,WAAW,KAAA,KAAa,EAAE,OAAO,MAAM,GAAG,OAAO,KAAK,KAAK;;AAG/D,MAAa,kBAAkB,QAA8B;CAC3D,IAAI,IAAI,MAAM,IAAI,GAAG;CACrB,IAAI,MAAM,KAAA,GAAW,MAAM,IAAI,KAAM,IAAI,UAAU,SAAS,IAAI,OAAO,EAAE,CAAC,IAAI,IAAI,CAAE;CACpF,OAAO;AACT;AAEA,MAAM,sBAAsB,IAAI,QAA8B"}
1
+ {"version":3,"file":"sets.js","names":[],"sources":["../../../src/internal/compiler/sets.ts"],"sourcesContent":["/**\n * Token sets for compiled parsers: membership tables for small units, the\n * exact test for the rest, and the code point ranges when they are known.\n */\nimport * as Arr from \"effect/Array\"\nimport * as Order from \"effect/Order\"\nimport * as Predicate from \"effect/Predicate\"\nimport type { Encoding } from \"../../Encoding.js\"\nimport { firstCodePoint } from \"../text.js\"\nimport { compile, compileAny, PredicateRanges } from \"../tokens.js\"\n\n/** Size of the membership table: every byte, and the Latin-1 code points. */\nexport const TableSize = 256\n\nexport interface CharSet {\n /** Tests a code point (or byte, for `Token` on bytes). */\n readonly test: (code: number) => boolean\n /** `table[c] === 1` iff `test(c)`, for `c < TableSize`. */\n readonly table: Uint8Array\n /** Sorted inclusive ranges of accepted code points, when known. */\n readonly ranges: ReadonlyArray<readonly [number, number]> | undefined\n}\n\n/** 1 where a small code is accepted (taking `negate` into account). */\nexport const acceptTable = (set: CharSet, negate: boolean): Uint8Array => {\n const t = new Uint8Array(TableSize)\n for (let c = 0; c < TableSize; c++) t[c] = (set.table[c] === 1) !== negate ? 1 : 0\n return t\n}\n\nconst isRange = (u: unknown): u is { readonly from: string | number; readonly to: string | number } =>\n Predicate.isObjectOrArray(u) && (u as any)._tag === \"TokenRange\"\n\nconst toCode = (u: string | number): number => (Predicate.isNumber(u) ? u : firstCodePoint(u))\n\n/** The code point ranges of a token set, or `undefined` if it has an unknown predicate. */\nconst rangesOf = (set: unknown): Array<[number, number]> | undefined => {\n const out: Array<[number, number]> = []\n const add = (u: unknown): boolean => {\n if (Predicate.isString(u)) {\n for (const c of u) {\n const cp = firstCodePoint(c)\n out.push([cp, cp])\n }\n return true\n }\n if (Predicate.isNumber(u)) {\n out.push([u, u])\n return true\n }\n if (u instanceof Uint8Array) {\n for (const b of u) out.push([b, b])\n return true\n }\n if (isRange(u)) {\n out.push([toCode(u.from), toCode(u.to)])\n return true\n }\n if (Predicate.isFunction(u)) {\n const r = (u as any)[PredicateRanges] as ReadonlyArray<readonly [number, number]> | undefined\n if (r === undefined) return false\n for (const [a, b] of r) out.push([a, b])\n return true\n }\n if (Array.isArray(u)) return u.every(add)\n return false\n }\n if (!add(set)) return undefined\n const merged: Array<[number, number]> = []\n for (const [a, b] of Arr.sort(\n out,\n Order.mapInput(Order.Number, (range: readonly [number, number]) => range[0])\n )) {\n if (b < a) continue\n const last = merged[merged.length - 1]\n if (last !== undefined && a <= last[1] + 1) last[1] = Math.max(last[1], b)\n else merged.push([a, b])\n }\n return merged\n}\n\nconst makeSet = (test: (code: number) => boolean, set: unknown): CharSet => {\n // The table calls the test once per small code: token-set predicates are\n // assumed to be pure (see the design notes).\n const table = new Uint8Array(TableSize)\n for (let c = 0; c < TableSize; c++) table[c] = test(c) ? 1 : 0\n return { test, table, ranges: rangesOf(set) }\n}\n\n/**\n * The set as a `Token` parser sees it: string predicates receive strings on\n * string input, everything receives numbers on byte input.\n */\nexport const tokenSet = (set: unknown, kind: 0 | 1): CharSet => {\n const m = compileAny(set)\n return makeSet(kind === 0 ? m.forString.code : m.forCode.code, set)\n}\n\n/** The set as a `Text` parser sees it: code points, for any encoding. */\nexport const textSet = (set: unknown): CharSet => makeSet(compile(set, \"string\").code, set)\n\n/** Whether some accepted code point is at least `limit` (true when unknown). */\nexport const reachesAbove = (s: CharSet, limit: number): boolean =>\n s.ranges === undefined || s.ranges.some(([, b]) => b >= limit)\n\n/** The input kind a `Text` encoding reads: 0 for strings, 1 for bytes. */\nexport const kindOfEncoding = (enc: Encoding<any>): 0 | 1 => {\n let k = kinds.get(enc)\n if (k === undefined) kinds.set(enc, (k = Predicate.isString(enc.encode(\"\")) ? 0 : 1))\n return k\n}\n\nconst kinds = /*#__PURE__*/ new WeakMap<Encoding<any>, 0 | 1>()\n"],"mappings":";;;;;;;;;;;AAYA,MAAa,YAAY;;AAYzB,MAAa,eAAe,KAAc,WAAgC;CACxE,MAAM,oBAAI,IAAI,WAAA,GAAoB;CAClC,KAAK,IAAI,IAAI,GAAG,IAAA,KAAe,KAAK,EAAE,KAAM,IAAI,MAAM,OAAO,MAAO,SAAS,IAAI;CACjF,OAAO;AACT;AAEA,MAAM,WAAW,MACf,UAAU,gBAAgB,CAAC,KAAM,EAAU,SAAS;AAEtD,MAAM,UAAU,MAAgC,UAAU,SAAS,CAAC,IAAI,IAAI,eAAe,CAAC;;AAG5F,MAAM,YAAY,QAAsD;CACtE,MAAM,MAA+B,CAAC;CACtC,MAAM,OAAO,MAAwB;EACnC,IAAI,UAAU,SAAS,CAAC,GAAG;GACzB,KAAK,MAAM,KAAK,GAAG;IACjB,MAAM,KAAK,eAAe,CAAC;IAC3B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;GACnB;GACA,OAAO;EACT;EACA,IAAI,UAAU,SAAS,CAAC,GAAG;GACzB,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;GACf,OAAO;EACT;EACA,IAAI,aAAa,YAAY;GAC3B,KAAK,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;GAClC,OAAO;EACT;EACA,IAAI,QAAQ,CAAC,GAAG;GACd,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC;GACvC,OAAO;EACT;EACA,IAAI,UAAU,WAAW,CAAC,GAAG;GAC3B,MAAM,IAAK,EAAU;GACrB,IAAI,MAAM,KAAA,GAAW,OAAO;GAC5B,KAAK,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;GACvC,OAAO;EACT;EACA,IAAI,MAAM,QAAQ,CAAC,GAAG,OAAO,EAAE,MAAM,GAAG;EACxC,OAAO;CACT;CACA,IAAI,CAAC,IAAI,GAAG,GAAG,OAAO,KAAA;CACtB,MAAM,SAAkC,CAAC;CACzC,KAAK,MAAM,CAAC,GAAG,MAAM,IAAI,KACvB,KACA,MAAM,SAAS,MAAM,SAAS,UAAqC,MAAM,EAAE,CAC7E,GAAG;EACD,IAAI,IAAI,GAAG;EACX,MAAM,OAAO,OAAO,OAAO,SAAS;EACpC,IAAI,SAAS,KAAA,KAAa,KAAK,KAAK,KAAK,GAAG,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,CAAC;OACpE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;CACzB;CACA,OAAO;AACT;AAEA,MAAM,WAAW,MAAiC,QAA0B;CAG1E,MAAM,wBAAQ,IAAI,WAAA,GAAoB;CACtC,KAAK,IAAI,IAAI,GAAG,IAAA,KAAe,KAAK,MAAM,KAAK,KAAK,CAAC,IAAI,IAAI;CAC7D,OAAO;EAAE;EAAM;EAAO,QAAQ,SAAS,GAAG;CAAE;AAC9C;;;;;AAMA,MAAa,YAAY,KAAc,SAAyB;CAC9D,MAAM,IAAI,WAAW,GAAG;CACxB,OAAO,QAAQ,SAAS,IAAI,EAAE,UAAU,OAAO,EAAE,QAAQ,MAAM,GAAG;AACpE;;AAGA,MAAa,WAAW,QAA0B,QAAQ,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM,GAAG;;AAG1F,MAAa,gBAAgB,GAAY,UACvC,EAAE,WAAW,KAAA,KAAa,EAAE,OAAO,MAAM,GAAG,OAAO,KAAK,KAAK;;AAG/D,MAAa,kBAAkB,QAA8B;CAC3D,IAAI,IAAI,MAAM,IAAI,GAAG;CACrB,IAAI,MAAM,KAAA,GAAW,MAAM,IAAI,KAAM,IAAI,UAAU,SAAS,IAAI,OAAO,EAAE,CAAC,IAAI,IAAI,CAAE;CACpF,OAAO;AACT;AAEA,MAAM,sBAAsB,IAAI,QAA8B"}
@@ -1,4 +1,3 @@
1
- //#region src/internal/entries.d.ts
2
1
  /**
3
2
  * Building objects as `Object.fromEntries` does, without its array of
4
3
  * `[key, value]` pairs: the compilers use these when a parser maps a
@@ -23,5 +22,4 @@ export declare const isPlainKey: (key: unknown) => key is string;
23
22
  export declare const addEntry: (o: object, deferred: Array<unknown> | undefined, key: unknown, value: unknown) => Array<unknown> | undefined;
24
23
  /** Adds the deferred entries of {@link addEntry} to `o`, in order. */
25
24
  export declare const flushEntries: (o: object, deferred: ReadonlyArray<unknown>) => void;
26
- //#endregion
27
25
  //# sourceMappingURL=entries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entries.d.ts","names":[],"sources":["../../src/internal/entries.ts"],"mappings":";;;;;;;qBASa,cAAc,UAAU,aAAa,GAAG,SAAS,mBAAmB,GAAG,WAAW,KAAK,IAAI;;;;;;;qBAY3F,aAAc,iBAAe;;;;;;;;qBAa7B,WACX,WACA,UAAU,4BACV,cACA,mBACC;;qBAWU,eAAgB,WAAW,UAAU"}
1
+ {"version":3,"file":"entries.d.ts","names":[],"sources":["../../src/internal/entries.ts"],"mappings":";;;;;;qBASa,cAAc,UAAU,aAAa,GAAG,SAAS,mBAAmB,GAAG,WAAW,KAAK,IAAI;;;;;;;qBAY3F,aAAc,iBAAe;;;;;;;;qBAa7B,WACX,WACA,UAAU,4BACV,cACA,mBACC;;qBAWU,eAAgB,WAAW,UAAU"}
@@ -1,5 +1,5 @@
1
1
  import * as Predicate from "effect/Predicate";
2
- //#region src/internal/entries.ts
2
+ // src/internal/entries.ts
3
3
  /**
4
4
  * Building objects as `Object.fromEntries` does, without its array of
5
5
  * `[key, value]` pairs: the compilers use these when a parser maps a
@@ -44,7 +44,6 @@ const addEntry = (o, deferred, key, value) => {
44
44
  const flushEntries = (o, deferred) => {
45
45
  for (let i = 0; i < deferred.length; i += 2) define(o, deferred[i], deferred[i + 1]);
46
46
  };
47
- //#endregion
48
47
  export { addEntry, flushEntries, fromEntries, isPlainKey };
49
48
 
50
49
  //# sourceMappingURL=entries.js.map