parseman 0.51.1 → 0.52.0
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.map +1 -1
- package/dist/analysis/diagnostics.js +101 -35
- package/dist/analysis/diagnostics.js.map +1 -1
- package/dist/cli/index.js +103 -37
- package/dist/cli/index.js.map +1 -1
- package/dist/combinators/attempt.d.ts +11 -1
- package/dist/combinators/attempt.d.ts.map +1 -1
- package/dist/combinators/map.d.ts.map +1 -1
- package/dist/combinators/node.d.ts +6 -2
- package/dist/combinators/node.d.ts.map +1 -1
- package/dist/combinators/token.d.ts +8 -8
- package/dist/combinators/token.d.ts.map +1 -1
- package/dist/compiler/token-capability.js +4 -0
- package/dist/compiler/token-capability.js.map +1 -1
- package/dist/coverage.d.ts.map +1 -1
- package/dist/cst/trivia-kinds.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +107 -40
- package/dist/index.js.map +1 -1
- package/dist/plugin/evaluator.d.ts.map +1 -1
- package/dist/plugin/index.js +107 -41
- package/dist/plugin/index.js.map +1 -1
- package/dist/spec/index.js +55 -10
- package/dist/spec/index.js.map +1 -1
- package/dist/table/assemble.d.ts.map +1 -1
- package/dist/table/emit-assembly.d.ts.map +1 -1
- package/dist/table/encode-baseline.d.ts.map +1 -1
- package/dist/table/exec-baseline.d.ts.map +1 -1
- package/dist/table/exec.d.ts.map +1 -1
- package/dist/table/index.js +404 -371
- package/dist/table/index.js.map +2 -2
- package/dist/table/ops.d.ts +9 -5
- package/dist/table/ops.d.ts.map +1 -1
- package/dist/table/site-labels.d.ts.map +1 -1
- package/dist/types.d.ts +9 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/analysis/commitment.ts +3 -1
- package/src/analysis/duplication.ts +1 -1
- package/src/analysis/rebuild.ts +3 -3
- package/src/combinators/attempt.ts +26 -3
- package/src/combinators/first-set.ts +5 -1
- package/src/combinators/map.ts +5 -1
- package/src/combinators/node.ts +12 -3
- package/src/combinators/token.ts +46 -3
- package/src/compiler/ir-serialize.ts +5 -5
- package/src/coverage.ts +3 -4
- package/src/cst/trivia-kinds.ts +6 -0
- package/src/index.ts +2 -1
- package/src/plugin/evaluator.ts +8 -5
- package/src/table/assemble.ts +30 -11
- package/src/table/child-slots.ts +2 -2
- package/src/table/emit-assembly.ts +13 -6
- package/src/table/encode-baseline.ts +8 -3
- package/src/table/encode.ts +16 -16
- package/src/table/exec-baseline.ts +30 -4
- package/src/table/exec.ts +14 -5
- package/src/table/ops.ts +10 -6
- package/src/table/scalar-terminal.ts +5 -5
- package/src/table/site-labels.ts +5 -3
- package/src/types.ts +9 -2
- package/src/version.ts +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export { choice } from './combinators/choice.ts';
|
|
|
9
9
|
export { dispatch, endsWith, makeWhen, matches, otherwise, routed, startsWith, when } from './combinators/dispatch.ts';
|
|
10
10
|
export type { DispatchArm, DispatchOtherwise, DispatchStringMatcher, DispatchWhen, DispatchWhenFactory, DispatchWhenOptions, DispatchWhenMatcher } from './combinators/dispatch.ts';
|
|
11
11
|
export { attempt } from './combinators/attempt.ts';
|
|
12
|
+
export type { AttemptOptions } from './combinators/attempt.ts';
|
|
12
13
|
export { many, oneOrMore, optional, sepBy, oneOrMoreSep, keepSeparator } from './combinators/repeat.ts';
|
|
13
14
|
export type { RepeatOptions, SepByOptions, TrailingSeparator, KeptSeparator } from './combinators/repeat.ts';
|
|
14
15
|
export { rules } from './combinators/parser.ts';
|
|
@@ -20,7 +21,7 @@ export type { BuildNode, NodeCombinator, NodeOptions, NodeProjectOptions } from
|
|
|
20
21
|
export { transform, trivia, classifiedTrivia, label, field } from './combinators/map.ts';
|
|
21
22
|
export { parse, parser, noTrivia } from './combinators/grammar.ts';
|
|
22
23
|
export type { ParseOptions, ParserOptions, ParsemanParser } from './combinators/grammar.ts';
|
|
23
|
-
export { token, leaf } from './combinators/token.ts';
|
|
24
|
+
export { token, leaf, sourceLeaf } from './combinators/token.ts';
|
|
24
25
|
export { compile } from './table/compile.ts';
|
|
25
26
|
export type { HostMode } from './cst/host-mode.ts';
|
|
26
27
|
/**
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,oBAAoB,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE7S,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAS9D,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE7E,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAA;AACtH,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACnL,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvG,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5G,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAEvG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACxF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAClE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC3F,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -257,6 +257,10 @@ function firstSetBody(p, seen, resolve, activeTrivia) {
|
|
|
257
257
|
case "node":
|
|
258
258
|
case "sepBy":
|
|
259
259
|
case "expect":
|
|
260
|
+
// A transaction accepts exactly what its inner accepts. Its own `_meta` is
|
|
261
|
+
// the inner's construction-time set, which reads `any` when the inner opens
|
|
262
|
+
// with a rule reference — resolve through it like any other wrapper.
|
|
263
|
+
case "attempt":
|
|
260
264
|
return fs(d.parser);
|
|
261
265
|
case "grammar":
|
|
262
266
|
return firstSetOf(
|
|
@@ -1795,6 +1799,10 @@ function peelLabel(p) {
|
|
|
1795
1799
|
return null;
|
|
1796
1800
|
}
|
|
1797
1801
|
function analyzeLabeledTrivia(trivia2) {
|
|
1802
|
+
if (trivia2._def.tag === "trivia") {
|
|
1803
|
+
const own = trivia2._meta.labeledTriviaSpec;
|
|
1804
|
+
if (own !== void 0) return own;
|
|
1805
|
+
}
|
|
1798
1806
|
if (trivia2 === labeledTrivia0) return labeledSpec0;
|
|
1799
1807
|
if (trivia2 === labeledTrivia1) return labeledSpec1;
|
|
1800
1808
|
if (trivia2 === labeledTrivia2) return labeledSpec2;
|
|
@@ -3541,13 +3549,24 @@ function dispatch(selector, ...arms) {
|
|
|
3541
3549
|
}
|
|
3542
3550
|
|
|
3543
3551
|
// src/combinators/attempt.ts
|
|
3544
|
-
function
|
|
3552
|
+
function containOption(options) {
|
|
3553
|
+
if (options === void 0) return false;
|
|
3554
|
+
for (const key of Object.keys(options)) {
|
|
3555
|
+
if (key !== "contain") throw new TypeError(`attempt(): unknown option ${JSON.stringify(key)}`);
|
|
3556
|
+
}
|
|
3557
|
+
if (options.contain !== void 0 && typeof options.contain !== "boolean") {
|
|
3558
|
+
throw new TypeError("attempt(): `contain` must be a boolean");
|
|
3559
|
+
}
|
|
3560
|
+
return options.contain === true;
|
|
3561
|
+
}
|
|
3562
|
+
function attempt(parser2, options) {
|
|
3563
|
+
const contain = containOption(options);
|
|
3545
3564
|
const guardable = parser2._meta.firstSet.kind !== "any" && !matchesEmpty(parser2);
|
|
3546
3565
|
let failExpected;
|
|
3547
3566
|
return {
|
|
3548
3567
|
_tag: "attempt",
|
|
3549
3568
|
_meta: parser2._meta,
|
|
3550
|
-
_def: { tag: "attempt", parser: parser2 },
|
|
3569
|
+
_def: contain ? { tag: "attempt", parser: parser2, contain: true } : { tag: "attempt", parser: parser2 },
|
|
3551
3570
|
parse(input, pos, ctx) {
|
|
3552
3571
|
if (guardable && ctx._probe === void 0 && !ctx._tolerant && !startsFirstSet(parser2, input, pos)) {
|
|
3553
3572
|
if (failExpected === void 0) {
|
|
@@ -3564,7 +3583,7 @@ function attempt(parser2) {
|
|
|
3564
3583
|
rollbackCstCapture(ctx, mark);
|
|
3565
3584
|
if (log !== void 0 && ctx._triviaLog && ctx._triviaLog.length !== log) ctx._triviaLog.length = log;
|
|
3566
3585
|
if (rootLog !== void 0 && ctx._rootTriviaLog && ctx._rootTriviaLog.length !== rootLog) ctx._rootTriviaLog.length = rootLog;
|
|
3567
|
-
if (result.committed) return result;
|
|
3586
|
+
if (result.committed && !contain) return result;
|
|
3568
3587
|
return { ok: false, expected: result.expected, span: { start: pos, end: pos } };
|
|
3569
3588
|
}
|
|
3570
3589
|
};
|
|
@@ -4964,7 +4983,7 @@ function node(typeOrCombinator, combinatorOrBuild, buildOrOpts, maybeOpts) {
|
|
|
4964
4983
|
throw new Error("node() options cannot combine project with unwrap or collapse");
|
|
4965
4984
|
}
|
|
4966
4985
|
const def = unwrap || collapse || project !== void 0 || captureTrivia || trailingTrivia || buildArity !== void 0 || tags !== void 0 && tags.length > 0 ? { ...baseDef, ...unwrap ? { unwrap: true } : {}, ...collapse ? { collapse: true } : {}, ...project !== void 0 ? { project } : {}, ...captureTrivia ? { captureTrivia: true } : {}, ...trailingTrivia ? { trailingTrivia: true } : {}, ...buildArity !== void 0 ? { buildArity } : {}, ...tags !== void 0 && tags.length > 0 ? { tags } : {} } : baseDef;
|
|
4967
|
-
const capturesTrivia = captureTrivia ||
|
|
4986
|
+
const capturesTrivia = captureTrivia || (build ? buildReadsTrivia(def) : project === void 0);
|
|
4968
4987
|
const clonesState = build ? buildReadsState(def) : project === void 0;
|
|
4969
4988
|
const hasOwnFields = parserHasOwnFields(combinator);
|
|
4970
4989
|
const capturesFields = hasOwnFields && (build ? buildReadsFields(def) : project === void 0);
|
|
@@ -5078,13 +5097,17 @@ function transform(combinator, fn) {
|
|
|
5078
5097
|
};
|
|
5079
5098
|
}
|
|
5080
5099
|
function trivia(combinator) {
|
|
5081
|
-
const
|
|
5100
|
+
const labeled = analyzeLabeledTrivia(combinator);
|
|
5101
|
+
const kindLabels = labeled?.labels;
|
|
5082
5102
|
return {
|
|
5083
5103
|
_tag: combinator._tag,
|
|
5084
5104
|
_meta: {
|
|
5085
5105
|
...combinator._meta,
|
|
5086
5106
|
isTrivia: true,
|
|
5087
5107
|
triviaScanner: fastTriviaScanner(combinator),
|
|
5108
|
+
// Every labeled scan of this trivia reads its spec; the module's four-slot
|
|
5109
|
+
// memo alone thrashes on a grammar with more than four trivia tables.
|
|
5110
|
+
labeledTriviaSpec: labeled,
|
|
5088
5111
|
...kindLabels ? { triviaKindLabels: kindLabels } : {}
|
|
5089
5112
|
},
|
|
5090
5113
|
_def: { tag: "trivia", parser: combinator },
|
|
@@ -5138,6 +5161,12 @@ function field(name, combinator) {
|
|
|
5138
5161
|
}
|
|
5139
5162
|
|
|
5140
5163
|
// src/combinators/token.ts
|
|
5164
|
+
function semanticLeafValue(_ctx, _input, _start, _end, value) {
|
|
5165
|
+
return value;
|
|
5166
|
+
}
|
|
5167
|
+
function sourceLeafValue(ctx, input, start, end, value) {
|
|
5168
|
+
return cstOutputHost(ctx.build) ? input.slice(start, end) : value;
|
|
5169
|
+
}
|
|
5141
5170
|
function token(root) {
|
|
5142
5171
|
const meta = {
|
|
5143
5172
|
firstSet: root._meta.firstSet,
|
|
@@ -5190,7 +5219,8 @@ function token(root) {
|
|
|
5190
5219
|
}
|
|
5191
5220
|
};
|
|
5192
5221
|
}
|
|
5193
|
-
function
|
|
5222
|
+
function makeLeaf(root, fn, sourceCstValue) {
|
|
5223
|
+
const cstValue = sourceCstValue ? sourceLeafValue : semanticLeafValue;
|
|
5194
5224
|
const meta = {
|
|
5195
5225
|
firstSet: root._meta.firstSet,
|
|
5196
5226
|
canMatchNewline: root._meta.canMatchNewline,
|
|
@@ -5199,7 +5229,12 @@ function leaf(root, fn) {
|
|
|
5199
5229
|
return {
|
|
5200
5230
|
_tag: "leaf",
|
|
5201
5231
|
_meta: meta,
|
|
5202
|
-
_def: {
|
|
5232
|
+
_def: {
|
|
5233
|
+
tag: "leaf",
|
|
5234
|
+
parser: root,
|
|
5235
|
+
fn,
|
|
5236
|
+
...sourceCstValue ? { cstValue: "source" } : {}
|
|
5237
|
+
},
|
|
5203
5238
|
parse(input, pos, ctx) {
|
|
5204
5239
|
const savedBuf = ctx._cstBuf;
|
|
5205
5240
|
const savedChildren = ctx._cstChildren;
|
|
@@ -5227,11 +5262,21 @@ function leaf(root, fn) {
|
|
|
5227
5262
|
}
|
|
5228
5263
|
if (!result.ok) return result;
|
|
5229
5264
|
const value = fn(result.value, result.span);
|
|
5230
|
-
if (wasCapturing) pushCstLeaf(ctx, {
|
|
5265
|
+
if (wasCapturing) pushCstLeaf(ctx, {
|
|
5266
|
+
_tag: "leaf",
|
|
5267
|
+
value: cstValue(ctx, input, pos, result.span.end, value),
|
|
5268
|
+
span: result.span
|
|
5269
|
+
});
|
|
5231
5270
|
return { ok: true, value, span: result.span };
|
|
5232
5271
|
}
|
|
5233
5272
|
};
|
|
5234
5273
|
}
|
|
5274
|
+
function leaf(root, fn) {
|
|
5275
|
+
return makeLeaf(root, fn, false);
|
|
5276
|
+
}
|
|
5277
|
+
function sourceLeaf(root, fn) {
|
|
5278
|
+
return makeLeaf(root, fn, true);
|
|
5279
|
+
}
|
|
5235
5280
|
|
|
5236
5281
|
// src/analysis/gating.ts
|
|
5237
5282
|
function childrenOf2(d) {
|
|
@@ -5971,10 +6016,12 @@ function mayCommitFailure(p, seen = /* @__PURE__ */ new Set(), resolve) {
|
|
|
5971
6016
|
case "choice":
|
|
5972
6017
|
case "sequence":
|
|
5973
6018
|
return d.parsers.some((x) => mayCommitFailure(x, seen, resolve));
|
|
6019
|
+
// A contained transaction reports every failure uncommitted.
|
|
6020
|
+
case "attempt":
|
|
6021
|
+
return d.contain !== true && mayCommitFailure(d.parser, seen, resolve);
|
|
5974
6022
|
case "many":
|
|
5975
6023
|
case "oneOrMore":
|
|
5976
6024
|
case "optional":
|
|
5977
|
-
case "attempt":
|
|
5978
6025
|
case "transform":
|
|
5979
6026
|
case "label":
|
|
5980
6027
|
case "field":
|
|
@@ -6099,6 +6146,7 @@ var OP_COV = 40;
|
|
|
6099
6146
|
var OP_SCOPE_PLAIN = 41;
|
|
6100
6147
|
var OP_LEX_BODY = 42;
|
|
6101
6148
|
var OP_LEX_PROGRAM = 43;
|
|
6149
|
+
var OP_SOURCE_LEAF = 44;
|
|
6102
6150
|
var OP_DISPATCH = 25;
|
|
6103
6151
|
var OP_ROUTED = 26;
|
|
6104
6152
|
var OP_NAMES = {
|
|
@@ -6117,6 +6165,7 @@ var OP_NAMES = {
|
|
|
6117
6165
|
[OP_NOT]: "NOT",
|
|
6118
6166
|
[OP_PEEK]: "PEEK",
|
|
6119
6167
|
[OP_LEAF]: "LEAF",
|
|
6168
|
+
[OP_SOURCE_LEAF]: "SOURCE_LEAF",
|
|
6120
6169
|
[OP_EMPTY]: "EMPTY",
|
|
6121
6170
|
[OP_LIT_TRACK]: "LIT_TRACK",
|
|
6122
6171
|
[OP_RX_TRACK]: "RX_TRACK",
|
|
@@ -8069,7 +8118,7 @@ var Encoder = class {
|
|
|
8069
8118
|
}
|
|
8070
8119
|
case "leaf": {
|
|
8071
8120
|
const child = this.node(d.parser).ip;
|
|
8072
|
-
return this.emit(OP_LEAF, this.fn(d.fn, d.fnSrc ?? null), child);
|
|
8121
|
+
return this.emit(d.cstValue === "source" ? OP_SOURCE_LEAF : OP_LEAF, this.fn(d.fn, d.fnSrc ?? null), child);
|
|
8073
8122
|
}
|
|
8074
8123
|
case "node": {
|
|
8075
8124
|
if (d.type === void 0) missingInferredType();
|
|
@@ -8081,7 +8130,7 @@ var Encoder = class {
|
|
|
8081
8130
|
const derivedState = d.build !== void 0 ? buildReadsState(d) : noBuildCaptures;
|
|
8082
8131
|
const derivedFields = d.build !== void 0 ? buildReadsFields(d) : noBuildCaptures;
|
|
8083
8132
|
const wantsFields = parserHasOwnFields(d.parser) && (cstOut || derivedFields);
|
|
8084
|
-
const flags = (cstOut || d.captureTrivia === true ||
|
|
8133
|
+
const flags = (cstOut || d.captureTrivia === true || derivedTrivia ? 4 : 0) | (!cstOut && omitsRaw ? 2 : 0) | (cstOut || derivedState ? 8 : 0) | (wantsFields ? 16 : 0) | (d.collapse === true ? 32 : 0) | (d.unwrap === true ? 64 : 0) | (d.trailingTrivia === true ? 128 : 0) | (d.captureTrivia === true ? 1 : 0);
|
|
8085
8134
|
const body = this.emit(
|
|
8086
8135
|
this.track ? OP_NODE_TRACK : OP_NODE,
|
|
8087
8136
|
d.build === void 0 ? -1 : this.fn(d.build, d.buildSrc ?? null),
|
|
@@ -8207,7 +8256,7 @@ var Encoder = class {
|
|
|
8207
8256
|
// A TRANSACTION IS A ROW. See `OP_ATTEMPT` for why the transparent
|
|
8208
8257
|
// lowering was correct only for a choice arm.
|
|
8209
8258
|
case "attempt": {
|
|
8210
|
-
const inner = this.emit(OP_ATTEMPT, this.node(d.parser).ip);
|
|
8259
|
+
const inner = this.emit(OP_ATTEMPT, this.node(d.parser).ip, d.contain === true ? 1 : 0);
|
|
8211
8260
|
if (!this.failureNeedsRollback(d.parser, void 0)) this.failureRollbackCleanSites.add(inner);
|
|
8212
8261
|
const fs = d.parser._def.tag === "lazy" ? firstSetOf(d.parser, /* @__PURE__ */ new Set(), this.refResolver(), this.activeTrivia) : d.parser._meta.firstSet;
|
|
8213
8262
|
if (fs.kind === "any" || matchesEmpty(d.parser)) return inner;
|
|
@@ -8294,6 +8343,7 @@ var Encoder = class {
|
|
|
8294
8343
|
case OP_WITHCTX:
|
|
8295
8344
|
case OP_XFORM:
|
|
8296
8345
|
case OP_LEAF:
|
|
8346
|
+
case OP_SOURCE_LEAF:
|
|
8297
8347
|
case OP_NODE:
|
|
8298
8348
|
case OP_NODE_TRACK:
|
|
8299
8349
|
return [ip + 2];
|
|
@@ -9506,6 +9556,7 @@ function childSlots(code, ip, out) {
|
|
|
9506
9556
|
case OP_NODE_TRACK:
|
|
9507
9557
|
case OP_FIELD:
|
|
9508
9558
|
case OP_LEAF:
|
|
9559
|
+
case OP_SOURCE_LEAF:
|
|
9509
9560
|
case OP_ARMGATE:
|
|
9510
9561
|
out.push(code[ip + 2]);
|
|
9511
9562
|
return true;
|
|
@@ -9601,7 +9652,7 @@ function transfer(code, ip, at, hostCst) {
|
|
|
9601
9652
|
}
|
|
9602
9653
|
if (op === OP_NODE || op === OP_NODE_TRACK) {
|
|
9603
9654
|
const flags = code[ip + 3];
|
|
9604
|
-
const directChildren = !hostCst && op === OP_NODE && code[ip + 1] >= 0 && code[ip + 4] < 0 && (flags === 2 || flags === 18 || flags === 34);
|
|
9655
|
+
const directChildren = !hostCst && op === OP_NODE && code[ip + 1] >= 0 && code[ip + 4] < 0 && ((flags & ~128) === 2 || flags === 18 || flags === 34);
|
|
9605
9656
|
if (directChildren) {
|
|
9606
9657
|
return { tri: at.tri, buf: false, raw: RAW_UNKNOWN, cap: CAP_OFF };
|
|
9607
9658
|
}
|
|
@@ -9614,7 +9665,7 @@ function transfer(code, ip, at, hostCst) {
|
|
|
9614
9665
|
if (at.tri === TRI_NONE && !at.buf) return at;
|
|
9615
9666
|
return { tri: TRI_NONE, buf: false, raw: RAW_UNKNOWN, cap: at.cap };
|
|
9616
9667
|
}
|
|
9617
|
-
if (op === OP_LEAF) {
|
|
9668
|
+
if (op === OP_LEAF || op === OP_SOURCE_LEAF) {
|
|
9618
9669
|
if (!at.buf) return at;
|
|
9619
9670
|
return { tri: at.tri, buf: false, raw: RAW_UNKNOWN, cap: at.cap };
|
|
9620
9671
|
}
|
|
@@ -9701,7 +9752,7 @@ function leadingScalarTerminal(code, ip, minDepth = 2, throughAttempt = true, th
|
|
|
9701
9752
|
depth++;
|
|
9702
9753
|
continue;
|
|
9703
9754
|
}
|
|
9704
|
-
if (op === OP_GATE || op === OP_SCOPE || op === OP_SCOPE_CAP || op === OP_SCOPE_PLAIN || op === OP_XFORM || op === OP_NODE || op === OP_FIELD || op === OP_LEAF) {
|
|
9755
|
+
if (op === OP_GATE || op === OP_SCOPE || op === OP_SCOPE_CAP || op === OP_SCOPE_PLAIN || op === OP_XFORM || op === OP_NODE || op === OP_FIELD || (op === OP_LEAF || op === OP_SOURCE_LEAF)) {
|
|
9705
9756
|
at = code[at + 2];
|
|
9706
9757
|
depth++;
|
|
9707
9758
|
continue;
|
|
@@ -9734,7 +9785,7 @@ function leadingScalarSequence(code, ip) {
|
|
|
9734
9785
|
at2 = code[at2 + 1];
|
|
9735
9786
|
continue;
|
|
9736
9787
|
}
|
|
9737
|
-
if (op === OP_GATE || op === OP_SCOPE_PLAIN || op === OP_XFORM || op === OP_NODE || op === OP_FIELD || op === OP_LEAF) {
|
|
9788
|
+
if (op === OP_GATE || op === OP_SCOPE_PLAIN || op === OP_XFORM || op === OP_NODE || op === OP_FIELD || (op === OP_LEAF || op === OP_SOURCE_LEAF)) {
|
|
9738
9789
|
at2 = code[at2 + 2];
|
|
9739
9790
|
continue;
|
|
9740
9791
|
}
|
|
@@ -9767,7 +9818,7 @@ function leadingScalarSequence(code, ip) {
|
|
|
9767
9818
|
at = code[at + 2];
|
|
9768
9819
|
continue;
|
|
9769
9820
|
}
|
|
9770
|
-
if (op === OP_GATE || op === OP_XFORM || op === OP_NODE || op === OP_FIELD || op === OP_LEAF) {
|
|
9821
|
+
if (op === OP_GATE || op === OP_XFORM || op === OP_NODE || op === OP_FIELD || (op === OP_LEAF || op === OP_SOURCE_LEAF)) {
|
|
9771
9822
|
at = code[at + 2];
|
|
9772
9823
|
continue;
|
|
9773
9824
|
}
|
|
@@ -9797,7 +9848,7 @@ function leadingLiteralFamily(code, constants, ip, minDepth = 2, limit = 4) {
|
|
|
9797
9848
|
if (op === OP_RULE || op === OP_LABEL || op === OP_TOKEN || op === OP_ATTEMPT || op === OP_PEEK) {
|
|
9798
9849
|
return walk(code[at + 1], depth + 1);
|
|
9799
9850
|
}
|
|
9800
|
-
if (op === OP_GATE || op === OP_SCOPE || op === OP_SCOPE_CAP || op === OP_SCOPE_PLAIN || op === OP_XFORM || op === OP_NODE || op === OP_FIELD || op === OP_LEAF) {
|
|
9851
|
+
if (op === OP_GATE || op === OP_SCOPE || op === OP_SCOPE_CAP || op === OP_SCOPE_PLAIN || op === OP_XFORM || op === OP_NODE || op === OP_FIELD || (op === OP_LEAF || op === OP_SOURCE_LEAF)) {
|
|
9801
9852
|
return walk(code[at + 2], depth + 1);
|
|
9802
9853
|
}
|
|
9803
9854
|
if (op === OP_SEQ || op === OP_SEQV) {
|
|
@@ -10683,8 +10734,10 @@ ${rootCap ? "ctx._rootTriviaCapture=sR\n" : ""}return v
|
|
|
10683
10734
|
}
|
|
10684
10735
|
/* ── boundaries ──────────────────────────────────────────────────────── */
|
|
10685
10736
|
case OP_TOKEN:
|
|
10686
|
-
case OP_LEAF:
|
|
10737
|
+
case OP_LEAF:
|
|
10738
|
+
case OP_SOURCE_LEAF: {
|
|
10687
10739
|
const isToken = op === OP_TOKEN;
|
|
10740
|
+
const capturesSource = isToken || op === OP_SOURCE_LEAF && hostCst;
|
|
10688
10741
|
const fn = isToken ? void 0 : fnRef(code[ip + 1]);
|
|
10689
10742
|
const child = link(isToken ? code[ip + 1] : code[ip + 2]);
|
|
10690
10743
|
const wasCap = L.buf ? "true" : "(ctx._cstBuf!==undefined||ctx._cstLeaves!==undefined)";
|
|
@@ -10717,7 +10770,7 @@ ctx._triviaLog=sOtl
|
|
|
10717
10770
|
if(v===FAIL)return FAIL
|
|
10718
10771
|
const e=EC.e
|
|
10719
10772
|
const out=${isToken ? "input.slice(pos,e)" : `${fn}(v,{start:pos,end:e})`}
|
|
10720
|
-
if(wasCap)pushCstLeaf(ctx,{_tag:'leaf',value:out,span:{start:pos,end:e}})
|
|
10773
|
+
if(wasCap)pushCstLeaf(ctx,{_tag:'leaf',value:${capturesSource ? "input.slice(pos,e)" : "out"},span:{start:pos,end:e}})
|
|
10721
10774
|
EC.e=e
|
|
10722
10775
|
return out
|
|
10723
10776
|
}`;
|
|
@@ -10803,7 +10856,7 @@ ${clean ? "" : emitMark(p, L.buf, L.raw, sinks)}
|
|
|
10803
10856
|
const v=${child}(input,pos,ctx)
|
|
10804
10857
|
if(v!==FAIL)return v
|
|
10805
10858
|
${clean ? "" : emitRollback(p, L.buf, L.raw, sinks)}
|
|
10806
|
-
if(ctx._fc===true)return FAIL
|
|
10859
|
+
${code[ip + 2] === 1 ? "ctx._fc=false" : "if(ctx._fc===true)return FAIL"}
|
|
10807
10860
|
ctx._fe=pos
|
|
10808
10861
|
return FAIL
|
|
10809
10862
|
}`;
|
|
@@ -11392,7 +11445,8 @@ return nd
|
|
|
11392
11445
|
const unwrap = (flags & 64) !== 0;
|
|
11393
11446
|
const trailingTrivia = (flags & 128) !== 0;
|
|
11394
11447
|
const build = buildIdx >= 0 ? fnRef(buildIdx) : void 0;
|
|
11395
|
-
|
|
11448
|
+
const leanFlags = flags & ~128;
|
|
11449
|
+
if (!hostCst && !tracked && build !== void 0 && proj < 0 && (leanFlags === 2 || (flags === 18 || flags === 34))) {
|
|
11396
11450
|
const fields = flags === 18;
|
|
11397
11451
|
const collapseChildren = flags === 34;
|
|
11398
11452
|
const publish = L.buf && L.raw === RAW_OMIT ? "_pushNodeNoRawBuf(ctx,nd)" : L.buf && L.raw === RAW_CAPTURE ? `if(sBuf!==undefined){
|
|
@@ -11437,7 +11491,8 @@ ctx._cstTriviaLog=undefined
|
|
|
11437
11491
|
ctx.captureTrivia=false
|
|
11438
11492
|
ctx._fields=${fields ? "[]" : "undefined"}
|
|
11439
11493
|
const v=${child}(input,pos,ctx)
|
|
11440
|
-
|
|
11494
|
+
${trailingTrivia && L.tri !== TRI_NONE ? `if(v!==FAIL${L.tri === TRI_UNKNOWN ? "&&ctx.trivia!==undefined" : ""})EC.e=consumeTrivia(input,EC.e,ctx)
|
|
11495
|
+
` : ""}const captured=_capturedFlatChildren(flat)
|
|
11441
11496
|
${fields ? "const fieldMap=buildFieldMap(ctx._fields)\n" : ""}ctx._fields=sFields
|
|
11442
11497
|
ctx._cstBuf=sBuf
|
|
11443
11498
|
ctx._cstChildren=sCh
|
|
@@ -12070,7 +12125,7 @@ function assemble(t, prog, cfg) {
|
|
|
12070
12125
|
const lf = { _tag: "leaf", value, span: { start: s, end: e } };
|
|
12071
12126
|
pushCstLeaf(ctx, lf);
|
|
12072
12127
|
}
|
|
12073
|
-
function plainBuildNode(child, build) {
|
|
12128
|
+
function plainBuildNode(child, build, trailing) {
|
|
12074
12129
|
return (input, pos, ctx) => {
|
|
12075
12130
|
const sCh = ctx._cstChildren;
|
|
12076
12131
|
const sLv = ctx._cstLeaves;
|
|
@@ -12088,6 +12143,7 @@ function assemble(t, prog, cfg) {
|
|
|
12088
12143
|
ctx.captureTrivia = false;
|
|
12089
12144
|
ctx._fields = void 0;
|
|
12090
12145
|
const value = child(input, pos, ctx);
|
|
12146
|
+
if (trailing && value !== FAIL && ctx.trivia !== void 0) EC.e = consumeTrivia(input, EC.e, ctx);
|
|
12091
12147
|
const kids = buf.ch ?? (buf.single !== void 0 ? [buf.single] : EMPTY_CH);
|
|
12092
12148
|
const rawKids = buf.raw ?? (buf.rawSingle !== void 0 ? [buf.rawSingle] : EMPTY_CH);
|
|
12093
12149
|
ctx._fields = savedFields;
|
|
@@ -12115,7 +12171,7 @@ function assemble(t, prog, cfg) {
|
|
|
12115
12171
|
while (first < children2.length && children2[first] === void 0) first++;
|
|
12116
12172
|
return first === children2.length ? EMPTY_CH : children2.slice(first);
|
|
12117
12173
|
}
|
|
12118
|
-
function childrenOnlyBuildNode(child, build) {
|
|
12174
|
+
function childrenOnlyBuildNode(child, build, trailing) {
|
|
12119
12175
|
return (input, pos, ctx) => {
|
|
12120
12176
|
const sCh = ctx._cstChildren;
|
|
12121
12177
|
const sLv = ctx._cstLeaves;
|
|
@@ -12133,6 +12189,7 @@ function assemble(t, prog, cfg) {
|
|
|
12133
12189
|
ctx.captureTrivia = false;
|
|
12134
12190
|
ctx._fields = void 0;
|
|
12135
12191
|
const value = child(input, pos, ctx);
|
|
12192
|
+
if (trailing && value !== FAIL && ctx.trivia !== void 0) EC.e = consumeTrivia(input, EC.e, ctx);
|
|
12136
12193
|
const captured = capturedFlatChildren(kids);
|
|
12137
12194
|
ctx._fields = savedFields;
|
|
12138
12195
|
ctx._cstBuf = sBuf;
|
|
@@ -13157,6 +13214,7 @@ function assemble(t, prog, cfg) {
|
|
|
13157
13214
|
/* ── transaction ─────────────────────────────────────────────────────── */
|
|
13158
13215
|
case OP_ATTEMPT: {
|
|
13159
13216
|
const child = link(code[ip + 1]);
|
|
13217
|
+
const contain = code[ip + 2] === 1;
|
|
13160
13218
|
return (input, pos, ctx) => {
|
|
13161
13219
|
const need = markCst(ctx);
|
|
13162
13220
|
const mRaw = MRAW;
|
|
@@ -13169,7 +13227,10 @@ function assemble(t, prog, cfg) {
|
|
|
13169
13227
|
const v = child(input, pos, ctx);
|
|
13170
13228
|
if (v !== FAIL) return v;
|
|
13171
13229
|
if (need) rollbackTriviaAt(ctx, mRaw, mTl, mLv, mFl, mEr, mLog, mRoot);
|
|
13172
|
-
if (committed3(ctx))
|
|
13230
|
+
if (committed3(ctx)) {
|
|
13231
|
+
if (!contain) return FAIL;
|
|
13232
|
+
ctx._fc = false;
|
|
13233
|
+
}
|
|
13173
13234
|
ctx._fe = pos;
|
|
13174
13235
|
return FAIL;
|
|
13175
13236
|
};
|
|
@@ -13387,7 +13448,8 @@ function assemble(t, prog, cfg) {
|
|
|
13387
13448
|
return value;
|
|
13388
13449
|
};
|
|
13389
13450
|
}
|
|
13390
|
-
case OP_LEAF:
|
|
13451
|
+
case OP_LEAF:
|
|
13452
|
+
case OP_SOURCE_LEAF: {
|
|
13391
13453
|
const fn = fns[code[ip + 1]];
|
|
13392
13454
|
const child = link(code[ip + 2]);
|
|
13393
13455
|
return (input, pos, ctx) => {
|
|
@@ -13415,7 +13477,11 @@ function assemble(t, prog, cfg) {
|
|
|
13415
13477
|
if (v === FAIL) return FAIL;
|
|
13416
13478
|
const end = EC.e;
|
|
13417
13479
|
const out = fn(v, { start: pos, end });
|
|
13418
|
-
if (wasCapturing) pushCstLeaf(ctx, {
|
|
13480
|
+
if (wasCapturing) pushCstLeaf(ctx, {
|
|
13481
|
+
_tag: "leaf",
|
|
13482
|
+
value: op === OP_SOURCE_LEAF && hostCst ? input.slice(pos, end) : out,
|
|
13483
|
+
span: { start: pos, end }
|
|
13484
|
+
});
|
|
13419
13485
|
EC.e = end;
|
|
13420
13486
|
return out;
|
|
13421
13487
|
};
|
|
@@ -14615,11 +14681,11 @@ function assemble(t, prog, cfg) {
|
|
|
14615
14681
|
const trailingTrivia = (flags & 128) !== 0;
|
|
14616
14682
|
const build = buildIdx >= 0 ? fns[buildIdx] : void 0;
|
|
14617
14683
|
if (!hostCst && !tracked) {
|
|
14618
|
-
if (build !== void 0 && proj < 0 && flags === 0) {
|
|
14619
|
-
return plainBuildNode(child, build);
|
|
14684
|
+
if (build !== void 0 && proj < 0 && (flags & ~128) === 0) {
|
|
14685
|
+
return plainBuildNode(child, build, trailingTrivia);
|
|
14620
14686
|
}
|
|
14621
|
-
if (build !== void 0 && proj < 0 && flags === 2) {
|
|
14622
|
-
return childrenOnlyBuildNode(child, build);
|
|
14687
|
+
if (build !== void 0 && proj < 0 && (flags & ~128) === 2) {
|
|
14688
|
+
return childrenOnlyBuildNode(child, build, trailingTrivia);
|
|
14623
14689
|
}
|
|
14624
14690
|
if (build !== void 0 && proj < 0 && flags === 18) {
|
|
14625
14691
|
return childrenOnlyFieldsBuildNode(child, build);
|
|
@@ -15456,7 +15522,7 @@ function payloadKey(p, d) {
|
|
|
15456
15522
|
case "transform":
|
|
15457
15523
|
return `transform\0${fnKey(d.fnSrc, d.fn)}\0${d.recognitionOnly === true}`;
|
|
15458
15524
|
case "leaf":
|
|
15459
|
-
return `leaf\0${fnKey(d.fnSrc, d.fn)}`;
|
|
15525
|
+
return `leaf\0${d.cstValue ?? "value"}\0${fnKey(d.fnSrc, d.fn)}`;
|
|
15460
15526
|
case "many":
|
|
15461
15527
|
case "oneOrMore":
|
|
15462
15528
|
return `${d.tag}\0${d.min}\0${d.max ?? ""}`;
|
|
@@ -16945,7 +17011,7 @@ function evalRuleMapIR(ir) {
|
|
|
16945
17011
|
if (recognitionOnly) t._def.recognitionOnly = true;
|
|
16946
17012
|
return t;
|
|
16947
17013
|
};
|
|
16948
|
-
const _lf = (child, src) => {
|
|
17014
|
+
const _lf = (child, src, source = false) => {
|
|
16949
17015
|
let fn2;
|
|
16950
17016
|
try {
|
|
16951
17017
|
fn2 = (0, eval)(`(${src})`);
|
|
@@ -16954,7 +17020,7 @@ function evalRuleMapIR(ir) {
|
|
|
16954
17020
|
throw new Error("IR leaf fn not materialized");
|
|
16955
17021
|
};
|
|
16956
17022
|
}
|
|
16957
|
-
const l = leaf(child, fn2);
|
|
17023
|
+
const l = source ? sourceLeaf(child, fn2) : leaf(child, fn2);
|
|
16958
17024
|
l._def.fnSrc = src;
|
|
16959
17025
|
return l;
|
|
16960
17026
|
};
|
|
@@ -17338,7 +17404,7 @@ ${outerDecls.map((d) => " " + d).join("\n")}
|
|
|
17338
17404
|
case "optional":
|
|
17339
17405
|
return `optional(${kid(def.parser)})`;
|
|
17340
17406
|
case "attempt":
|
|
17341
|
-
return `attempt(${kid(def.parser)})`;
|
|
17407
|
+
return `attempt(${kid(def.parser)}${def.contain === true ? ", { contain: true }" : ""})`;
|
|
17342
17408
|
// `keepSeparators` is an opt-in expressed at the SEPARATOR, not in the options
|
|
17343
17409
|
// bag, so it must round-trip as `keepSeparator(sep)` — serializing it as an
|
|
17344
17410
|
// option would reconstruct a grammar whose call site no longer states its own
|
|
@@ -17357,7 +17423,7 @@ ${outerDecls.map((d) => " " + d).join("\n")}
|
|
|
17357
17423
|
return `token(${kid(def.parser)})`;
|
|
17358
17424
|
case "leaf": {
|
|
17359
17425
|
if (def.fnSrc === void 0) throw new Unserializable("leaf without fnSrc");
|
|
17360
|
-
return `_lf(${kid(def.parser)}, ${JSON.stringify(def.fnSrc)})`;
|
|
17426
|
+
return `_lf(${kid(def.parser)}, ${JSON.stringify(def.fnSrc)}${def.cstValue === "source" ? ", true" : ""})`;
|
|
17361
17427
|
}
|
|
17362
17428
|
case "label":
|
|
17363
17429
|
return `label(${JSON.stringify(def.label)}, ${kid(def.parser)})`;
|
|
@@ -17546,7 +17612,7 @@ function compileRuleMap(ruleMap, opts = {}) {
|
|
|
17546
17612
|
}
|
|
17547
17613
|
|
|
17548
17614
|
// src/version.ts
|
|
17549
|
-
var PARSEMAN_VERSION = "0.
|
|
17615
|
+
var PARSEMAN_VERSION = "0.52.0";
|
|
17550
17616
|
|
|
17551
17617
|
// src/compiler/compile-linkable-table.ts
|
|
17552
17618
|
function isLocal(rule) {
|
|
@@ -20239,7 +20305,7 @@ function coverageEntry(entry, collector, maps, trace) {
|
|
|
20239
20305
|
case "optional":
|
|
20240
20306
|
return optional(build(def.parser));
|
|
20241
20307
|
case "attempt": {
|
|
20242
|
-
const base2 = attempt(build(def.parser));
|
|
20308
|
+
const base2 = attempt(build(def.parser), def.contain === true ? { contain: true } : void 0);
|
|
20243
20309
|
const id = maps.attempts.get(parser2);
|
|
20244
20310
|
return id === void 0 ? base2 : {
|
|
20245
20311
|
...base2,
|
|
@@ -20259,7 +20325,7 @@ function coverageEntry(entry, collector, maps, trace) {
|
|
|
20259
20325
|
case "token":
|
|
20260
20326
|
return token(build(def.parser));
|
|
20261
20327
|
case "leaf":
|
|
20262
|
-
return leaf(build(def.parser), def.fn);
|
|
20328
|
+
return def.cstValue === "source" ? sourceLeaf(build(def.parser), def.fn) : leaf(build(def.parser), def.fn);
|
|
20263
20329
|
case "field":
|
|
20264
20330
|
return field(def.name, build(def.parser));
|
|
20265
20331
|
case "grammar":
|
|
@@ -20528,6 +20594,7 @@ export {
|
|
|
20528
20594
|
sequence,
|
|
20529
20595
|
shiftAbsolute,
|
|
20530
20596
|
siteToString,
|
|
20597
|
+
sourceLeaf,
|
|
20531
20598
|
startsWith,
|
|
20532
20599
|
token,
|
|
20533
20600
|
transform,
|