@scriptc/compiler 0.0.32 → 0.0.34

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.
Files changed (120) hide show
  1. package/dist/backend/cc-cache.test.js +430 -1
  2. package/dist/backend/cc-cache.test.js.map +1 -1
  3. package/dist/backend/cc.d.ts +25 -0
  4. package/dist/backend/cc.js +818 -88
  5. package/dist/backend/cc.js.map +1 -1
  6. package/dist/backend/emission/emit-exprs.js +79 -3
  7. package/dist/backend/emission/emit-exprs.js.map +1 -1
  8. package/dist/backend/emission/emit-shapes.js +37 -4
  9. package/dist/backend/emission/emit-shapes.js.map +1 -1
  10. package/dist/backend/emission/emitter.d.ts +23 -7
  11. package/dist/backend/emission/emitter.js +171 -27
  12. package/dist/backend/emission/emitter.js.map +1 -1
  13. package/dist/backend/emission/may-throw.js +7 -4
  14. package/dist/backend/emission/may-throw.js.map +1 -1
  15. package/dist/backend/ffi-callbacks.d.ts +38 -1
  16. package/dist/backend/ffi-callbacks.js +76 -3
  17. package/dist/backend/ffi-callbacks.js.map +1 -1
  18. package/dist/backend/library-identity.d.ts +22 -0
  19. package/dist/backend/library-identity.js +103 -0
  20. package/dist/backend/library-identity.js.map +1 -0
  21. package/dist/backend/llvm/emitter.d.ts +3 -0
  22. package/dist/backend/llvm/emitter.js +278 -17
  23. package/dist/backend/llvm/emitter.js.map +1 -1
  24. package/dist/backend/llvm/shapes.d.ts +1 -0
  25. package/dist/backend/llvm/shapes.js +25 -1
  26. package/dist/backend/llvm/shapes.js.map +1 -1
  27. package/dist/backend/mangle.d.ts +1 -0
  28. package/dist/backend/mangle.js +3 -0
  29. package/dist/backend/mangle.js.map +1 -1
  30. package/dist/backend/object-localize.d.ts +5 -5
  31. package/dist/backend/object-localize.js +19 -16
  32. package/dist/backend/object-localize.js.map +1 -1
  33. package/dist/backend/object-localize.test.js +37 -13
  34. package/dist/backend/object-localize.test.js.map +1 -1
  35. package/dist/diagnostics/diagnostic.js +2 -0
  36. package/dist/diagnostics/diagnostic.js.map +1 -1
  37. package/dist/ffi/profile.d.ts +17 -5
  38. package/dist/ffi/profile.js +169 -22
  39. package/dist/ffi/profile.js.map +1 -1
  40. package/dist/frontend/input-tracker.d.ts +82 -0
  41. package/dist/frontend/input-tracker.js +380 -0
  42. package/dist/frontend/input-tracker.js.map +1 -0
  43. package/dist/frontend/input-tracker.test.d.ts +1 -0
  44. package/dist/frontend/input-tracker.test.js +137 -0
  45. package/dist/frontend/input-tracker.test.js.map +1 -0
  46. package/dist/frontend/lowering/lower-builtins.js +2 -8
  47. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  48. package/dist/frontend/lowering/lower-calls.d.ts +1 -0
  49. package/dist/frontend/lowering/lower-calls.js +244 -163
  50. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  51. package/dist/frontend/lowering/lower-classes.js +3 -0
  52. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  53. package/dist/frontend/lowering/lower-containers.js +113 -28
  54. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  55. package/dist/frontend/lowering/lower-exprs.js +67 -1
  56. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  57. package/dist/frontend/lowering/lower-inspect.js +45 -26
  58. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  59. package/dist/frontend/lowering/lower-modules.js +1 -1
  60. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  61. package/dist/frontend/lowering/lower-stmts.js +48 -3
  62. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  63. package/dist/frontend/lowering/lowerer.d.ts +79 -29
  64. package/dist/frontend/lowering/lowerer.js +429 -87
  65. package/dist/frontend/lowering/lowerer.js.map +1 -1
  66. package/dist/frontend/npm-static-rewrite.js +25 -26
  67. package/dist/frontend/npm-static-rewrite.js.map +1 -1
  68. package/dist/frontend/npm-static.js +29 -30
  69. package/dist/frontend/npm-static.js.map +1 -1
  70. package/dist/frontend/npm-static.test.d.ts +1 -0
  71. package/dist/frontend/npm-static.test.js +15 -0
  72. package/dist/frontend/npm-static.test.js.map +1 -0
  73. package/dist/frontend/npm.js +5 -17
  74. package/dist/frontend/npm.js.map +1 -1
  75. package/dist/frontend/program.js +2 -6
  76. package/dist/frontend/program.js.map +1 -1
  77. package/dist/frontend/resolve.js +8 -29
  78. package/dist/frontend/resolve.js.map +1 -1
  79. package/dist/frontend/ts7/checker.d.ts +2 -0
  80. package/dist/frontend/ts7/checker.js +20 -3
  81. package/dist/frontend/ts7/checker.js.map +1 -1
  82. package/dist/frontend/ts7/program.js +17 -18
  83. package/dist/frontend/ts7/program.js.map +1 -1
  84. package/dist/frontend/types.d.ts +41 -0
  85. package/dist/frontend/types.js +147 -8
  86. package/dist/frontend/types.js.map +1 -1
  87. package/dist/index.d.ts +1 -1
  88. package/dist/index.js +275 -41
  89. package/dist/index.js.map +1 -1
  90. package/dist/ir/nodes.d.ts +42 -12
  91. package/dist/ir/nodes.js +7 -1
  92. package/dist/ir/nodes.js.map +1 -1
  93. package/dist/ir/serialize.d.ts +1 -1
  94. package/dist/ir/serialize.js +1 -1
  95. package/dist/ir/validate.js +104 -1
  96. package/dist/ir/validate.js.map +1 -1
  97. package/dist/library/early-cache.d.ts +65 -0
  98. package/dist/library/early-cache.js +380 -0
  99. package/dist/library/early-cache.js.map +1 -0
  100. package/dist/library/early-cache.test.d.ts +1 -0
  101. package/dist/library/early-cache.test.js +528 -0
  102. package/dist/library/early-cache.test.js.map +1 -0
  103. package/dist/library/int-infer.js +14 -0
  104. package/dist/library/int-infer.js.map +1 -1
  105. package/dist/library/int-infer.test.js +21 -4
  106. package/dist/library/int-infer.test.js.map +1 -1
  107. package/dist/library/profile.d.ts +3 -0
  108. package/dist/library/profile.js +9 -1
  109. package/dist/library/profile.js.map +1 -1
  110. package/dist/library/semantic-source.d.ts +13 -0
  111. package/dist/library/semantic-source.js +257 -0
  112. package/dist/library/semantic-source.js.map +1 -0
  113. package/dist/library/semantic-source.test.d.ts +1 -0
  114. package/dist/library/semantic-source.test.js +113 -0
  115. package/dist/library/semantic-source.test.js.map +1 -0
  116. package/dist/library/sidecar.d.ts +6 -0
  117. package/dist/library/sidecar.js +11 -0
  118. package/dist/library/sidecar.js.map +1 -1
  119. package/package.json +2 -2
  120. package/surface-manifest.json +1 -1
@@ -0,0 +1,528 @@
1
+ import { mkdir, mkdtemp, readFile, readdir, rm, stat, utimes, writeFile } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { dirname, join } from "node:path";
4
+ import { afterEach, expect, test } from "vitest";
5
+ import { FrontendInputTracker, trackedAccessibleEntries, trackedDirectoryExists, trackedFileExists, trackedReadFile } from "../frontend/input-tracker.js";
6
+ import { publishEarlyLibraryCache, readEarlyLibraryCache, readSemanticLibraryCache, } from "./early-cache.js";
7
+ const scratch = [];
8
+ afterEach(async () => {
9
+ await Promise.all(scratch.splice(0).map((path) => rm(path, { recursive: true, force: true })));
10
+ });
11
+ async function fixture() {
12
+ const dir = await mkdtemp(join(tmpdir(), "scriptc-early-cache-"));
13
+ scratch.push(dir);
14
+ const source = join(dir, "entry.ts");
15
+ const profilePath = join(dir, "profile.json");
16
+ const cPath = join(dir, "entry.lib.ll");
17
+ const irPath = join(dir, "entry.lib.ir.json");
18
+ const sidecarPath = join(dir, "entry.lib.a.contract.json");
19
+ await Promise.all([
20
+ writeFile(source, "export function value(): number { return 1; }\n"),
21
+ writeFile(profilePath, "{}\n"),
22
+ writeFile(cPath, "; generated llvm\n"),
23
+ writeFile(irPath, "{\"irVersion\":6}\n"),
24
+ writeFile(sidecarPath, "{\"contract\":true}\n"),
25
+ ]);
26
+ return {
27
+ root: join(dir, "cache"),
28
+ source,
29
+ missing: join(dir, "missing.ts"),
30
+ cPath,
31
+ irPath,
32
+ sidecarPath,
33
+ options: {
34
+ profilePath,
35
+ profileBytes: new TextEncoder().encode("{}\n"),
36
+ entryPath: source,
37
+ outDir: dir,
38
+ emitIr: true,
39
+ sanitize: false,
40
+ target: "test",
41
+ compiler: ["clang"],
42
+ nodeVersion: "v24-test",
43
+ implementation: "test-implementation",
44
+ },
45
+ };
46
+ }
47
+ test("early library cache restores generated artifacts and metadata", async () => {
48
+ const f = await fixture();
49
+ const tracker = new FrontendInputTracker();
50
+ tracker.run(() => {
51
+ trackedReadFile(f.source);
52
+ trackedFileExists(f.missing);
53
+ });
54
+ const native = {
55
+ backend: "llvm",
56
+ regex: false,
57
+ assert: true,
58
+ inspect: false,
59
+ symbol: false,
60
+ searchParams: false,
61
+ emitter: false,
62
+ zlib: false,
63
+ copying: false,
64
+ textDecoderLegacy: false,
65
+ };
66
+ await publishEarlyLibraryCache(f.root, f.options, {
67
+ cPath: f.cPath,
68
+ irPath: f.irPath,
69
+ sidecarPath: f.sidecarPath,
70
+ native,
71
+ frontend: tracker.snapshot(),
72
+ });
73
+ await Promise.all([rm(f.cPath), rm(f.irPath), rm(f.sidecarPath)]);
74
+ const staleCPath = join(f.options.outDir, "entry.lib.c");
75
+ await writeFile(staleCPath, "/* stale c backend */\n");
76
+ const hit = await readEarlyLibraryCache(f.root, f.options, null);
77
+ expect(hit).not.toBeNull();
78
+ expect(hit?.native).toEqual(native);
79
+ expect(await readFile(f.cPath, "utf8")).toBe("; generated llvm\n");
80
+ expect(await readFile(f.irPath, "utf8")).toContain("irVersion");
81
+ expect(await readFile(f.sidecarPath, "utf8")).toContain("contract");
82
+ await expect(readFile(staleCPath, "utf8")).rejects.toMatchObject({ code: "ENOENT" });
83
+ });
84
+ test("early library cache publishes after creating a fresh output directory", async () => {
85
+ const f = await fixture();
86
+ const cacheRoot = await mkdtemp(join(tmpdir(), "scriptc-early-cache-root-"));
87
+ scratch.push(cacheRoot);
88
+ const outDir = join(f.options.outDir, "fresh-out");
89
+ const cPath = join(outDir, "entry.lib.ll");
90
+ const options = { ...f.options, outDir, emitIr: false };
91
+ const tracker = new FrontendInputTracker();
92
+ tracker.run(() => {
93
+ trackedAccessibleEntries(f.options.outDir);
94
+ trackedDirectoryExists(outDir);
95
+ trackedAccessibleEntries(outDir);
96
+ trackedReadFile(f.source);
97
+ });
98
+ await mkdir(outDir);
99
+ await writeFile(cPath, "; generated llvm in fresh output\n");
100
+ await publishEarlyLibraryCache(cacheRoot, options, {
101
+ cPath,
102
+ native: {
103
+ backend: "llvm",
104
+ regex: false,
105
+ assert: false,
106
+ inspect: false,
107
+ symbol: false,
108
+ searchParams: false,
109
+ emitter: false,
110
+ zlib: false,
111
+ copying: false,
112
+ textDecoderLegacy: false,
113
+ },
114
+ frontend: tracker.snapshot(),
115
+ });
116
+ await rm(cPath);
117
+ expect((await readEarlyLibraryCache(cacheRoot, options, undefined))?.cPath).toBe(cPath);
118
+ expect(await readFile(cPath, "utf8")).toContain("fresh output");
119
+ });
120
+ test("early library cache hits refresh every payload's LRU time", async () => {
121
+ const f = await fixture();
122
+ const tracker = new FrontendInputTracker();
123
+ tracker.run(() => trackedReadFile(f.source));
124
+ await publishEarlyLibraryCache(f.root, f.options, {
125
+ cPath: f.cPath,
126
+ irPath: f.irPath,
127
+ sidecarPath: f.sidecarPath,
128
+ native: {
129
+ backend: "llvm",
130
+ regex: false,
131
+ assert: false,
132
+ inspect: false,
133
+ symbol: false,
134
+ searchParams: false,
135
+ emitter: false,
136
+ zlib: false,
137
+ copying: false,
138
+ textDecoderLegacy: false,
139
+ },
140
+ frontend: tracker.snapshot(),
141
+ });
142
+ const earlyRoot = join(f.root, "early-lib");
143
+ const [key] = await readdir(earlyRoot);
144
+ const entry = join(earlyRoot, key);
145
+ const cachePaths = [
146
+ join(entry, "stamp.json"),
147
+ join(entry, "program.tu"),
148
+ join(entry, "program.ir.json"),
149
+ join(entry, "contract.json"),
150
+ ];
151
+ const old = new Date("2000-01-01T00:00:00.000Z");
152
+ await Promise.all(cachePaths.map((path) => utimes(path, old, old)));
153
+ expect(await readEarlyLibraryCache(f.root, f.options, null)).not.toBeNull();
154
+ for (const path of cachePaths) {
155
+ expect((await stat(path)).mtimeMs).toBeGreaterThan(old.getTime());
156
+ }
157
+ });
158
+ test("early library cache misses on source edits and newly-resolved candidates", async () => {
159
+ const f = await fixture();
160
+ const tracker = new FrontendInputTracker();
161
+ tracker.run(() => {
162
+ trackedReadFile(f.source);
163
+ trackedFileExists(f.missing);
164
+ });
165
+ await publishEarlyLibraryCache(f.root, f.options, {
166
+ cPath: f.cPath,
167
+ irPath: f.irPath,
168
+ sidecarPath: f.sidecarPath,
169
+ native: {
170
+ backend: "llvm",
171
+ regex: false,
172
+ assert: false,
173
+ inspect: false,
174
+ symbol: false,
175
+ searchParams: false,
176
+ emitter: false,
177
+ zlib: false,
178
+ copying: false,
179
+ textDecoderLegacy: false,
180
+ },
181
+ frontend: tracker.snapshot(),
182
+ });
183
+ await writeFile(f.source, "export function value(): number { return 2; }\n");
184
+ expect(await readEarlyLibraryCache(f.root, f.options, null)).toBeNull();
185
+ await writeFile(f.cPath, "; generated llvm v2\n");
186
+ const editedTracker = new FrontendInputTracker();
187
+ editedTracker.run(() => {
188
+ trackedReadFile(f.source);
189
+ trackedFileExists(f.missing);
190
+ });
191
+ await publishEarlyLibraryCache(f.root, f.options, {
192
+ cPath: f.cPath,
193
+ irPath: f.irPath,
194
+ sidecarPath: f.sidecarPath,
195
+ native: {
196
+ backend: "llvm",
197
+ regex: false,
198
+ assert: false,
199
+ inspect: false,
200
+ symbol: false,
201
+ searchParams: false,
202
+ emitter: false,
203
+ zlib: false,
204
+ copying: false,
205
+ textDecoderLegacy: false,
206
+ },
207
+ frontend: editedTracker.snapshot(),
208
+ });
209
+ expect((await readEarlyLibraryCache(f.root, f.options, null))?.cPath).toBe(f.cPath);
210
+ expect(await readFile(f.cPath, "utf8")).toBe("; generated llvm v2\n");
211
+ await writeFile(f.source, "export function value(): number { return 1; }\n");
212
+ await writeFile(f.missing, "export const appeared = true;\n");
213
+ expect(await readEarlyLibraryCache(f.root, f.options, null)).toBeNull();
214
+ });
215
+ test("semantic library cache restores and rebases IR after a comment-only edit", async () => {
216
+ const f = await fixture();
217
+ const sourceBefore = await readFile(f.source, "utf8");
218
+ const returnStart = sourceBefore.indexOf("return");
219
+ const semanticMod = {
220
+ irVersion: 6,
221
+ sourceFile: f.source,
222
+ functions: [{
223
+ name: "__main",
224
+ params: [],
225
+ returnType: { kind: "void" },
226
+ locals: [],
227
+ body: [],
228
+ loc: { file: f.source, start: returnStart, end: returnStart + 6 },
229
+ }],
230
+ entry: "__main",
231
+ };
232
+ const tracker = new FrontendInputTracker();
233
+ tracker.run(() => trackedReadFile(f.source));
234
+ await publishEarlyLibraryCache(f.root, f.options, {
235
+ cPath: f.cPath,
236
+ irPath: f.irPath,
237
+ sidecarPath: f.sidecarPath,
238
+ native: {
239
+ backend: "llvm",
240
+ regex: false,
241
+ assert: false,
242
+ inspect: false,
243
+ symbol: false,
244
+ searchParams: false,
245
+ emitter: false,
246
+ zlib: false,
247
+ copying: false,
248
+ textDecoderLegacy: false,
249
+ },
250
+ frontend: tracker.snapshot(),
251
+ semantic: { mod: semanticMod, sources: new Map([[f.source, sourceBefore]]) },
252
+ });
253
+ const sourceAfter = `// inserted comment\n${sourceBefore}`;
254
+ await writeFile(f.source, sourceAfter);
255
+ expect(await readEarlyLibraryCache(f.root, f.options, null)).toBeNull();
256
+ const hit = await readSemanticLibraryCache(f.root, f.options, null);
257
+ expect(hit).not.toBeNull();
258
+ expect(hit?.changedSources).toEqual([f.source]);
259
+ expect(hit?.translationUnit).toBe("; generated llvm\n");
260
+ expect(hit?.mod.functions[0].loc.start).toBe(sourceAfter.indexOf("return"));
261
+ expect(hit?.frontend.probes).toContainEqual(expect.objectContaining({
262
+ op: "file",
263
+ path: f.source,
264
+ }));
265
+ const earlyRoot = join(f.root, "early-lib");
266
+ const [key] = await readdir(earlyRoot);
267
+ await writeFile(join(earlyRoot, key, "program.tu"), "corrupt\n");
268
+ expect(await readSemanticLibraryCache(f.root, f.options, null)).toBeNull();
269
+ });
270
+ test("semantic library cache refuses token and directive edits", async () => {
271
+ const f = await fixture();
272
+ const sourceBefore = await readFile(f.source, "utf8");
273
+ const semanticMod = {
274
+ irVersion: 6,
275
+ sourceFile: f.source,
276
+ functions: [{
277
+ name: "__main",
278
+ params: [],
279
+ returnType: { kind: "void" },
280
+ locals: [],
281
+ body: [],
282
+ loc: { file: f.source, start: 0, end: sourceBefore.length },
283
+ }],
284
+ entry: "__main",
285
+ };
286
+ const tracker = new FrontendInputTracker();
287
+ tracker.run(() => trackedReadFile(f.source));
288
+ await publishEarlyLibraryCache(f.root, f.options, {
289
+ cPath: f.cPath,
290
+ irPath: f.irPath,
291
+ sidecarPath: f.sidecarPath,
292
+ native: {
293
+ backend: "llvm",
294
+ regex: false,
295
+ assert: false,
296
+ inspect: false,
297
+ symbol: false,
298
+ searchParams: false,
299
+ emitter: false,
300
+ zlib: false,
301
+ copying: false,
302
+ textDecoderLegacy: false,
303
+ },
304
+ frontend: tracker.snapshot(),
305
+ semantic: { mod: semanticMod, sources: new Map([[f.source, sourceBefore]]) },
306
+ });
307
+ await writeFile(f.source, sourceBefore.replace("return 1", "return 2"));
308
+ expect(await readSemanticLibraryCache(f.root, f.options, null)).toBeNull();
309
+ await writeFile(f.source, `// @ts-expect-error\n${sourceBefore}`);
310
+ expect(await readSemanticLibraryCache(f.root, f.options, null)).toBeNull();
311
+ });
312
+ test("semantic C cache accepts only line-preserving single-source edits", async () => {
313
+ const f = await fixture();
314
+ const sourceBefore = await readFile(f.source, "utf8");
315
+ const semanticMod = {
316
+ irVersion: 6,
317
+ sourceFile: f.source,
318
+ functions: [{
319
+ name: "__main",
320
+ params: [],
321
+ returnType: { kind: "void" },
322
+ locals: [],
323
+ body: [],
324
+ loc: { file: f.source, start: 0, end: sourceBefore.length },
325
+ }],
326
+ entry: "__main",
327
+ };
328
+ const tracker = new FrontendInputTracker();
329
+ tracker.run(() => trackedReadFile(f.source));
330
+ await publishEarlyLibraryCache(f.root, f.options, {
331
+ cPath: f.cPath,
332
+ irPath: f.irPath,
333
+ sidecarPath: f.sidecarPath,
334
+ native: {
335
+ backend: "c",
336
+ regex: false,
337
+ assert: false,
338
+ inspect: false,
339
+ symbol: false,
340
+ searchParams: false,
341
+ emitter: false,
342
+ zlib: false,
343
+ copying: false,
344
+ textDecoderLegacy: false,
345
+ },
346
+ frontend: tracker.snapshot(),
347
+ semantic: { mod: semanticMod, sources: new Map([[f.source, sourceBefore]]) },
348
+ });
349
+ await writeFile(f.source, `/* harmless */ ${sourceBefore}`);
350
+ expect(await readSemanticLibraryCache(f.root, f.options, null)).not.toBeNull();
351
+ await writeFile(f.source, `// inserted line\n${sourceBefore}`);
352
+ expect(await readSemanticLibraryCache(f.root, f.options, null)).toBeNull();
353
+ });
354
+ test("semantic C cache refuses non-LF separator normalization", async () => {
355
+ const f = await fixture();
356
+ for (const separator of ["\r", "\u2028", "\u2029"]) {
357
+ const sourceBefore = [
358
+ "export function first(): number { return 1; }",
359
+ "export function value(): number { return 2; }\n",
360
+ ].join(separator);
361
+ await writeFile(f.source, sourceBefore);
362
+ const tracker = new FrontendInputTracker();
363
+ tracker.run(() => trackedReadFile(f.source));
364
+ await publishEarlyLibraryCache(f.root, f.options, {
365
+ cPath: f.cPath,
366
+ irPath: f.irPath,
367
+ sidecarPath: f.sidecarPath,
368
+ native: {
369
+ backend: "c",
370
+ regex: false,
371
+ assert: false,
372
+ inspect: false,
373
+ symbol: false,
374
+ searchParams: false,
375
+ emitter: false,
376
+ zlib: false,
377
+ copying: false,
378
+ textDecoderLegacy: false,
379
+ },
380
+ frontend: tracker.snapshot(),
381
+ semantic: {
382
+ mod: {
383
+ irVersion: 6,
384
+ sourceFile: f.source,
385
+ functions: [],
386
+ entry: "__main",
387
+ },
388
+ sources: new Map([[f.source, sourceBefore]]),
389
+ },
390
+ });
391
+ await writeFile(f.source, sourceBefore.replace(separator, "\n"));
392
+ expect(await readSemanticLibraryCache(f.root, f.options, null)).toBeNull();
393
+ }
394
+ });
395
+ test("semantic C cache refuses comment-only edits in multi-source graphs", async () => {
396
+ const f = await fixture();
397
+ const imported = join(dirname(f.source), "helper.ts");
398
+ const entrySource = await readFile(f.source, "utf8");
399
+ const importedSource = "export function helper(): number { return 1; }\n";
400
+ await writeFile(imported, importedSource);
401
+ const semanticMod = {
402
+ irVersion: 6,
403
+ sourceFile: f.source,
404
+ functions: [{
405
+ name: "__main",
406
+ params: [],
407
+ returnType: { kind: "void" },
408
+ locals: [],
409
+ body: [],
410
+ loc: { file: f.source, start: 0, end: entrySource.length },
411
+ }],
412
+ entry: "__main",
413
+ };
414
+ const tracker = new FrontendInputTracker();
415
+ tracker.run(() => {
416
+ trackedReadFile(f.source);
417
+ trackedReadFile(imported);
418
+ });
419
+ await publishEarlyLibraryCache(f.root, f.options, {
420
+ cPath: f.cPath,
421
+ irPath: f.irPath,
422
+ sidecarPath: f.sidecarPath,
423
+ native: {
424
+ backend: "c",
425
+ regex: false,
426
+ assert: false,
427
+ inspect: false,
428
+ symbol: false,
429
+ searchParams: false,
430
+ emitter: false,
431
+ zlib: false,
432
+ copying: false,
433
+ textDecoderLegacy: false,
434
+ },
435
+ frontend: tracker.snapshot(),
436
+ semantic: {
437
+ mod: semanticMod,
438
+ sources: new Map([[f.source, entrySource], [imported, importedSource]]),
439
+ },
440
+ });
441
+ await writeFile(f.source, `// inserted entry comment\n${entrySource}`);
442
+ expect(await readSemanticLibraryCache(f.root, f.options, null)).toBeNull();
443
+ await writeFile(f.source, entrySource);
444
+ await writeFile(imported, `// inserted imported comment\n${importedSource}`);
445
+ expect(await readSemanticLibraryCache(f.root, f.options, null)).toBeNull();
446
+ });
447
+ test("early library cache is separated by the host Node version", async () => {
448
+ const f = await fixture();
449
+ const tracker = new FrontendInputTracker();
450
+ tracker.run(() => trackedReadFile(f.source));
451
+ await publishEarlyLibraryCache(f.root, f.options, {
452
+ cPath: f.cPath,
453
+ irPath: f.irPath,
454
+ sidecarPath: f.sidecarPath,
455
+ native: {
456
+ backend: "llvm",
457
+ regex: false,
458
+ assert: false,
459
+ inspect: false,
460
+ symbol: false,
461
+ searchParams: false,
462
+ emitter: false,
463
+ zlib: false,
464
+ copying: false,
465
+ textDecoderLegacy: false,
466
+ },
467
+ frontend: tracker.snapshot(),
468
+ });
469
+ expect(await readEarlyLibraryCache(f.root, f.options, null)).not.toBeNull();
470
+ expect(await readEarlyLibraryCache(f.root, { ...f.options, nodeVersion: "v25-test" }, null)).toBeNull();
471
+ });
472
+ test("early library cache rejects corrupted artifacts and metadata", async () => {
473
+ const f = await fixture();
474
+ const tracker = new FrontendInputTracker();
475
+ tracker.run(() => trackedReadFile(f.source));
476
+ await publishEarlyLibraryCache(f.root, f.options, {
477
+ cPath: f.cPath,
478
+ irPath: f.irPath,
479
+ sidecarPath: f.sidecarPath,
480
+ native: {
481
+ backend: "llvm",
482
+ regex: false,
483
+ assert: false,
484
+ inspect: false,
485
+ symbol: false,
486
+ searchParams: false,
487
+ emitter: false,
488
+ zlib: false,
489
+ copying: false,
490
+ textDecoderLegacy: false,
491
+ },
492
+ frontend: tracker.snapshot(),
493
+ });
494
+ const earlyRoot = join(f.root, "early-lib");
495
+ const [key] = await readdir(earlyRoot);
496
+ await writeFile(join(earlyRoot, key, "program.tu"), "corrupt\n");
497
+ expect(await readEarlyLibraryCache(f.root, f.options, null)).toBeNull();
498
+ const stamp = join(earlyRoot, key, "stamp.json");
499
+ await writeFile(stamp, "{\"version\":1}\n");
500
+ expect(await readEarlyLibraryCache(f.root, f.options, null)).toBeNull();
501
+ });
502
+ test("disabled early library cache performs no reads or writes", async () => {
503
+ const f = await fixture();
504
+ const tracker = new FrontendInputTracker();
505
+ tracker.run(() => trackedReadFile(f.source));
506
+ const publish = {
507
+ cPath: f.cPath,
508
+ irPath: f.irPath,
509
+ sidecarPath: f.sidecarPath,
510
+ native: {
511
+ backend: "llvm",
512
+ regex: false,
513
+ assert: false,
514
+ inspect: false,
515
+ symbol: false,
516
+ searchParams: false,
517
+ emitter: false,
518
+ zlib: false,
519
+ copying: false,
520
+ textDecoderLegacy: false,
521
+ },
522
+ frontend: tracker.snapshot(),
523
+ };
524
+ await publishEarlyLibraryCache(null, f.options, publish);
525
+ await expect(readdir(f.root)).rejects.toThrow();
526
+ expect(await readEarlyLibraryCache(null, f.options, null)).toBeNull();
527
+ });
528
+ //# sourceMappingURL=early-cache.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"early-cache.test.js","sourceRoot":"","sources":["../../src/library/early-cache.test.ts"],"names":[],"mappings":"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"}
@@ -1504,6 +1504,20 @@ class FnAnalyzer {
1504
1504
  }
1505
1505
  return { ...TOP };
1506
1506
  }
1507
+ case "recordClone": {
1508
+ // The clone copies already-proven field values. Only explicit
1509
+ // overrides create new writes that must discharge integer slots.
1510
+ this.evalExpr(e.source, env);
1511
+ const slotMap = this.cfg.records.get(e.type.shapeId);
1512
+ for (const f of e.overrides) {
1513
+ const v = this.evalExpr(f.value, env);
1514
+ const slot = slotMap?.get(f.name);
1515
+ if (slot !== undefined && numberCarrierKind(f.value.type, this.mod) !== null) {
1516
+ this.emitRecordSlot(v, slot, f.value.loc);
1517
+ }
1518
+ }
1519
+ return { ...TOP };
1520
+ }
1507
1521
  case "recordGet": {
1508
1522
  // A declared record-field slot is an assumption on the read side,
1509
1523
  // exactly like a declared parameter inside its callee: every write