parseman 0.47.0 → 0.47.1

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 (57) hide show
  1. package/dist/analysis/diagnostics.cjs +133 -45
  2. package/dist/analysis/diagnostics.cjs.map +2 -2
  3. package/dist/analysis/diagnostics.js +133 -45
  4. package/dist/analysis/diagnostics.js.map +2 -2
  5. package/dist/cli/index.cjs +133 -45
  6. package/dist/cli/index.cjs.map +2 -2
  7. package/dist/cli/index.js +133 -45
  8. package/dist/cli/index.js.map +2 -2
  9. package/dist/combinators/first-set.d.ts.map +1 -1
  10. package/dist/combinators/sequence.d.ts.map +1 -1
  11. package/dist/combinators/trivia-skip.d.ts +5 -0
  12. package/dist/combinators/trivia-skip.d.ts.map +1 -1
  13. package/dist/index.cjs +134 -46
  14. package/dist/index.cjs.map +2 -2
  15. package/dist/index.js +134 -46
  16. package/dist/index.js.map +2 -2
  17. package/dist/language-service/index.cjs +3 -1
  18. package/dist/language-service/index.cjs.map +1 -1
  19. package/dist/language-service/index.js +3 -1
  20. package/dist/language-service/index.js.map +1 -1
  21. package/dist/plugin/index.cjs +134 -46
  22. package/dist/plugin/index.cjs.map +2 -2
  23. package/dist/plugin/index.js +134 -46
  24. package/dist/plugin/index.js.map +2 -2
  25. package/dist/spec/index.cjs +55 -7
  26. package/dist/spec/index.cjs.map +1 -1
  27. package/dist/spec/index.js +55 -7
  28. package/dist/spec/index.js.map +1 -1
  29. package/dist/table/assemble.d.ts.map +1 -1
  30. package/dist/table/emit-assembly.d.ts +2 -2
  31. package/dist/table/emit-assembly.d.ts.map +1 -1
  32. package/dist/table/emit.d.ts.map +1 -1
  33. package/dist/table/exec.d.ts.map +1 -1
  34. package/dist/table/index.cjs +1566 -1478
  35. package/dist/table/index.cjs.map +3 -3
  36. package/dist/table/index.js +1566 -1478
  37. package/dist/table/index.js.map +3 -3
  38. package/dist/table/ops.d.ts +8 -1
  39. package/dist/table/ops.d.ts.map +1 -1
  40. package/dist/table/program.d.ts +4 -1
  41. package/dist/table/program.d.ts.map +1 -1
  42. package/dist/version.d.ts +1 -1
  43. package/package.json +2 -1
  44. package/src/combinators/first-set.ts +29 -3
  45. package/src/combinators/sequence.ts +23 -7
  46. package/src/combinators/trivia-skip.ts +31 -0
  47. package/src/table/assemble.ts +30 -18
  48. package/src/table/child-slots.ts +2 -2
  49. package/src/table/emit-assembly.ts +36 -25
  50. package/src/table/emit.ts +12 -1
  51. package/src/table/encode.ts +4 -4
  52. package/src/table/exec.ts +20 -12
  53. package/src/table/ops.ts +9 -1
  54. package/src/table/program.ts +22 -1
  55. package/src/table/site-labels.ts +2 -2
  56. package/src/table/stamp.ts +2 -2
  57. package/src/version.ts +1 -1
@@ -78,6 +78,13 @@ function empty() {
78
78
  function matchesEmpty(p, seen = /* @__PURE__ */ new Set(), resolve) {
79
79
  if (seen.has(p)) return true;
80
80
  seen.add(p);
81
+ try {
82
+ return matchesEmptyBody(p, seen, resolve);
83
+ } finally {
84
+ seen.delete(p);
85
+ }
86
+ }
87
+ function matchesEmptyBody(p, seen, resolve) {
81
88
  const me = (c) => matchesEmpty(c, seen, resolve);
82
89
  const d = p._def;
83
90
  switch (d.tag) {
@@ -179,6 +186,13 @@ function sequenceFirstSet(parsers) {
179
186
  function firstSetOf(p, seen = /* @__PURE__ */ new Set(), resolve) {
180
187
  if (seen.has(p)) return any();
181
188
  seen.add(p);
189
+ try {
190
+ return firstSetBody(p, seen, resolve);
191
+ } finally {
192
+ seen.delete(p);
193
+ }
194
+ }
195
+ function firstSetBody(p, seen, resolve) {
182
196
  const fs = (c) => firstSetOf(c, seen, resolve);
183
197
  const empties = (c) => matchesEmpty(c, /* @__PURE__ */ new Set(), resolve);
184
198
  const d = p._def;
@@ -2118,6 +2132,23 @@ function rollbackTrivia(ctx, mark) {
2118
2132
  if (ctx._triviaLog && ctx._triviaLog.length !== mark.log) ctx._triviaLog.length = mark.log;
2119
2133
  if (ctx._rootTriviaLog && ctx._rootTriviaLog.length !== mark.rootLog) ctx._rootTriviaLog.length = mark.rootLog;
2120
2134
  }
2135
+ function removeNumberRange(values, start, end) {
2136
+ if (values === void 0 || end <= start) return;
2137
+ if (values.length > end) values.copyWithin(start, end);
2138
+ values.length -= end - start;
2139
+ }
2140
+ function rollbackScannedTriviaAt(ctx, tlogStart, tlogEnd, logStart, logEnd, rootLogStart, rootLogEnd) {
2141
+ const b = ctx._cstBuf;
2142
+ if (b !== void 0) {
2143
+ const tlog = b.tl;
2144
+ removeNumberRange(tlog, tlogStart, tlogEnd);
2145
+ if (tlog !== void 0 && tlog.length === 0) b.tl = void 0;
2146
+ } else {
2147
+ removeNumberRange(ctx._cstTriviaLog, tlogStart, tlogEnd);
2148
+ }
2149
+ removeNumberRange(ctx._triviaLog, logStart, logEnd);
2150
+ removeNumberRange(ctx._rootTriviaLog, rootLogStart, rootLogEnd);
2151
+ }
2121
2152
  function parseTriviaNoCapture(triviaP, input, cur, ctx) {
2122
2153
  const probeCtx = createDetachedParseContext(ctx.trackLines, ctx.state);
2123
2154
  probeCtx._lineIndex = ctx._lineIndex;
@@ -2811,7 +2842,9 @@ function sequence(...parsers) {
2811
2842
  continue;
2812
2843
  }
2813
2844
  if (ctx.trivia && i > 0) {
2814
- const mark = saveTriviaMark(ctx);
2845
+ const mTlog = cstTlLen(ctx);
2846
+ const mLog = ctx._triviaLog?.length ?? 0;
2847
+ const mRootLog = ctx._rootTriviaLog?.length ?? 0;
2815
2848
  let scanEnd;
2816
2849
  if (needsDeferredTriviaCommit(ctx)) {
2817
2850
  const scan = scanTrivia(input, cur, ctx);
@@ -2820,10 +2853,13 @@ function sequence(...parsers) {
2820
2853
  } else {
2821
2854
  scanEnd = advanceTrivia(input, cur, ctx);
2822
2855
  }
2856
+ const scanTlog = cstTlLen(ctx);
2857
+ const scanLog = ctx._triviaLog?.length ?? 0;
2858
+ const scanRootLog = ctx._rootTriviaLog?.length ?? 0;
2823
2859
  const result2 = parsers[i].parse(input, scanEnd, ctx);
2824
2860
  if (!result2.ok) return result2;
2825
2861
  if (result2.span.end > scanEnd) cur = result2.span.end;
2826
- else rollbackTrivia(ctx, mark);
2862
+ else rollbackScannedTriviaAt(ctx, mTlog, scanTlog, mLog, scanLog, mRootLog, scanRootLog);
2827
2863
  if (values !== void 0) values.push(result2.value);
2828
2864
  continue;
2829
2865
  }
@@ -2854,7 +2890,9 @@ function sequence(...parsers) {
2854
2890
  }
2855
2891
  if (ctx.trivia && i > 0) {
2856
2892
  let scanEnd;
2857
- const mark = saveTriviaMark(ctx);
2893
+ const mTlog = cstTlLen(ctx);
2894
+ const mLog = ctx._triviaLog?.length ?? 0;
2895
+ const mRootLog = ctx._rootTriviaLog?.length ?? 0;
2858
2896
  if (needsDeferredTriviaCommit(ctx)) {
2859
2897
  const scan = scanTrivia(input, cur, ctx);
2860
2898
  scan.commit();
@@ -2862,10 +2900,13 @@ function sequence(...parsers) {
2862
2900
  } else {
2863
2901
  scanEnd = advanceTrivia(input, cur, ctx);
2864
2902
  }
2903
+ const scanTlog = cstTlLen(ctx);
2904
+ const scanLog = ctx._triviaLog?.length ?? 0;
2905
+ const scanRootLog = ctx._rootTriviaLog?.length ?? 0;
2865
2906
  const result2 = parsers[i].parse(input, scanEnd, ctx);
2866
2907
  if (!result2.ok) return result2;
2867
2908
  if (result2.span.end > scanEnd) cur = result2.span.end;
2868
- else rollbackTrivia(ctx, mark);
2909
+ else rollbackScannedTriviaAt(ctx, mTlog, scanTlog, mLog, scanLog, mRootLog, scanRootLog);
2869
2910
  if (values !== void 0) values.push(result2.value);
2870
2911
  continue;
2871
2912
  }
@@ -2893,7 +2934,9 @@ function sequence(...parsers) {
2893
2934
  for (let i = 0; i < parsers.length; i++) {
2894
2935
  if (ctx.trivia && i > 0) {
2895
2936
  let scanEnd;
2896
- let mark = saveTriviaMark(ctx);
2937
+ const mTlog = cstTlLen(ctx);
2938
+ const mLog = ctx._triviaLog?.length ?? 0;
2939
+ const mRootLog = ctx._rootTriviaLog?.length ?? 0;
2897
2940
  if (needsDeferredTriviaCommit(ctx)) {
2898
2941
  const scan = scanTrivia(input, cur, ctx);
2899
2942
  scan.commit();
@@ -2901,12 +2944,15 @@ function sequence(...parsers) {
2901
2944
  } else {
2902
2945
  scanEnd = advanceTrivia(input, cur, ctx);
2903
2946
  }
2947
+ const scanTlog = cstTlLen(ctx);
2948
+ const scanLog = ctx._triviaLog?.length ?? 0;
2949
+ const scanRootLog = ctx._rootTriviaLog?.length ?? 0;
2904
2950
  const result2 = parsers[i].parse(input, scanEnd, ctx);
2905
2951
  if (!result2.ok) return result2;
2906
2952
  if (result2.span.end > scanEnd) {
2907
2953
  cur = result2.span.end;
2908
2954
  } else {
2909
- rollbackTrivia(ctx, mark);
2955
+ rollbackScannedTriviaAt(ctx, mTlog, scanTlog, mLog, scanLog, mRootLog, scanRootLog);
2910
2956
  }
2911
2957
  if (values !== void 0) values.push(result2.value);
2912
2958
  continue;
@@ -4844,6 +4890,7 @@ var OP_LIVE = 37;
4844
4890
  var OP_ATTEMPT = 38;
4845
4891
  var OP_LABEL = 39;
4846
4892
  var OP_COV = 40;
4893
+ var OP_SCOPE_PLAIN = 41;
4847
4894
  var OP_DISPATCH = 25;
4848
4895
  var OP_ROUTED = 26;
4849
4896
  var OP_NAMES = {
@@ -4886,7 +4933,8 @@ var OP_NAMES = {
4886
4933
  [OP_LIVE]: "LIVE",
4887
4934
  [OP_ATTEMPT]: "ATTEMPT",
4888
4935
  [OP_LABEL]: "LABEL",
4889
- [OP_COV]: "COV"
4936
+ [OP_COV]: "COV",
4937
+ [OP_SCOPE_PLAIN]: "SCOPE_PLAIN"
4890
4938
  };
4891
4939
 
4892
4940
  // src/table/scan-shapes.ts