parseman 0.50.6 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/analysis/choice-cost.d.ts.map +1 -1
  2. package/dist/analysis/commitment.d.ts.map +1 -1
  3. package/dist/analysis/diagnostics.js +214 -67
  4. package/dist/analysis/diagnostics.js.map +2 -2
  5. package/dist/analysis/duplication.d.ts.map +1 -1
  6. package/dist/analysis/gating.d.ts.map +1 -1
  7. package/dist/cli/index.js +220 -68
  8. package/dist/cli/index.js.map +2 -2
  9. package/dist/combinators/dispatch.d.ts.map +1 -1
  10. package/dist/combinators/first-set.d.ts +2 -26
  11. package/dist/combinators/first-set.d.ts.map +1 -1
  12. package/dist/combinators/scanTo.d.ts +23 -1
  13. package/dist/combinators/scanTo.d.ts.map +1 -1
  14. package/dist/compiler/fields.d.ts.map +1 -1
  15. package/dist/compiler/grammar-coverage-ids.d.ts.map +1 -1
  16. package/dist/compiler/ir-serialize.d.ts.map +1 -1
  17. package/dist/compiler/token-capability.js +40 -29
  18. package/dist/compiler/token-capability.js.map +1 -1
  19. package/dist/coverage.d.ts.map +1 -1
  20. package/dist/cst/reflection.d.ts.map +1 -1
  21. package/dist/index.js +241 -74
  22. package/dist/index.js.map +2 -2
  23. package/dist/plugin/index.js +228 -71
  24. package/dist/plugin/index.js.map +2 -2
  25. package/dist/spec/index.js +164 -48
  26. package/dist/spec/index.js.map +2 -2
  27. package/dist/table/assemble.d.ts.map +1 -1
  28. package/dist/table/emit.d.ts.map +1 -1
  29. package/dist/table/encode.d.ts.map +1 -1
  30. package/dist/table/exec.d.ts.map +1 -1
  31. package/dist/table/index.js +220 -68
  32. package/dist/table/index.js.map +2 -2
  33. package/dist/table/program.d.ts +2 -0
  34. package/dist/table/program.d.ts.map +1 -1
  35. package/dist/types.d.ts +2 -0
  36. package/dist/types.d.ts.map +1 -1
  37. package/dist/version.d.ts +1 -1
  38. package/package.json +1 -1
  39. package/src/analysis/choice-cost.ts +6 -1
  40. package/src/analysis/commitment.ts +10 -2
  41. package/src/analysis/duplication.ts +7 -2
  42. package/src/analysis/gating.ts +6 -1
  43. package/src/analysis/rebuild.ts +1 -1
  44. package/src/combinators/dispatch.ts +4 -1
  45. package/src/combinators/first-set.ts +58 -36
  46. package/src/combinators/scanTo.ts +163 -9
  47. package/src/compiler/fields.ts +8 -2
  48. package/src/compiler/grammar-coverage-ids.ts +6 -1
  49. package/src/compiler/ir-serialize.ts +7 -2
  50. package/src/compiler/token-alphabet.ts +1 -1
  51. package/src/coverage.ts +7 -1
  52. package/src/cst/reflection.ts +6 -1
  53. package/src/table/assemble.ts +11 -1
  54. package/src/table/emit.ts +4 -0
  55. package/src/table/encode.ts +16 -8
  56. package/src/table/exec.ts +7 -1
  57. package/src/table/program.ts +2 -0
  58. package/src/types.ts +1 -1
  59. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"duplication.d.ts","sourceRoot":"","sources":["../../src/analysis/duplication.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"duplication.d.ts","sourceRoot":"","sources":["../../src/analysis/duplication.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gating.d.ts","sourceRoot":"","sources":["../../src/analysis/gating.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gating.d.ts","sourceRoot":"","sources":["../../src/analysis/gating.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -7,14 +7,14 @@ import { pathToFileURL } from "node:url";
7
7
  import { register } from "node:module";
8
8
 
9
9
  // src/combinators/first-set.ts
10
- function classifyFinalChoice(arms, resolve2) {
10
+ function classifyFinalChoice(arms, resolve2, activeTrivia) {
11
11
  const firstSets = [];
12
12
  const nullable2 = [];
13
13
  let exclusive = true;
14
14
  for (const arm of arms) {
15
15
  const empty2 = matchesEmpty(arm, /* @__PURE__ */ new Set(), resolve2);
16
16
  nullable2.push(empty2);
17
- firstSets.push(empty2 ? { kind: "any" } : firstSetOf(arm, /* @__PURE__ */ new Set(), resolve2));
17
+ firstSets.push(empty2 ? { kind: "any" } : firstSetOf(arm, /* @__PURE__ */ new Set(), resolve2, activeTrivia));
18
18
  if (empty2) exclusive = false;
19
19
  }
20
20
  if (exclusive) {
@@ -75,7 +75,7 @@ function intersects(a, b) {
75
75
  return false;
76
76
  }
77
77
  function fromChar(code) {
78
- return { kind: "ranges", ranges: [{ lo: code, hi: code }] };
78
+ return fromRange(code, code);
79
79
  }
80
80
  function startsFirstSet(combinator, input, pos) {
81
81
  const fs = combinator._meta.firstSet;
@@ -168,11 +168,10 @@ function matchesEmptyBody(p, seen, resolve2) {
168
168
  }
169
169
  }
170
170
  function isZeroWidthAssertion(p) {
171
- const tag = p._def.tag;
172
- return tag === "not" || tag === "adjacency";
171
+ return p._tag === "not" || p._tag === "adjacency";
173
172
  }
174
173
  function isPositiveLookahead(p) {
175
- return p._def.tag === "peek";
174
+ return p._tag === "peek";
176
175
  }
177
176
  function narrowBy(acc, constraint) {
178
177
  if (constraint.kind === "any") return acc;
@@ -188,34 +187,42 @@ function narrowBy(acc, constraint) {
188
187
  return ranges.length === 0 ? { kind: "empty" } : { kind: "ranges", ranges };
189
188
  }
190
189
  function applyAssertion(fs, assertion) {
191
- if (assertion === null) return fs;
192
- if (fs.kind === "empty") return assertion;
193
- return narrowBy(fs, assertion) ?? fs;
190
+ return assertion === null ? fs : fs.kind === "empty" ? assertion : narrowBy(fs, assertion);
194
191
  }
195
- function sequenceFirstSet(parsers) {
196
- let fs = empty();
197
- let assertion = null;
198
- for (const p of parsers) {
192
+ function sequenceSet(parsers, fs, empties, trivia2) {
193
+ const afterBoundary = (i) => {
194
+ const rest = at(i);
195
+ return trivia2 ? union(rest, fs(trivia2)) : rest;
196
+ };
197
+ const at = (i) => {
198
+ const p = parsers[i];
199
199
  if (isPositiveLookahead(p)) {
200
- assertion = narrowBy(assertion, p._meta.firstSet);
201
- continue;
200
+ const constraint = fs(p);
201
+ return i + 1 === parsers.length ? constraint : applyAssertion(afterBoundary(i + 1), constraint);
202
202
  }
203
- if (!isZeroWidthAssertion(p)) fs = union(fs, p._meta.firstSet);
204
- if (!matchesEmpty(p)) return applyAssertion(fs, assertion);
205
- }
206
- return applyAssertion(fs, assertion);
203
+ if (isZeroWidthAssertion(p)) {
204
+ return i + 1 === parsers.length ? empty() : afterBoundary(i + 1);
205
+ }
206
+ const first = fs(p);
207
+ if (!empties(p) || i + 1 === parsers.length) return first;
208
+ return union(first, afterBoundary(i + 1));
209
+ };
210
+ return at(0);
211
+ }
212
+ function sequenceFirstSet(parsers) {
213
+ return sequenceSet(parsers, (p) => p._meta.firstSet, matchesEmpty);
207
214
  }
208
- function firstSetOf(p, seen = /* @__PURE__ */ new Set(), resolve2) {
215
+ function firstSetOf(p, seen = /* @__PURE__ */ new Set(), resolve2, activeTrivia) {
209
216
  if (seen.has(p)) return any();
210
217
  seen.add(p);
211
218
  try {
212
- return firstSetBody(p, seen, resolve2);
219
+ return firstSetBody(p, seen, resolve2, activeTrivia);
213
220
  } finally {
214
221
  seen.delete(p);
215
222
  }
216
223
  }
217
- function firstSetBody(p, seen, resolve2) {
218
- const fs = (c) => firstSetOf(c, seen, resolve2);
224
+ function firstSetBody(p, seen, resolve2, activeTrivia) {
225
+ const fs = (c) => firstSetOf(c, seen, resolve2, activeTrivia);
219
226
  const empties = (c) => matchesEmpty(c, /* @__PURE__ */ new Set(), resolve2);
220
227
  const d = p._def;
221
228
  switch (d.tag) {
@@ -241,17 +248,7 @@ function firstSetBody(p, seen, resolve2) {
241
248
  return out;
242
249
  }
243
250
  case "sequence": {
244
- let out = empty();
245
- let assertion = null;
246
- for (const term of d.parsers) {
247
- if (isPositiveLookahead(term)) {
248
- assertion = narrowBy(assertion, fs(term));
249
- continue;
250
- }
251
- if (!isZeroWidthAssertion(term)) out = union(out, fs(term));
252
- if (!empties(term)) return applyAssertion(out, assertion);
253
- }
254
- return applyAssertion(out, assertion);
251
+ return sequenceSet(d.parsers, fs, empties, activeTrivia);
255
252
  }
256
253
  case "peek": {
257
254
  const inner = d.parser;
@@ -266,12 +263,16 @@ function firstSetBody(p, seen, resolve2) {
266
263
  case "token":
267
264
  case "leaf":
268
265
  case "node":
269
- case "grammar":
270
- case "expect":
271
- return fs(d.parser);
272
266
  case "sepBy":
267
+ case "expect":
273
268
  return fs(d.parser);
274
- // both min 0 and min 1 start with the item
269
+ case "grammar":
270
+ return firstSetOf(
271
+ d.parser,
272
+ seen,
273
+ resolve2,
274
+ d.clearTrivia ? null : d.triviaParser ?? activeTrivia
275
+ );
275
276
  default:
276
277
  return p._meta.firstSet;
277
278
  }
@@ -311,7 +312,12 @@ function childrenOf(d) {
311
312
  case "recover":
312
313
  return [d.parser, d.sentinel];
313
314
  case "scanTo":
314
- return [d.sentinel, ...d.skip];
315
+ return [
316
+ d.sentinel,
317
+ ...d.skip,
318
+ ...d.recoverAt === void 0 ? [] : [d.recoverAt],
319
+ ...d.stopAt === void 0 ? [] : [d.stopAt]
320
+ ];
315
321
  case "grammar":
316
322
  return d.triviaParser ? [d.parser, d.triviaParser] : [d.parser];
317
323
  case "routed":
@@ -2156,7 +2162,12 @@ function childrenOf2(def) {
2156
2162
  case "sepBy":
2157
2163
  return [def.parser, def.separator];
2158
2164
  case "scanTo":
2159
- return [def.sentinel, ...def.skip];
2165
+ return [
2166
+ def.sentinel,
2167
+ ...def.skip,
2168
+ ...def.recoverAt === void 0 ? [] : [def.recoverAt],
2169
+ ...def.stopAt === void 0 ? [] : [def.stopAt]
2170
+ ];
2160
2171
  case "routed":
2161
2172
  return def.fallback ? [def.fallback] : [];
2162
2173
  case "literal":
@@ -4227,7 +4238,7 @@ function parserUsesRouted(parser2, seen = /* @__PURE__ */ new Set()) {
4227
4238
  case "grammar":
4228
4239
  return parserUsesRouted(def.parser, seen) || (def.triviaParser ? parserUsesRouted(def.triviaParser, seen) : false);
4229
4240
  case "scanTo":
4230
- return parserUsesRouted(def.sentinel, seen) || def.skip.some((entry) => parserUsesRouted(entry, seen));
4241
+ return parserUsesRouted(def.sentinel, seen) || def.skip.some((entry) => parserUsesRouted(entry, seen)) || def.recoverAt !== void 0 && parserUsesRouted(def.recoverAt, seen) || def.stopAt !== void 0 && parserUsesRouted(def.stopAt, seen);
4231
4242
  case "recover":
4232
4243
  return parserUsesRouted(def.parser, seen) || parserUsesRouted(def.sentinel, seen);
4233
4244
  case "lazy":
@@ -5197,7 +5208,7 @@ function parserHasOwnFields(p, seen = /* @__PURE__ */ new Set()) {
5197
5208
  case "grammar":
5198
5209
  return parserHasOwnFields(d.parser, seen) || (d.triviaParser ? parserHasOwnFields(d.triviaParser, seen) : false);
5199
5210
  case "scanTo":
5200
- return parserHasOwnFields(d.sentinel, seen) || d.skip.some((x) => parserHasOwnFields(x, seen));
5211
+ return parserHasOwnFields(d.sentinel, seen) || d.skip.some((x) => parserHasOwnFields(x, seen)) || d.recoverAt !== void 0 && parserHasOwnFields(d.recoverAt, seen) || d.stopAt !== void 0 && parserHasOwnFields(d.stopAt, seen);
5201
5212
  case "recover":
5202
5213
  return parserHasOwnFields(d.parser, seen) || parserHasOwnFields(d.sentinel, seen);
5203
5214
  case "routed":
@@ -5574,7 +5585,7 @@ function resolveScanSkip(explicitSkip, raw, ctx) {
5574
5585
  out.push(...explicitSkip);
5575
5586
  return out;
5576
5587
  }
5577
- function scanTo(sentinel, { skip, raw = false, orEOF = false } = {}) {
5588
+ function scanTo(sentinel, { skip, raw = false, orEOF = false, recoverAt, stopAt } = {}) {
5578
5589
  const meta = {
5579
5590
  firstSet: any(),
5580
5591
  canMatchNewline: true,
@@ -5584,7 +5595,15 @@ function scanTo(sentinel, { skip, raw = false, orEOF = false } = {}) {
5584
5595
  return {
5585
5596
  _tag: "scanTo",
5586
5597
  _meta: meta,
5587
- _def: { tag: "scanTo", sentinel, skip: explicitSkip, raw, orEOF },
5598
+ _def: {
5599
+ tag: "scanTo",
5600
+ sentinel,
5601
+ skip: explicitSkip,
5602
+ raw,
5603
+ orEOF,
5604
+ ...recoverAt === void 0 ? {} : { recoverAt },
5605
+ ...stopAt === void 0 ? {} : { stopAt }
5606
+ },
5588
5607
  parse(input, pos, ctx) {
5589
5608
  let cur = pos;
5590
5609
  const skip2 = resolveScanSkip(explicitSkip, raw, ctx);
@@ -5596,28 +5615,130 @@ function scanTo(sentinel, { skip, raw = false, orEOF = false } = {}) {
5596
5615
  pushCstLeaf(ctx, leaf2);
5597
5616
  }
5598
5617
  };
5599
- while (cur < input.length) {
5600
- const s = sentinel.parse(input, cur, probeCtx);
5601
- if (s.ok) {
5618
+ if (recoverAt === void 0 && stopAt === void 0) {
5619
+ while (cur < input.length) {
5620
+ const s = sentinel.parse(input, cur, probeCtx);
5621
+ if (s.ok) {
5622
+ if (ctx.trackLines) recordLineRangeFromContext(ctx, input, pos, cur);
5623
+ emit(cur);
5624
+ return { ok: true, value: input.slice(pos, cur), span: { start: pos, end: cur } };
5625
+ }
5626
+ let advanced = false;
5627
+ for (const skipper of skip2) {
5628
+ const r = skipper.parse(input, cur, probeCtx);
5629
+ if (r.ok && r.span.end > cur) {
5630
+ cur = r.span.end;
5631
+ advanced = true;
5632
+ break;
5633
+ }
5634
+ }
5635
+ if (!advanced) cur++;
5636
+ }
5637
+ if (orEOF) {
5602
5638
  if (ctx.trackLines) recordLineRangeFromContext(ctx, input, pos, cur);
5603
5639
  emit(cur);
5604
5640
  return { ok: true, value: input.slice(pos, cur), span: { start: pos, end: cur } };
5605
5641
  }
5642
+ const sentDef2 = sentinel._def;
5643
+ const expected2 = sentDef2.tag === "literal" ? [JSON.stringify(sentDef2.value)] : ["sentinel"];
5644
+ return { ok: false, expected: expected2, span: { start: pos, end: cur } };
5645
+ }
5646
+ let recovery = -1;
5647
+ let firstSentinel = -1;
5648
+ let sentinelCount = 0;
5649
+ let recoveryErrorCount = -1;
5650
+ let sentinelErrorCount = -1;
5651
+ const succeed = (end) => {
5652
+ if (ctx.trackLines) recordLineRangeFromContext(ctx, input, pos, end);
5653
+ emit(end);
5654
+ return { ok: true, value: input.slice(pos, end), span: { start: pos, end } };
5655
+ };
5656
+ const recoveredEnd = () => {
5657
+ const acceptSentinel = firstSentinel >= 0 && (sentinelCount & 1) === 1;
5658
+ const errors = ctx._errors;
5659
+ if (errors !== void 0) {
5660
+ const keep = acceptSentinel ? sentinelErrorCount : recoveryErrorCount;
5661
+ if (keep >= 0 && errors.length > keep) errors.length = keep;
5662
+ }
5663
+ return acceptSentinel ? firstSentinel : recovery;
5664
+ };
5665
+ while (cur < input.length) {
5666
+ const sentinelProbeErrorCount = ctx._errors?.length ?? -1;
5667
+ const s = sentinel.parse(input, cur, probeCtx);
5668
+ const sentinelProbeErrors = ctx._errors;
5669
+ if (sentinelProbeErrors !== void 0 && sentinelProbeErrorCount >= 0 && sentinelProbeErrors.length > sentinelProbeErrorCount) {
5670
+ sentinelProbeErrors.length = sentinelProbeErrorCount;
5671
+ }
5672
+ if (s.ok) {
5673
+ if (recovery < 0) return succeed(cur);
5674
+ if (s.span.end <= cur) {
5675
+ throw new TypeError("scanTo recovery requires a sentinel that consumes input");
5676
+ }
5677
+ if (firstSentinel < 0) {
5678
+ firstSentinel = cur;
5679
+ sentinelErrorCount = sentinelProbeErrorCount;
5680
+ }
5681
+ sentinelCount++;
5682
+ cur = s.span.end;
5683
+ continue;
5684
+ }
5685
+ if (stopAt !== void 0) {
5686
+ const errorCount = ctx._errors?.length ?? -1;
5687
+ const stop = stopAt.parse(input, cur, probeCtx);
5688
+ const errors = ctx._errors;
5689
+ if (errors !== void 0 && errorCount >= 0 && errors.length > errorCount) {
5690
+ errors.length = errorCount;
5691
+ }
5692
+ if (stop.ok) {
5693
+ if (recovery < 0) {
5694
+ recovery = cur;
5695
+ recoveryErrorCount = errorCount;
5696
+ }
5697
+ return succeed(recoveredEnd());
5698
+ }
5699
+ }
5606
5700
  let advanced = false;
5607
5701
  for (const skipper of skip2) {
5702
+ const errorCount = ctx._errors?.length ?? -1;
5608
5703
  const r = skipper.parse(input, cur, probeCtx);
5609
5704
  if (r.ok && r.span.end > cur) {
5610
5705
  cur = r.span.end;
5611
5706
  advanced = true;
5612
5707
  break;
5613
5708
  }
5709
+ const errors = ctx._errors;
5710
+ if (errors !== void 0 && errorCount >= 0 && errors.length > errorCount) {
5711
+ errors.length = errorCount;
5712
+ }
5713
+ }
5714
+ if (advanced) continue;
5715
+ if (recoverAt !== void 0) {
5716
+ const errorCount = ctx._errors?.length ?? -1;
5717
+ const recover = recoverAt.parse(input, cur, probeCtx);
5718
+ const errors = ctx._errors;
5719
+ if (errors !== void 0 && errorCount >= 0 && errors.length > errorCount) {
5720
+ errors.length = errorCount;
5721
+ }
5722
+ if (recover.ok) {
5723
+ if (recover.span.end <= cur) {
5724
+ throw new TypeError("scanTo recoverAt must consume input");
5725
+ }
5726
+ if (recovery < 0) {
5727
+ recovery = cur;
5728
+ recoveryErrorCount = errorCount;
5729
+ }
5730
+ if (firstSentinel >= 0 && (sentinelCount & 1) === 1) {
5731
+ return succeed(recoveredEnd());
5732
+ }
5733
+ cur = recover.span.end;
5734
+ continue;
5735
+ }
5614
5736
  }
5615
- if (!advanced) cur++;
5737
+ cur++;
5616
5738
  }
5739
+ if (recovery >= 0) return succeed(recoveredEnd());
5617
5740
  if (orEOF) {
5618
- if (ctx.trackLines) recordLineRangeFromContext(ctx, input, pos, cur);
5619
- emit(cur);
5620
- return { ok: true, value: input.slice(pos, cur), span: { start: pos, end: cur } };
5741
+ return succeed(cur);
5621
5742
  }
5622
5743
  const sentDef = sentinel._def;
5623
5744
  const expected = sentDef.tag === "literal" ? [JSON.stringify(sentDef.value)] : ["sentinel"];
@@ -6130,7 +6251,7 @@ function hasNodeDef(p, seen = /* @__PURE__ */ new Set()) {
6130
6251
  case "sepBy":
6131
6252
  return hasNodeDef(d.parser, seen) || hasNodeDef(d.separator, seen);
6132
6253
  case "scanTo":
6133
- return hasNodeDef(d.sentinel, seen) || d.skip.some((x) => hasNodeDef(x, seen));
6254
+ return hasNodeDef(d.sentinel, seen) || d.skip.some((x) => hasNodeDef(x, seen)) || d.recoverAt !== void 0 && hasNodeDef(d.recoverAt, seen) || d.stopAt !== void 0 && hasNodeDef(d.stopAt, seen);
6134
6255
  case "recover":
6135
6256
  return hasNodeDef(d.parser, seen) || hasNodeDef(d.sentinel, seen);
6136
6257
  case "expect":
@@ -6169,7 +6290,7 @@ function mayCommitFailure(p, seen = /* @__PURE__ */ new Set(), resolve2) {
6169
6290
  case "withCtx":
6170
6291
  return mayCommitFailure(d.parser, seen, resolve2);
6171
6292
  case "scanTo":
6172
- return mayCommitFailure(d.sentinel, seen, resolve2) || d.skip.some((x) => mayCommitFailure(x, seen, resolve2));
6293
+ return mayCommitFailure(d.sentinel, seen, resolve2) || d.skip.some((x) => mayCommitFailure(x, seen, resolve2)) || d.recoverAt !== void 0 && mayCommitFailure(d.recoverAt, seen, resolve2) || d.stopAt !== void 0 && mayCommitFailure(d.stopAt, seen, resolve2);
6173
6294
  case "lazy": {
6174
6295
  try {
6175
6296
  return mayCommitFailure(d.thunk(), seen, resolve2);
@@ -7659,7 +7780,9 @@ var Encoder = class {
7659
7780
  followClass(parsers, i) {
7660
7781
  let fs = { kind: "empty" };
7661
7782
  const rr = this.refResolver();
7662
- for (let j = i + 1; j < parsers.length; j++) fs = union(fs, firstSetOf(parsers[j], /* @__PURE__ */ new Set(), rr));
7783
+ for (let j = i + 1; j < parsers.length; j++) {
7784
+ fs = union(fs, firstSetOf(parsers[j], /* @__PURE__ */ new Set(), rr, this.activeTrivia));
7785
+ }
7663
7786
  return this.charClass(fs);
7664
7787
  }
7665
7788
  constant(v) {
@@ -7876,7 +7999,7 @@ var Encoder = class {
7876
7999
  */
7877
8000
  subtree(c) {
7878
8001
  const ip = this.node(c).ip;
7879
- const fs = firstSetOf(c, /* @__PURE__ */ new Set(), this.refResolver());
8002
+ const fs = firstSetOf(c, /* @__PURE__ */ new Set(), this.refResolver(), this.activeTrivia);
7880
8003
  return [ip, fs.kind === "empty" ? -2 : this.charClass(fs)];
7881
8004
  }
7882
8005
  /** Pool one scan spec. One per combinator: `node()` memoizes by identity. */
@@ -8022,6 +8145,8 @@ var Encoder = class {
8022
8145
  flags: (d.raw ? 1 : 0) | (d.orEOF ? 2 : 0),
8023
8146
  skip: d.skip.map((c) => this.subtree(c)),
8024
8147
  sentinel: this.subtree(d.sentinel),
8148
+ ...d.recoverAt === void 0 ? {} : { recoverAt: this.subtree(d.recoverAt) },
8149
+ ...d.stopAt === void 0 ? {} : { stopAt: this.subtree(d.stopAt) },
8025
8150
  sent: sentDef.tag === "literal" ? sentDef.value : null
8026
8151
  }));
8027
8152
  }
@@ -8095,12 +8220,12 @@ var Encoder = class {
8095
8220
  return this.covWrap(gated, armCovIds?.[src], 1);
8096
8221
  });
8097
8222
  const rr = this.refResolver();
8098
- const finalChoice = classifyFinalChoice(arms, rr);
8223
+ const finalChoice = classifyFinalChoice(arms, rr, this.activeTrivia);
8099
8224
  const transactionalFirst = arms.map((arm, i) => {
8100
8225
  if (!finalChoice.nullable[i]) return void 0;
8101
8226
  const def = arm._def;
8102
8227
  if (def.tag !== "attempt" || matchesEmpty(def.parser, /* @__PURE__ */ new Set(), rr)) return void 0;
8103
- return firstSetOf(def.parser, /* @__PURE__ */ new Set(), rr);
8228
+ return firstSetOf(def.parser, /* @__PURE__ */ new Set(), rr, this.activeTrivia);
8104
8229
  });
8105
8230
  const gateFirst = finalChoice.firstSets.map((first, i) => transactionalFirst[i] ?? first);
8106
8231
  const classes = gateFirst.map((first, i) => finalChoice.nullable[i] && transactionalFirst[i] === void 0 ? -1 : this.charClass(first));
@@ -8147,7 +8272,7 @@ var Encoder = class {
8147
8272
  case "oneOrMore": {
8148
8273
  const child = this.node(d.parser).ip;
8149
8274
  const rr = this.refResolver();
8150
- const itemClass = matchesEmpty(d.parser, /* @__PURE__ */ new Set(), rr) ? -1 : this.existingCharClass(firstSetOf(d.parser, /* @__PURE__ */ new Set(), rr));
8275
+ const itemClass = matchesEmpty(d.parser, /* @__PURE__ */ new Set(), rr) ? -1 : this.existingCharClass(firstSetOf(d.parser, /* @__PURE__ */ new Set(), rr, this.activeTrivia));
8151
8276
  const op = d.valueUnused ? OP_REPV : OP_REP;
8152
8277
  const min = d.tag === "many" ? 0 : d.min;
8153
8278
  return this.rec ? this.emit(op, child, min, d.max ?? -1, -1, 0, this.expected(deriveExpected(d.parser)), itemClass) : this.emit(op, child, min, d.max ?? -1, -1, 0);
@@ -8165,7 +8290,7 @@ var Encoder = class {
8165
8290
  sep,
8166
8291
  flags,
8167
8292
  this.expected(deriveExpected(d.parser)),
8168
- this.charClass(firstSetOf(d.separator, /* @__PURE__ */ new Set(), this.refResolver()))
8293
+ this.charClass(firstSetOf(d.separator, /* @__PURE__ */ new Set(), this.refResolver(), this.activeTrivia))
8169
8294
  );
8170
8295
  }
8171
8296
  return d.min >= 2 ? this.emit(OP_REP, child, d.min, d.max ?? -1, sep, flags, this.expected(deriveExpected(d.parser))) : this.emit(OP_REP, child, d.min, d.max ?? -1, sep, flags);
@@ -8220,7 +8345,7 @@ var Encoder = class {
8220
8345
  d.tags === void 0 ? -1 : this.constant(d.tags)
8221
8346
  );
8222
8347
  if (matchesEmpty(d.parser)) return body;
8223
- const fs = d.parser._def.tag === "lazy" ? firstSetOf(d.parser, /* @__PURE__ */ new Set(), this.refResolver()) : d.parser._meta.firstSet;
8348
+ const fs = d.parser._def.tag === "lazy" ? firstSetOf(d.parser, /* @__PURE__ */ new Set(), this.refResolver(), this.activeTrivia) : d.parser._meta.firstSet;
8224
8349
  if (fs.kind === "any") return body;
8225
8350
  const cls = this.charClass(fs);
8226
8351
  if (cls < 0) return body;
@@ -8334,7 +8459,7 @@ var Encoder = class {
8334
8459
  case "attempt": {
8335
8460
  const inner = this.emit(OP_ATTEMPT, this.node(d.parser).ip);
8336
8461
  if (!this.failureNeedsRollback(d.parser, void 0)) this.failureRollbackCleanSites.add(inner);
8337
- const fs = d.parser._def.tag === "lazy" ? firstSetOf(d.parser, /* @__PURE__ */ new Set(), this.refResolver()) : d.parser._meta.firstSet;
8462
+ const fs = d.parser._def.tag === "lazy" ? firstSetOf(d.parser, /* @__PURE__ */ new Set(), this.refResolver(), this.activeTrivia) : d.parser._meta.firstSet;
8338
8463
  if (fs.kind === "any" || matchesEmpty(d.parser)) return inner;
8339
8464
  const cls = this.charClass(fs);
8340
8465
  if (cls < 0) return inner;
@@ -8455,6 +8580,8 @@ var Encoder = class {
8455
8580
  const refs = [];
8456
8581
  for (const s of this.scans) {
8457
8582
  if (s.sentinel !== void 0) refs.push(s.sentinel);
8583
+ if (s.recoverAt !== void 0) refs.push(s.recoverAt);
8584
+ if (s.stopAt !== void 0) refs.push(s.stopAt);
8458
8585
  refs.push(...s.skip);
8459
8586
  }
8460
8587
  for (const set of this.scanSkipSets) refs.push(...set);
@@ -8474,7 +8601,9 @@ var Encoder = class {
8474
8601
  this.scans = this.scans.map((s) => ({
8475
8602
  ...s,
8476
8603
  skip: s.skip.map(res),
8477
- ...s.sentinel === void 0 ? {} : { sentinel: res(s.sentinel) }
8604
+ ...s.sentinel === void 0 ? {} : { sentinel: res(s.sentinel) },
8605
+ ...s.recoverAt === void 0 ? {} : { recoverAt: res(s.recoverAt) },
8606
+ ...s.stopAt === void 0 ? {} : { stopAt: res(s.stopAt) }
8478
8607
  }));
8479
8608
  this.scanSkipSets = this.scanSkipSets.map((set) => set.map(res));
8480
8609
  }
@@ -11911,6 +12040,8 @@ function assemble(t2, prog, cfg) {
11911
12040
  for (const s of prog.scans ?? []) {
11912
12041
  for (const r of s.skip) labelExtraIps.push(r[0]);
11913
12042
  if (s.sentinel !== void 0) labelExtraIps.push(s.sentinel[0]);
12043
+ if (s.recoverAt !== void 0) labelExtraIps.push(s.recoverAt[0]);
12044
+ if (s.stopAt !== void 0) labelExtraIps.push(s.stopAt[0]);
11914
12045
  }
11915
12046
  for (const set of prog.scanSkip ?? []) for (const r of set) labelExtraIps.push(r[0]);
11916
12047
  const closureLabels = computeSiteLabels(
@@ -14596,6 +14727,8 @@ function assemble(t2, prog, cfg) {
14596
14727
  for (const s of prog.scans ?? []) {
14597
14728
  for (const r of s.skip) extraIps.push(r[0]);
14598
14729
  if (s.sentinel !== void 0) extraIps.push(s.sentinel[0]);
14730
+ if (s.recoverAt !== void 0) extraIps.push(s.recoverAt[0]);
14731
+ if (s.stopAt !== void 0) extraIps.push(s.stopAt[0]);
14599
14732
  }
14600
14733
  for (const set of prog.scanSkip ?? []) for (const r of set) extraIps.push(r[0]);
14601
14734
  const roots = [...Object.values(prog.rules), ...extraIps];
@@ -14807,7 +14940,13 @@ function assemble(t2, prog, cfg) {
14807
14940
  continue;
14808
14941
  }
14809
14942
  const sentDef = typeof s.sent === "string" ? { tag: "literal", value: s.sent, caseInsensitive: false } : void 0;
14810
- scansArr.push(scanTo(subtreeComb(s.sentinel, sentDef), { skip, raw, orEOF: (s.flags & 2) !== 0 }));
14943
+ scansArr.push(scanTo(subtreeComb(s.sentinel, sentDef), {
14944
+ skip,
14945
+ raw,
14946
+ orEOF: (s.flags & 2) !== 0,
14947
+ ...s.recoverAt === void 0 ? {} : { recoverAt: subtreeComb(s.recoverAt) },
14948
+ ...s.stopAt === void 0 ? {} : { stopAt: subtreeComb(s.stopAt) }
14949
+ }));
14811
14950
  }
14812
14951
  const scans = scansArr;
14813
14952
  const scanSkip = (prog.scanSkip ?? []).map((set) => set.map((r) => subtreeComb(r)));
@@ -15024,6 +15163,8 @@ function emitRef(r) {
15024
15163
  function emitScanSpec(s) {
15025
15164
  const parts = [`kind:${s.kind}`, `flags:${s.flags}`, `skip:[${s.skip.map(emitRef).join(",")}]`];
15026
15165
  if (s.sentinel !== void 0) parts.push(`sentinel:${emitRef(s.sentinel)}`);
15166
+ if (s.recoverAt !== void 0) parts.push(`recoverAt:${emitRef(s.recoverAt)}`);
15167
+ if (s.stopAt !== void 0) parts.push(`stopAt:${emitRef(s.stopAt)}`);
15027
15168
  if (s.sent !== void 0) parts.push(`sent:${s.sent === null ? "null" : jsString(s.sent)}`);
15028
15169
  if (s.open !== void 0) parts.push(`open:${jsString(s.open)}`);
15029
15170
  if (s.close !== void 0) parts.push(`close:${jsString(s.close)}`);
@@ -15039,6 +15180,8 @@ function emitAssemblies(prog, cfgs) {
15039
15180
  for (const s of prog.scans ?? []) {
15040
15181
  for (const r of s.skip) extraIps.push(r[0]);
15041
15182
  if (s.sentinel !== void 0) extraIps.push(s.sentinel[0]);
15183
+ if (s.recoverAt !== void 0) extraIps.push(s.recoverAt[0]);
15184
+ if (s.stopAt !== void 0) extraIps.push(s.stopAt[0]);
15042
15185
  }
15043
15186
  for (const set of prog.scanSkip ?? []) for (const r of set) extraIps.push(r[0]);
15044
15187
  const out = [];
@@ -15181,7 +15324,12 @@ function children(def, winners) {
15181
15324
  case "sepBy":
15182
15325
  return [def.parser, def.separator];
15183
15326
  case "scanTo":
15184
- return [def.sentinel, ...def.skip];
15327
+ return [
15328
+ def.sentinel,
15329
+ ...def.skip,
15330
+ ...def.recoverAt === void 0 ? [] : [def.recoverAt],
15331
+ ...def.stopAt === void 0 ? [] : [def.stopAt]
15332
+ ];
15185
15333
  case "lazy": {
15186
15334
  let resolved;
15187
15335
  try {
@@ -15294,7 +15442,7 @@ function payloadKey(p, d) {
15294
15442
  case "expect":
15295
15443
  return `expect\0${d.label ?? ""}\0${d.expected.join("")}`;
15296
15444
  case "scanTo":
15297
- return `scanTo\0${d.raw}\0${d.orEOF}`;
15445
+ return `scanTo\0${d.raw}\0${d.orEOF}\0${d.recoverAt !== void 0}\0${d.stopAt !== void 0}`;
15298
15446
  case "guard":
15299
15447
  return `guard\0${fnKey(d.predSrc, d.predicate)}`;
15300
15448
  case "adjacency":
@@ -15409,8 +15557,12 @@ function segment(d, index) {
15409
15557
  return index === 0 ? "sepBy.item" : "sepBy.sep";
15410
15558
  case "recover":
15411
15559
  return index === 0 ? "recover.body" : "recover.sentinel";
15412
- case "scanTo":
15413
- return index === 0 ? "scanTo.sentinel" : `scanTo.skip[${index - 1}]`;
15560
+ case "scanTo": {
15561
+ if (index === 0) return "scanTo.sentinel";
15562
+ if (index <= d.skip.length) return `scanTo.skip[${index - 1}]`;
15563
+ if (d.recoverAt !== void 0 && index === d.skip.length + 1) return "scanTo.recoverAt";
15564
+ return "scanTo.stopAt";
15565
+ }
15414
15566
  default:
15415
15567
  return d.tag;
15416
15568
  }
@@ -17722,7 +17874,7 @@ function subtreeContains(p, targets) {
17722
17874
  const kids = [];
17723
17875
  if (Array.isArray(rec.parsers)) kids.push(...rec.parsers);
17724
17876
  if (Array.isArray(rec.skip)) kids.push(...rec.skip);
17725
- for (const k of ["parser", "main", "skipped", "separator", "sentinel", "selector", "otherwise", "fallback", "triviaParser"])
17877
+ for (const k of ["parser", "main", "skipped", "separator", "sentinel", "recoverAt", "stopAt", "selector", "otherwise", "fallback", "triviaParser"])
17726
17878
  if (rec[k]) kids.push(rec[k]);
17727
17879
  if (d.tag === "dispatch") {
17728
17880
  for (const c2 of d.cases) kids.push(c2.parser);