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
@@ -44,6 +44,13 @@ function empty() {
44
44
  function matchesEmpty(p, seen = /* @__PURE__ */ new Set(), resolve) {
45
45
  if (seen.has(p)) return true;
46
46
  seen.add(p);
47
+ try {
48
+ return matchesEmptyBody(p, seen, resolve);
49
+ } finally {
50
+ seen.delete(p);
51
+ }
52
+ }
53
+ function matchesEmptyBody(p, seen, resolve) {
47
54
  const me = (c) => matchesEmpty(c, seen, resolve);
48
55
  const d = p._def;
49
56
  switch (d.tag) {
@@ -145,6 +152,13 @@ function sequenceFirstSet(parsers) {
145
152
  function firstSetOf(p, seen = /* @__PURE__ */ new Set(), resolve) {
146
153
  if (seen.has(p)) return any();
147
154
  seen.add(p);
155
+ try {
156
+ return firstSetBody(p, seen, resolve);
157
+ } finally {
158
+ seen.delete(p);
159
+ }
160
+ }
161
+ function firstSetBody(p, seen, resolve) {
148
162
  const fs = (c) => firstSetOf(c, seen, resolve);
149
163
  const empties = (c) => matchesEmpty(c, /* @__PURE__ */ new Set(), resolve);
150
164
  const d = p._def;
@@ -2084,6 +2098,23 @@ function rollbackTrivia(ctx, mark) {
2084
2098
  if (ctx._triviaLog && ctx._triviaLog.length !== mark.log) ctx._triviaLog.length = mark.log;
2085
2099
  if (ctx._rootTriviaLog && ctx._rootTriviaLog.length !== mark.rootLog) ctx._rootTriviaLog.length = mark.rootLog;
2086
2100
  }
2101
+ function removeNumberRange(values, start, end) {
2102
+ if (values === void 0 || end <= start) return;
2103
+ if (values.length > end) values.copyWithin(start, end);
2104
+ values.length -= end - start;
2105
+ }
2106
+ function rollbackScannedTriviaAt(ctx, tlogStart, tlogEnd, logStart, logEnd, rootLogStart, rootLogEnd) {
2107
+ const b = ctx._cstBuf;
2108
+ if (b !== void 0) {
2109
+ const tlog = b.tl;
2110
+ removeNumberRange(tlog, tlogStart, tlogEnd);
2111
+ if (tlog !== void 0 && tlog.length === 0) b.tl = void 0;
2112
+ } else {
2113
+ removeNumberRange(ctx._cstTriviaLog, tlogStart, tlogEnd);
2114
+ }
2115
+ removeNumberRange(ctx._triviaLog, logStart, logEnd);
2116
+ removeNumberRange(ctx._rootTriviaLog, rootLogStart, rootLogEnd);
2117
+ }
2087
2118
  function parseTriviaNoCapture(triviaP, input, cur, ctx) {
2088
2119
  const probeCtx = createDetachedParseContext(ctx.trackLines, ctx.state);
2089
2120
  probeCtx._lineIndex = ctx._lineIndex;
@@ -2777,7 +2808,9 @@ function sequence(...parsers) {
2777
2808
  continue;
2778
2809
  }
2779
2810
  if (ctx.trivia && i > 0) {
2780
- const mark = saveTriviaMark(ctx);
2811
+ const mTlog = cstTlLen(ctx);
2812
+ const mLog = ctx._triviaLog?.length ?? 0;
2813
+ const mRootLog = ctx._rootTriviaLog?.length ?? 0;
2781
2814
  let scanEnd;
2782
2815
  if (needsDeferredTriviaCommit(ctx)) {
2783
2816
  const scan = scanTrivia(input, cur, ctx);
@@ -2786,10 +2819,13 @@ function sequence(...parsers) {
2786
2819
  } else {
2787
2820
  scanEnd = advanceTrivia(input, cur, ctx);
2788
2821
  }
2822
+ const scanTlog = cstTlLen(ctx);
2823
+ const scanLog = ctx._triviaLog?.length ?? 0;
2824
+ const scanRootLog = ctx._rootTriviaLog?.length ?? 0;
2789
2825
  const result2 = parsers[i].parse(input, scanEnd, ctx);
2790
2826
  if (!result2.ok) return result2;
2791
2827
  if (result2.span.end > scanEnd) cur = result2.span.end;
2792
- else rollbackTrivia(ctx, mark);
2828
+ else rollbackScannedTriviaAt(ctx, mTlog, scanTlog, mLog, scanLog, mRootLog, scanRootLog);
2793
2829
  if (values !== void 0) values.push(result2.value);
2794
2830
  continue;
2795
2831
  }
@@ -2820,7 +2856,9 @@ function sequence(...parsers) {
2820
2856
  }
2821
2857
  if (ctx.trivia && i > 0) {
2822
2858
  let scanEnd;
2823
- const mark = saveTriviaMark(ctx);
2859
+ const mTlog = cstTlLen(ctx);
2860
+ const mLog = ctx._triviaLog?.length ?? 0;
2861
+ const mRootLog = ctx._rootTriviaLog?.length ?? 0;
2824
2862
  if (needsDeferredTriviaCommit(ctx)) {
2825
2863
  const scan = scanTrivia(input, cur, ctx);
2826
2864
  scan.commit();
@@ -2828,10 +2866,13 @@ function sequence(...parsers) {
2828
2866
  } else {
2829
2867
  scanEnd = advanceTrivia(input, cur, ctx);
2830
2868
  }
2869
+ const scanTlog = cstTlLen(ctx);
2870
+ const scanLog = ctx._triviaLog?.length ?? 0;
2871
+ const scanRootLog = ctx._rootTriviaLog?.length ?? 0;
2831
2872
  const result2 = parsers[i].parse(input, scanEnd, ctx);
2832
2873
  if (!result2.ok) return result2;
2833
2874
  if (result2.span.end > scanEnd) cur = result2.span.end;
2834
- else rollbackTrivia(ctx, mark);
2875
+ else rollbackScannedTriviaAt(ctx, mTlog, scanTlog, mLog, scanLog, mRootLog, scanRootLog);
2835
2876
  if (values !== void 0) values.push(result2.value);
2836
2877
  continue;
2837
2878
  }
@@ -2859,7 +2900,9 @@ function sequence(...parsers) {
2859
2900
  for (let i = 0; i < parsers.length; i++) {
2860
2901
  if (ctx.trivia && i > 0) {
2861
2902
  let scanEnd;
2862
- let mark = saveTriviaMark(ctx);
2903
+ const mTlog = cstTlLen(ctx);
2904
+ const mLog = ctx._triviaLog?.length ?? 0;
2905
+ const mRootLog = ctx._rootTriviaLog?.length ?? 0;
2863
2906
  if (needsDeferredTriviaCommit(ctx)) {
2864
2907
  const scan = scanTrivia(input, cur, ctx);
2865
2908
  scan.commit();
@@ -2867,12 +2910,15 @@ function sequence(...parsers) {
2867
2910
  } else {
2868
2911
  scanEnd = advanceTrivia(input, cur, ctx);
2869
2912
  }
2913
+ const scanTlog = cstTlLen(ctx);
2914
+ const scanLog = ctx._triviaLog?.length ?? 0;
2915
+ const scanRootLog = ctx._rootTriviaLog?.length ?? 0;
2870
2916
  const result2 = parsers[i].parse(input, scanEnd, ctx);
2871
2917
  if (!result2.ok) return result2;
2872
2918
  if (result2.span.end > scanEnd) {
2873
2919
  cur = result2.span.end;
2874
2920
  } else {
2875
- rollbackTrivia(ctx, mark);
2921
+ rollbackScannedTriviaAt(ctx, mTlog, scanTlog, mLog, scanLog, mRootLog, scanRootLog);
2876
2922
  }
2877
2923
  if (values !== void 0) values.push(result2.value);
2878
2924
  continue;
@@ -4810,6 +4856,7 @@ var OP_LIVE = 37;
4810
4856
  var OP_ATTEMPT = 38;
4811
4857
  var OP_LABEL = 39;
4812
4858
  var OP_COV = 40;
4859
+ var OP_SCOPE_PLAIN = 41;
4813
4860
  var OP_DISPATCH = 25;
4814
4861
  var OP_ROUTED = 26;
4815
4862
  var OP_NAMES = {
@@ -4852,7 +4899,8 @@ var OP_NAMES = {
4852
4899
  [OP_LIVE]: "LIVE",
4853
4900
  [OP_ATTEMPT]: "ATTEMPT",
4854
4901
  [OP_LABEL]: "LABEL",
4855
- [OP_COV]: "COV"
4902
+ [OP_COV]: "COV",
4903
+ [OP_SCOPE_PLAIN]: "SCOPE_PLAIN"
4856
4904
  };
4857
4905
 
4858
4906
  // src/table/scan-shapes.ts