parseman 0.60.5 → 0.60.6

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.
@@ -48,6 +48,12 @@ function hasOwnTriviaBoundary(p, depth = MAX_DEPTH) {
48
48
  case "oneOrMore":
49
49
  case "sepBy":
50
50
  return true;
51
+ // A scope that names or clears trivia keeps an outer install out of its body.
52
+ // Any other inherits, so it falls through at no cost in depth: line tracking
53
+ // wraps every rule in one, and must not change what this walk sees.
54
+ case "grammar":
55
+ if (d.triviaParser || d.clearTrivia) return false;
56
+ depth++;
51
57
  // Transparent wrappers — they add no position, so ask what they wrap.
52
58
  case "node":
53
59
  case "transform":
@@ -1782,7 +1788,7 @@ function parser(opts, root) {
1782
1788
  ctx.triviaKindLabels = void 0;
1783
1789
  } else if (scopeTrivia !== void 0) {
1784
1790
  ctx.trivia = scopeTrivia;
1785
- if (scopeLabels) ctx.triviaKindLabels = scopeLabels;
1791
+ ctx.triviaKindLabels = scopeLabels;
1786
1792
  }
1787
1793
  if (forceCaptureTrivia || _ctx?.captureTrivia) ctx.captureTrivia = true;
1788
1794
  if (ownCaptureMask !== void 0) ctx._triviaCaptureMask = ownCaptureMask;
@@ -7148,6 +7154,7 @@ var OP_LIT_CI = 27;
7148
7154
  var OP_LIT_CI_TRACK = 28;
7149
7155
  var OP_TOKEN = 29;
7150
7156
  var OP_SCOPE_CAP = 30;
7157
+ var SCOPE_INHERIT = -2;
7151
7158
  var OP_WITHCTX = 31;
7152
7159
  var OP_GUARD = 32;
7153
7160
  var OP_ADJ = 33;
@@ -9180,7 +9187,7 @@ var Encoder = class {
9180
9187
  this.triviaKnown = savedKnown;
9181
9188
  if (d.clearTrivia === true) return this.emit(op, -1, bodyIp, flags);
9182
9189
  if (d.triviaParser === void 0) {
9183
- return cap || flags !== 0 ? this.emit(op, -1, bodyIp, flags) : bodyIp;
9190
+ return cap ? this.emit(op, SCOPE_INHERIT, bodyIp, flags) : bodyIp;
9184
9191
  }
9185
9192
  return this.emit(op, this.triviaSlot(d.triviaParser), bodyIp, flags);
9186
9193
  }
@@ -10572,7 +10579,7 @@ function transfer(code, ip, at, hostCst) {
10572
10579
  const op = code[ip];
10573
10580
  if (op === OP_SCOPE || op === OP_SCOPE_CAP || op === OP_SCOPE_PLAIN) {
10574
10581
  const ki = code[ip + 1];
10575
- const tri = ki < 0 ? TRI_NONE : ki;
10582
+ const tri = ki === SCOPE_INHERIT ? at.tri : ki < 0 ? TRI_NONE : ki;
10576
10583
  const cap = op === OP_SCOPE_CAP ? CAP_ON : at.cap;
10577
10584
  if (tri === at.tri && cap === at.cap) return at;
10578
10585
  return { tri, buf: at.buf, raw: at.raw, cap };
@@ -10646,7 +10653,7 @@ function scanHandoffNeeded(code, ip, labels) {
10646
10653
  if (l.tri === TRI_UNKNOWN) return true;
10647
10654
  const op = code[at];
10648
10655
  if (op === OP_SCAN) return true;
10649
- if (op === OP_TOKEN || op === OP_SCOPE_CAP) continue;
10656
+ if (op === OP_TOKEN || op === OP_SCOPE_CAP && code[at + 1] !== SCOPE_INHERIT) continue;
10650
10657
  if ((op === OP_SCOPE_PLAIN || op === OP_SCOPE) && !(code[at + 1] >= 0 && l.tri === code[at + 1] && (op === OP_SCOPE_PLAIN || code[at + 3] === 0))) continue;
10651
10658
  kids.length = 0;
10652
10659
  if (!childSlots(code, at, kids)) return true;
@@ -11941,6 +11948,15 @@ return r.value
11941
11948
  const cap = op === OP_SCOPE_CAP;
11942
11949
  const flags = op === OP_SCOPE_PLAIN ? 0 : code[ip + 3];
11943
11950
  const child = link(code[ip + 2]);
11951
+ if (ki === SCOPE_INHERIT) {
11952
+ return `${head}
11953
+ const sC=ctx.captureTrivia
11954
+ ctx.captureTrivia=true
11955
+ const v=${child}(input,pos,ctx)
11956
+ ctx.captureTrivia=sC
11957
+ return v
11958
+ }`;
11959
+ }
11944
11960
  const scanFor = swapLegal && ki >= 0 && !triviaLabelled[ki] ? hoist("ts", `TRIVIASCAN[${ki}]`) : "null";
11945
11961
  const tri = ki < 0 ? "undefined" : hoist("tv", `TRIVIA[${ki}]`);
11946
11962
  const lab = ki < 0 ? "undefined" : hoist("tl", `TRIVIA[${ki}]._meta.triviaKindLabels`);
@@ -13530,7 +13546,7 @@ function clearOf(ranges, input, from, to) {
13530
13546
  }
13531
13547
 
13532
13548
  // src/version.ts
13533
- var PARSEMAN_VERSION = "0.60.5";
13549
+ var PARSEMAN_VERSION = "0.60.6";
13534
13550
 
13535
13551
  // src/table/assemble.ts
13536
13552
  import { PlainBuf as PlainBuf2, PlainField, PlainLeaf as PlainLeaf9, PlainNode as PlainNode2, PlainSpan as PlainSpan10 } from "../cst/plain.js";
@@ -15060,6 +15076,16 @@ function assemble(t, prog, cfg) {
15060
15076
  case OP_SCOPE_CAP:
15061
15077
  case OP_SCOPE_PLAIN: {
15062
15078
  const ki = code[ip + 1];
15079
+ if (ki === SCOPE_INHERIT) {
15080
+ const body = link(code[ip + 2]);
15081
+ return (input, pos, ctx) => {
15082
+ const savedCap = ctx.captureTrivia;
15083
+ ctx.captureTrivia = true;
15084
+ const v = body(input, pos, ctx);
15085
+ ctx.captureTrivia = savedCap;
15086
+ return v;
15087
+ };
15088
+ }
15063
15089
  const scopeTrivia = ki < 0 ? void 0 : trivia2[ki];
15064
15090
  const scopeLabels = scopeTrivia?._meta.triviaKindLabels;
15065
15091
  const scanFor = swapLegal && ki >= 0 && !triviaLabelled[ki] ? triviaScan[ki] : null;