parseman 0.61.5 → 0.61.7
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.js +109 -29
- package/dist/analysis/diagnostics.js.map +2 -2
- package/dist/cli/index.js +109 -29
- package/dist/cli/index.js.map +2 -2
- package/dist/combinators/expect.d.ts.map +1 -1
- package/dist/combinators/first-set.d.ts +3 -1
- package/dist/combinators/first-set.d.ts.map +1 -1
- package/dist/compiler/token-capability.js +14 -10
- package/dist/compiler/token-capability.js.map +1 -1
- package/dist/index.js +166 -45
- package/dist/index.js.map +2 -2
- package/dist/plugin/entry-supercompiler.d.ts +15 -0
- package/dist/plugin/entry-supercompiler.d.ts.map +1 -1
- package/dist/plugin/index.js +256 -46
- package/dist/plugin/index.js.map +2 -2
- package/dist/table/assemble.d.ts.map +1 -1
- package/dist/table/emit-assembly.d.ts.map +1 -1
- package/dist/table/hold-gap.d.ts +3 -1
- package/dist/table/hold-gap.d.ts.map +1 -1
- package/dist/table/index.js +166 -45
- package/dist/table/index.js.map +2 -2
- package/dist/table/select-hot.d.ts +9 -0
- package/dist/table/select-hot.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/combinators/expect.ts +3 -2
- package/src/combinators/first-set.ts +14 -7
- package/src/combinators/sequence.ts +1 -1
- package/src/plugin/entry-supercompiler.ts +110 -1
- package/src/table/assemble.ts +38 -0
- package/src/table/emit-assembly.ts +42 -5
- package/src/table/encode.ts +1 -1
- package/src/table/hold-gap.ts +22 -13
- package/src/table/select-hot.ts +96 -24
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../../src/table/assemble.ts"],"names":[],"mappings":"AAmEA,OAAO,KAAK,EAAE,UAAU,EAAsB,YAAY,EAA0B,MAAM,aAAa,CAAA;AAkDvG;;;;;;;;;;;;GAYG;AACH,OAAO,EAGL,KAAK,cAAc,EAAsB,KAAK,aAAa,EAC1C,KAAK,YAAY,EAAE,KAAK,SAAS,EACnD,MAAM,cAAc,CAAA;AA4ErB;;;;;;;;;;;;;GAaG;AACH,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAA;AAgDvE;;;;;;;;GAQG;AACH,MAAM,MAAM,MAAM,GAAG;IACnB,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAA;IACpE,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CACnC,CAAA;AAoBD,+CAA+C;AAC/C,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAA;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAA;IAC3C,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAA;IAC9D;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACrC;;;;;;;;OAQG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;CACzC,CAAA;AAED;;;;;GAKG;AACH;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASzE;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../../src/table/assemble.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-assembly.d.ts","sourceRoot":"","sources":["../../src/table/emit-assembly.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAS/C,OAAO,EAEL,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAC1D,MAAM,cAAc,CAAA;AAsBrB,6EAA6E;AAC7E,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAA;AACrF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAC7C,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC,CAAA;IACvD,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAA;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,KAAK,IAAI,CAAA;IAClG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;CACxC,CAAA;AACD,gFAAgF;AAChF,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,EAAE,SAAS,OAAO,EAAE,KAAK,eAAe,CAAA;AAE7E,iFAAiF;AACjF,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,YAAY,SAAS,EAAE,MAAM,EAI5B;CACF;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,YACzB,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAC5E,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EACxE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,QAAQ,EAC1G,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAC3E,qBAAqB,EAAE,cAAc,EAAE,mBAAmB,EAAE,2BAA2B,EACvF,eAAe,EAAE,6BAA6B,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAC/E,cAAc,EAAE,WAAW,EAO3B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAGjE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAEhC,SAAS,EAET,MAAM,EAAE,oBAAoB,EAE5B,oBAAoB,EAEpB,eAAe,EAAE,aAAa,EAG9B,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAElC,KAAK,CAIG,CAAA;
|
|
1
|
+
{"version":3,"file":"emit-assembly.d.ts","sourceRoot":"","sources":["../../src/table/emit-assembly.ts"],"names":[],"mappings":"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"}
|
package/dist/table/hold-gap.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Can the row at `ip` match empty? `true` wherever it cannot tell. A first-set
|
|
3
3
|
* gate row wraps only a child that cannot (`encode.ts` gates nothing nullable).
|
|
4
|
+
* An `expect` recovers at zero width whatever its child needs; with `recovers`
|
|
5
|
+
* false, this asks what the row can match empty without recovering.
|
|
4
6
|
*/
|
|
5
|
-
export declare function rowNullable(code: ArrayLike<number>, k: readonly unknown[], ip: number, memo: Map<number, boolean
|
|
7
|
+
export declare function rowNullable(code: ArrayLike<number>, k: readonly unknown[], ip: number, memo: Map<number, boolean>, recovers?: boolean): boolean;
|
|
6
8
|
/** Term `i` of the sequence at `seq` (terms from `base`, `n` of them) holds its gap. */
|
|
7
9
|
export declare function holdsGap(code: ArrayLike<number>, k: readonly unknown[], base: number, n: number, i: number, memo: Map<number, boolean>): boolean;
|
|
8
10
|
//# sourceMappingURL=hold-gap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hold-gap.d.ts","sourceRoot":"","sources":["../../src/table/hold-gap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hold-gap.d.ts","sourceRoot":"","sources":["../../src/table/hold-gap.ts"],"names":[],"mappings":"AAgCA;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,UAAO,GACtG,OAAO,CA4BT;AAED,wFAAwF;AACxF,wBAAgB,QAAQ,CACtB,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7G,OAAO,CAOT"}
|
package/dist/table/index.js
CHANGED
|
@@ -198,8 +198,9 @@ function matchesEmptyBody(p, seen, resolve) {
|
|
|
198
198
|
case "optional":
|
|
199
199
|
case "not":
|
|
200
200
|
case "peek":
|
|
201
|
+
case "expect":
|
|
201
202
|
return true;
|
|
202
|
-
// zero repetitions / absent / lookahead
|
|
203
|
+
// zero repetitions / absent / lookahead / recovered
|
|
203
204
|
// Default `sepBy` is `(item (sep item)*)?` — it MATCHES THE EMPTY STRING.
|
|
204
205
|
// Any `min >= 1` requires that many ITEMS, so it is nullable only when the
|
|
205
206
|
// item is. (Keying this off `min === 1` reported every `{ min: 2 }` list as
|
|
@@ -220,7 +221,6 @@ function matchesEmptyBody(p, seen, resolve) {
|
|
|
220
221
|
case "trivia":
|
|
221
222
|
case "token":
|
|
222
223
|
case "leaf":
|
|
223
|
-
case "expect":
|
|
224
224
|
case "withCtx":
|
|
225
225
|
case "node":
|
|
226
226
|
case "grammar":
|
|
@@ -290,17 +290,17 @@ function sequenceSet(parsers, fs, empties, trivia2, consuming = true) {
|
|
|
290
290
|
function sequenceFirstSet(parsers) {
|
|
291
291
|
return sequenceSet(parsers, (p) => p._meta.firstSet, matchesEmpty, void 0, false);
|
|
292
292
|
}
|
|
293
|
-
function firstSetOf(p, seen = /* @__PURE__ */ new Set(), resolve, activeTrivia, consuming = true) {
|
|
293
|
+
function firstSetOf(p, seen = /* @__PURE__ */ new Set(), resolve, activeTrivia, consuming = true, follow = false) {
|
|
294
294
|
if (seen.has(p)) return any();
|
|
295
295
|
seen.add(p);
|
|
296
296
|
try {
|
|
297
|
-
return firstSetBody(p, seen, resolve, activeTrivia, consuming);
|
|
297
|
+
return firstSetBody(p, seen, resolve, activeTrivia, consuming, follow);
|
|
298
298
|
} finally {
|
|
299
299
|
seen.delete(p);
|
|
300
300
|
}
|
|
301
301
|
}
|
|
302
|
-
function firstSetBody(p, seen, resolve, activeTrivia, consuming) {
|
|
303
|
-
const fs = (c) => firstSetOf(c, seen, resolve, activeTrivia, consuming);
|
|
302
|
+
function firstSetBody(p, seen, resolve, activeTrivia, consuming, follow) {
|
|
303
|
+
const fs = (c) => firstSetOf(c, seen, resolve, activeTrivia, consuming, follow);
|
|
304
304
|
const empties = (c) => matchesEmpty(c, /* @__PURE__ */ new Set(), resolve);
|
|
305
305
|
const d = p._def;
|
|
306
306
|
switch (d.tag) {
|
|
@@ -321,7 +321,7 @@ function firstSetBody(p, seen, resolve, activeTrivia, consuming) {
|
|
|
321
321
|
}
|
|
322
322
|
}
|
|
323
323
|
const through = activeTrivia === null && resolve !== void 0;
|
|
324
|
-
return firstSetOf(target, seen, resolve, through ? triviaThroughRef(p, target, null) : activeTrivia, consuming);
|
|
324
|
+
return firstSetOf(target, seen, resolve, through ? triviaThroughRef(p, target, null) : activeTrivia, consuming, follow);
|
|
325
325
|
}
|
|
326
326
|
case "choice": {
|
|
327
327
|
let out = empty();
|
|
@@ -331,6 +331,10 @@ function firstSetBody(p, seen, resolve, activeTrivia, consuming) {
|
|
|
331
331
|
case "sequence": {
|
|
332
332
|
return sequenceSet(d.parsers, fs, empties, activeTrivia, consuming);
|
|
333
333
|
}
|
|
334
|
+
// Runs on any character: on one its child can't start, it reports the error. A
|
|
335
|
+
// resync sentinel still stops where the child could start.
|
|
336
|
+
case "expect":
|
|
337
|
+
return follow ? fs(d.parser) : any();
|
|
334
338
|
case "peek": {
|
|
335
339
|
const inner = d.parser;
|
|
336
340
|
return empties(inner) ? any() : fs(inner);
|
|
@@ -344,7 +348,6 @@ function firstSetBody(p, seen, resolve, activeTrivia, consuming) {
|
|
|
344
348
|
case "leaf":
|
|
345
349
|
case "node":
|
|
346
350
|
case "sepBy":
|
|
347
|
-
case "expect":
|
|
348
351
|
// A transaction accepts exactly what its inner accepts. Its own `_meta` is
|
|
349
352
|
// the inner's construction-time set, which reads `any` when the inner opens
|
|
350
353
|
// with a rule reference — resolve through it like any other wrapper.
|
|
@@ -352,14 +355,15 @@ function firstSetBody(p, seen, resolve, activeTrivia, consuming) {
|
|
|
352
355
|
return fs(d.parser);
|
|
353
356
|
// A token runs its body with trivia cleared (`token.ts`).
|
|
354
357
|
case "token":
|
|
355
|
-
return firstSetOf(d.parser, seen, resolve, activeTrivia === void 0 ? void 0 : null, consuming);
|
|
358
|
+
return firstSetOf(d.parser, seen, resolve, activeTrivia === void 0 ? void 0 : null, consuming, follow);
|
|
356
359
|
case "grammar":
|
|
357
360
|
return firstSetOf(
|
|
358
361
|
d.parser,
|
|
359
362
|
seen,
|
|
360
363
|
resolve,
|
|
361
364
|
d.clearTrivia ? null : d.triviaParser ?? activeTrivia,
|
|
362
|
-
consuming
|
|
365
|
+
consuming,
|
|
366
|
+
follow
|
|
363
367
|
);
|
|
364
368
|
// A run starts with its first line's prefix; a nullable prefix starts with anything.
|
|
365
369
|
case "lines": {
|
|
@@ -1833,7 +1837,8 @@ function derive(c, seen) {
|
|
|
1833
1837
|
function expect(combinator, label2) {
|
|
1834
1838
|
const expected = label2 !== void 0 ? [label2] : deriveExpected(combinator);
|
|
1835
1839
|
const meta = {
|
|
1836
|
-
|
|
1840
|
+
// It runs on any character: on one its child can't start, it reports the error.
|
|
1841
|
+
firstSet: any(),
|
|
1837
1842
|
canMatchNewline: combinator._meta.canMatchNewline,
|
|
1838
1843
|
isTrivia: false
|
|
1839
1844
|
};
|
|
@@ -3636,7 +3641,7 @@ function regex(pattern, flags = "") {
|
|
|
3636
3641
|
}
|
|
3637
3642
|
|
|
3638
3643
|
// src/version.ts
|
|
3639
|
-
var PARSEMAN_VERSION = "0.61.
|
|
3644
|
+
var PARSEMAN_VERSION = "0.61.7";
|
|
3640
3645
|
|
|
3641
3646
|
// src/table/lex-body.ts
|
|
3642
3647
|
function buildLexBodyRecognizer(spec, constants) {
|
|
@@ -4776,7 +4781,7 @@ function sequence(...parsers) {
|
|
|
4776
4781
|
if (tolerant) {
|
|
4777
4782
|
followSentinels ??= parsers.map((_, i) => firstSetSentinel(
|
|
4778
4783
|
parsers.slice(i + 1).reduce(
|
|
4779
|
-
(set, parser2) => union(set, firstSetOf(parser2, /* @__PURE__ */ new Set(), void 0, void 0, false)),
|
|
4784
|
+
(set, parser2) => union(set, firstSetOf(parser2, /* @__PURE__ */ new Set(), void 0, void 0, false, true)),
|
|
4780
4785
|
{ kind: "empty" }
|
|
4781
4786
|
)
|
|
4782
4787
|
));
|
|
@@ -7427,17 +7432,17 @@ var WRAPPERS = /* @__PURE__ */ new Set([
|
|
|
7427
7432
|
OP_SCOPE_PLAIN,
|
|
7428
7433
|
OP_FIELD,
|
|
7429
7434
|
OP_LABEL,
|
|
7430
|
-
OP_EXPECT,
|
|
7431
7435
|
OP_WITHCTX,
|
|
7432
7436
|
OP_RULE,
|
|
7433
7437
|
OP_ATTEMPT,
|
|
7434
7438
|
OP_COV,
|
|
7435
7439
|
OP_GAPGATE
|
|
7436
7440
|
]);
|
|
7437
|
-
function rowNullable(code, k, ip, memo) {
|
|
7438
|
-
const
|
|
7441
|
+
function rowNullable(code, k, ip, memo, recovers = true) {
|
|
7442
|
+
const key = recovers ? ip : ~ip;
|
|
7443
|
+
const hit = memo.get(key);
|
|
7439
7444
|
if (hit !== void 0) return hit;
|
|
7440
|
-
memo.set(
|
|
7445
|
+
memo.set(key, true);
|
|
7441
7446
|
const op = code[ip];
|
|
7442
7447
|
const kids = [];
|
|
7443
7448
|
let out = true;
|
|
@@ -7448,20 +7453,20 @@ function rowNullable(code, k, ip, memo) {
|
|
|
7448
7453
|
out = !(re instanceof RegExp) || regexCanMatchEmpty(re.source);
|
|
7449
7454
|
} else if (op === OP_SEQ || op === OP_SEQV || op === OP_SEQX) {
|
|
7450
7455
|
childSlots(code, ip, kids);
|
|
7451
|
-
out = kids.every((c) => rowNullable(code, k, c, memo));
|
|
7456
|
+
out = kids.every((c) => rowNullable(code, k, c, memo, recovers));
|
|
7452
7457
|
} else if (op === OP_CHOICE) {
|
|
7453
7458
|
childSlots(code, ip, kids);
|
|
7454
|
-
out = kids.length === 0 || kids.some((c) => rowNullable(code, k, c, memo));
|
|
7459
|
+
out = kids.length === 0 || kids.some((c) => rowNullable(code, k, c, memo, recovers));
|
|
7455
7460
|
} else if (op === OP_REP || op === OP_REPV) {
|
|
7456
|
-
out = code[ip + 2] === 0 || rowNullable(code, k, code[ip + 1], memo);
|
|
7461
|
+
out = code[ip + 2] === 0 || rowNullable(code, k, code[ip + 1], memo, recovers);
|
|
7457
7462
|
} else if (op === OP_SEED) {
|
|
7458
|
-
out = rowNullable(code, k, code[ip + 1], memo);
|
|
7463
|
+
out = rowNullable(code, k, code[ip + 1], memo, recovers);
|
|
7459
7464
|
} else if (op === OP_CONT) {
|
|
7460
|
-
out = rowNullable(code, k, code[ip + 1], memo) && rowNullable(code, k, code[ip + 3], memo);
|
|
7461
|
-
} else if (WRAPPERS.has(op)) {
|
|
7462
|
-
if (childSlots(code, ip, kids) && kids.length === 1) out = rowNullable(code, k, kids[0], memo);
|
|
7465
|
+
out = rowNullable(code, k, code[ip + 1], memo, recovers) && rowNullable(code, k, code[ip + 3], memo, recovers);
|
|
7466
|
+
} else if (WRAPPERS.has(op) || op === OP_EXPECT && !recovers) {
|
|
7467
|
+
if (childSlots(code, ip, kids) && kids.length === 1) out = rowNullable(code, k, kids[0], memo, recovers);
|
|
7463
7468
|
}
|
|
7464
|
-
memo.set(
|
|
7469
|
+
memo.set(key, out);
|
|
7465
7470
|
return out;
|
|
7466
7471
|
}
|
|
7467
7472
|
function holdsGap(code, k, base, n, i, memo) {
|
|
@@ -7470,7 +7475,7 @@ function holdsGap(code, k, base, n, i, memo) {
|
|
|
7470
7475
|
if (code[term] !== OP_NOT && code[term] !== OP_PEEK) return false;
|
|
7471
7476
|
const next = code[base + i + 1];
|
|
7472
7477
|
if (code[next] === OP_ADJ || leadingTriviaFieldAt(code, k, next)) return false;
|
|
7473
|
-
return !rowNullable(code, k, next, memo);
|
|
7478
|
+
return !rowNullable(code, k, next, memo, false);
|
|
7474
7479
|
}
|
|
7475
7480
|
|
|
7476
7481
|
// src/table/gap-gate.ts
|
|
@@ -7792,11 +7797,35 @@ ${fast}
|
|
|
7792
7797
|
${scanned}
|
|
7793
7798
|
}`;
|
|
7794
7799
|
}
|
|
7795
|
-
|
|
7800
|
+
var TRIVIA_LOG_LENGTH = "ctx._cstBuf!==undefined?(ctx._cstBuf.tl!==undefined?ctx._cstBuf.tl.length:0):(ctx._cstTriviaLog!==undefined?ctx._cstTriviaLog.length:0)";
|
|
7801
|
+
function emitHoldTerm(callee, dst, t, l, skip, recovers) {
|
|
7796
7802
|
const fast = `const ${t}v=${callee}(input,cur,ctx)
|
|
7797
7803
|
if(${t}v===FAIL)return FAIL
|
|
7798
7804
|
${dst}=${t}v
|
|
7799
7805
|
cur=EC.e`;
|
|
7806
|
+
if (recovers) {
|
|
7807
|
+
const marked = `let ${t}c=cur,${t}s=cur,${t}tl=0,${t}stl=0,${t}lg=0,${t}slg=0,${t}rt=0,${t}srt=0`;
|
|
7808
|
+
if (l.tri === TRI_NONE) return `${marked}
|
|
7809
|
+
${fast}`;
|
|
7810
|
+
const held2 = `${t}tl=${TRIVIA_LOG_LENGTH}
|
|
7811
|
+
${t}lg=ctx._triviaLog!==undefined?ctx._triviaLog.length:0
|
|
7812
|
+
${t}rt=ctx._rootTriviaLog!==undefined?ctx._rootTriviaLog.length:0
|
|
7813
|
+
${t}s=${skip}(input,cur,ctx)
|
|
7814
|
+
${t}stl=${TRIVIA_LOG_LENGTH}
|
|
7815
|
+
${t}slg=ctx._triviaLog!==undefined?ctx._triviaLog.length:0
|
|
7816
|
+
${t}srt=ctx._rootTriviaLog!==undefined?ctx._rootTriviaLog.length:0
|
|
7817
|
+
const ${t}v=${callee}(input,${t}s,ctx)
|
|
7818
|
+
if(${t}v===FAIL)return FAIL
|
|
7819
|
+
${dst}=${t}v
|
|
7820
|
+
cur=${t}s`;
|
|
7821
|
+
return l.tri !== TRI_UNKNOWN ? `${marked}
|
|
7822
|
+
${held2}` : `${marked}
|
|
7823
|
+
if(ctx.trivia===undefined){
|
|
7824
|
+
${fast}
|
|
7825
|
+
}else{
|
|
7826
|
+
${held2}
|
|
7827
|
+
}`;
|
|
7828
|
+
}
|
|
7800
7829
|
if (l.tri === TRI_NONE) return fast;
|
|
7801
7830
|
const held = `const ${t}s=${skip}(input,cur,ctx)
|
|
7802
7831
|
const ${t}v=${callee}(input,${t}s,ctx)
|
|
@@ -7810,6 +7839,9 @@ ${fast}
|
|
|
7810
7839
|
${held}
|
|
7811
7840
|
}`;
|
|
7812
7841
|
}
|
|
7842
|
+
function emitHeldGapUndo(t) {
|
|
7843
|
+
return `if(cur===${t}s&&${t}s!==${t}c){rollbackScannedTriviaAt(ctx,${t}tl,${t}stl,${t}lg,${t}slg,${t}rt,${t}srt);cur=${t}c}`;
|
|
7844
|
+
}
|
|
7813
7845
|
function leadSkip(hasTrivia, leadTrivia, skip) {
|
|
7814
7846
|
if (hasTrivia === "false") return "{}";
|
|
7815
7847
|
const call = `itemStart=${skip}(input,itemStart,ctx)`;
|
|
@@ -8818,6 +8850,7 @@ return v
|
|
|
8818
8850
|
}
|
|
8819
8851
|
parts.push("let cur=EC.e");
|
|
8820
8852
|
const names = ["v0"];
|
|
8853
|
+
let heldUndo;
|
|
8821
8854
|
for (let i = 1; i < n; i++) {
|
|
8822
8855
|
const vn = `v${i}`;
|
|
8823
8856
|
parts.push(`let ${vn}`);
|
|
@@ -8834,7 +8867,16 @@ return v
|
|
|
8834
8867
|
);
|
|
8835
8868
|
} else {
|
|
8836
8869
|
const callee = leadingTriviaFieldAt(code, k, childIp) ? `(LEAD.at=cur,${kids[i]})` : kids[i];
|
|
8837
|
-
|
|
8870
|
+
if (holdsGap(code, k, base, n, i, nullable2)) {
|
|
8871
|
+
const t2 = tmp();
|
|
8872
|
+
const recovers = rowNullable(code, k, code[base + i + 1], nullable2);
|
|
8873
|
+
parts.push(emitHoldTerm(callee, vn, t2, L, skipFor(L), recovers));
|
|
8874
|
+
heldUndo = recovers ? t2 : void 0;
|
|
8875
|
+
} else {
|
|
8876
|
+
parts.push(emitTerm(callee, vn, tmp(), L, skipFor(L), L.tri >= 0 ? triviaMiss(L.tri) : void 0));
|
|
8877
|
+
if (heldUndo !== void 0) parts.push(emitHeldGapUndo(heldUndo));
|
|
8878
|
+
heldUndo = void 0;
|
|
8879
|
+
}
|
|
8838
8880
|
}
|
|
8839
8881
|
names.push(vn);
|
|
8840
8882
|
}
|
|
@@ -11839,8 +11881,46 @@ function assemble(t, prog, cfg) {
|
|
|
11839
11881
|
}
|
|
11840
11882
|
if (hasAdj) {
|
|
11841
11883
|
const first2 = linkFirst();
|
|
11884
|
+
let heldFrom = 0, heldTl = 0, heldScanTl = 0, heldLog = 0, heldScanLog = 0, heldRoot = 0, heldScanRoot = 0;
|
|
11842
11885
|
const runnerAt = (i) => {
|
|
11843
11886
|
const kidIp = code[base + i];
|
|
11887
|
+
if (i > 1 && holdsGap(code, k, base, n, i - 1, NULLABLE) && rowNullable(code, k, kidIp, NULLABLE)) {
|
|
11888
|
+
const kid = link(kidIp);
|
|
11889
|
+
return (input, cur, ctx) => {
|
|
11890
|
+
const from = heldFrom, tl = heldTl, scanTl = heldScanTl, log = heldLog;
|
|
11891
|
+
const scanLog = heldScanLog, root = heldRoot, scanRoot = heldScanRoot;
|
|
11892
|
+
const next = step(kid, input, cur, ctx);
|
|
11893
|
+
if (next !== cur || from === cur) return next;
|
|
11894
|
+
rollbackScannedTriviaAt(ctx, tl, scanTl, log, scanLog, root, scanRoot);
|
|
11895
|
+
return from;
|
|
11896
|
+
};
|
|
11897
|
+
}
|
|
11898
|
+
if (holdsGap(code, k, base, n, i, NULLABLE) && rowNullable(code, k, code[base + i + 1], NULLABLE)) {
|
|
11899
|
+
const kid = link(kidIp);
|
|
11900
|
+
return (input, cur, ctx) => {
|
|
11901
|
+
if (ctx.trivia === void 0) {
|
|
11902
|
+
const v2 = kid(input, cur, ctx);
|
|
11903
|
+
if (v2 === FAIL) return -1;
|
|
11904
|
+
TERMV = v2;
|
|
11905
|
+
heldFrom = cur;
|
|
11906
|
+
return EC.e;
|
|
11907
|
+
}
|
|
11908
|
+
const tl = cstTlLen(ctx), log = ctx._triviaLog?.length ?? 0, root = ctx._rootTriviaLog?.length ?? 0;
|
|
11909
|
+
const scanEnd = skipTrivia(input, cur, ctx);
|
|
11910
|
+
const scanTl = cstTlLen(ctx), scanLog = ctx._triviaLog?.length ?? 0, scanRoot = ctx._rootTriviaLog?.length ?? 0;
|
|
11911
|
+
const v = kid(input, scanEnd, ctx);
|
|
11912
|
+
if (v === FAIL) return -1;
|
|
11913
|
+
TERMV = v;
|
|
11914
|
+
heldFrom = cur;
|
|
11915
|
+
heldTl = tl;
|
|
11916
|
+
heldScanTl = scanTl;
|
|
11917
|
+
heldLog = log;
|
|
11918
|
+
heldScanLog = scanLog;
|
|
11919
|
+
heldRoot = root;
|
|
11920
|
+
heldScanRoot = scanRoot;
|
|
11921
|
+
return scanEnd;
|
|
11922
|
+
};
|
|
11923
|
+
}
|
|
11844
11924
|
if (holdsGap(code, k, base, n, i, NULLABLE)) {
|
|
11845
11925
|
const kid = link(kidIp);
|
|
11846
11926
|
return (input, cur, ctx) => {
|
|
@@ -15446,7 +15526,7 @@ var Encoder = class {
|
|
|
15446
15526
|
let fs = { kind: "empty" };
|
|
15447
15527
|
const rr = this.refResolver();
|
|
15448
15528
|
for (let j = i + 1; j < parsers.length; j++) {
|
|
15449
|
-
fs = union(fs, firstSetOf(parsers[j], /* @__PURE__ */ new Set(), rr, void 0, false));
|
|
15529
|
+
fs = union(fs, firstSetOf(parsers[j], /* @__PURE__ */ new Set(), rr, void 0, false, true));
|
|
15450
15530
|
}
|
|
15451
15531
|
return this.charClass(fs);
|
|
15452
15532
|
}
|
|
@@ -18479,21 +18559,70 @@ function collectGrammarReflection(ruleMap, opts) {
|
|
|
18479
18559
|
var LOOP = 8;
|
|
18480
18560
|
var ROUNDS = 60;
|
|
18481
18561
|
var CAP = 1e12;
|
|
18562
|
+
var CROSSING_WEIGHT = 4;
|
|
18563
|
+
var TAKEN = -1;
|
|
18482
18564
|
function selectHotSites(code, entries, siteBytes, budget, profile) {
|
|
18483
18565
|
const selected = /* @__PURE__ */ new Set();
|
|
18484
18566
|
if (budget <= 0) return selected;
|
|
18485
|
-
const weight = profile === void 0 ? staticWeights(code, entries) : void 0;
|
|
18486
|
-
const w = (ip) => (weight !== void 0 ? weight.get(ip) : profile[ip]) ?? 0;
|
|
18487
|
-
const ranked = [...siteBytes.keys()].sort((a, b) => w(b) / siteBytes.get(b) - w(a) / siteBytes.get(a) || a - b);
|
|
18488
18567
|
let spent = 0;
|
|
18489
|
-
for (const ip of
|
|
18490
|
-
if (w(ip) === 0) break;
|
|
18568
|
+
for (const ip of profile === void 0 ? staticRanking(code, entries, siteBytes) : connectedRanking(code, siteBytes, profile)) {
|
|
18491
18569
|
spent += siteBytes.get(ip);
|
|
18492
18570
|
if (spent > budget) break;
|
|
18493
18571
|
selected.add(ip);
|
|
18494
18572
|
}
|
|
18495
18573
|
return selected;
|
|
18496
18574
|
}
|
|
18575
|
+
function edgesAsLowered(code, siteBytes, ip, out) {
|
|
18576
|
+
out.length = 0;
|
|
18577
|
+
if (code[ip] !== OP_CONT) childSlots(code, ip, out);
|
|
18578
|
+
else if (siteBytes.has(ip)) out.push(code[ip + 1], code[ip + 3]);
|
|
18579
|
+
else out.push(code[ip + 2]);
|
|
18580
|
+
for (let i = 0; i < out.length; i++) {
|
|
18581
|
+
let row = out[i];
|
|
18582
|
+
for (; ; ) {
|
|
18583
|
+
const op = code[row];
|
|
18584
|
+
if (op === OP_GAPGATE || op === OP_SEED) row = code[row + 1];
|
|
18585
|
+
else if (op === OP_CONT && !siteBytes.has(row)) row = code[row + 2];
|
|
18586
|
+
else break;
|
|
18587
|
+
}
|
|
18588
|
+
out[i] = row;
|
|
18589
|
+
}
|
|
18590
|
+
}
|
|
18591
|
+
function staticRanking(code, entries, siteBytes) {
|
|
18592
|
+
const weight = staticWeights(code, entries, siteBytes);
|
|
18593
|
+
const w = (ip) => weight.get(ip) ?? 0;
|
|
18594
|
+
return [...siteBytes.keys()].filter((ip) => w(ip) > 0).sort((a, b) => w(b) / siteBytes.get(b) - w(a) / siteBytes.get(a) || a - b);
|
|
18595
|
+
}
|
|
18596
|
+
function* connectedRanking(code, siteBytes, calls) {
|
|
18597
|
+
const ran = [...siteBytes.keys()].filter((ip) => calls[ip] > 0).sort((a, b) => a - b);
|
|
18598
|
+
const slot = new Map(ran.map((ip, i) => [ip, i]));
|
|
18599
|
+
const bytes = ran.map((ip) => siteBytes.get(ip));
|
|
18600
|
+
const worth = ran.map((ip) => calls[ip]);
|
|
18601
|
+
const score = worth.map((value, i) => value / bytes[i]);
|
|
18602
|
+
const crossings = ran.map(() => []);
|
|
18603
|
+
const kids = [];
|
|
18604
|
+
ran.forEach((ip, from) => {
|
|
18605
|
+
edgesAsLowered(code, siteBytes, ip, kids);
|
|
18606
|
+
for (const callee of kids) {
|
|
18607
|
+
const to = slot.get(callee);
|
|
18608
|
+
if (to === void 0) continue;
|
|
18609
|
+
const gain = CROSSING_WEIGHT * calls[callee];
|
|
18610
|
+
crossings[from].push([to, gain]);
|
|
18611
|
+
crossings[to].push([from, gain]);
|
|
18612
|
+
}
|
|
18613
|
+
});
|
|
18614
|
+
for (let left = ran.length; left > 0; left--) {
|
|
18615
|
+
let best = 0;
|
|
18616
|
+
for (let i = 1; i < score.length; i++) if (score[i] > score[best]) best = i;
|
|
18617
|
+
score[best] = TAKEN;
|
|
18618
|
+
yield ran[best];
|
|
18619
|
+
for (const [neighbour, gain] of crossings[best]) {
|
|
18620
|
+
if (score[neighbour] === TAKEN) continue;
|
|
18621
|
+
worth[neighbour] = worth[neighbour] + gain;
|
|
18622
|
+
score[neighbour] = worth[neighbour] / bytes[neighbour];
|
|
18623
|
+
}
|
|
18624
|
+
}
|
|
18625
|
+
}
|
|
18497
18626
|
function fitHotSites(code, entries, siteBytes, fixed, ceiling, sourceBytes, profile) {
|
|
18498
18627
|
const ranked = [...selectHotSites(code, entries, siteBytes, ceiling - fixed, profile)];
|
|
18499
18628
|
for (; ranked.length > 0; ranked.pop()) {
|
|
@@ -18503,25 +18632,17 @@ function fitHotSites(code, entries, siteBytes, fixed, ceiling, sourceBytes, prof
|
|
|
18503
18632
|
}
|
|
18504
18633
|
return void 0;
|
|
18505
18634
|
}
|
|
18506
|
-
function staticWeights(code, entries) {
|
|
18635
|
+
function staticWeights(code, entries, siteBytes) {
|
|
18507
18636
|
let weight = /* @__PURE__ */ new Map();
|
|
18508
18637
|
const kids = [];
|
|
18509
18638
|
for (let round = 0; round < ROUNDS; round++) {
|
|
18510
18639
|
const next = /* @__PURE__ */ new Map();
|
|
18511
18640
|
for (const ip of entries) next.set(ip, 1);
|
|
18512
18641
|
for (const [ip, w] of weight) {
|
|
18513
|
-
|
|
18514
|
-
childSlots(code, ip, kids);
|
|
18642
|
+
edgesAsLowered(code, siteBytes, ip, kids);
|
|
18515
18643
|
const op = code[ip];
|
|
18516
|
-
if (op === OP_CONT && continuationGate(code, code[ip + 3]) !== void 0) {
|
|
18517
|
-
kids.length = 0;
|
|
18518
|
-
kids.push(code[ip + 1], code[ip + 3]);
|
|
18519
|
-
}
|
|
18520
18644
|
const scale = op === OP_REP || op === OP_REPV ? LOOP : op === OP_CHOICE || op === OP_DISPATCH ? 1 / Math.max(1, kids.length) : 1;
|
|
18521
|
-
for (const
|
|
18522
|
-
const kid = code[k] === OP_GAPGATE ? code[k + 1] : k;
|
|
18523
|
-
next.set(kid, Math.min(CAP, (next.get(kid) ?? 0) + w * scale));
|
|
18524
|
-
}
|
|
18645
|
+
for (const kid of kids) next.set(kid, Math.min(CAP, (next.get(kid) ?? 0) + w * scale));
|
|
18525
18646
|
}
|
|
18526
18647
|
weight = next;
|
|
18527
18648
|
}
|