@scriptc/compiler 0.0.33 → 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 (102) hide show
  1. package/dist/backend/cc-cache.test.js +122 -0
  2. package/dist/backend/cc-cache.test.js.map +1 -1
  3. package/dist/backend/cc.d.ts +19 -0
  4. package/dist/backend/cc.js +111 -20
  5. package/dist/backend/cc.js.map +1 -1
  6. package/dist/backend/emission/emit-exprs.js +26 -1
  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 +11 -2
  11. package/dist/backend/emission/emitter.js +11 -5
  12. package/dist/backend/emission/emitter.js.map +1 -1
  13. package/dist/backend/library-identity.d.ts +22 -0
  14. package/dist/backend/library-identity.js +103 -0
  15. package/dist/backend/library-identity.js.map +1 -0
  16. package/dist/backend/llvm/emitter.d.ts +3 -0
  17. package/dist/backend/llvm/emitter.js +35 -5
  18. package/dist/backend/llvm/emitter.js.map +1 -1
  19. package/dist/backend/llvm/shapes.d.ts +1 -0
  20. package/dist/backend/llvm/shapes.js +25 -1
  21. package/dist/backend/llvm/shapes.js.map +1 -1
  22. package/dist/backend/mangle.d.ts +1 -0
  23. package/dist/backend/mangle.js +3 -0
  24. package/dist/backend/mangle.js.map +1 -1
  25. package/dist/backend/object-localize.d.ts +5 -5
  26. package/dist/backend/object-localize.js +19 -16
  27. package/dist/backend/object-localize.js.map +1 -1
  28. package/dist/backend/object-localize.test.js +37 -13
  29. package/dist/backend/object-localize.test.js.map +1 -1
  30. package/dist/frontend/input-tracker.d.ts +82 -0
  31. package/dist/frontend/input-tracker.js +380 -0
  32. package/dist/frontend/input-tracker.js.map +1 -0
  33. package/dist/frontend/input-tracker.test.d.ts +1 -0
  34. package/dist/frontend/input-tracker.test.js +137 -0
  35. package/dist/frontend/input-tracker.test.js.map +1 -0
  36. package/dist/frontend/lowering/lower-builtins.js +2 -8
  37. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  38. package/dist/frontend/lowering/lower-calls.js +155 -140
  39. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  40. package/dist/frontend/lowering/lower-classes.js +3 -0
  41. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  42. package/dist/frontend/lowering/lower-containers.js +48 -9
  43. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  44. package/dist/frontend/lowering/lower-exprs.js +67 -1
  45. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  46. package/dist/frontend/lowering/lower-inspect.js +45 -26
  47. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  48. package/dist/frontend/lowering/lower-modules.js +1 -1
  49. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  50. package/dist/frontend/lowering/lower-stmts.js +48 -3
  51. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  52. package/dist/frontend/lowering/lowerer.d.ts +67 -29
  53. package/dist/frontend/lowering/lowerer.js +410 -87
  54. package/dist/frontend/lowering/lowerer.js.map +1 -1
  55. package/dist/frontend/npm-static-rewrite.js +25 -26
  56. package/dist/frontend/npm-static-rewrite.js.map +1 -1
  57. package/dist/frontend/npm-static.js +29 -30
  58. package/dist/frontend/npm-static.js.map +1 -1
  59. package/dist/frontend/npm-static.test.d.ts +1 -0
  60. package/dist/frontend/npm-static.test.js +15 -0
  61. package/dist/frontend/npm-static.test.js.map +1 -0
  62. package/dist/frontend/npm.js +5 -17
  63. package/dist/frontend/npm.js.map +1 -1
  64. package/dist/frontend/program.js +2 -6
  65. package/dist/frontend/program.js.map +1 -1
  66. package/dist/frontend/resolve.js +8 -29
  67. package/dist/frontend/resolve.js.map +1 -1
  68. package/dist/frontend/ts7/program.js +17 -18
  69. package/dist/frontend/ts7/program.js.map +1 -1
  70. package/dist/frontend/types.d.ts +33 -0
  71. package/dist/frontend/types.js +114 -3
  72. package/dist/frontend/types.js.map +1 -1
  73. package/dist/index.d.ts +1 -1
  74. package/dist/index.js +241 -42
  75. package/dist/index.js.map +1 -1
  76. package/dist/ir/nodes.d.ts +21 -4
  77. package/dist/ir/nodes.js.map +1 -1
  78. package/dist/ir/serialize.d.ts +1 -1
  79. package/dist/ir/serialize.js +1 -1
  80. package/dist/ir/validate.js +31 -1
  81. package/dist/ir/validate.js.map +1 -1
  82. package/dist/library/early-cache.d.ts +65 -0
  83. package/dist/library/early-cache.js +380 -0
  84. package/dist/library/early-cache.js.map +1 -0
  85. package/dist/library/early-cache.test.d.ts +1 -0
  86. package/dist/library/early-cache.test.js +528 -0
  87. package/dist/library/early-cache.test.js.map +1 -0
  88. package/dist/library/int-infer.js +14 -0
  89. package/dist/library/int-infer.js.map +1 -1
  90. package/dist/library/int-infer.test.js +21 -4
  91. package/dist/library/int-infer.test.js.map +1 -1
  92. package/dist/library/semantic-source.d.ts +13 -0
  93. package/dist/library/semantic-source.js +257 -0
  94. package/dist/library/semantic-source.js.map +1 -0
  95. package/dist/library/semantic-source.test.d.ts +1 -0
  96. package/dist/library/semantic-source.test.js +113 -0
  97. package/dist/library/semantic-source.test.js.map +1 -0
  98. package/dist/library/sidecar.d.ts +6 -0
  99. package/dist/library/sidecar.js +11 -0
  100. package/dist/library/sidecar.js.map +1 -1
  101. package/package.json +2 -2
  102. package/surface-manifest.json +1 -1
@@ -2811,4 +2811,126 @@ test("library archives hit by content, invalidate on edits, and reuse runtime ob
2811
2811
  process.env["PATH"] = oldPath;
2812
2812
  }
2813
2813
  });
2814
+ test("library identity edits reuse the cached large program object", async () => {
2815
+ const dir = await mkdtemp(join(tmpdir(), "scriptc-lib-program-object-"));
2816
+ scratch.push(dir);
2817
+ const cacheRoot = join(dir, "cache");
2818
+ const cPath = join(dir, "program.c");
2819
+ const outPath = join(dir, "program.lib.a");
2820
+ const oldCacheDir = process.env["SCRIPTC_CACHE_DIR"];
2821
+ const oldNoCache = process.env["SCRIPTC_NO_CACHE"];
2822
+ try {
2823
+ process.env["SCRIPTC_CACHE_DIR"] = cacheRoot;
2824
+ delete process.env["SCRIPTC_NO_CACHE"];
2825
+ await mkdir(cacheRoot, { mode: 0o700 });
2826
+ const programSource = "int scriptc_large_program_value(void) { return 7; }\n";
2827
+ await writeFile(cPath, `${programSource}unsigned long long scriptc_build_id(void) { return 1; }\n`);
2828
+ await compileLibArchive({
2829
+ cPath,
2830
+ programSource,
2831
+ identityCSource: "unsigned long long scriptc_build_id(void) { return 1; }\n",
2832
+ outPath,
2833
+ cacheIdentity: TEST_CACHE_IDENTITY,
2834
+ });
2835
+ const [objectName] = (await readdir(join(cacheRoot, "program-obj")))
2836
+ .filter((name) => !name.endsWith(".sha256"));
2837
+ expect(objectName).toBeDefined();
2838
+ const objectPath = join(cacheRoot, "program-obj", objectName);
2839
+ const objectDigest = await readFile(`${objectPath}.sha256`, "utf8");
2840
+ const old = new Date("2000-01-01T00:00:00.000Z");
2841
+ await utimes(objectPath, old, old);
2842
+ await writeFile(cPath, `${programSource}unsigned long long scriptc_build_id(void) { return 2; }\n`);
2843
+ await compileLibArchive({
2844
+ cPath,
2845
+ programSource,
2846
+ identityCSource: "unsigned long long scriptc_build_id(void) { return 2; }\n",
2847
+ outPath,
2848
+ cacheIdentity: TEST_CACHE_IDENTITY,
2849
+ });
2850
+ expect(await readFile(`${objectPath}.sha256`, "utf8")).toBe(objectDigest);
2851
+ expect((await stat(objectPath)).mtimeMs).toBeGreaterThan(old.getTime());
2852
+ expect((await readdir(join(cacheRoot, "program-obj"))).filter((name) => !name.endsWith(".sha256"))).toEqual([objectName]);
2853
+ const probeSource = join(dir, "probe.c");
2854
+ const probe = join(dir, "probe");
2855
+ await writeFile(probeSource, "#include <stdio.h>\nint scriptc_large_program_value(void);\nunsigned long long scriptc_build_id(void);\nint main(void) { printf(\"%d %llu\\n\", scriptc_large_program_value(), scriptc_build_id()); }\n");
2856
+ execFileSync("clang", [probeSource, outPath, "-lm", "-o", probe]);
2857
+ expect(execFileSync(probe, { encoding: "utf8" })).toBe("7 2\n");
2858
+ }
2859
+ finally {
2860
+ if (oldCacheDir === undefined)
2861
+ delete process.env["SCRIPTC_CACHE_DIR"];
2862
+ else
2863
+ process.env["SCRIPTC_CACHE_DIR"] = oldCacheDir;
2864
+ if (oldNoCache === undefined)
2865
+ delete process.env["SCRIPTC_NO_CACHE"];
2866
+ else
2867
+ process.env["SCRIPTC_NO_CACHE"] = oldNoCache;
2868
+ }
2869
+ });
2870
+ test.skipIf(process.platform === "win32" || zigExecutable === undefined)("cross-ELF localized archives retain unreferenced identity roots", async () => {
2871
+ const dir = await mkdtemp(join(tmpdir(), "scriptc-lib-localized-identity-"));
2872
+ scratch.push(dir);
2873
+ const cPath = join(dir, "program.c");
2874
+ const probePath = join(dir, "probe.c");
2875
+ const archivePath = join(dir, "program.lib.a");
2876
+ const probeOutput = join(dir, "probe");
2877
+ const cacheRoot = join(dir, "cache");
2878
+ const target = "x86_64-linux-gnu.2.36";
2879
+ const oldCacheDir = process.env["SCRIPTC_CACHE_DIR"];
2880
+ const oldNoCache = process.env["SCRIPTC_NO_CACHE"];
2881
+ const oldCc = process.env["SCRIPTC_CC"];
2882
+ const oldTarget = process.env["SCRIPTC_TARGET"];
2883
+ try {
2884
+ process.env["SCRIPTC_CACHE_DIR"] = cacheRoot;
2885
+ delete process.env["SCRIPTC_NO_CACHE"];
2886
+ process.env["SCRIPTC_CC"] = "zigcc";
2887
+ process.env["SCRIPTC_TARGET"] = target;
2888
+ await writeFile(cPath, "int scriptc_large_program_value(void) { return 7; }\n");
2889
+ await compileLibArchive({
2890
+ cPath,
2891
+ identityCSource: [
2892
+ "unsigned long long scriptc_build_id(void) { return 2; }",
2893
+ "unsigned scriptc_abi_version(void) { return 1; }",
2894
+ "",
2895
+ ].join("\n"),
2896
+ outPath: archivePath,
2897
+ cacheIdentity: TEST_CACHE_IDENTITY,
2898
+ localizeSymbols: [
2899
+ "scriptc_large_program_value",
2900
+ "scriptc_build_id",
2901
+ "scriptc_abi_version",
2902
+ ],
2903
+ });
2904
+ await writeFile(probePath, [
2905
+ "int scriptc_large_program_value(void);",
2906
+ "unsigned long long scriptc_build_id(void);",
2907
+ "unsigned scriptc_abi_version(void);",
2908
+ "int main(void) {",
2909
+ " return scriptc_large_program_value() != 7 || scriptc_build_id() != 2 || scriptc_abi_version() != 1;",
2910
+ "}",
2911
+ "",
2912
+ ].join("\n"));
2913
+ execFileSync(zigExecutable, [
2914
+ "cc", "-target", target, probePath, archivePath, "-lm", "-o", probeOutput,
2915
+ ]);
2916
+ }
2917
+ finally {
2918
+ if (oldCacheDir === undefined)
2919
+ delete process.env["SCRIPTC_CACHE_DIR"];
2920
+ else
2921
+ process.env["SCRIPTC_CACHE_DIR"] = oldCacheDir;
2922
+ if (oldNoCache === undefined)
2923
+ delete process.env["SCRIPTC_NO_CACHE"];
2924
+ else
2925
+ process.env["SCRIPTC_NO_CACHE"] = oldNoCache;
2926
+ if (oldCc === undefined)
2927
+ delete process.env["SCRIPTC_CC"];
2928
+ else
2929
+ process.env["SCRIPTC_CC"] = oldCc;
2930
+ if (oldTarget === undefined)
2931
+ delete process.env["SCRIPTC_TARGET"];
2932
+ else
2933
+ process.env["SCRIPTC_TARGET"] = oldTarget;
2934
+ }
2935
+ });
2814
2936
  //# sourceMappingURL=cc-cache.test.js.map