parseman 0.60.2 → 0.60.3

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.
@@ -448,6 +448,8 @@ export declare function ownTableProgram(prog: TableProgram, resolved?: ResolvedT
448
448
  readonly choiceRollbackMasks?: ReadonlyMap<number, number>;
449
449
  readonly failureRollbackCleanSites?: ReadonlySet<number>;
450
450
  readonly nonCommittingChoiceSites?: ReadonlySet<number>;
451
+ readonly choiceLogRollbackMasks?: ReadonlyMap<number, number>;
452
+ readonly failureLogRollbackSites?: ReadonlySet<number>;
451
453
  }): TableProgram;
452
454
  /** Compiler-only choice rollback authority, consumed while printing a static
453
455
  * assembly and never serialized into the shipped table. */
@@ -459,6 +461,13 @@ export declare function choiceCannotCommit(prog: TableProgram, ip: number): bool
459
461
  * capture, trivia, field, or error sink. Static assembly consumes it to omit the
460
462
  * enclosing mark and rollback; it is never serialized into the shipped table. */
461
463
  export declare function failureRollbackClean(prog: TableProgram, ip: number): boolean;
464
+ /** The arms of the choice at `ip` the census counts as clean whose failure can
465
+ * still leave trivia-log rows: a node they reach fails after recording trivia
466
+ * (`encode.ts` `choiceLogRollbackMasks`). Zero without that authority. */
467
+ export declare function choiceLogRollbackMask(prog: TableProgram, ip: number): number;
468
+ /** An `optional()` or `attempt()` row `failureRollbackClean` admits whose failed
469
+ * child can still leave trivia-log rows, for the same reason. */
470
+ export declare function failureLogRollback(prog: TableProgram, ip: number): boolean;
462
471
  /** A compiled entry, shaped exactly like a codegen rule function. */
463
472
  export type TableRule = (input: string, pos: number, ctx: ParseContext) => ParseResult<unknown>;
464
473
  /** Encode consecutive `[lo, hi]` code-point pairs without truncating astral endpoints. */
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/table/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/table/program.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -13,5 +13,5 @@
13
13
  * Kept in sync with `package.json` by `test/unit/version-sync.test.ts`, which fails
14
14
  * the build if this constant drifts from the published version.
15
15
  */
16
- export declare const PARSEMAN_VERSION = "0.60.2";
16
+ export declare const PARSEMAN_VERSION = "0.60.3";
17
17
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parseman",
3
- "version": "0.60.2",
3
+ "version": "0.60.3",
4
4
  "packageManager": "pnpm@10.15.1",
5
5
  "engines": {
6
6
  "node": "^20.19.0 || >=22.13.0"
@@ -186,7 +186,10 @@ export function alwaysConsumes(p: Combinator<unknown>, seen: Set<Combinator<unkn
186
186
  * internally. optional/many never "fail" with partial output. Delegating
187
187
  * wrappers (transform/label/grammar/withCtx/expect) pass through to inner.
188
188
  */
189
- export function mayLeavePartialCapture(p: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set(), triviaActive = true): boolean {
189
+ export function mayLeavePartialCapture(
190
+ p: Combinator<unknown>, seen: Set<Combinator<unknown>> = new Set(), triviaActive = true,
191
+ throughNodes: boolean | ((choice: Combinator<unknown>) => boolean) = false,
192
+ ): boolean {
190
193
  if (seen.has(p)) return false
191
194
  seen.add(p)
192
195
  const d = p._def
@@ -211,15 +214,26 @@ export function mayLeavePartialCapture(p: Combinator<unknown>, seen: Set<Combina
211
214
  return false
212
215
  // A run's prefixes are probed detached; only its body can capture.
213
216
  case 'lines':
214
- return mayLeavePartialCapture(d.body, seen, triviaActive)
215
- // node() captures into its own private buffers and rolls them back on
216
- // failure (emitNode restores _ctx.* and never pushes on the !ok path).
217
+ return mayLeavePartialCapture(d.body, seen, triviaActive, throughNodes)
218
+ // node() captures its children into a frame of its own and drops it on
219
+ // failure. The trivia logs (`_triviaLog`, `_rootTriviaLog`) are not part of
220
+ // that frame: trivia its body scanned before failing stays recorded. With
221
+ // `throughNodes` (a program that installs trivia somewhere) a node leaves
222
+ // what its body leaves; without, it leaves nothing.
217
223
  case 'node':
218
- return false
219
- // choice/firstMatch already roll back each failed arm; on overall failure
220
- // nothing committed remains.
224
+ return throughNodes && mayLeavePartialCapture(d.parser, seen, triviaActive, throughNodes)
225
+ // choice/firstMatch already roll back each failed arm's captures; on overall
226
+ // failure nothing committed remains. The trivia logs are the exception: a
227
+ // choice the table lowers as an exclusive dispatch runs its one selected arm
228
+ // with no mark of its own (`emit-assembly.ts`, `table.exclusive`), so the
229
+ // rows that arm's trivia scans recorded stay when it fails. With
230
+ // `throughNodes` a choice leaves what one of its arms leaves, unless
231
+ // `throughNodes` is the encoder's answer that this choice marks and restores
232
+ // each arm it enters.
221
233
  case 'choice':
222
- return false
234
+ return throughNodes !== false
235
+ && !(typeof throughNodes === 'function' && throughNodes(p))
236
+ && d.parsers.some(arm => mayLeavePartialCapture(arm, new Set(seen), triviaActive, throughNodes))
223
237
  case 'dispatch':
224
238
  // These are independent graph predicates. Sharing one mutable `seen` set
225
239
  // between them made the first walk hide the arm from the second: an atomic
@@ -228,9 +242,9 @@ export function mayLeavePartialCapture(p: Combinator<unknown>, seen: Set<Combina
228
242
  // Fork the ancestor set for each proof so cycle protection remains, while
229
243
  // one proof cannot erase evidence needed by another.
230
244
  return capturesLeaf(d.selector, new Set(seen)) ||
231
- d.cases.some(x => mayLeavePartialCapture(x.parser, new Set(seen), triviaActive) || capturesLeaf(x.parser, new Set(seen))) ||
232
- (d.matchers ? d.matchers.some(x => mayLeavePartialCapture(x.parser, new Set(seen), triviaActive) || capturesLeaf(x.parser, new Set(seen))) : false) ||
233
- (d.otherwise ? mayLeavePartialCapture(d.otherwise, new Set(seen), triviaActive) || capturesLeaf(d.otherwise, new Set(seen)) : false)
245
+ d.cases.some(x => mayLeavePartialCapture(x.parser, new Set(seen), triviaActive, throughNodes) || capturesLeaf(x.parser, new Set(seen))) ||
246
+ (d.matchers ? d.matchers.some(x => mayLeavePartialCapture(x.parser, new Set(seen), triviaActive, throughNodes) || capturesLeaf(x.parser, new Set(seen))) : false) ||
247
+ (d.otherwise ? mayLeavePartialCapture(d.otherwise, new Set(seen), triviaActive, throughNodes) || capturesLeaf(d.otherwise, new Set(seen)) : false)
234
248
  case 'attempt':
235
249
  return false
236
250
  // optional never fails; many/oneOrMore only "fail" with zero captured items.
@@ -272,7 +286,7 @@ export function mayLeavePartialCapture(p: Combinator<unknown>, seen: Set<Combina
272
286
  const part = parts[i]!
273
287
  if (i > 0 && triviaActive) captured = true
274
288
  if (captured && mayFail(part)) return true
275
- if (mayLeavePartialCapture(part, seen, triviaActive)) return true
289
+ if (mayLeavePartialCapture(part, seen, triviaActive, throughNodes)) return true
276
290
  if (capturesLeaf(part) || hasNodeDef(part)) captured = true
277
291
  }
278
292
  return false
@@ -284,11 +298,11 @@ export function mayLeavePartialCapture(p: Combinator<unknown>, seen: Set<Combina
284
298
  case 'expect':
285
299
  case 'withCtx':
286
300
  case 'grammar':
287
- return mayLeavePartialCapture(d.parser, seen, triviaActive)
301
+ return mayLeavePartialCapture(d.parser, seen, triviaActive, throughNodes)
288
302
  case 'recover':
289
- return mayLeavePartialCapture(d.parser, seen, triviaActive)
303
+ return mayLeavePartialCapture(d.parser, seen, triviaActive, throughNodes)
290
304
  case 'lazy': {
291
- try { return mayLeavePartialCapture(d.thunk(), seen, triviaActive) } catch { return true }
305
+ try { return mayLeavePartialCapture(d.thunk(), seen, triviaActive, throughNodes) } catch { return true }
292
306
  }
293
307
  // Unknown shapes: be safe and keep the rollback.
294
308
  default:
@@ -355,26 +355,38 @@ export type RunCfg = {
355
355
  * literal bodies to buy nothing measurable.
356
356
  */
357
357
  readonly probe: boolean
358
+ /**
359
+ * A caller supplied `ctx.trivia` to a program with no trivia of its own. Such
360
+ * a program records trivia rows only then, so only this assembly restores the
361
+ * trivia logs a failed alternative recorded (`choiceLogRollbackMask`,
362
+ * `failureLogRollback`); every other parse of it takes none of those marks. A
363
+ * program with trivia of its own always restores them and never sets this.
364
+ * Fixed for the parse: a program with no trivia never installs any.
365
+ */
366
+ readonly inheritedTrivia?: boolean
358
367
  }
359
368
 
360
- /** THE bit packing for an assembly cache key. Six bits, so at most sixty-four
369
+ /** THE bit packing for an assembly cache key. Seven bits, so at most 128
361
370
  * ordinary assemblies per table. Host trivia predicates use a host-identity
362
371
  * cache in addition to this key because their per-type answer is not one bit.
363
372
  *
364
- * Taken as six booleans rather than as a `RunCfg` because `AssemblyCache.forCtx`
373
+ * Taken as seven booleans rather than as a `RunCfg` because `AssemblyCache.forCtx`
365
374
  * runs once per entry invocation and must allocate nothing — it derives these bits
366
375
  * from the `ctx` and builds a `RunCfg` only on the miss. That constraint is why the
367
376
  * packing was written twice, 2500 lines apart in this file, and a bit added to one
368
377
  * copy but not the other is a cache COLLISION: a parse served the wrong assembly.
369
378
  * Splitting the packing from the object read satisfies both callers from one place. */
370
- function cfgKeyOf(hostCst: boolean, trackLines: boolean, tolerant: boolean, coverage: boolean, probe: boolean, hostReadsChildren = true): number {
379
+ function cfgKeyOf(
380
+ hostCst: boolean, trackLines: boolean, tolerant: boolean, coverage: boolean, probe: boolean,
381
+ hostReadsChildren = true, inheritedTrivia = false,
382
+ ): number {
371
383
  return (hostCst ? 1 : 0) | (trackLines ? 2 : 0) | (tolerant ? 4 : 0)
372
- | (coverage ? 8 : 0) | (probe ? 16 : 0) | (hostReadsChildren ? 0 : 32)
384
+ | (coverage ? 8 : 0) | (probe ? 16 : 0) | (hostReadsChildren ? 0 : 32) | (inheritedTrivia ? 64 : 0)
373
385
  }
374
386
 
375
387
  /** The cfg key an assembly is cached under. */
376
388
  export function cfgKey(c: RunCfg): number {
377
- return cfgKeyOf(c.hostCst, c.trackLines, c.tolerant, c.coverage, c.probe, c.hostReadsChildren)
389
+ return cfgKeyOf(c.hostCst, c.trackLines, c.tolerant, c.coverage, c.probe, c.hostReadsChildren, c.inheritedTrivia)
378
390
  }
379
391
 
380
392
  export type Assembly = {
@@ -2240,6 +2252,10 @@ export function assemble(t: ResolvedTable, prog: TableProgram, cfg: RunCfg): Ass
2240
2252
  const probeBest = PROBE ? ctx._probe?.best : undefined
2241
2253
  const v = child(input, pos, ctx)
2242
2254
  if (need) rollbackTriviaAt(ctx, mRaw, mTl, mLv, mFl, mEr, mLog, mRoot)
2255
+ // A lookahead contains its child's commitment: `not.ts` and `peek.ts`
2256
+ // return a fresh result, so a committed failure inside the probe never
2257
+ // reaches the grammar around it.
2258
+ ctx._fc = false
2243
2259
  if (PROBE && ctx._probe !== undefined) ctx._probe.best = probeBest ?? null
2244
2260
  if (v === FAIL) { EC.e = pos; return null }
2245
2261
  // `not.ts:50` — the ASSERTION's own set, at the assertion's position.
@@ -2282,6 +2298,10 @@ export function assemble(t: ResolvedTable, prog: TableProgram, cfg: RunCfg): Ass
2282
2298
  const probeBest = PROBE ? ctx._probe?.best : undefined
2283
2299
  const v = child(input, pos, ctx)
2284
2300
  if (need) rollbackTriviaAt(ctx, mRaw, mTl, mLv, mFl, mEr, mLog, mRoot)
2301
+ // A lookahead contains its child's commitment: `not.ts` and `peek.ts`
2302
+ // return a fresh result, so a committed failure inside the probe never
2303
+ // reaches the grammar around it.
2304
+ ctx._fc = false
2285
2305
  if (PROBE && ctx._probe !== undefined) ctx._probe.best = probeBest ?? null
2286
2306
  // `peek.ts:60` — the ASSERTION's own set, at the assertion's position.
2287
2307
  if (v === FAIL) { ctx._fe = pos; ctx._fx = xf; return FAIL }
@@ -4289,7 +4309,8 @@ export function assemble(t: ResolvedTable, prog: TableProgram, cfg: RunCfg): Ass
4289
4309
  if (prog.asm !== undefined) {
4290
4310
  throw new Unemittable(
4291
4311
  `option set ${cfgKey(cfg)} (hostCst=${cfg.hostCst} trackLines=${cfg.trackLines} `
4292
- + `tolerant=${cfg.tolerant} coverage=${cfg.coverage} probe=${cfg.probe}), which this build `
4312
+ + `tolerant=${cfg.tolerant} coverage=${cfg.coverage} probe=${cfg.probe} `
4313
+ + `inheritedTrivia=${cfg.inheritedTrivia === true}), which this build `
4293
4314
  + 'did not pre-compile. The Function constructor is NOT used for an artifact that carries '
4294
4315
  + 'assemblies — see `EmitOptions.assemblies` to add this option set to the build',
4295
4316
  )
@@ -4518,7 +4539,9 @@ export function countSiteVisits(
4518
4539
  export class AssemblyCache {
4519
4540
  private readonly t: ResolvedTable
4520
4541
  private readonly prog: TableProgram
4521
- private readonly byCfg: Array<Assembly | undefined> = Array.from({ length: 64 })
4542
+ private readonly byCfg: Array<Assembly | undefined> = Array.from({ length: 128 })
4543
+ /** Whether this program installs no trivia of its own (`RunCfg.inheritedTrivia`). */
4544
+ private readonly noOwnTrivia: boolean
4522
4545
  /**
4523
4546
  * Monomorphic predicate inline cache. An assembly depends on the predicate
4524
4547
  * FUNCTION and the scalar cfg key, not on the host object that carries it, so
@@ -4532,6 +4555,7 @@ export class AssemblyCache {
4532
4555
  constructor(prog: TableProgram, resolved: ResolvedTable = resolveTable(prog)) {
4533
4556
  this.prog = prog
4534
4557
  this.t = resolved
4558
+ this.noOwnTrivia = prog.triviaSpecs === undefined || prog.triviaSpecs.length === 0
4535
4559
  }
4536
4560
 
4537
4561
  for(cfg: RunCfg): Assembly {
@@ -4599,7 +4623,8 @@ export class AssemblyCache {
4599
4623
  const tolerant = ctx._tolerant === true
4600
4624
  const coverage = ctx._grammarCoverage !== undefined
4601
4625
  const probe = ctx._probe !== undefined
4602
- const key = cfgKeyOf(hostCst, trackLines, tolerant, coverage, probe, hostReadsChildren)
4626
+ const inheritedTrivia = this.noOwnTrivia && ctx.trivia !== undefined
4627
+ const key = cfgKeyOf(hostCst, trackLines, tolerant, coverage, probe, hostReadsChildren, inheritedTrivia)
4603
4628
  let cache = this.byCfg
4604
4629
  if (hostCaptureTrivia !== undefined) {
4605
4630
  // The predicate is host configuration, not parse state. Specialising each
@@ -4610,7 +4635,7 @@ export class AssemblyCache {
4610
4635
  cache = this.hostAssemblies!
4611
4636
  }
4612
4637
  else {
4613
- cache = Array.from({ length: 64 })
4638
+ cache = Array.from({ length: 128 })
4614
4639
  this.hostPredicate = hostCaptureTrivia
4615
4640
  this.hostAssemblies = cache
4616
4641
  }
@@ -4619,7 +4644,7 @@ export class AssemblyCache {
4619
4644
  if (hit !== undefined) return hit
4620
4645
  const made = assemble(this.t, this.prog, {
4621
4646
  hostCst, hostReadsChildren, hostCaptureTrivia,
4622
- trackLines, tolerant, coverage, probe,
4647
+ trackLines, tolerant, coverage, probe, inheritedTrivia,
4623
4648
  })
4624
4649
  cache[key] = made
4625
4650
  return made
@@ -54,7 +54,7 @@ import {
54
54
  OP_LEX_BODY, OP_LEX_PROGRAM, OP_GAPGATE, OP_STRICT,
55
55
  } from './ops.ts'
56
56
  import {
57
- choiceCannotCommit, choiceRollbackMask, failureRollbackClean, validateDispatchSpec,
57
+ choiceCannotCommit, choiceLogRollbackMask, choiceRollbackMask, failureLogRollback, failureRollbackClean, validateDispatchSpec,
58
58
  type ResolvedClass, type ResolvedTable, type TableProgram,
59
59
  } from './program.ts'
60
60
  import { emitShapeMatch, scanShapeFromRegex } from './scan-shapes.ts'
@@ -406,6 +406,19 @@ function emitRollback(t: string, buf: boolean, rawMode: number, s: Sinks = NO_SI
406
406
  return `if(${t}n){rollbackTriviaAt(ctx,${t}raw,${t}tl,${t}lv,${s.fd ? `${t}fd` : 'undefined'},${s.er ? `${t}er` : 'undefined'},${t}lg,${t}rt)}`
407
407
  }
408
408
 
409
+ /**
410
+ * A mark of the two trivia logs alone, for a child the census counts as clean but
411
+ * whose failure can leave trivia rows a failed node recorded
412
+ * (`program.ts` `choiceLogRollbackMask`, `failureLogRollback`).
413
+ */
414
+ function emitLogMark(t: string): string {
415
+ return `const ${t}lg=ctx._triviaLog!==undefined?ctx._triviaLog.length:0,${t}rt=ctx._rootTriviaLog!==undefined?ctx._rootTriviaLog.length:0`
416
+ }
417
+ function emitLogRollback(t: string): string {
418
+ return `{const g=ctx._triviaLog;if(g!==undefined)while(g.length>${t}lg)g.pop()}
419
+ {const r=ctx._rootTriviaLog;if(r!==undefined)while(r.length>${t}rt)r.pop()}`
420
+ }
421
+
409
422
  /**
410
423
  * ONE SEQUENCE TERM — `assemble.ts`'s `nextTerm`, inlined at the site.
411
424
  *
@@ -597,6 +610,7 @@ export function emitAssemblySource(
597
610
  tolerant: boolean
598
611
  coverage: boolean
599
612
  probe: boolean
613
+ inheritedTrivia?: boolean
600
614
  },
601
615
  extraIps: readonly number[] = [],
602
616
  staticBuild = false,
@@ -618,6 +632,10 @@ export function emitAssemblySource(
618
632
  const { code, k, fx, disp, dsp, triviaLabelled } = t
619
633
  const swapLegal = !cfg.trackLines
620
634
  const hostCst = cfg.hostCst
635
+ // Trivia rows are recorded only by a program with trivia of its own, or under
636
+ // trivia a caller supplied (`RunCfg.inheritedTrivia`). Otherwise no site
637
+ // restores the trivia logs alone: nothing can have written them.
638
+ const LOGS = (prog.triviaSpecs?.length ?? 0) > 0 || cfg.inheritedTrivia === true
621
639
 
622
640
  /**
623
641
  * RECOVERY IS EMITTED, and the refusal this replaces was wrong in SCOPE.
@@ -1769,12 +1787,13 @@ return v
1769
1787
  case OP_ATTEMPT: {
1770
1788
  const child = link(code[ip + 1]!)
1771
1789
  const clean = !REC && failureRollbackClean(prog, ip)
1790
+ const logs = clean && LOGS && failureLogRollback(prog, ip)
1772
1791
  const p = tmp()
1773
1792
  return `${head}
1774
- ${clean ? '' : emitMark(p, L.buf, L.raw, sinks)}
1793
+ ${clean ? logs ? emitLogMark(p) : '' : emitMark(p, L.buf, L.raw, sinks)}
1775
1794
  const v=${child}(input,pos,ctx)
1776
1795
  if(v!==FAIL)return v
1777
- ${clean ? '' : emitRollback(p, L.buf, L.raw, sinks)}
1796
+ ${clean ? logs ? emitLogRollback(p) : '' : emitRollback(p, L.buf, L.raw, sinks)}
1778
1797
  ${code[ip + 2] === 1 ? 'ctx._fc=false' : 'if(ctx._fc===true)return FAIL'}
1779
1798
  ctx._fe=pos
1780
1799
  return FAIL
@@ -1801,6 +1820,7 @@ return FAIL
1801
1820
  ${lookaheadMiss(code[ip + 1]!, 'EC.e=pos;return null')}${emitMark(p, L.buf, L.raw, sinks)}
1802
1821
  ${cfg.probe ? 'const pb=ctx._probe?.best\n' : ''}const v=${child}(input,pos,ctx)
1803
1822
  ${emitRollback(p, L.buf, L.raw, sinks)}
1823
+ ctx._fc=false
1804
1824
  ${cfg.probe ? 'if(ctx._probe!==undefined)ctx._probe.best=pb??null\n' : ''}if(v===FAIL){EC.e=pos;return null}
1805
1825
  ctx._fe=pos
1806
1826
  ctx._fx=${xf}
@@ -1826,6 +1846,7 @@ return null
1826
1846
  ${lookaheadMiss(code[ip + 1]!, `ctx._fe=pos;ctx._fx=${xf};return FAIL`)}${emitMark(p, L.buf, L.raw, sinks)}
1827
1847
  ${cfg.probe ? 'const pb=ctx._probe?.best\n' : ''}const v=${child}(input,pos,ctx)
1828
1848
  ${emitRollback(p, L.buf, L.raw, sinks)}
1849
+ ctx._fc=false
1829
1850
  ${cfg.probe ? 'if(ctx._probe!==undefined)ctx._probe.best=pb??null\n' : ''}if(v===FAIL){ctx._fe=pos;ctx._fx=${xf};return FAIL}
1830
1851
  EC.e=pos
1831
1852
  return null
@@ -1835,14 +1856,15 @@ return null
1835
1856
  case OP_OPT: {
1836
1857
  const child = link(code[ip + 1]!)
1837
1858
  const clean = !REC && failureRollbackClean(prog, ip)
1859
+ const logs = clean && LOGS && failureLogRollback(prog, ip)
1838
1860
  const p = tmp()
1839
1861
  return `${head}
1840
- ${lookaheadMiss(code[ip + 1]!, 'EC.e=pos;return null')}${clean ? '' : emitMark(p, L.buf, L.raw, sinks)}
1862
+ ${lookaheadMiss(code[ip + 1]!, 'EC.e=pos;return null')}${clean ? logs ? emitLogMark(p) : '' : emitMark(p, L.buf, L.raw, sinks)}
1841
1863
  ctx._fc=false
1842
1864
  const v=${child}(input,pos,ctx)
1843
1865
  if(v===FAIL){
1844
1866
  if(ctx._fc===true)return FAIL
1845
- ${clean ? '' : emitRollback(p, L.buf, L.raw, sinks)}
1867
+ ${clean ? logs ? emitLogRollback(p) : '' : emitRollback(p, L.buf, L.raw, sinks)}
1846
1868
  EC.e=pos
1847
1869
  return null
1848
1870
  }
@@ -2052,6 +2074,13 @@ return FAIL
2052
2074
  const encodedRollbackMask = choiceRollbackMask(prog, ip) ?? -1
2053
2075
  const rollbackMask = REC ? -1 : encodedRollbackMask
2054
2076
  const hasRollback = rollbackMask !== 0
2077
+ // Arms that leave only trivia-log rows: restored from the full mark when
2078
+ // one is taken, else from a mark of the two logs taken as that arm is
2079
+ // entered. An earlier arm that failed was restored, so the lengths there
2080
+ // are the choice's own, and an arm the char gate skips takes no mark.
2081
+ const logMask = rollbackMask === -1 || !LOGS ? 0 : choiceLogRollbackMask(prog, ip)
2082
+ const choiceMark = hasRollback ? emitMark(p, L.buf, L.raw, sinks) : ''
2083
+ const armMark = (i: number): string => !hasRollback && (logMask & (1 << i)) !== 0 ? `${emitLogMark(p)}\n` : ''
2055
2084
  // An always-consuming leading scalar makes a failure at `pos`
2056
2085
  // statically exact: it is the arm's derived opener set, and the
2057
2086
  // choice's own `choiceFx` already concatenates every such set in
@@ -2082,7 +2111,8 @@ return FAIL
2082
2111
  const rollbackFor = (i: number): string =>
2083
2112
  rollbackMask === -1 || (rollbackMask & (1 << i)) !== 0
2084
2113
  ? emitRollback(p, L.buf, L.raw, sinks)
2085
- : ''
2114
+ : (logMask & (1 << i)) === 0 ? ''
2115
+ : hasRollback ? emitRollback(p, L.buf, L.raw, sinks) : emitLogRollback(p)
2086
2116
  if (choiceCannotCommit(prog, ip) && !startFailureExact) {
2087
2117
  // A successful ordered choice does not expose any losing arm's
2088
2118
  // diagnostic. Snapshot each entered arm's failure in scalar locals;
@@ -2121,7 +2151,7 @@ ctx._fc=false
2121
2151
  ${remember(i, 'at', pretest.sequence.expected.map((value, at) => `${decision}===${~at}?${value}:`).join('') + pretest.sequence.expected.at(-1))}}
2122
2152
  }`
2123
2153
  return `${decision === '' ? '' : `let ${decision}=${pretest?.sequence === undefined ? -1 : 0}\n`}if(${gate}){
2124
- ctx._fc=false
2154
+ ${armMark(i)}ctx._fc=false
2125
2155
  {const v=${arm}(input,pos,ctx)
2126
2156
  if(v!==FAIL)return v}
2127
2157
  {const at=ctx._fe??pos
@@ -2140,7 +2170,7 @@ ctx._fe=pos;ctx._fx=acc??${choiceFx}
2140
2170
  return FAIL`
2141
2171
  return `${head}
2142
2172
  const c=${directAsciiMask ? 'input.charCodeAt(pos)' : 'lead(input,pos)'}
2143
- ${hasRollback ? emitMark(p, L.buf, L.raw, sinks) : ''}
2173
+ ${choiceMark}
2144
2174
  ${deepAt.map((at, i) => `let ${at},${deepFx[i]}`).join('\n')}
2145
2175
  ${maskable ? `if(c<128){
2146
2176
  const bits=${maskName}[${directAsciiMask ? 'c' : 'c<0?128:c'}]
@@ -2191,7 +2221,7 @@ if(at>best){best=at;acc=undefined}
2191
2221
  if(at===best${startFailureExact ? '&&at>pos' : ''})acc=_accSet(${pretest.sequence.expected.map((value, at) => `${decision}===${~at}?${value}:`).join('')}${pretest.sequence.expected.at(-1)},acc)}
2192
2222
  }`
2193
2223
  return `${decision === '' ? '' : `let ${decision}=${pretest?.sequence === undefined ? -1 : 0}\n`}if((bits&${1 << i})!==0${condition}){
2194
- ctx._fc=false
2224
+ ${armMark(i)}ctx._fc=false
2195
2225
  {const v=${arm}(input,pos,ctx)
2196
2226
  if(v!==FAIL)return v}
2197
2227
  ${startFailureExact ? '' : `if(best===pos)acc=${catchName}(${i},prev,acc)
@@ -2231,7 +2261,7 @@ if(at>best){best=at;acc=undefined}
2231
2261
  if(at===best${startFailureExact ? '&&at>pos' : ''})acc=_accSet(${pretest.token.expected},acc)
2232
2262
  }${startFailureExact ? '' : `else if(best===pos)acc=_accSet(${expected[i]},acc)`}`
2233
2263
  return `${decision === '' ? '' : `let ${decision}=${pretest?.sequence === undefined ? -1 : 0}\n`}if((${gateRefs[i]}===null||classHas(${gateRefs[i]},c))${condition}){
2234
- ctx._fc=false
2264
+ ${armMark(i)}ctx._fc=false
2235
2265
  {const v=${arm}(input,pos,ctx)
2236
2266
  if(v!==FAIL)return v}
2237
2267
  {const at=ctx._fe??pos
@@ -2250,7 +2280,7 @@ ${rollbackFor(i)}
2250
2280
  // `choiceFx`, the arms' flatMap, set by set.
2251
2281
  return `${head}
2252
2282
  const c=${directAsciiMask ? 'input.charCodeAt(pos)' : 'lead(input,pos)'}
2253
- ${hasRollback ? emitMark(p, L.buf, L.raw, sinks) : ''}
2283
+ ${choiceMark}
2254
2284
  let acc
2255
2285
  let best=pos
2256
2286
  ${maskable ? `if(c<128){
@@ -190,6 +190,33 @@ class Encoder {
190
190
  private choiceRollbackMasks = new Map<number, number>()
191
191
  private nonCommittingChoiceSites = new Set<number>()
192
192
  private failureRollbackCleanSites = new Set<number>()
193
+ /**
194
+ * THE TRIVIA LOGS A FAILED NODE LEAVES. A node drops its own capture frame when
195
+ * it fails, but the trivia its body recorded into `_triviaLog`/`_rootTriviaLog`
196
+ * is not part of that frame. So a child the census above counts as clean can
197
+ * still leave trivia rows when it reaches a node whose body can fail after a
198
+ * trivia scan (`mayLeavePartialCapture`'s `throughNodes`). These are the arms
199
+ * and sites that need only the two logs restored. A program with no trivia of
200
+ * its own records rows only under trivia its caller supplies, so its emitted
201
+ * assembly takes these marks only for such a parse (`RunCfg.inheritedTrivia`).
202
+ */
203
+ private choiceLogRollbackMasks = new Map<number, number>()
204
+ private failureLogRollbackSites = new Set<number>()
205
+ /**
206
+ * HOW EACH CHOICE WAS LOWERED, for the census above. A choice on the ordered
207
+ * path whose arms cannot commit a failure restores the logs after every arm
208
+ * it enters (its full mark, or its own two-log mark), so it leaves no rows.
209
+ * An exclusive dispatch runs its one arm with no mark, and an ordered choice
210
+ * returns a committed arm's failure before restoring, so either leaves what an
211
+ * arm leaves. A choice in neither set, or in both, is taken to leave rows. Both
212
+ * sets are complete only once every rule is encoded, so the trivia-log census
213
+ * runs then (`logCensus`).
214
+ */
215
+ private restoringChoices = new Set<Combinator<unknown>>()
216
+ private leakingChoices = new Set<Combinator<unknown>>()
217
+ private logCensus: (() => void)[] = []
218
+ private readonly restoresArms = (choice: Combinator<unknown>): boolean =>
219
+ this.restoringChoices.has(choice) && !this.leakingChoices.has(choice)
193
220
  /**
194
221
  * `reachesSideWriter`'s answers, shared by every `failureNeedsRollback` call
195
222
  * for the lifetime of this `Encoder`. Every entry is exact — it depends only on
@@ -816,15 +843,25 @@ class Encoder {
816
843
  private failureNeedsRollback(
817
844
  p: Combinator<unknown>,
818
845
  autoNot: readonly AutoNotCheck[] | null | undefined,
846
+ throughNodes: false | ((choice: Combinator<unknown>) => boolean),
819
847
  ): boolean {
820
848
  const refName = (p as unknown as { _ruleName?: string })._ruleName
821
849
  const winner = refName === undefined ? undefined : this.winners?.[refName]
822
850
  const root = winner !== undefined && !winnerWrapsReference(winner, p) ? winner : p
823
- return mayLeavePartialCapture(root, new Set(), true)
851
+ return mayLeavePartialCapture(root, new Set(), true, throughNodes)
824
852
  || this.reachesSideWriter(root)
825
853
  || ((autoNot?.length ?? 0) > 0 && capturesLeaf(root))
826
854
  }
827
855
 
856
+ /** The rollback census of an `optional()` or `attempt()` row at `ip` over `child`. */
857
+ private censusTransaction(child: Combinator<unknown>, ip: number): void {
858
+ if (this.failureNeedsRollback(child, undefined, false)) return
859
+ this.failureRollbackCleanSites.add(ip)
860
+ this.logCensus.push(() => {
861
+ if (this.failureNeedsRollback(child, undefined, this.restoresArms)) this.failureLogRollbackSites.add(ip)
862
+ })
863
+ }
864
+
828
865
  /**
829
866
  * Whether a field, recovered error, interpreted scanner or unresolvable shape
830
867
  * is reachable from `root` — the writer census of `failureNeedsRollback`,
@@ -1671,6 +1708,7 @@ class Encoder {
1671
1708
  }
1672
1709
  const dispIdx = this.disp.length
1673
1710
  this.disp.push(classes)
1711
+ const exclusive = dispatchIsExclusive(classes, this.cc)
1674
1712
  // PER-ARM EXPECTED SETS RIDE ALONG, after the arm offsets. While the best
1675
1713
  // failure remains at the choice position, an arm declined by the driver's
1676
1714
  // char gate contributes the static opener set the interpreter would get by
@@ -1683,10 +1721,7 @@ class Encoder {
1683
1721
  let rollbackMask = kids.length > 31 ? -1 : 0
1684
1722
  if (rollbackMask === 0) {
1685
1723
  for (let i = 0; i < arms.length; i++) {
1686
- const src = order[i]!
1687
- if (this.failureNeedsRollback(arms[i]!, d.autoNot[src])) {
1688
- rollbackMask |= 1 << i
1689
- }
1724
+ if (this.failureNeedsRollback(arms[i]!, d.autoNot[order[i]!], false)) rollbackMask |= 1 << i
1690
1725
  }
1691
1726
  }
1692
1727
  const head = this.emitHead(OP_CHOICE, 3 + 2 * kids.length)
@@ -1701,9 +1736,19 @@ class Encoder {
1701
1736
  this.code[head + 4 + kids.length + i] = this.expected(deriveExpected(arms[i]!))
1702
1737
  }
1703
1738
  this.choiceRollbackMasks.set(head, rollbackMask)
1704
- if (arms.every(arm => !mayCommitFailure(arm, rr, this.commitFailureMemo))) {
1705
- this.nonCommittingChoiceSites.add(head)
1739
+ if (rollbackMask !== -1) {
1740
+ const full = rollbackMask
1741
+ this.logCensus.push(() => {
1742
+ let logMask = 0
1743
+ for (let i = 0; i < arms.length; i++) {
1744
+ if ((full & (1 << i)) === 0 && this.failureNeedsRollback(arms[i]!, d.autoNot[order[i]!], this.restoresArms)) logMask |= 1 << i
1745
+ }
1746
+ if (logMask !== 0) this.choiceLogRollbackMasks.set(head, logMask)
1747
+ })
1706
1748
  }
1749
+ const nonCommitting = arms.every(arm => !mayCommitFailure(arm, rr, this.commitFailureMemo))
1750
+ if (nonCommitting) this.nonCommittingChoiceSites.add(head)
1751
+ ;(!exclusive && nonCommitting ? this.restoringChoices : this.leakingChoices).add(p)
1707
1752
  return head
1708
1753
  }
1709
1754
  case 'many':
@@ -1765,7 +1810,7 @@ class Encoder {
1765
1810
  }
1766
1811
  case 'optional': {
1767
1812
  const head = this.emit(OP_OPT, this.lookaheadGate(d.parser, this.node(d.parser).ip))
1768
- if (!this.failureNeedsRollback(d.parser, undefined)) this.failureRollbackCleanSites.add(head)
1813
+ this.censusTransaction(d.parser, head)
1769
1814
  return head
1770
1815
  }
1771
1816
  case 'transform': {
@@ -2095,7 +2140,7 @@ class Encoder {
2095
2140
  // lowering was correct only for a choice arm.
2096
2141
  case 'attempt': {
2097
2142
  const inner = this.emit(OP_ATTEMPT, this.node(d.parser).ip, d.contain === true ? 1 : 0)
2098
- if (!this.failureNeedsRollback(d.parser, undefined)) this.failureRollbackCleanSites.add(inner)
2143
+ this.censusTransaction(d.parser, inner)
2099
2144
  // THE FIRST-SET FAIL-FAST GUARD, lowered as the `OP_GATE` row the `node()`
2100
2145
  // case already uses — it is the same guard, written twice in the
2101
2146
  // interpreter (`attempt.ts:22`, `node.ts:239`). It is NOT merely an
@@ -2295,6 +2340,7 @@ class Encoder {
2295
2340
  finish(): TableProgram {
2296
2341
  if (this.code.length === 0) this.emit(OP_EMPTY)
2297
2342
  this.collapseIndirection()
2343
+ for (const census of this.logCensus) census()
2298
2344
  return ownTableProgram({
2299
2345
  code: this.code, k: this.k, fns: this.fns, cc: this.cc,
2300
2346
  fx: this.fx, disp: this.disp, dsp: this.dsp, rules: this.rules,
@@ -2315,6 +2361,8 @@ class Encoder {
2315
2361
  }, undefined, {
2316
2362
  choiceRollbackMasks: this.choiceRollbackMasks,
2317
2363
  failureRollbackCleanSites: this.failureRollbackCleanSites,
2364
+ choiceLogRollbackMasks: this.choiceLogRollbackMasks,
2365
+ failureLogRollbackSites: this.failureLogRollbackSites,
2318
2366
  nonCommittingChoiceSites: this.nonCommittingChoiceSites,
2319
2367
  })
2320
2368
  }
package/src/table/exec.ts CHANGED
@@ -1558,8 +1558,10 @@ function makeDriver(
1558
1558
  const mRoot = need ? ctx._rootTriviaLog?.length ?? 0 : 0
1559
1559
  const v = exec(code[ip + 1]!, input, pos, ctx)
1560
1560
  if (need) rollbackTriviaAt(ctx, mRaw, mTl, mLv, mFl, mEr, mLog, mRoot)
1561
+ // A lookahead contains its child's commitment (`not.ts` returns a fresh
1562
+ // result): a generic child's committed failure is cleared here.
1563
+ ctx._fc = savedFc
1561
1564
  if (scalarChild) {
1562
- ctx._fc = savedFc
1563
1565
  ctx._fe = savedFe
1564
1566
  ctx._fx = savedFx
1565
1567
  }
@@ -1588,7 +1590,8 @@ function makeDriver(
1588
1590
  const mRoot = need ? ctx._rootTriviaLog?.length ?? 0 : 0
1589
1591
  const v = exec(code[ip + 1]!, input, pos, ctx)
1590
1592
  if (need) rollbackTriviaAt(ctx, mRaw, mTl, mLv, mFl, mEr, mLog, mRoot)
1591
- if (scalarChild) ctx._fc = savedFc
1593
+ // A lookahead contains its child's commitment, as under `not()`.
1594
+ ctx._fc = savedFc
1592
1595
  if (ctx._probe !== undefined) ctx._probe.best = savedProbe ?? null
1593
1596
  // `peek.ts:60` — the ASSERTION's own set, at the assertion's position.
1594
1597
  if (v === FAIL) { ctx._fe = pos; ctx._fx = fx[code[ip + 2]!] as string[]; return FAIL }