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.
package/dist/cli/index.js CHANGED
@@ -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":
@@ -4446,7 +4452,7 @@ function parser(opts, root) {
4446
4452
  ctx.triviaKindLabels = void 0;
4447
4453
  } else if (scopeTrivia !== void 0) {
4448
4454
  ctx.trivia = scopeTrivia;
4449
- if (scopeLabels) ctx.triviaKindLabels = scopeLabels;
4455
+ ctx.triviaKindLabels = scopeLabels;
4450
4456
  }
4451
4457
  if (forceCaptureTrivia || _ctx?.captureTrivia) ctx.captureTrivia = true;
4452
4458
  if (ownCaptureMask !== void 0) ctx._triviaCaptureMask = ownCaptureMask;
@@ -7177,6 +7183,7 @@ var OP_LIT_CI = 27;
7177
7183
  var OP_LIT_CI_TRACK = 28;
7178
7184
  var OP_TOKEN = 29;
7179
7185
  var OP_SCOPE_CAP = 30;
7186
+ var SCOPE_INHERIT = -2;
7180
7187
  var OP_WITHCTX = 31;
7181
7188
  var OP_GUARD = 32;
7182
7189
  var OP_ADJ = 33;
@@ -8976,7 +8983,7 @@ var Encoder = class {
8976
8983
  this.triviaKnown = savedKnown;
8977
8984
  if (d.clearTrivia === true) return this.emit(op, -1, bodyIp, flags);
8978
8985
  if (d.triviaParser === void 0) {
8979
- return cap || flags !== 0 ? this.emit(op, -1, bodyIp, flags) : bodyIp;
8986
+ return cap ? this.emit(op, SCOPE_INHERIT, bodyIp, flags) : bodyIp;
8980
8987
  }
8981
8988
  return this.emit(op, this.triviaSlot(d.triviaParser), bodyIp, flags);
8982
8989
  }
@@ -10368,7 +10375,7 @@ function transfer(code, ip, at, hostCst) {
10368
10375
  const op = code[ip];
10369
10376
  if (op === OP_SCOPE || op === OP_SCOPE_CAP || op === OP_SCOPE_PLAIN) {
10370
10377
  const ki = code[ip + 1];
10371
- const tri = ki < 0 ? TRI_NONE : ki;
10378
+ const tri = ki === SCOPE_INHERIT ? at.tri : ki < 0 ? TRI_NONE : ki;
10372
10379
  const cap = op === OP_SCOPE_CAP ? CAP_ON : at.cap;
10373
10380
  if (tri === at.tri && cap === at.cap) return at;
10374
10381
  return { tri, buf: at.buf, raw: at.raw, cap };
@@ -10442,7 +10449,7 @@ function scanHandoffNeeded(code, ip, labels) {
10442
10449
  if (l.tri === TRI_UNKNOWN) return true;
10443
10450
  const op = code[at];
10444
10451
  if (op === OP_SCAN) return true;
10445
- if (op === OP_TOKEN || op === OP_SCOPE_CAP) continue;
10452
+ if (op === OP_TOKEN || op === OP_SCOPE_CAP && code[at + 1] !== SCOPE_INHERIT) continue;
10446
10453
  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;
10447
10454
  kids.length = 0;
10448
10455
  if (!childSlots(code, at, kids)) return true;
@@ -11737,6 +11744,15 @@ return r.value
11737
11744
  const cap = op === OP_SCOPE_CAP;
11738
11745
  const flags = op === OP_SCOPE_PLAIN ? 0 : code[ip + 3];
11739
11746
  const child = link(code[ip + 2]);
11747
+ if (ki === SCOPE_INHERIT) {
11748
+ return `${head}
11749
+ const sC=ctx.captureTrivia
11750
+ ctx.captureTrivia=true
11751
+ const v=${child}(input,pos,ctx)
11752
+ ctx.captureTrivia=sC
11753
+ return v
11754
+ }`;
11755
+ }
11740
11756
  const scanFor = swapLegal && ki >= 0 && !triviaLabelled[ki] ? hoist("ts", `TRIVIASCAN[${ki}]`) : "null";
11741
11757
  const tri = ki < 0 ? "undefined" : hoist("tv", `TRIVIA[${ki}]`);
11742
11758
  const lab = ki < 0 ? "undefined" : hoist("tl", `TRIVIA[${ki}]._meta.triviaKindLabels`);
@@ -13415,7 +13431,7 @@ function clearOf(ranges, input, from, to) {
13415
13431
  }
13416
13432
 
13417
13433
  // src/version.ts
13418
- var PARSEMAN_VERSION = "0.60.5";
13434
+ var PARSEMAN_VERSION = "0.60.6";
13419
13435
 
13420
13436
  // src/table/assemble.ts
13421
13437
  import { PlainBuf as PlainBuf2, PlainField, PlainLeaf as PlainLeaf9, PlainNode as PlainNode2, PlainSpan as PlainSpan10 } from "../cst/plain.js";
@@ -14928,6 +14944,16 @@ function assemble(t2, prog, cfg) {
14928
14944
  case OP_SCOPE_CAP:
14929
14945
  case OP_SCOPE_PLAIN: {
14930
14946
  const ki = code[ip + 1];
14947
+ if (ki === SCOPE_INHERIT) {
14948
+ const body = link(code[ip + 2]);
14949
+ return (input, pos, ctx) => {
14950
+ const savedCap = ctx.captureTrivia;
14951
+ ctx.captureTrivia = true;
14952
+ const v = body(input, pos, ctx);
14953
+ ctx.captureTrivia = savedCap;
14954
+ return v;
14955
+ };
14956
+ }
14931
14957
  const scopeTrivia = ki < 0 ? void 0 : trivia2[ki];
14932
14958
  const scopeLabels = scopeTrivia?._meta.triviaKindLabels;
14933
14959
  const scanFor = swapLegal && ki >= 0 && !triviaLabelled[ki] ? triviaScan[ki] : null;