@scriptc/compiler 0.2.3 → 0.2.5

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 (1124) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +915 -215
  2. package/ambient/scriptc-overrides.d.ts +5 -1
  3. package/ambient/scriptc.d.ts +22 -2
  4. package/dist/backend/build-cache.d.ts +4 -0
  5. package/dist/backend/build-cache.js +16 -2
  6. package/dist/backend/build-cache.js.map +1 -1
  7. package/dist/backend/cycle-analysis.js +17 -5
  8. package/dist/backend/cycle-analysis.js.map +1 -1
  9. package/dist/backend/cycle-analysis.test.js +50 -11
  10. package/dist/backend/cycle-analysis.test.js.map +1 -1
  11. package/dist/backend/debug-symbols.js.map +1 -1
  12. package/dist/backend/executable-features.js +2 -1
  13. package/dist/backend/executable-features.js.map +1 -1
  14. package/dist/backend/external-c.d.ts +13 -6
  15. package/dist/backend/external-c.js +15 -3
  16. package/dist/backend/external-c.js.map +1 -1
  17. package/dist/backend/ffi-callbacks.js +6 -9
  18. package/dist/backend/ffi-callbacks.js.map +1 -1
  19. package/dist/backend/library-identity-markers.js.map +1 -1
  20. package/dist/backend/library-pack.d.ts +1 -1
  21. package/dist/backend/library-pack.js +81 -24
  22. package/dist/backend/library-pack.js.map +1 -1
  23. package/dist/backend/link-plan-core.js +9 -2
  24. package/dist/backend/link-plan-core.js.map +1 -1
  25. package/dist/backend/link-plan.d.ts +1 -1
  26. package/dist/backend/link-plan.js +4 -5
  27. package/dist/backend/link-plan.js.map +1 -1
  28. package/dist/backend/linker.d.ts +1 -1
  29. package/dist/backend/linker.js +42 -23
  30. package/dist/backend/linker.js.map +1 -1
  31. package/dist/backend/literals.js +5 -4
  32. package/dist/backend/literals.js.map +1 -1
  33. package/dist/backend/literals.test.js +30 -5
  34. package/dist/backend/literals.test.js.map +1 -1
  35. package/dist/backend/llvm/blocks.test.js +5 -2
  36. package/dist/backend/llvm/blocks.test.js.map +1 -1
  37. package/dist/backend/llvm/borrowed-inputs.d.ts +15 -0
  38. package/dist/backend/llvm/borrowed-inputs.js +28 -0
  39. package/dist/backend/llvm/borrowed-inputs.js.map +1 -0
  40. package/dist/backend/llvm/borrowed-receivers.js +43 -19
  41. package/dist/backend/llvm/borrowed-receivers.js.map +1 -1
  42. package/dist/backend/llvm/byte-numbers.d.ts +10 -0
  43. package/dist/backend/llvm/byte-numbers.js +240 -0
  44. package/dist/backend/llvm/byte-numbers.js.map +1 -0
  45. package/dist/backend/llvm/bytes-bounds.d.ts +9 -0
  46. package/dist/backend/llvm/bytes-bounds.js +240 -0
  47. package/dist/backend/llvm/bytes-bounds.js.map +1 -0
  48. package/dist/backend/llvm/call-lifetimes.d.ts +10 -0
  49. package/dist/backend/llvm/call-lifetimes.js +83 -20
  50. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  51. package/dist/backend/llvm/call-lifetimes.test.js +203 -18
  52. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  53. package/dist/backend/llvm/checked-value-lifetimes.d.ts +13 -0
  54. package/dist/backend/llvm/checked-value-lifetimes.js +45 -0
  55. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -0
  56. package/dist/backend/llvm/classes.js +16 -12
  57. package/dist/backend/llvm/classes.js.map +1 -1
  58. package/dist/backend/llvm/common.js +4 -1
  59. package/dist/backend/llvm/common.js.map +1 -1
  60. package/dist/backend/llvm/counted-loops.d.ts +6 -0
  61. package/dist/backend/llvm/counted-loops.js +35 -0
  62. package/dist/backend/llvm/counted-loops.js.map +1 -0
  63. package/dist/backend/llvm/debug-info.js +33 -13
  64. package/dist/backend/llvm/debug-info.js.map +1 -1
  65. package/dist/backend/llvm/debug-info.test.js +28 -6
  66. package/dist/backend/llvm/debug-info.test.js.map +1 -1
  67. package/dist/backend/llvm/dyn.js +68 -22
  68. package/dist/backend/llvm/dyn.js.map +1 -1
  69. package/dist/backend/llvm/emitter.d.ts +34 -12
  70. package/dist/backend/llvm/emitter.js +357 -124
  71. package/dist/backend/llvm/emitter.js.map +1 -1
  72. package/dist/backend/llvm/emitter.test.js +237 -46
  73. package/dist/backend/llvm/emitter.test.js.map +1 -1
  74. package/dist/backend/llvm/expr-async.js +28 -8
  75. package/dist/backend/llvm/expr-async.js.map +1 -1
  76. package/dist/backend/llvm/expr-bytes.d.ts +4 -4
  77. package/dist/backend/llvm/expr-bytes.js +78 -36
  78. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  79. package/dist/backend/llvm/expr-callbacks.js +10 -4
  80. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  81. package/dist/backend/llvm/expr-calls.js +40 -21
  82. package/dist/backend/llvm/expr-calls.js.map +1 -1
  83. package/dist/backend/llvm/expr-containers.d.ts +4 -1
  84. package/dist/backend/llvm/expr-containers.js +157 -76
  85. package/dist/backend/llvm/expr-containers.js.map +1 -1
  86. package/dist/backend/llvm/expr-context.d.ts +11 -0
  87. package/dist/backend/llvm/expr-control.js +27 -8
  88. package/dist/backend/llvm/expr-control.js.map +1 -1
  89. package/dist/backend/llvm/expr-dispatch.js +3 -1
  90. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  91. package/dist/backend/llvm/expr-dynamic.js +50 -33
  92. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  93. package/dist/backend/llvm/expr-island.js +26 -6
  94. package/dist/backend/llvm/expr-island.js.map +1 -1
  95. package/dist/backend/llvm/expr-primitives.js +139 -37
  96. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  97. package/dist/backend/llvm/expr-primitives.test.js +43 -1
  98. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  99. package/dist/backend/llvm/expr-records.js +16 -9
  100. package/dist/backend/llvm/expr-records.js.map +1 -1
  101. package/dist/backend/llvm/expr-stream-bridges.js +44 -26
  102. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  103. package/dist/backend/llvm/expr-stream-bridges.test.js +51 -14
  104. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  105. package/dist/backend/llvm/expr-stream-callbacks.js +34 -14
  106. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  107. package/dist/backend/llvm/integer-values.d.ts +10 -0
  108. package/dist/backend/llvm/integer-values.js +52 -0
  109. package/dist/backend/llvm/integer-values.js.map +1 -0
  110. package/dist/backend/llvm/integer-views.d.ts +7 -0
  111. package/dist/backend/llvm/integer-views.js +83 -0
  112. package/dist/backend/llvm/integer-views.js.map +1 -0
  113. package/dist/backend/llvm/integer-views.test.d.ts +1 -0
  114. package/dist/backend/llvm/integer-views.test.js +69 -0
  115. package/dist/backend/llvm/integer-views.test.js.map +1 -0
  116. package/dist/backend/llvm/lib-abi.js +13 -4
  117. package/dist/backend/llvm/lib-abi.js.map +1 -1
  118. package/dist/backend/llvm/lib-connect.js +7 -1
  119. package/dist/backend/llvm/lib-connect.js.map +1 -1
  120. package/dist/backend/llvm/lib-datagram.js +35 -10
  121. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  122. package/dist/backend/llvm/lib-dispatch.js +36 -15
  123. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  124. package/dist/backend/llvm/lib-filesystem.js +38 -23
  125. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  126. package/dist/backend/llvm/lib-http2.js +60 -15
  127. package/dist/backend/llvm/lib-http2.js.map +1 -1
  128. package/dist/backend/llvm/lib-lookup.js +12 -5
  129. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  130. package/dist/backend/llvm/lib-network.js +97 -31
  131. package/dist/backend/llvm/lib-network.js.map +1 -1
  132. package/dist/backend/llvm/lib-process.js +57 -14
  133. package/dist/backend/llvm/lib-process.js.map +1 -1
  134. package/dist/backend/llvm/lib-shared.js +107 -31
  135. package/dist/backend/llvm/lib-shared.js.map +1 -1
  136. package/dist/backend/llvm/lib-stream.js +33 -14
  137. package/dist/backend/llvm/lib-stream.js.map +1 -1
  138. package/dist/backend/llvm/lib-test.js +21 -7
  139. package/dist/backend/llvm/lib-test.js.map +1 -1
  140. package/dist/backend/llvm/lib-tls.js +69 -20
  141. package/dist/backend/llvm/lib-tls.js.map +1 -1
  142. package/dist/backend/llvm/local-array-reads.d.ts +3 -4
  143. package/dist/backend/llvm/local-array-reads.js +100 -121
  144. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  145. package/dist/backend/llvm/local-array-reads.test.js +379 -71
  146. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  147. package/dist/backend/llvm/local-union-storage.d.ts +25 -0
  148. package/dist/backend/llvm/local-union-storage.js +109 -0
  149. package/dist/backend/llvm/local-union-storage.js.map +1 -0
  150. package/dist/backend/llvm/local-union-storage.test.d.ts +1 -0
  151. package/dist/backend/llvm/local-union-storage.test.js +210 -0
  152. package/dist/backend/llvm/local-union-storage.test.js.map +1 -0
  153. package/dist/backend/llvm/map-read-lifetimes.d.ts +6 -2
  154. package/dist/backend/llvm/map-read-lifetimes.js +46 -16
  155. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  156. package/dist/backend/llvm/map-read-lifetimes.test.js +93 -17
  157. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  158. package/dist/backend/llvm/reference-effects.d.ts +23 -0
  159. package/dist/backend/llvm/reference-effects.js +179 -0
  160. package/dist/backend/llvm/reference-effects.js.map +1 -0
  161. package/dist/backend/llvm/reference-effects.test.d.ts +1 -0
  162. package/dist/backend/llvm/reference-effects.test.js +157 -0
  163. package/dist/backend/llvm/reference-effects.test.js.map +1 -0
  164. package/dist/backend/llvm/shapes.d.ts +7 -4
  165. package/dist/backend/llvm/shapes.js +82 -22
  166. package/dist/backend/llvm/shapes.js.map +1 -1
  167. package/dist/backend/llvm/shapes.test.js +3 -1
  168. package/dist/backend/llvm/shapes.test.js.map +1 -1
  169. package/dist/backend/llvm/split.js +4 -4
  170. package/dist/backend/llvm/split.js.map +1 -1
  171. package/dist/backend/llvm/split.test.js +14 -6
  172. package/dist/backend/llvm/split.test.js.map +1 -1
  173. package/dist/backend/llvm/stack-unions.js +14 -5
  174. package/dist/backend/llvm/stack-unions.js.map +1 -1
  175. package/dist/backend/llvm/stack-unions.test.js +172 -32
  176. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  177. package/dist/backend/llvm/string-construction.d.ts +10 -0
  178. package/dist/backend/llvm/string-construction.js +38 -0
  179. package/dist/backend/llvm/string-construction.js.map +1 -0
  180. package/dist/backend/llvm/string-construction.test.d.ts +1 -0
  181. package/dist/backend/llvm/string-construction.test.js +90 -0
  182. package/dist/backend/llvm/string-construction.test.js.map +1 -0
  183. package/dist/backend/llvm/string-lifetimes.d.ts +2 -2
  184. package/dist/backend/llvm/string-lifetimes.js +19 -11
  185. package/dist/backend/llvm/string-lifetimes.js.map +1 -1
  186. package/dist/backend/llvm/string-lifetimes.test.js +127 -32
  187. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  188. package/dist/backend/llvm/switch-dispatch.d.ts +9 -0
  189. package/dist/backend/llvm/switch-dispatch.js +114 -0
  190. package/dist/backend/llvm/switch-dispatch.js.map +1 -0
  191. package/dist/backend/llvm/switch-dispatch.test.d.ts +1 -0
  192. package/dist/backend/llvm/switch-dispatch.test.js +83 -0
  193. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -0
  194. package/dist/backend/llvm/unsupported.js.map +1 -1
  195. package/dist/backend/llvm/walkers.js +6 -3
  196. package/dist/backend/llvm/walkers.js.map +1 -1
  197. package/dist/backend/mangle.js +9 -3
  198. package/dist/backend/mangle.js.map +1 -1
  199. package/dist/backend/may-throw.js +18 -8
  200. package/dist/backend/may-throw.js.map +1 -1
  201. package/dist/backend/may-throw.test.js +118 -22
  202. package/dist/backend/may-throw.test.js.map +1 -1
  203. package/dist/backend/native/artifact-stamps.d.ts +39 -0
  204. package/dist/backend/native/artifact-stamps.js +371 -0
  205. package/dist/backend/native/artifact-stamps.js.map +1 -0
  206. package/dist/backend/native/cache-warm.d.ts +24 -0
  207. package/dist/backend/native/cache-warm.js +80 -0
  208. package/dist/backend/native/cache-warm.js.map +1 -0
  209. package/dist/backend/native/compiler-fingerprint.d.ts +19 -0
  210. package/dist/backend/native/compiler-fingerprint.js +357 -0
  211. package/dist/backend/native/compiler-fingerprint.js.map +1 -0
  212. package/dist/backend/native/contracts.d.ts +314 -0
  213. package/dist/backend/native/contracts.js +2 -0
  214. package/dist/backend/native/contracts.js.map +1 -0
  215. package/dist/backend/native/dependency-files.d.ts +5 -0
  216. package/dist/backend/native/dependency-files.js +83 -0
  217. package/dist/backend/native/dependency-files.js.map +1 -0
  218. package/dist/backend/native/driver.d.ts +50 -0
  219. package/dist/backend/native/driver.js +294 -0
  220. package/dist/backend/native/driver.js.map +1 -0
  221. package/dist/backend/native/executable.d.ts +18 -0
  222. package/dist/backend/native/executable.js +1267 -0
  223. package/dist/backend/native/executable.js.map +1 -0
  224. package/dist/backend/native/library.d.ts +2 -0
  225. package/dist/backend/native/library.js +614 -0
  226. package/dist/backend/native/library.js.map +1 -0
  227. package/dist/backend/native/linker-fingerprint.d.ts +8 -0
  228. package/dist/backend/native/linker-fingerprint.js +174 -0
  229. package/dist/backend/native/linker-fingerprint.js.map +1 -0
  230. package/dist/backend/native/object-merge.d.ts +2 -0
  231. package/dist/backend/native/object-merge.js +154 -0
  232. package/dist/backend/native/object-merge.js.map +1 -0
  233. package/dist/backend/native/process.d.ts +17 -0
  234. package/dist/backend/native/process.js +42 -0
  235. package/dist/backend/native/process.js.map +1 -0
  236. package/dist/backend/native/program-shards.d.ts +21 -0
  237. package/dist/backend/native/program-shards.js +99 -0
  238. package/dist/backend/native/program-shards.js.map +1 -0
  239. package/dist/backend/native/runtime-inputs.d.ts +12 -0
  240. package/dist/backend/native/runtime-inputs.js +163 -0
  241. package/dist/backend/native/runtime-inputs.js.map +1 -0
  242. package/dist/backend/native/runtime-inputs.test.d.ts +1 -0
  243. package/dist/backend/native/runtime-inputs.test.js +64 -0
  244. package/dist/backend/native/runtime-inputs.test.js.map +1 -0
  245. package/dist/backend/native/runtime-objects.d.ts +16 -0
  246. package/dist/backend/native/runtime-objects.js +122 -0
  247. package/dist/backend/native/runtime-objects.js.map +1 -0
  248. package/dist/backend/native/session.d.ts +12 -0
  249. package/dist/backend/native/session.js +31 -0
  250. package/dist/backend/native/session.js.map +1 -0
  251. package/dist/backend/native/tool-identity.d.ts +37 -0
  252. package/dist/backend/native/tool-identity.js +310 -0
  253. package/dist/backend/native/tool-identity.js.map +1 -0
  254. package/dist/backend/native/trace-paths.d.ts +12 -0
  255. package/dist/backend/native/trace-paths.js +73 -0
  256. package/dist/backend/native/trace-paths.js.map +1 -0
  257. package/dist/backend/native/vendor.d.ts +1 -0
  258. package/dist/backend/native/vendor.js +12 -0
  259. package/dist/backend/native/vendor.js.map +1 -0
  260. package/dist/backend/native-codegen-core.js +2 -1
  261. package/dist/backend/native-codegen-core.js.map +1 -1
  262. package/dist/backend/native-codegen.d.ts +1 -1
  263. package/dist/backend/native-codegen.js +24 -13
  264. package/dist/backend/native-codegen.js.map +1 -1
  265. package/dist/backend/native-codegen.test.js +12 -9
  266. package/dist/backend/native-codegen.test.js.map +1 -1
  267. package/dist/backend/native-link-info-core.js +9 -5
  268. package/dist/backend/native-link-info-core.js.map +1 -1
  269. package/dist/backend/native-link-info.js +14 -5
  270. package/dist/backend/native-link-info.js.map +1 -1
  271. package/dist/backend/native-link-info.test.js +58 -13
  272. package/dist/backend/native-link-info.test.js.map +1 -1
  273. package/dist/backend/native-toolchain.d.ts +17 -450
  274. package/dist/backend/native-toolchain.js +17 -3971
  275. package/dist/backend/native-toolchain.js.map +1 -1
  276. package/dist/backend/native-toolchain.test.js +103 -72
  277. package/dist/backend/native-toolchain.test.js.map +1 -1
  278. package/dist/backend/native-tools.js +27 -8
  279. package/dist/backend/native-tools.js.map +1 -1
  280. package/dist/backend/object-localize.js +17 -14
  281. package/dist/backend/object-localize.js.map +1 -1
  282. package/dist/backend/object-localize.test.js +59 -12
  283. package/dist/backend/object-localize.test.js.map +1 -1
  284. package/dist/backend/runtime-pack-core.js +96 -49
  285. package/dist/backend/runtime-pack-core.js.map +1 -1
  286. package/dist/backend/runtime-pack-native.js +5 -3
  287. package/dist/backend/runtime-pack-native.js.map +1 -1
  288. package/dist/backend/runtime-pack-targets.test.js +87 -15
  289. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  290. package/dist/backend/runtime-pack.d.ts +1 -1
  291. package/dist/backend/runtime-pack.js +11 -12
  292. package/dist/backend/runtime-pack.js.map +1 -1
  293. package/dist/backend/runtime-pack.test.js +40 -24
  294. package/dist/backend/runtime-pack.test.js.map +1 -1
  295. package/dist/backend/source-locations.js.map +1 -1
  296. package/dist/backend/source-locations.test.js +7 -2
  297. package/dist/backend/source-locations.test.js.map +1 -1
  298. package/dist/backend/target-diagnostics.js +44 -14
  299. package/dist/backend/target-diagnostics.js.map +1 -1
  300. package/dist/backend/target-diagnostics.test.js +93 -20
  301. package/dist/backend/target-diagnostics.test.js.map +1 -1
  302. package/dist/backend/targets.js +230 -86
  303. package/dist/backend/targets.js.map +1 -1
  304. package/dist/backend/targets.test.js +32 -18
  305. package/dist/backend/targets.test.js.map +1 -1
  306. package/dist/backend/toolchain-environment.js +5 -1
  307. package/dist/backend/toolchain-environment.js.map +1 -1
  308. package/dist/backend/vendor-archives.d.ts +2 -2
  309. package/dist/backend/vendor-archives.js +84 -35
  310. package/dist/backend/vendor-archives.js.map +1 -1
  311. package/dist/backend/vendor-inputs.js +13 -1
  312. package/dist/backend/vendor-inputs.js.map +1 -1
  313. package/dist/backend/warm-cache.d.ts +1 -1
  314. package/dist/backend/warm-cache.js +33 -9
  315. package/dist/backend/warm-cache.js.map +1 -1
  316. package/dist/cli/command.js +39 -9
  317. package/dist/cli/command.js.map +1 -1
  318. package/dist/cli/output-options.js +14 -4
  319. package/dist/cli/output-options.js.map +1 -1
  320. package/dist/cli/paths.js.map +1 -1
  321. package/dist/cli/wasi-runner.js.map +1 -1
  322. package/dist/compat/fetch-profile.js +36 -35
  323. package/dist/compat/fetch-profile.js.map +1 -1
  324. package/dist/coverage/report.js +16 -17
  325. package/dist/coverage/report.js.map +1 -1
  326. package/dist/coverage/surface-manifest.js +112 -26
  327. package/dist/coverage/surface-manifest.js.map +1 -1
  328. package/dist/diagnostics/diagnostic.js +55 -16
  329. package/dist/diagnostics/diagnostic.js.map +1 -1
  330. package/dist/executable/executable-cache.d.ts +1 -1
  331. package/dist/executable/executable-cache.js +78 -48
  332. package/dist/executable/executable-cache.js.map +1 -1
  333. package/dist/executable/executable-cache.test.js +75 -26
  334. package/dist/executable/executable-cache.test.js.map +1 -1
  335. package/dist/executable/prepare.js +2 -2
  336. package/dist/executable/prepare.js.map +1 -1
  337. package/dist/ffi/ffi-manifest.js +78 -20
  338. package/dist/ffi/ffi-manifest.js.map +1 -1
  339. package/dist/ffi/ffi-manifest.test.js +96 -16
  340. package/dist/ffi/ffi-manifest.test.js.map +1 -1
  341. package/dist/format-integer.js.map +1 -1
  342. package/dist/frontend/analysis.js +12 -2
  343. package/dist/frontend/analysis.js.map +1 -1
  344. package/dist/frontend/arguments-usage.js.map +1 -1
  345. package/dist/frontend/binding-source.js +9 -3
  346. package/dist/frontend/binding-source.js.map +1 -1
  347. package/dist/frontend/builtin-modules.js +46 -2
  348. package/dist/frontend/builtin-modules.js.map +1 -1
  349. package/dist/frontend/cjs-resolve.js +40 -17
  350. package/dist/frontend/cjs-resolve.js.map +1 -1
  351. package/dist/frontend/cjs-syntax.js +31 -10
  352. package/dist/frontend/cjs-syntax.js.map +1 -1
  353. package/dist/frontend/comptime-node.test.js +10 -11
  354. package/dist/frontend/comptime-node.test.js.map +1 -1
  355. package/dist/frontend/dts-paths.js +7 -3
  356. package/dist/frontend/dts-paths.js.map +1 -1
  357. package/dist/frontend/fork-target.js +17 -12
  358. package/dist/frontend/fork-target.js.map +1 -1
  359. package/dist/frontend/function-completion.js +11 -6
  360. package/dist/frontend/function-completion.js.map +1 -1
  361. package/dist/frontend/helper-tokens.js +53 -6
  362. package/dist/frontend/helper-tokens.js.map +1 -1
  363. package/dist/frontend/helper-tokens.test.js +18 -2
  364. package/dist/frontend/helper-tokens.test.js.map +1 -1
  365. package/dist/frontend/inferred-js-diagnostics.js +32 -12
  366. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  367. package/dist/frontend/inferred-js-diagnostics.test.js +11 -15
  368. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  369. package/dist/frontend/input-tracker.js +11 -11
  370. package/dist/frontend/input-tracker.js.map +1 -1
  371. package/dist/frontend/input-tracker.test.js +4 -1
  372. package/dist/frontend/input-tracker.test.js.map +1 -1
  373. package/dist/frontend/lib-contract.js +38 -9
  374. package/dist/frontend/lib-contract.js.map +1 -1
  375. package/dist/frontend/literal-values.js.map +1 -1
  376. package/dist/frontend/literal-values.test.js +28 -8
  377. package/dist/frontend/literal-values.test.js.map +1 -1
  378. package/dist/frontend/lowering/abstract-equality.js +53 -10
  379. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  380. package/dist/frontend/lowering/array-indexed-mutation.d.ts +1 -1
  381. package/dist/frontend/lowering/array-indexed-mutation.js +108 -106
  382. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  383. package/dist/frontend/lowering/array-values.js +37 -14
  384. package/dist/frontend/lowering/array-values.js.map +1 -1
  385. package/dist/frontend/lowering/binding-analysis.d.ts +50 -0
  386. package/dist/frontend/lowering/binding-analysis.js +376 -0
  387. package/dist/frontend/lowering/binding-analysis.js.map +1 -0
  388. package/dist/frontend/lowering/builtin-calls.d.ts +9 -0
  389. package/dist/frontend/lowering/builtin-calls.js +60 -0
  390. package/dist/frontend/lowering/builtin-calls.js.map +1 -0
  391. package/dist/frontend/lowering/builtins/arguments.d.ts +43 -0
  392. package/dist/frontend/lowering/builtins/arguments.js +247 -0
  393. package/dist/frontend/lowering/builtins/arguments.js.map +1 -0
  394. package/dist/frontend/lowering/builtins/async-context.d.ts +52 -0
  395. package/dist/frontend/lowering/builtins/async-context.js +436 -0
  396. package/dist/frontend/lowering/builtins/async-context.js.map +1 -0
  397. package/dist/frontend/lowering/builtins/atomics.d.ts +15 -0
  398. package/dist/frontend/lowering/builtins/atomics.js +46 -0
  399. package/dist/frontend/lowering/builtins/atomics.js.map +1 -0
  400. package/dist/frontend/lowering/builtins/callable-aliases.d.ts +13 -0
  401. package/dist/frontend/lowering/builtins/callable-aliases.js +87 -0
  402. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -0
  403. package/dist/frontend/lowering/builtins/child-process-async.d.ts +18 -0
  404. package/dist/frontend/lowering/builtins/child-process-async.js +245 -0
  405. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -0
  406. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +21 -0
  407. package/dist/frontend/lowering/builtins/child-process-methods.js +362 -0
  408. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -0
  409. package/dist/frontend/lowering/builtins/child-process-sync.d.ts +4 -0
  410. package/dist/frontend/lowering/builtins/child-process-sync.js +639 -0
  411. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -0
  412. package/dist/frontend/lowering/builtins/child-process.d.ts +55 -0
  413. package/dist/frontend/lowering/builtins/child-process.js +669 -0
  414. package/dist/frontend/lowering/builtins/child-process.js.map +1 -0
  415. package/dist/frontend/lowering/builtins/compression.d.ts +7 -0
  416. package/dist/frontend/lowering/builtins/compression.js +115 -0
  417. package/dist/frontend/lowering/builtins/compression.js.map +1 -0
  418. package/dist/frontend/lowering/builtins/console.d.ts +10 -0
  419. package/dist/frontend/lowering/builtins/console.js +38 -0
  420. package/dist/frontend/lowering/builtins/console.js.map +1 -0
  421. package/dist/frontend/lowering/builtins/constants.d.ts +24 -0
  422. package/dist/frontend/lowering/builtins/constants.js +141 -0
  423. package/dist/frontend/lowering/builtins/constants.js.map +1 -0
  424. package/dist/frontend/lowering/builtins/crypto.d.ts +22 -0
  425. package/dist/frontend/lowering/builtins/crypto.js +517 -0
  426. package/dist/frontend/lowering/builtins/crypto.js.map +1 -0
  427. package/dist/frontend/lowering/builtins/dates.d.ts +7 -0
  428. package/dist/frontend/lowering/builtins/dates.js +101 -0
  429. package/dist/frontend/lowering/builtins/dates.js.map +1 -0
  430. package/dist/frontend/lowering/builtins/environment.d.ts +34 -0
  431. package/dist/frontend/lowering/builtins/environment.js +95 -0
  432. package/dist/frontend/lowering/builtins/environment.js.map +1 -0
  433. package/dist/frontend/lowering/builtins/errors.d.ts +14 -0
  434. package/dist/frontend/lowering/builtins/errors.js +83 -0
  435. package/dist/frontend/lowering/builtins/errors.js.map +1 -0
  436. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +32 -0
  437. package/dist/frontend/lowering/builtins/filesystem-calls.js +678 -0
  438. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -0
  439. package/dist/frontend/lowering/builtins/filesystem.d.ts +108 -0
  440. package/dist/frontend/lowering/builtins/filesystem.js +1061 -0
  441. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -0
  442. package/dist/frontend/lowering/builtins/ipc.d.ts +8 -0
  443. package/dist/frontend/lowering/builtins/ipc.js +76 -0
  444. package/dist/frontend/lowering/builtins/ipc.js.map +1 -0
  445. package/dist/frontend/lowering/builtins/json.d.ts +12 -0
  446. package/dist/frontend/lowering/builtins/json.js +387 -0
  447. package/dist/frontend/lowering/builtins/json.js.map +1 -0
  448. package/dist/frontend/lowering/builtins/module-bindings.d.ts +85 -0
  449. package/dist/frontend/lowering/builtins/module-bindings.js +346 -0
  450. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -0
  451. package/dist/frontend/lowering/builtins/module-calls.d.ts +8 -0
  452. package/dist/frontend/lowering/builtins/module-calls.js +303 -0
  453. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -0
  454. package/dist/frontend/lowering/builtins/module-resolution.d.ts +38 -0
  455. package/dist/frontend/lowering/builtins/module-resolution.js +344 -0
  456. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -0
  457. package/dist/frontend/lowering/builtins/numbers.d.ts +15 -0
  458. package/dist/frontend/lowering/builtins/numbers.js +124 -0
  459. package/dist/frontend/lowering/builtins/numbers.js.map +1 -0
  460. package/dist/frontend/lowering/builtins/operating-system.d.ts +13 -0
  461. package/dist/frontend/lowering/builtins/operating-system.js +148 -0
  462. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -0
  463. package/dist/frontend/lowering/builtins/performance.d.ts +13 -0
  464. package/dist/frontend/lowering/builtins/performance.js +100 -0
  465. package/dist/frontend/lowering/builtins/performance.js.map +1 -0
  466. package/dist/frontend/lowering/builtins/process.d.ts +50 -0
  467. package/dist/frontend/lowering/builtins/process.js +1138 -0
  468. package/dist/frontend/lowering/builtins/process.js.map +1 -0
  469. package/dist/frontend/lowering/builtins/promises.d.ts +14 -0
  470. package/dist/frontend/lowering/builtins/promises.js +356 -0
  471. package/dist/frontend/lowering/builtins/promises.js.map +1 -0
  472. package/dist/frontend/lowering/builtins/properties.d.ts +11 -0
  473. package/dist/frontend/lowering/builtins/properties.js +186 -0
  474. package/dist/frontend/lowering/builtins/properties.js.map +1 -0
  475. package/dist/frontend/lowering/builtins/querystring.d.ts +19 -0
  476. package/dist/frontend/lowering/builtins/querystring.js +150 -0
  477. package/dist/frontend/lowering/builtins/querystring.js.map +1 -0
  478. package/dist/frontend/lowering/builtins/readline.d.ts +13 -0
  479. package/dist/frontend/lowering/builtins/readline.js +138 -0
  480. package/dist/frontend/lowering/builtins/readline.js.map +1 -0
  481. package/dist/frontend/lowering/builtins/receiver-types.d.ts +5 -0
  482. package/dist/frontend/lowering/builtins/receiver-types.js +15 -0
  483. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -0
  484. package/dist/frontend/lowering/builtins/reflection.d.ts +13 -0
  485. package/dist/frontend/lowering/builtins/reflection.js +95 -0
  486. package/dist/frontend/lowering/builtins/reflection.js.map +1 -0
  487. package/dist/frontend/lowering/builtins/strings.d.ts +14 -0
  488. package/dist/frontend/lowering/builtins/strings.js +121 -0
  489. package/dist/frontend/lowering/builtins/strings.js.map +1 -0
  490. package/dist/frontend/lowering/builtins/text-codecs.d.ts +29 -0
  491. package/dist/frontend/lowering/builtins/text-codecs.js +590 -0
  492. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -0
  493. package/dist/frontend/lowering/builtins/timers.d.ts +22 -0
  494. package/dist/frontend/lowering/builtins/timers.js +180 -0
  495. package/dist/frontend/lowering/builtins/timers.js.map +1 -0
  496. package/dist/frontend/lowering/builtins/url.d.ts +37 -0
  497. package/dist/frontend/lowering/builtins/url.js +596 -0
  498. package/dist/frontend/lowering/builtins/url.js.map +1 -0
  499. package/dist/frontend/lowering/builtins/util-types.d.ts +7 -0
  500. package/dist/frontend/lowering/builtins/util-types.js +31 -0
  501. package/dist/frontend/lowering/builtins/util-types.js.map +1 -0
  502. package/dist/frontend/lowering/call-arguments.d.ts +72 -0
  503. package/dist/frontend/lowering/call-arguments.js +618 -0
  504. package/dist/frontend/lowering/call-arguments.js.map +1 -0
  505. package/dist/frontend/lowering/call-signatures.d.ts +115 -0
  506. package/dist/frontend/lowering/call-signatures.js +719 -0
  507. package/dist/frontend/lowering/call-signatures.js.map +1 -0
  508. package/dist/frontend/lowering/callback-arg.js.map +1 -1
  509. package/dist/frontend/lowering/checked-iterable-spread.js +53 -10
  510. package/dist/frontend/lowering/checked-iterable-spread.js.map +1 -1
  511. package/dist/frontend/lowering/checked-promise-all.js +41 -9
  512. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  513. package/dist/frontend/lowering/class-callbacks.d.ts +1 -1
  514. package/dist/frontend/lowering/class-callbacks.js +130 -27
  515. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  516. package/dist/frontend/lowering/class-construction.d.ts +1 -1
  517. package/dist/frontend/lowering/class-construction.js +247 -50
  518. package/dist/frontend/lowering/class-construction.js.map +1 -1
  519. package/dist/frontend/lowering/class-descriptors.js +109 -29
  520. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  521. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +6 -1
  522. package/dist/frontend/lowering/class-dynamic-dispatch.js +2471 -465
  523. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  524. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +284 -44
  525. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  526. package/dist/frontend/lowering/class-instance-constructor.js +17 -5
  527. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  528. package/dist/frontend/lowering/class-method-values.js +199 -51
  529. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  530. package/dist/frontend/lowering/class-prototypes.js +345 -86
  531. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  532. package/dist/frontend/lowering/class-runtime-statics.d.ts +1 -1
  533. package/dist/frontend/lowering/class-runtime-statics.js +80 -17
  534. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  535. package/dist/frontend/lowering/class-static-data.js +76 -16
  536. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  537. package/dist/frontend/lowering/coercions/builders.d.ts +13 -0
  538. package/dist/frontend/lowering/coercions/builders.js +77 -0
  539. package/dist/frontend/lowering/coercions/builders.js.map +1 -0
  540. package/dist/frontend/lowering/coercions/function-adapters.d.ts +58 -0
  541. package/dist/frontend/lowering/coercions/function-adapters.js +430 -0
  542. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -0
  543. package/dist/frontend/lowering/coercions/island.d.ts +37 -0
  544. package/dist/frontend/lowering/coercions/island.js +350 -0
  545. package/dist/frontend/lowering/coercions/island.js.map +1 -0
  546. package/dist/frontend/lowering/coercions/state.d.ts +14 -0
  547. package/dist/frontend/lowering/coercions/state.js +16 -0
  548. package/dist/frontend/lowering/coercions/state.js.map +1 -0
  549. package/dist/frontend/lowering/coercions/structural-plans.d.ts +40 -0
  550. package/dist/frontend/lowering/coercions/structural-plans.js +447 -0
  551. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -0
  552. package/dist/frontend/lowering/coercions/structural.d.ts +63 -0
  553. package/dist/frontend/lowering/coercions/structural.js +616 -0
  554. package/dist/frontend/lowering/coercions/structural.js.map +1 -0
  555. package/dist/frontend/lowering/coercions/unions.d.ts +65 -0
  556. package/dist/frontend/lowering/coercions/unions.js +318 -0
  557. package/dist/frontend/lowering/coercions/unions.js.map +1 -0
  558. package/dist/frontend/lowering/collection-ingestion.js +359 -67
  559. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  560. package/dist/frontend/lowering/containers/array-callbacks.d.ts +92 -0
  561. package/dist/frontend/lowering/containers/array-callbacks.js +1646 -0
  562. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -0
  563. package/dist/frontend/lowering/containers/array-construction.d.ts +42 -0
  564. package/dist/frontend/lowering/containers/array-construction.js +1044 -0
  565. package/dist/frontend/lowering/containers/array-construction.js.map +1 -0
  566. package/dist/frontend/lowering/containers/array-iteration.d.ts +16 -0
  567. package/dist/frontend/lowering/containers/array-iteration.js +95 -0
  568. package/dist/frontend/lowering/containers/array-iteration.js.map +1 -0
  569. package/dist/frontend/lowering/containers/array-methods.d.ts +27 -0
  570. package/dist/frontend/lowering/containers/array-methods.js +1854 -0
  571. package/dist/frontend/lowering/containers/array-methods.js.map +1 -0
  572. package/dist/frontend/lowering/containers/bytes.d.ts +17 -17
  573. package/dist/frontend/lowering/containers/bytes.js +419 -105
  574. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  575. package/dist/frontend/lowering/containers/callback-arguments.d.ts +26 -0
  576. package/dist/frontend/lowering/containers/callback-arguments.js +179 -0
  577. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -0
  578. package/dist/frontend/lowering/containers/collection-grouping.d.ts +19 -0
  579. package/dist/frontend/lowering/containers/collection-grouping.js +297 -0
  580. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -0
  581. package/dist/frontend/lowering/containers/collection-methods.d.ts +57 -0
  582. package/dist/frontend/lowering/containers/collection-methods.js +1314 -0
  583. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -0
  584. package/dist/frontend/lowering/containers/dynamic-receivers.d.ts +18 -0
  585. package/dist/frontend/lowering/containers/dynamic-receivers.js +114 -0
  586. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -0
  587. package/dist/frontend/lowering/containers/for-of.d.ts +60 -0
  588. package/dist/frontend/lowering/containers/for-of.js +643 -0
  589. package/dist/frontend/lowering/containers/for-of.js.map +1 -0
  590. package/dist/frontend/lowering/containers/indexed-objects.d.ts +132 -0
  591. package/dist/frontend/lowering/containers/indexed-objects.js +1743 -0
  592. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -0
  593. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +20 -0
  594. package/dist/frontend/lowering/containers/iterator-helpers.js +809 -0
  595. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -0
  596. package/dist/frontend/lowering/containers/string-and-regexp.js +585 -157
  597. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  598. package/dist/frontend/lowering/containers/string-replacement.js +213 -63
  599. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  600. package/dist/frontend/lowering/crypto-tables.js +263 -64
  601. package/dist/frontend/lowering/crypto-tables.js.map +1 -1
  602. package/dist/frontend/lowering/deferred-module-initializers.js +172 -68
  603. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  604. package/dist/frontend/lowering/deferred-module-initializers.test.js +41 -8
  605. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  606. package/dist/frontend/lowering/error-methods.js +339 -65
  607. package/dist/frontend/lowering/error-methods.js.map +1 -1
  608. package/dist/frontend/lowering/expressions/evaluation-safety.js +3 -2
  609. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  610. package/dist/frontend/lowering/expressions/global-symbols.js +2 -1
  611. package/dist/frontend/lowering/expressions/global-symbols.js.map +1 -1
  612. package/dist/frontend/lowering/expressions/native-proxy.js +11 -5
  613. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  614. package/dist/frontend/lowering/expressions/nullish-assignment.js +67 -13
  615. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  616. package/dist/frontend/lowering/expressions/object-literals.js +589 -162
  617. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  618. package/dist/frontend/lowering/expressions/optional-chains.d.ts +1 -1
  619. package/dist/frontend/lowering/expressions/optional-chains.js +68 -17
  620. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  621. package/dist/frontend/lowering/expressions/union-field-write.js +45 -18
  622. package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
  623. package/dist/frontend/lowering/function-context.js +5 -1
  624. package/dist/frontend/lowering/function-context.js.map +1 -1
  625. package/dist/frontend/lowering/function-returns.d.ts +67 -0
  626. package/dist/frontend/lowering/function-returns.js +392 -0
  627. package/dist/frontend/lowering/function-returns.js.map +1 -0
  628. package/dist/frontend/lowering/generator-delegation.d.ts +1 -1
  629. package/dist/frontend/lowering/generator-delegation.js +171 -39
  630. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  631. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +1 -1
  632. package/dist/frontend/lowering/generator-dynamic-dispatch.js +176 -36
  633. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  634. package/dist/frontend/lowering/generic-functions.d.ts +274 -0
  635. package/dist/frontend/lowering/generic-functions.js +1727 -0
  636. package/dist/frontend/lowering/generic-functions.js.map +1 -0
  637. package/dist/frontend/lowering/import-meta.d.ts +1 -1
  638. package/dist/frontend/lowering/import-meta.js +37 -14
  639. package/dist/frontend/lowering/import-meta.js.map +1 -1
  640. package/dist/frontend/lowering/indexed-comparison.js +6 -2
  641. package/dist/frontend/lowering/indexed-comparison.js.map +1 -1
  642. package/dist/frontend/lowering/iterator-consumption.d.ts +9 -0
  643. package/dist/frontend/lowering/iterator-consumption.js +91 -0
  644. package/dist/frontend/lowering/iterator-consumption.js.map +1 -0
  645. package/dist/frontend/lowering/lib-boundary.js +40 -17
  646. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  647. package/dist/frontend/lowering/lib-boundary.test.js +49 -11
  648. package/dist/frontend/lowering/lib-boundary.test.js.map +1 -1
  649. package/dist/frontend/lowering/lower-array-sort.d.ts +0 -19
  650. package/dist/frontend/lowering/lower-array-sort.js +331 -566
  651. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  652. package/dist/frontend/lowering/lower-assert.js +248 -43
  653. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  654. package/dist/frontend/lowering/lower-async-iteration.js +71 -16
  655. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  656. package/dist/frontend/lowering/lower-builtin-values.js +420 -71
  657. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  658. package/dist/frontend/lowering/lower-calls.d.ts +39 -558
  659. package/dist/frontend/lowering/lower-calls.js +2593 -5667
  660. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  661. package/dist/frontend/lowering/lower-classes.d.ts +243 -242
  662. package/dist/frontend/lowering/lower-classes.js +1704 -727
  663. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  664. package/dist/frontend/lowering/lower-comptime.d.ts +35 -35
  665. package/dist/frontend/lowering/lower-comptime.js +39 -37
  666. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  667. package/dist/frontend/lowering/lower-dgram.js +59 -31
  668. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  669. package/dist/frontend/lowering/lower-enums.js +5 -2
  670. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  671. package/dist/frontend/lowering/lower-event-emitter.js +322 -85
  672. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  673. package/dist/frontend/lowering/lower-expando.js +19 -7
  674. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  675. package/dist/frontend/lowering/lower-exprs.d.ts +194 -194
  676. package/dist/frontend/lowering/lower-exprs.js +3455 -1153
  677. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  678. package/dist/frontend/lowering/lower-functions.d.ts +23 -0
  679. package/dist/frontend/lowering/lower-functions.js +449 -0
  680. package/dist/frontend/lowering/lower-functions.js.map +1 -0
  681. package/dist/frontend/lowering/lower-generators.js +121 -32
  682. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  683. package/dist/frontend/lowering/lower-global-value.js +15 -4
  684. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  685. package/dist/frontend/lowering/lower-inspect.js +479 -89
  686. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  687. package/dist/frontend/lowering/lower-island.d.ts +79 -79
  688. package/dist/frontend/lowering/lower-island.js +365 -273
  689. package/dist/frontend/lowering/lower-island.js.map +1 -1
  690. package/dist/frontend/lowering/lower-island.test.js +7 -2
  691. package/dist/frontend/lowering/lower-island.test.js.map +1 -1
  692. package/dist/frontend/lowering/lower-mixins.js +17 -8
  693. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  694. package/dist/frontend/lowering/lower-modules.d.ts +94 -94
  695. package/dist/frontend/lowering/lower-modules.js +612 -321
  696. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  697. package/dist/frontend/lowering/lower-modules.test.js +91 -20
  698. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  699. package/dist/frontend/lowering/lower-namespaces.js +25 -8
  700. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  701. package/dist/frontend/lowering/lower-node-module.js +115 -34
  702. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  703. package/dist/frontend/lowering/lower-server.js +1210 -290
  704. package/dist/frontend/lowering/lower-server.js.map +1 -1
  705. package/dist/frontend/lowering/lower-stmts.d.ts +148 -148
  706. package/dist/frontend/lowering/lower-stmts.js +2312 -984
  707. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  708. package/dist/frontend/lowering/lower-stmts.test.js +13 -5
  709. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  710. package/dist/frontend/lowering/lower-stream.js +362 -90
  711. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  712. package/dist/frontend/lowering/lower-system-errors.js +30 -8
  713. package/dist/frontend/lowering/lower-system-errors.js.map +1 -1
  714. package/dist/frontend/lowering/lower-test.js +40 -13
  715. package/dist/frontend/lowering/lower-test.js.map +1 -1
  716. package/dist/frontend/lowering/lower-timers.d.ts +31 -0
  717. package/dist/frontend/lowering/lower-timers.js +336 -0
  718. package/dist/frontend/lowering/lower-timers.js.map +1 -0
  719. package/dist/frontend/lowering/lower-url.d.ts +1 -1
  720. package/dist/frontend/lowering/lower-url.js +46 -13
  721. package/dist/frontend/lowering/lower-url.js.map +1 -1
  722. package/dist/frontend/lowering/lowerer.d.ts +21 -351
  723. package/dist/frontend/lowering/lowerer.js +1031 -2704
  724. package/dist/frontend/lowering/lowerer.js.map +1 -1
  725. package/dist/frontend/lowering/lowerer.test.js +85 -17
  726. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  727. package/dist/frontend/lowering/module-namespace-elements.js +43 -8
  728. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  729. package/dist/frontend/lowering/native-ffi.d.ts +21 -1
  730. package/dist/frontend/lowering/native-ffi.js +487 -18
  731. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  732. package/dist/frontend/lowering/object-enumeration-receiver.js +55 -10
  733. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  734. package/dist/frontend/lowering/object-factory-new.d.ts +1 -1
  735. package/dist/frontend/lowering/object-factory-new.js +36 -11
  736. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  737. package/dist/frontend/lowering/optional-arguments.js +49 -20
  738. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  739. package/dist/frontend/lowering/pairs-snapshot.js +66 -14
  740. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  741. package/dist/frontend/lowering/runtime-optional-locals.js +3 -1
  742. package/dist/frontend/lowering/runtime-optional-locals.js.map +1 -1
  743. package/dist/frontend/lowering/runtime-optional-locals.test.js.map +1 -1
  744. package/dist/frontend/lowering/sanitize-class-types.js +4 -1
  745. package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
  746. package/dist/frontend/lowering/sanitize-class-types.test.js +86 -18
  747. package/dist/frontend/lowering/sanitize-class-types.test.js.map +1 -1
  748. package/dist/frontend/lowering/static-this.js +13 -6
  749. package/dist/frontend/lowering/static-this.js.map +1 -1
  750. package/dist/frontend/lowering/string-index.js +32 -10
  751. package/dist/frontend/lowering/string-index.js.map +1 -1
  752. package/dist/frontend/lowering/surfaces.d.ts +42 -42
  753. package/dist/frontend/lowering/surfaces.js +1094 -249
  754. package/dist/frontend/lowering/surfaces.js.map +1 -1
  755. package/dist/frontend/lowering/symbol-fields.js +40 -15
  756. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  757. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  758. package/dist/frontend/lowering/text-decoder-encoding.js +236 -24
  759. package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -1
  760. package/dist/frontend/lowering/text-decoder-encoding.test.js +84 -12
  761. package/dist/frontend/lowering/text-decoder-encoding.test.js.map +1 -1
  762. package/dist/frontend/lowering/union-narrow.js +59 -16
  763. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  764. package/dist/frontend/lowering/union-narrow.test.js +24 -7
  765. package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
  766. package/dist/frontend/lowering/union-retag.js +155 -40
  767. package/dist/frontend/lowering/union-retag.js.map +1 -1
  768. package/dist/frontend/lowering/union-retag.test.js +131 -33
  769. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  770. package/dist/frontend/lowering/unregistered-class-types.js.map +1 -1
  771. package/dist/frontend/lowering/unregistered-class-types.test.js +34 -8
  772. package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -1
  773. package/dist/frontend/module-syntax.js +21 -8
  774. package/dist/frontend/module-syntax.js.map +1 -1
  775. package/dist/frontend/module-syntax.test.js +37 -13
  776. package/dist/frontend/module-syntax.test.js.map +1 -1
  777. package/dist/frontend/npm-fetch-analysis.js +13 -4
  778. package/dist/frontend/npm-fetch-analysis.js.map +1 -1
  779. package/dist/frontend/npm-fetch-analysis.test.js +33 -10
  780. package/dist/frontend/npm-fetch-analysis.test.js.map +1 -1
  781. package/dist/frontend/npm-fetch-node.js.map +1 -1
  782. package/dist/frontend/npm-fetch-syntax.js +4 -9
  783. package/dist/frontend/npm-fetch-syntax.js.map +1 -1
  784. package/dist/frontend/npm-node.js +3 -1
  785. package/dist/frontend/npm-node.js.map +1 -1
  786. package/dist/frontend/npm-static-bundled-cjs.js +88 -29
  787. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  788. package/dist/frontend/npm-static-bundled-cjs.test.js +29 -10
  789. package/dist/frontend/npm-static-bundled-cjs.test.js.map +1 -1
  790. package/dist/frontend/npm-static-declaration-syntax.js +148 -56
  791. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  792. package/dist/frontend/npm-static-declarations.d.ts +1 -1
  793. package/dist/frontend/npm-static-declarations.js.map +1 -1
  794. package/dist/frontend/npm-static-declarations.test.js +33 -7
  795. package/dist/frontend/npm-static-declarations.test.js.map +1 -1
  796. package/dist/frontend/npm-static-prune.js +26 -12
  797. package/dist/frontend/npm-static-prune.js.map +1 -1
  798. package/dist/frontend/npm-static-prune.test.js +17 -3
  799. package/dist/frontend/npm-static-prune.test.js.map +1 -1
  800. package/dist/frontend/npm-static-rewrite-host.js +2 -3
  801. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  802. package/dist/frontend/npm-static-rewrite-syntax.js +64 -21
  803. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  804. package/dist/frontend/npm-static-rewrite.js.map +1 -1
  805. package/dist/frontend/npm-static-subtyping.js +9 -4
  806. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  807. package/dist/frontend/npm-static-subtyping.test.js +30 -6
  808. package/dist/frontend/npm-static-subtyping.test.js.map +1 -1
  809. package/dist/frontend/npm-static.js +15 -4
  810. package/dist/frontend/npm-static.js.map +1 -1
  811. package/dist/frontend/npm.js +122 -36
  812. package/dist/frontend/npm.js.map +1 -1
  813. package/dist/frontend/npm.test.js +30 -10
  814. package/dist/frontend/npm.test.js.map +1 -1
  815. package/dist/frontend/pipeline-native.js.map +1 -1
  816. package/dist/frontend/pipeline.js +25 -8
  817. package/dist/frontend/pipeline.js.map +1 -1
  818. package/dist/frontend/pipeline.test.js +21 -7
  819. package/dist/frontend/pipeline.test.js.map +1 -1
  820. package/dist/frontend/program-node.js +5 -3
  821. package/dist/frontend/program-node.js.map +1 -1
  822. package/dist/frontend/program.d.ts +2 -2
  823. package/dist/frontend/program.js +234 -101
  824. package/dist/frontend/program.js.map +1 -1
  825. package/dist/frontend/program.test.js +27 -27
  826. package/dist/frontend/program.test.js.map +1 -1
  827. package/dist/frontend/provenance-core.js +8 -4
  828. package/dist/frontend/provenance-core.js.map +1 -1
  829. package/dist/frontend/provenance-registry.js +1 -4
  830. package/dist/frontend/provenance-registry.js.map +1 -1
  831. package/dist/frontend/resolve.js +32 -20
  832. package/dist/frontend/resolve.js.map +1 -1
  833. package/dist/frontend/resolve.test.js +1 -1
  834. package/dist/frontend/resolve.test.js.map +1 -1
  835. package/dist/frontend/runtime-resolve.js +13 -4
  836. package/dist/frontend/runtime-resolve.js.map +1 -1
  837. package/dist/frontend/runtime-resolve.test.js +25 -9
  838. package/dist/frontend/runtime-resolve.test.js.map +1 -1
  839. package/dist/frontend/services-node.js +6 -2
  840. package/dist/frontend/services-node.js.map +1 -1
  841. package/dist/frontend/services-node.test.js +18 -6
  842. package/dist/frontend/services-node.test.js.map +1 -1
  843. package/dist/frontend/services.js +8 -4
  844. package/dist/frontend/services.js.map +1 -1
  845. package/dist/frontend/services.test.js +6 -2
  846. package/dist/frontend/services.test.js.map +1 -1
  847. package/dist/frontend/ts7/api.js +12 -4
  848. package/dist/frontend/ts7/api.js.map +1 -1
  849. package/dist/frontend/ts7/ast-bytes.js +10 -3
  850. package/dist/frontend/ts7/ast-bytes.js.map +1 -1
  851. package/dist/frontend/ts7/ast-bytes.test.js +23 -4
  852. package/dist/frontend/ts7/ast-bytes.test.js.map +1 -1
  853. package/dist/frontend/ts7/ast-guards.test.js +14 -5
  854. package/dist/frontend/ts7/ast-guards.test.js.map +1 -1
  855. package/dist/frontend/ts7/ast-node.d.ts +6 -1
  856. package/dist/frontend/ts7/ast-node.js +484 -164
  857. package/dist/frontend/ts7/ast-node.js.map +1 -1
  858. package/dist/frontend/ts7/ast-node.test.js +109 -36
  859. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  860. package/dist/frontend/ts7/ast-text.js +13 -3
  861. package/dist/frontend/ts7/ast-text.js.map +1 -1
  862. package/dist/frontend/ts7/ast-text.test.js.map +1 -1
  863. package/dist/frontend/ts7/ast-types.js.map +1 -1
  864. package/dist/frontend/ts7/ast-wire.d.ts +1 -1
  865. package/dist/frontend/ts7/ast-wire.js +55 -20
  866. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  867. package/dist/frontend/ts7/ast-wire.test.js +53 -8
  868. package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
  869. package/dist/frontend/ts7/ast.js +47 -28
  870. package/dist/frontend/ts7/ast.js.map +1 -1
  871. package/dist/frontend/ts7/census-check.js +1 -1
  872. package/dist/frontend/ts7/census-check.js.map +1 -1
  873. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  874. package/dist/frontend/ts7/checker.js +5 -3
  875. package/dist/frontend/ts7/checker.js.map +1 -1
  876. package/dist/frontend/ts7/checker.test.js +54 -17
  877. package/dist/frontend/ts7/checker.test.js.map +1 -1
  878. package/dist/frontend/ts7/enums.test.js +9 -4
  879. package/dist/frontend/ts7/enums.test.js.map +1 -1
  880. package/dist/frontend/ts7/native-api.js.map +1 -1
  881. package/dist/frontend/ts7/native-host.js.map +1 -1
  882. package/dist/frontend/ts7/native-process.js +9 -3
  883. package/dist/frontend/ts7/native-process.js.map +1 -1
  884. package/dist/frontend/ts7/program-adapter.js +1 -1
  885. package/dist/frontend/ts7/program-adapter.js.map +1 -1
  886. package/dist/frontend/ts7/program-host.js +7 -4
  887. package/dist/frontend/ts7/program-host.js.map +1 -1
  888. package/dist/frontend/ts7/program-host.test.js +43 -11
  889. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  890. package/dist/frontend/ts7/rpc-api.js +3 -1
  891. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  892. package/dist/frontend/ts7/rpc-client.js +15 -5
  893. package/dist/frontend/ts7/rpc-client.js.map +1 -1
  894. package/dist/frontend/ts7/rpc-client.test.js +26 -8
  895. package/dist/frontend/ts7/rpc-client.test.js.map +1 -1
  896. package/dist/frontend/ts7/rpc-filesystem.js.map +1 -1
  897. package/dist/frontend/ts7/rpc-filesystem.test.js +43 -10
  898. package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -1
  899. package/dist/frontend/ts7/rpc-process.js +16 -6
  900. package/dist/frontend/ts7/rpc-process.js.map +1 -1
  901. package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
  902. package/dist/frontend/ts7/rpc-wire.d.ts +1 -0
  903. package/dist/frontend/ts7/rpc-wire.js +41 -14
  904. package/dist/frontend/ts7/rpc-wire.js.map +1 -1
  905. package/dist/frontend/ts7/rpc-wire.test.js +36 -6
  906. package/dist/frontend/ts7/rpc-wire.test.js.map +1 -1
  907. package/dist/frontend/ts7/semantic-checker.js +209 -68
  908. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  909. package/dist/frontend/ts7/semantic-checker.test.js +29 -14
  910. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  911. package/dist/frontend/ts7/semantic-json.js +7 -1
  912. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  913. package/dist/frontend/ts7/semantic-json.test.js +17 -3
  914. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  915. package/dist/frontend/ts7/semantic-model.js +147 -51
  916. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  917. package/dist/frontend/ts7/semantic-model.test.js +72 -19
  918. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  919. package/dist/frontend/ts7/semantic-types.d.ts +2 -2
  920. package/dist/frontend/ts7/session-cache.js +10 -3
  921. package/dist/frontend/ts7/session-cache.js.map +1 -1
  922. package/dist/frontend/ts7/session-cache.test.js +13 -4
  923. package/dist/frontend/ts7/session-cache.test.js.map +1 -1
  924. package/dist/frontend/ts7/session-path.js +25 -10
  925. package/dist/frontend/ts7/session-path.js.map +1 -1
  926. package/dist/frontend/ts7/session-path.test.js +47 -4
  927. package/dist/frontend/ts7/session-path.test.js.map +1 -1
  928. package/dist/frontend/ts7/session-timing.js +22 -3
  929. package/dist/frontend/ts7/session-timing.js.map +1 -1
  930. package/dist/frontend/ts7/session-timing.test.js +12 -3
  931. package/dist/frontend/ts7/session-timing.test.js.map +1 -1
  932. package/dist/frontend/ts7/session.d.ts +1 -0
  933. package/dist/frontend/ts7/session.js +109 -35
  934. package/dist/frontend/ts7/session.js.map +1 -1
  935. package/dist/frontend/ts7/session.test.js +69 -15
  936. package/dist/frontend/ts7/session.test.js.map +1 -1
  937. package/dist/frontend/ts7/source-parser.js +17 -6
  938. package/dist/frontend/ts7/source-parser.js.map +1 -1
  939. package/dist/frontend/ts7/source-parser.test.js +32 -9
  940. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  941. package/dist/frontend/tsc-codes.js +56 -11
  942. package/dist/frontend/tsc-codes.js.map +1 -1
  943. package/dist/frontend/tsc-codes.test.d.ts +1 -0
  944. package/dist/frontend/tsc-codes.test.js +16 -0
  945. package/dist/frontend/tsc-codes.test.js.map +1 -0
  946. package/dist/frontend/type-mapper.js +547 -206
  947. package/dist/frontend/type-mapper.js.map +1 -1
  948. package/dist/frontend/type-mapper.test.js +108 -33
  949. package/dist/frontend/type-mapper.test.js.map +1 -1
  950. package/dist/frontend/union-discriminants.js +8 -2
  951. package/dist/frontend/union-discriminants.js.map +1 -1
  952. package/dist/frontend/union-discriminants.test.js +77 -20
  953. package/dist/frontend/union-discriminants.test.js.map +1 -1
  954. package/dist/index.d.ts +9 -8
  955. package/dist/index.js +150 -81
  956. package/dist/index.js.map +1 -1
  957. package/dist/ir/analysis.js +97 -38
  958. package/dist/ir/analysis.js.map +1 -1
  959. package/dist/ir/analysis.test.js +91 -15
  960. package/dist/ir/analysis.test.js.map +1 -1
  961. package/dist/ir/api.d.ts +4 -0
  962. package/dist/ir/api.js +6 -0
  963. package/dist/ir/api.js.map +1 -0
  964. package/dist/ir/build.d.ts +7 -0
  965. package/dist/ir/build.js +27 -1
  966. package/dist/ir/build.js.map +1 -1
  967. package/dist/ir/builtin-effects.d.ts +9 -0
  968. package/dist/ir/builtin-effects.js +631 -0
  969. package/dist/ir/builtin-effects.js.map +1 -0
  970. package/dist/ir/builtin-signatures.d.ts +15 -0
  971. package/dist/ir/builtin-signatures.js +3396 -0
  972. package/dist/ir/builtin-signatures.js.map +1 -0
  973. package/dist/ir/byte-numbers.d.ts +20 -0
  974. package/dist/ir/byte-numbers.js +116 -0
  975. package/dist/ir/byte-numbers.js.map +1 -0
  976. package/dist/ir/byte-numbers.test.d.ts +1 -0
  977. package/dist/ir/byte-numbers.test.js +55 -0
  978. package/dist/ir/byte-numbers.test.js.map +1 -0
  979. package/dist/ir/constant-tables.js +13 -5
  980. package/dist/ir/constant-tables.js.map +1 -1
  981. package/dist/ir/constant-tables.test.js +47 -7
  982. package/dist/ir/constant-tables.test.js.map +1 -1
  983. package/dist/ir/control-flow.js +2 -1
  984. package/dist/ir/control-flow.js.map +1 -1
  985. package/dist/ir/control-flow.test.js +35 -11
  986. package/dist/ir/control-flow.test.js.map +1 -1
  987. package/dist/ir/initializer-bindings.d.ts +9 -0
  988. package/dist/ir/initializer-bindings.js +115 -0
  989. package/dist/ir/initializer-bindings.js.map +1 -0
  990. package/dist/ir/initializer-bindings.test.d.ts +1 -0
  991. package/dist/ir/initializer-bindings.test.js +118 -0
  992. package/dist/ir/initializer-bindings.test.js.map +1 -0
  993. package/dist/ir/integer-loop-facts.d.ts +12 -0
  994. package/dist/ir/integer-loop-facts.js +137 -0
  995. package/dist/ir/integer-loop-facts.js.map +1 -0
  996. package/dist/ir/integer-loops.d.ts +19 -0
  997. package/dist/ir/integer-loops.js +172 -11
  998. package/dist/ir/integer-loops.js.map +1 -1
  999. package/dist/ir/integer-loops.test.js +122 -9
  1000. package/dist/ir/integer-loops.test.js.map +1 -1
  1001. package/dist/ir/integer-ranges.d.ts +8 -6
  1002. package/dist/ir/integer-ranges.js +416 -90
  1003. package/dist/ir/integer-ranges.js.map +1 -1
  1004. package/dist/ir/integer-ranges.test.js +239 -10
  1005. package/dist/ir/integer-ranges.test.js.map +1 -1
  1006. package/dist/ir/intrinsic-signatures.d.ts +20 -0
  1007. package/dist/ir/intrinsic-signatures.js +57 -0
  1008. package/dist/ir/intrinsic-signatures.js.map +1 -0
  1009. package/dist/ir/ir.d.ts +14 -2155
  1010. package/dist/ir/ir.js +169 -1394
  1011. package/dist/ir/ir.js.map +1 -1
  1012. package/dist/ir/ir.test.js +98 -77
  1013. package/dist/ir/ir.test.js.map +1 -1
  1014. package/dist/ir/runtime-features.d.ts +221 -0
  1015. package/dist/ir/runtime-features.js +551 -0
  1016. package/dist/ir/runtime-features.js.map +1 -0
  1017. package/dist/ir/runtime-features.test.d.ts +1 -0
  1018. package/dist/ir/runtime-features.test.js +98 -0
  1019. package/dist/ir/runtime-features.test.js.map +1 -0
  1020. package/dist/ir/scalar-records.js +130 -40
  1021. package/dist/ir/scalar-records.js.map +1 -1
  1022. package/dist/ir/scalar-records.test.js +146 -27
  1023. package/dist/ir/scalar-records.test.js.map +1 -1
  1024. package/dist/ir/serialize.js +4 -2
  1025. package/dist/ir/serialize.js.map +1 -1
  1026. package/dist/ir/serialize.test.js +44 -9
  1027. package/dist/ir/serialize.test.js.map +1 -1
  1028. package/dist/ir/traverse.js +156 -43
  1029. package/dist/ir/traverse.js.map +1 -1
  1030. package/dist/ir/traverse.test.js +99 -24
  1031. package/dist/ir/traverse.test.js.map +1 -1
  1032. package/dist/ir/validate.d.ts +1 -31
  1033. package/dist/ir/validate.js +826 -1915
  1034. package/dist/ir/validate.js.map +1 -1
  1035. package/dist/ir/validate.test.js +627 -111
  1036. package/dist/ir/validate.test.js.map +1 -1
  1037. package/dist/library/cache-primitives.js +9 -10
  1038. package/dist/library/cache-primitives.js.map +1 -1
  1039. package/dist/library/cache-reset.test.js +2 -1
  1040. package/dist/library/cache-reset.test.js.map +1 -1
  1041. package/dist/library/compiler-self-identity.js +11 -5
  1042. package/dist/library/compiler-self-identity.js.map +1 -1
  1043. package/dist/library/compiler-self-identity.test.js +10 -3
  1044. package/dist/library/compiler-self-identity.test.js.map +1 -1
  1045. package/dist/library/fence-eval.js +24 -7
  1046. package/dist/library/fence-eval.js.map +1 -1
  1047. package/dist/library/fence-eval.test.js +31 -7
  1048. package/dist/library/fence-eval.test.js.map +1 -1
  1049. package/dist/library/int-infer.js +199 -59
  1050. package/dist/library/int-infer.js.map +1 -1
  1051. package/dist/library/int-infer.test.js +133 -57
  1052. package/dist/library/int-infer.test.js.map +1 -1
  1053. package/dist/library/ir-policy.d.ts +27 -0
  1054. package/dist/library/ir-policy.js +232 -0
  1055. package/dist/library/ir-policy.js.map +1 -0
  1056. package/dist/library/library-cache.js +40 -17
  1057. package/dist/library/library-cache.js.map +1 -1
  1058. package/dist/library/library-cache.test.js +24 -13
  1059. package/dist/library/library-cache.test.js.map +1 -1
  1060. package/dist/library/library-profile.js +68 -13
  1061. package/dist/library/library-profile.js.map +1 -1
  1062. package/dist/library/prepare.js +48 -20
  1063. package/dist/library/prepare.js.map +1 -1
  1064. package/dist/library/semantic-source.js +16 -14
  1065. package/dist/library/semantic-source.js.map +1 -1
  1066. package/dist/library/semantic-source.test.js +9 -14
  1067. package/dist/library/semantic-source.test.js.map +1 -1
  1068. package/dist/library/sidecar-validate.js +53 -12
  1069. package/dist/library/sidecar-validate.js.map +1 -1
  1070. package/dist/library/sidecar.js +85 -24
  1071. package/dist/library/sidecar.js.map +1 -1
  1072. package/dist/library/trap-teaching.js +11 -2
  1073. package/dist/library/trap-teaching.js.map +1 -1
  1074. package/dist/native/cache.js +10 -4
  1075. package/dist/native/cache.js.map +1 -1
  1076. package/dist/native/cli.js +34 -9
  1077. package/dist/native/cli.js.map +1 -1
  1078. package/dist/native/compiler.js +167 -43
  1079. package/dist/native/compiler.js.map +1 -1
  1080. package/dist/native/compiler.test.js +129 -32
  1081. package/dist/native/compiler.test.js.map +1 -1
  1082. package/dist/native/comptime.js +23 -7
  1083. package/dist/native/comptime.js.map +1 -1
  1084. package/dist/native/comptime.test.js +26 -6
  1085. package/dist/native/comptime.test.js.map +1 -1
  1086. package/dist/native/executable-cache.js +77 -27
  1087. package/dist/native/executable-cache.js.map +1 -1
  1088. package/dist/native/executable-cache.test.js +41 -6
  1089. package/dist/native/executable-cache.test.js.map +1 -1
  1090. package/dist/native/file-identity.js +9 -2
  1091. package/dist/native/file-identity.js.map +1 -1
  1092. package/dist/native/file-identity.test.js.map +1 -1
  1093. package/dist/native/library.js +50 -12
  1094. package/dist/native/library.js.map +1 -1
  1095. package/dist/native/prepare.js +119 -34
  1096. package/dist/native/prepare.js.map +1 -1
  1097. package/dist/native/prepare.test.js +22 -6
  1098. package/dist/native/prepare.test.js.map +1 -1
  1099. package/dist/native/runtime-typescript.js +24 -11
  1100. package/dist/native/runtime-typescript.js.map +1 -1
  1101. package/dist/native/runtime-typescript.test.js.map +1 -1
  1102. package/dist/native/sanitizer.js +71 -18
  1103. package/dist/native/sanitizer.js.map +1 -1
  1104. package/dist/native/sanitizer.test.js +77 -20
  1105. package/dist/native/sanitizer.test.js.map +1 -1
  1106. package/dist/native/task.js.map +1 -1
  1107. package/dist/native/task.test.js +7 -2
  1108. package/dist/native/task.test.js.map +1 -1
  1109. package/dist/native/toolchain.js +74 -29
  1110. package/dist/native/toolchain.js.map +1 -1
  1111. package/dist/native/toolchain.test.js +95 -18
  1112. package/dist/native/toolchain.test.js.map +1 -1
  1113. package/dist/startup-cache.d.ts +1 -1
  1114. package/dist/startup-cache.js +1 -1
  1115. package/dist/startup-cache.js.map +1 -1
  1116. package/dist/timing.js.map +1 -1
  1117. package/package.json +20 -20
  1118. package/surface-manifest.json +1 -1
  1119. package/dist/frontend/lowering/lower-builtins.d.ts +0 -601
  1120. package/dist/frontend/lowering/lower-builtins.js +0 -8984
  1121. package/dist/frontend/lowering/lower-builtins.js.map +0 -1
  1122. package/dist/frontend/lowering/lower-containers.d.ts +0 -382
  1123. package/dist/frontend/lowering/lower-containers.js +0 -7366
  1124. package/dist/frontend/lowering/lower-containers.js.map +0 -1
@@ -0,0 +1,1267 @@
1
+ import { toolchainEnvironmentCachePolicy, toolchainEnvironmentFingerprint, } from "../toolchain-environment.js";
2
+ import { isMobileTarget } from "../target-platform.js";
3
+ import { createHash } from "node:crypto";
4
+ import { chmod, mkdtemp, readFile, rename, rm, writeFile } from "node:fs/promises";
5
+ import { availableParallelism, tmpdir } from "node:os";
6
+ import { basename, dirname, join, resolve } from "node:path";
7
+ import { executableOptimizationLinkerArgs, executableStripLinkerArgs, windowsSubsystemLinkerArgs, } from "../targets.js";
8
+ import { createDarwinDebugSymbols, installDarwinDebugSymbols, needsDarwinDebugSymbols, readDarwinDebugSymbols, } from "../debug-symbols.js";
9
+ import { cacheRootDir, copyValidCachedFile, ensurePrivateCacheRoot, fileDigest, installArtifact, privateSiblingPath, protectCachedArtifact, pruneCache, publishCachedFile, } from "../build-cache.js";
10
+ import {} from "./contracts.js";
11
+ import { runtimeSrcDir, EXECUTABLE_RUNTIME_SOURCES, runtimeFingerprint, runtimeFingerprintInputPaths, } from "./runtime-inputs.js";
12
+ import { resolveCc, targetPlatform, executableSectionEliminationFlags, cacheTargetIdentity, isZigDriver, isMuslTarget, } from "./driver.js";
13
+ import { resolveProgramShardMergeIdentity, selectProgramShards, updateProgramShardCacheIdentity, } from "./program-shards.js";
14
+ import { compilerDriverSupportsPersistentCache, resolvedTool, directCompilerSelections, compilerDriverProbeKey, ccVersion, } from "./tool-identity.js";
15
+ import { localArtifactIdentity, localArtifactStampPath, localArtifactHit, nativeMetadataKey, readNativeMetadataStamp, publishNativeMetadataStamp, snapshotLocalArtifactDependencies, nativeArtifactDependenciesStillMatch, publishLocalArtifactStamp, } from "./artifact-stamps.js";
16
+ import { implicitToolchainFingerprints, effectiveCompilerInvocationFingerprint, translationUnitDependencyFingerprint, implicitToolchainFingerprint, } from "./compiler-fingerprint.js";
17
+ import { fingerprintDependencyPaths, fingerprintDependenciesStillMatch, } from "./dependency-files.js";
18
+ import { currentVendorCacheBuildIdentity, vendorBuildCacheRoot, engineArchivePath, tlsArchivePath, lreObjectPaths, zlibObjectPaths, curlStubDirPath, ensureEngineArchive, stageVendorInputs, ensureTlsArchive, ensureLreObjects, ensureZlibObjects, ensureCurlStub, vendorEngineDir, vendorZlibDir, vendorTlsDir, vendorCurlDir, } from "./vendor.js";
19
+ import { execFileAsync, subprocessFailureDetail, CcCompileError } from "./process.js";
20
+ import { implicitLinkerFingerprint } from "./linker-fingerprint.js";
21
+ import { CacheInputsChangedError } from "./session.js";
22
+ import { ensureRuntimeObjects, stageRuntimeObjects, clearCcCaches } from "./runtime-objects.js";
23
+ import { localizeLibraryObjects } from "./object-merge.js";
24
+ /** Compiles one C program together with the runtime sources.
25
+ * With caching disabled, the runtime (a dozen small files) is recompiled on
26
+ * every build — no cached-archive staleness bugs. Sanitized dev builds compile
27
+ * the program separately so its O0 setting does not slow the O1 runtime.
28
+ * Other builds use one clang invocation. --dynamic additionally compiles
29
+ * scr_island.c under SCR_DYNAMIC and links the cached engine archive (built
30
+ * lazily, see above); regex-using programs additionally compile scr_regex.c
31
+ * and link libregexp (the cached objects, or the archive's own copy under
32
+ * --dynamic). Executable links use the target's section-elimination recipe
33
+ * independently of those feature gates.
34
+ *
35
+ * With a caller-supplied dependency identity and an enabled cache root,
36
+ * unchanged programs skip payload code generation/linking via the binary
37
+ * cache after lightweight metadata probes, and misses link the program's own
38
+ * TU against cached per-flavor runtime objects. */
39
+ export async function compileCInternal(opts, cacheWarmOnly, cacheWarmPaths) {
40
+ const rtDir = runtimeSrcDir();
41
+ const sanitize = opts.sanitize ?? false;
42
+ const optimization = opts.optimization ?? "release";
43
+ const dynamic = opts.dynamic ?? false;
44
+ const regex = opts.regex ?? false;
45
+ // fetch's implementation switch: the default is the NATIVE bridge
46
+ // (scr_fetch.c over scr_net + scr_tls + scr_http's client parser +
47
+ // zlib — no libcurl anywhere), which implies the socket units into the
48
+ // link. SCRIPTC_FETCH_CURL=1 keeps the retired curl reference
49
+ // (scr_fetch_curl.c + system libcurl / the linux soname stub)
50
+ // compilable for one release as the flip's reference.
51
+ const fetchOn = opts.fetch ?? false;
52
+ // The retired curl bridge has only a SCR_DYNAMIC implementation.
53
+ // Static fetch always keeps the native runtime even when a developer
54
+ // has the comparison switch exported in their shell.
55
+ const curlFetch = dynamic && fetchOn && process.env["SCRIPTC_FETCH_CURL"] === "1";
56
+ const nativeFetch = fetchOn && !curlFetch;
57
+ // The island's node:http/https client bridge: embedded graphs that
58
+ // import those builtins get working clients over the same socket units
59
+ // (native-fetch builds always carry it — scr_fetch_install registers it).
60
+ const netIsland = dynamic && ((opts.netIsland ?? false) || nativeFetch);
61
+ const net = (opts.net ?? false) || nativeFetch || netIsland;
62
+ const http = (opts.http ?? false) || nativeFetch || netIsland;
63
+ const tls = (opts.tls ?? false) || nativeFetch || netIsland;
64
+ const tlsCa = (opts.tlsCa ?? false) || tls;
65
+ const driver = resolveCc();
66
+ const darwinDebugSymbols = needsDarwinDebugSymbols(targetPlatform(driver), optimization, opts.strip);
67
+ if (opts.frameworks?.length && targetPlatform(driver) !== "darwin")
68
+ throw new Error("FFI frameworks require a Darwin target");
69
+ if (opts.frameworks?.some((name) => !/^[A-Za-z][A-Za-z0-9_]*$/.test(name)))
70
+ throw new Error("Invalid FFI framework name");
71
+ const debugFlags = optimization === "dev" && !opts.strip
72
+ ? ["-gline-tables-only", ...(opts.cPath.endsWith(".ll") ? [] : ["-gno-column-info"])]
73
+ : [];
74
+ const { programShards, programPublicSymbols, programShardMergeIdentity } = await selectProgramShards(driver, opts, optimization === "dev" && !sanitize);
75
+ // Mobile triples produce library archives, never standalone executables:
76
+ // the executable-lane runtime (event loop, sockets, child processes) is
77
+ // not verified on those device classes. compile() reports the SC3002
78
+ // diagnostic first; this is the backstop for direct compileC callers.
79
+ if (isMobileTarget(driver.target)) {
80
+ throw new Error(`SCRIPTC_TARGET=${driver.target} builds library-mode static archives only — ` +
81
+ `compile with a library profile (SCRIPTC_CC=zigcc scriptc build --lib --profile <profile.json>) and link the archive from the app project.`);
82
+ }
83
+ const runtimeSources = targetPlatform(driver) === "wasi"
84
+ ? EXECUTABLE_RUNTIME_SOURCES.filter((source) => source !== "scr_child.c")
85
+ : EXECUTABLE_RUNTIME_SOURCES;
86
+ const executableSectionFlags = executableSectionEliminationFlags(targetPlatform(driver));
87
+ const windowsSubsystemArgs = windowsSubsystemLinkerArgs(targetPlatform(driver), opts.windowsSubsystem);
88
+ const executableLinkFlags = [
89
+ ...executableSectionFlags.link,
90
+ ...executableOptimizationLinkerArgs(targetPlatform(driver), optimization),
91
+ ...executableStripLinkerArgs(targetPlatform(driver), opts.strip ?? false),
92
+ ...windowsSubsystemArgs,
93
+ ];
94
+ // scr_async.c submits callback-style filesystem work to a native worker.
95
+ // POSIX drivers need the thread compile/link mode; win32 uses CreateThread.
96
+ const threadArgs = targetPlatform(driver) === "win32" || targetPlatform(driver) === "wasi" ? [] : ["-pthread"];
97
+ if (driver.target !== null) {
98
+ // See the resolveCc block: these inputs are built on and for the HOST
99
+ // (vendored archives, system libs). Regex, zlib, and the engine archive
100
+ // are NOT here: their vendored sources are plain C that ensureLreObjects
101
+ // / ensureZlibObjects / buildEngineArchiveDirect compile per target with
102
+ // the driver itself — win32 included (the Windows lane runs the
103
+ // @dynamic corpus and the zlib program against the box's Node). The
104
+ // NATIVE fetch rides the socket units and cross-compiles with them —
105
+ // no gate; only the retired curl REFERENCE (SCRIPTC_FETCH_CURL=1)
106
+ // keeps a linux-only arm (the vendored curl headers + the generated
107
+ // soname stub, ensureCurlStub — win32 has no system libcurl contract
108
+ // to bind at load time). The event-loop units, tls, and dgram cross-compile to Linux
109
+ // AND Windows (scr_platform.h poller + per-target mbedTLS; the
110
+ // loop's win32 arm is WSAPoll, scr_loop_wsapoll.c, and the socket
111
+ // units' win32 arms respell winsock behind POSIX-errno wrappers —
112
+ // scr_net.c/scr_dgram.c/scr_tls.c). The events unit cross-compiles
113
+ // everywhere: its win32 arm is CRT signal() +
114
+ // PeekNamedPipe/WaitForSingleObject probes (scr_events.c), served by
115
+ // the loop's capped win32 idle sleep (scr_async.c).
116
+ const unsupported = [
117
+ // The NATIVE fetch cross-compiles wherever the socket units do
118
+ // (linux and win32 both); only the retired curl reference keeps
119
+ // its linux-only soname-stub arm.
120
+ ["fetch (SCRIPTC_FETCH_CURL)", curlFetch && targetPlatform(driver) !== "linux"],
121
+ ]
122
+ .filter(([, on]) => on)
123
+ .map(([name]) => name);
124
+ if (unsupported.length > 0) {
125
+ throw new Error(`SCRIPTC_TARGET=${driver.target}: ${unsupported.join(", ")} not supported under a cross target yet ` +
126
+ `(host-built vendor archives / system libs — see docs/linux-port.md).`);
127
+ }
128
+ }
129
+ const cachePolicy = toolchainEnvironmentCachePolicy();
130
+ const configuredCacheRoot = cacheRootDir();
131
+ const toolchainEnv = toolchainEnvironmentFingerprint();
132
+ const persistentDriverCache = cachePolicy.runtimeObjects &&
133
+ configuredCacheRoot !== null &&
134
+ (await compilerDriverSupportsPersistentCache(driver, toolchainEnv));
135
+ // Only compiler-generated TUs opt in. Arbitrary `compileC` inputs
136
+ // inputs may include caller-owned headers whose contents are not otherwise
137
+ // represented in this key, so they retain the fully uncached historical
138
+ // path unless the caller supplies its own complete dependency identity.
139
+ const cacheIdentity = opts.cacheIdentity;
140
+ let persistentCache = cacheIdentity === undefined || configuredCacheRoot === null || !persistentDriverCache
141
+ ? null
142
+ : { root: configuredCacheRoot, identity: cacheIdentity };
143
+ if (cacheWarmOnly && persistentCache === null) {
144
+ throw new Error("native cache warming requires a persistently cacheable compiler environment");
145
+ }
146
+ if (persistentCache !== null) {
147
+ try {
148
+ await ensurePrivateCacheRoot(persistentCache.root, process.env["SCRIPTC_CACHE_DIR"] === undefined);
149
+ }
150
+ catch (error) {
151
+ if (cacheWarmOnly) {
152
+ throw new Error("native cache warming could not prepare the persistent cache root", {
153
+ cause: error,
154
+ });
155
+ }
156
+ persistentCache = null;
157
+ }
158
+ }
159
+ let localArtifact = null;
160
+ // Generated executable TUs are closed over scriptc's own runtime tree. A
161
+ // same-output rebuild can therefore check those bytes directly before the
162
+ // broader cross-output CAS performs its compiler/SDK/linker rediscovery.
163
+ // FFI/native-input builds and the public arbitrary-C cache API stay on the
164
+ // strict path because their dependency graphs are caller-owned.
165
+ if (!cacheWarmOnly &&
166
+ persistentCache !== null &&
167
+ cachePolicy.completeArtifacts &&
168
+ persistentCache.identity === "scriptc-generated-v1" &&
169
+ (opts.linkInputs?.length ?? 0) === 0 &&
170
+ (opts.frameworks?.length ?? 0) === 0 &&
171
+ (opts.systemLibraries?.length ?? 0) === 0 &&
172
+ process.env["SCRIPTC_TEST_TRUST_COMPILER_WRAPPER"] !== "1") {
173
+ try {
174
+ const [compiler, runtimeHash, programBytes] = await Promise.all([
175
+ resolvedTool(driver.argv[0] ?? "clang"),
176
+ runtimeFingerprint(rtDir),
177
+ readFile(opts.cPath),
178
+ ]);
179
+ if (compiler !== null) {
180
+ const effectiveCompiler = directCompilerSelections.get(compilerDriverProbeKey(driver, toolchainEnv)) ?? compiler;
181
+ const key = localArtifactIdentity(opts, driver, toolchainEnv, `${compiler.cacheIdentity}\0${effectiveCompiler.cacheIdentity}`, runtimeHash, programBytes, programShardMergeIdentity);
182
+ const stampPath = localArtifactStampPath(persistentCache.root, opts.outPath);
183
+ localArtifact = {
184
+ stampPath,
185
+ key,
186
+ runtimeHash,
187
+ programBytes,
188
+ compilerPath: effectiveCompiler.canonicalPath,
189
+ };
190
+ const hit = await localArtifactHit(stampPath, opts.outPath, key, darwinDebugSymbols);
191
+ if (hit !== null) {
192
+ await opts.onArtifactReady?.({ dependencies: hit.dependencies }).catch(() => undefined);
193
+ return;
194
+ }
195
+ }
196
+ }
197
+ catch {
198
+ // The output-local tier is only an optimization; the fully validated
199
+ // CAS below remains the source of truth on any metadata trouble.
200
+ localArtifact = null;
201
+ }
202
+ }
203
+ let implicitToolchain = null;
204
+ let implicitCompileToolchain = null;
205
+ let toolchainMetadataStamp = null;
206
+ const metadataCompiler = persistentCache === null ? null : await resolvedTool(driver.argv[0] ?? "clang");
207
+ const metadataEffectiveCompiler = directCompilerSelections.get(compilerDriverProbeKey(driver, toolchainEnv)) ?? metadataCompiler;
208
+ const toolchainMetadataKey = persistentCache === null ||
209
+ metadataCompiler === null ||
210
+ metadataEffectiveCompiler === null ||
211
+ process.env["SCRIPTC_TEST_TRUST_COMPILER_WRAPPER"] === "1"
212
+ ? null
213
+ : nativeMetadataKey("toolchain", [
214
+ cacheTargetIdentity(driver),
215
+ toolchainEnv,
216
+ driver.argv,
217
+ driver.targetArgs,
218
+ metadataCompiler.cacheIdentity,
219
+ metadataEffectiveCompiler.cacheIdentity,
220
+ rtDir,
221
+ ]);
222
+ if (persistentDriverCache) {
223
+ try {
224
+ toolchainMetadataStamp =
225
+ persistentCache === null || toolchainMetadataKey === null
226
+ ? null
227
+ : await readNativeMetadataStamp(persistentCache.root, toolchainMetadataKey);
228
+ implicitToolchain = toolchainMetadataStamp?.values["implicitToolchain"] ?? null;
229
+ implicitCompileToolchain = toolchainMetadataStamp?.values["implicitCompileToolchain"] ?? null;
230
+ if (implicitToolchain === null ||
231
+ (programShards !== null && implicitCompileToolchain === null)) {
232
+ const fingerprints = await implicitToolchainFingerprints(driver, toolchainEnv);
233
+ implicitToolchain = fingerprints.complete;
234
+ implicitCompileToolchain = fingerprints.compile;
235
+ toolchainMetadataStamp = null;
236
+ }
237
+ let compilerVersion = toolchainMetadataStamp?.values["compilerVersion"];
238
+ if (compilerVersion === undefined) {
239
+ compilerVersion = await ccVersion(driver.argv, toolchainEnv, true);
240
+ }
241
+ if (toolchainMetadataStamp === null &&
242
+ persistentCache !== null &&
243
+ toolchainMetadataKey !== null) {
244
+ if (metadataCompiler !== null && metadataEffectiveCompiler !== null) {
245
+ toolchainMetadataStamp = await publishNativeMetadataStamp(persistentCache.root, toolchainMetadataKey, {
246
+ implicitToolchain,
247
+ ...(implicitCompileToolchain === null ? {} : { implicitCompileToolchain }),
248
+ compilerVersion,
249
+ }, [
250
+ metadataCompiler.canonicalPath,
251
+ metadataEffectiveCompiler.canonicalPath,
252
+ ...fingerprintDependencyPaths(implicitToolchain),
253
+ ...(implicitCompileToolchain === null
254
+ ? []
255
+ : fingerprintDependencyPaths(implicitCompileToolchain)),
256
+ ], [
257
+ implicitToolchain,
258
+ ...(implicitCompileToolchain === null ? [] : [implicitCompileToolchain]),
259
+ ]);
260
+ }
261
+ }
262
+ }
263
+ catch (error) {
264
+ // Cache discovery is best-effort. In particular, a compiler wrapper can
265
+ // compile successfully without implementing the metadata probes.
266
+ if (cacheWarmOnly) {
267
+ throw new Error("native cache warming could not validate the compiler toolchain", {
268
+ cause: error,
269
+ });
270
+ }
271
+ persistentCache = null;
272
+ }
273
+ }
274
+ const vendorBuildIdentity = await currentVendorCacheBuildIdentity(driver, `${toolchainEnv}\0${implicitToolchain ?? "<uncached>"}`);
275
+ // Mutable include/SDK/config inputs can change behind a stable environment
276
+ // spelling. The complete/runtime cache is disabled below; vendor objects
277
+ // must follow the same rule instead of silently surviving in the user cache.
278
+ // A private root gives this invocation the usual vendor build recipe
279
+ // without publishing or reusing those prerequisites.
280
+ const transientVendorRoot = persistentCache !== null && implicitToolchain !== null
281
+ ? null
282
+ : join(tmpdir(), `scriptc-vendor-${process.pid}-${Math.random().toString(36).slice(2)}`);
283
+ const vendorCacheRoot = transientVendorRoot ?? vendorBuildCacheRoot(persistentCache?.root);
284
+ // Every vendor output path is deterministic from pins, flags, driver, and
285
+ // target. Build the command/key from those paths now, but do not materialize
286
+ // them until a complete-binary lookup has missed.
287
+ let engineArchive = dynamic
288
+ ? engineArchivePath(sanitize, driver, vendorBuildIdentity, vendorCacheRoot)
289
+ : null;
290
+ let tlsArchive = tls
291
+ ? tlsArchivePath(sanitize, driver, vendorBuildIdentity, vendorCacheRoot)
292
+ : null;
293
+ // --dynamic + regex shares the archive's libregexp (its host hooks and
294
+ // ours would collide; see scr_regex.c) — the standalone objects are for
295
+ // static builds only.
296
+ let lreObjects = regex && !dynamic ? lreObjectPaths(sanitize, driver, vendorBuildIdentity, vendorCacheRoot) : [];
297
+ // Vendored zlib is the Zig story — default host-clang builds keep the exact
298
+ // historical `-lz` system link (see CcOptions.zlib). The native fetch's
299
+ // gzip decoder rides the same objects/link.
300
+ let zlibObjects = ((opts.zlib ?? false) || nativeFetch) && isZigDriver(driver)
301
+ ? zlibObjectPaths(sanitize, driver, vendorBuildIdentity, vendorCacheRoot)
302
+ : [];
303
+ // The libcurl import stub is likewise CROSS-only — host builds keep the
304
+ // exact historical system `-lcurl` link (see CcOptions.fetch). Curl
305
+ // reference builds only.
306
+ let curlStubDir = curlFetch && driver.target !== null
307
+ ? curlStubDirPath(driver, vendorBuildIdentity, vendorCacheRoot)
308
+ : null;
309
+ const materializeVendorPrerequisites = async (stageRoot, materializeCacheRoot = vendorCacheRoot) => {
310
+ // Preserve source order to avoid multiplying first-build resource
311
+ // pressure when several large vendor sets are cold simultaneously.
312
+ if (dynamic) {
313
+ const cachedArchive = engineArchivePath(sanitize, driver, vendorBuildIdentity, materializeCacheRoot);
314
+ protectCachedArtifact(cacheWarmPaths, cachedArchive);
315
+ const materialize = async () => [
316
+ await ensureEngineArchive(sanitize, driver, vendorBuildIdentity, materializeCacheRoot),
317
+ ];
318
+ const paths = stageRoot === undefined
319
+ ? await materialize()
320
+ : await stageVendorInputs(materialize, join(stageRoot, "engine"));
321
+ engineArchive = paths[0];
322
+ }
323
+ if (tls) {
324
+ const cachedArchive = tlsArchivePath(sanitize, driver, vendorBuildIdentity, materializeCacheRoot);
325
+ protectCachedArtifact(cacheWarmPaths, cachedArchive);
326
+ const materialize = async () => [
327
+ await ensureTlsArchive(sanitize, driver, vendorBuildIdentity, materializeCacheRoot),
328
+ ];
329
+ const paths = stageRoot === undefined
330
+ ? await materialize()
331
+ : await stageVendorInputs(materialize, join(stageRoot, "tls"));
332
+ tlsArchive = paths[0];
333
+ }
334
+ if (regex && !dynamic) {
335
+ for (const object of lreObjectPaths(sanitize, driver, vendorBuildIdentity, materializeCacheRoot))
336
+ protectCachedArtifact(cacheWarmPaths, object);
337
+ const materialize = async () => await ensureLreObjects(sanitize, driver, vendorBuildIdentity, materializeCacheRoot);
338
+ lreObjects =
339
+ stageRoot === undefined
340
+ ? await materialize()
341
+ : await stageVendorInputs(materialize, join(stageRoot, "lre"));
342
+ }
343
+ if (zlibObjects.length > 0) {
344
+ for (const object of zlibObjectPaths(sanitize, driver, vendorBuildIdentity, materializeCacheRoot))
345
+ protectCachedArtifact(cacheWarmPaths, object);
346
+ const materialize = async () => await ensureZlibObjects(sanitize, driver, vendorBuildIdentity, materializeCacheRoot);
347
+ zlibObjects =
348
+ stageRoot === undefined
349
+ ? await materialize()
350
+ : await stageVendorInputs(materialize, join(stageRoot, "zlib"));
351
+ }
352
+ if (curlStubDir !== null) {
353
+ protectCachedArtifact(cacheWarmPaths, join(curlStubDirPath(driver, vendorBuildIdentity, materializeCacheRoot), "libcurl.so"));
354
+ const materialize = async () => [
355
+ join(await ensureCurlStub(driver, vendorBuildIdentity, materializeCacheRoot), "libcurl.so"),
356
+ ];
357
+ const paths = stageRoot === undefined
358
+ ? await materialize()
359
+ : await stageVendorInputs(materialize, join(stageRoot, "curl"));
360
+ curlStubDir = dirname(paths[0]);
361
+ }
362
+ };
363
+ // rt() maps each runtime source's path on the command line: identity for
364
+ // the historical single invocation, cached-.o substitution on cache misses.
365
+ const buildArgs = (rt, build = {}) => [
366
+ "-std=c11",
367
+ ...debugFlags,
368
+ ...driver.targetArgs,
369
+ ...threadArgs,
370
+ ...(sanitize
371
+ ? ["-O1", "-fsanitize=address", "-DSCR_RC_AUDIT"]
372
+ : [optimization === "dev" ? "-O0" : "-O2"]),
373
+ ...executableSectionFlags.compile,
374
+ ...(opts.textDecoderLegacy ? ["-DSCR_TEXT_DECODER_LEGACY"] : []),
375
+ "-fno-math-errno",
376
+ // The runtime object model uses type-punned C: a hierarchy
377
+ // upcast is a raw pointer cast, so one object's header (rc, vt) and
378
+ // fields are read and written through BOTH the base and derived struct
379
+ // types (sc_retain_Derived vs sc_release_Base on the same object).
380
+ // C's effective-type rule calls that UB, and clang's TBAA at -O2
381
+ // reorders/elides the rc updates once everything inlines — an upcast
382
+ // identity compare frees the object while a global still owns it.
383
+ // The LLVM backend emits no TBAA metadata; this flag preserves
384
+ // matching memory semantics in the runtime. Mirrored in the
385
+ // cache-miss cflags below and compileLibArchive — the three option
386
+ // sets must stay in lockstep.
387
+ "-fno-strict-aliasing",
388
+ "-Wno-deprecated-declarations", // ucontext fibers (scr_async.c)
389
+ "-I",
390
+ rtDir,
391
+ ...runtimeSources.map((f) => rt(join(rtDir, f))),
392
+ ...(opts.copying ? [rt(join(rtDir, "scr_copying.c"))] : []),
393
+ ...(opts.fileHandle ? [rt(join(rtDir, "scr_file_handle.c"))] : []),
394
+ // win32 targets compile the libc-shim TU (stpcpy, arc4random_buf,
395
+ // gmtime_r, strcasestr — the _WIN32 block in scr_runtime.h declares
396
+ // them) and link advapi32 (the CSPRNG RtlGenRandom/SystemFunction036,
397
+ // GetUserNameA), iphlpapi (GetAdaptersAddresses behind
398
+ // os.networkInterfaces), and ws2_32 (inet_ntop there; the socket
399
+ // units ride the same import). Never present on the default path, so
400
+ // the historical line cannot change.
401
+ ...(targetPlatform(driver) === "win32"
402
+ ? [rt(join(rtDir, "scr_win.c")), "-ladvapi32", "-liphlpapi", "-lws2_32"]
403
+ : []),
404
+ // musl deliberately has no libc-identification predefine; resolveCc's
405
+ // SCR_MUSL flag and this target-selected TU travel together.
406
+ ...(isMuslTarget(driver) ? [rt(join(rtDir, "scr_musl.c"))] : []),
407
+ ...(regex ? ["-I", vendorEngineDir(), rt(join(rtDir, "scr_regex.c")), ...lreObjects] : []),
408
+ ...(opts.assert || regex || opts.symbol ? [rt(join(rtDir, "scr_assert.c"))] : []),
409
+ ...(opts.inspect
410
+ ? [rt(join(rtDir, "scr_inspect.c")), rt(join(rtDir, "scr_console_native.c"))]
411
+ : []),
412
+ ...(opts.dynInvoke || nativeFetch ? [rt(join(rtDir, "scr_dyn_invoke.c"))] : []),
413
+ ...(opts.dc ? [rt(join(rtDir, "scr_dc.c"))] : []),
414
+ ...(opts.dynAsync || opts.dynInvoke || opts.dc || opts.fileHandle || nativeFetch
415
+ ? [rt(join(rtDir, "scr_async_dyn.c"))]
416
+ : []),
417
+ // The zlib UNIT (scr_zlib.c) gates on zlib.* IR use; the LINK (system
418
+ // libz on the default host-clang build, vendored objects on Zig builds)
419
+ // also serves the native fetch's gzip decoder — spread exactly once.
420
+ ...(opts.zlib
421
+ ? isZigDriver(driver)
422
+ ? ["-I", vendorZlibDir(), rt(join(rtDir, "scr_zlib.c")), ...zlibObjects]
423
+ : [rt(join(rtDir, "scr_zlib.c"))]
424
+ : nativeFetch
425
+ ? isZigDriver(driver)
426
+ ? ["-I", vendorZlibDir(), ...zlibObjects]
427
+ : []
428
+ : []),
429
+ // The zlib ↔ island bridge: only when BOTH halves are in the build
430
+ // (the scr_inspect_island.c pattern) — the emitted main calls its
431
+ // installer exactly then.
432
+ ...(opts.zlib && opts.dynamic ? [rt(join(rtDir, "scr_zlib_island.c"))] : []),
433
+ ...(opts.events ? [rt(join(rtDir, "scr_events.c")), rt(join(rtDir, "scr_readline.c"))] : []),
434
+ ...(opts.emitter ? [rt(join(rtDir, "scr_events_emitter.c"))] : []),
435
+ // The checked-dynamic HANDLE support unit (listener gate + runtime
436
+ // adapter closures): every referencing unit is one of the emitter or
437
+ // net families (http implies net), so handle-free binaries keep
438
+ // their exact size class.
439
+ ...(opts.emitter || net ? [rt(join(rtDir, "scr_dyn_handle.c"))] : []),
440
+ ...(opts.symbol ? [rt(join(rtDir, "scr_symbol.c"))] : []),
441
+ ...(opts.assert && opts.bigint ? [rt(join(rtDir, "scr_bigint_assert.c"))] : []),
442
+ ...(opts.qs ? [rt(join(rtDir, "scr_qs.c"))] : []),
443
+ ...(opts.parseArgs ? [rt(join(rtDir, "scr_util.c"))] : []),
444
+ ...(opts.parseArgs && opts.symbol ? [rt(join(rtDir, "scr_util_compare.c"))] : []),
445
+ ...(opts.parseArgs && opts.inspect && opts.dynAsync
446
+ ? [rt(join(rtDir, "scr_util_style.c"))]
447
+ : []),
448
+ ...(opts.stream ? [rt(join(rtDir, "scr_stream.c"))] : []),
449
+ // The readiness-poller backends (scr_platform.h): kqueue on macOS/BSD,
450
+ // epoll on Linux, WSAPoll on Windows — each TU is empty off its
451
+ // platform, so all three link whenever a poller-using unit does and
452
+ // the others cost nothing (ws2_32 rides the unconditional win32 libs
453
+ // above).
454
+ ...(net || opts.dgram
455
+ ? [
456
+ rt(join(rtDir, "scr_loop_kqueue.c")),
457
+ rt(join(rtDir, "scr_loop_epoll.c")),
458
+ rt(join(rtDir, "scr_loop_wsapoll.c")),
459
+ ]
460
+ : []),
461
+ ...(net ? [rt(join(rtDir, "scr_net.c"))] : []),
462
+ ...(http ? [rt(join(rtDir, "scr_http.c"))] : []),
463
+ ...((opts.http2 ?? false) ? [rt(join(rtDir, "scr_http2.c"))] : []),
464
+ ...(opts.dgram ? [rt(join(rtDir, "scr_dgram.c"))] : []),
465
+ ...(opts.watch ? [rt(join(rtDir, "scr_watch.c"))] : []),
466
+ ...(opts.foreignFfi ? [rt(join(rtDir, "scr_ffi_queue.c"))] : []),
467
+ ...(opts.nodeTest ? [rt(join(rtDir, "scr_test.c"))] : []),
468
+ // The CA-store unit rides its own gate OR the tls one: scr_tls.c
469
+ // references its default-set override unconditionally.
470
+ ...(tlsCa ? [rt(join(rtDir, "scr_tls_ca.c"))] : []),
471
+ ...(tlsArchive
472
+ ? [
473
+ "-I",
474
+ join(vendorTlsDir(), "include"),
475
+ rt(join(rtDir, "scr_tls.c")),
476
+ tlsArchive,
477
+ // mbedTLS's win32 entropy poll is BCryptGenRandom (bcrypt.h).
478
+ // The unconditional win32 libs above do not carry it.
479
+ // Never present on the default path, so the historical TLS
480
+ // link line cannot change.
481
+ ...(targetPlatform(driver) === "win32" ? ["-lbcrypt"] : []),
482
+ ]
483
+ : []),
484
+ // scr_tls_ca.c enumerates and PEM-encodes Windows system-store entries.
485
+ // This is independent of the mbedTLS archive: getCACertificates-only
486
+ // programs need crypt32 too, while TLS programs imply the CA unit.
487
+ ...(tlsCa && targetPlatform(driver) === "win32" ? ["-lcrypt32"] : []),
488
+ // Static fetch is the engine-free half of scr_fetch.c. Dynamic builds
489
+ // compile the same source beside scr_island.c below, where its
490
+ // SCR_DYNAMIC half installs the full web surface.
491
+ ...(nativeFetch && !dynamic ? [rt(join(rtDir, "scr_fetch.c"))] : []),
492
+ ...(engineArchive
493
+ ? [
494
+ "-DSCR_DYNAMIC",
495
+ "-I",
496
+ vendorEngineDir(),
497
+ rt(join(rtDir, "scr_island.c")),
498
+ rt(join(rtDir, "scr_web.c")),
499
+ // The one unit referencing BOTH the island and the inspect
500
+ // engine (insp.jsval): linked exactly when both halves are.
501
+ ...(opts.inspect ? [rt(join(rtDir, "scr_inspect_island.c"))] : []),
502
+ // fetch: the NATIVE bridge by default (its socket/tls/zlib
503
+ // dependencies joined the link above); the curl REFERENCE
504
+ // (SCRIPTC_FETCH_CURL=1) keeps the historical system -lcurl /
505
+ // linux soname-stub arms for one release.
506
+ ...(nativeFetch ? [rt(join(rtDir, "scr_fetch.c"))] : []),
507
+ // The island's node:http/https CLIENT bridge (scr_net_island.c):
508
+ // the one TU referencing both the socket units and the engine —
509
+ // compiled beside the native fetch (scr_fetch_install registers
510
+ // it) and whenever the embedded graph imports node:http/https
511
+ // (the emitted main calls scr_net_island_install exactly then).
512
+ ...(netIsland ? [rt(join(rtDir, "scr_net_island.c"))] : []),
513
+ ...(curlFetch
514
+ ? curlStubDir !== null
515
+ ? [
516
+ "-I",
517
+ join(vendorCurlDir(), "include"),
518
+ rt(join(rtDir, "scr_fetch_curl.c")),
519
+ `-L${curlStubDir}`,
520
+ "-lcurl",
521
+ ]
522
+ : [rt(join(rtDir, "scr_fetch_curl.c")), "-lcurl"]
523
+ : []),
524
+ engineArchive,
525
+ // Linux's libm is appended after every input below for GNU ld's
526
+ // left-to-right archive resolution. Other dynamic targets keep
527
+ // the historical engine-adjacent spelling.
528
+ ...(driver.linkArgs.includes("-lm") ? [] : ["-lm"]),
529
+ // The PE stack reserve, pinned to the 8MB POSIX main-stack
530
+ // geometry ISL_MAIN_STACK_BUDGET is sized against (4MB engine
531
+ // budget + 4MB excursion margin) — quickjs-ng's own CMake makes
532
+ // the same 8MB choice on Windows. Not left to the driver:
533
+ // classic mingw ld defaults to 2MB (which the budget would blow
534
+ // straight past); zig's lld happens to default to 16MB today,
535
+ // but that is nobody's contract.
536
+ ...(targetPlatform(driver) === "win32" ? ["-Wl,--stack,8388608"] : []),
537
+ ]
538
+ : []),
539
+ // A .ll program TU (the LLVM backend) deliberately carries no target
540
+ // triple (byte-stable output; clang supplies the host/SCRIPTC_TARGET
541
+ // triple exactly as it does for .c) — silence the -Woverride-module
542
+ // note about that. Never present for .c inputs, so the historical C
543
+ // command line cannot change by a byte.
544
+ ...(opts.cPath.endsWith(".ll") ? ["-Wno-override-module"] : []),
545
+ ...(build.compilerVisibleSource !== undefined && build.programPath !== undefined
546
+ ? [
547
+ `-ffile-prefix-map=${build.programPath}=${build.compilerVisibleSource}`,
548
+ "-iquote",
549
+ dirname(resolve(build.compilerVisibleSource)),
550
+ ]
551
+ : []),
552
+ build.programPath ?? opts.cPath,
553
+ ...(opts.linkInputs ?? []),
554
+ ...(opts.systemLibraries ?? []).map((name) => `-l${name}`),
555
+ ...(opts.frameworks ?? []).flatMap((name) => ["-framework", name]),
556
+ // GNU ld resolves libraries from left to right and commonly enables
557
+ // --as-needed: host-clang libz must follow scr_zlib.c/scr_fetch.c and every
558
+ // generated/native input that references inflate symbols. Cross
559
+ // and targetless Zig builds use vendored zlib objects in the input section above.
560
+ ...(((opts.zlib ?? false) || nativeFetch) && !isZigDriver(driver) ? ["-lz"] : []),
561
+ // glibc keeps libm separate from libc. This must trail the generated
562
+ // program and every native FFI input because GNU ld resolves archives
563
+ // from left to right.
564
+ ...driver.linkArgs,
565
+ ...executableLinkFlags,
566
+ "-o",
567
+ build.outPath ?? opts.outPath,
568
+ ];
569
+ // Runtime-object flags. Program compilation and dependency discovery add
570
+ // the dev sanitizer override below so both cache identities match reality.
571
+ const cflags = [
572
+ "-std=c11",
573
+ ...debugFlags,
574
+ ...driver.targetArgs,
575
+ ...threadArgs,
576
+ ...(sanitize
577
+ ? ["-O1", "-fsanitize=address", "-DSCR_RC_AUDIT"]
578
+ : [optimization === "dev" ? "-O0" : "-O2"]),
579
+ ...executableSectionFlags.compile,
580
+ ...(opts.textDecoderLegacy ? ["-DSCR_TEXT_DECODER_LEGACY"] : []),
581
+ "-fno-math-errno",
582
+ "-fno-strict-aliasing", // the emitted object model type-puns — see buildArgs
583
+ "-Wno-deprecated-declarations",
584
+ "-I",
585
+ rtDir,
586
+ ...(regex || dynamic ? ["-I", vendorEngineDir()] : []),
587
+ ...(zlibObjects.length > 0 ? ["-I", vendorZlibDir()] : []),
588
+ ...(curlStubDir !== null ? ["-I", join(vendorCurlDir(), "include")] : []),
589
+ ...(tlsArchive !== null ? ["-I", join(vendorTlsDir(), "include")] : []),
590
+ ...(dynamic ? ["-DSCR_DYNAMIC"] : []),
591
+ ];
592
+ // Keep sanitizer runtime objects optimized in both postures. Large dev
593
+ // programs still compile at O0, avoiding an expensive LLVM optimization
594
+ // pass while retaining ASan and reference-count checks in every runtime unit.
595
+ const separateSanitizedProgram = sanitize && optimization === "dev";
596
+ const programCompilerArgs = [
597
+ ...cflags,
598
+ ...(separateSanitizedProgram ? ["-O0"] : []),
599
+ ...(opts.cPath.endsWith(".ll") ? ["-Wno-override-module"] : []),
600
+ ];
601
+ const programSourceExtension = opts.cPath.endsWith(".ll") ? ".ll" : ".c";
602
+ const ccName = driver.argv.join(" ");
603
+ const runClang = async (args) => {
604
+ try {
605
+ await execFileAsync(driver.argv[0] ?? "clang", [...driver.argv.slice(1), ...args]);
606
+ }
607
+ catch (err) {
608
+ const stderr = subprocessFailureDetail(err);
609
+ const guidance = (opts.linkInputs?.length ?? 0) > 0 ||
610
+ (opts.frameworks?.length ?? 0) > 0 ||
611
+ (opts.systemLibraries?.length ?? 0) > 0
612
+ ? "This build includes native FFI link inputs. Check that every symbol and system library exists, " +
613
+ "that archive/object ordering is correct, and that each input matches the selected target."
614
+ : `Check the supplied native source and the selected ${ccName} toolchain.`;
615
+ throw new CcCompileError(ccName, stderr, `${ccName} failed compiling ${opts.cPath}.\n` + `${guidance}\n\n${stderr}`);
616
+ }
617
+ };
618
+ const buildExecutable = async (runtimeInput, build = {}) => {
619
+ if (!separateSanitizedProgram) {
620
+ await runClang(buildArgs(runtimeInput, build));
621
+ return;
622
+ }
623
+ const stage = await mkdtemp(join(tmpdir(), "scriptc-sanitized-program-"));
624
+ try {
625
+ const object = join(stage, "program.o");
626
+ await runClang([
627
+ ...programCompilerArgs,
628
+ ...(build.compilerVisibleSource === undefined
629
+ ? []
630
+ : [
631
+ `-ffile-prefix-map=${build.programPath}=${build.compilerVisibleSource}`,
632
+ "-iquote",
633
+ dirname(resolve(build.compilerVisibleSource)),
634
+ ]),
635
+ "-c",
636
+ build.programPath ?? opts.cPath,
637
+ "-o",
638
+ object,
639
+ ]);
640
+ await runClang(buildArgs(runtimeInput, { programPath: object, outPath: build.outPath ?? opts.outPath }));
641
+ if (darwinDebugSymbols)
642
+ await createDarwinDebugSymbols(build.outPath ?? opts.outPath);
643
+ }
644
+ finally {
645
+ await rm(stage, { recursive: true, force: true });
646
+ }
647
+ };
648
+ const runUncachedBuild = async () => {
649
+ const privateVendorRoot = transientVendorRoot ??
650
+ join(tmpdir(), `scriptc-vendor-fallback-${process.pid}-${Math.random().toString(36).slice(2)}`);
651
+ try {
652
+ await materializeVendorPrerequisites(undefined, privateVendorRoot);
653
+ await buildExecutable((p) => p);
654
+ }
655
+ finally {
656
+ await rm(privateVendorRoot, { recursive: true, force: true }).catch(() => undefined);
657
+ }
658
+ };
659
+ let runtimeCompilerInvocation = null;
660
+ let programCompilerInvocation = null;
661
+ let payloadMetadata = null;
662
+ let compileMetadataStamp = null;
663
+ const compileMetadataKey = persistentCache === null || process.env["SCRIPTC_TEST_TRUST_COMPILER_WRAPPER"] === "1"
664
+ ? null
665
+ : nativeMetadataKey("compile", [
666
+ cacheTargetIdentity(driver),
667
+ toolchainEnv,
668
+ implicitToolchain ?? "<uncached>",
669
+ driver.argv,
670
+ cflags,
671
+ programCompilerArgs,
672
+ programSourceExtension,
673
+ ]);
674
+ if (persistentCache !== null) {
675
+ try {
676
+ // These probes inspect disjoint inputs. Start the payload reads here as
677
+ // well so runtime hashing and clang's dry-run traces overlap instead of
678
+ // forming a serial prelude before every cache lookup.
679
+ payloadMetadata = Promise.all([
680
+ Promise.resolve(toolchainMetadataStamp?.values["compilerVersion"] ??
681
+ ccVersion(driver.argv, toolchainEnv, true)),
682
+ localArtifact === null
683
+ ? runtimeFingerprint(rtDir)
684
+ : Promise.resolve(localArtifact.runtimeHash),
685
+ localArtifact === null ? readFile(opts.cPath) : Promise.resolve(localArtifact.programBytes),
686
+ ]);
687
+ compileMetadataStamp =
688
+ compileMetadataKey === null
689
+ ? null
690
+ : await readNativeMetadataStamp(persistentCache.root, compileMetadataKey);
691
+ if (compileMetadataStamp !== null) {
692
+ runtimeCompilerInvocation = compileMetadataStamp.values["runtimeInvocation"] ?? null;
693
+ programCompilerInvocation = compileMetadataStamp.values["programInvocation"] ?? null;
694
+ if (runtimeCompilerInvocation === null || programCompilerInvocation === null) {
695
+ compileMetadataStamp = null;
696
+ }
697
+ }
698
+ if (compileMetadataStamp === null) {
699
+ const [runtimeInvocation, programInvocation] = await Promise.all([
700
+ effectiveCompilerInvocationFingerprint(driver, toolchainEnv, cflags),
701
+ programSourceExtension === ".ll" || separateSanitizedProgram
702
+ ? effectiveCompilerInvocationFingerprint(driver, toolchainEnv, programCompilerArgs, programSourceExtension)
703
+ : Promise.resolve(null),
704
+ ]);
705
+ runtimeCompilerInvocation = runtimeInvocation;
706
+ programCompilerInvocation = programInvocation ?? runtimeInvocation;
707
+ if (compileMetadataKey !== null) {
708
+ compileMetadataStamp = await publishNativeMetadataStamp(persistentCache.root, compileMetadataKey, {
709
+ runtimeInvocation: runtimeCompilerInvocation,
710
+ programInvocation: programCompilerInvocation,
711
+ }, [
712
+ ...fingerprintDependencyPaths(runtimeCompilerInvocation),
713
+ ...fingerprintDependencyPaths(programCompilerInvocation),
714
+ ], [runtimeCompilerInvocation, programCompilerInvocation]);
715
+ }
716
+ }
717
+ }
718
+ catch (error) {
719
+ // Preserve the uncached build for wrappers that compile successfully but
720
+ // cannot provide a dry-run trace for the real build flavor.
721
+ if (cacheWarmOnly) {
722
+ throw new Error("native cache warming could not validate the compiler invocation", {
723
+ cause: error,
724
+ });
725
+ }
726
+ persistentCache = null;
727
+ }
728
+ }
729
+ if (persistentCache === null) {
730
+ // The direct uncached command is the source-of-truth executable recipe.
731
+ await runUncachedBuild();
732
+ return;
733
+ }
734
+ let cv;
735
+ let fingerprint;
736
+ let cBytes;
737
+ try {
738
+ [cv, fingerprint, cBytes] = await (payloadMetadata ??
739
+ Promise.all([
740
+ ccVersion(driver.argv, toolchainEnv, true),
741
+ runtimeFingerprint(rtDir),
742
+ readFile(opts.cPath),
743
+ ]));
744
+ }
745
+ catch (error) {
746
+ // A version/fingerprint probe is an optimization boundary. If the compiler
747
+ // itself can still compile, preserve the pre-cache behavior instead of
748
+ // surfacing a metadata command's failure as the build result.
749
+ if (cacheWarmOnly) {
750
+ throw new Error("native cache warming could not validate cache inputs", {
751
+ cause: error,
752
+ });
753
+ }
754
+ await runUncachedBuild();
755
+ return;
756
+ }
757
+ // Caller-supplied native inputs can all hide mutable dependencies: `-l`
758
+ // resolves through ambient search paths, while a thin archive or linker
759
+ // script can retain identical top-level bytes as its referenced files are
760
+ // rebuilt. Keep the safe runtime-object cache, but force a fresh final link
761
+ // whenever the caller supplies either form.
762
+ let cacheCompleteArtifact = !cacheWarmOnly &&
763
+ cachePolicy.completeArtifacts &&
764
+ (opts.linkInputs?.length ?? 0) === 0 &&
765
+ (opts.frameworks?.length ?? 0) === 0 &&
766
+ (opts.systemLibraries?.length ?? 0) === 0;
767
+ let programDependencies = null;
768
+ const linkProbeArgs = [
769
+ ...(sanitize ? ["-fsanitize=address"] : []),
770
+ ...threadArgs,
771
+ ...(targetPlatform(driver) === "win32" ? ["-ladvapi32", "-liphlpapi", "-lws2_32"] : []),
772
+ ...(tls && targetPlatform(driver) === "win32" ? ["-lbcrypt"] : []),
773
+ ...(tlsCa && targetPlatform(driver) === "win32" ? ["-lcrypt32"] : []),
774
+ ...(curlFetch && driver.target === null ? ["-lcurl"] : []),
775
+ ...(dynamic && !driver.linkArgs.includes("-lm") ? ["-lm"] : []),
776
+ ...(((opts.zlib ?? false) || nativeFetch) && !isZigDriver(driver) ? ["-lz"] : []),
777
+ ...driver.linkArgs,
778
+ ...executableLinkFlags,
779
+ ];
780
+ // Both the wrapper dry run and dependency trace need the real build's
781
+ // compile/link flag shape: wrappers commonly inject flags or native inputs
782
+ // conditionally on optimization, sanitizer, dynamic, or platform switches.
783
+ const effectiveLinkInvocationArgs = [
784
+ ...(separateSanitizedProgram ? cflags : programCompilerArgs),
785
+ ...(targetPlatform(driver) === "win32" ? ["-ladvapi32", "-liphlpapi", "-lws2_32"] : []),
786
+ ...(tls && targetPlatform(driver) === "win32" ? ["-lbcrypt"] : []),
787
+ ...(tlsCa && targetPlatform(driver) === "win32" ? ["-lcrypt32"] : []),
788
+ ...(curlStubDir !== null ? [`-L${curlStubDir}`] : []),
789
+ ...(curlFetch && driver.target === null ? ["-lcurl"] : []),
790
+ ...(dynamic && !driver.linkArgs.includes("-lm") ? ["-lm"] : []),
791
+ ...(dynamic && targetPlatform(driver) === "win32" ? ["-Wl,--stack,8388608"] : []),
792
+ ...(((opts.zlib ?? false) || nativeFetch) && !isZigDriver(driver) ? ["-lz"] : []),
793
+ ...driver.linkArgs,
794
+ ...executableLinkFlags,
795
+ ];
796
+ // A complete hit is checked before cross-target curl's generated import stub
797
+ // is materialized. Its -L spelling still joins the dry-run identity, while
798
+ // the real trace omits only that not-yet-existing scriptc-owned directory.
799
+ const linkTraceInvocationArgs = curlStubDir === null
800
+ ? effectiveLinkInvocationArgs
801
+ : effectiveLinkInvocationArgs.filter((arg) => arg !== `-L${curlStubDir}`);
802
+ let implicitLinker = null;
803
+ let preBuildDependencies = null;
804
+ let localArtifactDependencyPaths = null;
805
+ let linkMetadataStamp = null;
806
+ const linkMetadataKey = process.env["SCRIPTC_TEST_TRUST_COMPILER_WRAPPER"] === "1"
807
+ ? null
808
+ : nativeMetadataKey("link", [
809
+ cacheTargetIdentity(driver),
810
+ toolchainEnv,
811
+ implicitToolchain ?? "<uncached>",
812
+ runtimeCompilerInvocation ?? "<uncached>",
813
+ programCompilerInvocation ?? "<uncached>",
814
+ driver.argv,
815
+ linkProbeArgs,
816
+ effectiveLinkInvocationArgs,
817
+ linkTraceInvocationArgs,
818
+ ...(programShardMergeIdentity === null ? [] : [programShardMergeIdentity]),
819
+ ]);
820
+ if (cacheCompleteArtifact) {
821
+ try {
822
+ // Header discovery and linker tracing are independent subprocess trees.
823
+ // Running them together removes one complete probe round-trip from both
824
+ // cache hits and ordinary edit/build misses without changing either key.
825
+ linkMetadataStamp =
826
+ linkMetadataKey === null
827
+ ? null
828
+ : await readNativeMetadataStamp(persistentCache.root, linkMetadataKey);
829
+ if (linkMetadataStamp !== null) {
830
+ implicitLinker = linkMetadataStamp.values["implicitLinker"] ?? null;
831
+ if (implicitLinker === null)
832
+ linkMetadataStamp = null;
833
+ }
834
+ [programDependencies, implicitLinker] = await Promise.all([
835
+ translationUnitDependencyFingerprint(driver, programCompilerArgs, opts.cPath, cBytes, toolchainEnv),
836
+ linkMetadataStamp === null
837
+ ? implicitLinkerFingerprint(driver, toolchainEnv, linkProbeArgs, effectiveLinkInvocationArgs, linkTraceInvocationArgs)
838
+ : Promise.resolve(implicitLinker),
839
+ ]);
840
+ if (linkMetadataStamp === null && linkMetadataKey !== null) {
841
+ linkMetadataStamp = await publishNativeMetadataStamp(persistentCache.root, linkMetadataKey, { implicitLinker }, fingerprintDependencyPaths(implicitLinker), [implicitLinker]);
842
+ }
843
+ preBuildDependencies = await snapshotLocalArtifactDependencies([
844
+ ...(await runtimeFingerprintInputPaths(rtDir)),
845
+ ...(toolchainMetadataStamp?.dependencies.map((dependency) => dependency.path) ??
846
+ fingerprintDependencyPaths(implicitToolchain)),
847
+ ...(compileMetadataStamp?.dependencies.map((dependency) => dependency.path) ?? []),
848
+ ...(linkMetadataStamp?.dependencies.map((dependency) => dependency.path) ??
849
+ fingerprintDependencyPaths(implicitLinker)),
850
+ ...fingerprintDependencyPaths(programDependencies),
851
+ ...(programShardMergeIdentity === null
852
+ ? []
853
+ : fingerprintDependencyPaths(programShardMergeIdentity)),
854
+ ]);
855
+ // Every content-bearing fingerprint was computed before this metadata
856
+ // snapshot. Re-read those exact files now so the snapshot cannot certify
857
+ // bytes that changed after hashing but before the final compile starts.
858
+ if (!(await fingerprintDependenciesStillMatch([
859
+ implicitToolchain,
860
+ runtimeCompilerInvocation,
861
+ programCompilerInvocation,
862
+ implicitLinker,
863
+ programDependencies,
864
+ ...(programShardMergeIdentity === null ? [] : [programShardMergeIdentity]),
865
+ ])) ||
866
+ (await runtimeFingerprint(rtDir).catch(() => null)) !== fingerprint ||
867
+ !(await Promise.all([toolchainMetadataStamp, compileMetadataStamp, linkMetadataStamp]
868
+ .filter((stamp) => stamp !== null)
869
+ .map((stamp) => nativeArtifactDependenciesStillMatch(stamp.dependencies)))).every(Boolean)) {
870
+ throw new CacheInputsChangedError();
871
+ }
872
+ if (localArtifact !== null) {
873
+ // Native metadata stamps persist their dependency paths across CLI
874
+ // processes; fingerprintDependencyPaths deliberately does not. Build
875
+ // the output-local stamp from this complete validated snapshot so a
876
+ // source edit in a fresh process cannot replace it with only the two
877
+ // process-local fallback paths.
878
+ localArtifactDependencyPaths = [
879
+ localArtifact.compilerPath,
880
+ dirname(resolve(opts.cPath)),
881
+ ...preBuildDependencies.map((dependency) => dependency.path),
882
+ ];
883
+ }
884
+ }
885
+ catch {
886
+ // Program-header discovery and linker tracing are both required for a
887
+ // complete hit. Runtime objects remain safely cacheable if either probe
888
+ // is unavailable.
889
+ cacheCompleteArtifact = false;
890
+ preBuildDependencies = null;
891
+ localArtifactDependencyPaths = null;
892
+ }
893
+ }
894
+ // Warm-only builds deliberately do not need linker/header identity for a
895
+ // complete executable, but they still need a stable runtime-object key.
896
+ // The ordinary complete-artifact path computes these values above.
897
+ if (cacheWarmOnly && preBuildDependencies === null) {
898
+ try {
899
+ const [dependencies, invocation] = await Promise.all([
900
+ translationUnitDependencyFingerprint(driver, programCompilerArgs, opts.cPath, cBytes, toolchainEnv),
901
+ effectiveCompilerInvocationFingerprint(driver, toolchainEnv, cflags),
902
+ ]);
903
+ programDependencies = dependencies;
904
+ if (runtimeCompilerInvocation === null)
905
+ runtimeCompilerInvocation = invocation;
906
+ }
907
+ catch (error) {
908
+ throw new Error("native cache warming could not validate runtime-object inputs", {
909
+ cause: error,
910
+ });
911
+ }
912
+ }
913
+ const binDir = join(persistentCache.root, "bin");
914
+ let keyHex = null;
915
+ let cachedBin = null;
916
+ if (cacheCompleteArtifact) {
917
+ // The key sees the full command line with the two program-specific paths
918
+ // normalized out. The C bytes are hashed separately; Darwin additionally
919
+ // keys the output basename because ld embeds it in the ad-hoc signature.
920
+ // Runtime and vendor paths stay verbatim — their contents are covered by
921
+ // the fingerprint and the pin.
922
+ const identityArgs = buildArgs((p) => p).map((a) => a === opts.cPath ? "<program.c>" : a === opts.outPath ? "<out>" : a);
923
+ const key = createHash("sha256")
924
+ // Sharded dev builds need the v10 identity below. Canonical single-TU
925
+ // builds retain v9 so adding the opt-in mode does not evict release
926
+ // binaries compiled by an earlier scriptc.
927
+ .update(programShards === null ? "bin-v9\0" : "bin-v10\0")
928
+ .update(cacheTargetIdentity(driver))
929
+ .update("\0")
930
+ .update(toolchainEnv)
931
+ .update("\0")
932
+ .update(implicitToolchain)
933
+ .update("\0")
934
+ .update(runtimeCompilerInvocation)
935
+ .update("\0")
936
+ .update(programCompilerInvocation)
937
+ .update("\0")
938
+ .update(implicitLinker)
939
+ .update("\0")
940
+ .update(programDependencies)
941
+ .update("\0")
942
+ .update(persistentCache.identity)
943
+ .update("\0")
944
+ // Preserve both the spelling clang sees (__FILE__) and the location used
945
+ // to resolve relative includes. The top-level bytes are not sufficient.
946
+ .update(opts.cPath)
947
+ .update("\0")
948
+ .update(resolve(opts.cPath))
949
+ .update("\0")
950
+ .update(targetPlatform(driver) === "darwin" ? basename(opts.outPath) : "<out>")
951
+ .update("\0")
952
+ // The driver spelling joins the version string: `zig cc --version`
953
+ // reports the clang underneath and could otherwise collide with a
954
+ // same-version host clang.
955
+ .update(ccName)
956
+ .update("\0")
957
+ .update(cv)
958
+ .update("\0")
959
+ .update(fingerprint)
960
+ .update("\0")
961
+ .update(identityArgs.join("\x1f"))
962
+ .update("\0")
963
+ .update(cBytes);
964
+ if (programShards !== null) {
965
+ updateProgramShardCacheIdentity(key, programShards, programPublicSymbols, programShardMergeIdentity ?? undefined);
966
+ }
967
+ keyHex = key.digest("hex");
968
+ cachedBin = join(binDir, keyHex);
969
+ const tmpOut = privateSiblingPath(opts.outPath, "bin-hit");
970
+ try {
971
+ // NEVER copy over outPath in place: overwriting an already-executed
972
+ // signed binary invalidates the kernel's per-vnode code-signature cache
973
+ // on macOS and the next exec dies with SIGKILL. Copy to a fresh inode
974
+ // and rename it into place instead.
975
+ if (!(await copyValidCachedFile(cachedBin, tmpOut))) {
976
+ throw new Error("invalid cached executable");
977
+ }
978
+ if (darwinDebugSymbols) {
979
+ const cachedSymbols = `${cachedBin}.dsym`;
980
+ const symbolsCopy = privateSiblingPath(opts.outPath, "dsym-hit");
981
+ try {
982
+ if (!(await copyValidCachedFile(cachedSymbols, symbolsCopy)))
983
+ throw new Error("invalid cached dSYM");
984
+ const bytes = await readFile(symbolsCopy);
985
+ // A concurrent publisher may replace either payload. The sidecar
986
+ // also names its binary digest so a mixed pair always misses.
987
+ if (bytes.subarray(0, 32).toString("hex") !== (await fileDigest(tmpOut)))
988
+ throw new Error("mismatched cached dSYM");
989
+ await installDarwinDebugSymbols(bytes.subarray(32), opts.outPath);
990
+ }
991
+ finally {
992
+ await rm(symbolsCopy, { force: true });
993
+ }
994
+ }
995
+ // Match a fresh linker output under the caller's current umask. Reusing a
996
+ // cache entry populated by a less restrictive shell must not widen access.
997
+ await chmod(tmpOut, 0o777 & ~process.umask());
998
+ await rename(tmpOut, opts.outPath);
999
+ if (localArtifact !== null && localArtifactDependencyPaths !== null) {
1000
+ const stamp = await publishLocalArtifactStamp(localArtifact.stampPath, opts.outPath, localArtifact.key, localArtifactDependencyPaths, [dirname(resolve(opts.cPath))], [persistentCache.root], darwinDebugSymbols).catch(() => null);
1001
+ if (stamp !== null) {
1002
+ await opts.onArtifactReady?.({ dependencies: stamp.dependencies }).catch(() => undefined);
1003
+ }
1004
+ }
1005
+ return; // hit: the program/runtime payload compile and link were skipped
1006
+ }
1007
+ catch {
1008
+ await rm(tmpOut, { force: true }).catch(() => undefined);
1009
+ /* miss — build below, then publish */
1010
+ }
1011
+ }
1012
+ // Miss: link the program's own TU against cached per-flavor runtime objects.
1013
+ // Collect the runtime sources this build actually compiles (the same
1014
+ // conditionals as the command line, by construction).
1015
+ const rtInputs = [];
1016
+ buildArgs((p) => {
1017
+ rtInputs.push(p);
1018
+ return p;
1019
+ });
1020
+ const buildDir = await mkdtemp(join(tmpdir(), "scriptc-cache-build-"));
1021
+ try {
1022
+ await materializeVendorPrerequisites(join(buildDir, "vendor-inputs"));
1023
+ // Freeze the exact bytes used for the key. Generated TUs live at stable
1024
+ // paths under .scriptc/, so two builds can otherwise overwrite that path
1025
+ // between hashing and clang and publish one invocation's code under the
1026
+ // other's key. The prefix map preserves the original __FILE__/debug-file
1027
+ // spelling while clang reads this invocation-private snapshot.
1028
+ const programPath = join(buildDir, `program${programSourceExtension}`);
1029
+ // Preserve the caller-visible basename while keeping Darwin builds on a
1030
+ // private inode: ld uses this spelling as the embedded ad-hoc signing
1031
+ // identifier. Other targets retain the basename-independent cache key.
1032
+ const privateOut = join(buildDir, targetPlatform(driver) === "darwin"
1033
+ ? basename(opts.outPath)
1034
+ : process.platform === "win32"
1035
+ ? "artifact.exe"
1036
+ : "artifact");
1037
+ await writeFile(programPath, cBytes);
1038
+ let objects = null;
1039
+ let cacheInputsStable = true;
1040
+ let strictObjectVerification = null;
1041
+ const objectImplicitToolchainStillMatches = () => {
1042
+ if (preBuildDependencies !== null) {
1043
+ return nativeArtifactDependenciesStillMatch(preBuildDependencies);
1044
+ }
1045
+ // Complete-artifact caching can be disabled by caller-owned native
1046
+ // inputs while the safe runtime-object tier remains active. Preserve its
1047
+ // strict discovery fallback in that posture.
1048
+ strictObjectVerification ??= Promise.all([
1049
+ runtimeFingerprint(rtDir),
1050
+ implicitToolchainFingerprint(driver, toolchainEnv),
1051
+ effectiveCompilerInvocationFingerprint(driver, toolchainEnv, cflags),
1052
+ ]).then(([currentRuntime, currentImplicit, currentInvocation]) => currentRuntime === fingerprint &&
1053
+ currentImplicit === implicitToolchain &&
1054
+ currentInvocation === runtimeCompilerInvocation, () => false);
1055
+ return strictObjectVerification;
1056
+ };
1057
+ try {
1058
+ const cached = await ensureRuntimeObjects(persistentCache.root, driver.argv, cflags, rtInputs, `obj-v5\0${cacheTargetIdentity(driver)}\0${toolchainEnv}\0${implicitToolchain}\0${runtimeCompilerInvocation}\0${ccName}\0${cv}\0${fingerprint}\0`, async () => await objectImplicitToolchainStillMatches(), cacheWarmPaths);
1059
+ objects = await stageRuntimeObjects(cached, join(buildDir, "runtime-objects"));
1060
+ }
1061
+ catch (err) {
1062
+ if (err instanceof CacheInputsChangedError)
1063
+ cacheInputsStable = false;
1064
+ if (cacheWarmOnly) {
1065
+ throw new Error("native cache warming could not persist runtime objects", {
1066
+ cause: err,
1067
+ });
1068
+ }
1069
+ objects = null; // cache trouble is never a build failure
1070
+ }
1071
+ const compileShardedProgram = async () => {
1072
+ if (programShards === null ||
1073
+ programPublicSymbols === undefined ||
1074
+ programCompilerInvocation === null ||
1075
+ implicitCompileToolchain === null)
1076
+ return null;
1077
+ try {
1078
+ const programDependencyHash = programDependencies ??
1079
+ (await translationUnitDependencyFingerprint(driver, programCompilerArgs, opts.cPath, cBytes, toolchainEnv));
1080
+ const stem = basename(opts.cPath, ".ll");
1081
+ const entries = programShards.map((shard, index) => {
1082
+ const sourcePath = join(buildDir, shard.name);
1083
+ const staged = join(buildDir, `${stem}.program-${index.toString().padStart(3, "0")}.o`);
1084
+ const key = createHash("sha256")
1085
+ .update("exe-program-shard-v1\0")
1086
+ .update(cacheTargetIdentity(driver))
1087
+ .update("\0")
1088
+ .update(toolchainEnv)
1089
+ .update("\0")
1090
+ .update(implicitCompileToolchain)
1091
+ .update("\0")
1092
+ .update(programCompilerInvocation)
1093
+ .update("\0")
1094
+ .update(persistentCache.identity)
1095
+ .update("\0")
1096
+ .update(driver.argv.join("\x1f"))
1097
+ .update("\0")
1098
+ .update(cv)
1099
+ .update("\0")
1100
+ .update(fingerprint)
1101
+ .update("\0")
1102
+ .update(programDependencyHash)
1103
+ .update("\0")
1104
+ .update(programCompilerArgs.join("\x1f"))
1105
+ .update("\0")
1106
+ .update(opts.cPath)
1107
+ .update("\0")
1108
+ .update(resolve(opts.cPath))
1109
+ .update("\0")
1110
+ .update(shard.name)
1111
+ .update("\0")
1112
+ .update(shard.source)
1113
+ .digest("hex");
1114
+ return {
1115
+ ...shard,
1116
+ sourcePath,
1117
+ staged,
1118
+ cachePath: join(persistentCache.root, "program-shard", key),
1119
+ missed: false,
1120
+ };
1121
+ });
1122
+ const shardWidth = Math.min(8, availableParallelism());
1123
+ for (let i = 0; i < entries.length; i += shardWidth) {
1124
+ await Promise.all(entries.slice(i, i + shardWidth).map(async (entry) => {
1125
+ await writeFile(entry.sourcePath, entry.source);
1126
+ if (await copyValidCachedFile(entry.cachePath, entry.staged))
1127
+ return;
1128
+ entry.missed = true;
1129
+ await runClang([
1130
+ ...programCompilerArgs,
1131
+ `-ffile-prefix-map=${entry.sourcePath}=${opts.cPath}`,
1132
+ "-c",
1133
+ entry.sourcePath,
1134
+ "-o",
1135
+ entry.staged,
1136
+ ]);
1137
+ }));
1138
+ }
1139
+ const arArgv = isZigDriver(driver) ? [driver.argv[0], "ar"] : ["ar"];
1140
+ const merged = await localizeLibraryObjects(driver, arArgv, buildDir, entries.map((entry) => entry.staged), [], programPublicSymbols, `${stem}.program`);
1141
+ const publishable = entries.filter((entry) => entry.missed);
1142
+ if (publishable.length > 0) {
1143
+ try {
1144
+ const [currentRuntime, currentFingerprints, currentInvocation, currentDependencies, currentCompiler, currentMerge,] = await Promise.all([
1145
+ runtimeFingerprint(rtDir),
1146
+ implicitToolchainFingerprints(driver, toolchainEnv),
1147
+ effectiveCompilerInvocationFingerprint(driver, toolchainEnv, programCompilerArgs, ".ll"),
1148
+ translationUnitDependencyFingerprint(driver, programCompilerArgs, opts.cPath, cBytes, toolchainEnv),
1149
+ ccVersion(driver.argv, toolchainEnv, true),
1150
+ resolveProgramShardMergeIdentity(driver),
1151
+ ]);
1152
+ if (currentRuntime === fingerprint &&
1153
+ currentFingerprints.compile === implicitCompileToolchain &&
1154
+ currentInvocation === programCompilerInvocation &&
1155
+ currentDependencies === programDependencyHash &&
1156
+ currentCompiler === cv &&
1157
+ currentMerge === programShardMergeIdentity) {
1158
+ await Promise.all(publishable.map((entry) => publishCachedFile(entry.staged, entry.cachePath)));
1159
+ }
1160
+ }
1161
+ catch {
1162
+ // The merged object is valid for this invocation; publication is
1163
+ // only an optimization for later edits.
1164
+ }
1165
+ }
1166
+ return merged;
1167
+ }
1168
+ catch {
1169
+ // Sharding is an optimization. Compile/link the canonical TU below if
1170
+ // a target tool, one shard, or relocatable merge is unavailable.
1171
+ return null;
1172
+ }
1173
+ };
1174
+ const shardedProgramObject = await compileShardedProgram();
1175
+ if (programShards !== null && shardedProgramObject === null) {
1176
+ // The canonical TU fallback is valid output, but it must not populate a
1177
+ // cache key describing a successful shard projection/merge.
1178
+ cacheInputsStable = false;
1179
+ }
1180
+ await buildExecutable((p) => objects?.get(p) ?? p, shardedProgramObject === null
1181
+ ? { programPath, outPath: privateOut, compilerVisibleSource: opts.cPath }
1182
+ : { programPath: shardedProgramObject, outPath: privateOut });
1183
+ if (darwinDebugSymbols) {
1184
+ // clang invokes dsymutil when compiling a source TU while linking.
1185
+ // A sharded program is already an object, so run it explicitly while
1186
+ // the merged object and staged runtime inputs still exist.
1187
+ if (shardedProgramObject !== null)
1188
+ await createDarwinDebugSymbols(privateOut);
1189
+ await installDarwinDebugSymbols(await readDarwinDebugSymbols(privateOut), opts.outPath);
1190
+ }
1191
+ await installArtifact(privateOut, opts.outPath);
1192
+ if (cachedBin !== null && keyHex !== null) {
1193
+ // Metadata comparison catches ordinary changes cheaply, but cannot by
1194
+ // itself prove the snapshot was taken from the same bytes hashed into
1195
+ // the key. Recompute every content-bearing identity after the final link
1196
+ // so a header/SDK/compiler change in either pre-build gap cannot publish
1197
+ // new output under an old key.
1198
+ const [currentRuntime, currentImplicit, currentRuntimeInvocation, currentProgramInvocation, currentProgramDependencies, currentLinker, currentCompiler, currentProgramShardMerge,] = await Promise.all([
1199
+ runtimeFingerprint(rtDir).catch(() => null),
1200
+ implicitToolchainFingerprint(driver, toolchainEnv).catch(() => null),
1201
+ effectiveCompilerInvocationFingerprint(driver, toolchainEnv, cflags).catch(() => null),
1202
+ effectiveCompilerInvocationFingerprint(driver, toolchainEnv, programCompilerArgs, programSourceExtension).catch(() => null),
1203
+ translationUnitDependencyFingerprint(driver, programCompilerArgs, opts.cPath, cBytes, toolchainEnv).catch(() => null),
1204
+ implicitLinkerFingerprint(driver, toolchainEnv, linkProbeArgs, effectiveLinkInvocationArgs, linkTraceInvocationArgs).catch(() => null),
1205
+ ccVersion(driver.argv, toolchainEnv, true).catch(() => null),
1206
+ programShards === null
1207
+ ? Promise.resolve(null)
1208
+ : resolveProgramShardMergeIdentity(driver).catch(() => null),
1209
+ ]);
1210
+ cacheInputsStable =
1211
+ cacheInputsStable &&
1212
+ preBuildDependencies !== null &&
1213
+ (await nativeArtifactDependenciesStillMatch(preBuildDependencies)) &&
1214
+ currentRuntime === fingerprint &&
1215
+ currentImplicit === implicitToolchain &&
1216
+ currentRuntimeInvocation === runtimeCompilerInvocation &&
1217
+ currentProgramInvocation === programCompilerInvocation &&
1218
+ currentProgramDependencies === programDependencies &&
1219
+ currentLinker === implicitLinker &&
1220
+ currentCompiler === cv &&
1221
+ currentProgramShardMerge === programShardMergeIdentity;
1222
+ }
1223
+ if (cachedBin !== null && keyHex !== null && cacheInputsStable) {
1224
+ try {
1225
+ // Cache artifacts are data, never execution targets. Publication keeps
1226
+ // generated code and embedded literals private; the hit path reapplies
1227
+ // the caller's current executable mode to its destination copy.
1228
+ await publishCachedFile(privateOut, cachedBin);
1229
+ if (darwinDebugSymbols) {
1230
+ const symbols = privateSiblingPath(privateOut, "debug-symbols");
1231
+ await writeFile(symbols, Buffer.concat([
1232
+ Buffer.from(await fileDigest(privateOut), "hex"),
1233
+ await readDarwinDebugSymbols(privateOut),
1234
+ ]));
1235
+ await publishCachedFile(symbols, `${cachedBin}.dsym`);
1236
+ }
1237
+ }
1238
+ catch {
1239
+ /* publishing is best-effort */
1240
+ }
1241
+ }
1242
+ if (localArtifact !== null &&
1243
+ localArtifactDependencyPaths !== null &&
1244
+ cacheCompleteArtifact &&
1245
+ cacheInputsStable) {
1246
+ const stamp = await publishLocalArtifactStamp(localArtifact.stampPath, opts.outPath, localArtifact.key, localArtifactDependencyPaths, [dirname(resolve(opts.cPath))], [persistentCache.root], darwinDebugSymbols).catch(() => null);
1247
+ if (stamp !== null) {
1248
+ await opts.onArtifactReady?.({ dependencies: stamp.dependencies }).catch(() => undefined);
1249
+ }
1250
+ }
1251
+ }
1252
+ finally {
1253
+ await rm(buildDir, { recursive: true, force: true }).catch(() => undefined);
1254
+ }
1255
+ // Runtime-object population is itself a cache write, including on builds
1256
+ // whose native link inputs disable complete-artifact publication.
1257
+ await pruneCache(persistentCache.root, cacheWarmPaths).catch(() => undefined);
1258
+ }
1259
+ export async function compileC(opts) {
1260
+ clearCcCaches();
1261
+ await compileCInternal(opts, false);
1262
+ if (targetPlatform(resolveCc()) === "darwin" &&
1263
+ !needsDarwinDebugSymbols("darwin", opts.optimization, opts.strip)) {
1264
+ await rm(`${opts.outPath}.dSYM`, { recursive: true, force: true });
1265
+ }
1266
+ }
1267
+ //# sourceMappingURL=executable.js.map