parseman 0.60.3 → 0.60.4
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 +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/compiler/ir-serialize.d.ts +3 -1
- package/dist/compiler/ir-serialize.d.ts.map +1 -1
- package/dist/compiler/linker.d.ts +10 -0
- package/dist/compiler/linker.d.ts.map +1 -1
- package/dist/index.js +28 -15
- package/dist/index.js.map +1 -1
- package/dist/plugin/evaluator.d.ts +8 -0
- package/dist/plugin/evaluator.d.ts.map +1 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +91 -17
- package/dist/plugin/index.js.map +2 -2
- package/dist/table/index.js +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/compiler/ir-serialize.ts +14 -3
- package/src/compiler/linker.ts +28 -12
- package/src/plugin/evaluator.ts +11 -0
- package/src/plugin/index.ts +29 -11
- package/src/version.ts +1 -1
|
@@ -13270,7 +13270,7 @@ function clearOf(ranges, input, from, to) {
|
|
|
13270
13270
|
}
|
|
13271
13271
|
|
|
13272
13272
|
// src/version.ts
|
|
13273
|
-
var PARSEMAN_VERSION = "0.60.
|
|
13273
|
+
var PARSEMAN_VERSION = "0.60.4";
|
|
13274
13274
|
|
|
13275
13275
|
// src/table/assemble.ts
|
|
13276
13276
|
import { PlainBuf as PlainBuf2, PlainField, PlainLeaf as PlainLeaf9, PlainNode as PlainNode2, PlainSpan as PlainSpan10 } from "../cst/plain.js";
|
package/dist/cli/index.js
CHANGED
|
@@ -13415,7 +13415,7 @@ function clearOf(ranges, input, from, to) {
|
|
|
13415
13415
|
}
|
|
13416
13416
|
|
|
13417
13417
|
// src/version.ts
|
|
13418
|
-
var PARSEMAN_VERSION = "0.60.
|
|
13418
|
+
var PARSEMAN_VERSION = "0.60.4";
|
|
13419
13419
|
|
|
13420
13420
|
// src/table/assemble.ts
|
|
13421
13421
|
import { PlainBuf as PlainBuf2, PlainField, PlainLeaf as PlainLeaf9, PlainNode as PlainNode2, PlainSpan as PlainSpan10 } from "../cst/plain.js";
|
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import type { Combinator } from '../types.ts';
|
|
21
21
|
type Comb = Combinator<unknown>;
|
|
22
|
-
export declare function serializeRuleMap(ruleMap: ReadonlyArray<readonly [string, Comb]>, scanSkip?: readonly Comb[] | null
|
|
22
|
+
export declare function serializeRuleMap(ruleMap: ReadonlyArray<readonly [string, Comb]>, scanSkip?: readonly Comb[] | null,
|
|
23
|
+
/** External names the factory read through `g`; any no rule body reaches is kept as `void g[name]`. */
|
|
24
|
+
accessed?: readonly string[]): string | null;
|
|
23
25
|
/**
|
|
24
26
|
* ONE plain combinator as IR — what a compiled module carries on an exported terminal
|
|
25
27
|
* so another module can import it into a grammar (the macro evaluates grammars, and a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ir-serialize.d.ts","sourceRoot":"","sources":["../../src/compiler/ir-serialize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAkC,MAAM,aAAa,CAAA;AAuB7E,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;AAwG/B,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAC/C,QAAQ,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"ir-serialize.d.ts","sourceRoot":"","sources":["../../src/compiler/ir-serialize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAkC,MAAM,aAAa,CAAA;AAuB7E,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;AAwG/B,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAC/C,QAAQ,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI;AACjC,uGAAuG;AACvG,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAC3B,MAAM,GAAG,IAAI,CAWf;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAE1D"}
|
|
@@ -101,6 +101,16 @@ export declare function composedCoverageRules(grammar: Record<string, unknown>):
|
|
|
101
101
|
* Lets a coverage run over ONE composed rule name its choices exactly as
|
|
102
102
|
* `composedGrammarCoverageDefinitions` does. INTERNAL: coverage tooling only. */
|
|
103
103
|
export declare function linkedWinnersOf(rule: Combinator<unknown>): Record<string, Combinator<unknown>> | undefined;
|
|
104
|
+
/**
|
|
105
|
+
* The reason a linked map is incomplete, or `undefined` when every `g.X` some piece
|
|
106
|
+
* reads is defined by some piece. A linked namespace holds every name a factory
|
|
107
|
+
* merely ACCESSED, so a name nobody defines is a slot that stays undefined. Runtime
|
|
108
|
+
* `compose()` and the macro's build-time fuse both refuse it with these words, naming
|
|
109
|
+
* the rule that reaches the hole when one does.
|
|
110
|
+
*/
|
|
111
|
+
export declare function danglingReference(map: Record<string, Combinator<unknown>>,
|
|
112
|
+
/** Names read through `g` that `map` itself does not hold (a merge-by-name fuse drops them). */
|
|
113
|
+
accessed?: Iterable<string>): string | undefined;
|
|
104
114
|
/**
|
|
105
115
|
* Compose grammars into ONE parser map — the only public composition entry point.
|
|
106
116
|
* `compose([base, ext, …])`: a later entry's rule WINS by name, and because every
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linker.d.ts","sourceRoot":"","sources":["../../src/compiler/linker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"linker.d.ts","sourceRoot":"","sources":["../../src/compiler/linker.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -13871,7 +13871,7 @@ function clearOf(ranges, input, from, to) {
|
|
|
13871
13871
|
}
|
|
13872
13872
|
|
|
13873
13873
|
// src/version.ts
|
|
13874
|
-
var PARSEMAN_VERSION = "0.60.
|
|
13874
|
+
var PARSEMAN_VERSION = "0.60.4";
|
|
13875
13875
|
|
|
13876
13876
|
// src/table/assemble.ts
|
|
13877
13877
|
import { PlainBuf as PlainBuf2, PlainField, PlainLeaf as PlainLeaf9, PlainNode as PlainNode2, PlainSpan as PlainSpan10 } from "./cst/plain.js";
|
|
@@ -19867,9 +19867,9 @@ function matcherExpr(entry) {
|
|
|
19867
19867
|
return `matches(${new RegExp(entry.value, entry.flags ?? "").toString()})`;
|
|
19868
19868
|
}
|
|
19869
19869
|
}
|
|
19870
|
-
function serializeRuleMap(ruleMap, scanSkip) {
|
|
19870
|
+
function serializeRuleMap(ruleMap, scanSkip, accessed) {
|
|
19871
19871
|
try {
|
|
19872
|
-
return new Serializer(ruleMap, scanSkip ?? []).run();
|
|
19872
|
+
return new Serializer(ruleMap, scanSkip ?? [], accessed ?? []).run();
|
|
19873
19873
|
} catch (e) {
|
|
19874
19874
|
if (e instanceof Unserializable) {
|
|
19875
19875
|
if (typeof process !== "undefined" && process.env?.PARSEMAN_IR_DEBUG) console.error(`[ir] fallback: ${e.message}`);
|
|
@@ -19891,9 +19891,12 @@ var Serializer = class {
|
|
|
19891
19891
|
localRuleNames = /* @__PURE__ */ new Map();
|
|
19892
19892
|
ruleMap;
|
|
19893
19893
|
scanSkip;
|
|
19894
|
-
|
|
19894
|
+
accessed;
|
|
19895
|
+
referenced = /* @__PURE__ */ new Set();
|
|
19896
|
+
constructor(ruleMap, scanSkip = [], accessed = []) {
|
|
19895
19897
|
this.ruleMap = ruleMap;
|
|
19896
19898
|
this.scanSkip = scanSkip;
|
|
19899
|
+
this.accessed = accessed;
|
|
19897
19900
|
for (const [name, c] of ruleMap) {
|
|
19898
19901
|
this.localRuleNames.set(c, name);
|
|
19899
19902
|
this.ruleValues.add(this.body(c));
|
|
@@ -19969,6 +19972,9 @@ var Serializer = class {
|
|
|
19969
19972
|
}
|
|
19970
19973
|
this.decls = innerDecls;
|
|
19971
19974
|
const body = this.ruleMap.map(([name, c]) => ` ${JSON.stringify(name)}: ${this.wrap(this.body(c), [])}`).join(",\n");
|
|
19975
|
+
for (const name of this.accessed) {
|
|
19976
|
+
if (!this.referenced.has(name)) innerDecls.push(`void g[${JSON.stringify(name)}]`);
|
|
19977
|
+
}
|
|
19972
19978
|
const factory = innerDecls.length === 0 ? `(g) => ({
|
|
19973
19979
|
${body}
|
|
19974
19980
|
})` : `(g) => {
|
|
@@ -20067,7 +20073,10 @@ ${outerDecls.map((d) => " " + d).join("\n")}
|
|
|
20067
20073
|
switch (def.tag) {
|
|
20068
20074
|
case "lazy": {
|
|
20069
20075
|
const name = this.localRuleNames.get(c) ?? ruleNameOf4(c);
|
|
20070
|
-
if (name !== void 0)
|
|
20076
|
+
if (name !== void 0) {
|
|
20077
|
+
this.referenced.add(name);
|
|
20078
|
+
return `g[${JSON.stringify(name)}]`;
|
|
20079
|
+
}
|
|
20071
20080
|
const target = lazyTarget(c);
|
|
20072
20081
|
for (let i = frames.length - 1; i >= 0; i--) {
|
|
20073
20082
|
const f = frames[i];
|
|
@@ -20401,24 +20410,28 @@ function declaredNamesOf(items) {
|
|
|
20401
20410
|
}
|
|
20402
20411
|
return [...names];
|
|
20403
20412
|
}
|
|
20404
|
-
function
|
|
20405
|
-
const
|
|
20406
|
-
const missing = [];
|
|
20413
|
+
function danglingReference(map, accessed = []) {
|
|
20414
|
+
const holes = /* @__PURE__ */ new Set();
|
|
20407
20415
|
for (const [name, rule] of Object.entries(map)) {
|
|
20408
20416
|
if (rule._def.tag !== "lazy") continue;
|
|
20409
20417
|
try {
|
|
20410
20418
|
rule._def.thunk();
|
|
20411
20419
|
} catch {
|
|
20412
|
-
|
|
20420
|
+
holes.add(name);
|
|
20413
20421
|
}
|
|
20414
20422
|
}
|
|
20415
|
-
if (
|
|
20416
|
-
|
|
20417
|
-
|
|
20418
|
-
|
|
20419
|
-
}
|
|
20420
|
-
throw new Error(`compose: rule(s) ${missing.map((n) => `"${n}"`).join(", ")} are referenced but defined by no composed grammar`);
|
|
20423
|
+
for (const name of accessed) if (!Object.hasOwn(map, name)) holes.add(name);
|
|
20424
|
+
if (holes.size === 0) return void 0;
|
|
20425
|
+
const missing = [...holes];
|
|
20426
|
+
for (const [name, deps] of ruleDependencies(Object.entries(map).filter(([n]) => !holes.has(n)))) {
|
|
20427
|
+
for (const dep of deps) if (holes.has(dep)) return `rule "${name}" references missing rule "${dep}"`;
|
|
20421
20428
|
}
|
|
20429
|
+
return `rule(s) ${missing.map((n) => `"${n}"`).join(", ")} are referenced but defined by no composed grammar`;
|
|
20430
|
+
}
|
|
20431
|
+
function linkComposition(recipes, link) {
|
|
20432
|
+
const map = linkRules(recipes, link);
|
|
20433
|
+
const dangling = danglingReference(map);
|
|
20434
|
+
if (dangling !== void 0) throw new Error(`compose: ${dangling}`);
|
|
20422
20435
|
const borrowed = borrowedRuleReference(map);
|
|
20423
20436
|
if (borrowed !== void 0) throw new Error(borrowedRuleMessage("compose", borrowed));
|
|
20424
20437
|
for (const rule of Object.values(map)) LINKED_WINNERS.set(rule, map);
|