@hyperscale0/hsx 1.0.0-alpha.2 → 1.0.0-alpha.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/AUTHORS +1 -1
- package/CHANGELOG.md +31 -1
- package/README.md +5 -6
- package/SECURITY.md +13 -3
- package/dist/src/ast.d.ts +19 -0
- package/dist/src/ast.d.ts.map +1 -1
- package/dist/src/ast.js +26 -0
- package/dist/src/ast.js.map +1 -1
- package/dist/src/compile.d.ts.map +1 -1
- package/dist/src/compile.js +6 -2
- package/dist/src/compile.js.map +1 -1
- package/dist/src/limits.d.ts +22 -0
- package/dist/src/limits.d.ts.map +1 -0
- package/dist/src/limits.js +22 -0
- package/dist/src/limits.js.map +1 -0
- package/dist/src/parse.d.ts.map +1 -1
- package/dist/src/parse.js +53 -0
- package/dist/src/parse.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +1 -1
- package/src/ast.ts +38 -0
- package/src/compile.ts +6 -2
- package/src/limits.ts +21 -0
- package/src/parse.ts +58 -0
- package/src/version.ts +1 -1
package/AUTHORS
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Hyperscale LLC holds the copyright in this repository.
|
|
2
2
|
|
|
3
3
|
HSX was created at Hyperscale by the three founders of Hyperscale LLC, who
|
|
4
|
-
also created the UDL format and the Hyperscale platform:
|
|
4
|
+
also created the UDL format, the ADL format, and the Hyperscale platform:
|
|
5
5
|
|
|
6
6
|
Meshael AlBakaawi
|
|
7
7
|
Amir Ayub
|
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,35 @@ listed here.
|
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [1.0.0-alpha.3] - 2026-08-25
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- `compile()` no longer throws on a deeply nested source. Lists, blocks, calls,
|
|
19
|
+
and bindings are parsed by recursion and nothing bounded it, so a file
|
|
20
|
+
nesting past roughly 9,000 levels exhausted the call stack and a `RangeError`
|
|
21
|
+
escaped `compile()`, which SECURITY.md says never happens. Parsing stops at
|
|
22
|
+
the depth budget now and reports an ordinary parse diagnostic. The deepest
|
|
23
|
+
program in the corpus nests 5 levels.
|
|
24
|
+
- Diagnostic coordinates cost O(n + d log n) instead of O(n·d). `compile()`
|
|
25
|
+
resolved every diagnostic by rescanning the source from offset zero. On the
|
|
26
|
+
largest file this release will read, 262,144 bytes carrying one diagnostic
|
|
27
|
+
per two bytes, that was 10,304 ms of line and column arithmetic for 131,072
|
|
28
|
+
diagnostics while the parse itself took 18 ms. It scans once and
|
|
29
|
+
binary-searches now: same coordinates, 2.6 ms.
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- Two source limits, both checked before the program is read. A file over
|
|
34
|
+
262,144 UTF-8 bytes, the same ceiling UDL uses, is refused before the lexer
|
|
35
|
+
runs. Nesting is refused past a parser depth budget of 64.
|
|
36
|
+
|
|
37
|
+
The depth budget counts nested expressions and blocks, which is not the same
|
|
38
|
+
number as source levels: `key { … }` spends one per level and `key: { … }`
|
|
39
|
+
spends two, so the budget buys 63 levels of the first and 31 of the second.
|
|
40
|
+
`docs/reference.md` carries the conversion for every shape. Both refusals are
|
|
41
|
+
ordinary parse diagnostics, not exceptions.
|
|
42
|
+
|
|
14
43
|
## [1.0.0-alpha.2] - 2026-08-23
|
|
15
44
|
|
|
16
45
|
### Fixed
|
|
@@ -65,6 +94,7 @@ This is the first version published as a package anyone can install.
|
|
|
65
94
|
program that needs more is refused with a diagnostic saying so.
|
|
66
95
|
- **`party` takes no attribute block yet**, though the grammar parses one.
|
|
67
96
|
|
|
68
|
-
[Unreleased]: https://github.com/hyperscale0/hyperscale-hsx/compare/v1.0.0-alpha.
|
|
97
|
+
[Unreleased]: https://github.com/hyperscale0/hyperscale-hsx/compare/v1.0.0-alpha.3...HEAD
|
|
98
|
+
[1.0.0-alpha.3]: https://github.com/hyperscale0/hyperscale-hsx/compare/v1.0.0-alpha.2...v1.0.0-alpha.3
|
|
69
99
|
[1.0.0-alpha.2]: https://github.com/hyperscale0/hyperscale-hsx/compare/v1.0.0-alpha.1...v1.0.0-alpha.2
|
|
70
100
|
[1.0.0-alpha.1]: https://github.com/hyperscale0/hyperscale-hsx/releases/tag/v1.0.0-alpha.1
|
package/README.md
CHANGED
|
@@ -28,9 +28,8 @@ npm install @hyperscale0/hsx
|
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
Every release before 1.0.0 is an alpha, and `latest` follows the newest one, so
|
|
31
|
-
a bare install gets it.
|
|
32
|
-
|
|
33
|
-
until 1.0.0 a change to the surface ships as a minor bump, not a major.
|
|
31
|
+
a bare install gets it. Pin an exact version if you need one: until 1.0.0 a
|
|
32
|
+
change to the surface ships as a minor bump, not a major.
|
|
34
33
|
|
|
35
34
|
## A program
|
|
36
35
|
|
|
@@ -134,9 +133,9 @@ exported as `HSX_IR_VERSION`. A consumer reads that one integer to decide
|
|
|
134
133
|
whether it understands the document. It moves only when the emitted IR shape
|
|
135
134
|
changes in a way a consumer must notice.
|
|
136
135
|
|
|
137
|
-
**Package version** is this package's semver,
|
|
138
|
-
|
|
139
|
-
|
|
136
|
+
**Package version** is this package's semver, in `package.json`. It moves
|
|
137
|
+
whenever the compiler changes, including changes that only affect a
|
|
138
|
+
diagnostic's wording.
|
|
140
139
|
|
|
141
140
|
IR version 1 is unstable until the package reaches 1.0.0. Until then an alpha
|
|
142
141
|
release may change what the compiler emits, and every such change is listed in
|
package/SECURITY.md
CHANGED
|
@@ -23,9 +23,19 @@ executes, so the interesting failures are the ones a source file can cause:
|
|
|
23
23
|
whose fees move money the source did not authorise. A `valid` verdict on an
|
|
24
24
|
unsound program is the worst bug this package can have.
|
|
25
25
|
- **A program that makes the lexer, parser, checker, or lowering burn
|
|
26
|
-
unbounded time or memory.**
|
|
27
|
-
the
|
|
28
|
-
|
|
26
|
+
unbounded time or memory.** The schedule, split, and money-event limits bound
|
|
27
|
+
the output; `src/limits.ts` bounds the input, and a source over either of its
|
|
28
|
+
ceilings is refused with a diagnostic rather than read.
|
|
29
|
+
|
|
30
|
+
The stages behind that ceiling are linear, measured rather than assumed. The
|
|
31
|
+
lexer was timed on 21 adversarial inputs, one per branch of the scanner:
|
|
32
|
+
unterminated strings, unclosed comments, single-character invalid runs, one
|
|
33
|
+
quarter-megabyte invalid run, digit and percent soup, and interleaved open
|
|
34
|
+
delimiters. Across a 64x range of input size its cost per byte grew at most
|
|
35
|
+
1.44x, where a quadratic scanner would grow 64x. The worst admitted file
|
|
36
|
+
costs 9.8 ms to lex and 21.1 ms to compile. A payload that makes any stage
|
|
37
|
+
cost meaningfully more than that per byte is a finding worth reporting.
|
|
38
|
+
|
|
29
39
|
- **A crash.** Parsing and checking are total by design: they return
|
|
30
40
|
diagnostics, they never throw. A source file that throws out of `compile()`
|
|
31
41
|
is a bug even when the program is nonsense.
|
package/dist/src/ast.d.ts
CHANGED
|
@@ -20,6 +20,25 @@ export interface LineCol {
|
|
|
20
20
|
}
|
|
21
21
|
/** Convert a byte offset to a 1-indexed line/column position. */
|
|
22
22
|
export declare function lineColAt(source: string, offset: number): LineCol;
|
|
23
|
+
/**
|
|
24
|
+
* One source scanned once, so many offsets resolve without rescanning it.
|
|
25
|
+
* `lineColAt` walks from offset zero every time, which turns a run of d
|
|
26
|
+
* diagnostics over an n-byte source into O(n*d) work. A caller holding this
|
|
27
|
+
* pays O(n) once and O(log n) per offset.
|
|
28
|
+
*/
|
|
29
|
+
export interface LineIndex {
|
|
30
|
+
/** Source length, so `lineColIn` clamps exactly as `lineColAt` does. */
|
|
31
|
+
readonly length: number;
|
|
32
|
+
/** Offset of the first character of each line, ascending. Line 1 starts at 0. */
|
|
33
|
+
readonly starts: readonly number[];
|
|
34
|
+
}
|
|
35
|
+
/** Scan a source once for the offset every line starts at. */
|
|
36
|
+
export declare function lineIndex(source: string): LineIndex;
|
|
37
|
+
/**
|
|
38
|
+
* Resolve one offset against a prebuilt index. Returns exactly what
|
|
39
|
+
* `lineColAt` returns for the same source and offset.
|
|
40
|
+
*/
|
|
41
|
+
export declare function lineColIn(index: LineIndex, offset: number): LineCol;
|
|
23
42
|
export interface IdentExpr {
|
|
24
43
|
readonly kind: "ident";
|
|
25
44
|
readonly name: string;
|
package/dist/src/ast.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"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"}
|
package/dist/src/ast.js
CHANGED
|
@@ -19,4 +19,30 @@ export function lineColAt(source, offset) {
|
|
|
19
19
|
}
|
|
20
20
|
return { column: clamped - lineStart + 1, line };
|
|
21
21
|
}
|
|
22
|
+
/** Scan a source once for the offset every line starts at. */
|
|
23
|
+
export function lineIndex(source) {
|
|
24
|
+
const starts = [0];
|
|
25
|
+
for (let index = 0; index < source.length; index += 1) {
|
|
26
|
+
if (source.charCodeAt(index) === 10)
|
|
27
|
+
starts.push(index + 1);
|
|
28
|
+
}
|
|
29
|
+
return { length: source.length, starts };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Resolve one offset against a prebuilt index. Returns exactly what
|
|
33
|
+
* `lineColAt` returns for the same source and offset.
|
|
34
|
+
*/
|
|
35
|
+
export function lineColIn(index, offset) {
|
|
36
|
+
const clamped = Math.max(0, Math.min(offset, index.length));
|
|
37
|
+
let low = 0;
|
|
38
|
+
let high = index.starts.length - 1;
|
|
39
|
+
while (low < high) {
|
|
40
|
+
const middle = Math.floor((low + high + 1) / 2);
|
|
41
|
+
if (index.starts[middle] <= clamped)
|
|
42
|
+
low = middle;
|
|
43
|
+
else
|
|
44
|
+
high = middle - 1;
|
|
45
|
+
}
|
|
46
|
+
return { column: clamped - index.starts[low] + 1, line: low + 1 };
|
|
47
|
+
}
|
|
22
48
|
//# sourceMappingURL=ast.js.map
|
package/dist/src/ast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,iEAAiE;AACjE,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,MAAc;IACtD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,CAAC;YACV,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;AACnD,CAAC"}
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,iEAAiE;AACjE,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,MAAc;IACtD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,CAAC;YACV,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;AACnD,CAAC;AAeD,8DAA8D;AAC9D,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,KAAgB,EAAE,MAAc;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,IAAK,KAAK,CAAC,MAAM,CAAC,MAAM,CAAY,IAAI,OAAO;YAAE,GAAG,GAAG,MAAM,CAAC;;YACzD,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,GAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAY,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;AAChF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpC,KAAK,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtD,UAAU,iBAAiB;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;CAC7C;AAED,UAAU,gBAAgB;IACxB,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpC,KAAK,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtD,UAAU,iBAAiB;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;CAC7C;AAED,UAAU,gBAAgB;IACxB,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAsDrD"}
|
package/dist/src/compile.js
CHANGED
|
@@ -10,14 +10,18 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Every diagnostic points at SOURCE coordinates, never at lowered IR paths.
|
|
12
12
|
*/
|
|
13
|
-
import {
|
|
13
|
+
import { lineColIn, lineIndex } from "./ast.js";
|
|
14
14
|
import { checkProgram } from "./check.js";
|
|
15
15
|
import { lowerProgram } from "./lower.js";
|
|
16
16
|
import { parseProgram } from "./parse.js";
|
|
17
17
|
export function compile(source) {
|
|
18
18
|
const diagnostics = [];
|
|
19
|
+
// Scanned once here rather than per diagnostic: a source can carry one
|
|
20
|
+
// diagnostic per two bytes, and rescanning from offset zero for each one
|
|
21
|
+
// made a 128 KB file cost 2.4 seconds of coordinate arithmetic.
|
|
22
|
+
const lines = lineIndex(source);
|
|
19
23
|
const at = (stage, severity, message, offset) => {
|
|
20
|
-
const position =
|
|
24
|
+
const position = lineColIn(lines, offset);
|
|
21
25
|
diagnostics.push({
|
|
22
26
|
column: position.column,
|
|
23
27
|
line: position.line,
|
package/dist/src/compile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA+B1C,MAAM,UAAU,OAAO,CAAC,MAAc;IACpC,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,uEAAuE;IACvE,yEAAyE;IACzE,gEAAgE;IAChE,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,GAAG,CACT,KAAiC,EACjC,QAAuC,EACvC,OAAe,EACf,MAAc,EACR,EAAE;QACR,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1C,WAAW,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,OAAO;YACP,QAAQ;YACR,KAAK;SACN,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QAC5C,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC7C,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YACzC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC7C,CAAC;IAED,OAAO;QACL,SAAS,EAAE;YACT,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ;YACtC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK;SACjC;QACD,WAAW;QACX,OAAO,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;KACtD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the compiler refuses to read, as opposed to what it refuses to emit.
|
|
3
|
+
* `MONEY_EVENT_BUDGET` in lower.ts bounds the OUTPUT; these bound the INPUT,
|
|
4
|
+
* which is the side an attacker controls.
|
|
5
|
+
*
|
|
6
|
+
* Both numbers are set against the 34 real programs this compiler is tested
|
|
7
|
+
* on. The deepest nests 5 levels; the largest is 13,934 bytes.
|
|
8
|
+
*/
|
|
9
|
+
export declare const HSX_LIMITS: Readonly<{
|
|
10
|
+
/**
|
|
11
|
+
* How deep the recursive-descent productions may nest. Measured on this
|
|
12
|
+
* machine, the parser exhausted the call stack at 9,217 nested blocks and
|
|
13
|
+
* threw a RangeError out of `compile`, which SECURITY.md promises never
|
|
14
|
+
* happens. The crash point moves with whatever stack the process has left,
|
|
15
|
+
* so the ceiling is declared here instead of discovered at runtime. 64 is
|
|
16
|
+
* 12x the deepest real program and 144x below that measured crash.
|
|
17
|
+
*/
|
|
18
|
+
maxNestingDepth: 64;
|
|
19
|
+
/** Matches `UDL_LIMITS.maxSourceBytes`. 18x the largest real program. */
|
|
20
|
+
maxSourceBytes: number;
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/limits.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU;IACrB;;;;;;;OAOG;;IAEH,yEAAyE;;EAEzE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the compiler refuses to read, as opposed to what it refuses to emit.
|
|
3
|
+
* `MONEY_EVENT_BUDGET` in lower.ts bounds the OUTPUT; these bound the INPUT,
|
|
4
|
+
* which is the side an attacker controls.
|
|
5
|
+
*
|
|
6
|
+
* Both numbers are set against the 34 real programs this compiler is tested
|
|
7
|
+
* on. The deepest nests 5 levels; the largest is 13,934 bytes.
|
|
8
|
+
*/
|
|
9
|
+
export const HSX_LIMITS = Object.freeze({
|
|
10
|
+
/**
|
|
11
|
+
* How deep the recursive-descent productions may nest. Measured on this
|
|
12
|
+
* machine, the parser exhausted the call stack at 9,217 nested blocks and
|
|
13
|
+
* threw a RangeError out of `compile`, which SECURITY.md promises never
|
|
14
|
+
* happens. The crash point moves with whatever stack the process has left,
|
|
15
|
+
* so the ceiling is declared here instead of discovered at runtime. 64 is
|
|
16
|
+
* 12x the deepest real program and 144x below that measured crash.
|
|
17
|
+
*/
|
|
18
|
+
maxNestingDepth: 64,
|
|
19
|
+
/** Matches `UDL_LIMITS.maxSourceBytes`. 18x the largest real program. */
|
|
20
|
+
maxSourceBytes: 256 * 1_024,
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/limits.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC;;;;;;;OAOG;IACH,eAAe,EAAE,EAAE;IACnB,yEAAyE;IACzE,cAAc,EAAE,GAAG,GAAG,KAAK;CAC5B,CAAC,CAAC"}
|
package/dist/src/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAIV,UAAU,EAOV,OAAO,EAKR,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAIV,UAAU,EAOV,OAAO,EAKR,MAAM,UAAU,CAAC;AAIlB,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAqBxD;AA8jBD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK5D"}
|
package/dist/src/parse.js
CHANGED
|
@@ -6,7 +6,23 @@
|
|
|
6
6
|
* source spans.
|
|
7
7
|
*/
|
|
8
8
|
import { lex } from "./lex.js";
|
|
9
|
+
import { HSX_LIMITS } from "./limits.js";
|
|
9
10
|
export function parseProgram(source) {
|
|
11
|
+
// Measured before lexing. The ceiling counts UTF-8 bytes, so the encode is
|
|
12
|
+
// the measurement rather than an extra step: `source.length` counts UTF-16
|
|
13
|
+
// code units, which is a third of the size for CJK text.
|
|
14
|
+
const sourceBytes = new TextEncoder().encode(source).byteLength;
|
|
15
|
+
if (sourceBytes > HSX_LIMITS.maxSourceBytes) {
|
|
16
|
+
return {
|
|
17
|
+
diagnostics: [
|
|
18
|
+
{
|
|
19
|
+
message: `this file is ${sourceBytes} bytes; HSX reads at most ${HSX_LIMITS.maxSourceBytes}`,
|
|
20
|
+
span: { end: 0, start: 0 },
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
program: { decls: [], span: { end: 0, start: 0 } },
|
|
24
|
+
};
|
|
25
|
+
}
|
|
10
26
|
const lexed = lex(source);
|
|
11
27
|
const parser = new Parser(lexed.tokens, [...lexed.diagnostics]);
|
|
12
28
|
const program = parser.parseProgram(source.length);
|
|
@@ -16,6 +32,7 @@ class Parser {
|
|
|
16
32
|
diagnostics;
|
|
17
33
|
tokens;
|
|
18
34
|
index = 0;
|
|
35
|
+
depth = 0;
|
|
19
36
|
constructor(tokens, diagnostics) {
|
|
20
37
|
this.tokens = tokens;
|
|
21
38
|
this.diagnostics = diagnostics;
|
|
@@ -199,7 +216,36 @@ class Parser {
|
|
|
199
216
|
return { body, kind: "port", name, span: this.spanFrom(start.span) };
|
|
200
217
|
}
|
|
201
218
|
// --- Entries and expressions ---------------------------------------------
|
|
219
|
+
/**
|
|
220
|
+
* Every recursive edge in the grammar passes through `parseExpr` or
|
|
221
|
+
* `parseBlock`: the list, block, call-argument, and binding-type branches of
|
|
222
|
+
* one, and the block to entry to block cycle of the other. Guarding those
|
|
223
|
+
* two entry points is therefore the whole ceiling, and the guard lives in
|
|
224
|
+
* one place instead of five.
|
|
225
|
+
*
|
|
226
|
+
* The budget counts those entries, not source levels, and the two are not
|
|
227
|
+
* the same number: `k { ... }` spends one per level, while `k: { ... }`
|
|
228
|
+
* spends two because the colon branch enters `parseExpr` and `parseExpr`
|
|
229
|
+
* then enters `parseBlock`. So the message names a budget rather than a
|
|
230
|
+
* depth. A builder told they exceeded "64 levels" would count 32 braces and
|
|
231
|
+
* have nothing to act on.
|
|
232
|
+
*/
|
|
233
|
+
enterNesting(span) {
|
|
234
|
+
if (this.depth >= HSX_LIMITS.maxNestingDepth) {
|
|
235
|
+
this.error(span, `this nests past the parser's depth budget of ${HSX_LIMITS.maxNestingDepth}; flatten it`);
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
this.depth += 1;
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
202
241
|
parseBlock() {
|
|
242
|
+
if (!this.enterNesting(this.peek().span))
|
|
243
|
+
return undefined;
|
|
244
|
+
const block = this.parseBlockUnguarded();
|
|
245
|
+
this.depth -= 1;
|
|
246
|
+
return block;
|
|
247
|
+
}
|
|
248
|
+
parseBlockUnguarded() {
|
|
203
249
|
const open = this.advance();
|
|
204
250
|
const entries = [];
|
|
205
251
|
while (!this.atPunct("}") && !this.at("eof")) {
|
|
@@ -265,6 +311,13 @@ class Parser {
|
|
|
265
311
|
};
|
|
266
312
|
}
|
|
267
313
|
parseExpr() {
|
|
314
|
+
if (!this.enterNesting(this.peek().span))
|
|
315
|
+
return undefined;
|
|
316
|
+
const expr = this.parseExprUnguarded();
|
|
317
|
+
this.depth -= 1;
|
|
318
|
+
return expr;
|
|
319
|
+
}
|
|
320
|
+
parseExprUnguarded() {
|
|
268
321
|
const token = this.peek();
|
|
269
322
|
if (token.kind === "string") {
|
|
270
323
|
this.advance();
|
package/dist/src/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"}
|
package/dist/src/version.d.ts
CHANGED
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
/** Stamped into every compiled HSX-JSON document as `hsx`. */
|
|
13
13
|
export declare const HSX_IR_VERSION = 1;
|
|
14
14
|
/** Kept equal to the package.json version by `test/spec.spec.ts`. */
|
|
15
|
-
export declare const HSX_VERSION = "1.0.0-alpha.
|
|
15
|
+
export declare const HSX_VERSION = "1.0.0-alpha.3";
|
|
16
16
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/src/version.js
CHANGED
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
/** Stamped into every compiled HSX-JSON document as `hsx`. */
|
|
13
13
|
export const HSX_IR_VERSION = 1;
|
|
14
14
|
/** Kept equal to the package.json version by `test/spec.spec.ts`. */
|
|
15
|
-
export const HSX_VERSION = "1.0.0-alpha.
|
|
15
|
+
export const HSX_VERSION = "1.0.0-alpha.3";
|
|
16
16
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED
package/src/ast.ts
CHANGED
|
@@ -35,6 +35,44 @@ export function lineColAt(source: string, offset: number): LineCol {
|
|
|
35
35
|
return { column: clamped - lineStart + 1, line };
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
/**
|
|
39
|
+
* One source scanned once, so many offsets resolve without rescanning it.
|
|
40
|
+
* `lineColAt` walks from offset zero every time, which turns a run of d
|
|
41
|
+
* diagnostics over an n-byte source into O(n*d) work. A caller holding this
|
|
42
|
+
* pays O(n) once and O(log n) per offset.
|
|
43
|
+
*/
|
|
44
|
+
export interface LineIndex {
|
|
45
|
+
/** Source length, so `lineColIn` clamps exactly as `lineColAt` does. */
|
|
46
|
+
readonly length: number;
|
|
47
|
+
/** Offset of the first character of each line, ascending. Line 1 starts at 0. */
|
|
48
|
+
readonly starts: readonly number[];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Scan a source once for the offset every line starts at. */
|
|
52
|
+
export function lineIndex(source: string): LineIndex {
|
|
53
|
+
const starts = [0];
|
|
54
|
+
for (let index = 0; index < source.length; index += 1) {
|
|
55
|
+
if (source.charCodeAt(index) === 10) starts.push(index + 1);
|
|
56
|
+
}
|
|
57
|
+
return { length: source.length, starts };
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Resolve one offset against a prebuilt index. Returns exactly what
|
|
62
|
+
* `lineColAt` returns for the same source and offset.
|
|
63
|
+
*/
|
|
64
|
+
export function lineColIn(index: LineIndex, offset: number): LineCol {
|
|
65
|
+
const clamped = Math.max(0, Math.min(offset, index.length));
|
|
66
|
+
let low = 0;
|
|
67
|
+
let high = index.starts.length - 1;
|
|
68
|
+
while (low < high) {
|
|
69
|
+
const middle = Math.floor((low + high + 1) / 2);
|
|
70
|
+
if ((index.starts[middle] as number) <= clamped) low = middle;
|
|
71
|
+
else high = middle - 1;
|
|
72
|
+
}
|
|
73
|
+
return { column: clamped - (index.starts[low] as number) + 1, line: low + 1 };
|
|
74
|
+
}
|
|
75
|
+
|
|
38
76
|
// --- Expressions -----------------------------------------------------------
|
|
39
77
|
|
|
40
78
|
export interface IdentExpr {
|
package/src/compile.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* Every diagnostic points at SOURCE coordinates, never at lowered IR paths.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { lineColIn, lineIndex } from "./ast.ts";
|
|
15
15
|
import { checkProgram } from "./check.ts";
|
|
16
16
|
import { lowerProgram } from "./lower.ts";
|
|
17
17
|
import { parseProgram } from "./parse.ts";
|
|
@@ -47,13 +47,17 @@ export interface CompileResult {
|
|
|
47
47
|
|
|
48
48
|
export function compile(source: string): CompileResult {
|
|
49
49
|
const diagnostics: CompileDiagnostic[] = [];
|
|
50
|
+
// Scanned once here rather than per diagnostic: a source can carry one
|
|
51
|
+
// diagnostic per two bytes, and rescanning from offset zero for each one
|
|
52
|
+
// made a 128 KB file cost 2.4 seconds of coordinate arithmetic.
|
|
53
|
+
const lines = lineIndex(source);
|
|
50
54
|
const at = (
|
|
51
55
|
stage: CompileDiagnostic["stage"],
|
|
52
56
|
severity: CompileDiagnostic["severity"],
|
|
53
57
|
message: string,
|
|
54
58
|
offset: number,
|
|
55
59
|
): void => {
|
|
56
|
-
const position =
|
|
60
|
+
const position = lineColIn(lines, offset);
|
|
57
61
|
diagnostics.push({
|
|
58
62
|
column: position.column,
|
|
59
63
|
line: position.line,
|
package/src/limits.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the compiler refuses to read, as opposed to what it refuses to emit.
|
|
3
|
+
* `MONEY_EVENT_BUDGET` in lower.ts bounds the OUTPUT; these bound the INPUT,
|
|
4
|
+
* which is the side an attacker controls.
|
|
5
|
+
*
|
|
6
|
+
* Both numbers are set against the 34 real programs this compiler is tested
|
|
7
|
+
* on. The deepest nests 5 levels; the largest is 13,934 bytes.
|
|
8
|
+
*/
|
|
9
|
+
export const HSX_LIMITS = Object.freeze({
|
|
10
|
+
/**
|
|
11
|
+
* How deep the recursive-descent productions may nest. Measured on this
|
|
12
|
+
* machine, the parser exhausted the call stack at 9,217 nested blocks and
|
|
13
|
+
* threw a RangeError out of `compile`, which SECURITY.md promises never
|
|
14
|
+
* happens. The crash point moves with whatever stack the process has left,
|
|
15
|
+
* so the ceiling is declared here instead of discovered at runtime. 64 is
|
|
16
|
+
* 12x the deepest real program and 144x below that measured crash.
|
|
17
|
+
*/
|
|
18
|
+
maxNestingDepth: 64,
|
|
19
|
+
/** Matches `UDL_LIMITS.maxSourceBytes`. 18x the largest real program. */
|
|
20
|
+
maxSourceBytes: 256 * 1_024,
|
|
21
|
+
});
|
package/src/parse.ts
CHANGED
|
@@ -24,6 +24,7 @@ import type {
|
|
|
24
24
|
StringExpr,
|
|
25
25
|
} from "./ast.ts";
|
|
26
26
|
import { lex, type Token } from "./lex.ts";
|
|
27
|
+
import { HSX_LIMITS } from "./limits.ts";
|
|
27
28
|
|
|
28
29
|
export interface ParseResult {
|
|
29
30
|
readonly diagnostics: readonly Diagnostic[];
|
|
@@ -31,6 +32,22 @@ export interface ParseResult {
|
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
export function parseProgram(source: string): ParseResult {
|
|
35
|
+
// Measured before lexing. The ceiling counts UTF-8 bytes, so the encode is
|
|
36
|
+
// the measurement rather than an extra step: `source.length` counts UTF-16
|
|
37
|
+
// code units, which is a third of the size for CJK text.
|
|
38
|
+
const sourceBytes = new TextEncoder().encode(source).byteLength;
|
|
39
|
+
if (sourceBytes > HSX_LIMITS.maxSourceBytes) {
|
|
40
|
+
return {
|
|
41
|
+
diagnostics: [
|
|
42
|
+
{
|
|
43
|
+
message: `this file is ${sourceBytes} bytes; HSX reads at most ${HSX_LIMITS.maxSourceBytes}`,
|
|
44
|
+
span: { end: 0, start: 0 },
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
program: { decls: [], span: { end: 0, start: 0 } },
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
34
51
|
const lexed = lex(source);
|
|
35
52
|
const parser = new Parser(lexed.tokens, [...lexed.diagnostics]);
|
|
36
53
|
const program = parser.parseProgram(source.length);
|
|
@@ -41,6 +58,7 @@ class Parser {
|
|
|
41
58
|
readonly diagnostics: Diagnostic[];
|
|
42
59
|
private readonly tokens: readonly Token[];
|
|
43
60
|
private index = 0;
|
|
61
|
+
private depth = 0;
|
|
44
62
|
|
|
45
63
|
constructor(tokens: readonly Token[], diagnostics: Diagnostic[]) {
|
|
46
64
|
this.tokens = tokens;
|
|
@@ -270,7 +288,40 @@ class Parser {
|
|
|
270
288
|
|
|
271
289
|
// --- Entries and expressions ---------------------------------------------
|
|
272
290
|
|
|
291
|
+
/**
|
|
292
|
+
* Every recursive edge in the grammar passes through `parseExpr` or
|
|
293
|
+
* `parseBlock`: the list, block, call-argument, and binding-type branches of
|
|
294
|
+
* one, and the block to entry to block cycle of the other. Guarding those
|
|
295
|
+
* two entry points is therefore the whole ceiling, and the guard lives in
|
|
296
|
+
* one place instead of five.
|
|
297
|
+
*
|
|
298
|
+
* The budget counts those entries, not source levels, and the two are not
|
|
299
|
+
* the same number: `k { ... }` spends one per level, while `k: { ... }`
|
|
300
|
+
* spends two because the colon branch enters `parseExpr` and `parseExpr`
|
|
301
|
+
* then enters `parseBlock`. So the message names a budget rather than a
|
|
302
|
+
* depth. A builder told they exceeded "64 levels" would count 32 braces and
|
|
303
|
+
* have nothing to act on.
|
|
304
|
+
*/
|
|
305
|
+
private enterNesting(span: Span): boolean {
|
|
306
|
+
if (this.depth >= HSX_LIMITS.maxNestingDepth) {
|
|
307
|
+
this.error(
|
|
308
|
+
span,
|
|
309
|
+
`this nests past the parser's depth budget of ${HSX_LIMITS.maxNestingDepth}; flatten it`,
|
|
310
|
+
);
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
this.depth += 1;
|
|
314
|
+
return true;
|
|
315
|
+
}
|
|
316
|
+
|
|
273
317
|
private parseBlock(): BlockExpr | undefined {
|
|
318
|
+
if (!this.enterNesting(this.peek().span)) return undefined;
|
|
319
|
+
const block = this.parseBlockUnguarded();
|
|
320
|
+
this.depth -= 1;
|
|
321
|
+
return block;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
private parseBlockUnguarded(): BlockExpr | undefined {
|
|
274
325
|
const open = this.advance();
|
|
275
326
|
const entries: Entry[] = [];
|
|
276
327
|
while (!this.atPunct("}") && !this.at("eof")) {
|
|
@@ -337,6 +388,13 @@ class Parser {
|
|
|
337
388
|
}
|
|
338
389
|
|
|
339
390
|
private parseExpr(): Expr | undefined {
|
|
391
|
+
if (!this.enterNesting(this.peek().span)) return undefined;
|
|
392
|
+
const expr = this.parseExprUnguarded();
|
|
393
|
+
this.depth -= 1;
|
|
394
|
+
return expr;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
private parseExprUnguarded(): Expr | undefined {
|
|
340
398
|
const token = this.peek();
|
|
341
399
|
|
|
342
400
|
if (token.kind === "string") {
|
package/src/version.ts
CHANGED