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":"choice.d.ts","sourceRoot":"","sources":["../../src/combinators/choice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAC+B,QAAQ,EAClD,MAAM,aAAa,CAAA;AAMpB,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;AACvH,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI;KACrE,CAAC,IAAI,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAChC,CAAC,MAAM,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAEjD,wBAAgB,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EACxH,GAAG,IAAI,EAAE,CAAC,GACT,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"choice.d.ts","sourceRoot":"","sources":["../../src/combinators/choice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAC+B,QAAQ,EAClD,MAAM,aAAa,CAAA;AAMpB,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;AACvH,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI;KACrE,CAAC,IAAI,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAChC,CAAC,MAAM,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAEjD,wBAAgB,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EACxH,GAAG,IAAI,EAAE,CAAC,GACT,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CA4M1B;AAgID;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,CAWrF;AA6CD,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAKzE;AAED,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMhG"}
|
package/dist/index.js
CHANGED
|
@@ -3048,14 +3048,8 @@ function choice(...args) {
|
|
|
3048
3048
|
if (result.committed) return { ok: false, expected, span: { start: pos, end: pos }, committed: true };
|
|
3049
3049
|
return { ok: false, expected, span: { start: pos, end: pos } };
|
|
3050
3050
|
}
|
|
3051
|
-
|
|
3052
|
-
|
|
3053
|
-
expected: parsers.flatMap((p) => {
|
|
3054
|
-
const r = p.parse(input, pos, ctx);
|
|
3055
|
-
return r.ok ? [] : r.expected;
|
|
3056
|
-
}),
|
|
3057
|
-
span: { start: pos, end: pos }
|
|
3058
|
-
};
|
|
3051
|
+
if (ctx._probe !== void 0 || ctx._tolerant) for (const p of parsers) p.parse(input, pos, ctx);
|
|
3052
|
+
return { ok: false, expected: [...scalarExpected], span: { start: pos, end: pos } };
|
|
3059
3053
|
}
|
|
3060
3054
|
if (strategy?.tag === "greedyClassify") {
|
|
3061
3055
|
const superResult = parsers[strategy.superIndex].parse(input, pos, ctx);
|
|
@@ -6025,19 +6019,22 @@ function hasDirectBuildDef(p, seen = /* @__PURE__ */ new Set()) {
|
|
|
6025
6019
|
return false;
|
|
6026
6020
|
}
|
|
6027
6021
|
}
|
|
6028
|
-
function mayCommitFailure(p,
|
|
6029
|
-
|
|
6030
|
-
|
|
6022
|
+
function mayCommitFailure(p, resolve, memo = /* @__PURE__ */ new Map()) {
|
|
6023
|
+
return reachesMarked(p, (node2) => commitFailureSuccessors(node2, resolve), memo);
|
|
6024
|
+
}
|
|
6025
|
+
var NO_EDGES = [];
|
|
6026
|
+
function commitFailureSuccessors(p, resolve) {
|
|
6031
6027
|
const d = p._def;
|
|
6032
6028
|
switch (d.tag) {
|
|
6033
6029
|
case "dispatch":
|
|
6030
|
+
case "unknown":
|
|
6034
6031
|
return true;
|
|
6035
6032
|
case "choice":
|
|
6036
6033
|
case "sequence":
|
|
6037
|
-
return d.parsers
|
|
6034
|
+
return d.parsers;
|
|
6038
6035
|
// A contained transaction reports every failure uncommitted.
|
|
6039
6036
|
case "attempt":
|
|
6040
|
-
return d.contain
|
|
6037
|
+
return d.contain === true ? NO_EDGES : [d.parser];
|
|
6041
6038
|
case "many":
|
|
6042
6039
|
case "oneOrMore":
|
|
6043
6040
|
case "optional":
|
|
@@ -6046,31 +6043,77 @@ function mayCommitFailure(p, seen = /* @__PURE__ */ new Set(), resolve) {
|
|
|
6046
6043
|
case "field":
|
|
6047
6044
|
case "grammar":
|
|
6048
6045
|
case "node":
|
|
6049
|
-
return mayCommitFailure(d.parser, seen, resolve);
|
|
6050
|
-
case "sepBy":
|
|
6051
|
-
return mayCommitFailure(d.parser, seen, resolve) || mayCommitFailure(d.separator, seen, resolve);
|
|
6052
6046
|
case "token":
|
|
6053
6047
|
case "leaf":
|
|
6054
|
-
return mayCommitFailure(d.parser, seen, resolve);
|
|
6055
6048
|
case "withCtx":
|
|
6056
|
-
return
|
|
6049
|
+
return [d.parser];
|
|
6050
|
+
case "sepBy":
|
|
6051
|
+
return [d.parser, d.separator];
|
|
6057
6052
|
case "scanTo":
|
|
6058
|
-
return
|
|
6053
|
+
return [
|
|
6054
|
+
d.sentinel,
|
|
6055
|
+
...d.skip,
|
|
6056
|
+
...d.recoverAt === void 0 ? NO_EDGES : [d.recoverAt],
|
|
6057
|
+
...d.stopAt === void 0 ? NO_EDGES : [d.stopAt]
|
|
6058
|
+
];
|
|
6059
6059
|
case "lazy": {
|
|
6060
6060
|
try {
|
|
6061
|
-
return
|
|
6061
|
+
return [d.thunk()];
|
|
6062
6062
|
} catch {
|
|
6063
6063
|
const name = p._ruleName;
|
|
6064
6064
|
const target = name === void 0 ? void 0 : resolve?.(name);
|
|
6065
|
-
return target === void 0 ? true :
|
|
6065
|
+
return target === void 0 ? true : [target];
|
|
6066
6066
|
}
|
|
6067
6067
|
}
|
|
6068
|
-
case "unknown":
|
|
6069
|
-
return true;
|
|
6070
6068
|
default:
|
|
6071
|
-
return
|
|
6069
|
+
return NO_EDGES;
|
|
6072
6070
|
}
|
|
6073
6071
|
}
|
|
6072
|
+
function reachesMarked(root, successors, memo) {
|
|
6073
|
+
const known = memo.get(root);
|
|
6074
|
+
if (known !== void 0) return known;
|
|
6075
|
+
const order = /* @__PURE__ */ new Map();
|
|
6076
|
+
const low = [];
|
|
6077
|
+
const found = [];
|
|
6078
|
+
const stack = [];
|
|
6079
|
+
const visit = (node2) => {
|
|
6080
|
+
const at = low.length;
|
|
6081
|
+
order.set(node2, at);
|
|
6082
|
+
low.push(at);
|
|
6083
|
+
found.push(false);
|
|
6084
|
+
stack.push(node2);
|
|
6085
|
+
const next = successors(node2);
|
|
6086
|
+
if (next === true) found[at] = true;
|
|
6087
|
+
else {
|
|
6088
|
+
for (const child of next) {
|
|
6089
|
+
if (found[at]) break;
|
|
6090
|
+
const hit = memo.get(child);
|
|
6091
|
+
if (hit !== void 0) {
|
|
6092
|
+
if (hit) found[at] = true;
|
|
6093
|
+
continue;
|
|
6094
|
+
}
|
|
6095
|
+
const seen = order.get(child);
|
|
6096
|
+
if (seen !== void 0) {
|
|
6097
|
+
if (seen < low[at]) low[at] = seen;
|
|
6098
|
+
continue;
|
|
6099
|
+
}
|
|
6100
|
+
const k = visit(child);
|
|
6101
|
+
if (low[k] < low[at]) low[at] = low[k];
|
|
6102
|
+
if (found[k]) found[at] = true;
|
|
6103
|
+
}
|
|
6104
|
+
}
|
|
6105
|
+
if (low[at] === at) {
|
|
6106
|
+
const answer = found[at];
|
|
6107
|
+
let member;
|
|
6108
|
+
do {
|
|
6109
|
+
member = stack.pop();
|
|
6110
|
+
memo.set(member, answer);
|
|
6111
|
+
} while (member !== node2);
|
|
6112
|
+
}
|
|
6113
|
+
return at;
|
|
6114
|
+
};
|
|
6115
|
+
return found[visit(root)];
|
|
6116
|
+
}
|
|
6074
6117
|
function hasSemanticReduction(roots, externalRefs) {
|
|
6075
6118
|
const seen = /* @__PURE__ */ new Set();
|
|
6076
6119
|
const visit = (parser2) => {
|
|
@@ -7266,6 +7309,13 @@ var Encoder = class {
|
|
|
7266
7309
|
* attempt sites reach it.
|
|
7267
7310
|
*/
|
|
7268
7311
|
sideWriterMemo = /* @__PURE__ */ new Map();
|
|
7312
|
+
/**
|
|
7313
|
+
* `mayCommitFailure`'s answers, shared by every choice site for the lifetime
|
|
7314
|
+
* of this `Encoder` — exact for the graph and the `winners` resolver it is
|
|
7315
|
+
* encoding, so the rule graph is walked once per encode rather than once per
|
|
7316
|
+
* choice site.
|
|
7317
|
+
*/
|
|
7318
|
+
commitFailureMemo = /* @__PURE__ */ new Map();
|
|
7269
7319
|
labels = void 0;
|
|
7270
7320
|
/** Trivia table in scope at the row being encoded — codegen's `ctx.activeTrivia`. */
|
|
7271
7321
|
activeTrivia = void 0;
|
|
@@ -7706,62 +7756,11 @@ var Encoder = class {
|
|
|
7706
7756
|
}
|
|
7707
7757
|
/**
|
|
7708
7758
|
* Whether a field, recovered error, interpreted scanner or unresolvable shape
|
|
7709
|
-
* is reachable from `root` — the writer census of `failureNeedsRollback
|
|
7710
|
-
*
|
|
7711
|
-
* Reachability over a cyclic graph, decided with Tarjan's strongly connected
|
|
7712
|
-
* components so that every node the walk enters leaves with its exact answer
|
|
7713
|
-
* memoized: the members of one component reach each other, so they share one
|
|
7714
|
-
* answer, settled when the walk returns to the component's first node. A DFS
|
|
7715
|
-
* that instead cuts a cycle at its own ancestor path learns nothing it can
|
|
7716
|
-
* keep about a node whose walk hit the cut, and re-walks that node along
|
|
7717
|
-
* every path that reaches it — exponential over recursive value rules (linking
|
|
7718
|
-
* jess's SCSS grammar cost ~290G instructions). This walk enters each node
|
|
7719
|
-
* once per `Encoder`.
|
|
7759
|
+
* is reachable from `root` — the writer census of `failureNeedsRollback`,
|
|
7760
|
+
* entering each combinator once per `Encoder` (see `reachesMarked`).
|
|
7720
7761
|
*/
|
|
7721
7762
|
reachesSideWriter(root) {
|
|
7722
|
-
|
|
7723
|
-
const known = memo.get(root);
|
|
7724
|
-
if (known !== void 0) return known;
|
|
7725
|
-
const order = /* @__PURE__ */ new Map();
|
|
7726
|
-
const low = [];
|
|
7727
|
-
const found = [];
|
|
7728
|
-
const stack = [];
|
|
7729
|
-
const visit = (node2) => {
|
|
7730
|
-
const at = low.length;
|
|
7731
|
-
order.set(node2, at);
|
|
7732
|
-
low.push(at);
|
|
7733
|
-
found.push(false);
|
|
7734
|
-
stack.push(node2);
|
|
7735
|
-
const next = this.sideWriterSuccessors(node2);
|
|
7736
|
-
if (next === true) found[at] = true;
|
|
7737
|
-
else {
|
|
7738
|
-
for (const child of next) {
|
|
7739
|
-
const hit = memo.get(child);
|
|
7740
|
-
if (hit !== void 0) {
|
|
7741
|
-
if (hit) found[at] = true;
|
|
7742
|
-
continue;
|
|
7743
|
-
}
|
|
7744
|
-
const seen = order.get(child);
|
|
7745
|
-
if (seen !== void 0) {
|
|
7746
|
-
if (seen < low[at]) low[at] = seen;
|
|
7747
|
-
continue;
|
|
7748
|
-
}
|
|
7749
|
-
const k = visit(child);
|
|
7750
|
-
if (low[k] < low[at]) low[at] = low[k];
|
|
7751
|
-
if (found[k]) found[at] = true;
|
|
7752
|
-
}
|
|
7753
|
-
}
|
|
7754
|
-
if (low[at] === at) {
|
|
7755
|
-
const answer = found[at];
|
|
7756
|
-
let member;
|
|
7757
|
-
do {
|
|
7758
|
-
member = stack.pop();
|
|
7759
|
-
memo.set(member, answer);
|
|
7760
|
-
} while (member !== node2);
|
|
7761
|
-
}
|
|
7762
|
-
return at;
|
|
7763
|
-
};
|
|
7764
|
-
return found[visit(root)];
|
|
7763
|
+
return reachesMarked(root, (node2) => this.sideWriterSuccessors(node2), this.sideWriterMemo);
|
|
7765
7764
|
}
|
|
7766
7765
|
/** The census's edges out of `node`, or `true` when `node` is itself a writer. */
|
|
7767
7766
|
sideWriterSuccessors(node2) {
|
|
@@ -8116,7 +8115,7 @@ var Encoder = class {
|
|
|
8116
8115
|
this.code[head + 4 + kids.length + i] = this.expected(deriveExpected(arms[i]));
|
|
8117
8116
|
}
|
|
8118
8117
|
this.choiceRollbackMasks.set(head, rollbackMask);
|
|
8119
|
-
if (arms.every((arm) => !mayCommitFailure(arm,
|
|
8118
|
+
if (arms.every((arm) => !mayCommitFailure(arm, rr, this.commitFailureMemo))) {
|
|
8120
8119
|
this.nonCommittingChoiceSites.add(head);
|
|
8121
8120
|
}
|
|
8122
8121
|
return head;
|
|
@@ -17766,7 +17765,7 @@ function fieldOptionsSrc(def) {
|
|
|
17766
17765
|
}
|
|
17767
17766
|
|
|
17768
17767
|
// src/version.ts
|
|
17769
|
-
var PARSEMAN_VERSION = "0.55.
|
|
17768
|
+
var PARSEMAN_VERSION = "0.55.3";
|
|
17770
17769
|
|
|
17771
17770
|
// src/compiler/compile-linkable-table.ts
|
|
17772
17771
|
function isLocal(rule) {
|