@thomasfosterau/effect-parse 0.4.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +202 -0
- package/README.md +56 -14
- package/dist/Ascii.d.ts +11 -4
- package/dist/Ascii.d.ts.map +1 -1
- package/dist/Ascii.js +12 -4
- package/dist/Ascii.js.map +1 -1
- package/dist/Binary.d.ts +5 -2
- package/dist/Binary.d.ts.map +1 -1
- package/dist/Binary.js +83 -37
- package/dist/Binary.js.map +1 -1
- package/dist/Bits.d.ts.map +1 -1
- package/dist/Bits.js +11 -4
- package/dist/Bits.js.map +1 -1
- package/dist/Compiler.d.ts +74 -2
- package/dist/Compiler.d.ts.map +1 -1
- package/dist/Compiler.js +78 -1
- package/dist/Compiler.js.map +1 -1
- package/dist/Expression.d.ts.map +1 -1
- package/dist/Expression.js +86 -74
- package/dist/Expression.js.map +1 -1
- package/dist/Input.d.ts +56 -5
- package/dist/Input.d.ts.map +1 -1
- package/dist/Input.js +70 -1
- package/dist/Input.js.map +1 -1
- package/dist/Nom.d.ts +5 -15
- package/dist/Nom.d.ts.map +1 -1
- package/dist/Nom.js.map +1 -1
- package/dist/ParseError.d.ts +69 -11
- package/dist/ParseError.d.ts.map +1 -1
- package/dist/ParseError.js +129 -28
- package/dist/ParseError.js.map +1 -1
- package/dist/Parser.d.ts +375 -29
- package/dist/Parser.d.ts.map +1 -1
- package/dist/Parser.js +394 -37
- package/dist/Parser.js.map +1 -1
- package/dist/ParserSchema.d.ts.map +1 -1
- package/dist/ParserSchema.js +2 -3
- package/dist/ParserSchema.js.map +1 -1
- package/dist/ParserStream.d.ts +122 -14
- package/dist/ParserStream.d.ts.map +1 -1
- package/dist/ParserStream.js +293 -62
- package/dist/ParserStream.js.map +1 -1
- package/dist/Syntax.d.ts +23 -5
- package/dist/Syntax.d.ts.map +1 -1
- package/dist/Syntax.js +1 -1
- package/dist/Syntax.js.map +1 -1
- package/dist/Text.d.ts.map +1 -1
- package/dist/Text.js +21 -15
- package/dist/Text.js.map +1 -1
- package/dist/Token.d.ts +65 -11
- package/dist/Token.d.ts.map +1 -1
- package/dist/Token.js +73 -26
- package/dist/Token.js.map +1 -1
- package/dist/internal/compiler/closure.d.ts +1 -1
- package/dist/internal/compiler/closure.d.ts.map +1 -1
- package/dist/internal/compiler/closure.js +263 -113
- package/dist/internal/compiler/closure.js.map +1 -1
- package/dist/internal/compiler/entries.d.ts +3 -1
- package/dist/internal/compiler/entries.d.ts.map +1 -1
- package/dist/internal/compiler/entries.js +3 -2
- package/dist/internal/compiler/entries.js.map +1 -1
- package/dist/internal/compiler/first.d.ts.map +1 -1
- package/dist/internal/compiler/first.js +9 -2
- package/dist/internal/compiler/first.js.map +1 -1
- package/dist/internal/compiler/graph.d.ts +39 -0
- package/dist/internal/compiler/graph.d.ts.map +1 -0
- package/dist/internal/compiler/graph.js +78 -0
- package/dist/internal/compiler/graph.js.map +1 -0
- package/dist/internal/compiler/jit.d.ts +5 -0
- package/dist/internal/compiler/jit.d.ts.map +1 -1
- package/dist/internal/compiler/jit.js +208 -106
- package/dist/internal/compiler/jit.js.map +1 -1
- package/dist/internal/compiler/registry.d.ts +11 -3
- package/dist/internal/compiler/registry.d.ts.map +1 -1
- package/dist/internal/compiler/registry.js.map +1 -1
- package/dist/internal/compiler/search.d.ts +32 -0
- package/dist/internal/compiler/search.d.ts.map +1 -0
- package/dist/internal/compiler/search.js +68 -0
- package/dist/internal/compiler/search.js.map +1 -0
- package/dist/internal/compiler/sets.d.ts.map +1 -1
- package/dist/internal/compiler/sets.js +1 -1
- package/dist/internal/compiler/sets.js.map +1 -1
- package/dist/internal/compiler/wasm.d.ts +8 -0
- package/dist/internal/compiler/wasm.d.ts.map +1 -0
- package/dist/internal/compiler/wasm.js +2840 -0
- package/dist/internal/compiler/wasm.js.map +1 -0
- package/dist/internal/compiler/wasmAsm.d.ts +199 -0
- package/dist/internal/compiler/wasmAsm.d.ts.map +1 -0
- package/dist/internal/compiler/wasmAsm.js +427 -0
- package/dist/internal/compiler/wasmAsm.js.map +1 -0
- package/dist/internal/entries.d.ts +3 -1
- package/dist/internal/entries.d.ts.map +1 -1
- package/dist/internal/entries.js.map +1 -1
- package/dist/internal/node.d.ts +77 -3
- package/dist/internal/node.d.ts.map +1 -1
- package/dist/internal/node.js +54 -10
- package/dist/internal/node.js.map +1 -1
- package/dist/internal/numbers.d.ts.map +1 -1
- package/dist/internal/numbers.js.map +1 -1
- package/dist/internal/run.d.ts +14 -0
- package/dist/internal/run.d.ts.map +1 -1
- package/dist/internal/run.js +53 -11
- package/dist/internal/run.js.map +1 -1
- package/dist/internal/stack.d.ts +14 -0
- package/dist/internal/stack.d.ts.map +1 -1
- package/dist/internal/stack.js +24 -2
- package/dist/internal/stack.js.map +1 -1
- package/dist/internal/syntax.d.ts +4 -4
- package/dist/internal/syntax.d.ts.map +1 -1
- package/dist/internal/syntax.js +18 -10
- package/dist/internal/syntax.js.map +1 -1
- package/dist/internal/text.d.ts +32 -0
- package/dist/internal/text.d.ts.map +1 -1
- package/dist/internal/text.js +68 -14
- package/dist/internal/text.js.map +1 -1
- package/dist/internal/tokens.d.ts +20 -0
- package/dist/internal/tokens.d.ts.map +1 -1
- package/dist/internal/tokens.js +72 -39
- package/dist/internal/tokens.js.map +1 -1
- package/dist/internal/tuple.d.ts +6 -0
- package/dist/internal/tuple.d.ts.map +1 -0
- package/dist/internal/tuple.js +170 -0
- package/dist/internal/tuple.js.map +1 -0
- package/package.json +18 -10
- package/src/Ascii.ts +47 -12
- package/src/Binary.ts +174 -73
- package/src/Bits.ts +16 -6
- package/src/Compiler.ts +101 -10
- package/src/Expression.ts +94 -81
- package/src/Input.ts +99 -7
- package/src/Nom.ts +15 -5
- package/src/ParseError.ts +209 -52
- package/src/Parser.ts +684 -143
- package/src/ParserSchema.ts +1 -2
- package/src/ParserStream.ts +361 -68
- package/src/Syntax.ts +60 -36
- package/src/Text.ts +32 -27
- package/src/Token.ts +152 -34
- package/src/internal/compiler/closure.ts +371 -153
- package/src/internal/compiler/entries.ts +4 -2
- package/src/internal/compiler/first.ts +16 -0
- package/src/internal/compiler/graph.ts +96 -0
- package/src/internal/compiler/jit.ts +319 -169
- package/src/internal/compiler/registry.ts +10 -2
- package/src/internal/compiler/search.ts +68 -0
- package/src/internal/compiler/sets.ts +7 -3
- package/src/internal/compiler/wasm.ts +3276 -0
- package/src/internal/compiler/wasmAsm.ts +484 -0
- package/src/internal/entries.ts +8 -2
- package/src/internal/node.ts +103 -7
- package/src/internal/numbers.ts +3 -1
- package/src/internal/run.ts +73 -12
- package/src/internal/stack.ts +25 -1
- package/src/internal/syntax.ts +39 -18
- package/src/internal/text.ts +97 -9
- package/src/internal/tokens.ts +106 -14
- package/src/internal/tuple.ts +141 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.js","names":["Input","jitBackend"],"sources":["../../../src/internal/compiler/wasm.ts"],"sourcesContent":["/**\n * The WebAssembly compiler: scans the input in WebAssembly, then builds the\n * value in JavaScript (see `docs/DESIGN.md`, \"The WebAssembly compiler\").\n *\n * A parse runs in two passes over one description of the grammar:\n *\n * 1. **Scan.** Generated WebAssembly matches the input, which is copied into\n * linear memory, with the same control flow as the JIT (labelled blocks\n * for failure, a function per rule, `state.mode` as a global). Where a\n * value is used, it appends what the value needs to a _trace_ in linear\n * memory: slice bounds, which branch or case matched, repetition counts,\n * floats. When it backtracks it rewinds the trace with the cursor, so the\n * trace only describes the successful parse.\n * 2. **Build.** A JavaScript function generated for the grammar reads the\n * trace in order and builds the value, with the same callbacks and the\n * same object shapes as the JIT, without scanning anything.\n *\n * Parsers with no native form are _islands_: the scan calls back into\n * JavaScript, which runs their JIT-compiled step on the shared state, and the\n * trace records the index of their value. Streaming (resumable) builds,\n * array input, and environments without `WebAssembly` or `new Function` use\n * the JIT.\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 { Fail, State } from \"../../Input.js\"\nimport type { Node, NodeOf, ParserLike } from \"../node.js\"\nimport { addEntry, flushEntries, fromEntries, isPlainKey } from \"../entries.js\"\nimport { nodeOf } from \"../node.js\"\nimport { floatTexts, toFloat } from \"../numbers.js\"\nimport { charOf, fastLimit, latin1, string, utf16be, utf16le, utf8 } from \"../text.js\"\nimport type { Fallback, Step } from \"./closure.js\"\nimport { backend as jitBackend, jitSupported } from \"./jit.js\"\nimport { buildsEntries, isDiagnostic, pairOf } from \"./entries.js\"\nimport { countInlined, countRefs, isLeaf, isLetter, isSmall, lowerAscii, selectorOf } from \"./graph.js\"\nimport type { Backend, Compiled } from \"./registry.js\"\nimport type { CharSet } from \"./sets.js\"\nimport { kindOfEncoding, TableSize, textSet, tokenSet } from \"./sets.js\"\nimport type { Label } from \"./wasmAsm.js\"\nimport { Body, encodeModule, F64, I32, Op, Simd } from \"./wasmAsm.js\"\n\n// -----------------------------------------------------------------------------\n// Layout\n// -----------------------------------------------------------------------------\n\n/** The encoding of a token node: `undefined` for `Token` / `Ascii`, as in `internal/node.ts`. */\ntype Enc = NodeOf<\"Any\">[\"encoding\"]\n\n/** Globals. `F` holds the float of the latest scan, the others are `i32`. */\nconst G = { mode: 0, end: 1, len: 2, tp: 3, tlim: 4, nv: 5, w: 6, f: 7 } as const\n\n/** Imported functions. */\nconst Imp = { island: 0, grow: 1, test: 2, float: 3, check: 4 } as const\nconst importCount = 5\n\n/**\n * Function types: rules and decoders `(i32) -> i32`, imports and helpers of\n * two arguments `(i32, i32) -> i32`, `grow` `() -> i32`, `float` `(i32, i32) -> f64`,\n * `start` `(i32 × 5) -> i32`.\n */\nconst Ty = { rule: 0, pair: 1, grow: 2, toF64: 3, start: 4 } as const\n\n/** Linear memory: membership tables from 0, powers of ten, then the input, then the trace. */\nconst TablesEnd = 61440\nconst Pow10 = 61440\n/** The string cache (see `intern`): `StringSlots` slots of a version, a length and `MaxInterned` units. */\nconst Strings = 65536\nconst StringSlots = 1024\nconst MaxInterned = 16\nconst SlotBytes = 8 + 2 * MaxInterned\nconst Input = 131072\nconst PageSize = 65536\n/** Headroom kept free above the trace limit: more than the writes between two checks. */\nconst Slack = 65536\n/** Trace words a function may write past the last check that dominates them (see `put`). */\nconst MaxWrites = 4096\n\n/** Bytes left after the cursor beyond which a driver's parse of the same buffer runs the JIT (see `run`). */\nconst LargeRest = 4096\n/**\n * The most linear memory a module is grown to: 2 GiB. Every offset into the\n * memory, the trace's included, is then a non-negative `i32`. A parse that\n * would need more (its input copied, and four to seven times as much of\n * trace), or whose `memory.grow` the engine refuses, runs on the JIT, which\n * needs neither (#123).\n */\nconst MaxMemory = 2 ** 31\n/**\n * Above this much linear memory after a parse (128 MiB), the module is\n * given a new memory: `WebAssembly.Memory` never shrinks, so one large\n * input would otherwise hold five to ten times its size for the life of\n * the process, per compiled parser and input kind.\n */\nconst ReleaseAbove = 128 * 1024 * 1024\n/** What `grow` throws when the trace cannot grow: the parse starts again on the JIT. */\nclass MemoryExhausted {}\n/**\n * A repetition bound as the `i32` it is compared with, unsigned. A count\n * never reaches 2^32 - 1 (the input is in a 32-bit memory), so a larger\n * minimum is one that cannot be met, and a larger maximum is none at all\n * (see `unbounded`); written as given, it was truncated to its low 32 bits.\n */\nconst bound = (n: number): number => (n >= 0xffffffff ? 0xffffffff : n)\n/** Whether a maximum can never be reached by a count (see {@link bound}). */\nconst unbounded = (max: number): boolean => max >= 0xffffffff\n\n/** The most literals a compiled `takeUntilAny` checks at each candidate; more are searched in JavaScript. */\nconst MaxUntil = 64\n\n/** The most leading bytes of each literal a SIMD search tests at once. */\nconst MaxPositions = 3\n\n/** Teddy's buckets: one bit each in a nibble table's bytes. */\nconst Buckets = 8\n\n/** For each low nibble, the high nibbles `from` to `from + 7` of the bytes `set` accepts, as bits from 0. */\n/** Whether `set` accepts any byte. */\nconst accepts = (set: Membership): boolean =>\n Array.from({ length: 256 }, (_, c) => (set.cs.table[c] === 1) !== set.negate).some((ok) => ok)\n\nconst nibbleTable = (set: Membership, from: number): Array<number> => {\n const table = new Array<number>(16).fill(0)\n for (let c = from << 4; c < (from + 8) << 4; c++) {\n if ((set.cs.table[c] === 1) !== set.negate) table[c & 15] = (table[c & 15] ?? 0) | (1 << ((c >> 4) - from))\n }\n return table\n}\n\n/** The most rejected bytes a vectorised `takeWhile` compares with one by one. */\nconst MaxStops = 3\n\n/** For a high nibble `h` from 8 up, bit `h - 8`; none below. */\nconst UpperNibbleBits: ReadonlyArray<number> = [0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 8, 16, 32, 64, 128]\n\n/** For a high nibble `h`, bit `h` below 8 (ASCII), none above. */\nconst HighNibbleBits: ReadonlyArray<number> = [1, 2, 4, 8, 16, 32, 64, 128, 0, 0, 0, 0, 0, 0, 0, 0]\n\nconst Zeros: ReadonlyArray<number> = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\nconst LowNibbles: ReadonlyArray<number> = [15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15]\n\n/**\n * Teddy's tables for the first `m` bytes of `literals`: for each position,\n * the low- and high-nibble tables, literal `i` in bucket `i % 8`.\n */\nconst teddyTables = (literals: ReadonlyArray<Uint8Array>, m: number): Array<[Array<number>, Array<number>]> =>\n Array.from({ length: m }, (_, j) => {\n const lo = new Array<number>(16).fill(0)\n const hi = new Array<number>(16).fill(0)\n literals.forEach((lit, i) => {\n const byte = lit[j] ?? 0\n const bit = 1 << (i % Buckets)\n lo[byte & 15] = (lo[byte & 15] ?? 0) | bit\n hi[byte >> 4] = (hi[byte >> 4] ?? 0) | bit\n })\n return [lo, hi]\n })\n\n/**\n * The bytes of literal units (`width` bytes each, little-endian), and the\n * 0x20 to OR into each byte of a caseless letter, which `bytes` holds in\n * lower case.\n */\nconst unitBytes = (codes: ReadonlyArray<number>, caseless: boolean, width: number) => {\n const bytes: Array<number> = []\n const fold: Array<number> = []\n for (const code of codes) {\n const letter = caseless && isLetter(code)\n const unit = letter ? lowerAscii(code) : code\n for (let k = 0; k < width; k++) {\n bytes.push((unit >> (8 * k)) & 0xff)\n fold.push(letter && k === 0 ? 0x20 : 0)\n }\n }\n return { bytes, fold }\n}\n\n/** The widest load, of 16 (with SIMD), 8, 4, 2 or 1 bytes, that `left` bytes fill. */\nconst chunkSize = (left: number): number => {\n if (left >= 16 && simd()) return 16\n return [8, 4, 2].find((n) => left >= n) ?? 1\n}\n\n/**\n * With an address on the stack, pushes whether the 1, 2, 4, 8 or 16 bytes\n * at it (plus `offset`), ORed with `fold`, differ from `bytes`.\n */\nconst compareChunk = (b: Body, bytes: ReadonlyArray<number>, fold: ReadonlyArray<number>, offset: number): void => {\n const n = bytes.length\n const folds = fold.some((f) => f !== 0)\n if (n === 16) {\n b.simd(Simd.v128Load, 0, offset)\n if (folds) b.v128(fold).simd(Simd.v128Or)\n b.v128(bytes).simd(Simd.i8x16Eq).simd(Simd.i8x16AllTrue).op(Op.i32Eqz)\n } else if (n === 8) {\n b.mem(Op.i64Load, 0, offset)\n if (folds) b.i64(littleEndian(fold, 0, 8)).op(Op.i64Or)\n b.i64(littleEndian(bytes, 0, 8)).op(Op.i64Ne)\n } else {\n b.mem(n === 4 ? Op.i32Load : n === 2 ? Op.i32Load16U : Op.i32Load8U, 0, offset)\n if (folds) b.i32(Number(littleEndian(fold, 0, n))).op(Op.i32Or)\n b.i32(Number(BigInt.asIntN(32, littleEndian(bytes, 0, n)))).op(Op.i32Ne)\n }\n}\n\n/** `n` bytes from `bytes[i]` as a little-endian integer (as a load reads them). */\nconst littleEndian = (bytes: ReadonlyArray<number>, i: number, n: number): bigint => {\n let v = 0n\n for (let k = n - 1; k >= 0; k--) v = (v << 8n) | BigInt(bytes[i + k] ?? 0)\n return BigInt.asIntN(64, v)\n}\n\n/** Values of `G.mode`. */\nconst Backtrack = 0\nconst Cut = 1\n\n/** Whether the scan decodes an encoding itself. */\nconst isBuiltin = (enc: Encoding<any>): boolean =>\n enc === string || enc === utf8 || enc === utf16le || enc === utf16be || enc === latin1\n\n// -----------------------------------------------------------------------------\n// Code units\n// -----------------------------------------------------------------------------\n\n/**\n * How the scan reads one code point: `fast` units are whole code points\n * read inline, `width` input units long; the others are decoded by the\n * helper function `decode`, which leaves the width in `G.w`.\n */\ninterface Reader {\n readonly width: number\n readonly fast: number\n /** Pushes a test that a whole unit starts at local `pos`. */\n readonly guard: (b: Body, pos: number) => void\n /** Pushes the unit at local `pos`. */\n readonly unit: (b: Body, pos: number) => void\n readonly decode: number\n}\n\n/** A token set being tested: the set, whether it is negated, and the local holding the code point. */\ninterface Membership {\n readonly cs: CharSet\n readonly negate: boolean\n readonly c: number\n}\n\n/** The locals of an `escaped` (see `WasmCompiler.escaped`). */\ninterface EscapedLocals {\n readonly r: Option.Option<Reader>\n /** Whether its value is built from pieces: segments and escapes. */\n readonly pieces: boolean\n /** Whether a string of one segment is interned. */\n readonly internsWhole: boolean\n readonly start: number\n readonly seg: number\n readonly ok: number\n readonly ts: number\n readonly count: number\n readonly pieceStart: number\n readonly slot: number\n /** The builder variable of a piece. */\n readonly x: string\n}\n\n/**\n * Where code is generated: the parser, the builder variable of its value\n * (`\"\"` when the value is unused), the function body, the label of its\n * failure, the builder function's variables and the depth of inlining.\n */\ninterface Site {\n readonly p: ParserLike\n readonly out: string\n readonly b: Body\n readonly fail: Label\n readonly bf: Vars\n readonly d: number\n}\n\n/** Pushes the code point of the surrogate pair in locals `hi` and `lo`. */\nconst pair = (b: Body, hi: number, lo: number): void => {\n b.get(hi).i32(0xd800).op(Op.i32Sub).i32(10).op(Op.i32Shl)\n b.get(lo).i32(0xdc00).op(Op.i32Sub).op(Op.i32Add).i32(0x10000).op(Op.i32Add)\n}\n\n/** Whether every key of a record of cases is one unit below `size` (a byte, as a numeric key, for `bytes`). */\nconst closedKeys = (keys: ReadonlyArray<PropertyKey>, size: number, bytes: boolean): boolean =>\n keys.every(\n (k) =>\n Predicate.isString(k) && (bytes ? /^\\d+$/.test(k) && Number(k) < size : k.length === 1 && k.charCodeAt(0) < size)\n )\n\n/** Per builder function: its variables. */\nclass Vars {\n readonly names: Array<string> = []\n}\n\n/** A repetition's element: generates it, and returns the builder code that adds it to the result. */\ntype Element = (b: Body, fail: Label, bf: Vars) => string\n\nconst modeOf = (mode: string): number => (mode === \"Cut\" ? Cut : mode === \"Backtrack\" ? Backtrack : 2)\n\n/** The inclusive runs of accepted code points of a set, when its ranges are known. */\nconst acceptedRuns = (cs: CharSet, negate: boolean, max: number): Option.Option<Array<[number, number]>> => {\n if (cs.ranges === undefined) return Option.none()\n const runs: Array<[number, number]> = []\n for (const [a, b] of cs.ranges) if (a <= max) runs.push([a, Math.min(b, max)])\n if (!negate) return Option.some(runs)\n const out: Array<[number, number]> = []\n let next = 0\n for (const [a, b] of runs) {\n if (a > next) out.push([next, a - 1])\n next = b + 1\n }\n if (next <= max) out.push([next, max])\n return Option.some(out)\n}\n\nlet simdChecked = false\nlet simdSupported = false\n\n/**\n * Whether WebAssembly SIMD is available, for the widener of strings (checked\n * once): a module of one `v128` load validates.\n */\nconst simd = (): boolean => {\n if (!simdChecked) {\n simdChecked = true\n simdSupported = validates((probe) => probe.get(0).simd(Simd.v128Load, 0, 0).simd(Simd.i8x16Bitmask))\n }\n return simdSupported\n}\n\nlet relaxedChecked = false\nlet relaxedSupported = false\n\n/**\n * Whether relaxed SIMD is available (checked once): its `relaxed_swizzle`\n * is `swizzle` without the fix-up for indices from 16 up, which the nibble\n * lookups never pass.\n */\nconst relaxed = (): boolean => {\n if (!relaxedChecked) {\n relaxedChecked = true\n relaxedSupported =\n simd() &&\n validates((probe) =>\n probe\n .get(0)\n .simd(Simd.v128Load, 0, 0)\n .get(0)\n .simd(Simd.v128Load, 0, 0)\n .simd(Simd.i8x16RelaxedSwizzle)\n .simd(Simd.i8x16Bitmask)\n )\n }\n return relaxedSupported\n}\n\n/** Pushes a swizzle of a table by nibbles (indices below 16): relaxed where it validates. */\nconst nibbleSwizzle = (b: Body): void => {\n b.simd(relaxed() ? Simd.i8x16RelaxedSwizzle : Simd.i8x16Swizzle)\n}\n\n/** Whether a module of one function `(i32) -> i32` with the body `write` writes validates. */\nconst validates = (write: (probe: Body) => void): boolean => {\n const probe = new Body(1)\n write(probe)\n const bytes = encodeModule({\n types: [{ params: [I32], results: [I32] }],\n imports: [],\n memoryPages: 1,\n functions: [[0, probe]],\n globals: [],\n exports: [],\n data: []\n })\n return WebAssembly.validate(bytes)\n}\n\n/** Whether a builder is available: it is generated with `new Function`. */\nconst supported = (): boolean => Predicate.isObject(globalThis.WebAssembly) && jitSupported()\n\n// -----------------------------------------------------------------------------\n// The compiler\n// -----------------------------------------------------------------------------\n\nclass WasmCompiler {\n readonly functions: Array<[number, Body]> = []\n readonly builders: Array<string> = []\n readonly constants: Array<unknown> = []\n readonly islands: Array<{ readonly parser: ParserLike; readonly used: boolean }> = []\n readonly fallbacks: Array<Fallback> = []\n readonly tables: Array<Uint8Array> = []\n readonly tests: Array<(c: number) => number> = []\n // Keyed by identity: parsers and encodings are compared as objects, never structurally\n private readonly rules = [new WeakMap<ParserLike, number>(), new WeakMap<ParserLike, number>()]\n private readonly pending: Array<readonly [ParserLike, boolean, number]> = []\n private refs = new WeakMap<ParserLike, number>()\n /** How many parsers have been inlined (see `countInlined`). */\n private inlined = 0\n private readonly decoders = new WeakMap<Encoding<any>, number>()\n private readonly floatScanners = new WeakMap<Encoding<any>, number>()\n /** The float scanner of `Token` / `Ascii` text, which has no encoding. */\n private tokenFloatScanner = -1\n private next = 0\n\n constructor(readonly kind: 0 | 1) {}\n\n /** Counts the distinct parents of each parser. */\n countRefs(root: ParserLike): void {\n this.refs = countRefs(root)\n }\n\n /** A constant of the builder, `C[i]`; the same value (by `Object.is`) is stored once. */\n const<T>(value: T): string {\n let i = this.constants.findIndex((c) => Object.is(c, value))\n if (i < 0) i = this.constants.push(value) - 1\n return `C[${i}]`\n }\n\n /** A JavaScript literal for simple values, otherwise a constant. */\n lit<T>(value: T): 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 return this.const(value)\n }\n\n v(bf: Vars): string {\n const name = `v${this.next++}`\n bf.names.push(name)\n return name\n }\n\n /** Reserves a function index; its body is filled in later. */\n private reserve(type: number, params = 1): [number, Body] {\n const body = new Body(params)\n this.functions.push([type, body])\n return [importCount + this.functions.length - 1, body]\n }\n\n /** The function of a rule, generating it later if new. With `used`, it has a builder `b<index>`. */\n rule(p: ParserLike, used: boolean): number {\n const rules = this.rules[used ? 1 : 0]\n const known = rules.get(p)\n if (known !== undefined) return known\n const [index] = this.reserve(Ty.rule)\n rules.set(p, index)\n this.pending.push([p, used, index])\n return index\n }\n\n /** Generates the pending rules (and the rules they use). */\n flush(): void {\n for (let r = this.pending.shift(); r !== undefined; r = this.pending.shift()) {\n const [p, used, index] = r\n const body = this.functions[index - importCount][1]\n const bf = new Vars()\n const out = used ? this.v(bf) : \"\"\n // The trace pointer lives in a local, written back before calls and on success\n body.tp = body.local()\n body.gget(G.tp).set(body.tp)\n // So is the end of the input, which never changes during a parse\n body.endLocal = body.local()\n body.gget(G.end).set(body.endLocal)\n this.check(body)\n body.writes = 0\n let built = \"\"\n body.block((fail) => {\n built = this.inline(p, out, body, fail, bf, 0)\n body.get(body.tp).gset(G.tp)\n body.get(0).op(Op.return)\n })\n body.i32(-1)\n if (used) {\n this.builders.push(\n `function b${index}(i){${Arr.isArrayNonEmpty(bf.names) ? `let ${bf.names.join(\",\")};` : \"\"}${built}N=i;return ${out}}`\n )\n }\n }\n }\n\n // ---------------------------------------------------------------------------\n // Helpers for generated code\n // ---------------------------------------------------------------------------\n\n /** Fails with a mode. */\n private failWith(b: Body, fail: Label, mode: number): void {\n b.i32(mode).gset(G.mode).br(fail)\n }\n\n /** Fails with `Backtrack` when the `i32` at the top of the stack is true. */\n private failIf(b: Body, fail: Label): void {\n b.if(() => this.failWith(b, fail, Backtrack))\n }\n\n /** Propagates a failure unless its mode is `Backtrack`. */\n private unlessBacktrack(b: Body, fail: Label): void {\n b.gget(G.mode).brIf(fail)\n }\n\n /** Pushes the input unit at local `pos` plus `delta` units. */\n load(b: Body, pos: number, delta = 0): void {\n if (this.kind === 0)\n b.get(pos)\n .i32(1)\n .op(Op.i32Shl)\n .mem(Op.i32Load16U, 1, Input + 2 * delta)\n else b.get(pos).mem(Op.i32Load8U, 0, Input + delta)\n }\n\n /** Pushes the end of the input: from a local in rule functions, from the global in helpers. */\n private end(b: Body): Body {\n return b.endLocal >= 0 ? b.get(b.endLocal) : b.gget(G.end)\n }\n\n /** Pushes `p >= E`. */\n private atEnd(b: Body, pos: number): void {\n this.end(b.get(pos)).op(Op.i32GeU)\n }\n\n /** `p += n`. */\n private advance(b: Body, n: number): void {\n b.get(0).i32(n).op(Op.i32Add).set(0)\n }\n\n /** Saves the cursor and the trace pointer. */\n private save(b: Body): [number, number] {\n const p = b.local()\n const t = b.local()\n b.get(0).set(p).get(b.tp).set(t)\n return [p, t]\n }\n\n /** Restores a saved cursor and trace pointer. */\n private restore(b: Body, [p, t]: [number, number]): void {\n b.get(p).set(0).get(t).set(b.tp)\n }\n\n /** Grows the trace if it is past its limit. */\n private check(b: Body): void {\n b.get(b.tp).gget(G.tlim).op(Op.i32GtU)\n b.if(() => b.call(Imp.grow).gset(G.tlim))\n }\n\n /**\n * Appends words to the trace. Every function and loop iteration starts\n * with a check, and the limit keeps `Slack` bytes free, so a check is\n * only written here once a function wrote `MaxWrites` words since one.\n */\n put(b: Body, words: ReadonlyArray<() => void>): void {\n b.writes += words.length\n if (b.writes > MaxWrites) this.check(b)\n words.forEach((push, k) => {\n b.get(b.tp)\n push()\n b.mem(Op.i32Store, 2, 4 * k)\n })\n b.get(b.tp)\n .i32(4 * words.length)\n .op(Op.i32Add)\n .set(b.tp)\n }\n\n /** Reserves a trace word, returning a local holding its address. */\n private slot(b: Body): number {\n const s = b.local()\n b.get(b.tp).set(s)\n this.put(b, [() => b.i32(0)])\n return s\n }\n\n /** Appends the `f64` in `G.f` to the trace, aligned to 8 bytes. */\n private putF64(b: Body): void {\n b.writes += 4\n if (b.writes > MaxWrites) this.check(b)\n b.get(b.tp).i32(7).op(Op.i32Add).i32(-8).op(Op.i32And).set(b.tp)\n b.get(b.tp).gget(G.f).mem(Op.f64Store, 3, 0)\n b.get(b.tp).i32(8).op(Op.i32Add).set(b.tp)\n }\n\n /** A loop with a trace check at the start of each iteration. */\n private loop(b: Body, body: (again: Label) => void): void {\n const before = b.writes\n b.loop((again) => {\n this.check(b)\n b.writes = 0\n body(again)\n })\n b.writes += before\n }\n\n /** Builder code reading the next trace word. */\n private static word = \"T[i++]\"\n\n // ---------------------------------------------------------------------------\n // Islands\n // ---------------------------------------------------------------------------\n\n /**\n * Runs `p`'s JIT-compiled step on the shared state. With `out`, its value\n * is kept by JavaScript and the trace records its index.\n */\n island(p: ParserLike, out: string, b: Body, fail: Label, reason: string): string {\n const id = this.islands.length\n this.islands.push({ parser: p, used: out !== \"\" })\n this.fallbacks.push({ name: p.name, tag: nodeOf(p)._tag, reason })\n const r = b.local()\n b.i32(id).get(0).call(Imp.island).tee(r).i32(0).op(Op.i32LtS)\n // -1: Backtrack, -2: Cut\n b.if(() => {\n b.i32(-1).get(r).op(Op.i32Sub).gset(G.mode).br(fail)\n })\n b.get(r).set(0)\n if (out === \"\") return \"\"\n this.put(b, [() => b.gget(G.nv)])\n b.gget(G.nv).i32(1).op(Op.i32Add).gset(G.nv)\n return `${out}=V[${WasmCompiler.word}];`\n }\n\n /** Builder functions of the value islands, `w<id>`, and what they apply to the value. */\n readonly valueFns: Array<string> = []\n readonly checks: Array<(value: Value) => Value> = []\n\n /**\n * A callback that needs `self`'s value while scanning (`filter`,\n * `tryMap`, `filterMap`, `tap`): `self` is scanned here, then JavaScript\n * builds its value from its trace (with a builder function of its own) and\n * applies `apply`, which returns the result or `Fail` (a failure with\n * `Backtrack`). The trace of `self` is then replaced by the index of the\n * result.\n */\n private valueIsland(\n self: ParserLike,\n out: string,\n b: Body,\n fail: Label,\n d: number,\n apply: (value: Value) => Value\n ): string {\n const id = this.valueFns.length\n this.valueFns.push(\"\")\n this.checks.push(apply)\n const ts = b.local()\n b.get(b.tp).set(ts)\n const vars = new Vars()\n const x = this.v(vars)\n const code = this.gen(self, x, b, fail, vars, d)\n this.valueFns[id] = `function w${id}(i){let ${vars.names.join(\",\")};${code}return ${x}}`\n b.i32(id).get(ts).call(Imp.check).op(Op.i32Eqz)\n this.failIf(b, fail)\n b.get(ts).set(b.tp)\n // JavaScript kept the result, used or not: count it\n if (out !== \"\") this.put(b, [() => b.gget(G.nv)])\n b.gget(G.nv).i32(1).op(Op.i32Add).gset(G.nv)\n return out === \"\" ? \"\" : `${out}=V[T[i++]];`\n }\n\n // ---------------------------------------------------------------------------\n // Parsers\n // ---------------------------------------------------------------------------\n\n call(index: number, out: string, b: Body, fail: Label): string {\n b.get(b.tp).gset(G.tp)\n b.get(0).call(index).tee(0).i32(0).op(Op.i32LtS).brIf(fail)\n b.gget(G.tp).set(b.tp)\n return out === \"\" ? \"\" : `${out}=b${index}(i);i=N;`\n }\n\n /**\n * Scan code for `p`, falling through with `p` advanced, or branching to\n * `fail` with `G.mode` set. With `out`, returns the builder code that\n * reads its trace and sets `out` to its value.\n */\n gen(p: ParserLike, out: string, b: Body, fail: Label, bf: Vars, depth: number): string {\n const node = nodeOf(p)\n if (Predicate.isTagged(node, \"Suspend\")) return this.call(this.rule(node.resolve(), out !== \"\"), out, b, fail)\n if (!isLeaf(node) && (((this.refs.get(p) ?? 0) > 1 && !isSmall(p)) || depth > 32)) {\n return this.call(this.rule(p, out !== \"\"), out, b, fail)\n }\n return this.inline(p, out, b, fail, bf, depth)\n }\n\n /** Whether the scan reads tokens of this encoding itself. */\n private native(enc: Enc): boolean {\n if (enc === undefined) return true\n return isBuiltin(enc) && kindOfEncoding(enc) === this.kind\n }\n\n inline(p: ParserLike, out: string, b: Body, fail: Label, bf: Vars, depth: number): string {\n this.inlined = countInlined(this.inlined)\n const node = nodeOf(p)\n const s: Site = { p, out, b, fail, bf, d: depth + 1 }\n const families: ReadonlyArray<(node: Node, s: Site) => Option.Option<string>> = [\n (n, x) => this.constant(n, x),\n (n, x) => this.slices(n, x),\n (n, x) => this.values(n, x),\n (n, x) => this.control(n, x),\n (n, x) => this.structure(n, x)\n ]\n for (const family of families) {\n const code = family(node, s)\n if (Option.isSome(code)) return code.value\n }\n return this.island(p, out, b, fail, \"no WebAssembly form\")\n }\n\n /** `out = value;`, or nothing when the value is unused. */\n private set(s: Site, value: string): string {\n return s.out === \"\" ? \"\" : `${s.out}=${value};`\n }\n\n /** Constants, the end of the input, positions and rules. */\n private constant(node: Node, s: Site): Option.Option<string> {\n const { b, fail } = s\n if (Predicate.isTagged(node, \"Succeed\")) return Option.some(this.set(s, this.lit(node.value)))\n if (Predicate.isTagged(node, \"Sync\")) return Option.some(this.set(s, `${this.const(node.evaluate)}()`))\n if (Predicate.isTagged(node, \"Fail\")) {\n this.failWith(b, fail, modeOf(node.mode))\n return Option.some(this.set(s, \"void 0\"))\n }\n if (Predicate.isTagged(node, \"Eof\")) {\n this.atEnd(b, 0)\n b.op(Op.i32Eqz)\n this.failIf(b, fail)\n return Option.some(this.set(s, \"void 0\"))\n }\n if (Predicate.isTagged(node, \"Location\") || Predicate.isTagged(node, \"RestLen\")) {\n if (s.out !== \"\") this.put(b, [() => b.get(0)])\n return Option.some(this.set(s, Predicate.isTagged(node, \"Location\") ? \"T[i++]\" : \"E-T[i++]\"))\n }\n if (Predicate.isTagged(node, \"Suspend\")) {\n return Option.some(this.call(this.rule(node.resolve(), s.out !== \"\"), s.out, b, fail))\n }\n if (Predicate.isTagged(node, \"Fixed\") && this.kind === 1) {\n // `Binary`'s numbers on bytes: the scan checks there are `size` bytes, the builder reads the number\n this.end(b.get(0).i32(node.size).op(Op.i32Add)).op(Op.i32GtU)\n this.failIf(b, fail)\n if (s.out !== \"\") this.put(b, [() => b.get(0)])\n this.advance(b, node.size)\n return Option.some(this.set(s, `${this.const(node.read)}(I,T[i++],S)`))\n }\n return Option.none()\n }\n\n /** Tokens, `escaped`, and parsers whose value is the input they consumed. */\n private slices(node: Node, s: Site): Option.Option<string> {\n if (\n Predicate.isTagged(node, \"Any\") ||\n Predicate.isTagged(node, \"OneOf\") ||\n Predicate.isTagged(node, \"Literal\") ||\n Predicate.isTagged(node, \"TakeWhile\")\n ) {\n return Option.some(this.token(s, node))\n }\n if (Predicate.isTagged(node, \"Escaped\")) return Option.some(this.escaped(s, node))\n if (Predicate.isTagged(node, \"TakeUntil\") || Predicate.isTagged(node, \"TakeUntilAny\")) {\n return Option.some(this.takeUntil(s, node))\n }\n if (Predicate.isTagged(node, \"Taken\")) {\n if (node.encoding !== undefined) {\n return Option.some(this.island(s.p, s.out, s.b, s.fail, \"text slices are validated in JavaScript\"))\n }\n return Option.some(\n this.sliceOf(s, node.self, this.kind === 0 ? \"I.slice(T[i],T[i+1])\" : \"I.subarray(T[i],T[i+1])\")\n )\n }\n if (Predicate.isTagged(node, \"Span\")) return Option.some(this.sliceOf(s, node.self, \"{start:T[i],end:T[i+1]}\"))\n if (Predicate.isTagged(node, \"WithTaken\") || Predicate.isTagged(node, \"WithSpan\")) {\n return Option.some(this.withSlice(s, node))\n }\n return Option.none()\n }\n\n /** `self`, whose value is `value`, an expression of its start and end `T[i]`, `T[i+1]`. */\n private sliceOf(s: Site, self: ParserLike, value: string): string {\n const { b } = s\n const st = b.local()\n b.get(0).set(st)\n this.gen(self, \"\", b, s.fail, s.bf, s.d)\n if (s.out === \"\") return \"\"\n this.put(b, [() => b.get(st), () => b.get(0)])\n return `${s.out}=${value};i+=2;`\n }\n\n /** `withTaken` and `withSpan`: the value of `self` and its slice or span. */\n private withSlice(s: Site, node: NodeOf<\"WithTaken\"> | NodeOf<\"WithSpan\">): string {\n const { b, out } = s\n if (out === \"\") return this.gen(node.self, \"\", b, s.fail, s.bf, s.d)\n const st = b.local()\n b.get(0).set(st)\n this.put(b, [() => b.get(st)])\n const x = this.v(s.bf)\n const start = this.v(s.bf)\n const code = this.gen(node.self, x, b, s.fail, s.bf, s.d)\n this.put(b, [() => b.get(0)])\n const extra = Predicate.isTagged(node, \"WithSpan\") ? `{start:${start},end:T[i++]}` : `S.slice(${start},T[i++])`\n return `${start}=T[i++];${code}${out}=[${x},${extra}];`\n }\n\n /** Mapping, and callbacks on values. */\n private values(node: Node, s: Site): Option.Option<string> {\n const { b, fail, d } = s\n if (Predicate.isTagged(node, \"Map\")) return Option.some(this.map(node, s.out, b, fail, s.bf, d))\n if (Predicate.isTagged(node, \"As\")) {\n this.gen(node.self, \"\", b, fail, s.bf, d)\n return Option.some(this.set(s, this.lit(node.value)))\n }\n if (Predicate.isTagged(node, \"Filter\")) return Option.some(this.filter(s, node))\n if (Predicate.isTagged(node, \"TryMap\")) {\n const f = node.f\n return Option.some(this.valueIsland(node.self, s.out, b, fail, d, (v) => Result.getOrElse(f(v), () => Fail)))\n }\n if (Predicate.isTagged(node, \"FilterMap\")) {\n const f = node.f\n return Option.some(this.valueIsland(node.self, s.out, b, fail, d, (v) => Option.getOrElse(f(v), () => Fail)))\n }\n if (Predicate.isTagged(node, \"Tap\")) {\n const f = node.f\n return Option.some(\n this.valueIsland(node.self, s.out, b, fail, d, (v) => {\n f(v)\n return v\n })\n )\n }\n return Option.none()\n }\n\n /** `filter`: on a float, a test of the double; otherwise a value island. */\n private filter(s: Site, node: NodeOf<\"Filter\">): string {\n const predicate = node.predicate\n if (predicate === Number.isFinite) {\n const code = this.finiteFloat(node.self, s.out, s.b, s.fail, s.bf, s.d)\n if (Option.isSome(code)) return code.value\n }\n return this.valueIsland(node.self, s.out, s.b, s.fail, s.d, (v) => (predicate(v) ? v : Fail))\n }\n\n /** Modes, diagnostics and lookahead. */\n private control(node: Node, s: Site): Option.Option<string> {\n const { b, fail, out, d } = s\n if (Predicate.isTagged(node, \"Mode\")) {\n return Option.some(this.withMode(b, node, fail, (bad) => this.gen(node.self, out, b, bad, s.bf, d)))\n }\n if (isDiagnostic(node)) return Option.some(this.gen(node.self, out, b, fail, s.bf, d))\n if (Predicate.isTagged(node, \"ResumeAfter\")) {\n if (out === \"\") return Option.some(this.gen(node.self, \"\", b, fail, s.bf, d))\n const x = this.v(s.bf)\n return Option.some(this.gen(node.self, x, b, fail, s.bf, d) + `${out}=R.some(${x});`)\n }\n if (Predicate.isTagged(node, \"Opt\") || Predicate.isTagged(node, \"OrElseSucceed\"))\n return Option.some(this.opt(s, node))\n if (Predicate.isTagged(node, \"Peek\")) {\n const st = b.local()\n b.get(0).set(st)\n const code = this.gen(node.self, out, b, fail, s.bf, d)\n b.get(st).set(0)\n return Option.some(code)\n }\n if (Predicate.isTagged(node, \"Not\")) return Option.some(this.not(s, node))\n return Option.none()\n }\n\n /**\n * Runs `body`, which branches to the label it is given on failure; then\n * `failed` runs, and may fall through to the code after both.\n */\n private attempt(b: Body, body: (bad: Label) => void, failed: () => void): void {\n b.block((ok) => {\n b.block((bad) => {\n body(bad)\n b.br(ok)\n })\n failed()\n })\n }\n\n /** `cut` and `complete`: a failure of `body` with the mode `from` fails with `to`. */\n private withMode(b: Body, node: NodeOf<\"Mode\">, fail: Label, body: (bad: Label) => string): string {\n let code = \"\"\n this.attempt(\n b,\n (bad) => {\n code = body(bad)\n },\n () => {\n b.gget(G.mode).i32(modeOf(node.from)).op(Op.i32Eq)\n b.if(() => b.i32(modeOf(node.to)).gset(G.mode))\n b.br(fail)\n }\n )\n return code\n }\n\n /** `opt` and `orElseSucceed`: the trace holds 1 when `self` matched. */\n private opt(s: Site, node: NodeOf<\"Opt\"> | NodeOf<\"OrElseSucceed\">): string {\n const { b, out } = s\n const flag = out === \"\" ? -1 : this.slot(b)\n const saved = this.save(b)\n const x = out === \"\" ? \"\" : this.v(s.bf)\n let code = \"\"\n this.attempt(\n b,\n (bad) => {\n code = this.gen(node.self, x, b, bad, s.bf, s.d)\n if (flag >= 0) this.putAt(b, flag, 1)\n },\n () => {\n this.unlessBacktrack(b, s.fail)\n this.restore(b, saved)\n }\n )\n if (out === \"\") return \"\"\n const some = Predicate.isTagged(node, \"Opt\") ? `R.some(${x})` : `${x}`\n const none = Predicate.isTagged(node, \"Opt\") ? \"R.none()\" : `${this.const(node.value)}()`\n return `if(T[i++]===1){${code}${out}=${some}}else ${out}=${none};`\n }\n\n /** `not`: succeeds, consuming nothing, where `self` fails with `Backtrack`. */\n private not(s: Site, node: NodeOf<\"Not\">): string {\n const { b, fail } = s\n const saved = this.save(b)\n this.attempt(\n b,\n (bad) => {\n this.gen(node.self, \"\", b, bad, s.bf, s.d)\n this.restore(b, saved)\n this.failWith(b, fail, Backtrack)\n },\n () => {\n this.unlessBacktrack(b, fail)\n this.restore(b, saved)\n }\n )\n return this.set(s, \"void 0\")\n }\n\n /** Sequences, choice and repetition. */\n private structure(node: Node, s: Site): Option.Option<string> {\n const { p, out, b, fail, bf, d } = s\n if (Predicate.isTagged(node, \"Seq\")) return Option.some(this.seq(node, out, b, fail, bf, d))\n if (Predicate.isTagged(node, \"Struct\")) return Option.some(this.struct(s, node))\n if (Predicate.isTagged(node, \"ZipWith\")) return Option.some(this.zipWith(s, node))\n if (Predicate.isTagged(node, \"Alt\")) return Option.some(this.alt(node, out, b, fail, bf, d))\n if (Predicate.isTagged(node, \"Dispatch\")) return Option.some(this.dispatch(p, node, out, b, fail, bf, d))\n if (Predicate.isTagged(node, \"Repeat\")) {\n return Option.some(this.repeat(node, out, b, fail, bf, this.collect(node.self, out, d)))\n }\n if (Predicate.isTagged(node, \"Fold\")) {\n return Option.some(\n node.while === undefined\n ? this.fold(node, out, b, fail, bf, d)\n : this.island(p, out, b, fail, \"the condition needs the accumulator\")\n )\n }\n if (Predicate.isTagged(node, \"Separated\")) {\n return Option.some(this.separated(node, out, b, fail, bf, d, this.collect(node.self, out, d)))\n }\n return Option.none()\n }\n\n private struct(s: Site, node: NodeOf<\"Struct\">): string {\n const { b, out } = s\n if (out === \"\") {\n for (const q of node.parsers) this.gen(q, \"\", b, s.fail, s.bf, s.d)\n return \"\"\n }\n const vars = node.parsers.map(() => this.v(s.bf))\n const code = node.parsers.map((q, i) => this.gen(q, vars[i], b, s.fail, s.bf, s.d)).join(\"\")\n if (node.keys.includes(\"__proto__\")) {\n return code + `${out}={};` + node.keys.map((k, i) => `${out}[${this.const(k)}]=${vars[i]};`).join(\"\")\n }\n return code + `${out}={${node.keys.map((k, i) => `[${this.const(k)}]:${vars[i]}`).join(\",\")}};`\n }\n\n private zipWith(s: Site, node: NodeOf<\"ZipWith\">): string {\n const { b, out } = s\n if (out === \"\") {\n this.gen(node.self, \"\", b, s.fail, s.bf, s.d)\n this.gen(node.that, \"\", b, s.fail, s.bf, s.d)\n return \"\"\n }\n const x = this.v(s.bf)\n const y = this.v(s.bf)\n return (\n this.gen(node.self, x, b, s.fail, s.bf, s.d) +\n this.gen(node.that, y, b, s.fail, s.bf, s.d) +\n `${out}=${this.const(node.f)}(${x},${y});`\n )\n }\n\n /** Writes `value` to the trace word at the address in local `slot`. */\n private putAt(b: Body, slot: number, value: number): void {\n b.get(slot).i32(value).mem(Op.i32Store, 2, 0)\n }\n\n // ---------------------------------------------------------------------------\n // Mapping\n // ---------------------------------------------------------------------------\n\n private map(node: NodeOf<\"Map\">, out: string, b: Body, fail: Label, bf: Vars, d: number) {\n if (out === \"\") return this.gen(node.self, \"\", b, fail, bf, d)\n if (node.f === toFloat) {\n const code = this.float(node, out, b, fail, bf, d)\n if (Option.isSome(code)) return code.value\n }\n if (node.f === fromEntries && buildsEntries(node.self)) return this.entries(node.self, out, b, fail, bf, d)\n const x = this.v(bf)\n return this.gen(node.self, x, b, fail, bf, d) + `${out}=${this.const(node.f)}(${x});`\n }\n\n /** Whether `Ascii.float` / `Text.float` (`map(text, toFloat)`) can be scanned and converted in one pass. */\n private floatScans(node: NodeOf<\"Map\">): boolean {\n return node.f === toFloat && floatTexts.has(node.self) && Option.isSome(this.floatEncoding(node.self))\n }\n\n /**\n * The encoding of the text parser of `Ascii.float` / `Text.float` (`none`\n * for `Ascii`), when the scan reads it: decimal notation is ASCII, which\n * every built-in encoding read here encodes as one unit per character.\n */\n private floatEncoding(p: ParserLike): Option.Option<Enc> {\n let taken = nodeOf(p)\n while (Predicate.isTagged(taken, \"Expected\")) taken = nodeOf(taken.self)\n if (!Predicate.isTagged(taken, \"Taken\")) return Option.none()\n const enc = taken.encoding\n return this.native(enc) ? Option.some(enc) : Option.none()\n }\n\n /**\n * `Ascii.float` and `Text.float`: decimal numbers are matched and\n * converted in one pass (see `scanFloat`); the other forms (`nan`, `inf`)\n * are matched by the float's text parser and converted by `toFloat`. The\n * trace holds the double.\n */\n private float(node: NodeOf<\"Map\">, out: string, b: Body, fail: Label, bf: Vars, d: number): Option.Option<string> {\n if (!this.floatScans(node)) return Option.none()\n return Option.some(this.scanFloatThen(node, out, b, fail, false, bf, d))\n }\n\n /** `filter(float, Number.isFinite)`: the float scan, then a test of the double. */\n private finiteFloat(self: ParserLike, out: string, b: Body, fail: Label, bf: Vars, d: number): Option.Option<string> {\n const node = nodeOf(self)\n if (!Predicate.isTagged(node, \"Map\") || !this.floatScans(node)) return Option.none()\n return Option.some(this.scanFloatThen(node, out, b, fail, true, bf, d))\n }\n\n /**\n * The float at `p`: the scan of a decimal number, or else the float's text\n * parser, whose text `toFloat` converts in JavaScript. A failure of the\n * scan fails with `Backtrack`, as the text parser would. With `finite`, a\n * value that isn't finite fails.\n */\n private scanFloatThen(\n map: NodeOf<\"Map\">,\n out: string,\n b: Body,\n fail: Label,\n finite: boolean,\n bf: Vars,\n d: number\n ): string {\n const enc = Option.getOrUndefined(this.floatEncoding(map.self))\n let taken = nodeOf(map.self)\n while (Predicate.isTagged(taken, \"Expected\")) taken = nodeOf(taken.self)\n const r = b.local()\n const st = b.local()\n b.get(0).set(st)\n b.get(0).call(this.scanFloat(enc)).tee(r).i32(-1).op(Op.i32Eq)\n b.if(\n () => {\n // Not decimal: the text parser (its text is ASCII, so `taken` has nothing to validate)\n if (Predicate.isTagged(taken, \"Taken\")) this.gen(taken.self, \"\", b, fail, bf, d)\n b.get(st).get(0).call(Imp.float).gset(G.f)\n },\n () => {\n b.get(r).i32(-2).op(Op.i32Eq)\n this.failIf(b, fail)\n b.get(r).set(0)\n }\n )\n if (finite) {\n // x - x is 0 for finite doubles, NaN otherwise\n b.gget(G.f).gget(G.f).op(Op.f64Sub).f64(0).op(Op.f64Ne)\n this.failIf(b, fail)\n }\n if (out === \"\") return \"\"\n this.putF64(b)\n return `i=(i+1)&-2;${out}=F[i>>1];i+=2;`\n }\n\n // ---------------------------------------------------------------------------\n // Sequences and choice\n // ---------------------------------------------------------------------------\n\n private seq(node: NodeOf<\"Seq\">, out: string, b: Body, fail: Label, bf: Vars, d: number): string {\n const output = node.output\n if (out === \"\") {\n for (const q of node.parsers) this.gen(q, \"\", b, fail, bf, d)\n return \"\"\n }\n if (Predicate.isNumber(output)) {\n return node.parsers.map((q, i) => this.gen(q, i === output ? out : \"\", b, fail, bf, d)).join(\"\")\n }\n const keep = (i: number) => output === \"tuple\" || output.includes(i)\n const vars = node.parsers.map((_, i) => (keep(i) ? this.v(bf) : \"\"))\n const code = node.parsers.map((q, i) => this.gen(q, vars[i], b, fail, bf, d)).join(\"\")\n // A pair keeps its indices' order, which may differ from the parsers'\n const kept = output === \"tuple\" ? vars.filter((v) => v !== \"\") : output.map((i) => vars[i])\n return code + `${out}=[${kept.join(\",\")}];`\n }\n\n private alt(node: NodeOf<\"Alt\">, out: string, b: Body, fail: Label, bf: Vars, d: number): string {\n const parsers = node.parsers\n if (Arr.isReadonlyArrayEmpty(parsers)) {\n this.failWith(b, fail, Backtrack)\n return \"\"\n }\n if (parsers.length === 1) return this.gen(parsers[0], out, b, fail, bf, d)\n const saved = this.save(b)\n const cases: Array<string> = []\n b.block((done) => {\n parsers.forEach((q, i) => {\n b.block((bad) => {\n if (out !== \"\") this.put(b, [() => b.i32(i)])\n cases.push(this.gen(q, out, b, bad, bf, d))\n b.br(done)\n })\n this.unlessBacktrack(b, fail)\n this.restore(b, saved)\n })\n this.failWith(b, fail, Backtrack)\n })\n if (out === \"\") return \"\"\n return `switch(T[i++]){${cases.map((c, i) => `case ${i}:{${c}break}`).join(\"\")}}`\n }\n\n private dispatch(\n p: ParserLike,\n node: NodeOf<\"Dispatch\">,\n out: string,\n b: Body,\n fail: Label,\n bf: Vars,\n d: number\n ): string {\n const { node: sel, peek } = selectorOf(node.selector)\n const cases = node.cases\n if (cases === undefined || !Predicate.isTagged(sel, \"Any\") || !this.native(sel.encoding)) {\n return this.island(p, out, b, fail, \"the selector runs in JavaScript\")\n }\n const enc = sel.encoding\n const r = Option.map(Option.fromUndefinedOr(enc), (e) => this.reader(e))\n const size = this.dispatchSize(r)\n if (size === 0) return this.island(p, out, b, fail, \"the selector runs in JavaScript\")\n const bytes = enc === undefined && this.kind === 1\n const choose = (unit: number) => node.choose(bytes ? unit : charOf(unit))\n // The distinct cases, by the units below `size` that select them\n const targets: Array<ParserLike> = []\n for (let unit = 0; unit < size; unit++) {\n const q = choose(unit)\n if (q !== undefined && !targets.includes(q)) targets.push(q)\n }\n const closed = node.otherwise === undefined && closedKeys(Reflect.ownKeys(cases), size, bytes)\n const u = b.local()\n const st = b.local()\n b.get(0).set(st)\n this.selectorUnit(b, r, size)\n b.set(u)\n b.get(u).i32(-1).op(Op.i32Eq)\n this.failIf(b, fail)\n const code: Array<string> = []\n let general = \"\"\n b.block((done) =>\n // A block per case, then one for a unit that selects no case and one for the units from `size` up\n this.nested(\n b,\n targets.length + 2,\n (labels) => {\n const table = Arr.makeBy(size, (unit) => {\n const q = choose(unit)\n return q === undefined ? labels[targets.length] : labels[targets.indexOf(q)]\n })\n b.get(u).brTable(table, labels[targets.length + 1])\n },\n (j) => {\n if (j < targets.length) {\n if (!peek) this.advance(b, Option.match(r, { onNone: () => 1, onSome: (x) => x.width }))\n if (out !== \"\") this.put(b, [() => b.i32(j)])\n code[j] = this.gen(targets[j], out, b, fail, bf, d)\n b.br(done)\n } else if (j === targets.length || closed) {\n this.failWith(b, fail, Backtrack)\n } else {\n // The dispatch reads a code point beyond the fast units: it runs in JavaScript\n b.get(st).set(0)\n if (out !== \"\") this.put(b, [() => b.i32(targets.length)])\n general = this.island(p, out, b, fail, \"the selector reads a code point beyond the fast units\")\n b.br(done)\n }\n }\n )\n )\n if (out === \"\") return \"\"\n return `switch(T[i++]){${code.map((c, j) => `case ${j}:{${c}break}`).join(\"\")}default:{${general}}}`\n }\n\n /** How many units a `dispatch` switches on: the units that are whole code points, at most `TableSize`. */\n private dispatchSize(r: Option.Option<Reader>): number {\n const limit = Option.match(r, {\n onNone: () => (this.kind === 0 ? 0xd800 : TableSize),\n onSome: (x) => Math.min(x.fast, 0xd800)\n })\n return Math.min(limit, TableSize)\n }\n\n /** Pushes the unit a `dispatch` switches on: -1 at the end, `size` for a unit cut short. */\n private selectorUnit(b: Body, r: Option.Option<Reader>, size: number): void {\n if (Option.isNone(r)) {\n this.atEnd(b, 0)\n b.ifI32(\n () => b.i32(-1),\n () => this.load(b, 0)\n )\n return\n }\n const reader = r.value\n reader.guard(b, 0)\n b.ifI32(\n () => reader.unit(b, 0),\n () => {\n this.atEnd(b, 0)\n b.ifI32(\n () => b.i32(-1),\n () => b.i32(size)\n )\n }\n )\n }\n\n /**\n * `n` nested blocks around `inner`, which gets their labels, outermost\n * first; after the end of block `j` (where a branch to its label goes),\n * `after(j)` runs.\n */\n private nested(b: Body, n: number, inner: (labels: ReadonlyArray<Label>) => void, after: (j: number) => void): void {\n const open = (j: number, labels: ReadonlyArray<Label>): void => {\n if (j === n) return inner(labels)\n b.block((l) => open(j + 1, [...labels, l]))\n after(j)\n }\n open(0, [])\n }\n\n // ---------------------------------------------------------------------------\n // Repetition\n // ---------------------------------------------------------------------------\n\n /** An element that is pushed to an array (or not kept). */\n private collect(self: ParserLike, out: string, d: number): Element {\n return (b, fail, bf) => {\n if (out === \"\") {\n this.gen(self, \"\", b, fail, bf, d)\n return \"\"\n }\n const x = this.v(bf)\n return `${this.gen(self, x, b, fail, bf, d)}${out}.push(${x});`\n }\n }\n\n /** The builder of a repetition: its count, then each element. */\n private many(out: string, init: string, element: string, finish: string, bf: Vars): string {\n if (out === \"\") return \"\"\n const n = this.v(bf)\n const k = this.v(bf)\n return `${init}${n}=T[i++];for(${k}=0;${k}<${n};${k}++){${element}}${finish}`\n }\n\n /**\n * After a failed element or separator: fails unless it backtracked and\n * `n` reached `min`; otherwise restores the position and stops.\n */\n private stop(b: Body, fail: Label, n: number, min: number, restore: () => void, done: Label): void {\n this.unlessBacktrack(b, fail)\n if (min > 0) {\n b.get(n).i32(bound(min)).op(Op.i32LtU)\n b.if(() => b.br(fail))\n }\n restore()\n b.br(done)\n }\n\n /** Counts an element in local `n` and goes on to the next. */\n private nextElement(b: Body, n: number, again: Label): void {\n b.get(n).i32(1).op(Op.i32Add).set(n)\n b.br(again)\n }\n\n /** Writes the count in local `n` to the trace word reserved at `slot`, if any. Returns no builder code. */\n private counted(b: Body, slot: number, n: number): string {\n if (slot >= 0) b.get(slot).get(n).mem(Op.i32Store, 2, 0)\n return \"\"\n }\n\n /** An unbounded repetition that consumed nothing since `from` fails with `Cut`, as the interpreter does. */\n private progress(b: Body, fail: Label, from: number): void {\n b.get(0).get(from).op(Op.i32Eq)\n b.if(() => this.failWith(b, fail, Cut))\n }\n\n repeat(\n node: NodeOf<\"Repeat\"> | NodeOf<\"Fold\">,\n out: string,\n b: Body,\n fail: Label,\n bf: Vars,\n element: Element,\n init = out === \"\" ? \"\" : `${out}=[];`,\n finish = \"\"\n ): string {\n const { max, min } = node\n const n = b.local()\n const slot = out === \"\" ? -1 : this.slot(b)\n let elementCode = \"\"\n b.i32(0).set(n)\n b.block((done) => {\n this.loop(b, (again) => {\n if (!unbounded(max)) b.get(n).i32(bound(max)).op(Op.i32GeU).brIf(done)\n const saved = this.save(b)\n this.attempt(\n b,\n (bad) => {\n elementCode = element(b, bad, bf)\n this.progress(b, fail, saved[0])\n this.nextElement(b, n, again)\n },\n () => this.stop(b, fail, n, min, () => this.restore(b, saved), done)\n )\n })\n })\n return this.counted(b, slot, n) + this.many(out, init, elementCode, finish, bf)\n }\n\n private fold(node: NodeOf<\"Fold\">, out: string, b: Body, fail: Label, bf: Vars, d: number): string {\n const f = this.const(node.f)\n const element: Element = (body, bad, vars) => {\n if (out === \"\") {\n this.gen(node.self, \"\", body, bad, vars, d)\n return \"\"\n }\n const x = this.v(vars)\n return `${this.gen(node.self, x, body, bad, vars, d)}${out}=${f}(${out},${x});`\n }\n return this.repeat(node, out, b, fail, bf, element, out === \"\" ? \"\" : `${out}=${this.const(node.init)}();`)\n }\n\n separated(\n node: NodeOf<\"Separated\">,\n out: string,\n b: Body,\n fail: Label,\n bf: Vars,\n d: number,\n element: Element,\n init = out === \"\" ? \"\" : `${out}=[];`,\n finish = \"\"\n ): string {\n const { max, min } = node\n if (max === 0) return out === \"\" ? \"\" : `${init}${finish}`\n const n = b.local()\n const st = b.local()\n const t = b.local()\n const slot = out === \"\" ? -1 : this.slot(b)\n let elementCode = \"\"\n const mark = () => b.get(0).set(st).get(b.tp).set(t)\n const back = () => b.get(st).set(0).get(t).set(b.tp)\n b.i32(0).set(n)\n b.block((done) => {\n mark()\n this.attempt(\n b,\n (bad) => {\n elementCode = element(b, bad, bf)\n b.i32(1).set(n)\n },\n () => {\n // The first element failed: fatal unless it backtracked and none are needed\n this.unlessBacktrack(b, fail)\n if (min > 0) b.br(fail)\n back()\n b.br(done)\n }\n )\n this.loop(b, (again) => {\n if (!unbounded(max)) b.get(n).i32(bound(max)).op(Op.i32GeU).brIf(done)\n mark()\n this.attempt(\n b,\n (bad) => this.gen(node.separator, \"\", b, bad, bf, d),\n () => this.stop(b, fail, n, min, back, done)\n )\n this.progress(b, fail, st)\n this.attempt(\n b,\n (bad) => {\n // The same element code again: its builder code is the same\n element(b, bad, new Vars())\n this.nextElement(b, n, again)\n },\n () => this.stop(b, fail, n, min, back, done)\n )\n })\n })\n return this.counted(b, slot, n) + this.many(out, init, elementCode, finish, bf)\n }\n\n /**\n * `map(self, Object.fromEntries)` where `buildsEntries(self)`: the scan is\n * the usual one, and the builder assigns each entry as it is read, as the\n * JIT does (see `internal/entries.ts`).\n */\n private entries(p: ParserLike, out: string, b: Body, fail: Label, bf: Vars, d: number): string {\n const node = nodeOf(p)\n if (Predicate.isTagged(node, \"Mode\")) {\n return this.withMode(b, node, fail, (bad) => this.entries(node.self, out, b, bad, bf, d))\n }\n if (Predicate.isTagged(node, \"Seq\") && Predicate.isNumber(node.output)) {\n const kept = node.output\n return node.parsers\n .map((q, j) => (j === kept ? this.entries(q, out, b, fail, bf, d) : this.gen(q, \"\", b, fail, bf, d)))\n .join(\"\")\n }\n if (isDiagnostic(node)) return this.entries(node.self, out, b, fail, bf, d)\n const pair =\n Predicate.isTagged(node, \"Repeat\") || Predicate.isTagged(node, \"Separated\") ? pairOf(node.self) : undefined\n if ((Predicate.isTagged(node, \"Repeat\") || Predicate.isTagged(node, \"Separated\")) && pair !== undefined) {\n const deferred = this.v(bf)\n // The element's variables are declared in the enclosing builder function\n const element: Element = (body, bad) => {\n const key = this.v(bf)\n const value = this.v(bf)\n const code = pair.parsers\n .map((q, j) => this.gen(q, j === pair.key ? key : j === pair.value ? value : \"\", body, bad, bf, d))\n .join(\"\")\n return (\n code +\n `if(${deferred}===void 0&&R.isPlainKey(${key}))${out}[${key}]=${value};` +\n `else ${deferred}=R.addEntry(${out},${deferred},${key},${value});`\n )\n }\n const init = `${out}={};${deferred}=void 0;`\n const finish = `if(${deferred}!==void 0)R.flushEntries(${out},${deferred});`\n return Predicate.isTagged(node, \"Repeat\")\n ? this.repeat(node, out, b, fail, bf, element, init, finish)\n : this.separated(node, out, b, fail, bf, d, element, init, finish)\n }\n const x = this.v(bf)\n return this.gen(p, x, b, fail, bf, d) + `${out}=${this.const(fromEntries)}(${x});`\n }\n\n // ---------------------------------------------------------------------------\n // Tokens\n // ---------------------------------------------------------------------------\n\n /** How the scan reads an encoding's code points. */\n reader(enc: Encoding<any>): Reader {\n if (enc === utf16le || enc === utf16be) {\n const [lo, hi] = enc === utf16le ? [0, 1] : [1, 0]\n return {\n width: 2,\n fast: 0xd800,\n guard: (b, pos) => this.end(b.get(pos).i32(1).op(Op.i32Add)).op(Op.i32LtU),\n unit: (b, pos) => {\n this.load(b, pos, lo)\n this.load(b, pos, hi)\n b.i32(8).op(Op.i32Shl, Op.i32Or)\n },\n decode: this.decoder(enc)\n }\n }\n return {\n width: 1,\n fast: enc === latin1 ? TableSize : fastLimit(enc),\n guard: (b, pos) => this.end(b.get(pos)).op(Op.i32LtU),\n unit: (b, pos) => this.load(b, pos),\n decode: enc === latin1 ? -1 : this.decoder(enc)\n }\n }\n\n /**\n * Pushes whether the code point in local `c`, known to be below `below`,\n * is in the set (taking `negate` into account). Known ranges compile to\n * comparisons, testing the accepted runs or the rejected ones, whichever\n * takes fewer; otherwise a table below `TableSize`, then the ranges or the\n * set's test above it.\n */\n private member(cs: CharSet, negate: boolean, c: number, b: Body, below = 0x110000): void {\n const max = Math.min(below, this.kind === 1 && this.tokenBytes ? 256 : 0x110000) - 1\n const runs = acceptedRuns(cs, negate, max)\n const cost = (rs: ReadonlyArray<readonly [number, number]>) =>\n rs.reduce((n, [lo, hi]) => n + (lo === hi || lo === 0 || hi >= max ? 1 : 2), 0)\n /** Pushes whether `c` is in one of the runs. */\n const compare = (rs: ReadonlyArray<readonly [number, number]>) => {\n if (Arr.isReadonlyArrayEmpty(rs)) {\n b.i32(0)\n return\n }\n rs.forEach(([lo, hi], k) => {\n if (lo === hi) b.get(c).i32(lo).op(Op.i32Eq)\n else if (lo === 0) b.get(c).i32(hi).op(Op.i32LeU)\n else if (hi >= max) b.get(c).i32(lo).op(Op.i32GeU)\n else\n b.get(c)\n .i32(lo)\n .op(Op.i32Sub)\n .i32(hi - lo)\n .op(Op.i32LeU)\n if (k > 0) b.op(Op.i32Or)\n })\n }\n if (Option.isSome(runs)) {\n const accept = runs.value\n const reject = Option.getOrElse(acceptedRuns({ ...cs, ranges: accept }, true, max), () => [])\n if (Math.min(cost(accept), cost(reject)) <= 6) {\n if (cost(accept) <= cost(reject)) compare(accept)\n else {\n compare(reject)\n b.op(Op.i32Eqz)\n }\n return\n }\n }\n const table = new Uint8Array(TableSize)\n for (let x = 0; x < TableSize; x++) table[x] = (cs.table[x] === 1) !== negate ? 1 : 0\n const callTest = () => {\n const test = cs.test\n this.tests.push((x) => (test(x) !== negate ? 1 : 0))\n b.i32(this.tests.length - 1)\n .get(c)\n .call(Imp.test)\n }\n const offset = this.table(table)\n if (offset < 0) {\n callTest()\n return\n }\n if (max < TableSize) {\n b.get(c).mem(Op.i32Load8U, 0, offset)\n return\n }\n const high = Option.map(runs, (rs) => rs.filter(([, hi]) => hi >= TableSize))\n b.get(c).i32(TableSize).op(Op.i32LtU)\n b.ifI32(\n () => b.get(c).mem(Op.i32Load8U, 0, offset),\n () => {\n if (Option.isSome(high) && cost(high.value) <= 6) compare(high.value)\n else callTest()\n }\n )\n }\n\n /** Whether the token being compiled reads bytes as `Token` does (code points never exceed 255). */\n private tokenBytes = false\n\n /** Places a membership table in memory, returning its address. */\n private table(t: Uint8Array): number {\n for (let i = 0; i < this.tables.length; i++) {\n if (this.tables[i].every((x, j) => x === t[j])) return i * TableSize\n }\n // Full: -1, and the set is tested by its function\n if ((this.tables.length + 1) * TableSize > TablesEnd) return -1\n this.tables.push(t)\n return (this.tables.length - 1) * TableSize\n }\n\n /** Pushes whether a whole unit below `r.fast` is at `p`, leaving it in local `c`. `p < E` holds. */\n private fastUnit(r: Reader, b: Body, c: number): void {\n if (r.width === 1) {\n r.unit(b, 0)\n b.tee(c).i32(r.fast).op(Op.i32LtU)\n return\n }\n r.guard(b, 0)\n b.ifI32(\n () => {\n r.unit(b, 0)\n b.tee(c).i32(r.fast).op(Op.i32LtU)\n },\n () => b.i32(0)\n )\n }\n\n /**\n * Reads the code point at `p` into local `c` and its width into `w`,\n * branching to `stop` when it is malformed or cut short. `p < E` holds.\n */\n private readCodePoint(enc: Enc, b: Body, c: number, w: number, stop: Label): void {\n if (enc === undefined) {\n this.load(b, 0)\n b.set(c).i32(1).set(w)\n // Token on strings: code points, with lenient surrogates\n if (this.kind === 0) this.lenientPair(b, c, w)\n return\n }\n const r = this.reader(enc)\n if (r.decode < 0) {\n r.unit(b, 0)\n b.set(c).i32(1).set(w)\n return\n }\n this.fastUnit(r, b, c)\n b.if(\n () => b.i32(r.width).set(w),\n () => {\n b.get(0).call(r.decode).tee(c).i32(0).op(Op.i32LtS).brIf(stop)\n b.gget(G.w).set(w)\n }\n )\n }\n\n /** `Token` on strings: a high surrogate in `c` followed by a low one is read as their pair. */\n private lenientPair(b: Body, c: number, w: number): void {\n b.get(c).i32(0xfc00).op(Op.i32And).i32(0xd800).op(Op.i32Eq)\n b.if(() => {\n b.get(0).i32(1).op(Op.i32Add).gget(G.len).op(Op.i32LtU)\n b.if(() => {\n this.load(b, 0, 1)\n const lo = b.local()\n b.tee(lo).i32(0xfc00).op(Op.i32And).i32(0xdc00).op(Op.i32Eq)\n b.if(() => {\n pair(b, c, lo)\n b.set(c)\n b.i32(2).set(w)\n })\n })\n })\n }\n\n private token(s: Site, node: NodeOf<\"Any\" | \"Literal\" | \"OneOf\" | \"TakeWhile\">): string {\n const enc = node.encoding\n if (!this.native(enc)) return this.island(s.p, s.out, s.b, s.fail, \"the encoding is decoded in JavaScript\")\n this.tokenBytes = enc === undefined && this.kind === 1\n if (Predicate.isTagged(node, \"Literal\")) return this.literal(s, node)\n if (Predicate.isTagged(node, \"TakeWhile\")) return this.takeWhile(s, node)\n return this.single(s, node)\n }\n\n /** `any` and `oneOf`: one code point. */\n private single(s: Site, node: NodeOf<\"Any\" | \"OneOf\">): string {\n const { b } = s\n const enc = node.encoding\n const c = b.local()\n const w = b.local()\n const st = b.local()\n b.get(0).set(st)\n this.attempt(\n b,\n (bad) => {\n this.atEnd(b, 0)\n b.brIf(bad)\n this.readCodePoint(enc, b, c, w, bad)\n if (Predicate.isTagged(node, \"OneOf\")) {\n this.member(enc === undefined ? tokenSet(node.set, this.kind) : textSet(node.set), node.negate, c, b)\n b.op(Op.i32Eqz).brIf(bad)\n }\n b.get(0).get(w).op(Op.i32Add).set(0)\n },\n () => this.failWith(b, s.fail, Backtrack)\n )\n if (s.out === \"\") return \"\"\n if (enc !== undefined) {\n this.put(b, [() => b.get(c)])\n return this.set(s, \"R.charOf(T[i++])\")\n }\n this.put(b, [() => b.get(st), () => b.get(0)])\n return this.set(s, this.kind === 0 ? \"I.slice(T[i],T[i+1]);i+=2\" : \"I[T[i]];i+=2\")\n }\n\n private takeWhile(s: Site, node: NodeOf<\"TakeWhile\">): string {\n const { b } = s\n const enc = node.encoding\n const { max, min } = node\n const set: Membership = {\n cs: enc === undefined ? tokenSet(node.set, this.kind) : textSet(node.set),\n negate: node.negate,\n c: b.local()\n }\n const w = b.local()\n const st = b.local()\n b.get(0).set(st)\n const counted = max !== Infinity || min > 1\n const n = b.local()\n if (counted) b.i32(0).set(n)\n // UTF-8: whether the slice has a byte from 0x80 up, traced in the sign bit of its start\n const wide = enc === utf8 && s.out !== \"\" ? b.local() : -1\n if (wide >= 0) b.i32(0).set(wide)\n b.block((stop) => {\n if (!counted && this.vectorRun(enc, set)) this.byteRun(b, set, stop)\n b.loop((again) => {\n this.atEnd(b, 0)\n b.brIf(stop)\n if (!unbounded(max)) b.get(n).i32(bound(max)).op(Op.i32GeU).brIf(stop)\n this.whileStep(enc, b, set, w, wide, stop)\n if (counted) b.get(n).i32(1).op(Op.i32Add).set(n)\n b.br(again)\n })\n })\n if (min > 0) {\n if (counted) b.get(n).i32(bound(min)).op(Op.i32LtU)\n else b.get(0).get(st).op(Op.i32Eq)\n this.failIf(b, s.fail)\n }\n return this.sliceValue(s, enc, st, wide)\n }\n\n /**\n * The vector steps of an unbounded `takeWhile` on bytes, where every\n * byte is a token: sixteen bytes, up to the first that is not accepted,\n * which ends the run (most runs, tokens, end in the first sixteen); after\n * sixteen accepted, thirty-two at a time while all are. The\n * scalar loop takes the last fifteen bytes. Applies to `Token` and\n * Latin-1 text on bytes, where SIMD validates. (UTF-8, whose bytes from\n * 0x80 up are parts of code points, and strings, whose units are\n * sixteen-bit, stay scalar: on the JSON benchmark, whose runs are short,\n * a vector step there costs more than it saves.)\n */\n private byteRun(b: Body, set: Membership, stop: Label): void {\n const x = b.localV128()\n const y = b.localV128()\n const accepted = this.acceptedBytes(b, set)\n b.block((done) => {\n b.loop((again) => {\n this.end(b).get(0).op(Op.i32Sub).i32(16).op(Op.i32LtS).brIf(done)\n b.get(0).simd(Simd.v128Load, 0, Input).set(x)\n accepted(x)\n b.tee(x).simd(Simd.i8x16AllTrue)\n b.if(() => {\n this.advance(b, 16)\n // A run this long may be longer: thirty-two bytes at a time\n b.block((short) => {\n b.loop((more) => {\n this.end(b).get(0).op(Op.i32Sub).i32(32).op(Op.i32LtS).brIf(short)\n b.get(0).simd(Simd.v128Load, 0, Input).set(x)\n b.get(0)\n .simd(Simd.v128Load, 0, Input + 16)\n .set(y)\n accepted(x)\n accepted(y)\n b.simd(Simd.v128And).simd(Simd.i8x16AllTrue).op(Op.i32Eqz).brIf(short)\n this.advance(b, 32)\n b.br(more)\n })\n })\n b.br(again)\n })\n // Up to the first byte that is not accepted: the end of the run\n b.get(0).get(x).simd(Simd.i8x16Bitmask).i32(-1).op(Op.i32Xor).op(Op.i32Ctz).op(Op.i32Add).set(0)\n b.br(stop)\n })\n })\n }\n\n /** Whether a `takeWhile` of `set` in `enc` has vector steps (see {@link byteRun}). */\n private vectorRun(enc: Enc, set: Membership): boolean {\n return this.kind === 1 && (enc === undefined || enc === latin1) && simd() && accepts(set)\n }\n\n /**\n * Code that pushes, for the sixteen bytes in a local, 0xFF where the byte\n * is accepted and 0 where not: comparisons with the rejected bytes when\n * there are at most three of them (`takeTill` of a few stops), else two\n * swizzles of nibble tables for each half of the byte values. Its\n * constants are set up here, in locals.\n */\n private acceptedBytes(b: Body, set: Membership): (x: number) => void {\n const rejected: Array<number> = []\n for (let c = 0; c < 256 && rejected.length <= MaxStops; c++) {\n if ((set.cs.table[c] === 1) === set.negate) rejected.push(c)\n }\n if (rejected.length <= MaxStops) {\n const stops = rejected.map((c) => {\n const l = b.localV128()\n b.i32(c).simd(Simd.i8x16Splat).set(l)\n return l\n })\n return (x) => {\n b.v128(Zeros)\n for (const l of stops) b.get(x).get(l).simd(Simd.i8x16Eq).simd(Simd.v128Or)\n b.simd(Simd.v128Not)\n }\n }\n const tables = [nibbleTable(set, 0), nibbleTable(set, 8)].map((table, k) => {\n const lo = b.localV128()\n const bits = b.localV128()\n b.v128(table)\n .set(lo)\n .v128(k === 0 ? HighNibbleBits : UpperNibbleBits)\n .set(bits)\n return [lo, bits] as const\n })\n return (x) => {\n tables.forEach(([lo, bits], k) => {\n b.get(lo).get(x).v128(LowNibbles).simd(Simd.v128And)\n nibbleSwizzle(b)\n b.get(bits).get(x).i32(4).simd(Simd.i8x16ShrU)\n nibbleSwizzle(b)\n b.simd(Simd.v128And)\n if (k > 0) b.simd(Simd.v128Or)\n })\n b.v128(Zeros).simd(Simd.i8x16Ne)\n }\n }\n\n /** One code point of a `takeWhile`: advances past it, or branches to `stop`. */\n private whileStep(enc: Enc, b: Body, set: Membership, w: number, wide: number, stop: Label): void {\n const r = Option.map(Option.fromUndefinedOr(enc), (e) => this.reader(e))\n if (Option.isSome(r) && r.value.decode >= 0) {\n // Text: the encoding's single-unit code points inline, the rest decoded\n const reader = r.value\n this.fastUnit(reader, b, set.c)\n b.if(\n () => {\n this.member(set.cs, set.negate, set.c, b, reader.fast)\n b.op(Op.i32Eqz).brIf(stop)\n this.advance(b, reader.width)\n },\n () => {\n b.get(0).call(reader.decode).tee(set.c).i32(0).op(Op.i32LtS).brIf(stop)\n if (wide >= 0) b.i32(1).set(wide)\n this.member(set.cs, set.negate, set.c, b)\n b.op(Op.i32Eqz).brIf(stop)\n b.get(0).gget(G.w).op(Op.i32Add).set(0)\n }\n )\n return\n }\n if (enc === undefined && this.kind === 0) {\n // Token on strings: a unit that isn't a surrogate is a code point\n this.load(b, 0)\n b.tee(set.c).i32(0xf800).op(Op.i32And).i32(0xd800).op(Op.i32Ne)\n b.if(\n () => {\n this.member(set.cs, set.negate, set.c, b, 0x10000)\n b.op(Op.i32Eqz).brIf(stop)\n this.advance(b, 1)\n },\n () => this.codePointStep(enc, b, set, w, stop)\n )\n return\n }\n this.codePointStep(enc, b, set, w, stop)\n }\n\n /** Reads a code point and tests it, advancing past it, or branches to `stop`. */\n private codePointStep(enc: Enc, b: Body, set: Membership, w: number, stop: Label): void {\n this.readCodePoint(enc, b, set.c, w, stop)\n this.member(set.cs, set.negate, set.c, b)\n b.op(Op.i32Eqz).brIf(stop)\n b.get(0).get(w).op(Op.i32Add).set(0)\n }\n\n /**\n * `takeUntil` and `takeUntilAny` on bytes: Teddy (as in ripgrep). Sixteen\n * starts at a time, the first `m` bytes of every literal (up to three)\n * are tested at once, with nibble tables: a byte belongs to bucket k at\n * position j when bit k is set both in the low-nibble table at its low\n * nibble and in the high-nibble table at its high nibble, and a start is\n * a candidate when one bucket holds at every position. Each candidate is\n * checked against the literals in full; the last starts, fewer than\n * sixteen, are checked one at a time. Without SIMD, with a range, or on\n * other input, the search runs in JavaScript.\n */\n private takeUntil(s: Site, node: NodeOf<\"TakeUntil\" | \"TakeUntilAny\">): string {\n const literals = Predicate.isTagged(node, \"TakeUntil\") ? [node.literal] : node.literals\n const bytes = literals.filter(Predicate.isUint8Array)\n const shortest = Math.min(...bytes.map((lit) => lit.length))\n const searchable =\n this.kind === 1 &&\n node.encoding === undefined &&\n node.min === 0 &&\n node.max === Infinity &&\n bytes.length === literals.length &&\n shortest > 0 &&\n shortest !== Infinity &&\n bytes.length <= MaxUntil &&\n simd()\n if (!searchable) return this.island(s.p, s.out, s.b, s.fail, \"the search runs in JavaScript\")\n const { b, fail } = s\n const m = Math.min(MaxPositions, shortest)\n const st = b.local()\n const c = b.local()\n const mask = b.local()\n const acc = b.localV128()\n // The tables and the nibble mask, in locals for the loop\n const position = this.teddyPosition(b, bytes, m, acc)\n b.get(0).set(st)\n b.block((found) => {\n b.block((tail) => {\n b.loop((again) => {\n // Sixteen starts need their `m` bytes inside the input\n this.end(b)\n .get(0)\n .op(Op.i32Sub)\n .i32(15 + m)\n .op(Op.i32LtS)\n .brIf(tail)\n for (let j = 0; j < m; j++) {\n position(j)\n if (j > 0) b.simd(Simd.v128And)\n }\n b.tee(acc).simd(Simd.v128AnyTrue).op(Op.i32Eqz)\n b.if(() => {\n this.advance(b, 16)\n b.br(again)\n })\n // Each candidate of the sixteen, in order, checked in full\n b.get(acc).v128(Zeros).simd(Simd.i8x16Ne).simd(Simd.i8x16Bitmask).set(mask)\n b.loop((bits) => {\n b.get(0).get(mask).op(Op.i32Ctz).op(Op.i32Add).set(c)\n this.literalAt(b, bytes, c, found)\n b.get(mask).get(mask).i32(1).op(Op.i32Sub).op(Op.i32And).tee(mask).brIf(bits)\n })\n this.advance(b, 16)\n b.br(again)\n })\n })\n b.loop((again) => {\n this.end(b).get(0).op(Op.i32Sub).i32(shortest).op(Op.i32LtS)\n this.failIf(b, fail)\n b.get(0).set(c)\n this.literalAt(b, bytes, c, found)\n this.advance(b, 1)\n b.br(again)\n })\n })\n return this.sliceValue(s, undefined, st, -1)\n }\n\n /**\n * Code that pushes, for the sixteen starts from the cursor, what position\n * `j` of the literals says: with at most three distinct bytes there,\n * 0xFF where the byte is one of them (`i8x16.eq`); otherwise Teddy's\n * bucket bits, from two nibble-table swizzles. Either way a start is a\n * candidate where the AND over the positions is not zero. The constants\n * are set up here, in locals; `v` is a scratch local.\n */\n private teddyPosition(b: Body, literals: ReadonlyArray<Uint8Array>, m: number, v: number): (j: number) => void {\n const distinct = Array.from({ length: m }, (_, j) => Arr.dedupe(literals.map((lit) => lit[j] ?? 0)))\n if (distinct.every((bytes) => bytes.length <= MaxStops)) {\n const splats = distinct.map((bytes) =>\n bytes.map((byte) => {\n const l = b.localV128()\n b.i32(byte).simd(Simd.i8x16Splat).set(l)\n return l\n })\n )\n return (j) => {\n b.get(0)\n .simd(Simd.v128Load, 0, Input + j)\n .set(v)\n b.v128(Zeros)\n for (const l of splats[j] ?? []) b.get(v).get(l).simd(Simd.i8x16Eq).simd(Simd.v128Or)\n }\n }\n const nibbles = b.localV128()\n b.v128(LowNibbles).set(nibbles)\n const tables = teddyTables(literals, m).map(([lo, hi]) => {\n const l = b.localV128()\n const h = b.localV128()\n b.v128(lo).set(l).v128(hi).set(h)\n return [l, h] as const\n })\n return (j) => {\n const [lo, hi] = tables[j] ?? [-1, -1]\n b.get(0)\n .simd(Simd.v128Load, 0, Input + j)\n .set(v)\n b.get(lo).get(v).get(nibbles).simd(Simd.v128And)\n nibbleSwizzle(b)\n b.get(hi).get(v).i32(4).simd(Simd.i8x16ShrU)\n nibbleSwizzle(b)\n b.simd(Simd.v128And)\n }\n }\n\n /** Moves the cursor to `c` and branches to `found` when one of `literals` starts at `c`. */\n private literalAt(b: Body, literals: ReadonlyArray<Uint8Array>, c: number, found: Label): void {\n for (const lit of literals) {\n b.block((next) => {\n this.end(b).get(c).op(Op.i32Sub).i32(lit.length).op(Op.i32LtS).brIf(next)\n // Compared as many bytes at a time as the literal fills\n const bytes = Array.from(lit)\n for (let i = 0; i < bytes.length;) {\n const n = chunkSize(bytes.length - i)\n b.get(c)\n compareChunk(b, bytes.slice(i, i + n), [], Input + i)\n b.brIf(next)\n i += n\n }\n b.get(c).set(0).br(found)\n })\n }\n }\n\n /** The trace and builder code of a `takeWhile`'s slice `[st, p)`. */\n private sliceValue(s: Site, enc: Enc, st: number, wide: number): string {\n const { b } = s\n if (s.out === \"\") return \"\"\n if (enc === undefined && this.kind === 1) {\n this.put(b, [() => b.get(st), () => b.get(0)])\n return this.set(s, \"I.subarray(T[i],T[i+1]);i+=2\")\n }\n const start = () => {\n b.get(st)\n if (wide >= 0) b.get(wide).i32(31).op(Op.i32Shl).op(Op.i32Or)\n }\n // A string: short ones are interned, unless they are pieces of an `escaped`, which interns its own\n if (this.plainStrings) {\n this.put(b, [start, () => b.get(0)])\n return this.set(s, `${this.decodeSlice(enc)};i+=2`)\n }\n this.put(b, [start, () => b.get(0), () => this.internCall(b, st), () => b.gget(G.w)])\n return this.interned(s.out, this.decodeSlice(enc))\n }\n\n /** Pushes the cache slot of `[st, p)` (see `intern`), testing the length inline: most long slices aren't hashed. */\n private internCall(b: Body, st: number): void {\n b.get(0).get(st).op(Op.i32Sub).i32(MaxInterned).op(Op.i32GtU)\n b.ifI32(\n () => b.i32(-1),\n () => b.get(st).get(0).call(this.intern())\n )\n }\n\n /**\n * Builder code for the string of the slice of a `takeWhile` at `T[i]`,\n * `T[i+1]`. A UTF-8 slice whose start is not negative is ASCII, which\n * `R.ascii` decodes without looking for longer sequences.\n */\n private decodeSlice(enc: Enc): string {\n if (enc === utf8 && this.kind === 1) {\n return `(T[i]<0?${this.const(enc.text)}(I,T[i]&2147483647,T[i+1]):R.ascii(I,T[i],T[i+1]))`\n }\n return enc !== undefined && this.kind === 1 ? `${this.const(enc.text)}(I,T[i],T[i+1])` : \"I.slice(T[i],T[i+1])\"\n }\n\n /** While generating the pieces of an `escaped` whose single-piece strings are interned. */\n private plainStrings = false\n\n private literal(s: Site, node: NodeOf<\"Literal\">): string {\n const { b, fail } = s\n const units = this.literalUnits(node)\n if (Result.isFailure(units)) return this.island(s.p, s.out, b, fail, units.failure)\n const { codes, constant } = units.success\n const len = codes.length\n const st = b.local()\n b.get(0).set(st)\n if (len > 0) {\n this.end(b).get(0).op(Op.i32Sub).i32(len).op(Op.i32LtS)\n this.failIf(b, fail)\n this.compareUnits(b, codes, node.caseless, fail)\n this.advance(b, len)\n }\n if (s.out === \"\") return \"\"\n if (constant) return this.set(s, this.lit(node.literal))\n this.put(b, [() => b.get(st)])\n return this.set(s, this.kind === 0 ? `I.slice(T[i],T[i]+${len});i++` : `I.subarray(T[i],T[i]+${len});i++`)\n }\n\n /**\n * The units a literal matches, and whether its value is the literal itself\n * (rather than the input it matched, as a caseless one returns), or why it\n * runs in JavaScript.\n */\n /**\n * Fails unless the input at the cursor holds `codes` (folding ASCII\n * letters with `caseless`): the units' bytes compared sixteen, eight,\n * four, two and one at a time, with `v128`, `i64` and `i32` loads, a\n * caseless letter's byte ORed with 0x20 first.\n */\n private compareUnits(b: Body, codes: ReadonlyArray<number>, caseless: boolean, fail: Label): void {\n const { bytes, fold } = unitBytes(codes, caseless, this.kind === 0 ? 2 : 1)\n // The address of the cursor's byte, once\n const at = b.local()\n if (this.kind === 0) b.get(0).i32(1).op(Op.i32Shl).set(at)\n else b.get(0).set(at)\n for (let i = 0; i < bytes.length;) {\n const n = chunkSize(bytes.length - i)\n b.get(at)\n compareChunk(b, bytes.slice(i, i + n), fold.slice(i, i + n), Input + i)\n this.failIf(b, fail)\n i += n\n }\n }\n\n private literalUnits(\n node: NodeOf<\"Literal\">\n ): Result.Result<{ readonly codes: ReadonlyArray<number>; readonly constant: boolean }, string> {\n const lit = node.literal\n const enc = node.encoding\n if (enc !== undefined) {\n if (node.caseless || !Predicate.isString(lit)) return Result.fail(\"caseless text literal\")\n const encoded = enc.encode(lit)\n return Result.succeed({\n codes: Predicate.isString(encoded) ? unitsOf(encoded) : Array.from(encoded),\n constant: true\n })\n }\n const constant = !node.caseless\n if (Predicate.isString(lit)) {\n return Result.succeed(\n this.kind === 0\n ? { codes: unitsOf(lit), constant }\n : { codes: Array.from(utf8Encoder.encode(lit)), constant: false }\n )\n }\n if (lit instanceof Uint8Array && this.kind === 1) return Result.succeed({ codes: Array.from(lit), constant })\n return Result.fail(\"the literal is not of the input's kind\")\n }\n\n /** `escaped`: segments of `normal` and escapes after the control character. */\n private escaped(s: Site, node: NodeOf<\"Escaped\">): string {\n const { b } = s\n const enc = node.encoding\n if (!this.native(enc)) return this.island(s.p, s.out, b, s.fail, \"the encoding is decoded in JavaScript\")\n const r = Option.map(Option.fromUndefinedOr(enc), (e) => this.reader(e))\n if (Option.isSome(r) && !(node.control < r.value.fast)) {\n return this.island(s.p, s.out, b, s.fail, \"the control character is decoded\")\n }\n const pieces = !node.raw && s.out !== \"\"\n const e: EscapedLocals = {\n r,\n pieces,\n // A string of one piece of `takeWhile` is interned as a whole\n internsWhole:\n pieces && Predicate.isTagged(nodeOf(node.normal), \"TakeWhile\") && (enc !== undefined || this.kind === 0),\n start: b.local(),\n seg: b.local(),\n ok: b.local(),\n ts: b.local(),\n count: b.local(),\n pieceStart: b.local(),\n slot: pieces ? this.slot(b) : -1,\n x: pieces ? this.v(s.bf) : \"\"\n }\n let normal = \"\"\n let escape = \"\"\n b.get(0).set(e.start)\n b.i32(0).set(e.count)\n b.block((exit) => {\n this.loop(b, (again) => {\n this.atEnd(b, 0)\n b.brIf(exit)\n normal = this.escapedNormal(s, node, e, again)\n // The control character?\n if (Option.isNone(r)) {\n this.atEnd(b, 0)\n b.brIf(exit)\n this.load(b, 0)\n } else {\n r.value.guard(b, 0)\n b.op(Op.i32Eqz).brIf(exit)\n r.value.unit(b, 0)\n }\n b.i32(node.control).op(Op.i32Ne).brIf(exit)\n this.advance(b, Option.match(r, { onNone: () => 1, onSome: (x) => x.width }))\n if (pieces) this.put(b, [() => b.i32(1)])\n escape = this.gen(node.escape, e.x, b, s.fail, s.bf, s.d)\n b.get(e.count).i32(1).op(Op.i32Add).set(e.count)\n b.br(again)\n })\n })\n return this.escapedValue(s, node, e, normal, escape)\n }\n\n /**\n * A segment of `normal`: one that consumed input continues the loop; one\n * that matched nothing, or failed with `Backtrack`, is dropped (with its\n * trace) for the control character to be tested.\n */\n private escapedNormal(s: Site, node: NodeOf<\"Escaped\">, e: EscapedLocals, again: Label): string {\n const { b } = s\n let code = \"\"\n b.get(0).set(e.seg).get(b.tp).set(e.ts).i32(0).set(e.ok)\n b.block((bad) => {\n if (e.pieces) this.put(b, [() => b.i32(0)])\n const plain = this.plainStrings\n this.plainStrings = e.internsWhole\n code = this.gen(node.normal, e.x, b, bad, s.bf, s.d)\n this.plainStrings = plain\n b.i32(1).set(e.ok)\n })\n b.get(e.ok)\n b.if(\n () => {\n b.get(0)\n .get(e.seg)\n .op(node.raw ? Op.i32Eq : Op.i32Ne)\n if (node.raw) {\n // `takeEscaped`: a segment that matched nothing is an error\n b.if(() => this.failWith(b, s.fail, Cut))\n b.br(again)\n return\n }\n b.if(() => {\n b.get(e.count).i32(1).op(Op.i32Add).set(e.count)\n b.get(e.seg).set(e.pieceStart)\n b.br(again)\n })\n b.get(e.ts).set(b.tp)\n },\n () => {\n this.unlessBacktrack(b, s.fail)\n b.get(e.seg).set(0).get(e.ts).set(b.tp)\n }\n )\n return code\n }\n\n /** The trace and builder code of an `escaped`'s value, from its pieces' code. */\n private escapedValue(s: Site, node: NodeOf<\"Escaped\">, e: EscapedLocals, normal: string, escape: string): string {\n const { b, out } = s\n const enc = node.encoding\n if (out === \"\") return \"\"\n if (node.raw) {\n this.put(b, [() => b.get(e.start), () => b.get(0)])\n if (enc !== undefined && this.kind === 1) return `${out}=${this.const(enc.text)}(I,T[i],T[i+1]);i+=2;`\n return `${out}=${this.kind === 0 ? \"I.slice(T[i],T[i+1])\" : \"I.subarray(T[i],T[i+1])\"};i+=2;`\n }\n b.get(e.slot).get(e.count).mem(Op.i32Store, 2, 0)\n const n = this.v(s.bf)\n const k = this.v(s.bf)\n const loop = `${out}=\"\";for(${k}=0;${k}<${n};${k}++){` + `if(T[i++]===0){${normal}}else{${escape}}${out}+=${e.x};}`\n if (!e.internsWhole) {\n // Most strings are one segment without escapes\n return `${n}=T[i++];if(${n}===1&&T[i]===0){i++;${normal}${out}=${e.x}}else{${loop}}`\n }\n // One piece, not an escape: its slice is followed by its cache slot and version\n b.get(e.count).i32(1).op(Op.i32Eq)\n b.if(() => {\n b.get(e.slot).mem(Op.i32Load, 2, 4).op(Op.i32Eqz)\n b.if(() => this.put(b, [() => this.internCall(b, e.pieceStart), () => b.gget(G.w)]))\n })\n return `${n}=T[i++];if(${n}===1&&T[i]===0){i++;${this.interned(out, this.decodeSlice(enc))}}else{${loop}}`\n }\n\n // ---------------------------------------------------------------------------\n // Interned strings\n // ---------------------------------------------------------------------------\n\n /** The strings of the cache slots, and the version of the slot each was decoded from. */\n // Only read for a slot whose version the builder decoded, so the placeholders are never returned\n // Allocated when a grammar first interns a string\n private interning = false\n private internedStrings: Array<string> = []\n private internedVersions = /*#__PURE__*/ new Int32Array(0)\n private internIndex = -1\n\n /**\n * Builder code for a string slice traced as start, end, slot and version\n * (see `intern`): the string decoded from that slot's version if there is\n * one, else `decode`, which is then kept for the slot.\n */\n private interned(out: string, decode: string): string {\n if (!this.interning) {\n this.interning = true\n this.internedStrings = new Array<string>(StringSlots).fill(\"\")\n this.internedVersions = new Int32Array(StringSlots).fill(-1)\n }\n const ks = this.const(this.internedStrings)\n const kv = this.const(this.internedVersions)\n return (\n `${out}=T[i+2];if(${out}>=0&&${kv}[${out}]===T[i+3])${out}=${ks}[${out}];` +\n `else if(${out}>=0){${kv}[${out}]=T[i+3];${out}=${ks}[${out}]=${decode}}else ${out}=${decode};i+=4;`\n )\n }\n\n /**\n * `(start, end) -> slot`: the cache slot of the units of `[start, end)`,\n * or -1 if there are more than `MaxInterned`, with the slot's version in\n * `G.w`. A slot holds the units of the latest slice hashed to it, and its\n * version changes whenever they do, so every slice traced with a slot and\n * a version has the same units, and the same string: the builder decodes\n * it once per version. The cache outlives a parse, and backtracking can't\n * invalidate it.\n */\n private intern(): number {\n if (this.internIndex >= 0) return this.internIndex\n const [index, b] = this.reserve(Ty.pair, 2)\n this.internIndex = index\n const start = 0\n const end = 1\n const len = b.local()\n const h = b.local()\n const k = b.local()\n const addr = b.local()\n const ver = b.local()\n const width = this.kind === 0 ? 2 : 1\n const unitAt = (pos: () => void) =>\n this.kind === 0\n ? (pos(), b.i32(1).op(Op.i32Shl).mem(Op.i32Load16U, 1, Input))\n : (pos(), b.mem(Op.i32Load8U, 0, Input))\n const cached = (j: () => void) => {\n b.get(addr)\n j()\n if (width === 2) b.i32(1).op(Op.i32Shl)\n b.op(Op.i32Add)\n b.mem(width === 2 ? Op.i32Load16U : Op.i32Load8U, width === 2 ? 1 : 0, 8)\n }\n b.get(end).get(start).op(Op.i32Sub).tee(len).i32(MaxInterned).op(Op.i32GtU)\n b.if(() => b.i32(-1).op(Op.return))\n b.get(len).set(h)\n b.get(start).set(k)\n b.block((done) =>\n b.loop((again) => {\n b.get(k).get(end).op(Op.i32GeU).brIf(done)\n b.get(h).i32(31).op(Op.i32Mul)\n unitAt(() => b.get(k))\n b.op(Op.i32Add).set(h)\n b.get(k).i32(1).op(Op.i32Add).set(k)\n b.br(again)\n })\n )\n b.get(h)\n .get(h)\n .i32(10)\n .op(Op.i32ShrU)\n .op(Op.i32Xor)\n .i32(StringSlots - 1)\n .op(Op.i32And)\n .set(h)\n b.get(h).i32(SlotBytes).op(Op.i32Mul).i32(Strings).op(Op.i32Add).set(addr)\n // The same units?\n b.block((differ) => {\n b.get(addr).mem(Op.i32Load, 2, 4).get(len).op(Op.i32Ne).brIf(differ)\n b.i32(0).set(k)\n b.block((same) =>\n b.loop((again) => {\n b.get(k).get(len).op(Op.i32GeU).brIf(same)\n cached(() => b.get(k))\n unitAt(() => b.get(start).get(k).op(Op.i32Add))\n b.op(Op.i32Ne).brIf(differ)\n b.get(k).i32(1).op(Op.i32Add).set(k)\n b.br(again)\n })\n )\n b.get(addr).mem(Op.i32Load, 2, 0).gset(G.w)\n b.get(h).op(Op.return)\n })\n // No: install them under a new version\n b.get(addr).mem(Op.i32Load, 2, 0).i32(1).op(Op.i32Add).set(ver)\n b.get(addr).get(ver).mem(Op.i32Store, 2, 0)\n b.get(addr).get(len).mem(Op.i32Store, 2, 4)\n b.i32(0).set(k)\n b.block((done) =>\n b.loop((again) => {\n b.get(k).get(len).op(Op.i32GeU).brIf(done)\n b.get(addr).get(k)\n if (width === 2) b.i32(1).op(Op.i32Shl)\n b.op(Op.i32Add)\n unitAt(() => b.get(start).get(k).op(Op.i32Add))\n b.mem(width === 2 ? Op.i32Store16 : Op.i32Store8, width === 2 ? 1 : 0, 8)\n b.get(k).i32(1).op(Op.i32Add).set(k)\n b.br(again)\n })\n )\n b.get(ver).gset(G.w)\n b.get(h)\n return index\n }\n\n // ---------------------------------------------------------------------------\n // Helper functions\n // ---------------------------------------------------------------------------\n\n /**\n * `(pos, end, len, tp, tlim) -> p | -1`: sets up the globals of a parse\n * and runs the root, in one call from JavaScript (setting a global from\n * JavaScript costs about as much as a call).\n */\n starter(root: number): number {\n const [index, b] = this.reserve(Ty.start, 5)\n b.get(1).gset(G.end).get(2).gset(G.len).get(3).gset(G.tp).get(4).gset(G.tlim)\n b.i32(0).gset(G.nv).i32(0).gset(G.mode)\n b.get(0).call(root)\n return index\n }\n\n /**\n * `(src, n) -> count`, for string input: widens the `n` bytes of UTF-8 at\n * `src`, which `TextEncoder#encodeInto` wrote, to the string's UTF-16\n * units at `Input`, sixteen ASCII bytes at a time with SIMD (where it is\n * available) and eight without. `encodeInto` writes each\n * lone surrogate as U+FFFD, which is one unit as well, so every unit is in\n * place; the units that are U+FFFD (or were a lone surrogate) are listed\n * as 32-bit indices from `(src + n + 3) & -4`, for JavaScript to copy from\n * the string. Returns their number.\n */\n widener(): number {\n const [index, b] = this.reserve(Ty.pair, 2)\n const src = 0\n const n = 1\n const end = b.local()\n const k = b.local()\n const c = b.local()\n const cp = b.local()\n const count = b.local()\n const list = b.local()\n const x = b.localI64()\n const byte = (at: number) => b.get(src).mem(Op.i32Load8U, 0, at)\n const cont = (at: number, shift: number) => {\n byte(at)\n b.i32(0x3f).op(Op.i32And)\n if (shift > 0) b.i32(shift).op(Op.i32Shl)\n b.op(Op.i32Or)\n }\n const unit = (delta: number, push: () => void) => {\n b.get(k).i32(1).op(Op.i32Shl)\n push()\n b.mem(Op.i32Store16, 1, Input + 2 * delta)\n }\n const step = (bytes: number, units: number, again: Label) => {\n b.get(src).i32(bytes).op(Op.i32Add).set(src)\n b.get(k).i32(units).op(Op.i32Add).set(k)\n b.br(again)\n }\n /** Spreads four bytes (the low 32 bits of `x`, shifted right by `shift`) to four 16-bit units. */\n const spread = (shift: number) => {\n b.get(x)\n if (shift > 0) b.i64(BigInt(shift)).op(Op.i64ShrU)\n b.i64(0xffffffffn).op(Op.i64And)\n b.tee(x).get(x).i64(16n).op(Op.i64Shl).op(Op.i64Or).i64(0x0000ffff0000ffffn).op(Op.i64And)\n b.tee(x).get(x).i64(8n).op(Op.i64Shl).op(Op.i64Or).i64(0x00ff00ff00ff00ffn).op(Op.i64And)\n }\n b.get(src).get(n).op(Op.i32Add).tee(end).i32(3).op(Op.i32Add).i32(-4).op(Op.i32And).set(list)\n b.block((done) =>\n b.loop((again) => {\n b.get(src).get(end).op(Op.i32GeU).brIf(done)\n // Eight ASCII bytes\n if (simd()) {\n // Sixteen ASCII bytes, with SIMD\n b.get(src).i32(16).op(Op.i32Add).get(end).op(Op.i32LeU)\n b.if(() => {\n b.get(src).simd(Simd.v128Load, 0, 0).simd(Simd.i8x16Bitmask).op(Op.i32Eqz)\n b.if(() => {\n b.get(k).i32(1).op(Op.i32Shl)\n b.get(src).simd(Simd.v128Load, 0, 0).simd(Simd.i16x8ExtendLowI8x16U).simd(Simd.v128Store, 0, Input)\n b.get(k).i32(1).op(Op.i32Shl)\n b.get(src)\n .simd(Simd.v128Load, 0, 0)\n .simd(Simd.i16x8ExtendHighI8x16U)\n .simd(Simd.v128Store, 0, Input + 16)\n step(16, 16, again)\n })\n })\n }\n b.get(src).i32(8).op(Op.i32Add).get(end).op(Op.i32LeU)\n b.if(() => {\n b.get(src).mem(Op.i64Load, 0, 0).tee(x).i64(-0x7f7f7f7f7f7f7f80n).op(Op.i64And).op(Op.i64Eqz)\n b.if(() => {\n const word = b.localI64()\n b.get(x).set(word)\n b.get(k).i32(1).op(Op.i32Shl)\n spread(0)\n b.mem(Op.i64Store, 0, Input)\n b.get(word).set(x)\n b.get(k).i32(1).op(Op.i32Shl)\n spread(32)\n b.mem(Op.i64Store, 0, Input + 8)\n step(8, 8, again)\n })\n })\n byte(0)\n b.tee(c).i32(0x80).op(Op.i32LtU)\n b.if(() => {\n unit(0, () => b.get(c))\n step(1, 1, again)\n })\n b.get(c).i32(0xe0).op(Op.i32LtU)\n b.if(() => {\n unit(0, () => {\n b.get(c).i32(0x1f).op(Op.i32And).i32(6).op(Op.i32Shl)\n cont(1, 0)\n })\n step(2, 1, again)\n })\n b.get(c).i32(0xf0).op(Op.i32LtU)\n b.if(() => {\n b.get(c).i32(0x0f).op(Op.i32And).i32(12).op(Op.i32Shl)\n cont(1, 6)\n cont(2, 0)\n b.tee(cp).i32(0xfffd).op(Op.i32Eq)\n b.if(() => {\n b.get(count).i32(2).op(Op.i32Shl).get(list).op(Op.i32Add).get(k).mem(Op.i32Store, 2, 0)\n b.get(count).i32(1).op(Op.i32Add).set(count)\n })\n unit(0, () => b.get(cp))\n step(3, 1, again)\n })\n b.get(c).i32(0x07).op(Op.i32And).i32(18).op(Op.i32Shl)\n cont(1, 12)\n cont(2, 6)\n cont(3, 0)\n b.i32(0x10000).op(Op.i32Sub).set(cp)\n unit(0, () => b.get(cp).i32(10).op(Op.i32ShrU).i32(0xd800).op(Op.i32Or))\n unit(1, () => b.get(cp).i32(0x3ff).op(Op.i32And).i32(0xdc00).op(Op.i32Or))\n step(4, 2, again)\n })\n )\n b.get(count)\n return index\n }\n\n /** The decoder of a built-in encoding: `(p) -> code point | -1 | -2`, the width in `G.w`. */\n private decoder(enc: Encoding<any>): number {\n const known = this.decoders.get(enc)\n if (known !== undefined) return known\n const [index, b] = this.reserve(Ty.rule)\n this.decoders.set(enc, index)\n const c = b.local()\n const d = b.local()\n const ret = (code: () => void, width: number) => {\n b.i32(width).gset(G.w)\n code()\n b.op(Op.return)\n }\n const fail = (code: number) => b.i32(code).op(Op.return)\n const at = (k: number) => this.load(b, 0, k)\n const inRange = (k: number) => this.end(b.get(0).i32(k).op(Op.i32Add)).op(Op.i32GeU)\n if (enc === string) {\n at(0)\n b.tee(c).i32(0xf800).op(Op.i32And).i32(0xd800).op(Op.i32Ne)\n b.if(() => ret(() => b.get(c), 1))\n b.get(c).i32(0xdbff).op(Op.i32LeU)\n b.if(() => {\n inRange(1)\n b.if(() => fail(-2))\n at(1)\n b.tee(d).i32(0xfc00).op(Op.i32And).i32(0xdc00).op(Op.i32Eq)\n b.if(() => ret(() => pair(b, c, d), 2))\n })\n fail(-1)\n } else if (enc === utf16le || enc === utf16be) {\n const [lo, hi] = enc === utf16le ? [0, 1] : [1, 0]\n const unitAt = (k: number) => {\n at(k + lo)\n at(k + hi)\n b.i32(8).op(Op.i32Shl, Op.i32Or)\n }\n inRange(1)\n b.if(() => fail(-2))\n unitAt(0)\n b.tee(c).i32(0xf800).op(Op.i32And).i32(0xd800).op(Op.i32Ne)\n b.if(() => ret(() => b.get(c), 2))\n b.get(c).i32(0xdbff).op(Op.i32GtU)\n b.if(() => fail(-1))\n inRange(3)\n b.if(() => fail(-2))\n unitAt(2)\n b.tee(d).i32(0xfc00).op(Op.i32And).i32(0xdc00).op(Op.i32Eq)\n b.if(() => ret(() => pair(b, c, d), 4))\n fail(-1)\n } else {\n // UTF-8, as `decodeUtf8`\n const e = b.local()\n const f = b.local()\n const cont = (l: number) => b.get(l).i32(0xc0).op(Op.i32And).i32(0x80).op(Op.i32Ne)\n /** Fails unless the second byte, in `d`, may follow the lead byte: `a` and `b` are the leads with a range of their own. */\n const second = (a: readonly [number, number, number], z: readonly [number, number, number]) => {\n b.get(c).i32(a[0]).op(Op.i32Eq)\n b.ifI32(\n () => b.get(d).i32(a[1]).op(Op.i32Sub).i32(a[2]).op(Op.i32GtU),\n () => {\n b.get(c).i32(z[0]).op(Op.i32Eq)\n b.ifI32(\n () => b.get(d).i32(z[1]).op(Op.i32Sub).i32(z[2]).op(Op.i32GtU),\n () => cont(d)\n )\n }\n )\n b.if(() => fail(-1))\n }\n /** Reads the continuation byte `k` into local `l`, failing if it is missing or malformed. */\n const next = (k: number, l: number) => {\n inRange(k)\n b.if(() => fail(-2))\n at(k)\n b.set(l)\n cont(l)\n b.if(() => fail(-1))\n }\n at(0)\n b.tee(c).i32(0x80).op(Op.i32LtU)\n b.if(() => ret(() => b.get(c), 1))\n b.get(c).i32(0xc2).op(Op.i32LtU)\n b.if(() => fail(-1))\n inRange(1)\n b.if(() => fail(-2))\n at(1)\n b.set(d)\n b.get(c).i32(0xe0).op(Op.i32LtU)\n b.if(() => {\n cont(d)\n b.if(() => fail(-1))\n ret(() => {\n b.get(c).i32(0x1f).op(Op.i32And).i32(6).op(Op.i32Shl)\n b.get(d).i32(0x3f).op(Op.i32And).op(Op.i32Or)\n }, 2)\n })\n b.get(c).i32(0xf0).op(Op.i32LtU)\n b.if(() => {\n // Overlong (E0 80..9F) and surrogates (ED A0..BF)\n second([0xe0, 0xa0, 0x1f], [0xed, 0x80, 0x1f])\n next(2, e)\n ret(() => {\n b.get(c).i32(0x0f).op(Op.i32And).i32(12).op(Op.i32Shl)\n b.get(d).i32(0x3f).op(Op.i32And).i32(6).op(Op.i32Shl).op(Op.i32Or)\n b.get(e).i32(0x3f).op(Op.i32And).op(Op.i32Or)\n }, 3)\n })\n b.get(c).i32(0xf5).op(Op.i32LtU)\n b.if(() => {\n // Overlong (F0 80..8F) and above U+10FFFF (F4 90..BF)\n second([0xf0, 0x90, 0x2f], [0xf4, 0x80, 0x0f])\n next(2, e)\n next(3, f)\n ret(() => {\n b.get(c).i32(0x07).op(Op.i32And).i32(18).op(Op.i32Shl)\n b.get(d).i32(0x3f).op(Op.i32And).i32(12).op(Op.i32Shl).op(Op.i32Or)\n b.get(e).i32(0x3f).op(Op.i32And).i32(6).op(Op.i32Shl).op(Op.i32Or)\n b.get(f).i32(0x3f).op(Op.i32And).op(Op.i32Or)\n }, 4)\n })\n fail(-1)\n }\n return index\n }\n\n /**\n * `scanFloatString` / `scanFloatBytes` at `p`: returns where the number\n * ends, with its value in `G.f`; -1 when the text doesn't start like a\n * decimal number; -2 when the float parser fails there. Numbers with more\n * than 15 significant digits or an exponent beyond ±22 are converted by\n * the JavaScript scan, so the value is always `Number`'s.\n */\n private scanFloat(enc: Enc): number {\n const known = enc === undefined ? this.tokenFloatScanner : (this.floatScanners.get(enc) ?? -1)\n if (known >= 0) return known\n const [index, b] = this.reserve(Ty.rule)\n if (enc === undefined) this.tokenFloatScanner = index\n else this.floatScanners.set(enc, index)\n // Decimal notation is ASCII: one unit per character in every encoding read here\n const r = enc === undefined ? undefined : this.reader(enc)\n const width = r?.width ?? 1\n const unit = (k: number) => (r === undefined ? this.load(b, k) : r.unit(b, k))\n const i = 0\n const c = b.local()\n const digits = b.local()\n const e10 = b.local()\n const e = b.local()\n const j = b.local()\n const neg = b.local()\n const start = b.local()\n const high = b.localF64()\n const low = b.localF64()\n const v = b.localF64()\n const isDigit = () => b.get(c).i32(48).op(Op.i32Sub).i32(9).op(Op.i32LeU)\n /** `c = unit(k)`, or -1 if there is no whole unit at `k` */\n const read = (k: number) => {\n if (r === undefined) this.end(b.get(k)).op(Op.i32LtU)\n else r.guard(b, k)\n b.ifI32(\n () => unit(k),\n () => b.i32(-1)\n )\n b.set(c)\n }\n const adv = (l: number) => b.get(l).i32(width).op(Op.i32Add).set(l)\n const inc = (l: number) => b.get(l).i32(1).op(Op.i32Add).set(l)\n const digit = (frac: boolean) => {\n b.get(digits).i32(15).op(Op.i32LtU)\n b.if(\n () => {\n b.get(c).i32(48).op(Op.i32Ne).get(high).f64(0).op(Op.f64Ne).op(Op.i32Or)\n b.if(() => {\n b.get(high).f64(10).op(Op.f64Mul).get(c).i32(48).op(Op.i32Sub).op(Op.f64ConvertI32U).op(Op.f64Add)\n b.set(high)\n inc(digits)\n })\n if (frac) b.get(e10).i32(1).op(Op.i32Sub).set(e10)\n },\n () => {\n // Digits 16 to 19 go to `low`; the rest only scale the number\n const addLow = () =>\n b.get(low).f64(10).op(Op.f64Mul).get(c).i32(48).op(Op.i32Sub).op(Op.f64ConvertI32U).op(Op.f64Add).set(low)\n b.get(digits).i32(19).op(Op.i32LtU)\n if (frac) {\n b.if(() => {\n addLow()\n b.get(e10).i32(1).op(Op.i32Sub).set(e10)\n })\n } else b.if(addLow, () => inc(e10))\n inc(digits)\n }\n )\n }\n b.get(i).set(start)\n read(i)\n b.get(c).i32(45).op(Op.i32Eq).get(c).i32(43).op(Op.i32Eq).op(Op.i32Or)\n b.if(\n () => {\n b.get(i).i32(width).op(Op.i32Add).set(j)\n read(j)\n isDigit()\n b.get(c).i32(46).op(Op.i32Eq).op(Op.i32Or).op(Op.i32Eqz)\n b.if(() => b.i32(-1).op(Op.return))\n adv(i)\n },\n () => {\n isDigit()\n b.get(c).i32(46).op(Op.i32Eq).op(Op.i32Or).op(Op.i32Eqz)\n b.if(() => b.i32(-1).op(Op.return))\n }\n )\n b.get(c).i32(46).op(Op.i32Ne)\n b.if(\n () => {\n b.loop((more) => {\n digit(false)\n adv(i)\n read(i)\n isDigit()\n b.brIf(more)\n })\n b.get(c).i32(46).op(Op.i32Eq)\n b.if(() => {\n adv(i)\n read(i)\n })\n },\n () => {\n adv(i)\n read(i)\n isDigit()\n b.op(Op.i32Eqz)\n b.if(() => b.i32(-2).op(Op.return))\n }\n )\n b.block((done) =>\n b.loop((more) => {\n isDigit()\n b.op(Op.i32Eqz).brIf(done)\n digit(true)\n adv(i)\n read(i)\n b.br(more)\n })\n )\n b.get(c).i32(32).op(Op.i32Or).i32(101).op(Op.i32Eq)\n b.if(() => {\n b.get(i).i32(width).op(Op.i32Add).set(j)\n read(j)\n b.get(c).i32(45).op(Op.i32Eq).set(neg)\n b.get(neg).get(c).i32(43).op(Op.i32Eq).op(Op.i32Or)\n b.if(() => {\n adv(j)\n read(j)\n })\n isDigit()\n b.if(() => {\n b.i32(0).set(e)\n b.loop((more) => {\n b.get(e).i32(1000000).op(Op.i32LtS)\n b.if(() => b.get(e).i32(10).op(Op.i32Mul).get(c).i32(48).op(Op.i32Sub).op(Op.i32Add).set(e))\n adv(j)\n read(j)\n isDigit()\n b.brIf(more)\n })\n b.get(e10).i32(0).get(e).op(Op.i32Sub).get(e).get(neg).op(Op.select).op(Op.i32Add).set(e10)\n b.get(j).set(i)\n })\n })\n // The value\n unit(start)\n b.i32(45).op(Op.i32Eq).set(neg)\n b.get(high).f64(0).op(Op.f64Eq)\n b.if(() => {\n b.f64(-0).f64(0).get(neg).op(Op.select).gset(G.f)\n b.get(i).op(Op.return)\n })\n /** `exact[k]`, for `k` in local `l` (or `-l` when `negate`). */\n const pow = (l: number, negate = false) => {\n if (negate) b.i32(0).get(l).op(Op.i32Sub)\n else b.get(l)\n b.i32(3).op(Op.i32Shl).mem(Op.f64Load, 3, Pow10)\n }\n // As `decimal` (internal/numbers.ts): the same double operations, so the same doubles\n const [ph, pl, t, ah, al, bh, bl, wh, wl, xh, xl, pp, err] = Array.from({ length: 13 }, () => b.localF64())\n const lowDigits = b.local()\n /** `twoProduct(a, b)`: `ph + pl` is exactly `a * b`. */\n const twoProduct = (x: () => void, y: () => void) => {\n x()\n y()\n b.op(Op.f64Mul).set(ph)\n b.f64(134217729)\n x()\n b.op(Op.f64Mul).set(t)\n b.get(t).get(t)\n x()\n b.op(Op.f64Sub).op(Op.f64Sub).set(ah)\n x()\n b.get(ah).op(Op.f64Sub).set(al)\n b.f64(134217729)\n y()\n b.op(Op.f64Mul).set(t)\n b.get(t).get(t)\n y()\n b.op(Op.f64Sub).op(Op.f64Sub).set(bh)\n y()\n b.get(bh).op(Op.f64Sub).set(bl)\n b.get(ah).get(bh).op(Op.f64Mul).get(ph).op(Op.f64Sub)\n b.get(ah).get(bl).op(Op.f64Mul).op(Op.f64Add)\n b.get(al).get(bh).op(Op.f64Mul).op(Op.f64Add)\n b.get(al).get(bl).op(Op.f64Mul).op(Op.f64Add).set(pl)\n }\n b.block((slow) => {\n b.get(digits).i32(19).op(Op.i32GtU).brIf(slow)\n b.get(e10).i32(22).op(Op.i32Add).i32(44).op(Op.i32GtU).brIf(slow)\n b.get(digits).i32(15).op(Op.i32LeU)\n b.if(\n () => {\n // Up to 15 digits: one exact multiplication or division (Clinger's fast path)\n b.get(e10).i32(0).op(Op.i32Eq)\n b.if(\n () => b.get(high).set(v),\n () => {\n b.get(e10).i32(0).op(Op.i32GtS)\n b.if(\n () => {\n b.get(high)\n pow(e10)\n b.op(Op.f64Mul).set(v)\n },\n () => {\n b.get(high)\n pow(e10, true)\n b.op(Op.f64Div).set(v)\n }\n )\n }\n )\n },\n () => {\n // 16 to 19 digits: double-double, kept when its error bound rounds to one double\n b.get(digits).i32(15).op(Op.i32Sub).set(lowDigits)\n twoProduct(\n () => b.get(high),\n () => pow(lowDigits)\n )\n b.get(ph).get(low).op(Op.f64Add).set(wh)\n b.get(pl).get(low).get(wh).get(ph).op(Op.f64Sub).op(Op.f64Sub).op(Op.f64Add).set(wl)\n b.get(e10).i32(0).op(Op.i32GeS)\n b.if(\n () => {\n pow(e10)\n b.set(pp)\n twoProduct(\n () => b.get(wh),\n () => b.get(pp)\n )\n b.get(ph).set(xh)\n b.get(pl).get(wl).get(pp).op(Op.f64Mul).op(Op.f64Add).set(xl)\n },\n () => {\n pow(e10, true)\n b.set(pp)\n b.get(wh).get(pp).op(Op.f64Div).set(xh)\n twoProduct(\n () => b.get(xh),\n () => b.get(pp)\n )\n b.get(wh).get(ph).op(Op.f64Sub).get(pl).op(Op.f64Sub).get(wl).op(Op.f64Add).get(pp).op(Op.f64Div).set(xl)\n }\n )\n b.get(xh).get(xl).op(Op.f64Add).set(v)\n b.get(xh)\n .op(Op.f64Abs)\n .f64(1 / 2 ** 96)\n .op(Op.f64Mul)\n .set(err)\n b.get(xh).get(xl).get(err).op(Op.f64Add).op(Op.f64Add).get(v).op(Op.f64Ne).brIf(slow)\n b.get(xh).get(xl).get(err).op(Op.f64Sub).op(Op.f64Add).get(v).op(Op.f64Ne).brIf(slow)\n }\n )\n b.get(v).op(Op.f64Neg).get(v).get(neg).op(Op.select).gset(G.f)\n b.get(i).op(Op.return)\n })\n // Anything else: `Number`, in JavaScript\n b.get(start).get(i).call(Imp.float).gset(G.f)\n b.get(i)\n return index\n }\n}\n\nconst unitsOf = (s: string): Array<number> => Array.from({ length: s.length }, (_, i) => s.charCodeAt(i))\n\nconst utf8Encoder = /*#__PURE__*/ new TextEncoder()\n\n/** The powers of ten that doubles represent exactly, as stored at `Pow10`. */\nconst powersOfTen: Uint8Array = /*#__PURE__*/ new Uint8Array(\n /*#__PURE__*/ new Float64Array(/*#__PURE__*/ Array.from({ length: 23 }, (_, k) => 10 ** k)).buffer\n)\n\n// -----------------------------------------------------------------------------\n// Building and running\n// -----------------------------------------------------------------------------\n\n/** Runtime helpers of the builder (`R`). */\nconst fromCharCode = String.fromCharCode\n\n/**\n * The text of ASCII bytes. Short ones are built from their codes, about a\n * third faster than `utf8.text`, which tests every byte for a longer\n * sequence; long ones are decoded by `TextDecoder`.\n */\nconst ascii = (b: Uint8Array, start: number, end: number): string => {\n const n = end - start\n if (n > 24) return utf8.text(b, start, end)\n if (n <= 4) {\n if (n === 0) return \"\"\n if (n === 1) return charOf(b[start])\n if (n === 2) return fromCharCode(b[start], b[start + 1])\n if (n === 3) return fromCharCode(b[start], b[start + 1], b[start + 2])\n return fromCharCode(b[start], b[start + 1], b[start + 2], b[start + 3])\n }\n let s = fromCharCode(b[start], b[start + 1], b[start + 2], b[start + 3])\n for (let i = start + 4; i < end; i++) s += charOf(b[i])\n return s\n}\n\nconst runtime = { some: Option.some, none: Option.none, charOf, isPlainKey, addEntry, flushEntries, ascii }\n\n/** A parser's value, as steps return it. */\ntype Value = ReturnType<Step>\n\n/**\n * The generated builder. `bind` gives it the views of the memory, the\n * input and the state of a parse (again whenever the memory grows, which\n * replaces the views), `unbind` drops them; then `root` builds the value of\n * the root and `value` that of value island `w`, from the trace at index `i`.\n */\ninterface Builder {\n readonly bind: (\n t: Int32Array,\n f: Float64Array,\n input: string | Uint8Array,\n end: number,\n values: Array<Value>,\n state: State<any>\n ) => void\n readonly unbind: () => void\n readonly root: (i: number) => Value\n readonly value: (w: number, i: number) => Value\n}\n\n/** The state outside a parse: islands only run during one. */\nconst idle = /*#__PURE__*/ new State(\"\")\n\nconst compileWasm = (root: ParserLike, kind: 0 | 1): Result.Result<Compiled, string> => {\n const c = new WasmCompiler(kind)\n c.countRefs(root)\n const rootIndex = c.rule(root, true)\n c.flush()\n const widen = kind === 0 ? c.widener() : -1\n const start = c.starter(rootIndex)\n if (c.functions.some(([, body]) => body.invalid)) return Result.fail(\"a branch to a label out of scope\")\n const globals = [\n { type: I32, init: 0 },\n { type: I32, init: 0 },\n { type: I32, init: 0 },\n { type: I32, init: 0 },\n { type: I32, init: 0 },\n { type: I32, init: 0 },\n { type: I32, init: 0 },\n { type: F64, init: 0 }\n ]\n const tables = new Uint8Array(c.tables.length * TableSize)\n c.tables.forEach((t, i) => tables.set(t, i * TableSize))\n const bytes = encodeModule({\n types: [\n { params: [I32], results: [I32] },\n { params: [I32, I32], results: [I32] },\n { params: [], results: [I32] },\n { params: [I32, I32], results: [F64] },\n { params: [I32, I32, I32, I32, I32], results: [I32] }\n ],\n imports: [\n [\"env\", \"island\", Ty.pair],\n [\"env\", \"grow\", Ty.grow],\n [\"env\", \"test\", Ty.pair],\n [\"env\", \"float\", Ty.toF64],\n [\"env\", \"check\", Ty.pair]\n ],\n memoryPages: 2,\n functions: c.functions,\n globals,\n exports: [\n [\"root\", 0, rootIndex],\n ...(widen < 0 ? [] : [[\"widen\", 0, widen] as const]),\n [\"start\", 0, start],\n [\"mode\", 3, G.mode],\n [\"end\", 3, G.end],\n [\"len\", 3, G.len],\n [\"tp\", 3, G.tp],\n [\"tlim\", 3, G.tlim],\n [\"nv\", 3, G.nv]\n ],\n data: [\n [0, tables],\n [Pow10, powersOfTen]\n ]\n })\n const source =\n `\"use strict\";let T,F,I,E,V,S,N=0;${c.builders.join(\"\")}${c.valueFns.join(\"\")}` +\n `const W=[${c.valueFns.map((_, k) => `w${k}`).join(\",\")}];` +\n `return{bind(t,f,inp,e,vals,s){T=t;F=f;I=inp;E=e;V=vals;S=s},unbind(){T=F=I=V=S=void 0},` +\n `root(i){return b${rootIndex}(i)},value(w,i){return W[w](i)}}`\n const build: Builder = new globalThis.Function(\"C\", \"R\", source)(c.constants, runtime)\n return run(root, c, bytes, kind, build, source)\n}\n\n/** What a parse calls in an instance of a module: its functions are typed by the module's own type section. */\ninterface Entries {\n readonly widen: Function\n readonly start: Function\n readonly mode: WebAssembly.Global\n}\n\n/** A global of a module's exports. */\nconst exportedGlobal = (exports: WebAssembly.Exports, name: string): Result.Result<WebAssembly.Global, string> => {\n const g = exports[name]\n return g instanceof WebAssembly.Global ? Result.succeed(g) : Result.fail(`no global ${name}`)\n}\n\nconst run = (\n root: ParserLike,\n c: WasmCompiler,\n bytes: Uint8Array<ArrayBuffer>,\n kind: 0 | 1,\n build: Builder,\n source: string\n): Result.Result<Compiled, string> => {\n let memory = new WebAssembly.Memory({ initial: 2 })\n // `memory.buffer` is slow to read: its size, as of the latest growth\n let size = memory.buffer.byteLength\n let i32 = new Int32Array(memory.buffer)\n let f64 = new Float64Array(memory.buffer)\n let u8 = new Uint8Array(memory.buffer)\n const views = () => {\n i32 = new Int32Array(memory.buffer)\n f64 = new Float64Array(memory.buffer)\n u8 = new Uint8Array(memory.buffer)\n }\n /**\n * Grows the memory to at least `bytes`, doubling it: false when that is\n * more than {@link MaxMemory}, or more than the engine will give.\n */\n const reserve = (bytes: number): boolean => {\n const have = size\n if (have >= bytes) return true\n if (bytes > MaxMemory) return false\n const pages = Math.ceil((Math.min(Math.max(bytes, have * 2), MaxMemory) - have) / PageSize)\n // `grow` throws a `RangeError` when the engine cannot allocate the pages\n const grown = Result.try(() => memory.grow(pages))\n if (Result.isFailure(grown)) return false\n size = memory.buffer.byteLength\n views()\n return true\n }\n const steps: Array<Step> = c.islands.map(({ parser }) => jitBackend.build(parser, kind, false).step ?? parser.step)\n const used = c.islands.map(({ used }) => used)\n const tests = c.tests\n const checks = c.checks\n let state: State<any> = idle\n const values: Array<Value> = []\n const env = {\n island: (id: number, pos: number): number => {\n const s = state\n s.pos = pos\n const a = steps[id](s)\n if (a === Fail) return s.mode === \"Cut\" ? -2 : -1\n if (used[id]) values.push(a)\n return s.pos\n },\n // Doubles the memory, returning the new limit of the trace\n grow: (): number => {\n if (size >= MaxMemory || !reserve(Math.min(size * 2, MaxMemory))) throw new MemoryExhausted()\n // The views changed\n build.bind(i32, f64, state.input, state.end, values, state)\n return size - Slack\n },\n test: (id: number, cp: number): number => tests[id](cp),\n // A value island: the value of its parser, built from its trace at `from`, and the callback\n check: (id: number, from: number): number => {\n const s = state\n // `from` is a byte offset below 2 GiB (`MaxMemory`); unsigned all the same, were it ever not\n const a = checks[id](build.value(id, from >>> 2))\n if (a === Fail) {\n s.mode = \"Backtrack\"\n return 0\n }\n values.push(a)\n return 1\n },\n // The value of the float text at `[start, end)`, which is ASCII: one byte each, or a\n // byte and a zero byte in UTF-16\n float: (start: number, end: number): number => {\n const input: string | Uint8Array = state.input\n return toFloat(\n Predicate.isString(input) ? input.slice(start, end) : latin1.text(input, start, end).replace(/\\0/g, \"\")\n )\n }\n }\n const module = new WebAssembly.Module(bytes)\n /** The entry points of an instance of the module over `mem`. */\n const instantiate = (mem: WebAssembly.Memory): Result.Result<Entries, string> => {\n const exported = new WebAssembly.Instance(module, { env: { ...env, mem } }).exports\n const rootFn = exported.root\n if (!Predicate.isFunction(rootFn)) return Result.fail(\"no root function\")\n const widenFn = kind === 0 ? exported.widen : rootFn\n if (!Predicate.isFunction(widenFn)) return Result.fail(\"no widen function\")\n const startFn = exported.start\n if (!Predicate.isFunction(startFn)) return Result.fail(\"no start function\")\n return Result.map(exportedGlobal(exported, \"mode\"), (mode) => ({ widen: widenFn, start: startFn, mode }))\n }\n const first = instantiate(memory)\n if (Result.isFailure(first)) return Result.fail(first.failure)\n let entries = first.success\n let busy = false\n /** The JIT's step for the parser, built on first use. */\n let fallback: Step = (s) => {\n fallback = jitBackend.build(root, kind, false).step ?? root.step\n return fallback(s)\n }\n /** Copies the input into memory, scans it and builds the value. */\n /**\n * Copies a string's UTF-16 units into memory, at `staging` for its UTF-8\n * (see `widener`): standard `ArrayBuffer` views and `TextEncoder`, so the\n * same code runs everywhere, and a memory backed by a `SharedArrayBuffer`\n * would take it as well.\n */\n const copyString = (input: string, staging: number) => {\n const { written } = utf8Encoder.encodeInto(input, u8.subarray(staging, staging + 3 * input.length))\n const replaced: number = entries.widen(staging, written)\n if (replaced === 0) return\n // U+FFFD in the string, or a lone surrogate that `encodeInto` replaced by it: its unit, as it is\n const view = new DataView(memory.buffer)\n const list = (staging + written + 3) >> 2\n for (let r = 0; r < replaced; r++) {\n const at = i32[list + r]\n view.setUint16(Input + 2 * at, input.charCodeAt(at), true)\n }\n }\n /** The string whose units are in memory, if any (`\"\"`: none). */\n let copied = \"\"\n const parse = (s: State<any>): Value => {\n const input: string | Uint8Array = s.input\n const n = input.length\n const inputBytes = kind === 0 ? 2 * n : n\n const traceStart = (Input + inputBytes + 15) & -16\n // Strings are staged where the trace goes: 3 bytes of UTF-8 and 4 of list at most per unit\n if (!reserve(traceStart + Math.max(Slack * 4, inputBytes * 4, kind === 0 ? 7 * n + 16 : 0))) {\n throw new MemoryExhausted()\n }\n if (Predicate.isString(input)) {\n // Strings never change: one already in memory (parsed again, or from another offset) stays there\n if (input !== copied) {\n copied = \"\"\n copyString(input, traceStart)\n copied = input\n }\n } else {\n // Bytes may change between parses: copy what the scan can read, from the cursor to the end\n u8.set(s.pos === 0 && s.end === n ? input : input.subarray(s.pos, s.end), Input + s.pos)\n }\n values.length = 0\n state = s\n build.bind(i32, f64, input, s.end, values, s)\n const r: number = entries.start(s.pos, s.end, n, traceStart, size - Slack)\n if (r < 0) {\n s.mode = entries.mode.value === Cut ? \"Cut\" : \"Backtrack\"\n return Fail\n }\n s.pos = r\n return build.root(traceStart >>> 2)\n }\n /**\n * Gives the module a new memory of the initial size, dropping the one a\n * large parse grew (and the string it held). An instance is bound to its\n * memory, so the module is instantiated again; its data segments fill\n * the tables in.\n */\n const release = () => {\n const fresh = new WebAssembly.Memory({ initial: 2 })\n const next = instantiate(fresh)\n // The module instantiated once already, with these imports; were it to fail, the grown memory stays\n if (Result.isFailure(next)) return\n memory = fresh\n size = fresh.buffer.byteLength\n views()\n copied = \"\"\n entries = next.success\n }\n /** The bytes copied by the latest parse: parsing them again from further on is a driver at work. */\n let lastBytes: Uint8Array = new Uint8Array(0)\n /** The state of the parse `parsePending` runs: `Result.try` takes a function without arguments. */\n let pending: State<any> = idle\n const parsePending = () => parse(pending)\n const step: Step = (s) => {\n // A callback that parses with the same parser, while this one runs, runs the JIT\n if (busy) return fallback(s)\n const input: string | Uint8Array = s.input\n if (!Predicate.isString(input)) {\n // Bytes can change, so they are copied on every parse; a driver parsing one token at a time\n // from a large buffer would copy the rest of it for each token, where the JIT copies nothing\n const again = input === lastBytes && s.pos > 0 && s.end - s.pos > LargeRest\n lastBytes = input\n if (again) return fallback(s)\n }\n busy = true\n // Whatever happens (a callback may throw), the next parse starts afresh\n pending = s\n const from = s.pos\n const result = Result.try(parsePending)\n build.unbind()\n state = idle\n pending = idle\n busy = false\n values.length = 0\n if (size > ReleaseAbove) release()\n if (Result.isFailure(result)) {\n // The input, or its trace, needs more memory than there is: the JIT parses it in place\n if (result.failure instanceof MemoryExhausted) {\n s.pos = from\n return fallback(s)\n }\n throw result.failure\n }\n return result.success\n }\n return Result.succeed({ backend: \"wasm\", step, guarded: false, fallbacks: c.fallbacks, error: undefined, source })\n}\n\n/**\n * The WebAssembly compiler as a backend. Streaming builds, array input and\n * environments without `WebAssembly` or `new Function` use the JIT, as does\n * a parser whose module fails to build.\n */\nexport const backend: Backend = {\n build: (p, kind, resumable) => {\n if (resumable || kind === 2 || !supported()) return jitBackend.build(p, kind, resumable)\n // `compileWasm` fails when the module can't be built here; a throw is a bug, and both use the JIT\n const built = Result.flatMap(\n Result.try(() => compileWasm(p, kind)),\n (r) => r\n )\n return Result.match(built, {\n onSuccess: (compiled) => compiled,\n onFailure: (error) => ({ ...jitBackend.build(p, kind, resumable), wasmError: error })\n })\n }\n}\n"],"mappings":"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"}
|