parseman 0.60.5 → 0.61.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/diagnostics.js +77 -40
  2. package/dist/analysis/diagnostics.js.map +3 -3
  3. package/dist/cli/index.js +77 -40
  4. package/dist/cli/index.js.map +3 -3
  5. package/dist/combinators/choice.d.ts.map +1 -1
  6. package/dist/combinators/expect.d.ts.map +1 -1
  7. package/dist/combinators/link-scope.d.ts +7 -0
  8. package/dist/combinators/link-scope.d.ts.map +1 -0
  9. package/dist/combinators/node.d.ts.map +1 -1
  10. package/dist/combinators/parser.d.ts.map +1 -1
  11. package/dist/combinators/trivia-boundary.d.ts +5 -3
  12. package/dist/combinators/trivia-boundary.d.ts.map +1 -1
  13. package/dist/compiler/token-capability.js +7 -0
  14. package/dist/compiler/token-capability.js.map +1 -1
  15. package/dist/compiler/value-usage.d.ts.map +1 -1
  16. package/dist/functional/run.d.ts.map +1 -1
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +121 -70
  20. package/dist/index.js.map +3 -3
  21. package/dist/language-service/index.js +1 -1
  22. package/dist/language-service/index.js.map +1 -1
  23. package/dist/plugin/index.js +284 -233
  24. package/dist/plugin/index.js.map +3 -3
  25. package/dist/run/index.js +1 -1
  26. package/dist/run/index.js.map +1 -1
  27. package/dist/spec/index.js.map +1 -1
  28. package/dist/table/assemble.d.ts.map +1 -1
  29. package/dist/table/emit-assembly.d.ts.map +1 -1
  30. package/dist/table/emit.d.ts.map +1 -1
  31. package/dist/table/encode.d.ts.map +1 -1
  32. package/dist/table/exec.d.ts.map +1 -1
  33. package/dist/table/index.js +41 -10
  34. package/dist/table/index.js.map +3 -3
  35. package/dist/table/ops.d.ts +6 -0
  36. package/dist/table/ops.d.ts.map +1 -1
  37. package/dist/table/program.d.ts +3 -1
  38. package/dist/table/program.d.ts.map +1 -1
  39. package/dist/version.d.ts +1 -1
  40. package/package.json +1 -1
  41. package/src/combinators/choice.ts +3 -1
  42. package/src/combinators/expect.ts +1 -0
  43. package/src/combinators/grammar.ts +1 -1
  44. package/src/combinators/link-scope.ts +19 -0
  45. package/src/combinators/node.ts +11 -2
  46. package/src/combinators/parser.ts +37 -31
  47. package/src/combinators/trivia-boundary.ts +11 -3
  48. package/src/compiler/value-usage.ts +16 -29
  49. package/src/functional/run.ts +3 -1
  50. package/src/index.ts +1 -1
  51. package/src/table/assemble.ts +11 -1
  52. package/src/table/emit-assembly.ts +10 -1
  53. package/src/table/emit.ts +5 -1
  54. package/src/table/encode.ts +16 -9
  55. package/src/table/exec.ts +11 -9
  56. package/src/table/ops.ts +6 -0
  57. package/src/table/program.ts +8 -2
  58. package/src/table/site-labels.ts +3 -3
  59. package/src/version.ts +1 -1
@@ -210,6 +210,12 @@ export declare const OP_TOKEN = 29;
210
210
  * is why this restores the saved value rather than writing `false`.
211
211
  */
212
212
  export declare const OP_SCOPE_CAP = 30;
213
+ /**
214
+ * `k` of a `SCOPE_CAP` row whose `parser({ captureTrivia: true })` names no trivia.
215
+ * It raises capture and leaves the trivia the scope was entered with in force,
216
+ * where `k = -1` clears it (`trivia: null`).
217
+ */
218
+ export declare const SCOPE_INHERIT = -2;
213
219
  /**
214
220
  * `WITHCTX k c` — `withCtx(extra, c)`. `k >= 0` is `extra` in the const pool
215
221
  * (the replace form); `k < 0` is the derive form, `~k` indexing the author's
@@ -1 +1 @@
1
- {"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../src/table/ops.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../src/table/ops.ts"],"names":[],"mappings":"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"}
@@ -285,7 +285,9 @@ export type CompactProgram = {
285
285
  readonly c: readonly number[];
286
286
  readonly k: readonly unknown[];
287
287
  readonly x: readonly string[];
288
- readonly e: readonly (readonly string[])[];
288
+ /** Expected sets, as indices into `es`. */
289
+ readonly e: readonly (readonly number[])[];
290
+ readonly es: readonly string[];
289
291
  readonly d: readonly (readonly number[])[];
290
292
  readonly r: Readonly<Record<string, number>>;
291
293
  readonly f: readonly unknown[];
@@ -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":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAExE,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAKzF,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAElE,OAAO,EAA0B,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAE/E;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;IAChC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,sDAAsD;IACtD,QAAQ,CAAC,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,EAAE,SAAS,OAAO,EAAE,CAAA;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAA;IAC3C,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAA;IAC7C;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,SAAS,YAAY,EAAE,CAAA;IACrC;qEACiE;IACjE,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IACrC,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAA;IAChD,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAChD;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACtB;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IAC3B;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,SAAS,UAAU,EAAE,CAAC,EAAE,CAAA;IACtD;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,sDAAsD;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAA;IACpC;;;;;;;;OAQG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;IACjC;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;IAC5C;;;;;;;;OAQG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IACtE;;;;;;;;OAQG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAA;CAC9C,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAEhE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,cAAc,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAOjG;AAWD,wGAAwG;AACxG,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,cAAc,GAAG,OAAO,CAAA;CAAE,EAAE,CAEpI;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;AAE3D;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,CAAA;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAA;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAA;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,gHAAgH;IAChH,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAA;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;IAC1B,8CAA8C;IAC9C,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,4EAA4E;AAC5E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,GAAG,UAAU,EAAE,CAKlD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,CAK7D;AAED,+EAA+E;AAC/E,MAAM,MAAM,UAAU,GAAG;IACvB,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAA;IAC7D,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAA;IACtD,qEAAqE;IACrE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7B,QAAQ,CAAC,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IAC9B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7B,2CAA2C;IAC3C,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAA;IAC1C,QAAQ,CAAC,EAAE,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAA;IAC1C,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5C,QAAQ,CAAC,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IAC9B,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IAClB,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,YAAY,EAAE,CAAA;IACpC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IACpC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,cAAc,EAAE,CAAA;IACvC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACnB,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;IAC1B,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;IACnC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAA;IACjC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,SAAS,UAAU,EAAE,CAAC,EAAE,CAAA;IAChD,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACnB,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3D,wDAAwD;IACxD,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAA;CAC5C,CAAA;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,GAAG,cAAc,GAAG,YAAY,CAqB5E;AAED;uEACuE;AACvE,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,CAAA;AAE/E,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GAAG,SAAS;IACpC,IAAI,EAAE,CAAC;IAAE,MAAM,EAAE,MAAM;IAAE,WAAW,EAAE,MAAM;IAAE,QAAQ,EAAE,MAAM;IAC9D,WAAW,EAAE,MAAM;IAAE,MAAM,EAAE,MAAM;IACnC,WAAW,EAAE,MAAM;IAAE,MAAM,EAAE,MAAM;IACnC,WAAW,EAAE,MAAM;IAAE,MAAM,EAAE,MAAM;IACnC,WAAW,EAAE,MAAM;IAAE,MAAM,EAAE,MAAM;IACnC,UAAU,EAAE,CAAC,GAAG,CAAC;CAClB,GAAG,SAAS;IACX,IAAI,EAAE,CAAC;IAAE,MAAM,EAAE,MAAM;IACvB,UAAU,EAAE,MAAM;IAAE,UAAU,EAAE,MAAM;IAAE,UAAU,EAAE,MAAM;IAAE,UAAU,EAAE,MAAM;IAC9E,QAAQ,EAAE,MAAM;IAChB,aAAa,EAAE,MAAM;IAAE,QAAQ,EAAE,MAAM;IACvC,eAAe,EAAE,MAAM;IAAE,UAAU,EAAE,MAAM;IAC3C,UAAU,EAAE,CAAC,GAAG,CAAC;CAClB,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,MAAM,EAAE,CAAC,GAC/D,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;AAEpD,+DAA+D;AAC/D,MAAM,MAAM,YAAY,GAAG;IACzB,wCAAwC;IACxC,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAA;IACtE,iDAAiD;IACjD,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAA;IACtE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,oBAAoB,GAAG,SAAS,EACtC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,IAAI,oBAAoB,CAatC;AAED,4EAA4E;AAC5E,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,EAAE,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B,CAAA;AAED,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,EAAE,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAA;IAClD;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IAC9B,QAAQ,CAAC,GAAG,EAAE,SAAS,OAAO,EAAE,CAAA;IAChC,QAAQ,CAAC,EAAE,EAAE,SAAS,aAAa,EAAE,CAAA;IACrC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAA;IAC3C,QAAQ,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC1C,QAAQ,CAAC,GAAG,EAAE,SAAS,oBAAoB,EAAE,CAAA;IAC7C,QAAQ,CAAC,GAAG,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC1C,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAA;IACjD,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,CAAA;IAC/C;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,EAAE,CAAA;IAC1D,kFAAkF;IAClF,QAAQ,CAAC,cAAc,EAAE,SAAS,OAAO,EAAE,CAAA;IAC3C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACjD,CAAA;AAmBD,wEAAwE;AACxE,wBAAgB,eAAe,CAC7B,IAAI,EAAE,YAAY,EAClB,QAAQ,CAAC,EAAE,aAAa,EACxB,MAAM,GAAE;IACN,QAAQ,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1D,QAAQ,CAAC,yBAAyB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACxD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACvD,QAAQ,CAAC,sBAAsB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7D,QAAQ,CAAC,uBAAuB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAClD,GACL,YAAY,CAad;AAED;2DAC2D;AAC3D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAErF;AAED;kFACkF;AAClF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED;;iFAEiF;AACjF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAE5E;AAED;;0EAE0E;AAC1E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED;iEACiE;AACjE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED,qEAAqE;AACrE,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,KAAK,WAAW,CAAC,OAAO,CAAC,CAAA;AAoB/F,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAoBrF;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAuB/E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAQxD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAMlE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAI3F;AAuDD,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAgC9D;AAID;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;CAClC,CAAA;AAED,4EAA4E;AAC5E,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;CACxD,CAAA;AAcD,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAA;IAC1B,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;KAAE,CAAC,CAAC,CAAA;CACrH,CAAA;AAED;;;;GAIG;AACH,QAAA,MAAM,aAAa,iLAYiC,CAAA;AAEpD;;;;;;;;;;GAUG;AACH;;;;;;;;GAQG;AACH,KAAK,WAAW,GAAG,KAAK,CAAA;AACxB,KAAK,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAC1G,KAAK,WAAW,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAA;AACrC,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,YAAY,EAAE,cAAc,CAAC,CAAC,CAAA;AAErF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAChD,QAAQ,EAAE,MAAM,GACf,aAAa,CAwEf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CA6B/E;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAWnE"}
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.5";
16
+ export declare const PARSEMAN_VERSION = "0.61.0";
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.5",
3
+ "version": "0.61.0",
4
4
  "packageManager": "pnpm@10.15.1",
5
5
  "engines": {
6
6
  "node": "^20.19.0 || >=22.13.0"
@@ -150,7 +150,9 @@ export function choice<T extends [Combinator<unknown> | GatedArm<unknown>, ...(C
150
150
  const result = parsers[idx]!.parse(input, pos, ctx)
151
151
  if (result.ok) return result as ParseResult<UnionArms<T>>
152
152
  expected.push(...result.expected)
153
- if (result.committed) return { ok: false, expected, span: { start: pos, end: pos }, committed: true }
153
+ // A committed arm (a `dispatch()` whose selector matched) fails where it
154
+ // failed, as on the ordered path below and in every table driver.
155
+ if (result.committed) return { ok: false, expected, span: result.span, committed: true }
154
156
  return { ok: false, expected, span: { start: pos, end: pos } }
155
157
  }
156
158
  // No arm's first set holds this character (or the input has ended), so
@@ -81,6 +81,7 @@ function derive(c: Combinator<unknown>, seen: Set<Combinator<unknown>>): string[
81
81
  case 'optional':
82
82
  case 'many':
83
83
  case 'oneOrMore':
84
+ case 'sepBy':
84
85
  case 'transform':
85
86
  case 'not':
86
87
  case 'peek': return deriveExpected(def.parser)
@@ -215,7 +215,7 @@ export function parser<T>(opts: ParserOptions, root: Combinator<T>): ParsemanPar
215
215
  ctx.triviaKindLabels = undefined
216
216
  } else if (scopeTrivia !== undefined) {
217
217
  ctx.trivia = scopeTrivia
218
- if (scopeLabels) ctx.triviaKindLabels = scopeLabels
218
+ ctx.triviaKindLabels = scopeLabels
219
219
  }
220
220
  if (forceCaptureTrivia || _ctx?.captureTrivia) ctx.captureTrivia = true
221
221
  // Kind-filter for per-node capture. Resolve against this scope's trivia
@@ -0,0 +1,19 @@
1
+ let scope: (() => void)[] | undefined
2
+
3
+ /** Run `settle` once the `rules()` factory building this node has its references defined.
4
+ * Outside a factory there is nothing to wait for. */
5
+ export function afterLink(settle: () => void): void {
6
+ scope?.push(settle)
7
+ }
8
+
9
+ /** Collect what `build` asks to run after linking. A `rules()` nested in a factory uses
10
+ * the outer list, because its nodes can read the outer grammar's references too. */
11
+ export function collectAfterLink<T>(pending: (() => void)[], build: () => T): T {
12
+ const outer = scope
13
+ scope = outer ?? pending
14
+ try {
15
+ return build()
16
+ } finally {
17
+ scope = outer
18
+ }
19
+ }
@@ -3,6 +3,7 @@ import { beginCstNodeCapture, endCstNodeCapture, pushCstChild } from '../cst/cap
3
3
  import { buildReadsTrivia, buildReadsState, cstOutputHost } from '../compiler/build-arity.ts'
4
4
  import { buildFieldMap, buildReadsFields, parserHasOwnFields } from '../compiler/fields.ts'
5
5
  import { consumeTrivia } from './trivia-skip.ts'
6
+ import { afterLink } from './link-scope.ts'
6
7
  import { matchesEmpty, startsFirstSet } from './first-set.ts'
7
8
  import { deriveExpected } from './expect.ts'
8
9
  import { annotateSpanFromLineContext } from '../line-index.ts'
@@ -231,8 +232,16 @@ export function node<N>(
231
232
  // a log it never reads, at the price of the full capture frame on every match.
232
233
  const capturesTrivia = captureTrivia || (build ? buildReadsTrivia(def) : project === undefined)
233
234
  const readsState = build ? buildReadsState(def) : project === undefined
234
- const hasOwnFields = parserHasOwnFields(combinator)
235
- const capturesFields = hasOwnFields && (build ? buildReadsFields(def) : project === undefined)
235
+ let hasOwnFields = parserHasOwnFields(combinator)
236
+ let capturesFields = hasOwnFields && (build ? buildReadsFields(def) : project === undefined)
237
+ // Inside a `rules()` factory a body that reaches its field through `g.X` reads as
238
+ // having none until that reference is defined, so settle it again then.
239
+ if (!hasOwnFields) {
240
+ afterLink(() => {
241
+ hasOwnFields = parserHasOwnFields(combinator)
242
+ capturesFields = hasOwnFields && (build ? buildReadsFields(def) : project === undefined)
243
+ })
244
+ }
236
245
  // First-set fail-fast (mirrors emitNode's codegen guard): a node whose body can't
237
246
  // match empty and whose first set can't start here can only fail, so reject BEFORE
238
247
  // allocating the CST capture frame. Sound and output-neutral — the failing body
@@ -4,6 +4,7 @@ import type { Runnable } from '../functional/run.ts'
4
4
  import { any } from './first-set.ts'
5
5
  import { ref } from './ref.ts'
6
6
  import { markUnusedValues } from '../compiler/value-usage.ts'
7
+ import { collectAfterLink } from './link-scope.ts'
7
8
  import { parser as grammarParser } from './grammar.ts'
8
9
  import { collectGrammarReflection, NODE_TAG, NODE_TYPE, type GrammarWithReflection } from '../cst/reflection.ts'
9
10
  import { attachGrammarReflection } from '../cst/reflection-attach.ts'
@@ -289,6 +290,7 @@ export function linkRules(
289
290
  // before the rule's own parser is built — enabling forward references. A later
290
291
  // recipe's definition of a name WINS; the name keeps its first position.
291
292
  const winners = new Map<string, { parser: Combinator<unknown>; options: RulesOptions | undefined }>()
293
+ const afterLink: (() => void)[] = []
292
294
  // `prior.X`: the winner for X BEFORE the running recipe, read while that recipe's
293
295
  // factory runs (its own definitions join `winners` only after it returns). It is
294
296
  // the earlier definition itself, inlined into the new rule's graph, so it costs no
@@ -307,41 +309,45 @@ export function linkRules(
307
309
  return hole
308
310
  },
309
311
  })
310
- for (const recipe of recipes) {
311
- const definitions = recipe.factory(proxy, prior)
312
- for (const key of Object.keys(definitions)) {
313
- winners.set(key, { parser: definitions[key]!, options: recipe.options })
314
- }
315
- }
316
- const keys = [...winners.keys()]
317
-
318
- // Fill each ref with its actual definition, or store directly if never accessed via proxy.
319
312
  const copies = new Map<object, Combinator<unknown>>()
320
- for (const [key, { parser: defined }] of winners) {
321
- const placeholder = cache[key]
322
- const parser = ownRule(defined, copies)
323
- if (placeholder === parser) {
324
- throw new Error(`rules(): rule "${key}" cannot be a direct alias to itself`)
313
+ try {
314
+ for (const recipe of recipes) {
315
+ const definitions = collectAfterLink(afterLink, () => recipe.factory(proxy, prior))
316
+ for (const key of Object.keys(definitions)) {
317
+ winners.set(key, { parser: definitions[key]!, options: recipe.options })
318
+ }
325
319
  }
326
- if (isDefinableRef(placeholder)) {
327
- if (!isNamedRuleRefForAnotherRule(parser, key)) tagRule(parser, key)
328
- placeholder.define(parser)
329
- // Propagate actual first-set so later choices wrapping this ref get correct dispatch.
330
- placeholder._meta.firstSet = parser._meta.firstSet
331
- placeholder._meta.canMatchNewline = parser._meta.canMatchNewline
332
- } else if (isNamedRuleRefForAnotherRule(parser, key) || link !== undefined) {
333
- if (!isNamedRuleRefForAnotherRule(parser, key)) tagRule(parser, key)
334
- const alias = ref()
335
- tagRule(alias, key)
336
- alias.define(parser)
337
- alias._meta.firstSet = parser._meta.firstSet
338
- alias._meta.canMatchNewline = parser._meta.canMatchNewline
339
- cache[key] = alias
340
- } else {
341
- tagRule(parser, key)
342
- cache[key] = parser
320
+ // Fill each ref with its actual definition, or store directly if never accessed via proxy.
321
+ for (const [key, { parser: defined }] of winners) {
322
+ const placeholder = cache[key]
323
+ const parser = ownRule(defined, copies)
324
+ if (placeholder === parser) {
325
+ throw new Error(`rules(): rule "${key}" cannot be a direct alias to itself`)
326
+ }
327
+ if (isDefinableRef(placeholder)) {
328
+ if (!isNamedRuleRefForAnotherRule(parser, key)) tagRule(parser, key)
329
+ placeholder.define(parser)
330
+ // Propagate actual first-set so later choices wrapping this ref get correct dispatch.
331
+ placeholder._meta.firstSet = parser._meta.firstSet
332
+ placeholder._meta.canMatchNewline = parser._meta.canMatchNewline
333
+ } else if (isNamedRuleRefForAnotherRule(parser, key) || link !== undefined) {
334
+ if (!isNamedRuleRefForAnotherRule(parser, key)) tagRule(parser, key)
335
+ const alias = ref()
336
+ tagRule(alias, key)
337
+ alias.define(parser)
338
+ alias._meta.firstSet = parser._meta.firstSet
339
+ alias._meta.canMatchNewline = parser._meta.canMatchNewline
340
+ cache[key] = alias
341
+ } else {
342
+ tagRule(parser, key)
343
+ cache[key] = parser
344
+ }
343
345
  }
346
+ } finally {
347
+ // A nested link's nodes wait on this list, so they settle even if this link throws.
348
+ for (const settle of afterLink) settle()
344
349
  }
350
+ const keys = [...winners.keys()]
345
351
 
346
352
  // Grammar-level stamps, per rule. Each touches only its own rule — a wrap
347
353
  // replaces that rule's entry, and references hold the placeholder — so one pass
@@ -20,9 +20,11 @@ const MAX_DEPTH = 12
20
20
  *
21
21
  * `lazy` is deliberately false and is never followed: a reference is the
22
22
  * delegation this question is about, so following it would both loop and answer
23
- * for a different rule. `grammar` is false because it declares its own scope, so
24
- * an outer install never reaches its body. `dispatch` is false because it is a
25
- * ROUTE: its arms re-enter from the routed token and spell their own padding.
23
+ * for a different rule. A `grammar` that names or clears trivia declares its own
24
+ * scope, so an outer install never reaches its body and the answer is false; one
25
+ * that does not (`parser({ trackLines: true }, …)`, which `rules({ trackLines })`
26
+ * wraps every rule in) inherits, so it is transparent. `dispatch` is false because
27
+ * it is a ROUTE: its arms re-enter from the routed token and spell their own padding.
26
28
  *
27
29
  * Structural and pure — callers resolve it ONCE, not per parse.
28
30
  */
@@ -35,6 +37,12 @@ export function hasOwnTriviaBoundary(p: Combinator<unknown>, depth: number = MAX
35
37
  // Multi-term forms: the gaps BETWEEN terms are the ambient-trivia positions.
36
38
  case 'sequence': return d.parsers.length > 1
37
39
  case 'many': case 'oneOrMore': case 'sepBy': return true
40
+ // A scope that names or clears trivia keeps an outer install out of its body.
41
+ // Any other inherits, so it falls through at no cost in depth: line tracking
42
+ // wraps every rule in one, and must not change what this walk sees.
43
+ case 'grammar':
44
+ if (d.triviaParser || d.clearTrivia) return false
45
+ depth++
38
46
  // Transparent wrappers — they add no position, so ask what they wrap.
39
47
  case 'node': case 'transform': case 'leaf': case 'label': case 'field':
40
48
  case 'token': case 'attempt': case 'optional': case 'expect': case 'withCtx':
@@ -41,19 +41,20 @@ export function markUnusedValues(root: Combinator<unknown>): void {
41
41
  case 'many':
42
42
  case 'oneOrMore':
43
43
  mark(def, consumed)
44
- visit(def.parser, consumed)
45
- return
46
44
  case 'optional':
47
45
  // `optional` returns `inner | null` — no aggregate array/tuple to elide, so
48
46
  // it carries no valueUnused flag. Still descend so an inner many/sequence
49
47
  // under a node() is analyzed (it benefits even when its optional wrapper
50
48
  // doesn't).
51
- visit(def.parser, consumed)
49
+ case 'label':
50
+ case 'trivia':
51
+ case 'attempt':
52
+ case 'withCtx':
53
+ case 'expect':
54
+ visit(def.parser, consumed) // single-child pass-through wrappers
52
55
  return
53
56
  case 'sequence':
54
57
  mark(def, consumed)
55
- for (const p of def.parsers) visit(p, consumed)
56
- return
57
58
  case 'choice':
58
59
  // value is the winning arm's value — propagate consumed to each arm.
59
60
  for (const p of def.parsers) visit(p, consumed)
@@ -66,14 +67,22 @@ export function markUnusedValues(root: Combinator<unknown>): void {
66
67
  return
67
68
  case 'node':
68
69
  // builds from captured children, NOT the inner parser value.
70
+ case 'not':
71
+ case 'peek':
72
+ // lookahead — value never observed
73
+ case 'token':
74
+ // token() returns the matched source slice, not the wrapped parser value.
75
+ // Its child still parses and captures one outer token leaf; inner aggregate
76
+ // values such as sequence tuples are unobserved and can be elided.
69
77
  visit(def.parser, false)
70
78
  return
71
79
  case 'transform':
72
80
  // the map fn reads the value → always consumed.
73
- visit(def.parser, true)
74
- return
75
81
  case 'field':
76
82
  // the field capture records the parsed value → always consumed.
83
+ case 'leaf':
84
+ // The reducer observes the complete inner value even when its own result
85
+ // is immediately captured by a node().
77
86
  visit(def.parser, true)
78
87
  return
79
88
  case 'sepBy':
@@ -83,10 +92,6 @@ export function markUnusedValues(root: Combinator<unknown>): void {
83
92
  visit(def.parser, true)
84
93
  visit(def.separator, false)
85
94
  return
86
- case 'not':
87
- case 'peek':
88
- visit(def.parser, false) // lookahead — value never observed
89
- return
90
95
  case 'grammar':
91
96
  visit(def.parser, consumed)
92
97
  if (def.triviaParser) visit(def.triviaParser, false)
@@ -95,24 +100,6 @@ export function markUnusedValues(root: Combinator<unknown>): void {
95
100
  visit(def.parser, consumed)
96
101
  visit(def.sentinel, false)
97
102
  return
98
- case 'token':
99
- // token() returns the matched source slice, not the wrapped parser value.
100
- // Its child still parses and captures one outer token leaf; inner aggregate
101
- // values such as sequence tuples are unobserved and can be elided.
102
- visit(def.parser, false)
103
- return
104
- case 'label':
105
- case 'trivia':
106
- case 'attempt':
107
- case 'withCtx':
108
- case 'expect':
109
- visit(def.parser, consumed) // single-child pass-through wrappers
110
- return
111
- case 'leaf':
112
- // The reducer observes the complete inner value even when its own result
113
- // is immediately captured by a node().
114
- visit(def.parser, true)
115
- return
116
103
  case 'lazy':
117
104
  // An INNER ref boundary — a distinct rule, analyzed on its own root. Don't
118
105
  // descend (and never call thunk(): an external ref would throw). A ref at
@@ -496,7 +496,9 @@ function runOnce(entry: Runnable, input: string, options: RunOptions): RunResult
496
496
 
497
497
  const value = r.ok ? (r as { value: unknown }).value : undefined
498
498
  let span = r.span ?? { start: 0, end: 0 }
499
- const expected = r.ok ? [] : ((r as { expected?: string[] }).expected ?? [])
499
+ // A set: arms that open alike each report the same token, and an expectation list
500
+ // that offers `"("` twice is wrong for a reader. Only a failed parse reaches this.
501
+ const expected = r.ok ? [] : [...new Set((r as { expected?: string[] }).expected ?? [])]
500
502
 
501
503
  let unconsumedFrom: number | null = null
502
504
  if (r.ok) {
package/src/index.ts CHANGED
@@ -141,7 +141,7 @@ export type {
141
141
  // back to `FusedRule`, `isInterpretedFuse` would have to be re-exported in the same
142
142
  // change — a dual shape with no way to detect it is the worse of the two.
143
143
  export { compose, composeLeaf, cstBuildHost } from './compiler/linker.ts'
144
- export type { CstBuildHostOptions, FusedRule } from './compiler/linker.ts'
144
+ export type { ComposedRules, CstBuildHostOptions, FusedRule } from './compiler/linker.ts'
145
145
 
146
146
  export { buildLineIndex, createLineIndex, recordLineRange, normalizeLineIndex, offsetToLineCol, annotateSpan, annotateTreeSpans } from './line-index.ts'
147
147
  export type { LineIndex } from './line-index.ts'
@@ -88,7 +88,7 @@ import { PlainBuf, PlainField, PlainLeaf, PlainNode, PlainSpan } from '../cst/pl
88
88
  import {
89
89
  OP_CHOICE, OP_EMPTY, OP_GATE, OP_LEAF, OP_SOURCE_LEAF, OP_LIT, OP_NODE, OP_NOT, OP_OPT,
90
90
  OP_PEEK, OP_REP, OP_REPV, OP_RULE, OP_RX, OP_SEQ, OP_SEQV, OP_XFORM,
91
- OP_LIT_TRACK, OP_RX_TRACK, OP_NODE_TRACK, OP_SCOPE, OP_SCOPE_CAP, OP_SCOPE_PLAIN, OP_EXPECT, OP_SEQX, OP_SCAN,
91
+ OP_LIT_TRACK, OP_RX_TRACK, OP_NODE_TRACK, OP_SCOPE, OP_SCOPE_CAP, OP_SCOPE_PLAIN, SCOPE_INHERIT, OP_EXPECT, OP_SEQX, OP_SCAN,
92
92
  OP_LIVE,
93
93
  OP_FIELD, OP_DISPATCH, OP_ROUTED, OP_LIT_CI, OP_LIT_CI_TRACK, OP_TOKEN, OP_WITHCTX, OP_GUARD, OP_ATTEMPT, OP_LABEL,
94
94
  OP_COV, OP_GAPGATE, OP_STRICT,
@@ -2109,6 +2109,16 @@ export function assemble(t: ResolvedTable, prog: TableProgram, cfg: RunCfg): Ass
2109
2109
  case OP_SCOPE_CAP:
2110
2110
  case OP_SCOPE_PLAIN: {
2111
2111
  const ki = code[ip + 1]!
2112
+ if (ki === SCOPE_INHERIT) {
2113
+ const body = link(code[ip + 2]!)
2114
+ return (input, pos, ctx) => {
2115
+ const savedCap = ctx.captureTrivia
2116
+ ctx.captureTrivia = true
2117
+ const v = body(input, pos, ctx)
2118
+ ctx.captureTrivia = savedCap
2119
+ return v
2120
+ }
2121
+ }
2112
2122
  const scopeTrivia = ki < 0 ? undefined : (trivia[ki] as ParseContext['trivia'])
2113
2123
  const scopeLabels = scopeTrivia?._meta.triviaKindLabels
2114
2124
  // THE SWAP, RESOLVED AT ASSEMBLY. `exec.ts` computed
@@ -50,7 +50,7 @@ import {
50
50
  OP_ADJ, OP_ARMGATE, OP_RGATE, OP_RGATE2, OP_ATTEMPT, OP_CHOICE, OP_DISPATCH, OP_EMPTY, OP_EXPECT, OP_FIELD, OP_GATE,
51
51
  OP_LABEL, OP_LEAF, OP_SOURCE_LEAF, OP_LIT, OP_LIT_CI, OP_LIT_CI_TRACK, OP_LIT_TRACK, OP_NAMES,
52
52
  OP_NODE, OP_NODE_TRACK, OP_NOT, OP_OPT, OP_PEEK, OP_REP, OP_REPV, OP_ROUTED, OP_RULE, OP_RX,
53
- OP_RX_TRACK, OP_SCAN, OP_SCOPE, OP_SCOPE_CAP, OP_SCOPE_PLAIN, OP_SEQ, OP_SEQV, OP_SEQX, OP_TOKEN, OP_WITHCTX, OP_XFORM,
53
+ OP_RX_TRACK, OP_SCAN, OP_SCOPE, OP_SCOPE_CAP, OP_SCOPE_PLAIN, SCOPE_INHERIT, OP_SEQ, OP_SEQV, OP_SEQX, OP_TOKEN, OP_WITHCTX, OP_XFORM,
54
54
  OP_LEX_BODY, OP_LEX_PROGRAM, OP_GAPGATE, OP_STRICT,
55
55
  } from './ops.ts'
56
56
  import {
@@ -1625,6 +1625,15 @@ return r.value
1625
1625
  const cap = op === OP_SCOPE_CAP
1626
1626
  const flags = op === OP_SCOPE_PLAIN ? 0 : code[ip + 3]!
1627
1627
  const child = link(code[ip + 2]!)
1628
+ if (ki === SCOPE_INHERIT) {
1629
+ return `${head}
1630
+ const sC=ctx.captureTrivia
1631
+ ctx.captureTrivia=true
1632
+ const v=${child}(input,pos,ctx)
1633
+ ctx.captureTrivia=sC
1634
+ return v
1635
+ }`
1636
+ }
1628
1637
  // THE SWAP, RESOLVED AT EMIT. `swapLegal` is `!trackLines`, an option;
1629
1638
  // the other two are table data. All three are known here, so the body
1630
1639
  // holds the scanner it installs as a hoisted const.
package/src/table/emit.ts CHANGED
@@ -300,12 +300,16 @@ function assertPrintable(prog: TableProgram, who: string): void {
300
300
  * for its ONE base table.
301
301
  */
302
302
  function programFields(prog: TableProgram, fns: readonly string[], opts: EmitOptions = {}): string[] {
303
+ // Expected sets overlap heavily, so each one lists indices into one pool of tokens.
304
+ const tokens = [...new Set(prog.fx.flat())]
305
+ const tokenAt = new Map(tokens.map((token, i) => [token, i]))
303
306
  return [
304
307
  ...emitAssemblies(prog, opts.assemblies ?? []),
305
308
  `c:[${prog.code.join(',')}],`,
306
309
  `k:[${prog.k.map(emitConst).join(',')}],`,
307
310
  `x:${emitClassPool(prog.cc)},`,
308
- `e:[${prog.fx.map(f => `[${f.map(jsString).join(',')}]`).join(',')}],`,
311
+ `e:[${prog.fx.map(f => `[${f.map(token => tokenAt.get(token)).join(',')}]`).join(',')}],`,
312
+ `es:[${tokens.map(jsString).join(',')}],`,
309
313
  `d:[${prog.disp.map(a => `[${a.join(',')}]`).join(',')}],`,
310
314
  `r:${JSON.stringify(prog.rules)},`,
311
315
  ...(prog.lines === 1 ? ['l:1,'] : []),
@@ -15,7 +15,7 @@ import { asciiFoldKey, branchUsesRouted, parserUsesRouted } from '../combinators
15
15
  import {
16
16
  OP_CHOICE, OP_EMPTY, OP_GATE, OP_LEAF, OP_SOURCE_LEAF, OP_LIT, OP_NODE, OP_NOT, OP_OPT,
17
17
  OP_PEEK, OP_REP, OP_REPV, OP_RULE, OP_RX, OP_SEQ, OP_SEQV, OP_XFORM,
18
- OP_LIT_TRACK, OP_RX_TRACK, OP_NODE_TRACK, OP_SCOPE, OP_SCOPE_CAP, OP_SCOPE_PLAIN, OP_EXPECT, OP_SEQX, OP_SCAN,
18
+ OP_LIT_TRACK, OP_RX_TRACK, OP_NODE_TRACK, OP_SCOPE, OP_SCOPE_CAP, OP_SCOPE_PLAIN, SCOPE_INHERIT, OP_EXPECT, OP_SEQX, OP_SCAN,
19
19
  OP_LIVE, OP_ATTEMPT, OP_LABEL,
20
20
  OP_FIELD, OP_DISPATCH, OP_ROUTED, OP_LIT_CI, OP_LIT_CI_TRACK, OP_TOKEN, OP_WITHCTX, OP_GUARD,
21
21
  OP_ADJ, OP_GREEDY, OP_REJECT, OP_ARMGATE, OP_RGATE, OP_COV, OP_GAPGATE, OP_RGATE2, OP_STRICT,
@@ -2182,13 +2182,19 @@ class Encoder {
2182
2182
  // this scope's trivia is opaque to root capture, which `run()` consumes.
2183
2183
  // Nothing in the parse changes, so there is nothing for the table to
2184
2184
  // lower — accepting it is not a gap, it is the correct lowering.
2185
- // ONLY `true` IS MEANINGFUL HERE. `grammar.ts:94` stores
2186
- // `opts.trackLines ?? false`, so an UNSET scope and an explicitly-false
2187
- // one are the same value on the def — the distinction is lost. At parse
2188
- // time `:103` reads `opts.trackLines ?? _ctx?.trackLines ?? false`, i.e.
2189
- // unset INHERITS. So stored-false cannot be read as "force off", and
2190
- // comparing it against the setting refused every inner scope of a
2191
- // trackLines:true grammar — all four `*PositionsGrammar`s.
2185
+ // ONLY `true` IS MEANINGFUL HERE. `def.trackLines` is `opts.trackLines ??
2186
+ // false`, so an unset scope and an explicitly-false one read the same on that
2187
+ // field (`def.constructionTrackLines` keeps the difference, and the encoder
2188
+ // does not read it). An unset scope inherits, so stored-false cannot be read
2189
+ // as "force off", and comparing it against the setting refused every inner
2190
+ // scope of a trackLines:true grammar — all four `*PositionsGrammar`s.
2191
+ //
2192
+ // THIS IS NOT THE INTERPRETER'S SCOPING, AND A REDUCER CAN SEE IT (#258). A
2193
+ // table has one line setting. A node outside a `trackLines: true` scope gets
2194
+ // line fields from the table and none from the interpreter; a
2195
+ // `trackLines: false` scope under a tracked grammar keeps them in the table
2196
+ // and drops them in the interpreter; and a `trackLines: true` scope in a rule
2197
+ // the entry cannot reach still turns them on for `encodeTable`.
2192
2198
  //
2193
2199
  // A SCOPE THAT ASKS FOR TRACKING NO LONGER REFUSES. `encodeTable` folds
2194
2200
  // every such scope into the table's own `track` before encoding begins
@@ -2237,8 +2243,9 @@ class Encoder {
2237
2243
  this.activeTrivia = savedTrivia
2238
2244
  this.triviaKnown = savedKnown
2239
2245
  if (d.clearTrivia === true) return this.emit(op, -1, bodyIp, flags)
2246
+ // No trivia named: `flags` is zero (`rootCapture: 'opaque'` requires one).
2240
2247
  if (d.triviaParser === undefined) {
2241
- return cap || flags !== 0 ? this.emit(op, -1, bodyIp, flags) : bodyIp
2248
+ return cap ? this.emit(op, SCOPE_INHERIT, bodyIp, flags) : bodyIp
2242
2249
  }
2243
2250
  return this.emit(op, this.triviaSlot(d.triviaParser), bodyIp, flags)
2244
2251
  }
package/src/table/exec.ts CHANGED
@@ -18,7 +18,7 @@ import {
18
18
  import {
19
19
  OP_CHOICE, OP_EMPTY, OP_GATE, OP_LEAF, OP_SOURCE_LEAF, OP_LIT, OP_NODE, OP_NOT, OP_OPT,
20
20
  OP_PEEK, OP_REP, OP_REPV, OP_RULE, OP_RX, OP_SEQ, OP_SEQV, OP_XFORM,
21
- OP_LIT_TRACK, OP_RX_TRACK, OP_NODE_TRACK, OP_SCOPE, OP_SCOPE_CAP, OP_SCOPE_PLAIN, OP_EXPECT, OP_SEQX, OP_SCAN,
21
+ OP_LIT_TRACK, OP_RX_TRACK, OP_NODE_TRACK, OP_SCOPE, OP_SCOPE_CAP, OP_SCOPE_PLAIN, SCOPE_INHERIT, OP_EXPECT, OP_SEQX, OP_SCAN,
22
22
  OP_LIVE,
23
23
  OP_FIELD, OP_DISPATCH, OP_ROUTED, OP_LIT_CI, OP_LIT_CI_TRACK, OP_TOKEN, OP_WITHCTX, OP_GUARD, OP_ATTEMPT, OP_LABEL,
24
24
  OP_COV, OP_GAPGATE, OP_STRICT,
@@ -779,14 +779,16 @@ function makeDriver(
779
779
  // labelled trivia is excluded here rather than tested later: `scanTrivia`
780
780
  // suppresses its own fast path when labels are present, so a swap there
781
781
  // would drop the labelled records silently.
782
- SCAN = FAST && ki >= 0 && !triviaLabelled[ki]! ? triviaScan[ki]! : null
783
- ctx.trivia = scopeTrivia
784
- // A scope installs its trivia's KIND LABELS too. Root-trivia rows are
785
- // only ever written on the labelled scan path (trivia-skip.ts:212) — the
786
- // unlabelled fast scanner returns before any root logging and does not
787
- // even test `_rootTriviaLog` — so a scope that sets trivia without its
788
- // labels captures NOTHING at the root, silently.
789
- ctx.triviaKindLabels = scopeTrivia?._meta.triviaKindLabels
782
+ if (ki !== SCOPE_INHERIT) {
783
+ SCAN = FAST && ki >= 0 && !triviaLabelled[ki]! ? triviaScan[ki]! : null
784
+ ctx.trivia = scopeTrivia
785
+ // A scope installs its trivia's KIND LABELS too. Root-trivia rows are
786
+ // only ever written on the labelled scan path (trivia-skip.ts:212) — the
787
+ // unlabelled fast scanner returns before any root logging and does not
788
+ // even test `_rootTriviaLog` — so a scope that sets trivia without its
789
+ // labels captures NOTHING at the root, silently.
790
+ ctx.triviaKindLabels = scopeTrivia?._meta.triviaKindLabels
791
+ }
790
792
  // SCOPE_CAP additionally turns capture ON for the child. It is an OR with
791
793
  // whatever the enclosing context already asked for (`grammar.ts:129`), so
792
794
  // the RESTORE puts the saved value back rather than writing `false` — an
package/src/table/ops.ts CHANGED
@@ -211,6 +211,12 @@ export const OP_TOKEN = 29
211
211
  * is why this restores the saved value rather than writing `false`.
212
212
  */
213
213
  export const OP_SCOPE_CAP = 30
214
+ /**
215
+ * `k` of a `SCOPE_CAP` row whose `parser({ captureTrivia: true })` names no trivia.
216
+ * It raises capture and leaves the trivia the scope was entered with in force,
217
+ * where `k = -1` clears it (`trivia: null`).
218
+ */
219
+ export const SCOPE_INHERIT = -2
214
220
  /**
215
221
  * `WITHCTX k c` — `withCtx(extra, c)`. `k >= 0` is `extra` in the const pool
216
222
  * (the replace form); `k < 0` is the derive form, `~k` indexing the author's