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/index.js CHANGED
@@ -40,6 +40,12 @@ function hasOwnTriviaBoundary(p, depth = MAX_DEPTH) {
40
40
  case "oneOrMore":
41
41
  case "sepBy":
42
42
  return true;
43
+ // A scope that names or clears trivia keeps an outer install out of its body.
44
+ // Any other inherits, so it falls through at no cost in depth: line tracking
45
+ // wraps every rule in one, and must not change what this walk sees.
46
+ case "grammar":
47
+ if (d.triviaParser || d.clearTrivia) return false;
48
+ depth++;
43
49
  // Transparent wrappers — they add no position, so ask what they wrap.
44
50
  case "node":
45
51
  case "transform":
@@ -4537,7 +4543,7 @@ function parser(opts, root) {
4537
4543
  ctx.triviaKindLabels = void 0;
4538
4544
  } else if (scopeTrivia !== void 0) {
4539
4545
  ctx.trivia = scopeTrivia;
4540
- if (scopeLabels) ctx.triviaKindLabels = scopeLabels;
4546
+ ctx.triviaKindLabels = scopeLabels;
4541
4547
  }
4542
4548
  if (forceCaptureTrivia || _ctx?.captureTrivia) ctx.captureTrivia = true;
4543
4549
  if (ownCaptureMask !== void 0) ctx._triviaCaptureMask = ownCaptureMask;
@@ -7518,6 +7524,7 @@ var OP_LIT_CI = 27;
7518
7524
  var OP_LIT_CI_TRACK = 28;
7519
7525
  var OP_TOKEN = 29;
7520
7526
  var OP_SCOPE_CAP = 30;
7527
+ var SCOPE_INHERIT = -2;
7521
7528
  var OP_WITHCTX = 31;
7522
7529
  var OP_GUARD = 32;
7523
7530
  var OP_ADJ = 33;
@@ -9550,7 +9557,7 @@ var Encoder = class {
9550
9557
  this.triviaKnown = savedKnown;
9551
9558
  if (d.clearTrivia === true) return this.emit(op, -1, bodyIp, flags);
9552
9559
  if (d.triviaParser === void 0) {
9553
- return cap || flags !== 0 ? this.emit(op, -1, bodyIp, flags) : bodyIp;
9560
+ return cap ? this.emit(op, SCOPE_INHERIT, bodyIp, flags) : bodyIp;
9554
9561
  }
9555
9562
  return this.emit(op, this.triviaSlot(d.triviaParser), bodyIp, flags);
9556
9563
  }
@@ -10945,7 +10952,7 @@ function transfer(code, ip, at, hostCst) {
10945
10952
  const op = code[ip];
10946
10953
  if (op === OP_SCOPE || op === OP_SCOPE_CAP || op === OP_SCOPE_PLAIN) {
10947
10954
  const ki = code[ip + 1];
10948
- const tri = ki < 0 ? TRI_NONE : ki;
10955
+ const tri = ki === SCOPE_INHERIT ? at.tri : ki < 0 ? TRI_NONE : ki;
10949
10956
  const cap = op === OP_SCOPE_CAP ? CAP_ON : at.cap;
10950
10957
  if (tri === at.tri && cap === at.cap) return at;
10951
10958
  return { tri, buf: at.buf, raw: at.raw, cap };
@@ -11019,7 +11026,7 @@ function scanHandoffNeeded(code, ip, labels) {
11019
11026
  if (l.tri === TRI_UNKNOWN) return true;
11020
11027
  const op = code[at];
11021
11028
  if (op === OP_SCAN) return true;
11022
- if (op === OP_TOKEN || op === OP_SCOPE_CAP) continue;
11029
+ if (op === OP_TOKEN || op === OP_SCOPE_CAP && code[at + 1] !== SCOPE_INHERIT) continue;
11023
11030
  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;
11024
11031
  kids.length = 0;
11025
11032
  if (!childSlots(code, at, kids)) return true;
@@ -12314,6 +12321,15 @@ return r.value
12314
12321
  const cap = op === OP_SCOPE_CAP;
12315
12322
  const flags = op === OP_SCOPE_PLAIN ? 0 : code[ip + 3];
12316
12323
  const child = link(code[ip + 2]);
12324
+ if (ki === SCOPE_INHERIT) {
12325
+ return `${head}
12326
+ const sC=ctx.captureTrivia
12327
+ ctx.captureTrivia=true
12328
+ const v=${child}(input,pos,ctx)
12329
+ ctx.captureTrivia=sC
12330
+ return v
12331
+ }`;
12332
+ }
12317
12333
  const scanFor = swapLegal && ki >= 0 && !triviaLabelled[ki] ? hoist("ts", `TRIVIASCAN[${ki}]`) : "null";
12318
12334
  const tri = ki < 0 ? "undefined" : hoist("tv", `TRIVIA[${ki}]`);
12319
12335
  const lab = ki < 0 ? "undefined" : hoist("tl", `TRIVIA[${ki}]._meta.triviaKindLabels`);
@@ -13903,7 +13919,7 @@ function clearOf(ranges, input, from, to) {
13903
13919
  }
13904
13920
 
13905
13921
  // src/version.ts
13906
- var PARSEMAN_VERSION = "0.60.5";
13922
+ var PARSEMAN_VERSION = "0.60.6";
13907
13923
 
13908
13924
  // src/table/assemble.ts
13909
13925
  import { PlainBuf as PlainBuf2, PlainField, PlainLeaf as PlainLeaf9, PlainNode as PlainNode2, PlainSpan as PlainSpan10 } from "./cst/plain.js";
@@ -15433,6 +15449,16 @@ function assemble(t, prog, cfg) {
15433
15449
  case OP_SCOPE_CAP:
15434
15450
  case OP_SCOPE_PLAIN: {
15435
15451
  const ki = code[ip + 1];
15452
+ if (ki === SCOPE_INHERIT) {
15453
+ const body = link(code[ip + 2]);
15454
+ return (input, pos, ctx) => {
15455
+ const savedCap = ctx.captureTrivia;
15456
+ ctx.captureTrivia = true;
15457
+ const v = body(input, pos, ctx);
15458
+ ctx.captureTrivia = savedCap;
15459
+ return v;
15460
+ };
15461
+ }
15436
15462
  const scopeTrivia = ki < 0 ? void 0 : trivia2[ki];
15437
15463
  const scopeLabels = scopeTrivia?._meta.triviaKindLabels;
15438
15464
  const scanFor = swapLegal && ki >= 0 && !triviaLabelled[ki] ? triviaScan[ki] : null;