@scriptc/compiler 0.2.2 → 0.2.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/ambient/scriptc-node-fallback.d.ts +99 -27
- package/dist/backend/cycle-analysis.js +63 -50
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +51 -0
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/llvm/borrowed-receivers.d.ts +9 -0
- package/dist/backend/llvm/borrowed-receivers.js +58 -0
- package/dist/backend/llvm/borrowed-receivers.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.d.ts +20 -0
- package/dist/backend/llvm/call-lifetimes.js +179 -0
- package/dist/backend/llvm/call-lifetimes.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.test.d.ts +1 -0
- package/dist/backend/llvm/call-lifetimes.test.js +205 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +2 -2
- package/dist/backend/llvm/dyn.js +79 -35
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +33 -0
- package/dist/backend/llvm/emitter.js +189 -16
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +20 -1
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +1 -1
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +42 -5
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +70 -13
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +1 -1
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +6 -5
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +1 -1
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +5 -10
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +35 -1
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.d.ts +44 -0
- package/dist/backend/llvm/local-array-reads.js +313 -0
- package/dist/backend/llvm/local-array-reads.js.map +1 -0
- package/dist/backend/llvm/local-array-reads.test.d.ts +1 -0
- package/dist/backend/llvm/local-array-reads.test.js +446 -0
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.d.ts +36 -0
- package/dist/backend/llvm/map-read-lifetimes.js +128 -0
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.test.d.ts +1 -0
- package/dist/backend/llvm/map-read-lifetimes.test.js +123 -0
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -0
- package/dist/backend/llvm/shapes.js +1 -0
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/split.js +15 -5
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +17 -0
- package/dist/backend/llvm/split.test.js.map +1 -1
- package/dist/backend/llvm/stack-unions.d.ts +20 -0
- package/dist/backend/llvm/stack-unions.js +61 -0
- package/dist/backend/llvm/stack-unions.js.map +1 -0
- package/dist/backend/llvm/stack-unions.test.d.ts +1 -0
- package/dist/backend/llvm/stack-unions.test.js +241 -0
- package/dist/backend/llvm/stack-unions.test.js.map +1 -0
- package/dist/backend/llvm/string-lifetimes.d.ts +12 -0
- package/dist/backend/llvm/string-lifetimes.js +70 -0
- package/dist/backend/llvm/string-lifetimes.js.map +1 -0
- package/dist/backend/llvm/string-lifetimes.test.d.ts +1 -0
- package/dist/backend/llvm/string-lifetimes.test.js +230 -0
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -0
- package/dist/backend/mangle.d.ts +2 -0
- package/dist/backend/mangle.js +4 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/may-throw.js +67 -29
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +104 -1
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +2 -2
- package/dist/backend/native-toolchain.js +2 -0
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/frontend/input-tracker.js +3 -3
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +38 -2
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.d.ts +31 -0
- package/dist/frontend/lowering/collection-ingestion.js +215 -0
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -0
- package/dist/frontend/lowering/containers/bytes.js +2 -0
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/import-meta.d.ts +10 -0
- package/dist/frontend/lowering/import-meta.js +52 -0
- package/dist/frontend/lowering/import-meta.js.map +1 -0
- package/dist/frontend/lowering/lower-assert.js +105 -41
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +2 -0
- package/dist/frontend/lowering/lower-builtin-values.js +22 -1
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-builtins.d.ts +3 -13
- package/dist/frontend/lowering/lower-builtins.js +150 -46
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +6 -3
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +4 -4
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +5 -1
- package/dist/frontend/lowering/lower-containers.js +40 -3
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +35 -41
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +43 -0
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +72 -68
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-system-errors.d.ts +6 -0
- package/dist/frontend/lowering/lower-system-errors.js +29 -0
- package/dist/frontend/lowering/lower-system-errors.js.map +1 -0
- package/dist/frontend/lowering/lowerer.d.ts +4 -3
- package/dist/frontend/lowering/lowerer.js +50 -22
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +2 -2
- package/dist/frontend/lowering/surfaces.js +69 -21
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/module-syntax.d.ts +1 -1
- package/dist/frontend/module-syntax.js +8 -1
- package/dist/frontend/module-syntax.js.map +1 -1
- package/dist/frontend/module-syntax.test.js +10 -0
- package/dist/frontend/module-syntax.test.js.map +1 -1
- package/dist/frontend/npm.d.ts +4 -0
- package/dist/frontend/npm.js +86 -33
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/npm.test.js +103 -0
- package/dist/frontend/npm.test.js.map +1 -1
- package/dist/frontend/pipeline-native.js +2 -1
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/services-node.js +3 -2
- package/dist/frontend/services-node.js.map +1 -1
- package/dist/frontend/services.d.ts +5 -1
- package/dist/frontend/services.js +9 -1
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +21 -0
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +2 -0
- package/dist/frontend/ts7/ast-node.js +30 -4
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +60 -1
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/type-mapper.js +6 -0
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +1 -0
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +7 -0
- package/dist/ir/integer-loops.js +23 -0
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.d.ts +1 -0
- package/dist/ir/integer-loops.test.js +41 -0
- package/dist/ir/integer-loops.test.js.map +1 -0
- package/dist/ir/ir.d.ts +21 -17
- package/dist/ir/ir.js +43 -9
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +18 -0
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/validate.js +161 -76
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +227 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.js +9 -2
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/fence-eval.test.d.ts +1 -0
- package/dist/library/fence-eval.test.js +21 -0
- package/dist/library/fence-eval.test.js.map +1 -0
- package/dist/native/runtime-typescript.d.ts +4 -0
- package/dist/native/runtime-typescript.js +61 -0
- package/dist/native/runtime-typescript.js.map +1 -0
- package/dist/native/runtime-typescript.test.d.ts +1 -0
- package/dist/native/runtime-typescript.test.js +41 -0
- package/dist/native/runtime-typescript.test.js.map +1 -0
- package/package.json +20 -20
- package/surface-manifest.json +271 -17
|
@@ -1099,7 +1099,18 @@ declare module "node:fs" {
|
|
|
1099
1099
|
export function chmodSync(path: string, mode: number): void;
|
|
1100
1100
|
export function fchmodSync(fd: number, mode: number): void;
|
|
1101
1101
|
export function fsyncSync(fd: number): void;
|
|
1102
|
-
export function linkSync(existingPath: string, newPath: string): void;
|
|
1102
|
+
export function linkSync(existingPath: string | Uint8Array | URL, newPath: string | Uint8Array | URL): void;
|
|
1103
|
+
export function symlinkSync(target: string | Uint8Array | URL, path: string | Uint8Array | URL, type?: string | null): void;
|
|
1104
|
+
export function symlink(target: string | Uint8Array | URL, path: string | Uint8Array | URL, callback: (err: NodeJS.ErrnoException | null) => void): void;
|
|
1105
|
+
export function symlink(target: string | Uint8Array | URL, path: string | Uint8Array | URL, type: string | null | undefined, callback: (err: NodeJS.ErrnoException | null) => void): void;
|
|
1106
|
+
export function link(existingPath: string | Uint8Array | URL, newPath: string | Uint8Array | URL, callback: (err: NodeJS.ErrnoException | null) => void): void;
|
|
1107
|
+
export function readlink(path: string | Uint8Array | URL, callback: (err: NodeJS.ErrnoException | null, target: string) => void): void;
|
|
1108
|
+
export function readlink(path: string | Uint8Array | URL, options: "buffer" | { encoding: "buffer" }, callback: (err: NodeJS.ErrnoException | null, target: Buffer) => void): void;
|
|
1109
|
+
export function readlink(path: string | Uint8Array | URL, options: BufferEncoding | { encoding?: BufferEncoding | null } | null, callback: (err: NodeJS.ErrnoException | null, target: string) => void): void;
|
|
1110
|
+
export function readlink(path: string | Uint8Array | URL, options: string | { encoding?: string | null } | null, callback: (err: NodeJS.ErrnoException | null, target: string | Buffer) => void): void;
|
|
1111
|
+
export function readlinkSync(path: string | Uint8Array | URL, options: "buffer" | { encoding: "buffer" }): Buffer;
|
|
1112
|
+
export function readlinkSync(path: string | Uint8Array | URL, options?: BufferEncoding | { encoding?: BufferEncoding | null } | null): string;
|
|
1113
|
+
export function readlinkSync(path: string | Uint8Array | URL, options: string | { encoding?: string | null } | null): string | Buffer;
|
|
1103
1114
|
export function chownSync(path: string, uid: number, gid: number): void;
|
|
1104
1115
|
/* The 2-argument form only (Node's mode flags have no lowering). The
|
|
1105
1116
|
* destination is created or truncated carrying the SOURCE's mode. */
|
|
@@ -1175,6 +1186,12 @@ declare module "node:fs" {
|
|
|
1175
1186
|
export function closeSync(fd: number): void;
|
|
1176
1187
|
export function fdatasyncSync(fd: number): void;
|
|
1177
1188
|
export function ftruncateSync(fd: number, len?: number): void;
|
|
1189
|
+
export function utimesSync(path: string | Uint8Array | URL, atime: number | string | Date, mtime: number | string | Date): void;
|
|
1190
|
+
export function futimesSync(fd: number, atime: number | string | Date, mtime: number | string | Date): void;
|
|
1191
|
+
export function lutimesSync(path: string | Uint8Array | URL, atime: number | string | Date, mtime: number | string | Date): void;
|
|
1192
|
+
export function utimes(path: string | Uint8Array | URL, atime: number | string | Date, mtime: number | string | Date, callback: (err: NodeJS.ErrnoException | null) => void): void;
|
|
1193
|
+
export function futimes(fd: number, atime: number | string | Date, mtime: number | string | Date, callback: (err: NodeJS.ErrnoException | null) => void): void;
|
|
1194
|
+
export function lutimes(path: string | Uint8Array | URL, atime: number | string | Date, mtime: number | string | Date, callback: (err: NodeJS.ErrnoException | null) => void): void;
|
|
1178
1195
|
export function readvSync(fd: number, buffers: Uint8Array[], position?: number | null): number;
|
|
1179
1196
|
export function writevSync(fd: number, buffers: Uint8Array[], position?: number | null): number;
|
|
1180
1197
|
/* Read into a caller buffer from the fd's current position when position
|
|
@@ -1208,16 +1225,25 @@ declare module "node:fs" {
|
|
|
1208
1225
|
}
|
|
1209
1226
|
/* statfs(2)/statvfs(3) — the filesystem-capacity snapshot (the fields
|
|
1210
1227
|
* Node's statfsSync reports; bavail × bsize is the free-space probe). */
|
|
1211
|
-
export interface
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
}
|
|
1220
|
-
export
|
|
1228
|
+
export interface StatsFsBase<T> {
|
|
1229
|
+
type: T;
|
|
1230
|
+
bsize: T;
|
|
1231
|
+
blocks: T;
|
|
1232
|
+
bfree: T;
|
|
1233
|
+
bavail: T;
|
|
1234
|
+
files: T;
|
|
1235
|
+
ffree: T;
|
|
1236
|
+
}
|
|
1237
|
+
export interface StatsFs extends StatsFsBase<number> {}
|
|
1238
|
+
export interface BigIntStatsFs extends StatsFsBase<bigint> {}
|
|
1239
|
+
export interface StatFsOptions { bigint?: boolean; }
|
|
1240
|
+
export function statfsSync(path: string | Uint8Array | URL, options?: StatFsOptions & { bigint?: false }): StatsFs;
|
|
1241
|
+
export function statfsSync(path: string | Uint8Array | URL, options: StatFsOptions & { bigint: true }): BigIntStatsFs;
|
|
1242
|
+
export function statfsSync(path: string | Uint8Array | URL, options?: StatFsOptions): StatsFs | BigIntStatsFs;
|
|
1243
|
+
export function statfs(path: string | Uint8Array | URL, callback: (err: NodeJS.ErrnoException | null, stats: StatsFs) => void): void;
|
|
1244
|
+
export function statfs(path: string | Uint8Array | URL, options: (StatFsOptions & { bigint?: false }) | undefined, callback: (err: NodeJS.ErrnoException | null, stats: StatsFs) => void): void;
|
|
1245
|
+
export function statfs(path: string | Uint8Array | URL, options: StatFsOptions & { bigint: true }, callback: (err: NodeJS.ErrnoException | null, stats: BigIntStatsFs) => void): void;
|
|
1246
|
+
export function statfs(path: string | Uint8Array | URL, options: StatFsOptions | undefined, callback: (err: NodeJS.ErrnoException | null, stats: StatsFs | BigIntStatsFs) => void): void;
|
|
1221
1247
|
/* fs.watch — the file-watching slice (scr_watch.c, kqueue EVFILT_VNODE):
|
|
1222
1248
|
* "rename"/"change" events on ONE path, watcher.close() to stop. The
|
|
1223
1249
|
* listener takes zero parameters or the eventType string (the filename
|
|
@@ -1291,6 +1317,7 @@ declare module "fs/promises" {
|
|
|
1291
1317
|
datasync(): Promise<void>;
|
|
1292
1318
|
truncate(len?: number): Promise<void>;
|
|
1293
1319
|
chmod(mode: number): Promise<void>;
|
|
1320
|
+
utimes(atime: number | string | Date, mtime: number | string | Date): Promise<void>;
|
|
1294
1321
|
readv<T extends Uint8Array[]>(buffers: T, position?: number | null): Promise<FileReadvResult<T>>;
|
|
1295
1322
|
writev<T extends Uint8Array[]>(buffers: T, position?: number | null): Promise<FileWritevResult<T>>;
|
|
1296
1323
|
read<T extends Uint8Array = Buffer>(options?: FileReadOptions<T> | null): Promise<FileReadResult<T>>;
|
|
@@ -1317,6 +1344,13 @@ declare module "fs/promises" {
|
|
|
1317
1344
|
[Symbol.asyncDispose](): Promise<void>;
|
|
1318
1345
|
}
|
|
1319
1346
|
export function open(path: string, flags?: string, mode?: number): Promise<FileHandle>;
|
|
1347
|
+
export function link(existingPath: string | Uint8Array | URL, newPath: string | Uint8Array | URL): Promise<void>;
|
|
1348
|
+
export function symlink(target: string | Uint8Array | URL, path: string | Uint8Array | URL, type?: string | null): Promise<void>;
|
|
1349
|
+
export function readlink(path: string | Uint8Array | URL, options: "buffer" | { encoding: "buffer" }): Promise<Buffer>;
|
|
1350
|
+
export function readlink(path: string | Uint8Array | URL, options?: BufferEncoding | { encoding?: BufferEncoding | null } | null): Promise<string>;
|
|
1351
|
+
export function readlink(path: string | Uint8Array | URL, options: string | { encoding?: string | null } | null): Promise<string | Buffer>;
|
|
1352
|
+
export function utimes(path: string | Uint8Array | URL, atime: number | string | Date, mtime: number | string | Date): Promise<void>;
|
|
1353
|
+
export function lutimes(path: string | Uint8Array | URL, atime: number | string | Date, mtime: number | string | Date): Promise<void>;
|
|
1320
1354
|
export function readFile(path: string, encoding: "utf8" | "utf-8"): Promise<string>;
|
|
1321
1355
|
export function readFile(path: string): Promise<Buffer>;
|
|
1322
1356
|
export function writeFile(
|
|
@@ -1338,6 +1372,9 @@ declare module "fs/promises" {
|
|
|
1338
1372
|
): Promise<import("node:fs").Dirent[]>;
|
|
1339
1373
|
export function rm(path: string): Promise<void>;
|
|
1340
1374
|
export function stat(path: string): Promise<import("node:fs").Stats>;
|
|
1375
|
+
export function statfs(path: string | Uint8Array | URL, options?: import("node:fs").StatFsOptions & { bigint?: false }): Promise<import("node:fs").StatsFs>;
|
|
1376
|
+
export function statfs(path: string | Uint8Array | URL, options: import("node:fs").StatFsOptions & { bigint: true }): Promise<import("node:fs").BigIntStatsFs>;
|
|
1377
|
+
export function statfs(path: string | Uint8Array | URL, options?: import("node:fs").StatFsOptions): Promise<import("node:fs").StatsFs | import("node:fs").BigIntStatsFs>;
|
|
1341
1378
|
export function realpath(path: string): Promise<string>;
|
|
1342
1379
|
export function lstat(path: string): Promise<import("node:fs").Stats>;
|
|
1343
1380
|
export function unlink(path: string): Promise<void>;
|
|
@@ -1473,24 +1510,24 @@ declare module "node:os" {
|
|
|
1473
1510
|
* href reflects immediately; every read answers the same object, Node's
|
|
1474
1511
|
* caching), toString()/toJSON() (href serialization), and the non-throwing
|
|
1475
1512
|
* canParse()/parse() factories (conversion errors still propagate).
|
|
1476
|
-
* URL
|
|
1477
|
-
*
|
|
1513
|
+
* URL components except origin and searchParams support assignment;
|
|
1514
|
+
* the live searchParams view also mutates the query. URL values participate in
|
|
1478
1515
|
* unions (URL | undefined). The parser covers the common CLI schemes
|
|
1479
1516
|
* exactly (http/https/ws/wss/ftp/file authority URLs, opaque paths like
|
|
1480
1517
|
* data: and mailto:) — divergences from the full WHATWG algorithm are
|
|
1481
1518
|
* documented in SEMANTICS.md. */
|
|
1482
1519
|
interface URL {
|
|
1483
|
-
|
|
1520
|
+
protocol: string;
|
|
1484
1521
|
readonly origin: string;
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1522
|
+
username: string;
|
|
1523
|
+
password: string;
|
|
1524
|
+
pathname: string;
|
|
1525
|
+
href: string;
|
|
1526
|
+
host: string;
|
|
1527
|
+
hostname: string;
|
|
1528
|
+
port: string;
|
|
1529
|
+
search: string;
|
|
1530
|
+
hash: string;
|
|
1494
1531
|
readonly searchParams: URLSearchParams;
|
|
1495
1532
|
toString(): string;
|
|
1496
1533
|
toJSON(): string;
|
|
@@ -1535,7 +1572,8 @@ declare module "url" {
|
|
|
1535
1572
|
export type URLSearchParams = globalThis.URLSearchParams;
|
|
1536
1573
|
export const URL: typeof globalThis.URL;
|
|
1537
1574
|
export const URLSearchParams: typeof globalThis.URLSearchParams;
|
|
1538
|
-
export function fileURLToPath(url: string | URL): string;
|
|
1575
|
+
export function fileURLToPath(url: string | URL, options?: { windows?: boolean }): string;
|
|
1576
|
+
export function fileURLToPathBuffer(url: string | URL, options?: { windows?: boolean }): Buffer;
|
|
1539
1577
|
export function pathToFileURL(path: string, options?: { windows?: boolean }): URL;
|
|
1540
1578
|
}
|
|
1541
1579
|
declare module "node:url" {
|
|
@@ -1883,6 +1921,14 @@ declare module "node:child_process" {
|
|
|
1883
1921
|
* the latter resolves the callback's data argument. Other targets and bare
|
|
1884
1922
|
* promisify values fence per site. */
|
|
1885
1923
|
declare module "util" {
|
|
1924
|
+
export * as types from "util/types";
|
|
1925
|
+
export function getSystemErrorName(err: number): string;
|
|
1926
|
+
export function getSystemErrorMessage(err: number): string;
|
|
1927
|
+
export function getSystemErrorMap(): Map<number, [string, string]>;
|
|
1928
|
+
export function stripVTControlCharacters(str: string): string;
|
|
1929
|
+
export function toUSVString(string: string): string;
|
|
1930
|
+
export function isDeepStrictEqual(val1: unknown, val2: unknown, skipPrototype?: boolean): boolean;
|
|
1931
|
+
export function styleText(format: string | readonly string[], text: string, options?: { validateStream?: boolean; stream?: unknown }): string;
|
|
1886
1932
|
export function parseEnv(content: string): { [key: string]: string | undefined };
|
|
1887
1933
|
export type TextEncoder = globalThis.TextEncoder;
|
|
1888
1934
|
export type TextDecoder = globalThis.TextDecoder;
|
|
@@ -1967,10 +2013,34 @@ declare module "node:util" {
|
|
|
1967
2013
|
export * from "util";
|
|
1968
2014
|
}
|
|
1969
2015
|
|
|
1970
|
-
/* node:util/types —
|
|
1971
|
-
*
|
|
1972
|
-
* rest of Node's surface is undeclared (honest type errors). */
|
|
2016
|
+
/* node:util/types — native runtime brands. Other forms retain their
|
|
2017
|
+
* per-member lowering boundaries. */
|
|
1973
2018
|
declare module "util/types" {
|
|
2019
|
+
export function isAnyArrayBuffer(value: unknown): boolean;
|
|
2020
|
+
export function isArrayBuffer(value: unknown): value is ArrayBuffer;
|
|
2021
|
+
export function isArrayBufferView(value: unknown): value is ArrayBufferView;
|
|
2022
|
+
export function isDataView(value: unknown): value is DataView;
|
|
2023
|
+
export function isTypedArray(value: unknown): boolean;
|
|
2024
|
+
export function isUint8Array(value: unknown): value is Uint8Array;
|
|
2025
|
+
export function isUint8ClampedArray(value: unknown): value is Uint8ClampedArray;
|
|
2026
|
+
export function isUint16Array(value: unknown): value is Uint16Array;
|
|
2027
|
+
export function isUint32Array(value: unknown): value is Uint32Array;
|
|
2028
|
+
export function isInt8Array(value: unknown): value is Int8Array;
|
|
2029
|
+
export function isInt16Array(value: unknown): value is Int16Array;
|
|
2030
|
+
export function isInt32Array(value: unknown): value is Int32Array;
|
|
2031
|
+
export function isFloat32Array(value: unknown): value is Float32Array;
|
|
2032
|
+
export function isFloat64Array(value: unknown): value is Float64Array;
|
|
2033
|
+
export function isMap(value: unknown): value is Map<unknown, unknown>;
|
|
2034
|
+
export function isSet(value: unknown): value is Set<unknown>;
|
|
2035
|
+
export function isWeakMap(value: unknown): value is WeakMap<object, unknown>;
|
|
2036
|
+
export function isWeakSet(value: unknown): value is WeakSet<object>;
|
|
2037
|
+
export function isRegExp(value: unknown): value is RegExp;
|
|
2038
|
+
export function isNativeError(value: unknown): value is Error;
|
|
2039
|
+
export function isPromise(value: unknown): value is Promise<unknown>;
|
|
2040
|
+
export function isProxy(value: unknown): boolean;
|
|
2041
|
+
export function isAsyncFunction(value: unknown): boolean;
|
|
2042
|
+
export function isGeneratorFunction(value: unknown): boolean;
|
|
2043
|
+
export function isGeneratorObject(value: unknown): boolean;
|
|
1974
2044
|
export function isModuleNamespaceObject(value: unknown): boolean;
|
|
1975
2045
|
}
|
|
1976
2046
|
declare module "node:util/types" {
|
|
@@ -2091,6 +2161,7 @@ declare module "assert" {
|
|
|
2091
2161
|
function notDeepEqual(actual: unknown, expected: unknown, message?: string): void;
|
|
2092
2162
|
function fail(message?: string): never;
|
|
2093
2163
|
function throws(fn: () => unknown, expected?: unknown, message?: string): void;
|
|
2164
|
+
function doesNotThrow(fn: () => unknown, expected?: unknown, message?: string): void;
|
|
2094
2165
|
function rejects(fn: (() => Promise<unknown>) | Promise<unknown>, expected?: unknown, message?: string): Promise<void>;
|
|
2095
2166
|
function doesNotReject(fn: (() => Promise<unknown>) | Promise<unknown>, expected?: unknown, message?: string): Promise<void>;
|
|
2096
2167
|
function match(value: string, regExp: RegExp, message?: string): void;
|
|
@@ -2121,6 +2192,7 @@ declare module "assert/strict" {
|
|
|
2121
2192
|
function notDeepStrictEqual(actual: unknown, expected: unknown, message?: string): void;
|
|
2122
2193
|
function fail(message?: string): never;
|
|
2123
2194
|
function throws(fn: () => unknown, expected?: unknown, message?: string): void;
|
|
2195
|
+
function doesNotThrow(fn: () => unknown, expected?: unknown, message?: string): void;
|
|
2124
2196
|
function rejects(fn: (() => Promise<unknown>) | Promise<unknown>, expected?: unknown, message?: string): Promise<void>;
|
|
2125
2197
|
function doesNotReject(fn: (() => Promise<unknown>) | Promise<unknown>, expected?: unknown, message?: string): Promise<void>;
|
|
2126
2198
|
function match(value: string, regExp: RegExp, message?: string): void;
|
|
@@ -10,8 +10,6 @@ import { funcOf, mapOf, RUNTIME_EMITTER_CLASS, STRING, VOID } from "../ir/ir.js"
|
|
|
10
10
|
* header, so header presence must be uniform across an extends tree): a
|
|
11
11
|
* unit is cycle-capable iff ANY member is — every backend uses the same grouping. */
|
|
12
12
|
export function computeTraced(mod) {
|
|
13
|
-
const tracedShapes = new Set();
|
|
14
|
-
const tracedUnions = new Set();
|
|
15
13
|
const classes = mod.classes ?? [];
|
|
16
14
|
const shapeDefs = [
|
|
17
15
|
...classes.map((c) => ({
|
|
@@ -29,80 +27,95 @@ export function computeTraced(mod) {
|
|
|
29
27
|
: r.fields,
|
|
30
28
|
})),
|
|
31
29
|
];
|
|
32
|
-
for (const s of shapeDefs)
|
|
33
|
-
tracedShapes.add(s.key);
|
|
34
|
-
for (const u of mod.unions ?? [])
|
|
35
|
-
tracedUnions.add(u.id);
|
|
36
30
|
// Hierarchy units: root lookup over the base links (classes with a base
|
|
37
31
|
// or a subclass — and the runtime emitter class — form units under their
|
|
38
32
|
// root; standalone classes and records stay singleton units).
|
|
39
33
|
const baseOf = new Map(classes.map((c) => [c.name, c.base ?? null]));
|
|
40
|
-
const
|
|
41
|
-
for (const cls of classes)
|
|
42
|
-
if (cls.base !== undefined)
|
|
43
|
-
hasChildren.add(cls.base);
|
|
34
|
+
const roots = new Map();
|
|
44
35
|
const rootOf = (name) => {
|
|
45
36
|
let cur = name;
|
|
46
|
-
|
|
47
|
-
|
|
37
|
+
const path = [];
|
|
38
|
+
while (!roots.has(cur)) {
|
|
39
|
+
path.push(cur);
|
|
40
|
+
const base = baseOf.get(cur);
|
|
41
|
+
if (base === null || base === undefined)
|
|
42
|
+
break;
|
|
43
|
+
cur = base;
|
|
44
|
+
}
|
|
45
|
+
cur = roots.get(cur) ?? cur;
|
|
46
|
+
for (const member of path)
|
|
47
|
+
roots.set(member, cur);
|
|
48
48
|
return cur;
|
|
49
49
|
};
|
|
50
|
-
const
|
|
51
|
-
if (!key.startsWith("object:"))
|
|
52
|
-
return key;
|
|
53
|
-
const name = key.slice("object:".length);
|
|
54
|
-
const inHierarchy = typeof baseOf.get(name) === "string" || hasChildren.has(name) || name === RUNTIME_EMITTER_CLASS;
|
|
55
|
-
return inHierarchy ? `object:${rootOf(name)}` : key;
|
|
56
|
-
};
|
|
50
|
+
const capability = () => ({ intrinsic: false, dependencies: new Set(), dependents: [], remaining: 0 });
|
|
57
51
|
const units = new Map();
|
|
52
|
+
const shapes = new Map();
|
|
53
|
+
const unions = new Map((mod.unions ?? []).map((u) => [u.id, capability()]));
|
|
58
54
|
for (const s of shapeDefs) {
|
|
59
|
-
const
|
|
60
|
-
let
|
|
61
|
-
if (!
|
|
62
|
-
units.set(
|
|
63
|
-
|
|
55
|
+
const key = s.key.startsWith("object:") ? `object:${rootOf(s.key.slice("object:".length))}` : s.key;
|
|
56
|
+
let unit = units.get(key);
|
|
57
|
+
if (!unit)
|
|
58
|
+
units.set(key, (unit = capability()));
|
|
59
|
+
shapes.set(s.key, unit);
|
|
64
60
|
}
|
|
65
|
-
|
|
61
|
+
// Each field/arm is an OR of intrinsic capability and referenced units.
|
|
62
|
+
// Flatten collections into these edges; repeated references count once.
|
|
63
|
+
const addType = (unit, t) => {
|
|
64
|
+
if (unit.intrinsic)
|
|
65
|
+
return;
|
|
66
66
|
switch (t.kind) {
|
|
67
67
|
case "func":
|
|
68
68
|
case "dyn":
|
|
69
69
|
case "classval":
|
|
70
70
|
case "promise":
|
|
71
71
|
case "caught":
|
|
72
|
-
|
|
72
|
+
unit.intrinsic = true;
|
|
73
|
+
unit.dependencies.clear();
|
|
74
|
+
break;
|
|
73
75
|
case "object":
|
|
74
|
-
return tracedShapes.has(`object:${t.className}`);
|
|
75
76
|
case "record":
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
case "union": {
|
|
78
|
+
const dependency = t.kind === "union" ? unions.get(t.unionId)
|
|
79
|
+
: shapes.get(t.kind === "object" ? `object:${t.className}` : `record:${t.shapeId}`);
|
|
80
|
+
if (dependency)
|
|
81
|
+
unit.dependencies.add(dependency);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
79
84
|
case "map":
|
|
80
|
-
|
|
85
|
+
addType(unit, t.key);
|
|
86
|
+
addType(unit, t.value);
|
|
87
|
+
break;
|
|
81
88
|
case "set":
|
|
82
89
|
case "array":
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
return false;
|
|
90
|
+
addType(unit, t.elem);
|
|
91
|
+
break;
|
|
86
92
|
}
|
|
87
93
|
};
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
94
|
+
for (const s of shapeDefs)
|
|
95
|
+
for (const field of s.fields)
|
|
96
|
+
addType(shapes.get(s.key), field.type);
|
|
97
|
+
for (const u of mod.unions ?? [])
|
|
98
|
+
for (const arm of u.arms)
|
|
99
|
+
addType(unions.get(u.id), arm);
|
|
100
|
+
const pending = [];
|
|
101
|
+
for (const unit of [...units.values(), ...unions.values()]) {
|
|
102
|
+
unit.remaining = unit.dependencies.size;
|
|
103
|
+
for (const dependency of unit.dependencies)
|
|
104
|
+
dependency.dependents.push(unit);
|
|
105
|
+
if (!unit.intrinsic && unit.remaining === 0)
|
|
106
|
+
pending.push(unit);
|
|
107
|
+
}
|
|
108
|
+
// Peel incapable leaves. Units in cycles retain a dependency, and units
|
|
109
|
+
// containing intrinsic references never enter the removal queue.
|
|
110
|
+
for (let i = 0; i < pending.length; i++) {
|
|
111
|
+
for (const dependent of pending[i].dependents) {
|
|
112
|
+
if (--dependent.remaining === 0 && !dependent.intrinsic)
|
|
113
|
+
pending.push(dependent);
|
|
104
114
|
}
|
|
105
115
|
}
|
|
116
|
+
const retained = (unit) => unit.intrinsic || unit.remaining > 0;
|
|
117
|
+
const tracedShapes = new Set([...shapes].filter(([, unit]) => retained(unit)).map(([key]) => key));
|
|
118
|
+
const tracedUnions = new Set([...unions].filter(([, unit]) => retained(unit)).map(([id]) => id));
|
|
106
119
|
return { shapes: tracedShapes, unions: tracedUnions };
|
|
107
120
|
}
|
|
108
121
|
//# sourceMappingURL=cycle-analysis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cycle-analysis.js","sourceRoot":"","sources":["../../src/backend/cycle-analysis.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEjF;;;;;;;;;qFASqF;AACrF,MAAM,UAAU,aAAa,CAAC,GAAa;IACzC,MAAM,
|
|
1
|
+
{"version":3,"file":"cycle-analysis.js","sourceRoot":"","sources":["../../src/backend/cycle-analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -121,4 +121,55 @@ test("checked values seed tracing through records and collections", () => {
|
|
|
121
121
|
mod.records = [shape("value", [DYN]), shape("list", [arrayOf(DYN)]), shape("set", [setOf(DYN)]), shape("map", [mapOf(DYN, F64)])];
|
|
122
122
|
check(mod, ["record:value", "record:list", "record:set", "record:map"]);
|
|
123
123
|
});
|
|
124
|
+
test("removes a long alternating shape/union chain regardless of definition order", () => {
|
|
125
|
+
const mod = module();
|
|
126
|
+
const size = 6000;
|
|
127
|
+
mod.records = Array.from({ length: size }, (_, i) => shape(`r${i}`, [
|
|
128
|
+
arrayOf({ kind: "union", unionId: `u${i}` }),
|
|
129
|
+
mapOf({ kind: "union", unionId: `u${i}` }, { kind: "union", unionId: `u${i}` }),
|
|
130
|
+
]));
|
|
131
|
+
mod.unions = Array.from({ length: size }, (_, i) => ({ id: `u${i}`, arms: [i === size - 1 ? F64 : ref(`r${i + 1}`), STRING] }));
|
|
132
|
+
check(mod, []);
|
|
133
|
+
mod.records.reverse();
|
|
134
|
+
mod.unions.reverse();
|
|
135
|
+
check(mod, []);
|
|
136
|
+
});
|
|
137
|
+
test("removing one dependency keeps other branches, cycles, and intrinsic references", () => {
|
|
138
|
+
const mod = module();
|
|
139
|
+
mod.records = [
|
|
140
|
+
shape("outer", [mapOf(ref("leaf"), ref("cycle"))]),
|
|
141
|
+
shape("cycle", [ref("cycle"), ref("leaf")]),
|
|
142
|
+
shape("leaf", [F64]),
|
|
143
|
+
shape("intrinsic", [ref("leaf"), { kind: "caught" }]),
|
|
144
|
+
shape("pruned", [mapOf(ref("leaf"), arrayOf(ref("leaf")))]),
|
|
145
|
+
];
|
|
146
|
+
check(mod, ["record:outer", "record:cycle", "record:intrinsic"]);
|
|
147
|
+
});
|
|
148
|
+
test("hierarchies and unions participate in the same dependency graph", () => {
|
|
149
|
+
const mod = module();
|
|
150
|
+
mod.classes = [
|
|
151
|
+
{ name: "Child", base: "Base", fields: [{ name: "next", type: { kind: "union", unionId: "link" } }], loc },
|
|
152
|
+
{ name: "Sibling", base: "Base", fields: [], loc },
|
|
153
|
+
{ name: "Base", fields: [], loc },
|
|
154
|
+
];
|
|
155
|
+
mod.unions = [{ id: "link", arms: [{ kind: "object", className: "Sibling" }, F64] }];
|
|
156
|
+
check(mod, ["object:Child", "object:Sibling", "object:Base"], ["link"]);
|
|
157
|
+
mod.unions[0].arms = [F64, STRING];
|
|
158
|
+
check(mod, []);
|
|
159
|
+
});
|
|
160
|
+
test("local class captures retain tracing even when the class has no fields", () => {
|
|
161
|
+
const mod = module();
|
|
162
|
+
mod.classes = [{ name: "Local", localCaptures: [], fields: [], loc }];
|
|
163
|
+
check(mod, ["object:Local"]);
|
|
164
|
+
});
|
|
165
|
+
test("resolves a deep class hierarchy without recursive root traversal", () => {
|
|
166
|
+
const mod = module();
|
|
167
|
+
const size = 6000;
|
|
168
|
+
mod.classes = Array.from({ length: size }, (_, i) => ({
|
|
169
|
+
name: `C${i}`, ...(i === size - 1 ? {} : { base: `C${i + 1}` }), fields: [], loc,
|
|
170
|
+
}));
|
|
171
|
+
check(mod, []);
|
|
172
|
+
mod.classes[0].fields = [{ name: "callback", type: funcOf([], VOID) }];
|
|
173
|
+
check(mod, mod.classes.map((c) => `object:${c.name}`));
|
|
174
|
+
});
|
|
124
175
|
//# sourceMappingURL=cycle-analysis.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cycle-analysis.test.js","sourceRoot":"","sources":["../../src/backend/cycle-analysis.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cycle-analysis.test.js","sourceRoot":"","sources":["../../src/backend/cycle-analysis.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type IrExpr } from "../../ir/ir.js";
|
|
2
|
+
import type { LlvmEmitterContext, LlValue } from "./expr-context.js";
|
|
3
|
+
/** The lowering of a scalar compound field assignment snapshots a receiver,
|
|
4
|
+
* the old field, the RHS and the result. Borrow that receiver only when the
|
|
5
|
+
* entire sequence cannot invalidate its owner. Preserve all snapshots and
|
|
6
|
+
* evaluation order; in particular an effectful RHS still owns the receiver. */
|
|
7
|
+
export declare function emitBorrowedFieldSequence(host: LlvmEmitterContext, e: IrExpr & {
|
|
8
|
+
kind: "seqExpr";
|
|
9
|
+
}): LlValue | null;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { isStableReceiverOperand } from "../../ir/analysis.js";
|
|
2
|
+
import { isRefCounted } from "../../ir/ir.js";
|
|
3
|
+
function stableProjection(host, e) {
|
|
4
|
+
switch (e.kind) {
|
|
5
|
+
case "varRef": return host.canBorrowReceiver(e);
|
|
6
|
+
case "unionNarrow": return stableProjection(host, e.value);
|
|
7
|
+
case "fieldGet":
|
|
8
|
+
case "recordGet": return stableProjection(host, e.obj);
|
|
9
|
+
case "ternary": return scalarComputation(host, e.cond) && stableProjection(host, e.then) && stableProjection(host, e.else_);
|
|
10
|
+
case "libCall": return e.fn === "error.nodeThrow";
|
|
11
|
+
default: return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/** Scalar field computations cannot replace any owner on the receiver's
|
|
15
|
+
* projection path. Calls, reference writes, captures and suspension remain
|
|
16
|
+
* on the owning path. A checked projection may throw at its original use. */
|
|
17
|
+
function scalarComputation(host, e) {
|
|
18
|
+
if (isRefCounted(e.type))
|
|
19
|
+
return false;
|
|
20
|
+
switch (e.kind) {
|
|
21
|
+
case "numLit":
|
|
22
|
+
case "boolLit":
|
|
23
|
+
case "varRef": return true;
|
|
24
|
+
case "bin": return scalarComputation(host, e.left) && scalarComputation(host, e.right);
|
|
25
|
+
case "unary":
|
|
26
|
+
case "toBool": return scalarComputation(host, e.operand);
|
|
27
|
+
case "fieldGet":
|
|
28
|
+
case "recordGet": return stableProjection(host, e.obj);
|
|
29
|
+
case "unionIsTag": return stableProjection(host, e.value);
|
|
30
|
+
case "libCall": return isStableReceiverOperand(e, "");
|
|
31
|
+
default: return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** The lowering of a scalar compound field assignment snapshots a receiver,
|
|
35
|
+
* the old field, the RHS and the result. Borrow that receiver only when the
|
|
36
|
+
* entire sequence cannot invalidate its owner. Preserve all snapshots and
|
|
37
|
+
* evaluation order; in particular an effectful RHS still owns the receiver. */
|
|
38
|
+
export function emitBorrowedFieldSequence(host, e) {
|
|
39
|
+
const first = e.stmts[0];
|
|
40
|
+
if (first?.kind !== "varDecl" || !first.init || !isRefCounted(first.init.type) || !host.canBorrowReceiver(first.init))
|
|
41
|
+
return null;
|
|
42
|
+
const binding = host.binding(first.localId);
|
|
43
|
+
if (binding.kind !== "local" || binding.local?.mutable || !scalarComputation(host, e.result))
|
|
44
|
+
return null;
|
|
45
|
+
const rest = e.stmts.slice(1);
|
|
46
|
+
if (rest.length === 0 || !rest.every((s) => {
|
|
47
|
+
if (s.kind === "varDecl")
|
|
48
|
+
return s.init !== null && !isRefCounted(host.binding(s.localId).type) && scalarComputation(host, s.init);
|
|
49
|
+
return (s.kind === "fieldSet" || s.kind === "recordSet") && s.obj.kind === "varRef" && s.obj.localId === first.localId && scalarComputation(host, s.value);
|
|
50
|
+
}))
|
|
51
|
+
return null;
|
|
52
|
+
const receiver = host.emitReadReceiver(first.init);
|
|
53
|
+
host.B.line(`store ptr ${receiver.name}, ptr ${binding.slot}`);
|
|
54
|
+
for (const stmt of rest)
|
|
55
|
+
host.emitStmt(stmt);
|
|
56
|
+
return host.emitExpr(e.result);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=borrowed-receivers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"borrowed-receivers.js","sourceRoot":"","sources":["../../../src/backend/llvm/borrowed-receivers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type IrFunction } from "../../ir/ir.js";
|
|
2
|
+
export interface CallLifetimes {
|
|
3
|
+
/** Parameters consumed only by projections, borrowing string operations,
|
|
4
|
+
* or other proven parameters.
|
|
5
|
+
* This is a lifetime fact, not a purity or nonthrowing guarantee. */
|
|
6
|
+
parameters: Map<string, Set<number>>;
|
|
7
|
+
/** Immutable locals with the same use restriction. Their initialization
|
|
8
|
+
* and ownership still need a separate representation proof. */
|
|
9
|
+
locals: Map<string, Set<string>>;
|
|
10
|
+
}
|
|
11
|
+
/** Solve dependencies between individual parameters, rather than marking
|
|
12
|
+
* every argument unsafe when one parameter escapes. Begin optimistically
|
|
13
|
+
* inside recursive groups, then propagate each rejection through reverse
|
|
14
|
+
* edges. Every parameter enters the worklist at most once; deep call chains
|
|
15
|
+
* do not recurse on the compiler stack or repeatedly rescan function bodies.
|
|
16
|
+
*
|
|
17
|
+
* The result is private to one emission of the finalized IR. No fact is
|
|
18
|
+
* serialized or reused after a compiler transformation. Synchronous bodies
|
|
19
|
+
* without environments are the only supported calling convention. */
|
|
20
|
+
export declare function analyzeCallLifetimes(functions: ReadonlyMap<string, IrFunction>): CallLifetimes;
|