parseman 0.55.1 → 0.55.3
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/commitment.d.ts +27 -2
- package/dist/analysis/commitment.d.ts.map +1 -1
- package/dist/analysis/diagnostics.js +78 -79
- package/dist/analysis/diagnostics.js.map +2 -2
- package/dist/cli/index.js +78 -79
- package/dist/cli/index.js.map +2 -2
- package/dist/combinators/choice.d.ts.map +1 -1
- package/dist/index.js +79 -80
- package/dist/index.js.map +2 -2
- package/dist/plugin/index.js +79 -80
- package/dist/plugin/index.js.map +2 -2
- package/dist/table/encode.d.ts.map +1 -1
- package/dist/table/index.js +78 -79
- package/dist/table/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/analysis/commitment.ts +107 -20
- package/src/combinators/choice.ts +8 -10
- package/src/table/encode.ts +12 -59
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/table/encode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,UAAU,EAAuB,MAAM,aAAa,CAAA;AAyBhF,OAAO,KAAK,EAAmE,YAAY,EAAc,MAAM,cAAc,CAAA;AAS7H,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AA0B9E,8EAA8E;AAC9E,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,YAAY,GAAG,EAAE,MAAM,EAAqE;CAC7F;AAED,8EAA8E;AAC9E,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAA;CACxC,CAAA;
|
|
1
|
+
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/table/encode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,UAAU,EAAuB,MAAM,aAAa,CAAA;AAyBhF,OAAO,KAAK,EAAmE,YAAY,EAAc,MAAM,cAAc,CAAA;AAS7H,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AA0B9E,8EAA8E;AAC9E,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,YAAY,GAAG,EAAE,MAAM,EAAqE;CAC7F;AAED,8EAA8E;AAC9E,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAA;CACxC,CAAA;AA4tDD,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,EAC5C,QAAQ,GAAE,aAAkB,GAC3B,YAAY,CAEd;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,EAC5C,QAAQ,GAAE,aAAkB,GAC3B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;CAAE,CA+BnD"}
|
package/dist/table/index.js
CHANGED
|
@@ -2800,14 +2800,8 @@ function choice(...args) {
|
|
|
2800
2800
|
if (result.committed) return { ok: false, expected, span: { start: pos, end: pos }, committed: true };
|
|
2801
2801
|
return { ok: false, expected, span: { start: pos, end: pos } };
|
|
2802
2802
|
}
|
|
2803
|
-
|
|
2804
|
-
|
|
2805
|
-
expected: parsers.flatMap((p) => {
|
|
2806
|
-
const r = p.parse(input, pos, ctx);
|
|
2807
|
-
return r.ok ? [] : r.expected;
|
|
2808
|
-
}),
|
|
2809
|
-
span: { start: pos, end: pos }
|
|
2810
|
-
};
|
|
2803
|
+
if (ctx._probe !== void 0 || ctx._tolerant) for (const p of parsers) p.parse(input, pos, ctx);
|
|
2804
|
+
return { ok: false, expected: [...scalarExpected], span: { start: pos, end: pos } };
|
|
2811
2805
|
}
|
|
2812
2806
|
if (strategy?.tag === "greedyClassify") {
|
|
2813
2807
|
const superResult = parsers[strategy.superIndex].parse(input, pos, ctx);
|
|
@@ -11952,19 +11946,22 @@ function hasDirectBuildDef(p, seen = /* @__PURE__ */ new Set()) {
|
|
|
11952
11946
|
return false;
|
|
11953
11947
|
}
|
|
11954
11948
|
}
|
|
11955
|
-
function mayCommitFailure(p,
|
|
11956
|
-
|
|
11957
|
-
|
|
11949
|
+
function mayCommitFailure(p, resolve, memo = /* @__PURE__ */ new Map()) {
|
|
11950
|
+
return reachesMarked(p, (node) => commitFailureSuccessors(node, resolve), memo);
|
|
11951
|
+
}
|
|
11952
|
+
var NO_EDGES = [];
|
|
11953
|
+
function commitFailureSuccessors(p, resolve) {
|
|
11958
11954
|
const d = p._def;
|
|
11959
11955
|
switch (d.tag) {
|
|
11960
11956
|
case "dispatch":
|
|
11957
|
+
case "unknown":
|
|
11961
11958
|
return true;
|
|
11962
11959
|
case "choice":
|
|
11963
11960
|
case "sequence":
|
|
11964
|
-
return d.parsers
|
|
11961
|
+
return d.parsers;
|
|
11965
11962
|
// A contained transaction reports every failure uncommitted.
|
|
11966
11963
|
case "attempt":
|
|
11967
|
-
return d.contain
|
|
11964
|
+
return d.contain === true ? NO_EDGES : [d.parser];
|
|
11968
11965
|
case "many":
|
|
11969
11966
|
case "oneOrMore":
|
|
11970
11967
|
case "optional":
|
|
@@ -11973,31 +11970,77 @@ function mayCommitFailure(p, seen = /* @__PURE__ */ new Set(), resolve) {
|
|
|
11973
11970
|
case "field":
|
|
11974
11971
|
case "grammar":
|
|
11975
11972
|
case "node":
|
|
11976
|
-
return mayCommitFailure(d.parser, seen, resolve);
|
|
11977
|
-
case "sepBy":
|
|
11978
|
-
return mayCommitFailure(d.parser, seen, resolve) || mayCommitFailure(d.separator, seen, resolve);
|
|
11979
11973
|
case "token":
|
|
11980
11974
|
case "leaf":
|
|
11981
|
-
return mayCommitFailure(d.parser, seen, resolve);
|
|
11982
11975
|
case "withCtx":
|
|
11983
|
-
return
|
|
11976
|
+
return [d.parser];
|
|
11977
|
+
case "sepBy":
|
|
11978
|
+
return [d.parser, d.separator];
|
|
11984
11979
|
case "scanTo":
|
|
11985
|
-
return
|
|
11980
|
+
return [
|
|
11981
|
+
d.sentinel,
|
|
11982
|
+
...d.skip,
|
|
11983
|
+
...d.recoverAt === void 0 ? NO_EDGES : [d.recoverAt],
|
|
11984
|
+
...d.stopAt === void 0 ? NO_EDGES : [d.stopAt]
|
|
11985
|
+
];
|
|
11986
11986
|
case "lazy": {
|
|
11987
11987
|
try {
|
|
11988
|
-
return
|
|
11988
|
+
return [d.thunk()];
|
|
11989
11989
|
} catch {
|
|
11990
11990
|
const name = p._ruleName;
|
|
11991
11991
|
const target = name === void 0 ? void 0 : resolve?.(name);
|
|
11992
|
-
return target === void 0 ? true :
|
|
11992
|
+
return target === void 0 ? true : [target];
|
|
11993
11993
|
}
|
|
11994
11994
|
}
|
|
11995
|
-
case "unknown":
|
|
11996
|
-
return true;
|
|
11997
11995
|
default:
|
|
11998
|
-
return
|
|
11996
|
+
return NO_EDGES;
|
|
11999
11997
|
}
|
|
12000
11998
|
}
|
|
11999
|
+
function reachesMarked(root, successors, memo) {
|
|
12000
|
+
const known = memo.get(root);
|
|
12001
|
+
if (known !== void 0) return known;
|
|
12002
|
+
const order = /* @__PURE__ */ new Map();
|
|
12003
|
+
const low = [];
|
|
12004
|
+
const found = [];
|
|
12005
|
+
const stack = [];
|
|
12006
|
+
const visit = (node) => {
|
|
12007
|
+
const at = low.length;
|
|
12008
|
+
order.set(node, at);
|
|
12009
|
+
low.push(at);
|
|
12010
|
+
found.push(false);
|
|
12011
|
+
stack.push(node);
|
|
12012
|
+
const next = successors(node);
|
|
12013
|
+
if (next === true) found[at] = true;
|
|
12014
|
+
else {
|
|
12015
|
+
for (const child of next) {
|
|
12016
|
+
if (found[at]) break;
|
|
12017
|
+
const hit = memo.get(child);
|
|
12018
|
+
if (hit !== void 0) {
|
|
12019
|
+
if (hit) found[at] = true;
|
|
12020
|
+
continue;
|
|
12021
|
+
}
|
|
12022
|
+
const seen = order.get(child);
|
|
12023
|
+
if (seen !== void 0) {
|
|
12024
|
+
if (seen < low[at]) low[at] = seen;
|
|
12025
|
+
continue;
|
|
12026
|
+
}
|
|
12027
|
+
const k = visit(child);
|
|
12028
|
+
if (low[k] < low[at]) low[at] = low[k];
|
|
12029
|
+
if (found[k]) found[at] = true;
|
|
12030
|
+
}
|
|
12031
|
+
}
|
|
12032
|
+
if (low[at] === at) {
|
|
12033
|
+
const answer = found[at];
|
|
12034
|
+
let member;
|
|
12035
|
+
do {
|
|
12036
|
+
member = stack.pop();
|
|
12037
|
+
memo.set(member, answer);
|
|
12038
|
+
} while (member !== node);
|
|
12039
|
+
}
|
|
12040
|
+
return at;
|
|
12041
|
+
};
|
|
12042
|
+
return found[visit(root)];
|
|
12043
|
+
}
|
|
12001
12044
|
|
|
12002
12045
|
// src/compiler/direct-projection.ts
|
|
12003
12046
|
function directArrayProjection(fn, fnSrc, arity) {
|
|
@@ -12428,6 +12471,13 @@ var Encoder = class {
|
|
|
12428
12471
|
* attempt sites reach it.
|
|
12429
12472
|
*/
|
|
12430
12473
|
sideWriterMemo = /* @__PURE__ */ new Map();
|
|
12474
|
+
/**
|
|
12475
|
+
* `mayCommitFailure`'s answers, shared by every choice site for the lifetime
|
|
12476
|
+
* of this `Encoder` — exact for the graph and the `winners` resolver it is
|
|
12477
|
+
* encoding, so the rule graph is walked once per encode rather than once per
|
|
12478
|
+
* choice site.
|
|
12479
|
+
*/
|
|
12480
|
+
commitFailureMemo = /* @__PURE__ */ new Map();
|
|
12431
12481
|
labels = void 0;
|
|
12432
12482
|
/** Trivia table in scope at the row being encoded — codegen's `ctx.activeTrivia`. */
|
|
12433
12483
|
activeTrivia = void 0;
|
|
@@ -12868,62 +12918,11 @@ var Encoder = class {
|
|
|
12868
12918
|
}
|
|
12869
12919
|
/**
|
|
12870
12920
|
* Whether a field, recovered error, interpreted scanner or unresolvable shape
|
|
12871
|
-
* is reachable from `root` — the writer census of `failureNeedsRollback
|
|
12872
|
-
*
|
|
12873
|
-
* Reachability over a cyclic graph, decided with Tarjan's strongly connected
|
|
12874
|
-
* components so that every node the walk enters leaves with its exact answer
|
|
12875
|
-
* memoized: the members of one component reach each other, so they share one
|
|
12876
|
-
* answer, settled when the walk returns to the component's first node. A DFS
|
|
12877
|
-
* that instead cuts a cycle at its own ancestor path learns nothing it can
|
|
12878
|
-
* keep about a node whose walk hit the cut, and re-walks that node along
|
|
12879
|
-
* every path that reaches it — exponential over recursive value rules (linking
|
|
12880
|
-
* jess's SCSS grammar cost ~290G instructions). This walk enters each node
|
|
12881
|
-
* once per `Encoder`.
|
|
12921
|
+
* is reachable from `root` — the writer census of `failureNeedsRollback`,
|
|
12922
|
+
* entering each combinator once per `Encoder` (see `reachesMarked`).
|
|
12882
12923
|
*/
|
|
12883
12924
|
reachesSideWriter(root) {
|
|
12884
|
-
|
|
12885
|
-
const known = memo.get(root);
|
|
12886
|
-
if (known !== void 0) return known;
|
|
12887
|
-
const order = /* @__PURE__ */ new Map();
|
|
12888
|
-
const low = [];
|
|
12889
|
-
const found = [];
|
|
12890
|
-
const stack = [];
|
|
12891
|
-
const visit = (node) => {
|
|
12892
|
-
const at = low.length;
|
|
12893
|
-
order.set(node, at);
|
|
12894
|
-
low.push(at);
|
|
12895
|
-
found.push(false);
|
|
12896
|
-
stack.push(node);
|
|
12897
|
-
const next = this.sideWriterSuccessors(node);
|
|
12898
|
-
if (next === true) found[at] = true;
|
|
12899
|
-
else {
|
|
12900
|
-
for (const child of next) {
|
|
12901
|
-
const hit = memo.get(child);
|
|
12902
|
-
if (hit !== void 0) {
|
|
12903
|
-
if (hit) found[at] = true;
|
|
12904
|
-
continue;
|
|
12905
|
-
}
|
|
12906
|
-
const seen = order.get(child);
|
|
12907
|
-
if (seen !== void 0) {
|
|
12908
|
-
if (seen < low[at]) low[at] = seen;
|
|
12909
|
-
continue;
|
|
12910
|
-
}
|
|
12911
|
-
const k = visit(child);
|
|
12912
|
-
if (low[k] < low[at]) low[at] = low[k];
|
|
12913
|
-
if (found[k]) found[at] = true;
|
|
12914
|
-
}
|
|
12915
|
-
}
|
|
12916
|
-
if (low[at] === at) {
|
|
12917
|
-
const answer = found[at];
|
|
12918
|
-
let member;
|
|
12919
|
-
do {
|
|
12920
|
-
member = stack.pop();
|
|
12921
|
-
memo.set(member, answer);
|
|
12922
|
-
} while (member !== node);
|
|
12923
|
-
}
|
|
12924
|
-
return at;
|
|
12925
|
-
};
|
|
12926
|
-
return found[visit(root)];
|
|
12925
|
+
return reachesMarked(root, (node) => this.sideWriterSuccessors(node), this.sideWriterMemo);
|
|
12927
12926
|
}
|
|
12928
12927
|
/** The census's edges out of `node`, or `true` when `node` is itself a writer. */
|
|
12929
12928
|
sideWriterSuccessors(node) {
|
|
@@ -13278,7 +13277,7 @@ var Encoder = class {
|
|
|
13278
13277
|
this.code[head + 4 + kids.length + i] = this.expected(deriveExpected(arms[i]));
|
|
13279
13278
|
}
|
|
13280
13279
|
this.choiceRollbackMasks.set(head, rollbackMask);
|
|
13281
|
-
if (arms.every((arm) => !mayCommitFailure(arm,
|
|
13280
|
+
if (arms.every((arm) => !mayCommitFailure(arm, rr, this.commitFailureMemo))) {
|
|
13282
13281
|
this.nonCommittingChoiceSites.add(head);
|
|
13283
13282
|
}
|
|
13284
13283
|
return head;
|