@scriptc/compiler 0.1.5 → 0.1.7

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 (139) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +0 -1
  2. package/ambient/scriptc.d.ts +13 -5
  3. package/dist/backend/c/c-emitter.d.ts +5 -0
  4. package/dist/backend/c/c-emitter.js +15 -0
  5. package/dist/backend/c/c-emitter.js.map +1 -1
  6. package/dist/backend/c/exprs.js +81 -9
  7. package/dist/backend/c/exprs.js.map +1 -1
  8. package/dist/backend/c/stmts.js +25 -1
  9. package/dist/backend/c/stmts.js.map +1 -1
  10. package/dist/backend/c/walkers.js +2 -3
  11. package/dist/backend/c/walkers.js.map +1 -1
  12. package/dist/backend/debug-symbols.d.ts +8 -0
  13. package/dist/backend/debug-symbols.js +52 -0
  14. package/dist/backend/debug-symbols.js.map +1 -0
  15. package/dist/backend/link-plan.d.ts +1 -0
  16. package/dist/backend/link-plan.js +2 -0
  17. package/dist/backend/link-plan.js.map +1 -1
  18. package/dist/backend/linker.js +8 -0
  19. package/dist/backend/linker.js.map +1 -1
  20. package/dist/backend/llvm/blocks.d.ts +2 -0
  21. package/dist/backend/llvm/blocks.js +18 -2
  22. package/dist/backend/llvm/blocks.js.map +1 -1
  23. package/dist/backend/llvm/debug-info.d.ts +32 -0
  24. package/dist/backend/llvm/debug-info.js +203 -0
  25. package/dist/backend/llvm/debug-info.js.map +1 -0
  26. package/dist/backend/llvm/dyn.js +4 -10
  27. package/dist/backend/llvm/dyn.js.map +1 -1
  28. package/dist/backend/llvm/emitter.d.ts +2 -0
  29. package/dist/backend/llvm/emitter.js +49 -4
  30. package/dist/backend/llvm/emitter.js.map +1 -1
  31. package/dist/backend/llvm/expr-containers.js +28 -2
  32. package/dist/backend/llvm/expr-containers.js.map +1 -1
  33. package/dist/backend/llvm/expr-dynamic.js +10 -0
  34. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  35. package/dist/backend/llvm/lib-filesystem.js +37 -0
  36. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  37. package/dist/backend/llvm/lib-process.js +4 -3
  38. package/dist/backend/llvm/lib-process.js.map +1 -1
  39. package/dist/backend/llvm/lib-shared.js +9 -0
  40. package/dist/backend/llvm/lib-shared.js.map +1 -1
  41. package/dist/backend/llvm/split.js +4 -1
  42. package/dist/backend/llvm/split.js.map +1 -1
  43. package/dist/backend/llvm/split.test.js +26 -1
  44. package/dist/backend/llvm/split.test.js.map +1 -1
  45. package/dist/backend/native-toolchain.js +58 -8
  46. package/dist/backend/native-toolchain.js.map +1 -1
  47. package/dist/backend/native-toolchain.test.js +10 -0
  48. package/dist/backend/native-toolchain.test.js.map +1 -1
  49. package/dist/backend/source-locations.d.ts +12 -0
  50. package/dist/backend/source-locations.js +32 -0
  51. package/dist/backend/source-locations.js.map +1 -0
  52. package/dist/backend/source-locations.test.d.ts +1 -0
  53. package/dist/backend/source-locations.test.js +16 -0
  54. package/dist/backend/source-locations.test.js.map +1 -0
  55. package/dist/coverage/surface-manifest.js +6 -1
  56. package/dist/coverage/surface-manifest.js.map +1 -1
  57. package/dist/diagnostics/diagnostic.d.ts +4 -0
  58. package/dist/diagnostics/diagnostic.js +12 -0
  59. package/dist/diagnostics/diagnostic.js.map +1 -1
  60. package/dist/executable/executable-cache.js +28 -4
  61. package/dist/executable/executable-cache.js.map +1 -1
  62. package/dist/executable/executable-cache.test.js +23 -0
  63. package/dist/executable/executable-cache.test.js.map +1 -1
  64. package/dist/frontend/arguments-usage.d.ts +6 -0
  65. package/dist/frontend/arguments-usage.js +40 -0
  66. package/dist/frontend/arguments-usage.js.map +1 -0
  67. package/dist/frontend/binding-source.d.ts +4 -0
  68. package/dist/frontend/binding-source.js +18 -0
  69. package/dist/frontend/binding-source.js.map +1 -0
  70. package/dist/frontend/lowering/array-indexed-mutation.d.ts +8 -0
  71. package/dist/frontend/lowering/array-indexed-mutation.js +176 -0
  72. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -0
  73. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +7 -0
  74. package/dist/frontend/lowering/containers/string-and-regexp.js +190 -13
  75. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  76. package/dist/frontend/lowering/expressions/object-literals.js +13 -8
  77. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  78. package/dist/frontend/lowering/expressions/optional-chains.d.ts +5 -6
  79. package/dist/frontend/lowering/expressions/optional-chains.js +7 -6
  80. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  81. package/dist/frontend/lowering/indexed-comparison.d.ts +6 -0
  82. package/dist/frontend/lowering/indexed-comparison.js +30 -0
  83. package/dist/frontend/lowering/indexed-comparison.js.map +1 -0
  84. package/dist/frontend/lowering/lower-builtins.d.ts +1 -1
  85. package/dist/frontend/lowering/lower-builtins.js +21 -10
  86. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  87. package/dist/frontend/lowering/lower-calls.d.ts +2 -9
  88. package/dist/frontend/lowering/lower-calls.js +406 -40
  89. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  90. package/dist/frontend/lowering/lower-classes.js +3 -27
  91. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  92. package/dist/frontend/lowering/lower-containers.d.ts +8 -2
  93. package/dist/frontend/lowering/lower-containers.js +454 -104
  94. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  95. package/dist/frontend/lowering/lower-exprs.js +134 -18
  96. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  97. package/dist/frontend/lowering/lower-island.d.ts +1 -1
  98. package/dist/frontend/lowering/lower-island.js +1 -1
  99. package/dist/frontend/lowering/lower-modules.js +19 -8
  100. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  101. package/dist/frontend/lowering/lower-stmts.js +4 -37
  102. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  103. package/dist/frontend/lowering/lowerer.js +14 -3
  104. package/dist/frontend/lowering/lowerer.js.map +1 -1
  105. package/dist/frontend/lowering/surfaces.d.ts +3 -1
  106. package/dist/frontend/lowering/surfaces.js +50 -7
  107. package/dist/frontend/lowering/surfaces.js.map +1 -1
  108. package/dist/frontend/program.d.ts +5 -0
  109. package/dist/frontend/program.js +216 -32
  110. package/dist/frontend/program.js.map +1 -1
  111. package/dist/frontend/program.test.d.ts +1 -0
  112. package/dist/frontend/program.test.js +117 -0
  113. package/dist/frontend/program.test.js.map +1 -0
  114. package/dist/frontend/type-mapper.d.ts +4 -2
  115. package/dist/frontend/type-mapper.js +249 -186
  116. package/dist/frontend/type-mapper.js.map +1 -1
  117. package/dist/frontend/type-mapper.test.d.ts +1 -0
  118. package/dist/frontend/type-mapper.test.js +86 -0
  119. package/dist/frontend/type-mapper.test.js.map +1 -0
  120. package/dist/index.d.ts +2 -1
  121. package/dist/index.js +7 -2
  122. package/dist/index.js.map +1 -1
  123. package/dist/ir/analysis.js +4 -2
  124. package/dist/ir/analysis.js.map +1 -1
  125. package/dist/ir/ir.d.ts +33 -14
  126. package/dist/ir/ir.js +5 -1
  127. package/dist/ir/ir.js.map +1 -1
  128. package/dist/ir/validate.js +57 -31
  129. package/dist/ir/validate.js.map +1 -1
  130. package/dist/ir/validate.test.js +17 -0
  131. package/dist/ir/validate.test.js.map +1 -1
  132. package/dist/library/compiler-self-identity.d.ts +1 -1
  133. package/dist/library/compiler-self-identity.js +31 -15
  134. package/dist/library/compiler-self-identity.js.map +1 -1
  135. package/dist/library/compiler-self-identity.test.d.ts +1 -0
  136. package/dist/library/compiler-self-identity.test.js +93 -0
  137. package/dist/library/compiler-self-identity.test.js.map +1 -0
  138. package/package.json +17 -17
  139. package/surface-manifest.json +155 -4
@@ -1,9 +1,11 @@
1
- import { execFileSync } from "node:child_process";
1
+ import { execFileSync, spawnSync } from "node:child_process";
2
2
  import { mkdtemp, readFile, writeFile } from "node:fs/promises";
3
3
  import { tmpdir } from "node:os";
4
4
  import { join } from "node:path";
5
5
  import { afterAll, expect, test } from "vitest";
6
6
  import { splitLlvmLibraryProgram, splitLlvmProgram } from "./split.js";
7
+ import { LlvmDebugInfo } from "./debug-info.js";
8
+ import { VOID } from "../../ir/ir.js";
7
9
  const scratch = [];
8
10
  afterAll(async () => {
9
11
  const { rm } = await import("node:fs/promises");
@@ -62,6 +64,29 @@ test("thread-local program state conservatively keeps the single-TU path", () =>
62
64
  const tls = SAMPLE.replace("@hidden_value = internal global i64 7", "@hidden_value = internal thread_local global i64 7");
63
65
  expect(splitLlvmProgram(tls, { minimumBytes: 0, targetBytes: 64 * 1024 })).toBeNull();
64
66
  });
67
+ test("debug metadata stays on definitions when splitting LLVM modules", async () => {
68
+ const debug = new LlvmDebugInfo("/source/main.ts", new Map([["/source/main.ts", "console.log(1);\n"]]));
69
+ let source = SAMPLE;
70
+ for (const name of ["left", "right", "public_entry"]) {
71
+ const loc = { file: "/source/main.ts", start: 0, end: 1 };
72
+ const scope = debug.function({ name, loc, params: [], locals: [], body: [], returnType: VOID });
73
+ const location = debug.location(loc, scope);
74
+ source = source.replace(new RegExp(`(@${name}\\(\\) #0) \\{([\\s\\S]*?)\\n\\}`), (_, header, body) => `${header} !dbg ${scope} {${body.split("\n").map((line) => line.startsWith(" ") ? `${line}, !dbg ${location}` : line).join("\n")}\n}`);
75
+ }
76
+ source += debug.render();
77
+ const split = splitLlvmProgram(source, { minimumBytes: 0 });
78
+ expect(split).not.toBeNull();
79
+ const dir = await mkdtemp(join(tmpdir(), "scriptc-debug-split-"));
80
+ scratch.push(dir);
81
+ for (const shard of split.shards) {
82
+ expect(shard.source).not.toMatch(/^declare.*!dbg/m);
83
+ const path = join(dir, shard.name);
84
+ await writeFile(path, shard.source);
85
+ const result = spawnSync("clang", ["-Wno-override-module", "-c", path, "-o", `${path}.o`], { encoding: "utf8" });
86
+ expect(result.status, result.stderr).toBe(0);
87
+ expect(result.stderr).toBe("");
88
+ }
89
+ });
65
90
  test("dev libraries split at the measured 2MB crossover while executables retain 4MB", () => {
66
91
  const body = Array.from({ length: 700 }, (_, i) => `define internal i64 @library_pad_${i}() #0 {\nentry:\n ; ${"x".repeat(3072)}\n ret i64 ${i}\n}\n`).join("\n");
67
92
  const source = SAMPLE.replace("define i64 @public_entry", `${body}\ndefine i64 @public_entry`);
@@ -1 +1 @@
1
- {"version":3,"file":"split.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/split.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEvE,MAAM,OAAO,GAAa,EAAE,CAAC;AAC7B,QAAQ,CAAC,KAAK,IAAI,EAAE;IAClB,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAChD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACvF,CAAC,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Bd,CAAC;AAEF,IAAI,CAAC,mFAAmF,EAAE,GAAG,EAAE;IAC7F,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACpF,0EAA0E;IAC1E,kDAAkD;IAClD,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC7B,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAC1B,0BAA0B,EAC1B,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,4BAA4B,CAAC,wBAAwB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAC7K,CAAC;IACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACpF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC9B,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,CAAC,MAAO,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1D,MAAM,CAAC,MAAO,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,CAAC,MAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9D,MAAM,CAAC,MAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9D,MAAM,CAAC,MAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC3D,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;IACnF,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7C,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,4CAA4C,CAAC,CACpE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACnC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACvD,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CACxD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oEAAoE,EAAE,GAAG,EAAE;IAC9E,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CACxB,uCAAuC,EACvC,oDAAoD,CACrD,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gFAAgF,EAAE,GAAG,EAAE;IAC1F,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChD,oCAAoC,CAAC,wBAAwB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CACrG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,GAAG,IAAI,4BAA4B,CAAC,CAAC;IAC/F,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5C,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAEhE,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC7D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;IACtG,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChD,4BAA4B,CAAC,wBAAwB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAC7F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,gBAAgB,CAC5B,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,GAAG,IAAI,4BAA4B,CAAC,EAC/E,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,CAC3C,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC;QAC7B,MAAM,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACtC,YAAY,CAAC,OAAO,EAAE,CAAC,sBAAsB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACzC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACnC,MAAM,SAAS,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QACtD,YAAY,CAAC,SAAS,EAAE,CAAC,yBAAyB,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"split.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/split.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,MAAM,OAAO,GAAa,EAAE,CAAC;AAC7B,QAAQ,CAAC,KAAK,IAAI,EAAE;IAClB,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAChD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACvF,CAAC,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Bd,CAAC;AAEF,IAAI,CAAC,mFAAmF,EAAE,GAAG,EAAE;IAC7F,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACpF,0EAA0E;IAC1E,kDAAkD;IAClD,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC7B,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAC1B,0BAA0B,EAC1B,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,4BAA4B,CAAC,wBAAwB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAC7K,CAAC;IACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACpF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC9B,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,CAAC,MAAO,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1D,MAAM,CAAC,MAAO,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,CAAC,MAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9D,MAAM,CAAC,MAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9D,MAAM,CAAC,MAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC3D,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;IACnF,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7C,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,4CAA4C,CAAC,CACpE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACnC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACvD,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CACxD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oEAAoE,EAAE,GAAG,EAAE;IAC9E,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CACxB,uCAAuC,EACvC,oDAAoD,CACrD,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;IACjF,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,iBAAiB,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxG,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAChG,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,kCAAkC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAc,EAAE,IAAY,EAAE,EAAE,CACnH,GAAG,MAAM,SAAS,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CACvI,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,KAAK,IAAI,KAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACjH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gFAAgF,EAAE,GAAG,EAAE;IAC1F,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChD,oCAAoC,CAAC,wBAAwB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CACrG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,GAAG,IAAI,4BAA4B,CAAC,CAAC;IAC/F,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5C,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAEhE,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC7D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;IACtG,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChD,4BAA4B,CAAC,wBAAwB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAC7F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,gBAAgB,CAC5B,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,GAAG,IAAI,4BAA4B,CAAC,EAC/E,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,CAC3C,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC;QAC7B,MAAM,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACtC,YAAY,CAAC,OAAO,EAAE,CAAC,sBAAsB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACzC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACnC,MAAM,SAAS,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QACtD,YAAY,CAAC,SAAS,EAAE,CAAC,yBAAyB,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC"}
@@ -11,6 +11,7 @@ import { fileURLToPath } from "node:url";
11
11
  import { promisify } from "node:util";
12
12
  import { localizeElfObject, mergeAndLocalizeCoffObjects } from "./object-localize.js";
13
13
  import { executableOptimizationLinkerArgs, executableStripLinkerArgs, windowsSubsystemLinkerArgs } from "./targets.js";
14
+ import { createDarwinDebugSymbols, installDarwinDebugSymbols, needsDarwinDebugSymbols, readDarwinDebugSymbols } from "./debug-symbols.js";
14
15
  import { createVendorArchives, MBEDTLS_VERSION, QJS_COMMIT, ZLIB_VERSION, } from "./vendor-archives.js";
15
16
  import { cacheDigestPath, cacheRootDir, copyValidCachedFile, ensurePrivateCacheRoot, fileDigest, fileExists, installArtifact, privateSiblingPath, protectCachedArtifact, pruneCache, publishCachedFile, validCachedFile, } from "./build-cache.js";
16
17
  export { buildCacheRoot, prepareBuildCacheRoot, pruneBuildCache, resolveBuildCacheRoot, } from "./build-cache.js";
@@ -2680,7 +2681,7 @@ function localArtifactStampIntegrity(stamp) {
2680
2681
  .update(JSON.stringify(stamp))
2681
2682
  .digest("hex");
2682
2683
  }
2683
- async function localArtifactHit(stampPath, outPath, key) {
2684
+ async function localArtifactHit(stampPath, outPath, key, darwinDebugSymbols = false) {
2684
2685
  try {
2685
2686
  const stamp = JSON.parse(await readFile(stampPath, "utf8"));
2686
2687
  const output = await lstat(outPath);
@@ -2688,6 +2689,8 @@ async function localArtifactHit(stampPath, outPath, key) {
2688
2689
  if (stamp.version !== 2 ||
2689
2690
  stamp.key !== key ||
2690
2691
  !/^[0-9a-f]{64}$/.test(stamp.digest ?? "") ||
2692
+ (darwinDebugSymbols !== (stamp.debugSymbolsDigest !== undefined)) ||
2693
+ (stamp.debugSymbolsDigest !== undefined && !/^[0-9a-f]{64}$/.test(stamp.debugSymbolsDigest)) ||
2691
2694
  !Array.isArray(stamp.dependencies) ||
2692
2695
  !/^[0-9a-f]{64}$/.test(stamp.integrity ?? "") ||
2693
2696
  localArtifactStampIntegrity({
@@ -2695,6 +2698,7 @@ async function localArtifactHit(stampPath, outPath, key) {
2695
2698
  key: stamp.key,
2696
2699
  digest: stamp.digest,
2697
2700
  dependencies: stamp.dependencies,
2701
+ ...(stamp.debugSymbolsDigest === undefined ? {} : { debugSymbolsDigest: stamp.debugSymbolsDigest }),
2698
2702
  }) !== stamp.integrity ||
2699
2703
  !output.isFile() ||
2700
2704
  (output.mode & 0o777) !== expectedMode ||
@@ -2718,7 +2722,8 @@ async function localArtifactHit(stampPath, outPath, key) {
2718
2722
  typeof dependency.targetMtimeMs !== "number" ||
2719
2723
  typeof dependency.targetCtimeMs !== "number")) ||
2720
2724
  !(await nativeArtifactDependenciesStillMatch(stamp.dependencies)) ||
2721
- await fileDigest(outPath) !== stamp.digest) {
2725
+ await fileDigest(outPath) !== stamp.digest ||
2726
+ darwinDebugSymbols && createHash("sha256").update(await readDarwinDebugSymbols(outPath)).digest("hex") !== stamp.debugSymbolsDigest) {
2722
2727
  return null;
2723
2728
  }
2724
2729
  const now = new Date();
@@ -2729,7 +2734,7 @@ async function localArtifactHit(stampPath, outPath, key) {
2729
2734
  return null;
2730
2735
  }
2731
2736
  }
2732
- async function publishLocalArtifactStamp(stampPath, outPath, key, dependencyPaths, recursiveDirectories = [], recursiveExclusions = []) {
2737
+ async function publishLocalArtifactStamp(stampPath, outPath, key, dependencyPaths, recursiveDirectories = [], recursiveExclusions = [], darwinDebugSymbols = false) {
2733
2738
  await mkdir(dirname(stampPath), { recursive: true });
2734
2739
  const tmp = `${stampPath}.tmp-${process.pid}-${Math.random().toString(36).slice(2)}`;
2735
2740
  try {
@@ -2739,6 +2744,9 @@ async function publishLocalArtifactStamp(stampPath, outPath, key, dependencyPath
2739
2744
  key,
2740
2745
  digest: await fileDigest(outPath),
2741
2746
  dependencies,
2747
+ ...(darwinDebugSymbols
2748
+ ? { debugSymbolsDigest: createHash("sha256").update(await readDarwinDebugSymbols(outPath)).digest("hex") }
2749
+ : {}),
2742
2750
  };
2743
2751
  const stamp = {
2744
2752
  ...unsigned,
@@ -2898,6 +2906,10 @@ async function compileCInternal(opts, cacheWarmOnly, cacheWarmPaths) {
2898
2906
  const tls = (opts.tls ?? false) || nativeFetch || netIsland;
2899
2907
  const tlsCa = (opts.tlsCa ?? false) || tls;
2900
2908
  const driver = resolveCc();
2909
+ const darwinDebugSymbols = needsDarwinDebugSymbols(targetPlatform(driver), optimization, opts.strip);
2910
+ const debugFlags = optimization === "dev" && !opts.strip
2911
+ ? ["-gline-tables-only", ...(opts.cPath.endsWith(".ll") ? [] : ["-gno-column-info"])]
2912
+ : [];
2901
2913
  const shardNames = new Set();
2902
2914
  const programShardsValid = opts.programShards?.every((shard) => {
2903
2915
  if (basename(shard.name) !== shard.name || !shard.name.endsWith(".ll") ||
@@ -3032,7 +3044,7 @@ async function compileCInternal(opts, cacheWarmOnly, cacheWarmPaths) {
3032
3044
  programBytes,
3033
3045
  compilerPath: effectiveCompiler.canonicalPath,
3034
3046
  };
3035
- const hit = await localArtifactHit(stampPath, opts.outPath, key);
3047
+ const hit = await localArtifactHit(stampPath, opts.outPath, key, darwinDebugSymbols);
3036
3048
  if (hit !== null) {
3037
3049
  await opts.onArtifactReady?.({ dependencies: hit.dependencies }).catch(() => undefined);
3038
3050
  return;
@@ -3212,10 +3224,11 @@ async function compileCInternal(opts, cacheWarmOnly, cacheWarmPaths) {
3212
3224
  // the historical single invocation, cached-.o substitution on cache misses.
3213
3225
  const buildArgs = (rt, build = {}) => [
3214
3226
  "-std=c11",
3227
+ ...debugFlags,
3215
3228
  ...driver.targetArgs,
3216
3229
  ...threadArgs,
3217
3230
  ...(sanitize
3218
- ? ["-O1", "-fsanitize=address", "-DSCR_RC_AUDIT"]
3231
+ ? [optimization === "dev" ? "-O0" : "-O1", "-fsanitize=address", "-DSCR_RC_AUDIT"]
3219
3232
  : [optimization === "dev" ? "-O0" : "-O2"]),
3220
3233
  ...executableSectionFlags.compile,
3221
3234
  ...(opts.textDecoderLegacy ? ["-DSCR_TEXT_DECODER_LEGACY"] : []),
@@ -3405,10 +3418,11 @@ async function compileCInternal(opts, cacheWarmOnly, cacheWarmPaths) {
3405
3418
  // historical single clang invocation.
3406
3419
  const cflags = [
3407
3420
  "-std=c11",
3421
+ ...debugFlags,
3408
3422
  ...driver.targetArgs,
3409
3423
  ...threadArgs,
3410
3424
  ...(sanitize
3411
- ? ["-O1", "-fsanitize=address", "-DSCR_RC_AUDIT"]
3425
+ ? [optimization === "dev" ? "-O0" : "-O1", "-fsanitize=address", "-DSCR_RC_AUDIT"]
3412
3426
  : [optimization === "dev" ? "-O0" : "-O2"]),
3413
3427
  ...executableSectionFlags.compile,
3414
3428
  ...(opts.textDecoderLegacy ? ["-DSCR_TEXT_DECODER_LEGACY"] : []),
@@ -3761,12 +3775,29 @@ async function compileCInternal(opts, cacheWarmOnly, cacheWarmPaths) {
3761
3775
  if (!(await copyValidCachedFile(cachedBin, tmpOut))) {
3762
3776
  throw new Error("invalid cached executable");
3763
3777
  }
3778
+ if (darwinDebugSymbols) {
3779
+ const cachedSymbols = `${cachedBin}.dsym`;
3780
+ const symbolsCopy = privateSiblingPath(opts.outPath, "dsym-hit");
3781
+ try {
3782
+ if (!(await copyValidCachedFile(cachedSymbols, symbolsCopy)))
3783
+ throw new Error("invalid cached dSYM");
3784
+ const bytes = await readFile(symbolsCopy);
3785
+ // A concurrent publisher may replace either payload. The sidecar
3786
+ // also names its binary digest so a mixed pair always misses.
3787
+ if (bytes.subarray(0, 32).toString("hex") !== await fileDigest(tmpOut))
3788
+ throw new Error("mismatched cached dSYM");
3789
+ await installDarwinDebugSymbols(bytes.subarray(32), opts.outPath);
3790
+ }
3791
+ finally {
3792
+ await rm(symbolsCopy, { force: true });
3793
+ }
3794
+ }
3764
3795
  // Match a fresh linker output under the caller's current umask. Reusing a
3765
3796
  // cache entry populated by a less restrictive shell must not widen access.
3766
3797
  await chmod(tmpOut, 0o777 & ~process.umask());
3767
3798
  await rename(tmpOut, opts.outPath);
3768
3799
  if (localArtifact !== null && localArtifactDependencyPaths !== null) {
3769
- const stamp = await publishLocalArtifactStamp(localArtifact.stampPath, opts.outPath, localArtifact.key, localArtifactDependencyPaths, [dirname(resolve(opts.cPath))], [persistentCache.root]).catch(() => null);
3800
+ const stamp = await publishLocalArtifactStamp(localArtifact.stampPath, opts.outPath, localArtifact.key, localArtifactDependencyPaths, [dirname(resolve(opts.cPath))], [persistentCache.root], darwinDebugSymbols).catch(() => null);
3770
3801
  if (stamp !== null) {
3771
3802
  await opts.onArtifactReady?.({ dependencies: stamp.dependencies }).catch(() => undefined);
3772
3803
  }
@@ -3934,6 +3965,14 @@ async function compileCInternal(opts, cacheWarmOnly, cacheWarmPaths) {
3934
3965
  await runClang(buildArgs((p) => objects?.get(p) ?? p, shardedProgramObject === null
3935
3966
  ? { programPath, outPath: privateOut, compilerVisibleSource: opts.cPath }
3936
3967
  : { programPath: shardedProgramObject, outPath: privateOut }));
3968
+ if (darwinDebugSymbols) {
3969
+ // clang invokes dsymutil when compiling a source TU while linking.
3970
+ // A sharded program is already an object, so run it explicitly while
3971
+ // the merged object and staged runtime inputs still exist.
3972
+ if (shardedProgramObject !== null)
3973
+ await createDarwinDebugSymbols(privateOut);
3974
+ await installDarwinDebugSymbols(await readDarwinDebugSymbols(privateOut), opts.outPath);
3975
+ }
3937
3976
  await installArtifact(privateOut, opts.outPath);
3938
3977
  if (cachedBin !== null && keyHex !== null) {
3939
3978
  // Metadata comparison catches ordinary changes cheaply, but cannot by
@@ -3972,6 +4011,14 @@ async function compileCInternal(opts, cacheWarmOnly, cacheWarmPaths) {
3972
4011
  // generated code and embedded literals private; the hit path reapplies
3973
4012
  // the caller's current executable mode to its destination copy.
3974
4013
  await publishCachedFile(privateOut, cachedBin);
4014
+ if (darwinDebugSymbols) {
4015
+ const symbols = privateSiblingPath(privateOut, "debug-symbols");
4016
+ await writeFile(symbols, Buffer.concat([
4017
+ Buffer.from(await fileDigest(privateOut), "hex"),
4018
+ await readDarwinDebugSymbols(privateOut),
4019
+ ]));
4020
+ await publishCachedFile(symbols, `${cachedBin}.dsym`);
4021
+ }
3975
4022
  }
3976
4023
  catch {
3977
4024
  /* publishing is best-effort */
@@ -3981,7 +4028,7 @@ async function compileCInternal(opts, cacheWarmOnly, cacheWarmPaths) {
3981
4028
  localArtifactDependencyPaths !== null &&
3982
4029
  cacheCompleteArtifact &&
3983
4030
  cacheInputsStable) {
3984
- const stamp = await publishLocalArtifactStamp(localArtifact.stampPath, opts.outPath, localArtifact.key, localArtifactDependencyPaths, [dirname(resolve(opts.cPath))], [persistentCache.root]).catch(() => null);
4031
+ const stamp = await publishLocalArtifactStamp(localArtifact.stampPath, opts.outPath, localArtifact.key, localArtifactDependencyPaths, [dirname(resolve(opts.cPath))], [persistentCache.root], darwinDebugSymbols).catch(() => null);
3985
4032
  if (stamp !== null) {
3986
4033
  await opts.onArtifactReady?.({ dependencies: stamp.dependencies }).catch(() => undefined);
3987
4034
  }
@@ -3997,6 +4044,9 @@ async function compileCInternal(opts, cacheWarmOnly, cacheWarmPaths) {
3997
4044
  export async function compileC(opts) {
3998
4045
  clearCcCaches();
3999
4046
  await compileCInternal(opts, false);
4047
+ if (targetPlatform(resolveCc()) === "darwin" && !needsDarwinDebugSymbols("darwin", opts.optimization, opts.strip)) {
4048
+ await rm(`${opts.outPath}.dSYM`, { recursive: true, force: true });
4049
+ }
4000
4050
  }
4001
4051
  export function supportedNativeCacheWarmProfiles(driver) {
4002
4052
  if (isMobileTarget(driver.target) || targetPlatform(driver) === "wasi")