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.
- package/dist/analysis/diagnostics.cjs +133 -45
- package/dist/analysis/diagnostics.cjs.map +2 -2
- package/dist/analysis/diagnostics.js +133 -45
- package/dist/analysis/diagnostics.js.map +2 -2
- package/dist/cli/index.cjs +133 -45
- package/dist/cli/index.cjs.map +2 -2
- package/dist/cli/index.js +133 -45
- package/dist/cli/index.js.map +2 -2
- package/dist/combinators/first-set.d.ts.map +1 -1
- package/dist/combinators/sequence.d.ts.map +1 -1
- package/dist/combinators/trivia-skip.d.ts +5 -0
- package/dist/combinators/trivia-skip.d.ts.map +1 -1
- package/dist/index.cjs +134 -46
- package/dist/index.cjs.map +2 -2
- package/dist/index.js +134 -46
- package/dist/index.js.map +2 -2
- package/dist/language-service/index.cjs +3 -1
- package/dist/language-service/index.cjs.map +1 -1
- package/dist/language-service/index.js +3 -1
- package/dist/language-service/index.js.map +1 -1
- package/dist/plugin/index.cjs +134 -46
- package/dist/plugin/index.cjs.map +2 -2
- package/dist/plugin/index.js +134 -46
- package/dist/plugin/index.js.map +2 -2
- package/dist/spec/index.cjs +55 -7
- package/dist/spec/index.cjs.map +1 -1
- package/dist/spec/index.js +55 -7
- package/dist/spec/index.js.map +1 -1
- package/dist/table/assemble.d.ts.map +1 -1
- package/dist/table/emit-assembly.d.ts +2 -2
- package/dist/table/emit-assembly.d.ts.map +1 -1
- package/dist/table/emit.d.ts.map +1 -1
- package/dist/table/exec.d.ts.map +1 -1
- package/dist/table/index.cjs +1566 -1478
- package/dist/table/index.cjs.map +3 -3
- package/dist/table/index.js +1566 -1478
- package/dist/table/index.js.map +3 -3
- package/dist/table/ops.d.ts +8 -1
- package/dist/table/ops.d.ts.map +1 -1
- package/dist/table/program.d.ts +4 -1
- package/dist/table/program.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +2 -1
- package/src/combinators/first-set.ts +29 -3
- package/src/combinators/sequence.ts +23 -7
- package/src/combinators/trivia-skip.ts +31 -0
- package/src/table/assemble.ts +30 -18
- package/src/table/child-slots.ts +2 -2
- package/src/table/emit-assembly.ts +36 -25
- package/src/table/emit.ts +12 -1
- package/src/table/encode.ts +4 -4
- package/src/table/exec.ts +20 -12
- package/src/table/ops.ts +9 -1
- package/src/table/program.ts +22 -1
- package/src/table/site-labels.ts +2 -2
- package/src/table/stamp.ts +2 -2
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"first-set.d.ts","sourceRoot":"","sources":["../../src/combinators/first-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,QAAQ,EAAE,UAAU,EAAa,MAAM,aAAa,CAAA;AAE7E;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;AAS3E,wBAAgB,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAKxD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAS5D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE/C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAQnG;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,CAE1D;AAED,wBAAgB,GAAG,IAAI,QAAQ,CAE9B;AAED,wBAAgB,KAAK,IAAI,QAAQ,CAEhC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EACtB,IAAI,GAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAa,EAC1C,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,
|
|
1
|
+
{"version":3,"file":"first-set.d.ts","sourceRoot":"","sources":["../../src/combinators/first-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,QAAQ,EAAE,UAAU,EAAa,MAAM,aAAa,CAAA;AAE7E;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;AAS3E,wBAAgB,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAKxD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAS5D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE/C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAQnG;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,CAE1D;AAED,wBAAgB,GAAG,IAAI,QAAQ,CAE9B;AAED,wBAAgB,KAAK,IAAI,QAAQ,CAEhC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EACtB,IAAI,GAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAa,EAC1C,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAWT;AAmDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAMpE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAEnE;AA6BD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ,CAalF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CACxB,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EACtB,IAAI,GAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAa,EAC1C,OAAO,CAAC,EAAE,WAAW,GACpB,QAAQ,CAUV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../../src/combinators/sequence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAoD,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../../src/combinators/sequence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAoD,MAAM,aAAa,CAAA;AAO/F,KAAK,aAAa,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI;KACnD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAC7D,CAAA;AAED,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAChF,GAAG,OAAO,EAAE,CAAC,GACZ,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CA+N9B"}
|
|
@@ -32,6 +32,11 @@ export declare function saveTriviaMark(ctx: ParseContext): TriviaRollbackMark;
|
|
|
32
32
|
*/
|
|
33
33
|
export declare function rollbackTriviaAt(ctx: ParseContext, raw: number, tlog: number, leaves: number, fields: number, errors: number, log: number, rootLog: number): void;
|
|
34
34
|
export declare function rollbackTrivia(ctx: ParseContext, mark: TriviaRollbackMark): void;
|
|
35
|
+
/**
|
|
36
|
+
* Remove only the trivia rows appended by an ambient scan, preserving effects
|
|
37
|
+
* appended later by a successful zero-width child.
|
|
38
|
+
*/
|
|
39
|
+
export declare function rollbackScannedTriviaAt(ctx: ParseContext, tlogStart: number, tlogEnd: number, logStart: number, logEnd: number, rootLogStart: number, rootLogEnd: number): void;
|
|
35
40
|
/**
|
|
36
41
|
* A ZERO-WIDTH LOOKAHEAD's mark: everything `saveTriviaMark` covers, plus the
|
|
37
42
|
* completions probe's current best failure.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trivia-skip.d.ts","sourceRoot":"","sources":["../../src/combinators/trivia-skip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAe,MAAM,aAAa,CAAA;AAmBnF;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,CAAA;AAE5D,iEAAiE;AACjE,MAAM,MAAM,kBAAkB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAG5I,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;AAmBtE,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAEpE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,kBAAkB,CAWpE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,YAAY,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,IAAI,CAIN;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAKhF;AAiBD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG;IAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,CAAA;AAEhF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,aAAa,CAElE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAG9E;AA0ED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAwBnF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU,CAoGpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,iBAAiB,EACpB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,YAAY,GAChB,MAAM,CAUR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAKnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAcpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAevF"}
|
|
1
|
+
{"version":3,"file":"trivia-skip.d.ts","sourceRoot":"","sources":["../../src/combinators/trivia-skip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAe,MAAM,aAAa,CAAA;AAmBnF;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,CAAA;AAE5D,iEAAiE;AACjE,MAAM,MAAM,kBAAkB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAG5I,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;AAmBtE,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAEpE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,kBAAkB,CAWpE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,YAAY,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,IAAI,CAIN;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAKhF;AAQD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,IAAI,CAWN;AAiBD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG;IAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,CAAA;AAEhF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,aAAa,CAElE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAG9E;AA0ED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAwBnF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU,CAoGpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,iBAAiB,EACpB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,YAAY,GAChB,MAAM,CAUR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAKnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAcpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAevF"}
|
package/dist/index.cjs
CHANGED
|
@@ -177,6 +177,13 @@ function empty() {
|
|
|
177
177
|
function matchesEmpty(p, seen = /* @__PURE__ */ new Set(), resolve) {
|
|
178
178
|
if (seen.has(p)) return true;
|
|
179
179
|
seen.add(p);
|
|
180
|
+
try {
|
|
181
|
+
return matchesEmptyBody(p, seen, resolve);
|
|
182
|
+
} finally {
|
|
183
|
+
seen.delete(p);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function matchesEmptyBody(p, seen, resolve) {
|
|
180
187
|
const me = (c) => matchesEmpty(c, seen, resolve);
|
|
181
188
|
const d = p._def;
|
|
182
189
|
switch (d.tag) {
|
|
@@ -278,6 +285,13 @@ function sequenceFirstSet(parsers) {
|
|
|
278
285
|
function firstSetOf(p, seen = /* @__PURE__ */ new Set(), resolve) {
|
|
279
286
|
if (seen.has(p)) return any();
|
|
280
287
|
seen.add(p);
|
|
288
|
+
try {
|
|
289
|
+
return firstSetBody(p, seen, resolve);
|
|
290
|
+
} finally {
|
|
291
|
+
seen.delete(p);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
function firstSetBody(p, seen, resolve) {
|
|
281
295
|
const fs = (c) => firstSetOf(c, seen, resolve);
|
|
282
296
|
const empties = (c) => matchesEmpty(c, /* @__PURE__ */ new Set(), resolve);
|
|
283
297
|
const d = p._def;
|
|
@@ -1769,6 +1783,23 @@ function rollbackTrivia(ctx, mark) {
|
|
|
1769
1783
|
if (ctx._triviaLog && ctx._triviaLog.length !== mark.log) ctx._triviaLog.length = mark.log;
|
|
1770
1784
|
if (ctx._rootTriviaLog && ctx._rootTriviaLog.length !== mark.rootLog) ctx._rootTriviaLog.length = mark.rootLog;
|
|
1771
1785
|
}
|
|
1786
|
+
function removeNumberRange(values, start, end) {
|
|
1787
|
+
if (values === void 0 || end <= start) return;
|
|
1788
|
+
if (values.length > end) values.copyWithin(start, end);
|
|
1789
|
+
values.length -= end - start;
|
|
1790
|
+
}
|
|
1791
|
+
function rollbackScannedTriviaAt(ctx, tlogStart, tlogEnd, logStart, logEnd, rootLogStart, rootLogEnd) {
|
|
1792
|
+
const b = ctx._cstBuf;
|
|
1793
|
+
if (b !== void 0) {
|
|
1794
|
+
const tlog = b.tl;
|
|
1795
|
+
removeNumberRange(tlog, tlogStart, tlogEnd);
|
|
1796
|
+
if (tlog !== void 0 && tlog.length === 0) b.tl = void 0;
|
|
1797
|
+
} else {
|
|
1798
|
+
removeNumberRange(ctx._cstTriviaLog, tlogStart, tlogEnd);
|
|
1799
|
+
}
|
|
1800
|
+
removeNumberRange(ctx._triviaLog, logStart, logEnd);
|
|
1801
|
+
removeNumberRange(ctx._rootTriviaLog, rootLogStart, rootLogEnd);
|
|
1802
|
+
}
|
|
1772
1803
|
function parseTriviaNoCapture(triviaP, input, cur, ctx) {
|
|
1773
1804
|
const probeCtx = createDetachedParseContext(ctx.trackLines, ctx.state);
|
|
1774
1805
|
probeCtx._lineIndex = ctx._lineIndex;
|
|
@@ -2473,7 +2504,9 @@ function sequence(...parsers) {
|
|
|
2473
2504
|
continue;
|
|
2474
2505
|
}
|
|
2475
2506
|
if (ctx.trivia && i > 0) {
|
|
2476
|
-
const
|
|
2507
|
+
const mTlog = cstTlLen(ctx);
|
|
2508
|
+
const mLog = ctx._triviaLog?.length ?? 0;
|
|
2509
|
+
const mRootLog = ctx._rootTriviaLog?.length ?? 0;
|
|
2477
2510
|
let scanEnd;
|
|
2478
2511
|
if (needsDeferredTriviaCommit(ctx)) {
|
|
2479
2512
|
const scan = scanTrivia(input, cur, ctx);
|
|
@@ -2482,10 +2515,13 @@ function sequence(...parsers) {
|
|
|
2482
2515
|
} else {
|
|
2483
2516
|
scanEnd = advanceTrivia(input, cur, ctx);
|
|
2484
2517
|
}
|
|
2518
|
+
const scanTlog = cstTlLen(ctx);
|
|
2519
|
+
const scanLog = ctx._triviaLog?.length ?? 0;
|
|
2520
|
+
const scanRootLog = ctx._rootTriviaLog?.length ?? 0;
|
|
2485
2521
|
const result2 = parsers[i].parse(input, scanEnd, ctx);
|
|
2486
2522
|
if (!result2.ok) return result2;
|
|
2487
2523
|
if (result2.span.end > scanEnd) cur = result2.span.end;
|
|
2488
|
-
else
|
|
2524
|
+
else rollbackScannedTriviaAt(ctx, mTlog, scanTlog, mLog, scanLog, mRootLog, scanRootLog);
|
|
2489
2525
|
if (values !== void 0) values.push(result2.value);
|
|
2490
2526
|
continue;
|
|
2491
2527
|
}
|
|
@@ -2516,7 +2552,9 @@ function sequence(...parsers) {
|
|
|
2516
2552
|
}
|
|
2517
2553
|
if (ctx.trivia && i > 0) {
|
|
2518
2554
|
let scanEnd;
|
|
2519
|
-
const
|
|
2555
|
+
const mTlog = cstTlLen(ctx);
|
|
2556
|
+
const mLog = ctx._triviaLog?.length ?? 0;
|
|
2557
|
+
const mRootLog = ctx._rootTriviaLog?.length ?? 0;
|
|
2520
2558
|
if (needsDeferredTriviaCommit(ctx)) {
|
|
2521
2559
|
const scan = scanTrivia(input, cur, ctx);
|
|
2522
2560
|
scan.commit();
|
|
@@ -2524,10 +2562,13 @@ function sequence(...parsers) {
|
|
|
2524
2562
|
} else {
|
|
2525
2563
|
scanEnd = advanceTrivia(input, cur, ctx);
|
|
2526
2564
|
}
|
|
2565
|
+
const scanTlog = cstTlLen(ctx);
|
|
2566
|
+
const scanLog = ctx._triviaLog?.length ?? 0;
|
|
2567
|
+
const scanRootLog = ctx._rootTriviaLog?.length ?? 0;
|
|
2527
2568
|
const result2 = parsers[i].parse(input, scanEnd, ctx);
|
|
2528
2569
|
if (!result2.ok) return result2;
|
|
2529
2570
|
if (result2.span.end > scanEnd) cur = result2.span.end;
|
|
2530
|
-
else
|
|
2571
|
+
else rollbackScannedTriviaAt(ctx, mTlog, scanTlog, mLog, scanLog, mRootLog, scanRootLog);
|
|
2531
2572
|
if (values !== void 0) values.push(result2.value);
|
|
2532
2573
|
continue;
|
|
2533
2574
|
}
|
|
@@ -2555,7 +2596,9 @@ function sequence(...parsers) {
|
|
|
2555
2596
|
for (let i = 0; i < parsers.length; i++) {
|
|
2556
2597
|
if (ctx.trivia && i > 0) {
|
|
2557
2598
|
let scanEnd;
|
|
2558
|
-
|
|
2599
|
+
const mTlog = cstTlLen(ctx);
|
|
2600
|
+
const mLog = ctx._triviaLog?.length ?? 0;
|
|
2601
|
+
const mRootLog = ctx._rootTriviaLog?.length ?? 0;
|
|
2559
2602
|
if (needsDeferredTriviaCommit(ctx)) {
|
|
2560
2603
|
const scan = scanTrivia(input, cur, ctx);
|
|
2561
2604
|
scan.commit();
|
|
@@ -2563,12 +2606,15 @@ function sequence(...parsers) {
|
|
|
2563
2606
|
} else {
|
|
2564
2607
|
scanEnd = advanceTrivia(input, cur, ctx);
|
|
2565
2608
|
}
|
|
2609
|
+
const scanTlog = cstTlLen(ctx);
|
|
2610
|
+
const scanLog = ctx._triviaLog?.length ?? 0;
|
|
2611
|
+
const scanRootLog = ctx._rootTriviaLog?.length ?? 0;
|
|
2566
2612
|
const result2 = parsers[i].parse(input, scanEnd, ctx);
|
|
2567
2613
|
if (!result2.ok) return result2;
|
|
2568
2614
|
if (result2.span.end > scanEnd) {
|
|
2569
2615
|
cur = result2.span.end;
|
|
2570
2616
|
} else {
|
|
2571
|
-
|
|
2617
|
+
rollbackScannedTriviaAt(ctx, mTlog, scanTlog, mLog, scanLog, mRootLog, scanRootLog);
|
|
2572
2618
|
}
|
|
2573
2619
|
if (values !== void 0) values.push(result2.value);
|
|
2574
2620
|
continue;
|
|
@@ -5190,6 +5236,7 @@ var OP_LIVE = 37;
|
|
|
5190
5236
|
var OP_ATTEMPT = 38;
|
|
5191
5237
|
var OP_LABEL = 39;
|
|
5192
5238
|
var OP_COV = 40;
|
|
5239
|
+
var OP_SCOPE_PLAIN = 41;
|
|
5193
5240
|
var OP_DISPATCH = 25;
|
|
5194
5241
|
var OP_ROUTED = 26;
|
|
5195
5242
|
var OP_NAMES = {
|
|
@@ -5232,7 +5279,8 @@ var OP_NAMES = {
|
|
|
5232
5279
|
[OP_LIVE]: "LIVE",
|
|
5233
5280
|
[OP_ATTEMPT]: "ATTEMPT",
|
|
5234
5281
|
[OP_LABEL]: "LABEL",
|
|
5235
|
-
[OP_COV]: "COV"
|
|
5282
|
+
[OP_COV]: "COV",
|
|
5283
|
+
[OP_SCOPE_PLAIN]: "SCOPE_PLAIN"
|
|
5236
5284
|
};
|
|
5237
5285
|
|
|
5238
5286
|
// src/table/program.ts
|
|
@@ -5290,6 +5338,15 @@ function expandCompact(p) {
|
|
|
5290
5338
|
...p.a === void 0 ? {} : { asm: p.a }
|
|
5291
5339
|
});
|
|
5292
5340
|
}
|
|
5341
|
+
function validateDispatchSpec(spec, arity, fallbackRouted) {
|
|
5342
|
+
const invalid = (arms) => {
|
|
5343
|
+
for (const arm of arms) if (!Number.isInteger(arm) || arm < 0 || arm >= arity) return true;
|
|
5344
|
+
return false;
|
|
5345
|
+
};
|
|
5346
|
+
if (spec === void 0 || !Number.isInteger(arity) || arity < 0 || fallbackRouted !== 0 && fallbackRouted !== 1 || spec.routed.length !== arity || spec.routed.some((value) => value !== 0 && value !== 1) || invalid(spec.byKey.values()) || invalid(spec.byFold.values()) || spec.match.some((matcher) => invalid([matcher[3]]))) {
|
|
5347
|
+
throw new TypeError("table: malformed dispatch");
|
|
5348
|
+
}
|
|
5349
|
+
}
|
|
5293
5350
|
var TABLE_RUNTIME = /* @__PURE__ */ Symbol("parseman.tableRuntime");
|
|
5294
5351
|
function ownTableProgram(prog, resolved) {
|
|
5295
5352
|
return { ...prog, [TABLE_RUNTIME]: { resolved } };
|
|
@@ -5848,7 +5905,7 @@ var Encoder = class {
|
|
|
5848
5905
|
this.carryTriviaMeta(amb);
|
|
5849
5906
|
this.carryTriviaMeta(p);
|
|
5850
5907
|
if (p._def.tag === "grammar") this.carryTriviaMeta(p._def.triviaParser);
|
|
5851
|
-
this.rules[name] = amb === void 0 ? body : this.emit(
|
|
5908
|
+
this.rules[name] = amb === void 0 ? body : this.emit(OP_SCOPE_PLAIN, this.triviaSlot(amb), body);
|
|
5852
5909
|
}
|
|
5853
5910
|
/**
|
|
5854
5911
|
* The row a cross-rule `g.X` reference jumps to — the target's body, RE-WRAPPED
|
|
@@ -5891,7 +5948,7 @@ var Encoder = class {
|
|
|
5891
5948
|
const amb = p._meta.grammarTrivia ?? target._meta.grammarTrivia;
|
|
5892
5949
|
if (amb === void 0 || this.activeTrivia !== void 0) return ip;
|
|
5893
5950
|
if (!hasOwnTriviaBoundary(target)) return ip;
|
|
5894
|
-
return this.emit(
|
|
5951
|
+
return this.emit(OP_SCOPE_PLAIN, this.triviaSlot(amb), ip);
|
|
5895
5952
|
}
|
|
5896
5953
|
node(p) {
|
|
5897
5954
|
const lazyRef = p._def.tag === "lazy";
|
|
@@ -6296,6 +6353,7 @@ var Encoder = class {
|
|
|
6296
6353
|
return [ip + 1];
|
|
6297
6354
|
case OP_SCOPE:
|
|
6298
6355
|
case OP_SCOPE_CAP:
|
|
6356
|
+
case OP_SCOPE_PLAIN:
|
|
6299
6357
|
case OP_WITHCTX:
|
|
6300
6358
|
case OP_XFORM:
|
|
6301
6359
|
case OP_LEAF:
|
|
@@ -7489,6 +7547,7 @@ function childSlots(code, ip, out) {
|
|
|
7489
7547
|
case OP_GATE:
|
|
7490
7548
|
case OP_SCOPE:
|
|
7491
7549
|
case OP_SCOPE_CAP:
|
|
7550
|
+
case OP_SCOPE_PLAIN:
|
|
7492
7551
|
case OP_WITHCTX:
|
|
7493
7552
|
case OP_XFORM:
|
|
7494
7553
|
case OP_NODE:
|
|
@@ -7577,7 +7636,7 @@ function reachableSites(code, roots) {
|
|
|
7577
7636
|
}
|
|
7578
7637
|
function transfer(code, ip, at, hostCst) {
|
|
7579
7638
|
const op = code[ip];
|
|
7580
|
-
if (op === OP_SCOPE || op === OP_SCOPE_CAP) {
|
|
7639
|
+
if (op === OP_SCOPE || op === OP_SCOPE_CAP || op === OP_SCOPE_PLAIN) {
|
|
7581
7640
|
const ki = code[ip + 1];
|
|
7582
7641
|
const tri = ki < 0 ? TRI_NONE : ki;
|
|
7583
7642
|
const cap = op === OP_SCOPE_CAP ? CAP_ON : at.cap;
|
|
@@ -7658,6 +7717,7 @@ var EMITTED_PARAMS = [
|
|
|
7658
7717
|
"pushCstLeaf",
|
|
7659
7718
|
"pushCstChild",
|
|
7660
7719
|
"rollbackTriviaAt",
|
|
7720
|
+
"rollbackScannedTriviaAt",
|
|
7661
7721
|
"failAt",
|
|
7662
7722
|
"classHas",
|
|
7663
7723
|
"consumeTrivia",
|
|
@@ -7801,19 +7861,24 @@ if(ctx._errors!==undefined&&ctx._errors.length!==${t}er)ctx._errors.length=${t}e
|
|
|
7801
7861
|
if (!s.fd && !s.er) return `if(${t}n)rollbackTriviaAt(ctx,${t}raw,${t}tl,${t}lv,0,undefined,${t}lg,${t}rt)`;
|
|
7802
7862
|
return `if(${t}n){rollbackTriviaAt(ctx,${t}raw,${t}tl,${t}lv,${s.fd ? `${t}fd` : "0"},${s.er ? `${t}er` : "undefined"},${t}lg,${t}rt)}`;
|
|
7803
7863
|
}
|
|
7804
|
-
function emitTerm(callee, dst, t, l, skip
|
|
7864
|
+
function emitTerm(callee, dst, t, l, skip) {
|
|
7805
7865
|
const fast = `const ${t}v=${callee}(input,cur,ctx)
|
|
7806
7866
|
if(${t}v===FAIL)return FAIL
|
|
7807
7867
|
${dst}=${t}v
|
|
7808
7868
|
cur=EC.e`;
|
|
7809
7869
|
if (l.tri === TRI_NONE) return fast;
|
|
7810
|
-
const scanned =
|
|
7870
|
+
const scanned = `const ${t}tl=ctx._cstBuf!==undefined?(ctx._cstBuf.tl!==undefined?ctx._cstBuf.tl.length:0):(ctx._cstTriviaLog!==undefined?ctx._cstTriviaLog.length:0)
|
|
7871
|
+
const ${t}lg=ctx._triviaLog!==undefined?ctx._triviaLog.length:0
|
|
7872
|
+
const ${t}rt=ctx._rootTriviaLog!==undefined?ctx._rootTriviaLog.length:0
|
|
7811
7873
|
const ${t}s=${skip}(input,cur,ctx)
|
|
7874
|
+
const ${t}stl=ctx._cstBuf!==undefined?(ctx._cstBuf.tl!==undefined?ctx._cstBuf.tl.length:0):(ctx._cstTriviaLog!==undefined?ctx._cstTriviaLog.length:0)
|
|
7875
|
+
const ${t}slg=ctx._triviaLog!==undefined?ctx._triviaLog.length:0
|
|
7876
|
+
const ${t}srt=ctx._rootTriviaLog!==undefined?ctx._rootTriviaLog.length:0
|
|
7812
7877
|
const ${t}v=${callee}(input,${t}s,ctx)
|
|
7813
7878
|
if(${t}v===FAIL)return FAIL
|
|
7814
7879
|
${dst}=${t}v
|
|
7815
7880
|
if(EC.e>${t}s)cur=EC.e
|
|
7816
|
-
else{
|
|
7881
|
+
else{rollbackScannedTriviaAt(ctx,${t}tl,${t}stl,${t}lg,${t}slg,${t}rt,${t}srt)}`;
|
|
7817
7882
|
if (l.tri !== TRI_UNKNOWN) return scanned;
|
|
7818
7883
|
return `if(ctx.trivia===undefined){
|
|
7819
7884
|
${fast}
|
|
@@ -7976,7 +8041,7 @@ ${cfg.probe ? `failAt(ctx,${xf},pos)
|
|
|
7976
8041
|
const op = code[ip];
|
|
7977
8042
|
if (op === OP_GATE && (cfg.tolerant || cfg.probe)) return code[ip + 2];
|
|
7978
8043
|
if (op === OP_RULE) return code[ip + 1];
|
|
7979
|
-
if (op === OP_SCOPE && code[ip + 3] === 0 && code[ip + 1] >= 0 && labels.at(ip).tri === code[ip + 1]) {
|
|
8044
|
+
if ((op === OP_SCOPE_PLAIN || op === OP_SCOPE && code[ip + 3] === 0) && code[ip + 1] >= 0 && labels.at(ip).tri === code[ip + 1]) {
|
|
7980
8045
|
return code[ip + 2];
|
|
7981
8046
|
}
|
|
7982
8047
|
return void 0;
|
|
@@ -8144,10 +8209,11 @@ return r.value
|
|
|
8144
8209
|
}`;
|
|
8145
8210
|
}
|
|
8146
8211
|
case OP_SCOPE:
|
|
8147
|
-
case OP_SCOPE_CAP:
|
|
8212
|
+
case OP_SCOPE_CAP:
|
|
8213
|
+
case OP_SCOPE_PLAIN: {
|
|
8148
8214
|
const ki = code[ip + 1];
|
|
8149
8215
|
const cap = op === OP_SCOPE_CAP;
|
|
8150
|
-
const flags = code[ip + 3];
|
|
8216
|
+
const flags = op === OP_SCOPE_PLAIN ? 0 : code[ip + 3];
|
|
8151
8217
|
const child = link(code[ip + 2]);
|
|
8152
8218
|
const scanFor = swapLegal && ki >= 0 && !triviaLabelled[ki] ? hoist("ts", `TRIVIASCAN[${ki}]`) : "null";
|
|
8153
8219
|
const tri = ki < 0 ? "undefined" : hoist("tv", `TRIVIA[${ki}]`);
|
|
@@ -8301,7 +8367,7 @@ return v
|
|
|
8301
8367
|
const vn = `v${i}`;
|
|
8302
8368
|
parts.push(`let ${vn}`);
|
|
8303
8369
|
if (REC2) parts.push(pub(i));
|
|
8304
|
-
parts.push(emitTerm(kids[i], vn, tmp(), L, skipFor(L)
|
|
8370
|
+
parts.push(emitTerm(kids[i], vn, tmp(), L, skipFor(L)));
|
|
8305
8371
|
names.push(vn);
|
|
8306
8372
|
}
|
|
8307
8373
|
parts.push("EC.e=cur");
|
|
@@ -8402,11 +8468,11 @@ return FAIL
|
|
|
8402
8468
|
const other = otherIp >= 0 ? link(otherIp) : void 0;
|
|
8403
8469
|
const otherRouted = code[ip + 4] === 1;
|
|
8404
8470
|
const n = code[ip + 5];
|
|
8471
|
+
validateDispatchSpec(spec, n, code[ip + 4]);
|
|
8405
8472
|
const armBase = ip + 6;
|
|
8406
8473
|
const arms = [];
|
|
8407
8474
|
for (let i = 0; i < n; i++) arms.push(link(code[armBase + i]));
|
|
8408
8475
|
const bk = hoist("bk", `DSP[${di}].byKey`);
|
|
8409
|
-
const rt = hoist("rt", `DSP[${di}].routed`);
|
|
8410
8476
|
const dx = hoist("dx", `DSP[${di}].expected`);
|
|
8411
8477
|
const claims = (m) => {
|
|
8412
8478
|
switch (m[0]) {
|
|
@@ -8430,6 +8496,15 @@ ${spec.match.map((m, i) => `${i === 0 ? "" : "else "}if(${claims(m)})arm=${m[3]}
|
|
|
8430
8496
|
` : "";
|
|
8431
8497
|
const m1 = tmp();
|
|
8432
8498
|
const m2 = tmp();
|
|
8499
|
+
const routedCall = (target) => `{const savedRouted=ctx._routed
|
|
8500
|
+
${emitRollback(m1, L.buf, sinks)}
|
|
8501
|
+
${emitMark(m2, L.buf, sinks, false)}
|
|
8502
|
+
ctx._routed={value:key,span:{start:pos,end:selEnd}}
|
|
8503
|
+
try{v=${target}(input,pos,ctx)}finally{ctx._routed=savedRouted}
|
|
8504
|
+
break}`;
|
|
8505
|
+
const plainCall = (target) => `v=${target}(input,selEnd,ctx);break`;
|
|
8506
|
+
const armCases = arms.map((target, i) => `case ${i}:${spec.routed[i] === 1 ? routedCall(target) : plainCall(target)}`).join("\n");
|
|
8507
|
+
const fallbackCase = other === void 0 ? "" : `default:${otherRouted ? routedCall(other) : plainCall(other)}`;
|
|
8433
8508
|
return `${head}
|
|
8434
8509
|
${emitMark(m1, L.buf, sinks)}
|
|
8435
8510
|
const sv=${selector}(input,pos,ctx)
|
|
@@ -8437,24 +8512,16 @@ if(sv===FAIL)return FAIL
|
|
|
8437
8512
|
const selEnd=EC.e
|
|
8438
8513
|
const key=sv
|
|
8439
8514
|
let arm=${bk}.get(key)
|
|
8440
|
-
${fold}${chain}
|
|
8515
|
+
${fold}${chain}
|
|
8441
8516
|
if(arm===undefined){
|
|
8442
|
-
${other === void 0 ? `ctx._fe=selEnd;ctx._fx=${dx};return FAIL` :
|
|
8443
|
-
}else ur=${rt}[arm]===1
|
|
8444
|
-
const savedRouted=ctx._routed
|
|
8445
|
-
${emitMark(m2, L.buf, sinks)}
|
|
8446
|
-
if(ur){
|
|
8447
|
-
${emitRollback(m1, L.buf, sinks)}
|
|
8448
|
-
${emitMark(m2, L.buf, sinks, false)}
|
|
8449
|
-
ctx._routed={value:key,span:{start:pos,end:selEnd}}
|
|
8517
|
+
${other === void 0 ? `ctx._fe=selEnd;ctx._fx=${dx};return FAIL` : ""}
|
|
8450
8518
|
}
|
|
8451
|
-
|
|
8519
|
+
${emitMark(m2, L.buf, sinks)}
|
|
8452
8520
|
let v
|
|
8453
8521
|
switch(arm){
|
|
8454
|
-
${
|
|
8455
|
-
${
|
|
8522
|
+
${armCases}
|
|
8523
|
+
${fallbackCase}
|
|
8456
8524
|
}
|
|
8457
|
-
if(ur)ctx._routed=savedRouted
|
|
8458
8525
|
if(v===FAIL){
|
|
8459
8526
|
${emitRollback(m2, L.buf, sinks)}
|
|
8460
8527
|
ctx._fc=true
|
|
@@ -8930,7 +8997,7 @@ function committed(c) {
|
|
|
8930
8997
|
}
|
|
8931
8998
|
function stampRuleMap(prog, d, artifactMetadata = {}, resolved = resolveTable(prog)) {
|
|
8932
8999
|
const triviaOfRule = (ip) => {
|
|
8933
|
-
if (prog.code[ip] !== OP_SCOPE) return void 0;
|
|
9000
|
+
if (prog.code[ip] !== OP_SCOPE_PLAIN && prog.code[ip] !== OP_SCOPE) return void 0;
|
|
8934
9001
|
const slot = prog.code[ip + 1];
|
|
8935
9002
|
return slot < 0 ? void 0 : resolved.trivia[slot];
|
|
8936
9003
|
};
|
|
@@ -9144,20 +9211,19 @@ function assemble(t, prog, cfg) {
|
|
|
9144
9211
|
TERMV = v2;
|
|
9145
9212
|
return EC.e > scanEnd2 ? EC.e : cur;
|
|
9146
9213
|
}
|
|
9147
|
-
const need =
|
|
9148
|
-
const
|
|
9149
|
-
const mTl = MTL;
|
|
9150
|
-
const mLv = MLV;
|
|
9151
|
-
const mFl = need ? ctx._fields?.length ?? 0 : 0;
|
|
9152
|
-
const mEr = need ? ctx._errors?.length ?? 0 : 0;
|
|
9214
|
+
const need = rollbackNeeded(ctx);
|
|
9215
|
+
const mTl = need ? cstTlLen(ctx) : 0;
|
|
9153
9216
|
const mLog = need ? ctx._triviaLog?.length ?? 0 : 0;
|
|
9154
9217
|
const mRoot = need ? ctx._rootTriviaLog?.length ?? 0 : 0;
|
|
9155
9218
|
const scanEnd = skipTrivia(input, cur, ctx);
|
|
9219
|
+
const scanTl = need ? cstTlLen(ctx) : 0;
|
|
9220
|
+
const scanLog = need ? ctx._triviaLog?.length ?? 0 : 0;
|
|
9221
|
+
const scanRoot = need ? ctx._rootTriviaLog?.length ?? 0 : 0;
|
|
9156
9222
|
const v = child(input, scanEnd, ctx);
|
|
9157
9223
|
if (v === FAIL) return -1;
|
|
9158
9224
|
TERMV = v;
|
|
9159
9225
|
if (EC.e > scanEnd) return EC.e;
|
|
9160
|
-
if (need)
|
|
9226
|
+
if (need) rollbackScannedTriviaAt(ctx, mTl, scanTl, mLog, scanLog, mRoot, scanRoot);
|
|
9161
9227
|
return cur;
|
|
9162
9228
|
}
|
|
9163
9229
|
function committed2(c) {
|
|
@@ -9571,7 +9637,8 @@ function assemble(t, prog, cfg) {
|
|
|
9571
9637
|
};
|
|
9572
9638
|
}
|
|
9573
9639
|
case OP_SCOPE:
|
|
9574
|
-
case OP_SCOPE_CAP:
|
|
9640
|
+
case OP_SCOPE_CAP:
|
|
9641
|
+
case OP_SCOPE_PLAIN: {
|
|
9575
9642
|
const ki = code[ip + 1];
|
|
9576
9643
|
const scopeTrivia = ki < 0 ? void 0 : trivia2[ki];
|
|
9577
9644
|
const scopeLabels = scopeTrivia?._meta.triviaKindLabels;
|
|
@@ -9605,7 +9672,7 @@ function assemble(t, prog, cfg) {
|
|
|
9605
9672
|
SCAN = savedScan;
|
|
9606
9673
|
return v;
|
|
9607
9674
|
};
|
|
9608
|
-
return scopeRootPolicy(scopePiece, code[ip + 3]);
|
|
9675
|
+
return scopeRootPolicy(scopePiece, code[ip] === OP_SCOPE_PLAIN ? 0 : code[ip + 3]);
|
|
9609
9676
|
}
|
|
9610
9677
|
case OP_ROUTED: {
|
|
9611
9678
|
const fb = code[ip + 1];
|
|
@@ -10521,15 +10588,21 @@ function assemble(t, prog, cfg) {
|
|
|
10521
10588
|
target = arms[arm];
|
|
10522
10589
|
usesRouted = routed2[arm] === 1;
|
|
10523
10590
|
}
|
|
10524
|
-
const savedRouted = ctx._routed;
|
|
10525
10591
|
let mark = saveTriviaMark(ctx);
|
|
10592
|
+
let v;
|
|
10526
10593
|
if (usesRouted) {
|
|
10594
|
+
const savedRouted = ctx._routed;
|
|
10527
10595
|
rollbackTrivia(ctx, selectorMark);
|
|
10528
10596
|
mark = saveTriviaMark(ctx);
|
|
10529
10597
|
ctx._routed = { value: key, span: { start: pos, end: selEnd } };
|
|
10598
|
+
try {
|
|
10599
|
+
v = target(input, pos, ctx);
|
|
10600
|
+
} finally {
|
|
10601
|
+
ctx._routed = savedRouted;
|
|
10602
|
+
}
|
|
10603
|
+
} else {
|
|
10604
|
+
v = target(input, selEnd, ctx);
|
|
10530
10605
|
}
|
|
10531
|
-
const v = target(input, usesRouted ? pos : selEnd, ctx);
|
|
10532
|
-
if (usesRouted) ctx._routed = savedRouted;
|
|
10533
10606
|
if (v === FAIL) {
|
|
10534
10607
|
rollbackTrivia(ctx, mark);
|
|
10535
10608
|
ctx._fc = true;
|
|
@@ -10675,6 +10748,11 @@ function assemble(t, prog, cfg) {
|
|
|
10675
10748
|
if (s.sentinel !== void 0) extraIps.push(s.sentinel[0]);
|
|
10676
10749
|
}
|
|
10677
10750
|
for (const set of prog.scanSkip ?? []) for (const r of set) extraIps.push(r[0]);
|
|
10751
|
+
const validationRoots = [...Object.values(prog.rules), ...extraIps];
|
|
10752
|
+
for (const ip of reachableSites(code, validationRoots)) {
|
|
10753
|
+
if (code[ip] !== OP_DISPATCH) continue;
|
|
10754
|
+
validateDispatchSpec(dsp[code[ip + 2]], code[ip + 5], code[ip + 4]);
|
|
10755
|
+
}
|
|
10678
10756
|
const pre = cfg.hostCaptureTrivia === void 0 ? prog.asm?.find((a) => a.key === cfgKey(cfg)) : void 0;
|
|
10679
10757
|
if (pre !== void 0) {
|
|
10680
10758
|
const pools = rebuildPools(t.cc, t.fx, pre.plan);
|
|
@@ -10701,6 +10779,7 @@ function assemble(t, prog, cfg) {
|
|
|
10701
10779
|
pushCstLeaf,
|
|
10702
10780
|
pushCstChild,
|
|
10703
10781
|
rollbackTriviaAt,
|
|
10782
|
+
rollbackScannedTriviaAt,
|
|
10704
10783
|
failAt,
|
|
10705
10784
|
classHas,
|
|
10706
10785
|
consumeTrivia,
|
|
@@ -10771,6 +10850,7 @@ function assemble(t, prog, cfg) {
|
|
|
10771
10850
|
pushCstLeaf,
|
|
10772
10851
|
pushCstChild,
|
|
10773
10852
|
rollbackTriviaAt,
|
|
10853
|
+
rollbackScannedTriviaAt,
|
|
10774
10854
|
failAt,
|
|
10775
10855
|
classHas,
|
|
10776
10856
|
consumeTrivia,
|
|
@@ -11003,6 +11083,14 @@ function tableRules(source, artifactMetadata = {}) {
|
|
|
11003
11083
|
function jsString(s) {
|
|
11004
11084
|
return JSON.stringify(s);
|
|
11005
11085
|
}
|
|
11086
|
+
function emitClassPool(classes) {
|
|
11087
|
+
const array = `[${classes.map(jsString).join(",")}]`;
|
|
11088
|
+
if (classes.length < 2) return array;
|
|
11089
|
+
const delimiter = "|/~?^`".split("").find((ch2) => classes.every((spec) => !spec.includes(ch2)));
|
|
11090
|
+
if (delimiter === void 0) return array;
|
|
11091
|
+
const split = `${jsString(classes.join(delimiter))}.split(${jsString(delimiter)})`;
|
|
11092
|
+
return split.length < array.length ? split : array;
|
|
11093
|
+
}
|
|
11006
11094
|
function emitConst(v) {
|
|
11007
11095
|
if (v instanceof RegExp) return `/${v.source}/${v.flags}`;
|
|
11008
11096
|
if (typeof v === "string") return jsString(v);
|
|
@@ -11081,7 +11169,7 @@ function programFields(prog, fns, opts = {}) {
|
|
|
11081
11169
|
...emitAssemblies(prog, opts.assemblies ?? []),
|
|
11082
11170
|
`c:[${prog.code.join(",")}],`,
|
|
11083
11171
|
`k:[${prog.k.map(emitConst).join(",")}],`,
|
|
11084
|
-
`x
|
|
11172
|
+
`x:${emitClassPool(prog.cc)},`,
|
|
11085
11173
|
`e:[${prog.fx.map((f) => `[${f.map(jsString).join(",")}]`).join(",")}],`,
|
|
11086
11174
|
`d:[${prog.disp.map((a) => `[${a.join(",")}]`).join(",")}],`,
|
|
11087
11175
|
`r:${JSON.stringify(prog.rules)},`,
|
|
@@ -13433,7 +13521,7 @@ function compileRuleMap(ruleMap, opts = {}) {
|
|
|
13433
13521
|
}
|
|
13434
13522
|
|
|
13435
13523
|
// src/version.ts
|
|
13436
|
-
var PARSEMAN_VERSION = "0.47.
|
|
13524
|
+
var PARSEMAN_VERSION = "0.47.1";
|
|
13437
13525
|
|
|
13438
13526
|
// src/compiler/compile-linkable-table.ts
|
|
13439
13527
|
function isLocal(rule) {
|